[Main][Task]27080650: Initialization Should Handle Offline Support Dependency (#2358)

* expose send next batch

* update

* channel init

* update

* update

* update

* update

* update

* update

* update

* udpate

* update

* update

* update
This commit is contained in:
Karlie-777 2024-06-07 18:23:00 -07:00 коммит произвёл GitHub
Родитель 04e33d6345
Коммит 46ce9075be
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
13 изменённых файлов: 536 добавлений и 116 удалений

Просмотреть файл

@ -6,6 +6,7 @@ import { IDependencyTelemetry, ContextTagKeys, Event, Trace, Exception, Metric,
import { ITelemetryItem, getGlobal, newId, dumpObj, BaseTelemetryPlugin, IProcessTelemetryContext, __getRegisteredEvents, arrForEach, IConfiguration, FeatureOptInMode } from "@microsoft/applicationinsights-core-js";
import { TelemetryContext } from '@microsoft/applicationinsights-properties-js';
import { CONFIG_ENDPOINT_URL } from '../../../src/InternalConstants';
import { OfflineChannel } from '@microsoft/applicationinsights-offlinechannel-js';
export class ApplicationInsightsTests extends AITestClass {
@ -44,6 +45,7 @@ export class ApplicationInsightsTests extends AITestClass {
private tagKeys = new ContextTagKeys();
private _config;
private _appId: string;
private _ctx: any;
constructor(testName?: string) {
super(testName || "ApplicationInsightsTests");
@ -79,6 +81,7 @@ export class ApplicationInsightsTests extends AITestClass {
this.isFetchPolyfill = fetch["polyfill"];
this.useFakeServer = false;
this._config = this._getTestConfig(this._sessionPrefix);
this._ctx = {};
const init = new ApplicationInsights({
config: this._config
@ -285,8 +288,123 @@ export class ApplicationInsightsTests extends AITestClass {
extConfig = ai.config.extensionConfig["AppInsightsCfgSyncPlugin"];
Assert.equal(extConfig.scheduleFetchTimeout, expectedTimeout, "timeout should be changes dynamically");
ai.unload(false);
if (ai && ai["dependencies"]) {
ai["dependencies"].teardown();
}
}
});
this.testCase({
name: "CfgSync DynamicConfigTests: Offline Support can be added and initialized with endpoint url",
useFakeTimers: true,
test: () => {
this.clock.tick(1);
// if fake timer is turned on, session data will return 0 and will throw sesson not renew error
let offlineChannel = new OfflineChannel();
let config = {
instrumentationKey: "testIKey",
endpointUrl: "testUrl",
extensionConfig:{
["AppInsightsCfgSyncPlugin"]: {
cfgUrl: ""
}
},
extensions:[offlineChannel]
} as IConfiguration & IConfig;
let ai = new ApplicationInsights({config: config});
ai.loadAppInsights();
this.clock.tick(1);
let sendChannel = ai.getPlugin(BreezeChannelIdentifier);
let offlineChannelPlugin = ai.getPlugin("OfflineChannel").plugin;
Assert.equal(sendChannel.plugin.isInitialized(), true, "sender is initialized");
Assert.equal(offlineChannelPlugin.isInitialized(), true, "offline channel is initialized");
let urlConfig = offlineChannelPlugin["_getDbgPlgTargets"]()[0];
Assert.ok(urlConfig, "offline url config is initialized");
ai.unload(false);
if (ai && ai["dependencies"]) {
ai["dependencies"].teardown();
}
offlineChannel.teardown();
}
});
this.testCase({
name: "CfgSync DynamicConfigTests: Offline Support can be added and initialized with channels",
useFakeTimers: true,
test: () => {
this.clock.tick(1);
let offlineChannel = new OfflineChannel();
let config = {
instrumentationKey: "testIKey",
endpointUrl: "testUrl",
extensionConfig:{
["AppInsightsCfgSyncPlugin"]: {
cfgUrl: ""
}
},
channels:[[offlineChannel]]
} as IConfiguration & IConfig;
let ai = new ApplicationInsights({config: config});
ai.loadAppInsights();
this.clock.tick(1);
let sendChannel = ai.getPlugin(BreezeChannelIdentifier);
let offlineChannelPlugin = ai.getPlugin("OfflineChannel").plugin;
Assert.equal(sendChannel.plugin.isInitialized(), true, "sender is initialized");
Assert.equal(offlineChannelPlugin.isInitialized(), true, "offline channel is initialized");
let urlConfig = offlineChannelPlugin["_getDbgPlgTargets"]()[0];
Assert.ok(urlConfig, "offline url config is initialized");
ai.unload(false);
if (ai && ai["dependencies"]) {
ai["dependencies"].teardown();
}
offlineChannel.teardown();
}
});
this.testCase({
name: "CfgSync DynamicConfigTests: Offline Support can be added and initialized without endpoint url",
useFakeTimers: true,
test: () => {
this.clock.tick(1);
let offlineChannel = new OfflineChannel();
let config = {
instrumentationKey: "testIKey",
extensionConfig:{
["AppInsightsCfgSyncPlugin"]: {
cfgUrl: ""
}
},
channels:[[offlineChannel]]
} as IConfiguration & IConfig;
let ai = new ApplicationInsights({config: config});
ai.loadAppInsights();
this.clock.tick(1);
let sendChannel = ai.getPlugin(BreezeChannelIdentifier);
let offlineChannelPlugin = ai.getPlugin("OfflineChannel").plugin;
Assert.equal(sendChannel.plugin.isInitialized(), true, "sender is initialized");
Assert.equal(offlineChannelPlugin.isInitialized(), true, "offline channel is initialized");
let urlConfig = offlineChannelPlugin["_getDbgPlgTargets"]()[0];
Assert.ok(urlConfig, "offline url config is initialized");
ai.unload(false);
if (ai && ai["dependencies"]) {
ai["dependencies"].teardown();
}
offlineChannel.teardown();
}
});
}
public addCDNOverrideTests(): void {
@ -318,6 +436,52 @@ export class ApplicationInsightsTests extends AITestClass {
}
public addAsyncTests(): void {
this.testCaseAsync({
name: "E2E.GenericTests: Send events with offline support",
stepDelay: 1,
steps: [() => {
let offlineChannel = new OfflineChannel();
this._ai.addPlugin(offlineChannel);
this._ctx.offlineChannel = offlineChannel;
}].concat(PollingAssert.createPollingAssert(() => {
let offlineChannel = this._ctx.offlineChannel;
if (offlineChannel && offlineChannel.isInitialized()) {
let urlConfig = offlineChannel["_getDbgPlgTargets"]()[0];
Assert.ok(urlConfig, "offline url config is initialized");
let offlineListener = offlineChannel.getOfflineListener() as any;
Assert.ok(offlineListener, "offlineListener should be initialized");
// online
offlineListener.setOnlineState(1);
let inMemoTimer = offlineChannel["_getDbgPlgTargets"]()[3];
Assert.ok(!inMemoTimer, "offline in memo timer should be null");
this._ai.trackEvent({ name: "online event", properties: { "prop1": "value1" }, measurements: { "measurement1": 200 } });
// set to offline status right way
offlineListener.setOnlineState(2);
this._ai.trackEvent({ name: "offline event", properties: { "prop2": "value2" }, measurements: { "measurement2": 200 } });
inMemoTimer = offlineChannel["_getDbgPlgTargets"]()[3];
Assert.ok(inMemoTimer, "in memo timer should not be null");
let inMemoBatch = offlineChannel["_getDbgPlgTargets"]()[1];
Assert.equal(inMemoBatch && inMemoBatch.count(), 1, "should have one event");
return true
}
return false
}, "Wait for init" + new Date().toISOString(), 60, 1000) as any).concat(this.asserts(1)).concat(() => {
const payloadStr: string[] = this.getPayloadMessages(this.successSpy);
if (payloadStr.length > 0) {
const payload = JSON.parse(payloadStr[0]);
const data = payload.data;
Assert.ok( payload && payload.iKey);
Assert.equal( ApplicationInsightsTests._instrumentationKey,payload.iKey,"payload ikey is not set correctly" );
Assert.ok(data && data.baseData && data.baseData.properties["prop1"]);
Assert.ok(data && data.baseData && data.baseData.measurements["measurement1"]);
}
})
});
this.testCaseAsync({
name: 'E2E.GenericTests: trackEvent sends to backend',
stepDelay: 1,

Просмотреть файл

@ -24,6 +24,7 @@
modules.add("qunit");
modules.add("sinon");
modules.add("pako","./node_modules/pako/dist/pako");
modules.add("@microsoft/applicationinsights-offlinechannel-js"); // Load offline plugin
loadFetchModule(modules, "whatwg-fetch");
loadCommonModules(modules, function () {

Просмотреть файл

@ -32,6 +32,7 @@
},
"devDependencies": {
"@microsoft/ai-test-framework": "0.0.1",
"@microsoft/applicationinsights-offlinechannel-js": "0.2.1",
"@microsoft/applicationinsights-rollup-plugin-uglify3-js": "1.0.0",
"@microsoft/applicationinsights-rollup-es5": "1.0.2",
"sinon": "^7.3.1",

Просмотреть файл

@ -6,6 +6,9 @@ export class TestChannel extends BaseTelemetryPlugin implements IChannelControls
public priority: number = 1001;
public endpoint: string = DEFAULT_BREEZE_ENDPOINT + DEFAULT_BREEZE_PATH;
public isIdle: boolean = true;
public isInitialized = () => {
return true;
}
lastEventAdded: ITelemetryItem;
eventsAdded: ITelemetryItem[] = [];

Просмотреть файл

@ -60,9 +60,11 @@ export class ChannelTests extends AITestClass {
this.testCase({
name: "Channel: Init from core",
useFakeTimers: true,
test: () => {
let channel = new OfflineChannel();
this.core.initialize(this.coreConfig,[channel]);
let onlineChannel = new TestChannel();
this.core.initialize(this.coreConfig,[channel, onlineChannel]);
this.core.addNotificationListener({
eventsDiscarded: (evts, reason) => {
this.evtDiscard += 1;
@ -79,6 +81,8 @@ export class ChannelTests extends AITestClass {
}
});
this.clock.tick(1);
let offlineListener = channel.getOfflineListener() as any;
offlineListener.setOnlineState(1);
let evt = mockTelemetryItem();
@ -99,10 +103,12 @@ export class ChannelTests extends AITestClass {
this.testCase({
name: "Channel: Init from core indexed db",
useFakeTimers: true,
test: () => {
let channel = new OfflineChannel();
let onlineChannel = new TestChannel();
this.coreConfig.extensionConfig = {["OfflineChannel"]: {providers:[eStorageProviders.IndexedDb], inMemoMaxTime: 2000} as IOfflineChannelConfiguration};
this.core.initialize(this.coreConfig,[channel]);
this.core.initialize(this.coreConfig,[channel, onlineChannel]);
this.core.addNotificationListener({
eventsDiscarded: (evts, reason) => {
this.evtDiscard += 1;
@ -118,7 +124,7 @@ export class ChannelTests extends AITestClass {
this.batchDrop += 1;
}
});
this.clock.tick(1);
let offlineListener = channel.getOfflineListener() as any;
offlineListener.setOnlineState(1);
let evt = mockTelemetryItem();
@ -171,6 +177,8 @@ export class ChannelTests extends AITestClass {
this.onDone(() => {
channel.teardown();
});
this.clock.tick(1);
let offlineListener = channel.getOfflineListener() as any;
offlineListener.setOnlineState(1);
let evt = mockTelemetryItem();
@ -295,6 +303,8 @@ export class ChannelTests extends AITestClass {
let channel = new OfflineChannel();
this.coreConfig.extensionConfig = {["OfflineChannel"]: {providers:[eStorageProviders.IndexedDb], inMemoMaxTime: 2000} as IOfflineChannelConfiguration};
channel.initialize(this.coreConfig, this.core,[]);
this.clock.tick(1);
let senderInst = channel["_getDbgPlgTargets"]()[2];
let sender1 = (payload: any, oncomplete: any, sync?: boolean) => {
oncomplete(200, {});
@ -392,6 +402,8 @@ export class ChannelTests extends AITestClass {
}
});
this.clock.tick(1);
Assert.equal(this.evtDiscard, 0, "discard listener notification should not be called");
Assert.equal(this.evtStore, 0, "store listener notification should not be called");
Assert.equal(this.evtSent, 0, "sent listener notification should not be called");
@ -460,6 +472,8 @@ export class ChannelTests extends AITestClass {
this.batchDrop += 1;
}
});
this.clock.tick(1);
let inMemoBatch = channel["_getDbgPlgTargets"]()[1];
this.sandbox.stub((inMemoBatch) as any, "addEvent").callsFake((evt) => {
return false;
@ -517,6 +531,7 @@ export class ChannelTests extends AITestClass {
this.batchDrop += 1;
}
});
this.clock.tick(1);
let senderInst = channel["_getDbgPlgTargets"]()[2];
let sender1 = (payload: any, oncomplete: any, sync?: boolean) => {
@ -581,6 +596,8 @@ export class ChannelTests extends AITestClass {
// make sure in memo time is long enough
this.coreConfig.extensionConfig = {["OfflineChannel"]: {providers:[eStorageProviders.LocalStorage], inMemoMaxTime: 200000} as IOfflineChannelConfiguration};
this.core.initialize(this.coreConfig,[channel, sendChannel]);
this.clock.tick(1);
let offlineListener = channel.getOfflineListener() as any;
offlineListener.setOnlineState(2);

Просмотреть файл

@ -13,7 +13,7 @@ export function runTests() {
new OfflineWebProviderTests().registerTests();
new OfflineDbProviderTests().registerTests();
new OfflineInMemoryBatchTests().registerTests();
new OfflineBatchHandlerTests().registerTests();
new ChannelTests().registerTests();
new OfflineBatchHandlerTests().registerTests();
new Offlinetimer().registerTests();
}

Просмотреть файл

@ -43,6 +43,8 @@ export class Offlinetimer extends AITestClass {
let channel = new OfflineChannel();
let onlineChannel = new TestChannel();
this.core.initialize(this.coreConfig,[channel, onlineChannel]);
this.clock.tick(1);
let offlineListener = channel.getOfflineListener() as any;
// online, processTelemetry is not called
@ -153,6 +155,7 @@ export class Offlinetimer extends AITestClass {
let channel = new OfflineChannel();
let onlineChannel = new TestChannel();
this.core.initialize(this.coreConfig,[channel, onlineChannel]);
this.clock.tick(1);
let offlineListener = channel.getOfflineListener() as any;
// online, processTelemetry is not called

Просмотреть файл

@ -5,7 +5,8 @@ import { EventPersistence } from "@microsoft/applicationinsights-common";
import { INotificationManager, ITelemetryItem, NotificationManager, generateW3CId } from "@microsoft/applicationinsights-core-js";
import { isString, objKeys, strSubstr } from "@nevware21/ts-utils";
import { isValidPersistenceLevel } from "../Providers/IndexDbProvider";
import { IPostTransmissionTelemetryItem } from "../applicationinsights-offlinechannel-js";
import { IPostTransmissionTelemetryItem } from "../Interfaces/IInMemoryBatch";
// Endpoint schema
// <prefix>.<suffix>

Просмотреть файл

@ -102,6 +102,9 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
let _overrideIkey: string;
let _evtsLimitInMemo: number;
let _notificationManager: INotificationManager | undefined;
let _isLazyInit: boolean;
let _dependencyPlugin: IChannelControls;
_initDefaults();
@ -111,6 +114,7 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
_base.initialize(coreConfig, core, extensions);
// keep setting hasInitialized status here to avoid re-initialize
_hasInitialized = true;
_diagLogger = _self.diagLog();
@ -119,31 +123,37 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
_taskScheduler = createTaskScheduler(createAsyncPromise, "offline channel");
_notificationManager = core.getNotifyMgr();
}
try {
_createUrlConfig(coreConfig, core, extensions, pluginChain);
let ctx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);
_sender.initialize(coreConfig, core, ctx, _diagLogger, _primaryChannelId, _self._unloadHooks);
if (_sender) {
_senderInst = _sender.getXhrInst();
_offlineListener.addListener((val)=> {
if (!val.isOnline) {
_sendNextBatchTimer && _sendNextBatchTimer.cancel();
} else {
_setSendNextTimer();
}
});
// need it for first time to confirm if there are any events
_setSendNextTimer();
// TODO: add refresh inside timer until dependency plugin is initialized
scheduleTimeout(() => {
try {
let _dependencyPlugin = _getDependencyPlugin(coreConfig, core);
// make sure that online sender is initialized
if (!_isLazyInit && _dependencyPlugin && _dependencyPlugin.isInitialized()) {
_isLazyInit = true;
_createUrlConfig(coreConfig, core, extensions, pluginChain);
let ctx = _getCoreItemCtx(coreConfig, core, extensions, pluginChain);
_sender.initialize(coreConfig, core, ctx, _diagLogger, _primaryChannelId, _self._unloadHooks);
_senderInst = _sender.getXhrInst();
_offlineListener.addListener((val)=> {
if (!val.isOnline) {
_sendNextBatchTimer && _sendNextBatchTimer.cancel();
} else {
_setSendNextTimer();
}
});
// need it for first time to confirm if there are any events
_setSendNextTimer();
}
} catch (e) {
// eslint-disable-next-line no-empty
}
}, 0);
} catch (e) {
// eslint-disable-next-line no-empty
}
};
_self.processTelemetry = (evt: ITelemetryItem, itemCtx?: IProcessTelemetryContext) => {
@ -231,7 +241,7 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
_self.onunloadFlush = () => {
if (!_paused) {
while (_inMemoBatch.count()) {
while (_inMemoBatch && _inMemoBatch.count()) {
_flushInMemoItems(true);
}
// TODO: unloadprovider might send events out of order
@ -250,13 +260,13 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
_self.sendNextBatch = () => {
// TODO: add callback function
return _setSendNextTimer();
return _offineSupport && _setSendNextTimer();
};
_self._doTeardown = (unloadCtx?: IProcessTelemetryUnloadContext, unloadState?: ITelemetryUnloadState) => {
_self.onunloadFlush();
_offlineListener && runTargetUnload(_offlineListener, false);
let handler = _urlCfg.batchHandler;
let handler = _urlCfg && _urlCfg.batchHandler;
handler && handler.teardown();
_clearScheduledTimer();
_initDefaults();
@ -288,6 +298,8 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
_primaryChannelId = null;
_overrideIkey = null;
_evtsLimitInMemo = null;
_isLazyInit = false;
_dependencyPlugin = null;
}
@ -322,7 +334,7 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
try {
// TODO: add while loop to flush everything
let inMemo = _inMemoBatch;
let evts = inMemo.getItems();
let evts = inMemo && inMemo.getItems();
if (!evts || !evts.length) {
return;
}
@ -524,7 +536,7 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
try {
if (evt) {
return _offineSupport.serialize(evt, _convertUndefined);
return _offineSupport && _offineSupport.serialize(evt, _convertUndefined);
}
} catch (e) {
@ -563,23 +575,16 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
let ctx = createProcessTelemetryContext(null, theConfig, core);
storageConfig = ctx.getExtCfg<IOfflineChannelConfiguration>(_self.identifier, defaultOfflineChannelConfig);
let channelIds = storageConfig.primaryOnlineChannelId;
// let channelIds = storageConfig.primaryOnlineChannelId;
let onlineUrl = null;
if (channelIds && channelIds.length) {
arrForEach(channelIds, (id) => {
let plugin = _self.core.getPlugin<IChannelControls>(id);
let channel = plugin && plugin.plugin;
if (channel) {
_primaryChannelId = id;
if (isFunction(channel.getOfflineSupport)) {
_offineSupport = channel.getOfflineSupport();
onlineUrl = isFunction(_offineSupport && _offineSupport.getUrl) && _offineSupport.getUrl();
}
return;
}
});
let channel = _getDependencyPlugin(coreConfig, core);
if (!!channel.isInitialized() && isFunction(channel.getOfflineSupport)) {
_offineSupport = channel.getOfflineSupport();
onlineUrl = isFunction(_offineSupport && _offineSupport.getUrl) && _offineSupport.getUrl();
} else {
return;
}
_overrideIkey = storageConfig.overrideInstrumentationKey;
let urlConfig: IUrlLocalStorageConfig = _urlCfg;
@ -639,6 +644,28 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
}));
}
function _getDependencyPlugin(coreConfig: IConfiguration & IConfig, core: IAppInsightsCore) {
if (!_dependencyPlugin) {
let ctx = createProcessTelemetryContext(null, coreConfig, core);
let storageConfig = ctx.getExtCfg<IOfflineChannelConfiguration>(_self.identifier, defaultOfflineChannelConfig);
let channelIds = storageConfig.primaryOnlineChannelId;
if (channelIds && channelIds.length) {
arrForEach(channelIds, (id) => {
let plugin = core.getPlugin<IChannelControls>(id);
let channel = plugin && plugin.plugin;
if (channel) {
_dependencyPlugin = channel;
return;
}
});
}
}
return _dependencyPlugin;
}
function _callNotification(evtName: string, theArgs: any[]) {
callNotification(_notificationManager, evtName, theArgs);
@ -752,4 +779,5 @@ export class OfflineChannel extends BaseTelemetryPlugin implements IChannelContr
public sendNextBatch() {
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
}
}

151
common/config/rush/npm-shrinkwrap.json сгенерированный
Просмотреть файл

@ -565,7 +565,7 @@
"node_modules/@rush-temp/1ds-core-js": {
"version": "0.0.0",
"resolved": "file:projects/1ds-core-js.tgz",
"integrity": "sha512-wqTWM5FfPlt1VaWHtPrfJsWhwtHO0f0JgkM2O7kPNosZHB4/h6oUT2/8wrQMa9kht8BXujZe0mgSArIY2fTX5A==",
"integrity": "sha512-/Yn79SncrgzhGMHlOl/nGgScwGVo7fDzp21tAHDsb+3iZgfGiwRrDZP43qwzqWDtP4Bb52QN4gv1Ho0hvukd6g==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -593,7 +593,7 @@
"node_modules/@rush-temp/1ds-post-js": {
"version": "0.0.0",
"resolved": "file:projects/1ds-post-js.tgz",
"integrity": "sha512-Tv2PCInJemZ7aZqFuAmbLOv1cqIgz4yuyjI2WTJ1k1ybrraRUNQd2e/ZYc3cw3dqNQvBDYT9QfHHmo+/4s2rSA==",
"integrity": "sha512-hB2tfsRGZPlfqUUu+MJW0am1S/IryLmiS2XOtFBIcMTl9Y7+9Cj+8Cv8aDat4jGMphVHrTKuEsjatVe0m3+X/A==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -615,7 +615,7 @@
"node_modules/@rush-temp/ai-test-framework": {
"version": "0.0.0",
"resolved": "file:projects/ai-test-framework.tgz",
"integrity": "sha512-Bg6MiDIoWkKtTwDm8A66wZZ1t+09mx8u8SVJyFHcHZB0DptQQ1HoQamfkOA0JzS4oT3cd3bYYjTNJkE5cpYC1w==",
"integrity": "sha512-i8L9al7YfV205G5UQttp7Do21ziq98plr92VSnkVOOmz2dtB0kXtOdLtlVxtDvtZIoiGvo1wpU0j9mPUuLNdBw==",
"dependencies": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-ts-plugin": "^0.4.3",
@ -641,7 +641,7 @@
"node_modules/@rush-temp/applicationinsights-analytics-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-analytics-js.tgz",
"integrity": "sha512-i2CZyUTYgDZ+B2rhSMhHaUYEhFWBDwhHqUbh9n1Dy77S+ZxFi6+nmC6VmW5Z8nM/I5QZ24lKTkrCiI+xRuzuAg==",
"integrity": "sha512-KtNJ0vXfw47B6ORqA1wtgXfSIWA7LQ2LUNMAokNDr6vC/lLjLWPveg8adZo5ptFh5beffzt5n3yQWllvJVGV/A==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -669,7 +669,7 @@
"node_modules/@rush-temp/applicationinsights-cfgsync-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-cfgsync-js.tgz",
"integrity": "sha512-ZaF4qcLxoRQEL3q8YsNgjKLXNjk9crt8eOueSfD3yRpxzSIavkxWPkKqE2eMIKoGrXX+Pg4pL9e7rEx3e3pWUw==",
"integrity": "sha512-TVH5b9aeaKtBgp/afYUHE+2vYuVbuA4Cqewaqu6r/Qds3eQOvUzAfKlur1T+N54gVhcdKkC2aUXUaba23PPRcg==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -698,7 +698,7 @@
"node_modules/@rush-temp/applicationinsights-channel-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-channel-js.tgz",
"integrity": "sha512-vygsnOvKJS3Io+Ewp+mt2Bqhl8Rg9de77w3epIX14kuwRI0QUUxZud176RGoetOZwBFActvbh0Nk36gKkiY/xA==",
"integrity": "sha512-Egx+Qwpb56RzxVSkcB4xR2FvgbJ55gTCzGN6tSOAUz1n34sWlTdV2zBqJjzrTYrhy/7Y/W6Q/VVuocwH9XzubA==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -725,7 +725,7 @@
"node_modules/@rush-temp/applicationinsights-chrome-debug-extension": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-chrome-debug-extension.tgz",
"integrity": "sha512-30AR1ZiaoNfwF8CjbkcWh2g8w8ECYRFNFhnNmJAjhTcqFyUbdBTifTNBKb4AOeog6DDkN6NWZx9qojQLGoFYbg==",
"integrity": "sha512-RCdFP4mjd5pIjglQIfWH8Yls+QiEdioYS5ziHDEZWyIbd+fYx7iHHRVaqKutMb7/T/LqCDUur0Rm/Ah+do+yYw==",
"dependencies": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -759,7 +759,7 @@
"node_modules/@rush-temp/applicationinsights-clickanalytics-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-clickanalytics-js.tgz",
"integrity": "sha512-aXu0vdb+HNR6M+X5JoefcwwMFiQ03DE0St6cM1MEVONpvBC0s17rk245opy65aIulc/7wCPSLYMl4RLSWu+Q0w==",
"integrity": "sha512-AUkKc2bEuPomktpadeO/7nHAww9m+0bDefWkbEZZHvK+KgrG97ZhxzRpl/GGrnb43GujFyl0Hzot0OaPHtYBOA==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -784,7 +784,7 @@
"node_modules/@rush-temp/applicationinsights-common": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-common.tgz",
"integrity": "sha512-8m3iJe1Aa8lPzAJoDiyALTrDh4m89HcoGXGkjrq47wQ1d+GxIF0x/qPO6YvcRErPYDlBO9IzcWRQojCcH0IIlA==",
"integrity": "sha512-d0f4wTojw+nPN+xTB38NH6M6q4xhIVOH15t+HxRLRlWiR/mCxUa/Dsy1dnsRiAZRtNqxD+iFfGYLA9LEDZlwwg==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -810,7 +810,7 @@
"node_modules/@rush-temp/applicationinsights-core-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-core-js.tgz",
"integrity": "sha512-CFC50QjPVur2gnlZxwcZ2Trd6pwxegt8ndiqTRYK6eGsskVcAeDvMi94hZjmh3LLDPSbUbjmw0TBoTM/+F7bJQ==",
"integrity": "sha512-5ixW1SnUFE3DhOPw5YudR3FXG/iKsa6GBEDFlsdiAVV5pkWUkJtfNfg8MBhJRfak8qOt3x/cIPq6RUmxRJyMcg==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -839,7 +839,7 @@
"node_modules/@rush-temp/applicationinsights-debugplugin-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-debugplugin-js.tgz",
"integrity": "sha512-7wOjfBVjhxxmCvj3zF63fqCkqGdKTY8xsjomMRBYpM33NM7rN872gqScYWPMvIzxJsw/o996pfWF51upKc2Ojw==",
"integrity": "sha512-Tqm3AbMzBpweY1J7oDz8NKU1kfVLw73rS4hHsVkAIECepRsrCQVwHjk1H6N1Yf+08H2pdeXmBRGQ90CFX4SEvQ==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -864,7 +864,7 @@
"node_modules/@rush-temp/applicationinsights-dependencies-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-dependencies-js.tgz",
"integrity": "sha512-Jrqd+HFn/DhAlQGvBp4xHnBg/sPj6dcJshUCKs9uoqIitA0rRS9W4D27kJ+GpzAfTe+eDFY3NfkYOj4+ON3nMg==",
"integrity": "sha512-vUGGj1dW27capHkHArIKwz79gnpLZaRtW11Tf9OZj6odeP/2wiH+zZzyS09/NPvcQrA1bUjE+npc5Nj4Sm+1Bg==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -892,7 +892,7 @@
"node_modules/@rush-temp/applicationinsights-example-aisku": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-example-aisku.tgz",
"integrity": "sha512-nC6XEmHj3+zwP9lfg0SG7U6K38THNl7v1NRJlb9KKjWWy1PptK4kJrAxpezF3ttkid9TFHkUdbXafJPHPXEcGA==",
"integrity": "sha512-gC6YuoTK9qfasA5LcgZXNmqkKBxbRFqENuJEkGC8GLh/ooC/02BDei+31deefPQNVPw6cP9V+kDrlLfRwMVCtQ==",
"dependencies": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/ts-utils": ">= 0.11.1 < 2.x",
@ -910,7 +910,7 @@
"node_modules/@rush-temp/applicationinsights-example-cfgsync": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-example-cfgsync.tgz",
"integrity": "sha512-VxuKglaA0xhHc18AYgFDotTve6vPc0Zx2f1dPD+Gc6WXFDKOS6XOQyoG1tyjJ+UUXrwVxz+WGJCFKOtK92W1tw==",
"integrity": "sha512-782hbmCrD723J2N8X5CtJR5bVuivwCzaKaYe/zn23WvuciexMgu5FpbbnpSfbOERlQ9ONN8yZMcjWf/jjj2t/g==",
"dependencies": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -936,7 +936,7 @@
"node_modules/@rush-temp/applicationinsights-example-dependencies": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-example-dependencies.tgz",
"integrity": "sha512-VjBR3vTtdeL2xYAkhJstxsvBaCjjLSX66JngFZd9Shb5OKVQvq9mDlTjqAVPNlJsA9l4mY7zpLdvqjdhopgERg==",
"integrity": "sha512-urNbNsZocNRYLyxGWjsclCReYj77rspXuwlmlEbcPPDG17B/b/G5oSpMX+LLE9OeLWgiWWTjnZ75txcCN1YhVA==",
"dependencies": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/ts-utils": ">= 0.11.1 < 2.x",
@ -954,7 +954,7 @@
"node_modules/@rush-temp/applicationinsights-example-shared-worker": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-example-shared-worker.tgz",
"integrity": "sha512-fgmYRe9TyA102FTrq1/RC1bniA6BTBLNxD5nmQArbjBOCQjuLBDa+m0Y8jxeLS3EznS8w94+P4Dio4H/0ehnxA==",
"integrity": "sha512-vQ7vS5mfy2666gOjFCAVlq0xvu6WGD0/gXO0yfD8UFOmmQVFtQDIYZHQut19xOXbEiEts4nRIpttd7bb5mOuag==",
"dependencies": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -980,7 +980,7 @@
"node_modules/@rush-temp/applicationinsights-js-release-tools": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-js-release-tools.tgz",
"integrity": "sha512-e9jw61D/jeRuLlSL+dQ2bFp8iqw6Q9ZMeboqX0CX0iYwjAPRiN/59ZK66D0UOgggNkqYgSEqgDi+ycw9XRtGnA==",
"integrity": "sha512-6sVB5NMzKj/P9v9UvZlA/IjQSkGeupaDliSt2IZqy+SlR59Hv335Ekz/5f54xMHu+QiARXJATbjX7lDfCMG8qw==",
"dependencies": {
"globby": "^11.0.0",
"grunt": "^1.5.3"
@ -989,7 +989,7 @@
"node_modules/@rush-temp/applicationinsights-offlinechannel-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-offlinechannel-js.tgz",
"integrity": "sha512-2BKj2pwDwoosAH1HKMT9qtYLWEWacTNlYXS2esaw0AbQmfgOWkqU7r5SJ1UuX3elQxjqvwLRMCinzsSL5D98KQ==",
"integrity": "sha512-19H5/5rpWyCkvQ0VAAm5i8DM4K8AyiXdzYlH1TtzgnPquOUxMrnWXEU2evMmTRgOOrbHBi1h6yPe39CpWQbWBA==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -1016,7 +1016,7 @@
"node_modules/@rush-temp/applicationinsights-osplugin-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-osplugin-js.tgz",
"integrity": "sha512-JI1bAUBrqo8lPhUw2GA4+5ZIx9MSfE47+E6S9e4FE+RiPfbXnJ0GnRLOClfqhqYLktl+1k7AFR1JXBtOyACOew==",
"integrity": "sha512-dBwAyZkE0XuRSYaVrqUP2yEDeysqU+2PgMJHXxQeM2yfiET+mtP7ufFAkXt/ug3+spyS43Ds2E5af+1JGp09+A==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -1037,7 +1037,7 @@
"node_modules/@rush-temp/applicationinsights-perfmarkmeasure-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-perfmarkmeasure-js.tgz",
"integrity": "sha512-9XvAQfbB2UmBBn3SRA4Ze+kp8OXLROmH5rHPQsZwOirC7Nu/THzsd3ByvvVuz4WwoRXnm8zCbHPhNVaCT+ep+A==",
"integrity": "sha512-4IsPweGTnoCgjAr5uhng81pPT/g1vAG35Lw6vKVBtAliEAt0JlFpGg5IpB8pMjKJXEY9SkDtV8QKgCw/O5u11Q==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -1062,7 +1062,7 @@
"node_modules/@rush-temp/applicationinsights-properties-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-properties-js.tgz",
"integrity": "sha512-DUUFwf4dwjNjMGYnYfBHrWNGccl9nuwmipWuADtvEfEjRDSX7wC7+ZAuJKTGmaUe6z58sRL+fv03WTK85S4Osg==",
"integrity": "sha512-ZLaIPMK/oaABTzNZGdIjJHNyToOvB3gbkXsyhfZ0fVCS9kXvnhRa06kxuD8oiWUYP5PaOnhW4MGpB6CrWO6MQQ==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -1090,7 +1090,7 @@
"node_modules/@rush-temp/applicationinsights-rollup-es5": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-rollup-es5.tgz",
"integrity": "sha512-1Yw2QKlul+WlTRAHhchUxteaSDaeZjskW1H4R3BT7xv7yGZPi0dp4KtKdKAJZQ+/Z+Zxg4XXOWpuDmv/FYmFtQ==",
"integrity": "sha512-pZV3ytRYW9T6XrXLTRqAt5c23vrywlwfWQ1rrGVh78hlig+Ns/ZJw+jM4JwgSyvce8hcZiR+z1rm0xpKju+oJA==",
"dependencies": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -1114,7 +1114,7 @@
"node_modules/@rush-temp/applicationinsights-rollup-plugin-uglify3-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-rollup-plugin-uglify3-js.tgz",
"integrity": "sha512-gp8gJ52kIbJpkT406+PBS7rtyCSUnc72otGxnwywqWCuBJvO1O+qaOCIJBYL/wYk1lDpMKejDqG94vPSSQtnFg==",
"integrity": "sha512-WtYrHtc+6IgVGmHIahhl2aYUGuloDq9xCX6VuwObLmccrAqmYq0LYbCanjHi8ugorx/zwwQB37yY3y2WfaDGmw==",
"dependencies": {
"@nevware21/grunt-eslint-ts": "^0.2.2",
"@nevware21/grunt-ts-plugin": "^0.4.3",
@ -1135,7 +1135,7 @@
"node_modules/@rush-temp/applicationinsights-shims": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-shims.tgz",
"integrity": "sha512-z9owAp7EJeQwsnWQTjZPV9eEs/8r0w0kqx9YqUK5KmH+8qYOlMnw+Aaw/pQgW2JeMybLSzkRrL4DmIUTxRivew==",
"integrity": "sha512-zKaWFb12Vr+Vi6EiPsHKp+dyQIkbGDptjL9BxVjZviwFHWYdVyZCRDwihi2DuKhWCnsXs1k4cE0fyQAPb+0Qaw==",
"dependencies": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -1157,7 +1157,7 @@
"node_modules/@rush-temp/applicationinsights-teechannel-js": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-teechannel-js.tgz",
"integrity": "sha512-YmUVgNnGCZp/Xi/6MMfhUSX0O4pnRZeQcKlZHlVieBUlQC0hgzNFnft0reOISROi8JYlr9tuRbXP3TCzt/1vzw==",
"integrity": "sha512-hRYwJycPiRggIiGwWHmKDWaWouV09B6ee5Vpdeqr/dFKdgA7s6ezaJwynziWrjKBuuyMW+rLIi3rdOaWSDDjLw==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -1184,7 +1184,7 @@
"node_modules/@rush-temp/applicationinsights-test-module-type-check": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-test-module-type-check.tgz",
"integrity": "sha512-8Oa38KhNm/nQDfJtUeOc5itb2WDLJDin8pEygF+ct6u+bBaf20gJcRHayEL1kE+xqAyiZVBkuHagUXfD9nUALA==",
"integrity": "sha512-Dmp/qykXtLR3sMzRIE/qlbolEvpZpWfGH/2jakzqEc/jlB98IFMjqxmj4wPhIj0upPSdxrBek4WKNtuasl91gA==",
"dependencies": {
"tslib": "*",
"typescript": "^4.9.3"
@ -1193,7 +1193,7 @@
"node_modules/@rush-temp/applicationinsights-web": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-web.tgz",
"integrity": "sha512-oGvg1xTmeV5N3Rwb05IWs0UvgvB1wMXVbk+nb1+CKJkwzbRv29qkz7louDAA0mu/uh//yGsZPE/72uysBkmJmA==",
"integrity": "sha512-tB9XhhQiAKks15DLzrRGBtu8ojH78COeefbqBUQEFDOfUYVF3tP1xnmvI1iWdQlX4vgpPQBjQs2UgGZxPfVReQ==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -1225,7 +1225,7 @@
"node_modules/@rush-temp/applicationinsights-web-basic": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-web-basic.tgz",
"integrity": "sha512-ThqfxrDC9icmMwShueGd5TbNSb3hoUT1747h+YVSWS0RtAPcfEzWciQbA2v8M5njrRIbuPpcAC/WFtvSR/kMpg==",
"integrity": "sha512-jkN5S684ogV45t3FnA9nuy0jO3n8J7tz2OQtqLuoIOLqsIG/bkw5piezq5ppKFMhbXpsDNcWj4DX7i/2YCuPSA==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -1252,12 +1252,12 @@
"node_modules/@rush-temp/applicationinsights-web-config": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-web-config.tgz",
"integrity": "sha512-FwPOZ+esirRqdKg9s7VTxtWqGJ9CQ/gIJ0PfUvTolAF9JZCVw5wQeHD4Tv/KiziZhB50CNaGshnPmLpWGVzo9g=="
"integrity": "sha512-WwlTM/noixyLMqKFBLKa9o88N/2Z3dA9m0R6Qc9UvBNseZqPIpvl1vRMDnmwjMMV6lV3FsmeSmjD7LCJphXF2Q=="
},
"node_modules/@rush-temp/applicationinsights-web-snippet": {
"version": "0.0.0",
"resolved": "file:projects/applicationinsights-web-snippet.tgz",
"integrity": "sha512-i3Pey5xpQ9I89tUduEeqEddndOPC9aatmIx94yPhgDdMek3S8hydq9qJNCA3Ql4B52JvHi881rrSCQnVwp6/SQ==",
"integrity": "sha512-CwWhN4T+KwfgP5b2ZVkGz4EGS73Lsxf7lcb4CWxcG0V9m8Cfi1z0HO5C458vxSrZkj/G7YAnBggiMi0p4MsIhw==",
"dependencies": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -2639,9 +2639,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/electron-to-chromium": {
"version": "1.4.795",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.795.tgz",
"integrity": "sha512-hHo4lK/8wb4NUa+NJYSFyJ0xedNHiR6ylilDtb8NUW9d4dmBFmGiecYEKCEbti1wTNzbKXLfl4hPWEkAFbHYlw=="
"version": "1.4.796",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz",
"integrity": "sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA=="
},
"node_modules/encodeurl": {
"version": "1.0.2",
@ -3262,6 +3262,19 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@ -6710,7 +6723,7 @@
},
"@rush-temp/1ds-core-js": {
"version": "file:projects\\1ds-core-js.tgz",
"integrity": "sha512-wqTWM5FfPlt1VaWHtPrfJsWhwtHO0f0JgkM2O7kPNosZHB4/h6oUT2/8wrQMa9kht8BXujZe0mgSArIY2fTX5A==",
"integrity": "sha512-/Yn79SncrgzhGMHlOl/nGgScwGVo7fDzp21tAHDsb+3iZgfGiwRrDZP43qwzqWDtP4Bb52QN4gv1Ho0hvukd6g==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -6737,7 +6750,7 @@
},
"@rush-temp/1ds-post-js": {
"version": "file:projects\\1ds-post-js.tgz",
"integrity": "sha512-Tv2PCInJemZ7aZqFuAmbLOv1cqIgz4yuyjI2WTJ1k1ybrraRUNQd2e/ZYc3cw3dqNQvBDYT9QfHHmo+/4s2rSA==",
"integrity": "sha512-hB2tfsRGZPlfqUUu+MJW0am1S/IryLmiS2XOtFBIcMTl9Y7+9Cj+8Cv8aDat4jGMphVHrTKuEsjatVe0m3+X/A==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -6758,7 +6771,7 @@
},
"@rush-temp/ai-test-framework": {
"version": "file:projects\\ai-test-framework.tgz",
"integrity": "sha512-Bg6MiDIoWkKtTwDm8A66wZZ1t+09mx8u8SVJyFHcHZB0DptQQ1HoQamfkOA0JzS4oT3cd3bYYjTNJkE5cpYC1w==",
"integrity": "sha512-i8L9al7YfV205G5UQttp7Do21ziq98plr92VSnkVOOmz2dtB0kXtOdLtlVxtDvtZIoiGvo1wpU0j9mPUuLNdBw==",
"requires": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-ts-plugin": "^0.4.3",
@ -6783,7 +6796,7 @@
},
"@rush-temp/applicationinsights-analytics-js": {
"version": "file:projects\\applicationinsights-analytics-js.tgz",
"integrity": "sha512-i2CZyUTYgDZ+B2rhSMhHaUYEhFWBDwhHqUbh9n1Dy77S+ZxFi6+nmC6VmW5Z8nM/I5QZ24lKTkrCiI+xRuzuAg==",
"integrity": "sha512-KtNJ0vXfw47B6ORqA1wtgXfSIWA7LQ2LUNMAokNDr6vC/lLjLWPveg8adZo5ptFh5beffzt5n3yQWllvJVGV/A==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -6810,7 +6823,7 @@
},
"@rush-temp/applicationinsights-cfgsync-js": {
"version": "file:projects\\applicationinsights-cfgsync-js.tgz",
"integrity": "sha512-ZaF4qcLxoRQEL3q8YsNgjKLXNjk9crt8eOueSfD3yRpxzSIavkxWPkKqE2eMIKoGrXX+Pg4pL9e7rEx3e3pWUw==",
"integrity": "sha512-TVH5b9aeaKtBgp/afYUHE+2vYuVbuA4Cqewaqu6r/Qds3eQOvUzAfKlur1T+N54gVhcdKkC2aUXUaba23PPRcg==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -6838,7 +6851,7 @@
},
"@rush-temp/applicationinsights-channel-js": {
"version": "file:projects\\applicationinsights-channel-js.tgz",
"integrity": "sha512-vygsnOvKJS3Io+Ewp+mt2Bqhl8Rg9de77w3epIX14kuwRI0QUUxZud176RGoetOZwBFActvbh0Nk36gKkiY/xA==",
"integrity": "sha512-Egx+Qwpb56RzxVSkcB4xR2FvgbJ55gTCzGN6tSOAUz1n34sWlTdV2zBqJjzrTYrhy/7Y/W6Q/VVuocwH9XzubA==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -6864,7 +6877,7 @@
},
"@rush-temp/applicationinsights-chrome-debug-extension": {
"version": "file:projects\\applicationinsights-chrome-debug-extension.tgz",
"integrity": "sha512-30AR1ZiaoNfwF8CjbkcWh2g8w8ECYRFNFhnNmJAjhTcqFyUbdBTifTNBKb4AOeog6DDkN6NWZx9qojQLGoFYbg==",
"integrity": "sha512-RCdFP4mjd5pIjglQIfWH8Yls+QiEdioYS5ziHDEZWyIbd+fYx7iHHRVaqKutMb7/T/LqCDUur0Rm/Ah+do+yYw==",
"requires": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -6897,7 +6910,7 @@
},
"@rush-temp/applicationinsights-clickanalytics-js": {
"version": "file:projects\\applicationinsights-clickanalytics-js.tgz",
"integrity": "sha512-aXu0vdb+HNR6M+X5JoefcwwMFiQ03DE0St6cM1MEVONpvBC0s17rk245opy65aIulc/7wCPSLYMl4RLSWu+Q0w==",
"integrity": "sha512-AUkKc2bEuPomktpadeO/7nHAww9m+0bDefWkbEZZHvK+KgrG97ZhxzRpl/GGrnb43GujFyl0Hzot0OaPHtYBOA==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -6921,7 +6934,7 @@
},
"@rush-temp/applicationinsights-common": {
"version": "file:projects\\applicationinsights-common.tgz",
"integrity": "sha512-8m3iJe1Aa8lPzAJoDiyALTrDh4m89HcoGXGkjrq47wQ1d+GxIF0x/qPO6YvcRErPYDlBO9IzcWRQojCcH0IIlA==",
"integrity": "sha512-d0f4wTojw+nPN+xTB38NH6M6q4xhIVOH15t+HxRLRlWiR/mCxUa/Dsy1dnsRiAZRtNqxD+iFfGYLA9LEDZlwwg==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -6946,7 +6959,7 @@
},
"@rush-temp/applicationinsights-core-js": {
"version": "file:projects\\applicationinsights-core-js.tgz",
"integrity": "sha512-CFC50QjPVur2gnlZxwcZ2Trd6pwxegt8ndiqTRYK6eGsskVcAeDvMi94hZjmh3LLDPSbUbjmw0TBoTM/+F7bJQ==",
"integrity": "sha512-5ixW1SnUFE3DhOPw5YudR3FXG/iKsa6GBEDFlsdiAVV5pkWUkJtfNfg8MBhJRfak8qOt3x/cIPq6RUmxRJyMcg==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -6974,7 +6987,7 @@
},
"@rush-temp/applicationinsights-debugplugin-js": {
"version": "file:projects\\applicationinsights-debugplugin-js.tgz",
"integrity": "sha512-7wOjfBVjhxxmCvj3zF63fqCkqGdKTY8xsjomMRBYpM33NM7rN872gqScYWPMvIzxJsw/o996pfWF51upKc2Ojw==",
"integrity": "sha512-Tqm3AbMzBpweY1J7oDz8NKU1kfVLw73rS4hHsVkAIECepRsrCQVwHjk1H6N1Yf+08H2pdeXmBRGQ90CFX4SEvQ==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -6998,7 +7011,7 @@
},
"@rush-temp/applicationinsights-dependencies-js": {
"version": "file:projects\\applicationinsights-dependencies-js.tgz",
"integrity": "sha512-Jrqd+HFn/DhAlQGvBp4xHnBg/sPj6dcJshUCKs9uoqIitA0rRS9W4D27kJ+GpzAfTe+eDFY3NfkYOj4+ON3nMg==",
"integrity": "sha512-vUGGj1dW27capHkHArIKwz79gnpLZaRtW11Tf9OZj6odeP/2wiH+zZzyS09/NPvcQrA1bUjE+npc5Nj4Sm+1Bg==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -7025,7 +7038,7 @@
},
"@rush-temp/applicationinsights-example-aisku": {
"version": "file:projects\\applicationinsights-example-aisku.tgz",
"integrity": "sha512-nC6XEmHj3+zwP9lfg0SG7U6K38THNl7v1NRJlb9KKjWWy1PptK4kJrAxpezF3ttkid9TFHkUdbXafJPHPXEcGA==",
"integrity": "sha512-gC6YuoTK9qfasA5LcgZXNmqkKBxbRFqENuJEkGC8GLh/ooC/02BDei+31deefPQNVPw6cP9V+kDrlLfRwMVCtQ==",
"requires": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/ts-utils": ">= 0.11.1 < 2.x",
@ -7042,7 +7055,7 @@
},
"@rush-temp/applicationinsights-example-cfgsync": {
"version": "file:projects\\applicationinsights-example-cfgsync.tgz",
"integrity": "sha512-VxuKglaA0xhHc18AYgFDotTve6vPc0Zx2f1dPD+Gc6WXFDKOS6XOQyoG1tyjJ+UUXrwVxz+WGJCFKOtK92W1tw==",
"integrity": "sha512-782hbmCrD723J2N8X5CtJR5bVuivwCzaKaYe/zn23WvuciexMgu5FpbbnpSfbOERlQ9ONN8yZMcjWf/jjj2t/g==",
"requires": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -7067,7 +7080,7 @@
},
"@rush-temp/applicationinsights-example-dependencies": {
"version": "file:projects\\applicationinsights-example-dependencies.tgz",
"integrity": "sha512-VjBR3vTtdeL2xYAkhJstxsvBaCjjLSX66JngFZd9Shb5OKVQvq9mDlTjqAVPNlJsA9l4mY7zpLdvqjdhopgERg==",
"integrity": "sha512-urNbNsZocNRYLyxGWjsclCReYj77rspXuwlmlEbcPPDG17B/b/G5oSpMX+LLE9OeLWgiWWTjnZ75txcCN1YhVA==",
"requires": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/ts-utils": ">= 0.11.1 < 2.x",
@ -7084,7 +7097,7 @@
},
"@rush-temp/applicationinsights-example-shared-worker": {
"version": "file:projects\\applicationinsights-example-shared-worker.tgz",
"integrity": "sha512-fgmYRe9TyA102FTrq1/RC1bniA6BTBLNxD5nmQArbjBOCQjuLBDa+m0Y8jxeLS3EznS8w94+P4Dio4H/0ehnxA==",
"integrity": "sha512-vQ7vS5mfy2666gOjFCAVlq0xvu6WGD0/gXO0yfD8UFOmmQVFtQDIYZHQut19xOXbEiEts4nRIpttd7bb5mOuag==",
"requires": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -7109,7 +7122,7 @@
},
"@rush-temp/applicationinsights-js-release-tools": {
"version": "file:projects\\applicationinsights-js-release-tools.tgz",
"integrity": "sha512-e9jw61D/jeRuLlSL+dQ2bFp8iqw6Q9ZMeboqX0CX0iYwjAPRiN/59ZK66D0UOgggNkqYgSEqgDi+ycw9XRtGnA==",
"integrity": "sha512-6sVB5NMzKj/P9v9UvZlA/IjQSkGeupaDliSt2IZqy+SlR59Hv335Ekz/5f54xMHu+QiARXJATbjX7lDfCMG8qw==",
"requires": {
"globby": "^11.0.0",
"grunt": "^1.5.3"
@ -7117,7 +7130,7 @@
},
"@rush-temp/applicationinsights-offlinechannel-js": {
"version": "file:projects\\applicationinsights-offlinechannel-js.tgz",
"integrity": "sha512-2BKj2pwDwoosAH1HKMT9qtYLWEWacTNlYXS2esaw0AbQmfgOWkqU7r5SJ1UuX3elQxjqvwLRMCinzsSL5D98KQ==",
"integrity": "sha512-19H5/5rpWyCkvQ0VAAm5i8DM4K8AyiXdzYlH1TtzgnPquOUxMrnWXEU2evMmTRgOOrbHBi1h6yPe39CpWQbWBA==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -7143,7 +7156,7 @@
},
"@rush-temp/applicationinsights-osplugin-js": {
"version": "file:projects\\applicationinsights-osplugin-js.tgz",
"integrity": "sha512-JI1bAUBrqo8lPhUw2GA4+5ZIx9MSfE47+E6S9e4FE+RiPfbXnJ0GnRLOClfqhqYLktl+1k7AFR1JXBtOyACOew==",
"integrity": "sha512-dBwAyZkE0XuRSYaVrqUP2yEDeysqU+2PgMJHXxQeM2yfiET+mtP7ufFAkXt/ug3+spyS43Ds2E5af+1JGp09+A==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -7163,7 +7176,7 @@
},
"@rush-temp/applicationinsights-perfmarkmeasure-js": {
"version": "file:projects\\applicationinsights-perfmarkmeasure-js.tgz",
"integrity": "sha512-9XvAQfbB2UmBBn3SRA4Ze+kp8OXLROmH5rHPQsZwOirC7Nu/THzsd3ByvvVuz4WwoRXnm8zCbHPhNVaCT+ep+A==",
"integrity": "sha512-4IsPweGTnoCgjAr5uhng81pPT/g1vAG35Lw6vKVBtAliEAt0JlFpGg5IpB8pMjKJXEY9SkDtV8QKgCw/O5u11Q==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -7187,7 +7200,7 @@
},
"@rush-temp/applicationinsights-properties-js": {
"version": "file:projects\\applicationinsights-properties-js.tgz",
"integrity": "sha512-DUUFwf4dwjNjMGYnYfBHrWNGccl9nuwmipWuADtvEfEjRDSX7wC7+ZAuJKTGmaUe6z58sRL+fv03WTK85S4Osg==",
"integrity": "sha512-ZLaIPMK/oaABTzNZGdIjJHNyToOvB3gbkXsyhfZ0fVCS9kXvnhRa06kxuD8oiWUYP5PaOnhW4MGpB6CrWO6MQQ==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -7214,7 +7227,7 @@
},
"@rush-temp/applicationinsights-rollup-es5": {
"version": "file:projects\\applicationinsights-rollup-es5.tgz",
"integrity": "sha512-1Yw2QKlul+WlTRAHhchUxteaSDaeZjskW1H4R3BT7xv7yGZPi0dp4KtKdKAJZQ+/Z+Zxg4XXOWpuDmv/FYmFtQ==",
"integrity": "sha512-pZV3ytRYW9T6XrXLTRqAt5c23vrywlwfWQ1rrGVh78hlig+Ns/ZJw+jM4JwgSyvce8hcZiR+z1rm0xpKju+oJA==",
"requires": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -7237,7 +7250,7 @@
},
"@rush-temp/applicationinsights-rollup-plugin-uglify3-js": {
"version": "file:projects\\applicationinsights-rollup-plugin-uglify3-js.tgz",
"integrity": "sha512-gp8gJ52kIbJpkT406+PBS7rtyCSUnc72otGxnwywqWCuBJvO1O+qaOCIJBYL/wYk1lDpMKejDqG94vPSSQtnFg==",
"integrity": "sha512-WtYrHtc+6IgVGmHIahhl2aYUGuloDq9xCX6VuwObLmccrAqmYq0LYbCanjHi8ugorx/zwwQB37yY3y2WfaDGmw==",
"requires": {
"@nevware21/grunt-eslint-ts": "^0.2.2",
"@nevware21/grunt-ts-plugin": "^0.4.3",
@ -7257,7 +7270,7 @@
},
"@rush-temp/applicationinsights-shims": {
"version": "file:projects\\applicationinsights-shims.tgz",
"integrity": "sha512-z9owAp7EJeQwsnWQTjZPV9eEs/8r0w0kqx9YqUK5KmH+8qYOlMnw+Aaw/pQgW2JeMybLSzkRrL4DmIUTxRivew==",
"integrity": "sha512-zKaWFb12Vr+Vi6EiPsHKp+dyQIkbGDptjL9BxVjZviwFHWYdVyZCRDwihi2DuKhWCnsXs1k4cE0fyQAPb+0Qaw==",
"requires": {
"@microsoft/dynamicproto-js": "^2.0.3",
"@nevware21/grunt-eslint-ts": "^0.2.2",
@ -7278,7 +7291,7 @@
},
"@rush-temp/applicationinsights-teechannel-js": {
"version": "file:projects\\applicationinsights-teechannel-js.tgz",
"integrity": "sha512-YmUVgNnGCZp/Xi/6MMfhUSX0O4pnRZeQcKlZHlVieBUlQC0hgzNFnft0reOISROi8JYlr9tuRbXP3TCzt/1vzw==",
"integrity": "sha512-hRYwJycPiRggIiGwWHmKDWaWouV09B6ee5Vpdeqr/dFKdgA7s6ezaJwynziWrjKBuuyMW+rLIi3rdOaWSDDjLw==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -7304,7 +7317,7 @@
},
"@rush-temp/applicationinsights-test-module-type-check": {
"version": "file:projects\\applicationinsights-test-module-type-check.tgz",
"integrity": "sha512-8Oa38KhNm/nQDfJtUeOc5itb2WDLJDin8pEygF+ct6u+bBaf20gJcRHayEL1kE+xqAyiZVBkuHagUXfD9nUALA==",
"integrity": "sha512-Dmp/qykXtLR3sMzRIE/qlbolEvpZpWfGH/2jakzqEc/jlB98IFMjqxmj4wPhIj0upPSdxrBek4WKNtuasl91gA==",
"requires": {
"tslib": "*",
"typescript": "^4.9.3"
@ -7312,7 +7325,7 @@
},
"@rush-temp/applicationinsights-web": {
"version": "file:projects\\applicationinsights-web.tgz",
"integrity": "sha512-oGvg1xTmeV5N3Rwb05IWs0UvgvB1wMXVbk+nb1+CKJkwzbRv29qkz7louDAA0mu/uh//yGsZPE/72uysBkmJmA==",
"integrity": "sha512-tB9XhhQiAKks15DLzrRGBtu8ojH78COeefbqBUQEFDOfUYVF3tP1xnmvI1iWdQlX4vgpPQBjQs2UgGZxPfVReQ==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -7343,7 +7356,7 @@
},
"@rush-temp/applicationinsights-web-basic": {
"version": "file:projects\\applicationinsights-web-basic.tgz",
"integrity": "sha512-ThqfxrDC9icmMwShueGd5TbNSb3hoUT1747h+YVSWS0RtAPcfEzWciQbA2v8M5njrRIbuPpcAC/WFtvSR/kMpg==",
"integrity": "sha512-jkN5S684ogV45t3FnA9nuy0jO3n8J7tz2OQtqLuoIOLqsIG/bkw5piezq5ppKFMhbXpsDNcWj4DX7i/2YCuPSA==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -7369,11 +7382,11 @@
},
"@rush-temp/applicationinsights-web-config": {
"version": "file:projects\\applicationinsights-web-config.tgz",
"integrity": "sha512-FwPOZ+esirRqdKg9s7VTxtWqGJ9CQ/gIJ0PfUvTolAF9JZCVw5wQeHD4Tv/KiziZhB50CNaGshnPmLpWGVzo9g=="
"integrity": "sha512-WwlTM/noixyLMqKFBLKa9o88N/2Z3dA9m0R6Qc9UvBNseZqPIpvl1vRMDnmwjMMV6lV3FsmeSmjD7LCJphXF2Q=="
},
"@rush-temp/applicationinsights-web-snippet": {
"version": "file:projects\\applicationinsights-web-snippet.tgz",
"integrity": "sha512-i3Pey5xpQ9I89tUduEeqEddndOPC9aatmIx94yPhgDdMek3S8hydq9qJNCA3Ql4B52JvHi881rrSCQnVwp6/SQ==",
"integrity": "sha512-CwWhN4T+KwfgP5b2ZVkGz4EGS73Lsxf7lcb4CWxcG0V9m8Cfi1z0HO5C458vxSrZkj/G7YAnBggiMi0p4MsIhw==",
"requires": {
"@microsoft/api-extractor": "^7.40.0",
"@microsoft/dynamicproto-js": "^2.0.3",
@ -8382,9 +8395,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"electron-to-chromium": {
"version": "1.4.795",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.795.tgz",
"integrity": "sha512-hHo4lK/8wb4NUa+NJYSFyJ0xedNHiR6ylilDtb8NUW9d4dmBFmGiecYEKCEbti1wTNzbKXLfl4hPWEkAFbHYlw=="
"version": "1.4.796",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz",
"integrity": "sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA=="
},
"encodeurl": {
"version": "1.0.2",
@ -8870,6 +8883,12 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"optional": true
},
"function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",

Просмотреть файл

@ -2,8 +2,8 @@ import { Assert, AITestClass } from "@microsoft/ai-test-framework";
import * as pako from "pako";
export class AppInsightsCoreSizeCheck extends AITestClass {
private readonly MAX_RAW_SIZE = 63;
private readonly MAX_BUNDLE_SIZE = 63;
private readonly MAX_RAW_SIZE = 64;
private readonly MAX_BUNDLE_SIZE = 64;
private readonly MAX_RAW_DEFLATE_SIZE = 27;
private readonly MAX_BUNDLE_DEFLATE_SIZE = 27;
private readonly rawFilePath = "../dist/es5/applicationinsights-core-js.min.js";

Просмотреть файл

@ -338,6 +338,49 @@ export class ApplicationInsightsCoreTests extends AITestClass {
}
});
this.testCase({
name: "Initialization: channels adds and initialize with offline channel with channel config",
useFakeTimers: true,
test: () => {
let offlineChannelPlugin = new TestOfflineChannelPlugin();
let channelPlugin = new TestChannelPlugin();
const appInsightsCore = new AppInsightsCore();
appInsightsCore.initialize(
{ instrumentationKey: "testIkey", channels: [[offlineChannelPlugin, channelPlugin]] },
[]);
this.clock.tick(1);
const channelQueues = appInsightsCore.getChannels();
Assert.equal(2, channelQueues.length, "Total number of channel queues");
Assert.equal(offlineChannelPlugin._isInit, true, "offline channel is initialized");
}
});
this.testCase({
name: "Initialization: channels adds and initialize with offline channel with extension config",
useFakeTimers: true,
test: () => {
let offlineChannelPlugin = new TestOfflineChannelPlugin();
let channelPlugin = new TestChannelPlugin();
const appInsightsCore = new AppInsightsCore();
appInsightsCore.initialize(
{ instrumentationKey: "testIkey", channels: [[channelPlugin]] },
[offlineChannelPlugin]);
const channelQueues = appInsightsCore.getChannels();
this.clock.tick(1);
Assert.equal(2, channelQueues.length, "Total number of channel queues");
Assert.equal(offlineChannelPlugin._isInit, true, "offline channel is initialized");
}
});
this.testCase({
name: 'ApplicationInsightsCore: track adds required default fields if missing',
useFakeTimers: true,
@ -1183,3 +1226,143 @@ class TrackPlugin implements IPlugin {
this._nextPlugin?.processTelemetry(evt);
}
}
class TestOfflineChannelPlugin implements IChannelControls {
public _nextPlugin: ITelemetryPlugin;
public isFlushInvoked = false;
public isUnloadInvoked = false;
public isTearDownInvoked = false;
public isResumeInvoked = false;
public isPauseInvoked = false;
public version: string = "1.0.33-Beta";
public processTelemetry;
public identifier = "OfflineChannel";
public priority: number = 1000;
public events: ITelemetryItem[] = [];
public _isInit: boolean = false;
constructor() {
this.processTelemetry = this._processTelemetry.bind(this);
}
public pause(): void {
this.isPauseInvoked = true;
}
public resume(): void {
this.isResumeInvoked = true;
}
public teardown(): void {
this.isTearDownInvoked = true;
}
flush(async?: boolean, callBack?: () => void): void {
this.isFlushInvoked = true;
if (callBack) {
callBack();
}
}
onunloadFlush(async?: boolean) {
this.isUnloadInvoked = true;
}
setNextPlugin(next: ITelemetryPlugin) {
this._nextPlugin = next;
}
public initialize = (config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[], pluginChain?: any) => {
setTimeout(() => {
let plugin = core.getPlugin<IChannelControls>("Sender");
let channel = plugin && plugin.plugin;
this._isInit = channel && channel.isInitialized();
}, 0);
}
public isInitialized = () => {
return this._isInit;
}
public _processTelemetry(env: ITelemetryItem) {
this.events.push(env);
// Just calling processTelemetry as this is the original design of the Plugins (as opposed to the newer processNext())
this._nextPlugin?.processTelemetry(env);
}
}
class TestChannelPlugin implements IChannelControls {
public _nextPlugin: ITelemetryPlugin;
public isFlushInvoked = false;
public isUnloadInvoked = false;
public isTearDownInvoked = false;
public isResumeInvoked = false;
public isPauseInvoked = false;
public version: string = "1.0.33-Beta";
public processTelemetry;
public identifier = "Sender";
public priority: number = 1001;
public events: ITelemetryItem[] = [];
public _isInitialized: boolean = false;
constructor() {
this.processTelemetry = this._processTelemetry.bind(this);
}
public pause(): void {
this.isPauseInvoked = true;
}
public resume(): void {
this.isResumeInvoked = true;
}
public teardown(): void {
this.isTearDownInvoked = true;
}
flush(async?: boolean, callBack?: () => void): void {
this.isFlushInvoked = true;
if (callBack) {
callBack();
}
}
onunloadFlush(async?: boolean) {
this.isUnloadInvoked = true;
}
setNextPlugin(next: ITelemetryPlugin) {
this._nextPlugin = next;
}
public initialize = (config: IConfiguration) => {
this._isInitialized = true
}
public isInitialized = () => {
return this._isInitialized
}
public _processTelemetry(env: ITelemetryItem) {
this.events.push(env);
// Just calling processTelemetry as this is the original design of the Plugins (as opposed to the newer processNext())
this._nextPlugin?.processTelemetry(env);
}
}

Просмотреть файл

@ -910,7 +910,7 @@ export class AppInsightsCore<CfgType extends IConfiguration = IConfiguration> im
arrAppend(cfgExtensions, _extensions);
let rootCtx = _createTelCtx();
// Initializing the channels first
if (_channels && _channels.length > 0) {
initializePlugins(rootCtx.createNew(_channels), allExtensions);