Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Beta Part 1: Part of Mega Dynamic Load/Unload support #1766

Merged
merged 1 commit into from
Feb 23, 2022
Merged

Conversation

MSNev
Copy link
Collaborator

@MSNev MSNev commented Feb 19, 2022

  • Refactor TelemetryPluginChain ready to start supporting load/unload
  • Move TelemetryInitializer to BaseCore
  • add getPlugin (will be used for remove/unload this plugin)

@@ -2,7 +2,7 @@ import { AITestClass, Assert } from "@microsoft/ai-test-framework";
import * as pako from "pako";

export class AISKUSizeCheck extends AITestClass {
private readonly MAX_DEFLATE_SIZE = 40;
private readonly MAX_DEFLATE_SIZE = 41;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is going to creep up a bit until I've merged in all changes, then I'll spend some time reducing the total size again.

@@ -350,7 +350,7 @@ export class ApplicationInsightsCoreTests extends AITestClass {

// TODO: test stopPollingInternalLogs
this.testCase({
name: "DiagnosticLogger: stop Polling InternalLogs",
name: "DiagnosticLogger: stop Polling InternalLogs flushes logs when not empty",
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a functional change, to support "unloading" the complete SDK we want to make sure that when polling is stopped any queued messages are flushed.


"use strict";
export interface ILoadedPlugin<T extends IPlugin> {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While this seems like overkill, it will have some additional functions added in future "Parts" of this bigger change added.

* @param telemetryInitializer - The Telemetry Initializer function
* @returns - A ITelemetryInitializerHandler to enable the initializer to be removed
*/
addTelemetryInitializer(telemetryInitializer: TelemetryInitializerFunction): ITelemetryInitializerHandler | void;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is moving the telemetry initializer to the Core so all Sku's will have the telemetry initializer functionality not just the Web Analytics.

* Find and return the (first) plugin with the specified identifier if present
* @param pluginIdentifier
*/
getPlugin<T extends IPlugin = IPlugin>(pluginIdentifier: string): ILoadedPlugin<T>;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Creating a unified "lookup" for a plugin, this happens throughout the code by lookup at the passed config. But as we are going to be updating the loaded extensions that's going to get problematic in later PR's


/**
* Gets the named extension config
*/
getExtCfg: <T>(identifier: string, defaultValue?:T|any) => T;
getExtCfg: <T>(identifier: string, defaultValue?: T | any, mergeDefault?: GetExtCfgMergeType) => T;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving some code that was repeated across the code bases into the central location.

@@ -41,7 +47,7 @@ export interface IProcessTelemetryContext {
* @param field The config field name
* @param defaultValue The default value to return if no defined config exists
*/
getConfig: (identifier: string, field: string, defaultValue?: number | string | boolean) => number | string | boolean;
getConfig: (identifier: string, field: string, defaultValue?: number | string | boolean | string[] | RegExp[] | Function) => number | string | boolean | string[] | RegExp[] | Function;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding some more of the actual types so that users don't need to say "any" or "unknown"

* every plugin has been executed via the callback, any associated onComplete will be called.
* @param callback - The function call for each plugin in the context chain
*/
iterate: <T extends ITelemetryPlugin = ITelemetryPlugin>(callback: (plugin: T) => void) => void;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This iterates over all of the "loaded" plugins, calling the callback function for each plugin

/**
* Set the function to call when the current chain has executed all processNext or unloadNext items.
*/
onComplete: (onComplete: () => void) => void;
Copy link
Collaborator Author

@MSNev MSNev Feb 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding a "callback" that will be called once all of the plugins have been processed with the current context.

* @param telemetryInitializer - The Telemetry Initializer function
* @returns - A ITelemetryInitializerHandler to enable the initializer to be removed
*/
addTelemetryInitializer(telemetryInitializer: TelemetryInitializerFunction): ITelemetryInitializerHandler | void;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updating the signature to return a "handler" for any added initializer, this will be used to allow the caller to "remove" the added initializer, which is required for "unloading" the entire SDK.

/**
* Internal log poller
*/
let _internalLogPoller: number = 0;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to BaseCore.

@@ -231,13 +247,13 @@ export class BaseCore implements IAppInsightsCore {
};

_self.getPerfMgr = (): IPerfManager => {
if (!_perfManager) {
if (!_perfManager && !_cfgPerfManager) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will now support the concept of "config" based perf Manager and manually set perf Manager, as once we start allowing unload / re-initialize and config updates we need to track and keep any manually set one.

}

// Add addTelemetryInitializer
proxyFunctions(_self, () => _telemetryInitializerPlugin, [ "addTelemetryInitializer" ]);
Copy link
Collaborator Author

@MSNev MSNev Feb 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This effectively "adds" the addTelemetryInitializer function to this instance and as we are within the dynamicProto section it will also become a prototype level function.

This helper proxyFunctions avoids a lot of the boilerplate code needed to "forward" the function call and arguments using something like

_self.addTelemetryInitializer = (telemetryInitializer: TelemetryInitializerFunction) => {
    return _telemetryInitializerPlugin.addTelemetryInitializer(telemetryInitializer);
}


_self.getPlugin = _getPlugin;

function _initDefaults() {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just setting up a pattern so that during initial construction and after getting "unloaded" this function will be called this is to avoid having two places in the code and the potential side effects (bugs) thie might cause.

}

// Initialize or Re-initialize the plugins
function _initPluginChain(config: IConfiguration) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One of the big changes in this PR is that the PluginChain can now be created once and reused for every event, previously a new context and chain were created for every event. - That was a long standing performance bug.

The intent of the "context" is so that there is one for each event so as each event is processed through the system it can handle both the old (prior to the context setNextPlugin() only plugins) and the newer ctx.processNext() so that the SDK can keep track of and update any required context.
Such as the upcoming the order of execution completely changing during async (add/remove plugins) operations in the same running plugin and SDK instance.


// Initialize the Channel Queues and the channel plugins first
_channelQueue = objFreeze(createChannelQueues(_channelConfig, allExtensions, config, _self));
_channelControl = createChannelControllerPlugin(_channelQueue, _self);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing the ChannelController class, but keeping the functionality the same by using an interface IChannelController definition, which is a lot smaller for minification.

initializePlugins(_self.getProcessTelContext(), allExtensions);

// Now reset the extensions to just those being managed by Basecore
_self._extensions = objFreeze(sortPlugins(_coreExtensions || [])).slice();
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now freezing the internal extensions to make it immutable, so that during load/unload coding I make sure that when there is an order change internal values are updated correctly.


if (thePlugin) {
theExt = {
plugin: thePlugin as T
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is where I'll be adding extra functions like remove so only this returned plugin is affected.

I'm taking this approach vs adding extra "removeFromCore" on the plugin as it then becomes "messy" for the when plugin needs to implement it's own unload or teardown functionality as this way it doesn't have to tell the core that it's no longer active because it will be the core telling the plugin to unload.

}

function _getPluginChain() {
if (!_pluginChain) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a helper, to lazily create the current chain to avoid initializing a new one every time something changes even if now events are processed.

  • Think adding or removing multiple plugins on the fly.

}
}

function _initDebugListener(config: IConfiguration) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just FYI - the DebugListener is used by the chrome extension and debug plugins to listen to internal debug events. So we can publish critical issues etc.

import { IAppInsightsCore } from "../JavaScriptSDK.Interfaces/IAppInsightsCore"
import { IConfiguration } from "../JavaScriptSDK.Interfaces/IConfiguration";
import { IDiagnosticLogger } from "../JavaScriptSDK.Interfaces/IDiagnosticLogger";
import { IPlugin, ITelemetryPlugin } from "../JavaScriptSDK.Interfaces/ITelemetryPlugin";
import { ITelemetryItem } from "../JavaScriptSDK.Interfaces/ITelemetryItem";
import { IProcessTelemetryContext } from "../JavaScriptSDK.Interfaces/IProcessTelemetryContext";
import { ITelemetryPluginChain } from "../JavaScriptSDK.Interfaces/ITelemetryPluginChain";
import { ProcessTelemetryContext } from "./ProcessTelemetryContext";
import { isFunction, isNullOrUndefined, setValue } from "./HelperFuncs";
import { createProcessTelemetryContext } from "./ProcessTelemetryContext";
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the ProcessTelemetryContext class still exists (for backward compatibility only), changing to no longer directly use it for minification. The class itself uses the createProcessTelemetryContext to generate it's actual usage

_isinitialized = true;
}

_self._addHook = (hooks: IInstrumentHook | IInstrumentHook[]) => {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will be used to "remember" hooks that have been added for the plugin, so when it's unloaded the hooks will be automatically removed, so each plugin doesn't have to remember them itself.


export class ChannelController extends BaseTelemetryPlugin {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Completely removing the class as it's internal only, so no need to keep it as it should never be exposed.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apart from that, it's the same functionality, with some optimizations for minification and preparing to handle the new coming functionality.

waiting --;

if (waiting === 0) {
onComplete && onComplete();
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is one of the critical reasons for adding the onComplete to the context, so that any async operation can complete correctly -- without using Promises (which don't exist in ES3) or adding a polyfill usage here (as that makes the code even larger than it is already)

},
pause: () => {
_processChannelQueue(null, (chainCtx: IProcessTelemetryContext) => {
chainCtx.iterate<IChannelControls>((plugin) => {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This process the current chain and tells each channel (that supports it) to pause.

Previously, the caller had to know and reach down to the individual channel to do this.

chainCtx.iterate<IChannelControls>((plugin) => {
if (plugin.flush) {
waiting ++;
plugin.flush(isAsync, () => {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Investigation note: What to do if a channel doesn't take callback function or call it!!!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will need to re-work this as the default "Sender" for AI actually doesn't handle any of the arguments for flush() so will probably need to add a timeout or just return once all of the channels have had their flush() calls triggered...

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Separating the ChannelController to be a more specific IChannelControls instance so that it can be passed a timeout, also changing the existing flush so the functions can return an optional boolean to indicate that they "will" call the callback. This way if the existing flush returns nothing or false the controller will start a timer (defaulting to 5 seconds) to "wait" for all channels to finish flushing before calling any callback. This is SUPER important for a later PR that will correctly handle unloading the entire SDK.

* The default length is 22 which is 132-bits so almost the same as a GUID but as base64 (the previous default was 5)
* @param maxLength - Optional value to specify the length of the id to be generated, defaults to 22
*/
export function newId(maxLength = 22): string {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved to RandomHelper, to avoid some circular dependencies that are going to crop up later.

@@ -52,12 +52,14 @@ export function randomValue(maxValue: number) {
* @param signed - True to return a signed 32-bit number (-0x80000000..0x7FFFFFFF) otherwise an unsigned one (0x000000..0xFFFFFFFF)
*/
export function random32(signed?: boolean) {
let value;
let value = 0;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update to handle edge cases where the built in random functions can return zero when excessively called. So in this case this will fall back to the none hardware methods.

}
};

_self.unload = (itemCtx: IProcessTelemetryContext, isAsync: boolean): void => {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, this is the signature of the new unload function that each plugin will be able to implement.
I thought I'd removed all of them from this PR (in an attempt to keep this PR smaller).

Copy link
Member

@hectorhdzg hectorhdzg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, it would be good discuss all changes into detail once all parts are ready

- Refactor TelemetryPluginChain ready to start supporting load/unload
- Move TelemetryInitializer to BaseCore
- add getPlugin (will be used for remove)
- Address Channel flush issue
@MSNev MSNev merged commit a703b17 into beta Feb 23, 2022
@MSNev MSNev added this to the 2.(beta).x (probably v2.8.0) milestone Feb 25, 2022
MSNev added a commit that referenced this pull request Mar 31, 2022
…ster (#1791)

* Update version update script to support default "next" release version (major/minor) not just patch (#1756) (#1757)

* Merge [master] branch to [beta] and Enable GitHub Actions on [beta] branch (#1762)

* Update version update script to support default "next" release version (major/minor) not just patch (#1756)

* Additional Performance enhancements to use provided functions rather than internal polyfill's (#1758)

* [BUG] 2.7.4-nightly.2202-03 builds have a bug where objKeys() is not returning the keys #1763 (#1764)

* Enable GitHub Actions on [beta] branch

* Beta Part 1: Part of Mega Dynamic Load/Unload support (#1766)

- Refactor TelemetryPluginChain ready to start supporting load/unload
- Move TelemetryInitializer to BaseCore
- add getPlugin (will be used for remove)
- Address Channel flush issue

* Merge remote-tracking branch 'upstream/master' into beta (#1772)

* Additional Performance enhancements to use provided functions rather than internal polyfill's (#1758)

* [BUG] 2.7.4-nightly.2202-03 builds have a bug where objKeys() is not returning the keys #1763 (#1764)

* Update version.json (#1767)

* [Release] Increase version to 2.7.4 (#1770)

- Updates React Plugin to v3.2.4 (with v2.7.4 as dependency)
- Updates React Native Plugin to 2.4.4 (with v2.7.4 as dependency)
- Updates Chrome Debug Extension to 0.2.4

This release is primarily a performance improvement release where we will now use any built in (or provided polyfill) function
over the internal polyfills for

- String trim()
- String endsWith()
- String startsWith()
- Additional Date toISOString()
- Array isArray()
- Array indexOf()
- Array map()
- Array reduce()
- Object freeze()
- Object seal()

* [Beta] Keep version.json next as minor and resync shrinkwrap
- Fix merge issue

* Beta Part 2: Part of Mega Dynamic Load/Unload support (#1768)

- Add Event Namespace support
- Minification of constant values
- Add part of the unload functionality (required for unified `teardown()` functionality)

* Beta Part 3: Part of Mega Dynamic Load/Unload support (#1780)

* Beta Part 3: Part of Mega Dynamic Load/Unload support
- Add Core SDK Unload support

* Fix telemetry chain for null and undefined

* Beta Part 4: Part of Mega Dynamic Load/Unload support (#1781)

* Beta Part 4: Part of Mega Dynamic Load/Unload support
- Fix function typing issues
- Update Analytics Extension to start supporting teardown / unload (more tests required)
- Adds namespace option to instrumentation hooks (for debugging teardown issues)
- Update AITest Class to log and optionally assert events and hooks that have not been removed
- Add Update callback when plugins are added / removed (will be extended for config updates)
- Some minor minification improvements

* Update comments

* Add missing enum definition

* Update Sender tests

* Beta Part 5: Part of Mega Dynamic Load/Unload support (#1782)

- Add Missing Exports
- AnalyticsPlugin: Implement teardown and initial test validation
- Dependencies Plugin: Implement teardown and initial test validation
- Add flush() to IAppInsightsCore

* AI Beta: Minor bug fixes and additional debug info (#1787)

* Lint fixes: Enable Automatic formatting fixes (#1788)

* Beta Part 6: Part of Mega Dynamic Load/Unload support (#1782) (#1789)

- Add basic minimal unload / teardown support to all remaining components
- Update rollup cleanup dependencies

* Beta: Component Governance Updates to address known dependency issues (#1790)
MSNev added a commit that referenced this pull request Apr 30, 2022
…ster (#1791)

* Update version update script to support default "next" release version (major/minor) not just patch (#1756) (#1757)

* Merge [master] branch to [beta] and Enable GitHub Actions on [beta] branch (#1762)

* Update version update script to support default "next" release version (major/minor) not just patch (#1756)

* Additional Performance enhancements to use provided functions rather than internal polyfill's (#1758)

* [BUG] 2.7.4-nightly.2202-03 builds have a bug where objKeys() is not returning the keys #1763 (#1764)

* Enable GitHub Actions on [beta] branch

* Beta Part 1: Part of Mega Dynamic Load/Unload support (#1766)

- Refactor TelemetryPluginChain ready to start supporting load/unload
- Move TelemetryInitializer to BaseCore
- add getPlugin (will be used for remove)
- Address Channel flush issue

* Merge remote-tracking branch 'upstream/master' into beta (#1772)

* Additional Performance enhancements to use provided functions rather than internal polyfill's (#1758)

* [BUG] 2.7.4-nightly.2202-03 builds have a bug where objKeys() is not returning the keys #1763 (#1764)

* Update version.json (#1767)

* [Release] Increase version to 2.7.4 (#1770)

- Updates React Plugin to v3.2.4 (with v2.7.4 as dependency)
- Updates React Native Plugin to 2.4.4 (with v2.7.4 as dependency)
- Updates Chrome Debug Extension to 0.2.4

This release is primarily a performance improvement release where we will now use any built in (or provided polyfill) function
over the internal polyfills for

- String trim()
- String endsWith()
- String startsWith()
- Additional Date toISOString()
- Array isArray()
- Array indexOf()
- Array map()
- Array reduce()
- Object freeze()
- Object seal()

* [Beta] Keep version.json next as minor and resync shrinkwrap
- Fix merge issue

* Beta Part 2: Part of Mega Dynamic Load/Unload support (#1768)

- Add Event Namespace support
- Minification of constant values
- Add part of the unload functionality (required for unified `teardown()` functionality)

* Beta Part 3: Part of Mega Dynamic Load/Unload support (#1780)

* Beta Part 3: Part of Mega Dynamic Load/Unload support
- Add Core SDK Unload support

* Fix telemetry chain for null and undefined

* Beta Part 4: Part of Mega Dynamic Load/Unload support (#1781)

* Beta Part 4: Part of Mega Dynamic Load/Unload support
- Fix function typing issues
- Update Analytics Extension to start supporting teardown / unload (more tests required)
- Adds namespace option to instrumentation hooks (for debugging teardown issues)
- Update AITest Class to log and optionally assert events and hooks that have not been removed
- Add Update callback when plugins are added / removed (will be extended for config updates)
- Some minor minification improvements

* Update comments

* Add missing enum definition

* Update Sender tests

* Beta Part 5: Part of Mega Dynamic Load/Unload support (#1782)

- Add Missing Exports
- AnalyticsPlugin: Implement teardown and initial test validation
- Dependencies Plugin: Implement teardown and initial test validation
- Add flush() to IAppInsightsCore

* AI Beta: Minor bug fixes and additional debug info (#1787)

* Lint fixes: Enable Automatic formatting fixes (#1788)

* Beta Part 6: Part of Mega Dynamic Load/Unload support (#1782) (#1789)

- Add basic minimal unload / teardown support to all remaining components
- Update rollup cleanup dependencies

* Beta: Component Governance Updates to address known dependency issues (#1790)
MSNev added a commit that referenced this pull request Apr 30, 2022
* Update version.json (#1767)

* [Release] Increase version to 2.7.4 (#1770)

- Updates React Plugin to v3.2.4 (with v2.7.4 as dependency)
- Updates React Native Plugin to 2.4.4 (with v2.7.4 as dependency)
- Updates Chrome Debug Extension to 0.2.4

This release is primarily a performance improvement release where we will now use any built in (or provided polyfill) function
over the internal polyfills for

- String trim()
- String endsWith()
- String startsWith()
- Additional Date toISOString()
- Array isArray()
- Array indexOf()
- Array map()
- Array reduce()
- Object freeze()
- Object seal()

* remove article link in the ReadMe (#1771)

* remove article links

* fix readme error

* Add custom properties argument to useTrackMetric (#1779)

* Merge remote-tracking branch 'upstream/beta' into MSNev/MergeBetaToMaster (#1791)

* Update version update script to support default "next" release version (major/minor) not just patch (#1756) (#1757)

* Merge [master] branch to [beta] and Enable GitHub Actions on [beta] branch (#1762)

* Update version update script to support default "next" release version (major/minor) not just patch (#1756)

* Additional Performance enhancements to use provided functions rather than internal polyfill's (#1758)

* [BUG] 2.7.4-nightly.2202-03 builds have a bug where objKeys() is not returning the keys #1763 (#1764)

* Enable GitHub Actions on [beta] branch

* Beta Part 1: Part of Mega Dynamic Load/Unload support (#1766)

- Refactor TelemetryPluginChain ready to start supporting load/unload
- Move TelemetryInitializer to BaseCore
- add getPlugin (will be used for remove)
- Address Channel flush issue

* Merge remote-tracking branch 'upstream/master' into beta (#1772)

* Additional Performance enhancements to use provided functions rather than internal polyfill's (#1758)

* [BUG] 2.7.4-nightly.2202-03 builds have a bug where objKeys() is not returning the keys #1763 (#1764)

* Update version.json (#1767)

* [Release] Increase version to 2.7.4 (#1770)

- Updates React Plugin to v3.2.4 (with v2.7.4 as dependency)
- Updates React Native Plugin to 2.4.4 (with v2.7.4 as dependency)
- Updates Chrome Debug Extension to 0.2.4

This release is primarily a performance improvement release where we will now use any built in (or provided polyfill) function
over the internal polyfills for

- String trim()
- String endsWith()
- String startsWith()
- Additional Date toISOString()
- Array isArray()
- Array indexOf()
- Array map()
- Array reduce()
- Object freeze()
- Object seal()

* [Beta] Keep version.json next as minor and resync shrinkwrap
- Fix merge issue

* Beta Part 2: Part of Mega Dynamic Load/Unload support (#1768)

- Add Event Namespace support
- Minification of constant values
- Add part of the unload functionality (required for unified `teardown()` functionality)

* Beta Part 3: Part of Mega Dynamic Load/Unload support (#1780)

* Beta Part 3: Part of Mega Dynamic Load/Unload support
- Add Core SDK Unload support

* Fix telemetry chain for null and undefined

* Beta Part 4: Part of Mega Dynamic Load/Unload support (#1781)

* Beta Part 4: Part of Mega Dynamic Load/Unload support
- Fix function typing issues
- Update Analytics Extension to start supporting teardown / unload (more tests required)
- Adds namespace option to instrumentation hooks (for debugging teardown issues)
- Update AITest Class to log and optionally assert events and hooks that have not been removed
- Add Update callback when plugins are added / removed (will be extended for config updates)
- Some minor minification improvements

* Update comments

* Add missing enum definition

* Update Sender tests

* Beta Part 5: Part of Mega Dynamic Load/Unload support (#1782)

- Add Missing Exports
- AnalyticsPlugin: Implement teardown and initial test validation
- Dependencies Plugin: Implement teardown and initial test validation
- Add flush() to IAppInsightsCore

* AI Beta: Minor bug fixes and additional debug info (#1787)

* Lint fixes: Enable Automatic formatting fixes (#1788)

* Beta Part 6: Part of Mega Dynamic Load/Unload support (#1782) (#1789)

- Add basic minimal unload / teardown support to all remaining components
- Update rollup cleanup dependencies

* Beta: Component Governance Updates to address known dependency issues (#1790)

* Master Minification Improvements (#1793)

* Master Minification Improvements
- Remove Generated classes
- And Convert to interfaces rather than classes

* Update version.json so next is a minor release

* Minification - Change to only use const enums internally (#1796)

- Remove Angular config from CodeQL

* More Common Minification Updates (#1798)

- SeverityLevel => const enum
- RequestHeaders
- TraceParent

* Enable fetch automatic dependency tracking by default (#1468)

* Finalize and Update the processTelemetry helper functions (#1805)

* [Release] Increase version to v2.8.0 (#1806)

* [BUG] Adding new on-by-default telemetry is a breaking change, and should involve a major version bump #1808 (#1809)

* v2.8.0 has incompatible TypeScript 3.x type declaration (#1810)

- [BUG] Angular project doesn't build after install latest version v.2.8.0 #1807

* [BUG] Browser exceptions are no longer automatically tracked after 2.8.0 #1812 (#1815)

* [Release] Increase version to 2.8.1 (#1816)

* [BUG] v2.8.1 with a Hosted IE environment fails to initialize for a hosted instance of IE #1822 (#1824)

[BUG] IE8 Support was broken by several components #1823

* [Release] Increase version to 2.7.4 (#1770)

- Updates React Plugin to v3.2.4 (with v2.7.4 as dependency)
- Updates React Native Plugin to 2.4.4 (with v2.7.4 as dependency)
- Updates Chrome Debug Extension to 0.2.4

This release is primarily a performance improvement release where we will now use any built in (or provided polyfill) function
over the internal polyfills for

- String trim()
- String endsWith()
- String startsWith()
- Additional Date toISOString()
- Array isArray()
- Array indexOf()
- Array map()
- Array reduce()
- Object freeze()
- Object seal()

* Merge remote-tracking branch 'upstream/beta' into MSNev/MergeBetaToMaster (#1791)

* Update version update script to support default "next" release version (major/minor) not just patch (#1756) (#1757)

* Merge [master] branch to [beta] and Enable GitHub Actions on [beta] branch (#1762)

* Update version update script to support default "next" release version (major/minor) not just patch (#1756)

* Additional Performance enhancements to use provided functions rather than internal polyfill's (#1758)

* [BUG] 2.7.4-nightly.2202-03 builds have a bug where objKeys() is not returning the keys #1763 (#1764)

* Enable GitHub Actions on [beta] branch

* Beta Part 1: Part of Mega Dynamic Load/Unload support (#1766)

- Refactor TelemetryPluginChain ready to start supporting load/unload
- Move TelemetryInitializer to BaseCore
- add getPlugin (will be used for remove)
- Address Channel flush issue

* Merge remote-tracking branch 'upstream/master' into beta (#1772)

* Additional Performance enhancements to use provided functions rather than internal polyfill's (#1758)

* [BUG] 2.7.4-nightly.2202-03 builds have a bug where objKeys() is not returning the keys #1763 (#1764)

* Update version.json (#1767)

* [Release] Increase version to 2.7.4 (#1770)

- Updates React Plugin to v3.2.4 (with v2.7.4 as dependency)
- Updates React Native Plugin to 2.4.4 (with v2.7.4 as dependency)
- Updates Chrome Debug Extension to 0.2.4

This release is primarily a performance improvement release where we will now use any built in (or provided polyfill) function
over the internal polyfills for

- String trim()
- String endsWith()
- String startsWith()
- Additional Date toISOString()
- Array isArray()
- Array indexOf()
- Array map()
- Array reduce()
- Object freeze()
- Object seal()

* [Beta] Keep version.json next as minor and resync shrinkwrap
- Fix merge issue

* Beta Part 2: Part of Mega Dynamic Load/Unload support (#1768)

- Add Event Namespace support
- Minification of constant values
- Add part of the unload functionality (required for unified `teardown()` functionality)

* Beta Part 3: Part of Mega Dynamic Load/Unload support (#1780)

* Beta Part 3: Part of Mega Dynamic Load/Unload support
- Add Core SDK Unload support

* Fix telemetry chain for null and undefined

* Beta Part 4: Part of Mega Dynamic Load/Unload support (#1781)

* Beta Part 4: Part of Mega Dynamic Load/Unload support
- Fix function typing issues
- Update Analytics Extension to start supporting teardown / unload (more tests required)
- Adds namespace option to instrumentation hooks (for debugging teardown issues)
- Update AITest Class to log and optionally assert events and hooks that have not been removed
- Add Update callback when plugins are added / removed (will be extended for config updates)
- Some minor minification improvements

* Update comments

* Add missing enum definition

* Update Sender tests

* Beta Part 5: Part of Mega Dynamic Load/Unload support (#1782)

- Add Missing Exports
- AnalyticsPlugin: Implement teardown and initial test validation
- Dependencies Plugin: Implement teardown and initial test validation
- Add flush() to IAppInsightsCore

* AI Beta: Minor bug fixes and additional debug info (#1787)

* Lint fixes: Enable Automatic formatting fixes (#1788)

* Beta Part 6: Part of Mega Dynamic Load/Unload support (#1782) (#1789)

- Add basic minimal unload / teardown support to all remaining components
- Update rollup cleanup dependencies

* Beta: Component Governance Updates to address known dependency issues (#1790)

* Master Minification Improvements (#1793)

* Master Minification Improvements
- Remove Generated classes
- And Convert to interfaces rather than classes

* Update version.json so next is a minor release

* Minification - Change to only use const enums internally (#1796)

- Remove Angular config from CodeQL

* More Common Minification Updates (#1798)

- SeverityLevel => const enum
- RequestHeaders
- TraceParent

* Enable fetch automatic dependency tracking by default (#1468)

* Finalize and Update the processTelemetry helper functions (#1805)

* [Release] Increase version to v2.8.0 (#1806)

* [BUG] Adding new on-by-default telemetry is a breaking change, and should involve a major version bump #1808 (#1809)

* v2.8.0 has incompatible TypeScript 3.x type declaration (#1810)

- [BUG] Angular project doesn't build after install latest version v.2.8.0 #1807

* [BUG] Browser exceptions are no longer automatically tracked after 2.8.0 #1812 (#1815)

* [Release] Increase version to 2.8.1 (#1816)

* Fix merge Issues -- full compare with master
- Update version.json so next beta will be 3.0.0

* Set next beta release as major

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>
Co-authored-by: Simo Nurmi <simo.aleksi.nurmi@gmail.com>
Co-authored-by: Hector Hernandez <39923391+hectorhdzg@users.noreply.github.com>
@MSNev MSNev modified the milestones: 3.(beta).x (~v3.0.0), 3.0.0 Apr 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants