diff --git a/AISKU/README.md b/AISKU/README.md index 7c3ffd52f..d390b9e1f 100644 --- a/AISKU/README.md +++ b/AISKU/README.md @@ -33,75 +33,77 @@ See [Breaking Changes](https://microsoft.github.io/ApplicationInsights-JS/upgrad | Version | Full Size | Raw Minified | GZip Size |---------|-----------|--------------|------------- -| [<nightly3>](https://github.com/microsoft/ApplicationInsights-JS/tree/main/AISKU) | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/nightly/ai.3-nightly3.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/nightly/ai.3-nightly3.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/nightly/ai.3-nightly3.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/nightly/ai.3-nightly3.min.js.svg?compression=gzip&softmax=61700&max=65535) -| 3.1.2: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.2.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.2.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.2.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.2.min.js.svg?compression=gzip&softmax=61700&max=65535) -| 3.1.1: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.1.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.1.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.1.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.1.min.js.svg?compression=gzip&softmax=61700&max=65535) -| 3.1.0: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.0.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.0.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.0.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.1.0.min.js.svg?compression=gzip&softmax=61700&max=65535) -| 3.0.9: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.9.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.9.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.9.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.8.min.js.svg?compression=gzip&softmax=51200&max=65535) -| 3.0.8: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.8.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.8.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.8.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.8.min.js.svg?compression=gzip&softmax=51200&max=65535) -| 3.0.7: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.7.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.7.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.7.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.7.min.js.svg?compression=gzip&softmax=51200&max=65535) -| 3.0.6: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.6.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.6.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.6.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.5.min.js.svg?compression=gzip&softmax=51200&max=65535) -| 3.0.5: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.5.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.5.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.5.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.5.min.js.svg?compression=gzip&softmax=51200&max=65535) -| 3.0.4: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.4.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.4.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.4.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.4.min.js.svg?compression=gzip&softmax=51200&max=65535) -| 3.0.3: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.3.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.3.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.3.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.3.min.js.svg?compression=gzip&softmax=51200&max=65535) -| 3.0.2: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.2.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.2.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.2.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.2.min.js.svg?compression=gzip&softmax=51200&max=65535) -| 3.0.1: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.1.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.1.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.1.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.1.min.js.svg?compression=gzip&softmax=51200&max=65535) -| 3.0.0: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.0.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.0.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.0.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.0.0.min.js.svg?compression=gzip&softmax=51200&max=65535) -| [<nightly>](https://github.com/microsoft/ApplicationInsights-JS/tree/master/AISKU) | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/nightly/ai.2-nightly.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/nightly/ai.2-nightly.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/nightly/ai.2-nightly.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/nightly/ai.2-nightly.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.18: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.18.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.18.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.18.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.18.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.17: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.17.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.17.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.17.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.17.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.16: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.16.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.16.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.16.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.16.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.15: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.15.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.15.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.15.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.15.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.14: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.14.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.14.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.14.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.14.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.13: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.13.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.13.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.13.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.13.min.js.svg?compression=gzip&softmax=30000&max=35000) -| [2.8.12](https://github.com/microsoft/ApplicationInsights-JS/tree/master/AISKU): | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.12.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.12.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.12.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.12.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.11: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.11.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.11.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.11.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.11.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.10: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.10.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.10.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.10.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.10.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.9: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.9.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.9.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.9.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.9.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.8: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.8.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.8.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.8.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.8.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.7: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.7.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.7.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.7.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.7.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.6: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.6.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.6.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.6.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.6.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.5: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.5.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.5.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.5.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.5.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.4: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.4.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.4.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.4.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.4.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.3: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.3.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.3.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.3.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.3.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.2: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.2.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.2.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.2.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.2.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.1: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.1.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.1.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.1.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.1.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.8.0: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.0.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.0.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.0.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.8.0.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.7.4: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.4.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.4.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.4.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.4.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.7.3: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.3.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.3.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.3.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.3.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.7.2: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.2.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.2.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.2.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.2.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.7.1: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.1.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.1.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.1.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.1.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.7.0: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.0.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.0.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.0.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.7.0.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.6.5: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.5.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.5.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.5.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.5.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.6.4: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.4.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.4.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.4.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.4.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.6.3: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.3.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.3.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.3.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.3.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.6.2: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.2.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.2.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.2.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.2.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.6.1: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.1.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.1.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.1.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.1.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.6.0: | [![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.0.js.svg?label=full%20size&color=blue)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.0.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.0.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.6.0.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.11: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.11.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.11.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.11.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.10: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.10.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.10.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.10.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.9: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.9.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.9.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.9.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.8: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.8.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.8.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.8.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.7: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.7.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.7.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.7.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.6: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.6.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.6.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.6.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.5: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.5.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.5.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.5.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.4: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.4.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.4.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.4.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.3: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.3.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.3.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.3.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.5.2: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.2.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.2.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.5.2.min.js.svg?compression=gzip&softmax=30000&max=35000) +| [<nightly3>](https://github.com/microsoft/ApplicationInsights-JS/tree/main/AISKU) | [![full size size](https://js.monitor.azure.com/nightly/ai.3-nightly3.js.svg)](https://js.monitor.azure.com/nightly/ai.3-nightly3.js.svg)| ![minified size size](https://js.monitor.azure.com/nightly/ai.3-nightly3.min.js.svg) | ![gzip size](https://js.monitor.azure.com/nightly/ai.3-nightly3.min.js.gzip.svg) +| 3.2.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.2.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.2.0.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.2.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.2.0.min.js.gzip.svg) +| 3.1.2: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.1.2.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.1.2.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.1.2.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.1.2.min.js.gzip.svg) +| 3.1.1: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.1.1.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.1.1.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.1.1.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.1.1.min.js.gzip.svg) +| 3.1.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.1.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.1.0.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.1.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.1.0.min.js.gzip.svg) +| 3.0.9: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.9.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.9.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.9.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.8.min.js.gzip.svg) +| 3.0.8: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.8.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.8.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.8.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.8.min.js.gzip.svg) +| 3.0.7: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.7.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.7.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.7.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.7.min.js.gzip.svg) +| 3.0.6: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.6.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.6.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.6.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.5.min.js.gzip.svg) +| 3.0.5: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.5.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.5.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.5.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.5.min.js.gzip.svg) +| 3.0.4: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.4.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.4.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.4.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.4.min.js.gzip.svg) +| 3.0.3: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.3.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.3.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.3.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.3.min.js.gzip.svg) +| 3.0.2: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.2.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.2.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.2.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.2.min.js.gzip.svg) +| 3.0.1: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.1.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.1.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.1.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.1.min.js.gzip.svg) +| 3.0.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.3.0.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.0.0.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.0.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.0.0.min.js.gzip.svg) +| [](https://github.com/microsoft/ApplicationInsights-JS/tree/master/AISKU) | [![full size size](https://js.monitor.azure.com/nightly/ai.2-nightly.js.svg)](https://js.monitor.azure.com/nightly/ai.2-nightly.js.svg)| ![minified size size](https://js.monitor.azure.com/nightly/ai.2-nightly.min.js.svg) | ![gzip size](https://js.monitor.azure.com/nightly/ai.2-nightly.min.js.gzip.svg) +| 2.8.18: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.18.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.18.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.18.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.18.min.js.gzip.svg) +| 2.8.17: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.17.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.17.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.17.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.17.min.js.gzip.svg) +| 2.8.16: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.16.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.16.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.16.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.16.min.js.gzip.svg) +| 2.8.15: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.15.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.15.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.15.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.15.min.js.gzip.svg) +| 2.8.14: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.14.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.14.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.14.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.14.min.js.gzip.svg) +| 2.8.13: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.13.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.13.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.13.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.13.min.js.gzip.svg) +| [2.8.12](https://github.com/microsoft/ApplicationInsights-JS/tree/master/AISKU): | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.12.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.12.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.12.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.12.min.js.gzip.svg) +| 2.8.11: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.11.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.11.js.svg)| ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.11.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.11.min.js.gzip.svg) +| 2.8.10: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.10.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.10.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.10.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.10.min.js.gzip.svg) +| 2.8.9: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.9.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.9.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.9.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.9.min.js.gzip.svg) +| 2.8.8: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.8.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.8.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.8.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.8.min.js.gzip.svg) +| 2.8.7: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.7.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.7.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.7.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.7.min.js.gzip.svg) +| 2.8.6: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.6.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.6.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.6.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.6.min.js.gzip.svg) +| 2.8.5: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.5.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.5.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.5.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.5.min.js.gzip.svg) +| 2.8.4: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.4.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.4.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.4.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.4.min.js.gzip.svg) +| 2.8.3: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.3.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.3.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.3.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.3.min.js.gzip.svg) +| 2.8.2: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.2.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.2.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.2.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.2.min.js.gzip.svg) +| 2.8.1: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.1.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.1.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.1.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.1.min.js.gzip.svg) +| 2.8.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.8.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.8.0.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.8.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.8.0.min.js.gzip.svg) +| 2.7.4: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.7.4.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.7.4.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.7.4.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.7.4.min.js.gzip.svg) +| 2.7.3: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.7.3.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.7.3.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.7.3.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.7.3.min.js.gzip.svg) +| 2.7.2: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.7.2.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.7.2.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.7.2.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.7.2.min.js.gzip.svg) +| 2.7.1: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.7.1.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.7.1.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.7.1.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.7.1.min.js.gzip.svg) +| 2.7.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.7.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.7.0.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.7.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.7.0.min.js.gzip.svg) +| 2.6.5: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.6.5.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.6.5.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.6.5.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.6.5.min.js.gzip.svg) +| 2.6.4: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.6.4.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.6.4.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.6.4.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.6.4.min.js.gzip.svg) +| 2.6.3: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.6.3.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.6.3.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.6.3.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.6.3.min.js.gzip.svg) +| 2.6.2: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.6.2.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.6.2.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.6.2.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.6.2.min.js.gzip.svg) +| 2.6.1: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.6.1.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.6.1.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.6.1.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.6.1.min.js.gzip.svg) +| 2.6.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.6.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.6.0.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.6.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.6.0.min.js.gzip.svg) +| 2.5.11: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.11.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.11.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.11.min.js.gzip.svg) +| 2.5.10: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.10.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.10.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.10.min.js.gzip.svg) +| 2.5.9: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.9.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.9.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.9.min.js.gzip.svg) +| 2.5.8: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.8.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.8.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.8.min.js.gzip.svg) +| 2.5.7: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.7.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.7.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.7.min.js.gzip.svg) +| 2.5.6: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.6.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.6.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.6.min.js.gzip.svg) +| 2.5.5: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.5.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.5.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.5.min.js.gzip.svg) +| 2.5.4: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.4.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.4.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.4.min.js.gzip.svg) +| 2.5.3: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.3.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.3.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.3.min.js.gzip.svg) +| 2.5.2: | ![full size size](https://js.monitor.azure.com/scripts/b/ai.2.5.2.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.5.2.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.5.2.min.js.gzip.svg) | 2.5.0 - 2.5.1 | Not Deployed to CDN | | -| 2.4.4: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.4.4.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.4.4.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.4.4.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.4.3: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.4.3.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.4.3.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.4.3.min.js.svg?compression=gzip&softmax=30000&max=35000) +| 2.4.4: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.4.4.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.4.4.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.4.4.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.4.4.min.js.gzip.svg) +| 2.4.3: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.4.3.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.4.3.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.4.3.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.4.3.min.js.gzip.svg) | 2.4.2: | Not Deployed to CDN -| 2.4.1: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.4.1.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.4.1.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.4.1.min.js.svg?compression=gzip&softmax=30000&max=35000) +| 2.4.1: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.4.1.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.4.1.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.4.1.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.4.1.min.js.gzip.svg) | 2.4.0: | Not Deployed to CDN -| 2.3.1: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.3.1.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.3.1.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.3.1.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.3.0: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.3.0.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.3.0.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.3.0.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.2.2: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.2.2.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.2.2.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.2.2.min.js.svg?compression=gzip&softmax=30000&max=35000) +| 2.3.1: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.3.1.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.3.1.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.3.1.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.3.1.min.js.gzip.svg) +| 2.3.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.3.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.3.0.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.3.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.3.0.min.js.gzip.svg) +| 2.2.2: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.2.2.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.2.2.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.2.2.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.2.2.min.js.gzip.svg) | 2.2.1: | Not Deployed to CDN -| 2.2.0: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.2.0.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.2.0.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.2.0.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.1.0: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.1.0.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.1.0.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.1.0.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.0.1: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.0.1.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.0.1.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.0.1.min.js.svg?compression=gzip&softmax=30000&max=35000) -| 2.0.0: | ![full size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.0.0.js.svg?label=full%20size&color=blue)| ![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.0.0.min.js.svg?label=minified%20size&color=darkorchid) | ![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.2.0.0.min.js.svg?compression=gzip&softmax=30000&max=35000) +| 2.2.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.2.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.2.0.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.2.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.2.0.min.js.gzip.svg) +| 2.1.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.1.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.1.0.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.1.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.1.0.min.js.gzip.svg) +| 2.0.1: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.0.1.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.0.1.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.0.1.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.0.1.min.js.gzip.svg) +| 2.0.0: | [![full size size](https://js.monitor.azure.com/scripts/b/ai.2.0.0.js.svg)](https://js.monitor.azure.com/scripts/b/ai.2.0.0.js.svg) | ![minified size size](https://js.monitor.azure.com/scripts/b/ai.2.0.0.min.js.svg) | ![gzip size](https://js.monitor.azure.com/scripts/b/ai.2.0.0.min.js.gzip.svg) + ## Contributing diff --git a/AISKU/Tests/Perf/src/AISKUPerf.ts b/AISKU/Tests/Perf/src/AISKUPerf.ts index d9f837bf0..5fbe4fe89 100644 --- a/AISKU/Tests/Perf/src/AISKUPerf.ts +++ b/AISKU/Tests/Perf/src/AISKUPerf.ts @@ -19,7 +19,7 @@ export class AppInsightsInitPerfTestClass { * should update version after new release * version with doperf(): after 2.5.6 * */ - var defaultVer = "3.1.2"; + var defaultVer = "3.2.0"; this.version = ver? ver:this._getQueryParameterVersion(defaultVer); this.perfEventsBuffer = []; this.perfEventWaitBuffer = []; diff --git a/AISKU/Tests/Unit/src/AISKUSize.Tests.ts b/AISKU/Tests/Unit/src/AISKUSize.Tests.ts index 2cebc91b2..8aa1e3107 100644 --- a/AISKU/Tests/Unit/src/AISKUSize.Tests.ts +++ b/AISKU/Tests/Unit/src/AISKUSize.Tests.ts @@ -5,13 +5,13 @@ import { Snippet } from "../../../src/Snippet"; import { utlRemoveSessionStorage } from "@microsoft/applicationinsights-common"; export class AISKUSizeCheck extends AITestClass { - private readonly MAX_RAW_SIZE = 140; - private readonly MAX_BUNDLE_SIZE = 140; - private readonly MAX_RAW_DEFLATE_SIZE = 56; - private readonly MAX_BUNDLE_DEFLATE_SIZE = 56; + private readonly MAX_RAW_SIZE = 141; + private readonly MAX_BUNDLE_SIZE = 141; + private readonly MAX_RAW_DEFLATE_SIZE = 57; + private readonly MAX_BUNDLE_DEFLATE_SIZE = 57; private readonly rawFilePath = "../dist/es5/applicationinsights-web.min.js"; // Automatically updated by version scripts - private readonly currentVer = "3.1.2"; + private readonly currentVer = "3.2.0"; private readonly prodFilePath = `../browser/es5/ai.${this.currentVer[0]}.min.js`; public testInitialize() { diff --git a/AISKU/Tests/Unit/src/CdnPackaging.tests.ts b/AISKU/Tests/Unit/src/CdnPackaging.tests.ts index 0ea5c028a..cdd207284 100644 --- a/AISKU/Tests/Unit/src/CdnPackaging.tests.ts +++ b/AISKU/Tests/Unit/src/CdnPackaging.tests.ts @@ -16,7 +16,7 @@ const enum CdnFormat { export class CdnPackagingChecks extends AITestClass { // Automatically updated by version scripts - private readonly currentVer = "3.1.2"; + private readonly currentVer = "3.2.0"; public testInitialize() { } diff --git a/AISKU/Tests/Unit/src/SnippetInitialization.Tests.ts b/AISKU/Tests/Unit/src/SnippetInitialization.Tests.ts index 8ca9e6947..c81500e07 100644 --- a/AISKU/Tests/Unit/src/SnippetInitialization.Tests.ts +++ b/AISKU/Tests/Unit/src/SnippetInitialization.Tests.ts @@ -313,7 +313,11 @@ export class SnippetInitializationTests extends AITestClass { if(this.successSpy.called) { let currentCount: number = 0; this.successSpy.args.forEach(call => { - call[0].forEach(message => { + call[0].forEach(item => { + let message = item; + if (typeof item !== "string") { + message = item.item; + } // Ignore the internal SendBrowserInfoOnUserInit message (Only occurs when running tests in a browser) if (!message || message.indexOf("AI (Internal): 72 ") == -1) { currentCount ++; @@ -1086,7 +1090,11 @@ export class SnippetInitializationTests extends AITestClass { if(this.successSpy.called) { let currentCount: number = 0; this.successSpy.args.forEach(call => { - call[0].forEach(message => { + call[0].forEach(item => { + let message = item.item; + if (typeof item === "string") { + message = item; + } // Ignore the internal SendBrowserInfoOnUserInit message (Only occurs when running tests in a browser) if (!message || message.indexOf("AI (Internal): 72 ") == -1) { currentCount ++; diff --git a/AISKU/Tests/Unit/src/applicationinsights.e2e.tests.ts b/AISKU/Tests/Unit/src/applicationinsights.e2e.tests.ts index be0c36b4e..80d2f8454 100644 --- a/AISKU/Tests/Unit/src/applicationinsights.e2e.tests.ts +++ b/AISKU/Tests/Unit/src/applicationinsights.e2e.tests.ts @@ -271,6 +271,7 @@ export class ApplicationInsightsTests extends AITestClass { ai.config.extensionConfig = ai.config.extensionConfig || {}; let extConfig = ai.config.extensionConfig["AppInsightsCfgSyncPlugin"]; Assert.equal(extConfig.cfgUrl, CONFIG_ENDPOINT_URL, "default cdn endpoint should be set"); + Assert.equal(extConfig.syncMode, 2, "default mode should be set to receive"); let featureOptIn = config.featureOptIn || {}; Assert.equal(featureOptIn["iKeyUsage"].mode, FeatureOptInMode.enable, "ikey message should be turned on"); diff --git a/AISKU/Tests/Unit/src/sender.e2e.tests.ts b/AISKU/Tests/Unit/src/sender.e2e.tests.ts index 2f83b99ec..cc120c784 100644 --- a/AISKU/Tests/Unit/src/sender.e2e.tests.ts +++ b/AISKU/Tests/Unit/src/sender.e2e.tests.ts @@ -7,8 +7,8 @@ import { Assert, AITestClass, PollingAssert} from "@microsoft/ai-test-framework" export class SenderE2ETests extends AITestClass { private readonly _instrumentationKey = 'b7170927-2d1c-44f1-acec-59f4e1751c11'; - private readonly _bufferName = 'AI_buffer'; - private readonly _sentBufferName = 'AI_sentBuffer'; + private readonly _bufferName = 'AI_buffer_1'; + private readonly _sentBufferName = 'AI_sentBuffer_1'; private _ai: IApplicationInsights; private _sender: Sender; diff --git a/AISKU/Tests/Unit/src/validate.e2e.tests.ts b/AISKU/Tests/Unit/src/validate.e2e.tests.ts index 877e1e55d..99ae6a31e 100644 --- a/AISKU/Tests/Unit/src/validate.e2e.tests.ts +++ b/AISKU/Tests/Unit/src/validate.e2e.tests.ts @@ -138,7 +138,11 @@ export class ValidateE2ETests extends AITestClass { .concat(() => { let acceptedItems = 0; this.successSpy.args.forEach(call => { - call[0].forEach(message => { + call[0].forEach(item => { + let message = item; + if (typeof item !== "string") { + message = item.item; + } // Ignore the internal SendBrowserInfoOnUserInit message (Only occurs when running tests in a browser) if (message.indexOf("AI (Internal): 72 ") == -1) { acceptedItems ++; diff --git a/AISKU/Tests/es6-module-type-check/package.json b/AISKU/Tests/es6-module-type-check/package.json index 0e5882391..c8dda88de 100644 --- a/AISKU/Tests/es6-module-type-check/package.json +++ b/AISKU/Tests/es6-module-type-check/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/applicationinsights-test-module-type-check", "author": "Microsoft Application Insights Team and Contributors", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights ES6 Module and Type check Example", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "keywords": [ @@ -32,7 +32,7 @@ "tslib": "*" }, "dependencies": { - "@microsoft/applicationinsights-common": "3.1.2", - "@microsoft/applicationinsights-web": "3.1.2" + "@microsoft/applicationinsights-common": "3.2.0", + "@microsoft/applicationinsights-web": "3.2.0" } } diff --git a/AISKU/package.json b/AISKU/package.json index a24bd1cc7..01cae48a3 100644 --- a/AISKU/package.json +++ b/AISKU/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-web", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights JavaScript SDK - Web", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -63,15 +63,15 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-analytics-js": "3.1.2", - "@microsoft/applicationinsights-channel-js": "3.1.2", - "@microsoft/applicationinsights-cfgsync-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-dependencies-js": "3.1.2", - "@microsoft/applicationinsights-properties-js": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@microsoft/applicationinsights-analytics-js": "3.2.0", + "@microsoft/applicationinsights-channel-js": "3.2.0", + "@microsoft/applicationinsights-cfgsync-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-dependencies-js": "3.2.0", + "@microsoft/applicationinsights-properties-js": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "license": "MIT" } diff --git a/AISKU/src/AISku.ts b/AISKU/src/AISku.ts index 5491b23cc..6b91f2700 100644 --- a/AISKU/src/AISku.ts +++ b/AISKU/src/AISku.ts @@ -4,7 +4,7 @@ import dynamicProto from "@microsoft/dynamicproto-js"; import { AnalyticsPlugin, ApplicationInsights } from "@microsoft/applicationinsights-analytics-js"; -import { CfgSyncPlugin, ICfgSyncConfig } from "@microsoft/applicationinsights-cfgsync-js"; +import { CfgSyncPlugin, ICfgSyncConfig, ICfgSyncMode } from "@microsoft/applicationinsights-cfgsync-js"; import { Sender } from "@microsoft/applicationinsights-channel-js"; import { AnalyticsPluginIdentifier, DEFAULT_BREEZE_PATH, IAutoExceptionTelemetry, IConfig, IDependencyTelemetry, IEventTelemetry, @@ -92,7 +92,8 @@ const defaultConfigValues: IConfigDefaults = { ), extensionConfig: cfgDfMerge<{[key: string]: any}>({ ["AppInsightsCfgSyncPlugin"]: cfgDfMerge({ - cfgUrl: CONFIG_ENDPOINT_URL + cfgUrl: CONFIG_ENDPOINT_URL, + syncMode: ICfgSyncMode.Receive }) }) }; diff --git a/AISKULight/Tests/Unit/src/AISKULightSize.Tests.ts b/AISKULight/Tests/Unit/src/AISKULightSize.Tests.ts index ddee291c9..451e90e81 100644 --- a/AISKULight/Tests/Unit/src/AISKULightSize.Tests.ts +++ b/AISKULight/Tests/Unit/src/AISKULightSize.Tests.ts @@ -2,12 +2,12 @@ import { AITestClass, Assert } from "@microsoft/ai-test-framework"; import * as pako from "pako"; export class AISKULightSizeCheck extends AITestClass { - private readonly MAX_RAW_SIZE = 87; - private readonly MAX_BUNDLE_SIZE = 87; + private readonly MAX_RAW_SIZE = 88; + private readonly MAX_BUNDLE_SIZE = 88; private readonly MAX_RAW_DEFLATE_SIZE = 36; private readonly MAX_BUNDLE_DEFLATE_SIZE = 36; private readonly rawFilePath = "../dist/es5/applicationinsights-web-basic.min.js"; - private readonly currentVer = "3.1.2"; + private readonly currentVer = "3.2.0"; private readonly prodFilePath = `../browser/es5/aib.${this.currentVer[0]}.min.js`; public testInitialize() { diff --git a/AISKULight/package.json b/AISKULight/package.json index 6bb74c681..7fd9247ec 100644 --- a/AISKULight/package.json +++ b/AISKULight/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-web-basic", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights JavaScript SDK - Web Basic", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -57,11 +57,11 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-common": "3.1.2", - "@microsoft/applicationinsights-channel-js": "3.1.2", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@microsoft/applicationinsights-common": "3.2.0", + "@microsoft/applicationinsights-channel-js": "3.2.0", + "@microsoft/applicationinsights-core-js": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "license": "MIT" } diff --git a/README.md b/README.md index 93783be44..d69a45119 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,8 @@ [![GitHub Workflow Status (main)](https://img.shields.io/github/actions/workflow/status/microsoft/ApplicationInsights-JS/ci.yml?branch=main)](https://github.com/microsoft/ApplicationInsights-JS/tree/main) [![Build Status](https://dev.azure.com/mseng/AppInsights/_apis/build/status%2FAppInsights%20-%20DevTools%2F1DS%20JavaScript%20SDK%20web%20SKU%20(main%3B%20master)?branchName=main)](https://dev.azure.com/mseng/AppInsights/_build/latest?definitionId=8184&branchName=main) [![npm version](https://badge.fury.io/js/%40microsoft%2Fapplicationinsights-web.svg)](https://badge.fury.io/js/%40microsoft%2Fapplicationinsights-web) -[![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/3.min.js.svg?label=minified%20size)](https://js.monitor.azure.com/scripts/b/ai.3.min.js) -[![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.min.js.svg?compression=gzip&softmax=30000&max=35000)](https://js.monitor.azure.com/scripts/b/ai.3.min.js) +[![minified size size](https://js.monitor.azure.com/scripts/b/3.min.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.min.js) +[![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.min.js.gzip.svg)](https://js.monitor.azure.com/scripts/b/ai.3.min.js) ## Before Getting Started @@ -572,7 +572,7 @@ While the script downloads from the CDN, all tracking of your page is queued. On > Summary: > > - ![current npm version](https://badge.fury.io/js/%40microsoft%2Fapplicationinsights-web.svg) -> - ![gzip compressed size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js.svg?compression=gzip) +> - ![gzip compressed size](https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js.gzip.svg) > - **~15 ms** overall initialization time > - **Zero** tracking missed during life cycle of page diff --git a/RELEASES.md b/RELEASES.md index dacd3da30..772f24072 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -2,6 +2,25 @@ > Note: ES3/IE8 compatibility will be removed in the future v3.x.x releases (scheduled for mid-late 2022), so if you need to retain ES3 compatibility you will need to remain on the 2.x.x versions of the SDK or your runtime will need install polyfill's to your ES3 environment before loading / initializing the SDK. +## 3.2.0 (Apr 23rd, 2024) + +!! CfgSync plugin is turned on. Throttling Ikey depreciation message is enabled with sampling rate 0.0001% +[##2317](https://github.com/microsoft/ApplicationInsights-JS/pull/2317) + +!! Sender has breaking changes. The key used for session storage is changed and items stored in the storage now contain retry counts. +[##2324](https://github.com/microsoft/ApplicationInsights-JS/pull/2324) + +### Changelog + +- #2371 [Main][Task]27365739 Turn on Ikey depreciation message with sampling rate 0.0001% +- #2319 [Main] Fix config release script overwrite flag and cache time +- #2321 [Main] Default request headers content-type for 1ds should be x-json-stream only ing +- #2324 [Main][Task]27079894 Add a max retry count for Sender +- #2325 [Main][Task]25716927: Change default CfgSync values to turn on the ikey deprecation message +- #2331 [Main] Resetting the DataCacheHelper version number back to current version (from 3.0.5) +- #2332 [Main][Task]27742145: Change nonOverrideCfgs to be added only during initialization +- #2333 [Main][Task]27749889: Change AISKU Sync Mode to Receive + ## 3.1.2 (Mar 21st, 2024) !! Critical Bug fix for Memoery Leak !! diff --git a/channels/1ds-post-js/package.json b/channels/1ds-post-js/package.json index 6315b79fa..d7ed05418 100644 --- a/channels/1ds-post-js/package.json +++ b/channels/1ds-post-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/1ds-post-js", - "version": "4.1.2", + "version": "4.2.0", "description": "Microsoft Application Insights JavaScript SDK - 1ds-post-channel-js", "author": "Microsoft Application Insights Team", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", @@ -27,9 +27,9 @@ "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@microsoft/1ds-core-js": "4.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@microsoft/1ds-core-js": "4.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "devDependencies": { "@microsoft/ai-test-framework": "0.0.1", diff --git a/channels/applicationinsights-channel-js/Tests/Unit/src/Sender.tests.ts b/channels/applicationinsights-channel-js/Tests/Unit/src/Sender.tests.ts index dafa3ac01..9cf6d2c13 100644 --- a/channels/applicationinsights-channel-js/Tests/Unit/src/Sender.tests.ts +++ b/channels/applicationinsights-channel-js/Tests/Unit/src/Sender.tests.ts @@ -1,28 +1,28 @@ import { AITestClass } from "@microsoft/ai-test-framework"; import { Sender } from "../../../src/Sender"; -import { IOfflineListener, createOfflineListener } from "@microsoft/applicationinsights-common"; +import { IOfflineListener, createOfflineListener, utlGetSessionStorageKeys, utlRemoveSessionStorage } from "@microsoft/applicationinsights-common"; import { EnvelopeCreator } from '../../../src/EnvelopeCreator'; import { Exception, CtxTagKeys, isBeaconApiSupported, DEFAULT_BREEZE_ENDPOINT, DEFAULT_BREEZE_PATH, utlCanUseSessionStorage, utlGetSessionStorage, utlSetSessionStorage } from "@microsoft/applicationinsights-common"; -import { ITelemetryItem, AppInsightsCore, ITelemetryPlugin, DiagnosticLogger, NotificationManager, SendRequestReason, _eInternalMessageId, safeGetLogger, isString, isArray, arrForEach, isBeaconsSupported, IXHROverride, IPayloadData, isFetchSupported, TransportType, getWindow, getGlobal} from "@microsoft/applicationinsights-core-js"; +import { ITelemetryItem, AppInsightsCore, ITelemetryPlugin, DiagnosticLogger, NotificationManager, SendRequestReason, _eInternalMessageId, safeGetLogger, isString, isArray, arrForEach, isBeaconsSupported, IXHROverride, IPayloadData,TransportType, getWindow } from "@microsoft/applicationinsights-core-js"; import { ArraySendBuffer, SessionStorageSendBuffer } from "../../../src/SendBuffer"; -import { ISenderConfig } from "../../../src/Interfaces"; +import { IInternalStorageItem, ISenderConfig } from "../../../src/Interfaces"; -const BUFFER_KEY = "AI_buffer"; -const SENT_BUFFER_KEY = "AI_sentBuffer"; +const BUFFER_KEY = "AI_buffer_1"; +const SENT_BUFFER_KEY = "AI_sentBuffer_1"; export class SenderTests extends AITestClass { private _sender: Sender; private _instrumentationKey = 'iKey'; private _offline: IOfflineListener; - protected _getBuffer(key: string, logger: DiagnosticLogger, namePrefix?: string): string[] { + protected _getBuffer(key: string, logger: DiagnosticLogger, namePrefix?: string): IInternalStorageItem[] { let prefixedKey = key; try { prefixedKey = namePrefix ? namePrefix + "_" + prefixedKey : prefixedKey; const bufferJson = utlGetSessionStorage(logger, prefixedKey); if (bufferJson) { - let buffer: string[] = JSON.parse(bufferJson); + let buffer: IInternalStorageItem[] = JSON.parse(bufferJson); if (isString(buffer)) { buffer = JSON.parse(buffer as any); } @@ -122,6 +122,7 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(undefined, defaultSenderConfig.httpXHROverride, "Channel default httpXHROverride config is set"); QUnit.assert.equal(false, defaultSenderConfig.alwaysUseXhrOverride, "Channel default alwaysUseXhrOverride config is set"); QUnit.assert.equal(true, defaultSenderConfig.disableSendBeaconSplit, "Channel default disableSendBeaconSplit config is set"); + QUnit.assert.equal(10, defaultSenderConfig.maxRetryCnt, "Channel default maxRetryCnt config is set"); //check dynamic config core.config.extensionConfig = core.config.extensionConfig? core.config.extensionConfig : {}; @@ -182,7 +183,7 @@ export class SenderTests extends AITestClass { } } } - let testBatch: string[] = ["test", "test1"]; + let testBatch: IInternalStorageItem[] = [{item: "test", cnt: 0}, {item: "test1", cnt: 0}]; const telemetryItem: ITelemetryItem = { name: "fake item", iKey: "test", @@ -229,7 +230,7 @@ export class SenderTests extends AITestClass { this._sender.onunloadFlush(); QUnit.assert.deepEqual(2, sentPayloadData.length, "httpXHROverride should be called"); let data = sentPayloadData[1].payload.oriPayload; - payload = JSON.parse(data[0]); + payload = JSON.parse(data[0].item); QUnit.assert.deepEqual("test", payload.iKey, "httpXHROverride should send expected payload test1"); sync = sentPayloadData[1].sync; QUnit.assert.equal(true, sync, "Channel httpXHROverride sync is called with true during send test2 (sender interface should be opposite with the sender)"); @@ -237,6 +238,72 @@ export class SenderTests extends AITestClass { } }); + this.testCase({ + name: "Channel Config MaxRetry Count: payload exceeds max retry count should not be sent again", + useFakeTimers: true, + test: () => { + let core = new AppInsightsCore(); + + let coreConfig = { + instrumentationKey: "abc", + extensionConfig: { + [this._sender.identifier]: { + //httpXHROverride: xhrOverride, + //alwaysUseXhrOverride: true, + maxRetryCnt: 1 + } + } + } + const telemetryItem: ITelemetryItem = { + name: "fake item", + iKey: "test", + baseType: "some type", + baseData: {} + }; + core.initialize(coreConfig, [this._sender]); + + let logger = new DiagnosticLogger({instrumentationKey: "abc"}); + core.logger = logger; + QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger), [], "session storage buffer is empty"); + QUnit.assert.deepEqual(this._getBuffer(SENT_BUFFER_KEY, logger), [], "session storage sent buffer is empty"); + try { + this._sender.processTelemetry(telemetryItem); + QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger).length, 1, "session storage buffer should have 1 item"); + QUnit.assert.deepEqual(this._getBuffer(SENT_BUFFER_KEY, logger), [], "session storage sent buffer is empty test1"); + } catch(e) { + QUnit.assert.ok(false, "Exception - " + e); + } + + // inital send, cnt = 0 + this._sender.flush(false); + QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger), [], "session storage buffer is empty"); + QUnit.assert.deepEqual(this._getBuffer(SENT_BUFFER_KEY, logger).length, 1, "session storage sent buffer should have one event"); + + let requests = this._getXhrRequests(); + QUnit.assert.deepEqual(requests.length, 1, "should have only 1 requests"); + let request = requests[0]; + this.sendJsonResponse(request, {}, 500); + QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger).length, 1, "session storage buffer should have one item test2"); + QUnit.assert.deepEqual(this._getBuffer(SENT_BUFFER_KEY, logger), [], "session storage sent buffer should not have one event test2"); + + QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger)[0].cnt, 1, "session storage buffer should have item with retry cnt 1"); + + // retry 1, cnt = 1 + this._sender.flush(false); + QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger), [], "session storage buffer is empty test4"); + QUnit.assert.deepEqual(this._getBuffer(SENT_BUFFER_KEY, logger).length, 1, "session storage sent buffer should have one event test4"); + + requests = this._getXhrRequests(); + QUnit.assert.deepEqual(requests.length, 2, "should have only 1 requests"); + request = requests[1]; + this.sendJsonResponse(request, {}, 500); + // items should not be added back + QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger), [], "session storage buffer should not have one item test5"); + QUnit.assert.deepEqual(this._getBuffer(SENT_BUFFER_KEY, logger), [], "session storage sent buffer should not have one event test5"); + + } + }); + this.testCase({ name: "Channel Config: Invalid paylod Sender should not be sent", useFakeTimers: true, @@ -292,6 +359,91 @@ export class SenderTests extends AITestClass { } }); + this.testCase({ + name: "Channel Config: sessionStorage can get items from previous buffers", + useFakeTimers: true, + test: () => { + let core = new AppInsightsCore(); + let coreConfig = { + instrumentationKey: "b7170927-2d1c-44f1-acec-59f4e1751c13", + extensionConfig: { + [this._sender.identifier]: { + namePrefix: "test" + } + } + } + + let item1: ITelemetryItem = { + name: "fake item1", + iKey: "abc", + baseType: "some type", + baseData: {} + }; + + let item2: ITelemetryItem = { + name: "fake item2", + iKey: "abc", + baseType: "some type", + baseData: {} + }; + + let item3: ITelemetryItem = { + name: "fake item3", + iKey: "abc", + baseType: "some type", + baseData: {} + }; + + let item4: ITelemetryItem = { + name: "fake item4", + iKey: "abc", + baseType: "some type", + baseData: {} + }; + + let item5: ITelemetryItem = { + name: "fake item5", + iKey: "abc", + baseType: "some type", + baseData: {} + }; + + let items = [item1, item2]; + let sentItems = [item3]; + let prefixItems = [item4, item5]; + //mock previous items stored in previous buffer key + sessionStorage.setItem("AI_buffer",JSON.stringify(items)); + sessionStorage.setItem("AI_sentBuffer",JSON.stringify(sentItems)); + sessionStorage.setItem("test_AI_buffer",JSON.stringify(prefixItems)); + + let keys = utlGetSessionStorageKeys(); + QUnit.assert.deepEqual(keys.length, 3, "session buffer should contain only three keys"); + + let logger = new DiagnosticLogger({instrumentationKey: "abc"}); + core.logger = logger; + + core.initialize(coreConfig, [this._sender]); + QUnit.assert.equal(true, this._sender._senderConfig.enableSessionStorageBuffer, "Channel default enableSessionStorageBuffer config is set"); + QUnit.assert.equal(true, utlCanUseSessionStorage(), "SessionStorage should be able to use"); + QUnit.assert.deepEqual(this._getBuffer("test_" + BUFFER_KEY, logger).length, 5, "session storage buffer should contain all previous events"); + QUnit.assert.deepEqual(this._getBuffer("test_" + SENT_BUFFER_KEY, logger), [], "session storage sent buffer is empty"); + + let previousItems = this._sender._buffer.getItems(); + + QUnit.assert.deepEqual(previousItems.length, 5, "buffer should contain 5 previous items"); + + keys = utlGetSessionStorageKeys(); + QUnit.assert.deepEqual(keys.length, 2, "session buffer should contain only two keys"); + QUnit.assert.ok(keys.indexOf("test_" + BUFFER_KEY) > -1, "session buffer key contain buffer key"); + QUnit.assert.ok(keys.indexOf("test_" + SENT_BUFFER_KEY) > -1, "session buffer key contain sent buffer key"); + + utlRemoveSessionStorage(logger, "test_" + BUFFER_KEY); + utlRemoveSessionStorage(logger, "test_" + SENT_BUFFER_KEY); + + + } + }); + this.testCase({ name: "Channel Config: sessionStorage change from true to false can be handled correctly", @@ -334,7 +486,7 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(false, loggerSpy.calledOnce, "The send has not yet been triggered"); let payload = this._getBuffer(BUFFER_KEY, logger); QUnit.assert.equal(payload.length, 1, "payload length is equal to one"); - QUnit.assert.ok(payload[0].indexOf("some type") > 0, "payload is saved to session storage"); + QUnit.assert.ok(payload[0].item.indexOf("some type") > 0, "payload is saved to session storage"); let sentPayload = this._getBuffer(SENT_BUFFER_KEY, logger); QUnit.assert.deepEqual([], sentPayload, "sent payload is empty"); QUnit.assert.equal(this._sender._buffer.getItems().length, 1, "buffer length shoule be one"); @@ -346,7 +498,7 @@ export class SenderTests extends AITestClass { this.clock.tick(1); QUnit.assert.equal(false, this._sender._senderConfig.enableSessionStorageBuffer, "Channel enableSessionStorageBuffer config is disabled"); QUnit.assert.equal(this._sender._buffer.getItems().length, 1, "session storage buffer is transferred"); - QUnit.assert.ok(this._sender._buffer.getItems()[0].indexOf("some type") > 1, "in memory storage buffer is set"); + QUnit.assert.ok(this._sender._buffer.getItems()[0].item.indexOf("some type") > 1, "in memory storage buffer is set"); this.clock.tick(15000); QUnit.assert.equal(true, loggerSpy.calledOnce, "The send has been triggered"); @@ -432,7 +584,7 @@ export class SenderTests extends AITestClass { let payload = this._getBuffer(BUFFER_KEY, logger); QUnit.assert.equal(payload.length, 1, "payload length is equal to one"); - QUnit.assert.ok(payload[0].indexOf("some type") > 0, "payload is saved to session storage"); + QUnit.assert.ok(payload[0].item.indexOf("some type") > 0, "payload is saved to session storage"); QUnit.assert.equal(this._sender._buffer.getItems().length, 1, "buffer length shoule be one"); let sentPayload = this._getBuffer(SENT_BUFFER_KEY, logger); QUnit.assert.deepEqual([], sentPayload, "sent payload is empty"); @@ -481,7 +633,7 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(this._sender._buffer.getItems().length, 1, "session storage buffer is set"); let payload = this._getBuffer(BUFFER_KEY, logger); QUnit.assert.equal(payload.length, 1, "payload length is equal to one"); - QUnit.assert.ok(payload[0].indexOf("some type") > 0, "payload is saved to session storage"); + QUnit.assert.ok(payload[0].item.indexOf("some type") > 0, "payload is saved to session storage"); QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger, prefixName), [], "session storage buffer with prefix is empty"); @@ -495,7 +647,7 @@ export class SenderTests extends AITestClass { QUnit.assert.deepEqual(this._getBuffer(SENT_BUFFER_KEY, logger), [], "session storage sent buffer is empty"); payload = this._getBuffer(BUFFER_KEY, logger, prefixName); QUnit.assert.equal(payload.length, 1, "payload length is equal to one"); - QUnit.assert.ok(payload[0].indexOf("some type") > 0, "payload is saved to session storage with prefix"); + QUnit.assert.ok(payload[0].item.indexOf("some type") > 0, "payload is saved to session storage with prefix"); QUnit.assert.equal(this._sender._buffer.getItems().length, 1, "new session storage buffer is set"); utlSetSessionStorage(logger, BUFFER_KEY,JSON.stringify([])); @@ -544,7 +696,7 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(false, loggerSpy.calledOnce, "The send has not yet been triggered"); let payload = this._getBuffer(BUFFER_KEY, logger); QUnit.assert.equal(payload.length, 1, "payload length is equal to one"); - QUnit.assert.ok(payload[0].indexOf("some type") > 0, "payload is saved to session storage"); + QUnit.assert.ok(payload[0].item.indexOf("some type") > 0, "payload is saved to session storage"); // change endpointUrl core.config.extensionConfig = core.config.extensionConfig? core.config.extensionConfig : {}; @@ -555,7 +707,7 @@ export class SenderTests extends AITestClass { payload = this._sender._buffer.getItems(); QUnit.assert.deepEqual(payload.length, 1, "buffer is not changed"); payload = this._getBuffer(BUFFER_KEY, logger); - QUnit.assert.ok(payload[0].indexOf("some type") > 0, "payload is not changed"); + QUnit.assert.ok(payload[0].item.indexOf("some type") > 0, "payload is not changed"); utlSetSessionStorage(logger, BUFFER_KEY,JSON.stringify([])); } @@ -589,18 +741,59 @@ export class SenderTests extends AITestClass { let arrBufferCopy= arrBuffer.createNew(logger, config, false); // set to false to make sure it is array buffer QUnit.assert.deepEqual(arrBufferCopy.getItems(), [], "payload should be empty"); - let payload = ["payload1", "payload2", "payload3", "payload4", "payload5", "payload6"]; + //let payload = [{"payload1"}, "payload2", "payload3", "payload4", "payload5", "payload6"]; + let payload = [{item: "payload1", cnt: 0}, {item: "payload2", cnt: 0}, {item: "payload3", cnt: 0}, {item: "payload4", cnt: 0}, {item: "payload5", cnt: 0}, {item: "payload6", cnt: 0} ]; arrForEach(payload, (val) =>{ arrBuffer.enqueue(val); }); arrBufferCopy = arrBuffer.createNew(logger, config, false); QUnit.assert.deepEqual(payload, arrBufferCopy.getItems(), "payload should be same"); - arrBuffer.enqueue("payload"); + arrBuffer.enqueue({item:"payload", cnt: 0}); QUnit.assert.deepEqual(arrBuffer.getItems().length, 7, "arrBuffer length"); QUnit.assert.deepEqual(arrBufferCopy.getItems().length, 6, "copy is deep copy"); } }); + this.testCase({ + name: "ArraySendBuffer Max Count: item exceeds max cnt should not be added again", + test: () => { + let config = { + endpointUrl: "https//: test", + emitLineDelimitedJson: false, + maxBatchInterval: 15000, + maxBatchSizeInBytes: 102400, + disableTelemetry: false, + enableSessionStorageBuffer: true, + isRetryDisabled: false, + isBeaconApiDisabled:true, + disableXhr: false, + onunloadDisableFetch: false, + onunloadDisableBeacon: false, + instrumentationKey:"key", + namePrefix: "", + samplingPercentage: 100, + customHeaders: [{header:"header",value:"val" }], + convertUndefined: "", + eventsLimitInMem: 10000, + maxRetryCnt: 1 + } as ISenderConfig; + let logger = new DiagnosticLogger({instrumentationKey: "abc"}); + + let arrBuffer = new ArraySendBuffer(logger, config); + QUnit.assert.deepEqual(arrBuffer.getItems(), [], "payload should be empty"); + let payload1 = {item: "payload1", cnt: 1}; + arrBuffer.enqueue(payload1); + QUnit.assert.deepEqual(arrBuffer.getItems().length, 1, "buffer should have one item"); + + let payload2 = {item: "payload2", cnt: 2}; + arrBuffer.enqueue(payload2); + QUnit.assert.deepEqual(arrBuffer.getItems().length, 1, "payload exceeds max cnt should not be added again"); + + utlSetSessionStorage(logger, BUFFER_KEY,JSON.stringify([])) + } + }); + + this.testCase({ name: "ArraySendBuffer createNew: function createNew() can return expected sessionStorage buffer", test: () => { @@ -629,14 +822,15 @@ export class SenderTests extends AITestClass { let sessionBuffer = arrBuffer.createNew(logger, config, true); // set to false to make sure it is session storage buffer QUnit.assert.deepEqual(sessionBuffer.getItems(), [], "payload should be empty"); - let payload = ["payload1", "payload2", "payload3", "payload4", "payload5", "payload6"]; + //let payload = ["payload1", "payload2", "payload3", "payload4", "payload5", "payload6"]; + let payload = [{item: "payload1", cnt: 0}, {item: "payload2", cnt: 0}, {item: "payload3", cnt: 0}, {item: "payload4", cnt: 0}, {item: "payload5", cnt: 0}, {item: "payload6", cnt: 0} ]; arrForEach(payload, (val) =>{ arrBuffer.enqueue(val); }); sessionBuffer = arrBuffer.createNew(logger, config, true); QUnit.assert.deepEqual(sessionBuffer.getItems(), payload, "payload should be same"); QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger), payload, "session storage buffer is set"); - arrBuffer.enqueue("payload"); + arrBuffer.enqueue({item: "payload", cnt: 0}); QUnit.assert.deepEqual(arrBuffer.getItems().length, 7, "arrBuffer length"); QUnit.assert.deepEqual(sessionBuffer.getItems().length, 6, "copy is deep copy"); @@ -672,22 +866,62 @@ export class SenderTests extends AITestClass { let arrBuffer = sessionBuffer.createNew(logger, config, false); QUnit.assert.deepEqual(arrBuffer.getItems(), [], "payload should be empty"); - let payload = ["payload1", "payload2", "payload3", "payload4", "payload5", "payload6"]; + //let payload = ["payload1", "payload2", "payload3", "payload4", "payload5", "payload6"]; + let payload = [{item: "payload1", cnt: 0}, {item: "payload2", cnt: 0}, {item: "payload3", cnt: 0}, {item: "payload4", cnt: 0}, {item: "payload5", cnt: 0}, {item: "payload6", cnt: 0} ]; arrForEach(payload, (val) =>{ sessionBuffer.enqueue(val); }); QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger), payload, "session storage buffer is set"); arrBuffer = sessionBuffer.createNew(logger, config, false); QUnit.assert.deepEqual(arrBuffer.getItems(), payload, "payload should be same"); - sessionBuffer.enqueue("payload"); + sessionBuffer.enqueue({item: "payload", cnt: 0}); QUnit.assert.deepEqual(sessionBuffer.getItems().length, 1, "sessionBuffer length"); - QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger), ["payload"], "session storage buffer is set"); + QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger), [{item: "payload", cnt: 0}], "session storage buffer is set"); QUnit.assert.deepEqual(arrBuffer.getItems().length, 6, "copy is deep copy"); utlSetSessionStorage(logger, BUFFER_KEY,JSON.stringify([])); } }); + this.testCase({ + name: "SessionStorageSendBuffer Max Count: payload exceeds max retry cnt should not be added again", + test: () => { + let config = { + endpointUrl: "https//: test", + emitLineDelimitedJson: false, + maxBatchInterval: 15000, + maxBatchSizeInBytes: 102400, + disableTelemetry: false, + enableSessionStorageBuffer: true, + isRetryDisabled: false, + isBeaconApiDisabled:true, + disableXhr: false, + onunloadDisableFetch: false, + onunloadDisableBeacon: false, + instrumentationKey:"key", + namePrefix: "", + samplingPercentage: 100, + customHeaders: [{header:"header",value:"val" }], + convertUndefined: "", + eventsLimitInMem: 10000, + maxRetryCnt: 1 + } as ISenderConfig; + let logger = new DiagnosticLogger({instrumentationKey: "abc"}); + + let sessionBuffer = new SessionStorageSendBuffer(logger, config); + QUnit.assert.deepEqual(sessionBuffer.getItems(), [], "payload should be empty"); + let payload1 = {item: "payload1", cnt: 1}; + sessionBuffer.enqueue(payload1); + QUnit.assert.deepEqual(sessionBuffer.getItems().length, 1, "should have only one payload"); + + let payload2 = {item: "payload2", cnt: 2}; + sessionBuffer.enqueue(payload2); + QUnit.assert.deepEqual(sessionBuffer.getItems().length, 1, "should have only one payload"); + + utlSetSessionStorage(logger, BUFFER_KEY,JSON.stringify([])); + } + }); + this.testCase({ name: "SessionStorageSendBuffer createNew: function createNew() can return expected sessionStorage buffer with same prefix name", test: () => { @@ -717,8 +951,10 @@ export class SenderTests extends AITestClass { QUnit.assert.deepEqual(sessionBufferCopy.getItems(), [], "payload should be empty"); QUnit.assert.deepEqual(this._getBuffer(BUFFER_KEY, logger), [], "session storage buffer should be empty"); - let payload = ["payload1", "payload2", "payload3", "payload4", "payload5", "payload6"]; - let sentPayload = ["sent1", "sent2","sent3","sent4"]; + //let payload = ["payload1", "payload2", "payload3", "payload4", "payload5", "payload6"]; + let payload = [{item: "payload1", cnt: 0}, {item: "payload2", cnt: 0}, {item: "payload3", cnt: 0}, {item: "payload4", cnt: 0}, {item: "payload5", cnt: 0}, {item: "payload6", cnt: 0} ]; + let sentPayload = [{item: "sent1", cnt: 0}, {item: "sent2", cnt: 0}, {item: "sent3", cnt: 0}, {item: "sent4", cnt: 0} ]; + //let sentPayload = ["sent1", "sent2","sent3","sent4"]; arrForEach(payload, (val) =>{ sessionBuffer.enqueue(val); }); @@ -772,8 +1008,10 @@ export class SenderTests extends AITestClass { QUnit.assert.deepEqual(this._getBuffer(SENT_BUFFER_KEY, logger), [], "session storage sent buffer should be empty"); QUnit.assert.deepEqual(this._getBuffer(SENT_BUFFER_KEY, logger, prefix), [], "session storage sent buffer with prefix should be empty"); - let payload = ["payload1", "payload2", "payload3", "payload4", "payload5", "payload6"]; - let sentPayload = ["sent1", "sent2","sent3","sent4"]; + // let payload = ["payload1", "payload2", "payload3", "payload4", "payload5", "payload6"]; + // let sentPayload = ["sent1", "sent2","sent3","sent4"]; + let payload = [{item: "payload1", cnt: 0}, {item: "payload2", cnt: 0}, {item: "payload3", cnt: 0}, {item: "payload4", cnt: 0}, {item: "payload5", cnt: 0}, {item: "payload6", cnt: 0} ]; + let sentPayload = [{item: "sent1", cnt: 0}, {item: "sent2", cnt: 0}, {item: "sent3", cnt: 0}, {item: "sent4", cnt: 0} ]; arrForEach(payload, (val) =>{ sessionBuffer.enqueue(val); }); @@ -1004,7 +1242,7 @@ export class SenderTests extends AITestClass { try { this._sender.processTelemetry(telemetryItem, null); let buffer = this._sender._buffer.getItems(); - let payload = JSON.parse(buffer[buffer.length-1]); + let payload = JSON.parse(buffer[buffer.length-1].item); var actualIkey = payload.iKey; } catch(e) { QUnit.assert.ok(false, "Exception - " + e); @@ -1692,9 +1930,9 @@ export class SenderTests extends AITestClass { try { sender.processTelemetry(telemetryItem, null); QUnit.assert.equal(1, buffer.getItems().length, "sender buffer should have one payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 1, "sender buffer should have one payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have zero payload"); sender.onunloadFlush(); } catch(e) { @@ -1709,15 +1947,15 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(false, fetchstub.called, "fetch sender is not called"); QUnit.assert.equal(0, buffer.getItems().length, "sender buffer should not have one payload"); QUnit.assert.equal(0, buffer.count(), "sender buffer should not have any payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 0, "sender buffer should be clear payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(1, sentItems.length, "sent buffer should have only one payload"); this.sendJsonResponse(xhrRequest, {}, 200); - bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 0, "sender buffer should be clear payload"); - sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have no payload"); (window as any).XMLHttpRequest = fakeXMLHttpRequest; @@ -1779,9 +2017,9 @@ export class SenderTests extends AITestClass { try { sender.processTelemetry(telemetryItem, null); QUnit.assert.equal(1, buffer.getItems().length, "sender buffer should have one payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 1, "sender buffer should have one payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have zero payload"); sender.onunloadFlush(); } catch(e) { @@ -1793,9 +2031,9 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(false, fetchstub.called, "fetch sender is not called"); QUnit.assert.equal(0, buffer.getItems().length, "sender buffer should not have one payload"); QUnit.assert.equal(0, buffer.count(), "sender buffer should not have any payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 0, "sender buffer should be clear payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should not have one payload"); (window as any).XMLHttpRequest = fakeXMLHttpRequest; @@ -1870,9 +2108,9 @@ export class SenderTests extends AITestClass { sender.processTelemetry(telemetryItem, null); sender.processTelemetry(telemetryItem1, null); QUnit.assert.equal(2, buffer.getItems().length, "sender buffer should have one payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 2, "sender buffer should have one payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have zero payload"); sender.onunloadFlush(); } catch(e) { @@ -1886,16 +2124,16 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(false, fetchstub.called, "fetch sender is not called"); QUnit.assert.equal(0, buffer.getItems().length, "sender buffer should not have one payload"); QUnit.assert.equal(0, buffer.count(), "sender buffer should not have any payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 0, "sender buffer should be clear payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(1, sentItems.length, "sent buffer should have one payload"); - QUnit.assert.ok(sentItems[0].indexOf("iKey1") >= 0, "sent buffer should have ikey1 payload"); + QUnit.assert.ok(sentItems[0].item.indexOf("iKey1") >= 0, "sent buffer should have ikey1 payload"); this.sendJsonResponse(xhrRequest, {}, 200); - bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 0, "sender buffer should have no payload test1"); - sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have zero payload test1"); (window as any).XMLHttpRequest = fakeXMLHttpRequest; @@ -1957,9 +2195,9 @@ export class SenderTests extends AITestClass { try { sender.processTelemetry(telemetryItem, null); QUnit.assert.equal(1, buffer.getItems().length, "sender buffer should have one payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 1, "sender buffer should have one payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have zero payload"); sender.onunloadFlush(); } catch(e) { @@ -1972,16 +2210,16 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(true, fetchstub.calledOnce, "fetch sender is called once"); QUnit.assert.equal(0, buffer.getItems().length, "sender buffer should not have one payload"); QUnit.assert.equal(0, buffer.count(), "sender buffer should not have any payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 0, "sender buffer should be clear payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have one payload test1"); let setItemCalled = 0; let args = sessionSpy.args; let itemCount = 0; args.forEach((arg) => { - if (arg && arg[0] === "AI_sentBuffer") { + if (arg && arg[0] === SENT_BUFFER_KEY) { let data = JSON.parse(arg[1]); let cnt = data.length; if(data && cnt) { @@ -2056,9 +2294,9 @@ export class SenderTests extends AITestClass { try { sender.processTelemetry(telemetryItem, null); QUnit.assert.equal(1, buffer.getItems().length, "sender buffer should have one payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 1, "sender buffer should have one payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have zero payload"); sender.onunloadFlush(); } catch(e) { @@ -2071,9 +2309,9 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(0, this._getXhrRequests().length, "xhr sender should not be called"); QUnit.assert.equal(0, buffer.getItems().length, "sender buffer should not have one payload"); QUnit.assert.equal(0, buffer.count(), "sender buffer should not have any payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 0, "sender buffer should be clear payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should not have one payload"); @@ -2151,9 +2389,9 @@ export class SenderTests extends AITestClass { sender.processTelemetry(telemetryItem, null); sender.processTelemetry(telemetryItem1, null); QUnit.assert.equal(2, buffer.getItems().length, "sender buffer should have two payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 2, "sender buffer should have two payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have zero payload"); sender.onunloadFlush(); } catch(e) { @@ -2165,16 +2403,16 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(true, fetchstub.called, "fetch sender is called"); QUnit.assert.equal(0, buffer.getItems().length, "sender buffer should not have one payload"); QUnit.assert.equal(0, buffer.count(), "sender buffer should not have any payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 0, "sender buffer should be clear payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have no payload left"); let setItemCalled = 0; let itemCount = 0; let args = sessionSpy.args; args.forEach((arg) => { - if (arg && arg[0] === "AI_sentBuffer") { + if (arg && arg[0] === SENT_BUFFER_KEY) { let data = JSON.parse(arg[1]); let cnt = data.length; if(data && cnt) { @@ -2257,9 +2495,9 @@ export class SenderTests extends AITestClass { sender.processTelemetry(telemetryItem, null); sender.processTelemetry(telemetryItem1, null); QUnit.assert.equal(2, buffer.getItems().length, "sender buffer should have two payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 2, "sender buffer should have two payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(0, sentItems.length, "sent buffer should have zero payload"); sender.onunloadFlush(); } catch(e) { @@ -2271,9 +2509,9 @@ export class SenderTests extends AITestClass { QUnit.assert.equal(false, fetchstub.called, "fetch sender is called"); QUnit.assert.equal(0, buffer.getItems().length, "sender buffer should not have one payload"); QUnit.assert.equal(0, buffer.count(), "sender buffer should not have any payload"); - let bufferItems = JSON.parse(sessionStorage.getItem("AI_buffer") as any); + let bufferItems = JSON.parse(sessionStorage.getItem(BUFFER_KEY) as any); QUnit.assert.equal(bufferItems.length, 0, "sender buffer should be clear payload"); - let sentItems = JSON.parse(sessionStorage.getItem("AI_sentBuffer") as any); + let sentItems = JSON.parse(sessionStorage.getItem(SENT_BUFFER_KEY) as any); QUnit.assert.equal(2, sentItems.length, "sent buffer should not have two payload"); (window as any).XMLHttpRequest = fakeXMLHttpRequest; diff --git a/channels/applicationinsights-channel-js/package.json b/channels/applicationinsights-channel-js/package.json index c57516ff7..4f655e38d 100644 --- a/channels/applicationinsights-channel-js/package.json +++ b/channels/applicationinsights-channel-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-channel-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights JavaScript SDK Channel", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -53,10 +53,10 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "license": "MIT" } diff --git a/channels/applicationinsights-channel-js/src/Interfaces.ts b/channels/applicationinsights-channel-js/src/Interfaces.ts index 771635c12..7d6a43142 100644 --- a/channels/applicationinsights-channel-js/src/Interfaces.ts +++ b/channels/applicationinsights-channel-js/src/Interfaces.ts @@ -1,6 +1,22 @@ import { IStorageBuffer } from "@microsoft/applicationinsights-common"; import { IXHROverride } from "@microsoft/applicationinsights-core-js"; +/** + * Internal interface for sendBuffer, do not export it + * @internal + * @since 3.1.3 + */ +export interface IInternalStorageItem { + /** + * serialized telemetry to be stored. + */ + item: string; + /** + * total retry count + */ + cnt?: number; +} + export interface ISenderConfig { /** * The url to which payloads will be sent @@ -141,6 +157,15 @@ export interface ISenderConfig { * @since 3.1.1 */ retryCodes?: number[]; + + /** + * (Optional) The specific max retry count for each telemetry item. + * Default: 10 + * if it is set to 0, means no retry allowed + * if it is set to undefined, means no limit for retry times + * @since 3.2.0 + */ + maxRetryCnt?: number; } export interface IBackendResponse { diff --git a/channels/applicationinsights-channel-js/src/SendBuffer.ts b/channels/applicationinsights-channel-js/src/SendBuffer.ts index 9080f604d..03e244e92 100644 --- a/channels/applicationinsights-channel-js/src/SendBuffer.ts +++ b/channels/applicationinsights-channel-js/src/SendBuffer.ts @@ -1,16 +1,21 @@ import dynamicProto from "@microsoft/dynamicproto-js"; -import { utlGetSessionStorage, utlSetSessionStorage } from "@microsoft/applicationinsights-common"; +import { utlGetSessionStorage, utlRemoveSessionStorage, utlSetSessionStorage } from "@microsoft/applicationinsights-common"; import { IDiagnosticLogger, _eInternalMessageId, _throwInternal, arrForEach, arrIndexOf, dumpObj, eLoggingSeverity, getExceptionName, getJSON, - isArray, isFunction, isString + isArray, isFunction, isNullOrUndefined, isString } from "@microsoft/applicationinsights-core-js"; -import { ISenderConfig } from "./Interfaces"; +import { IInternalStorageItem, ISenderConfig } from "./Interfaces"; +/** + * Before 3.1.2, payload only allow string + * After 3.2.0, IInternalStorageItem is accepted + */ export interface ISendBuffer { + /** * Enqueue the payload */ - enqueue: (payload: string) => void; + enqueue: (payload: IInternalStorageItem) => void; /** * Returns the number of elements in the buffer @@ -30,23 +35,23 @@ export interface ISendBuffer { /** * Returns items stored in the buffer */ - getItems: () => string[]; + getItems: () => IInternalStorageItem[]; /** * Build a batch of all elements in the payload array */ - batchPayloads: (payload: string[]) => string; + batchPayloads: (payload: IInternalStorageItem[]) => string; /** * Moves items to the SENT_BUFFER. * The buffer holds items which were sent, but we haven't received any response from the backend yet. */ - markAsSent: (payload: string[]) => void; + markAsSent: (payload: IInternalStorageItem[]) => void; /** * Removes items from the SENT_BUFFER. Should be called on successful response from the backend. */ - clearSent: (payload: string[]) => void; + clearSent: (payload: IInternalStorageItem[]) => void; /** * Copy current buffer items to a new buffer. @@ -59,25 +64,26 @@ export interface ISendBuffer { abstract class BaseSendBuffer { - protected _get: () => string[]; - protected _set: (buffer: string[]) => string[]; + protected _get: () => IInternalStorageItem[]; + protected _set: (buffer: IInternalStorageItem[]) => IInternalStorageItem[]; constructor(logger: IDiagnosticLogger, config: ISenderConfig) { - let _buffer: string[] = []; + let _buffer: IInternalStorageItem[] = []; let _bufferFullMessageSent = false; + let _maxRetryCnt = config.maxRetryCnt; this._get = () => { return _buffer; }; - this._set = (buffer: string[]) => { + this._set = (buffer: IInternalStorageItem[]) => { _buffer = buffer; return _buffer; }; dynamicProto(BaseSendBuffer, this, (_self) => { - _self.enqueue = (payload: string) => { + _self.enqueue = (payload: IInternalStorageItem) => { if (_self.count() >= config.eventsLimitInMem) { // sent internal log only once per page view if (!_bufferFullMessageSent) { @@ -91,8 +97,20 @@ abstract class BaseSendBuffer { return; } - + + payload.cnt = payload.cnt || 0; + // max retry is defined, and max retry is reached, do not add the payload to buffer + if (!isNullOrUndefined(_maxRetryCnt)) { + if (payload.cnt > _maxRetryCnt) { + // TODO: add log here on dropping payloads + return; + } + } _buffer.push(payload); + + return; + + }; _self.count = (): number => { @@ -102,7 +120,7 @@ abstract class BaseSendBuffer { _self.size = (): number => { let size = _buffer.length; for (let lp = 0; lp < _buffer.length; lp++) { - size += _buffer[lp].length; + size += (_buffer[lp].item).length; } if (!config.emitLineDelimitedJson) { @@ -117,15 +135,19 @@ abstract class BaseSendBuffer { _bufferFullMessageSent = false; }; - _self.getItems = (): string[] => { + _self.getItems = (): IInternalStorageItem[] => { return _buffer.slice(0) }; - _self.batchPayloads = (payload: string[]): string => { - if (payload && payload.length > 0) { + _self.batchPayloads = (payloads: IInternalStorageItem[]): string => { + if (payloads && payloads.length > 0) { + let payloadStr: string[] = []; + arrForEach(payloads, (payload) => { + payloadStr.push(payload.item); + }) const batch = config.emitLineDelimitedJson ? - payload.join("\n") : - "[" + payload.join(",") + "]"; + payloadStr.join("\n") : + "[" + payloadStr.join(",") + "]"; return batch; } @@ -146,7 +168,7 @@ abstract class BaseSendBuffer { }); } - public enqueue(payload: string) { + public enqueue(payload: IInternalStorageItem) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } @@ -164,12 +186,12 @@ abstract class BaseSendBuffer { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } - public getItems(): string[] { + public getItems(): IInternalStorageItem[] { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging return null; } - public batchPayloads(payload: string[]): string { + public batchPayloads(payload: IInternalStorageItem[]): string { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging return null; } @@ -190,31 +212,34 @@ export class ArraySendBuffer extends BaseSendBuffer implements ISendBuffer { dynamicProto(ArraySendBuffer, this, (_self, _base) => { - _self.markAsSent = (payload: string[]) => { + _self.markAsSent = (payload: IInternalStorageItem[]) => { _base.clear(); }; - _self.clearSent = (payload: string[]) => { + _self.clearSent = (payload: IInternalStorageItem[]) => { // not supported }; }); } - public markAsSent(payload: string[]) { + public markAsSent(payload: IInternalStorageItem[]) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } - public clearSent(payload: string[]) { + public clearSent(payload: IInternalStorageItem[]) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } } +const PREVIOUS_KEYS: string[] = ["AI_buffer", "AI_sentBuffer"]; + /* * Session storage buffer holds a copy of all unsent items in the browser session storage. */ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuffer { - static BUFFER_KEY = "AI_buffer"; - static SENT_BUFFER_KEY = "AI_sentBuffer"; + static VERSION = "_1"; + static BUFFER_KEY = "AI_buffer"+ this.VERSION; + static SENT_BUFFER_KEY = "AI_sentBuffer" + this.VERSION; // Maximum number of payloads stored in the buffer. If the buffer is full, new elements will be dropped. static MAX_BUFFER_SIZE = 2000; @@ -224,22 +249,27 @@ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuf let _bufferFullMessageSent = false; //Note: should not use config.namePrefix directly, because it will always refers to the latest namePrefix let _namePrefix = config?.namePrefix; + // TODO: add remove buffer override as well const { getItem, setItem } = config.bufferOverride || { getItem: utlGetSessionStorage, setItem: utlSetSessionStorage }; + let _maxRetryCnt = config.maxRetryCnt; dynamicProto(SessionStorageSendBuffer, this, (_self, _base) => { const bufferItems = _getBuffer(SessionStorageSendBuffer.BUFFER_KEY); - const notDeliveredItems = _getBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY); + const itemsInSentBuffer = _getBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY); + let previousItems = _getPreviousEvents(); + const notDeliveredItems = itemsInSentBuffer.concat(previousItems); let buffer = _self._set(bufferItems.concat(notDeliveredItems)); - + // If the buffer has too many items, drop items from the end. if (buffer.length > SessionStorageSendBuffer.MAX_BUFFER_SIZE) { buffer.length = SessionStorageSendBuffer.MAX_BUFFER_SIZE; } _setBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY, []); _setBuffer(SessionStorageSendBuffer.BUFFER_KEY, buffer); + - _self.enqueue = (payload: string) => { + _self.enqueue = (payload: IInternalStorageItem) => { if (_self.count() >= SessionStorageSendBuffer.MAX_BUFFER_SIZE) { // sent internal log only once per page view if (!_bufferFullMessageSent) { @@ -253,6 +283,14 @@ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuf return; } + payload.cnt = payload.cnt || 0; + // max retry is defined, and max retry is reached, do not add the payload to buffer + if (!isNullOrUndefined(_maxRetryCnt)) { + if (payload.cnt > _maxRetryCnt) { + // TODO: add log here on dropping payloads + return; + } + } _base.enqueue(payload); _setBuffer(SessionStorageSendBuffer.BUFFER_KEY, _self._get()); @@ -266,7 +304,7 @@ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuf _bufferFullMessageSent = false; }; - _self.markAsSent = (payload: string[]) => { + _self.markAsSent = (payload: IInternalStorageItem[]) => { _setBuffer(SessionStorageSendBuffer.BUFFER_KEY, _self._set(_removePayloadsFromBuffer(payload, _self._get()))); @@ -290,7 +328,7 @@ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuf } }; - _self.clearSent = (payload: string[]) => { + _self.clearSent = (payload: IInternalStorageItem[]) => { let sentElements = _getBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY); sentElements = _removePayloadsFromBuffer(payload, sentElements); @@ -317,10 +355,14 @@ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuf return newBuffer; } - function _removePayloadsFromBuffer(payloads: string[], buffer: string[]): string[] { - const remaining: string[] = []; + function _removePayloadsFromBuffer(payloads: IInternalStorageItem[], buffer: IInternalStorageItem[]): IInternalStorageItem[] { + const remaining: IInternalStorageItem[] = []; + let payloadStr: string[] = []; + arrForEach(payloads, (payload) => { + payloadStr.push(payload.item); + }); arrForEach(buffer, (value) => { - if (!isFunction(value) && arrIndexOf(payloads, value) === -1) { + if (!isFunction(value) && arrIndexOf(payloadStr, value.item) === -1) { remaining.push(value); } }); @@ -328,13 +370,17 @@ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuf return remaining; } - function _getBuffer(key: string): string[] { + function _getBuffer(key: string): IInternalStorageItem[] { let prefixedKey = key; + prefixedKey = _namePrefix ? _namePrefix + "_" + prefixedKey : prefixedKey; + return _getBufferBase(prefixedKey); + } + + function _getBufferBase(key: string): T[] { try { - prefixedKey = _namePrefix ? _namePrefix + "_" + prefixedKey : prefixedKey; - const bufferJson = getItem(logger, prefixedKey); + const bufferJson = getItem(logger, key); if (bufferJson) { - let buffer: string[] = getJSON().parse(bufferJson); + let buffer: T[] = getJSON().parse(bufferJson); if (isString(buffer)) { // When using some version prototype.js the stringify / parse cycle does not decode array's correctly buffer = getJSON().parse(buffer as any); @@ -347,14 +393,14 @@ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuf } catch (e) { _throwInternal(logger, eLoggingSeverity.CRITICAL, _eInternalMessageId.FailedToRestoreStorageBuffer, - " storage key: " + prefixedKey + ", " + getExceptionName(e), + " storage key: " + key + ", " + getExceptionName(e), { exception: dumpObj(e) }); } return []; } - function _setBuffer(key: string, buffer: string[]) { + function _setBuffer(key: string, buffer: IInternalStorageItem[]) { let prefixedKey = key; try { prefixedKey = _namePrefix ? _namePrefix + "_" + prefixedKey : prefixedKey; @@ -371,10 +417,61 @@ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuf { exception: dumpObj(e) }); } } + + // this removes buffer with prefix+key + function _getPreviousEvents() { + let items: IInternalStorageItem[] = []; + try { + arrForEach(PREVIOUS_KEYS, (key) => { + let events = _getItemsFromPreviousKey(key); + items = items.concat(events); + + // to make sure that we also transfer items from old prefixed + key buffer + if (_namePrefix) { + let prefixedKey = _namePrefix + "_" + key; + let prefixEvents = _getItemsFromPreviousKey(prefixedKey); + items = items.concat( prefixEvents); + } + }); + return items; + + + } catch(e) { + _throwInternal(logger, eLoggingSeverity.WARNING, + _eInternalMessageId.FailedToSetStorageBuffer, + "Transfer events from previous buffers: " + getExceptionName(e) + ". previous Buffer items can not be removed", + { exception: dumpObj(e) }); + + } + return []; + } + + // transform string[] to IInternalStorageItem[] + function _getItemsFromPreviousKey(key: string) { + try { + let items = _getBufferBase(key); + let transFormedItems: IInternalStorageItem[] = []; + arrForEach(items, (item) => { + let internalItem = { + item: item, + cnt: 0 // previous events will be default to 0 count + } as IInternalStorageItem; + transFormedItems.push(internalItem); + }); + // remove the session storage if we can add events back + utlRemoveSessionStorage(logger, key); + return transFormedItems; + + } catch (e) { + // eslint-disable-next-line no-empty + } + return []; + } + }); } - public enqueue(payload: string) { + public enqueue(payload: IInternalStorageItem) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } @@ -382,11 +479,11 @@ export class SessionStorageSendBuffer extends BaseSendBuffer implements ISendBuf // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } - public markAsSent(payload: string[]) { + public markAsSent(payload: IInternalStorageItem[]) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } - public clearSent(payload: string[]) { + public clearSent(payload: IInternalStorageItem[]) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } diff --git a/channels/applicationinsights-channel-js/src/Sender.ts b/channels/applicationinsights-channel-js/src/Sender.ts index 310237a78..a08fee86d 100644 --- a/channels/applicationinsights-channel-js/src/Sender.ts +++ b/channels/applicationinsights-channel-js/src/Sender.ts @@ -14,12 +14,12 @@ import { isFetchSupported, isNullOrUndefined, mergeEvtNamespace, objExtend, onConfigChange, parseResponse, prependTransports, runTargetUnload } from "@microsoft/applicationinsights-core-js"; import { IPromise } from "@nevware21/ts-async"; -import { ITimerHandler, isTruthy, objDeepFreeze, objDefine, scheduleTimeout } from "@nevware21/ts-utils"; +import { ITimerHandler, isNumber, isString, isTruthy, objDeepFreeze, objDefine, scheduleTimeout } from "@nevware21/ts-utils"; import { DependencyEnvelopeCreator, EventEnvelopeCreator, ExceptionEnvelopeCreator, MetricEnvelopeCreator, PageViewEnvelopeCreator, PageViewPerformanceEnvelopeCreator, TraceEnvelopeCreator } from "./EnvelopeCreator"; -import { ISenderConfig } from "./Interfaces"; +import { IInternalStorageItem, ISenderConfig } from "./Interfaces"; import { ArraySendBuffer, ISendBuffer, SessionStorageSendBuffer } from "./SendBuffer"; import { Serializer } from "./Serializer"; import { Sample } from "./TelemetryProcessors/Sample"; @@ -30,7 +30,8 @@ const EMPTY_STR = ""; const FetchSyncRequestSizeLimitBytes = 65000; // approx 64kb (the current Edge, Firefox and Chrome max limit) interface IInternalPayloadData extends IPayloadData { - oriPayload: string[]; + oriPayload: IInternalStorageItem[]; + retryCnt?: number; } @@ -73,7 +74,8 @@ const defaultAppInsightsChannelConfig: IConfigDefaults = objDeepF httpXHROverride: { isVal: isOverrideFn, v:UNDEFINED_VALUE }, alwaysUseXhrOverride: cfgDfBoolean(), transports: UNDEFINED_VALUE, - retryCodes: UNDEFINED_VALUE + retryCodes: UNDEFINED_VALUE, + maxRetryCnt: {isVal: isNumber, v:10} }); function _chkSampling(value: number) { @@ -92,7 +94,7 @@ const EnvelopeTypeCreator: { [key:string] : EnvelopeCreator } = { [RemoteDependencyData.dataType]: DependencyEnvelopeCreator }; -export type SenderFunction = (payload: string[], isAsync: boolean) => void | IPromise; +export type SenderFunction = (payload: string[] | IInternalStorageItem[], isAsync: boolean) => void | IPromise; export class Sender extends BaseTelemetryPlugin implements IChannelControls { @@ -375,16 +377,16 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { httpInterface = _sendPostMgr && _sendPostMgr.getSenderInst(theTransports, false); let xhrInterface = _sendPostMgr && _sendPostMgr.getFallbackInst(); - _xhrSend = (payload: string[], isAsync: boolean) => { + _xhrSend = (payload: IInternalStorageItem[], isAsync: boolean) => { return _doSend(xhrInterface, payload, isAsync); }; - _fallbackSend = (payload: string[], isAsync: boolean) => { // for fallback send, should NOT mark payload as sent again! + _fallbackSend = (payload: IInternalStorageItem[], isAsync: boolean) => { // for fallback send, should NOT mark payload as sent again! return _doSend(xhrInterface, payload, isAsync, false); }; httpInterface = _alwaysUseCustomSend? customInterface : (httpInterface || customInterface || xhrInterface); - _self._sender = (payload: string[], isAsync: boolean) => { + _self._sender = (payload: IInternalStorageItem[], isAsync: boolean) => { return _doSend(httpInterface, payload, isAsync); }; @@ -403,7 +405,7 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { syncInterface = _alwaysUseCustomSend? customInterface : (syncInterface || customInterface); if ((_alwaysUseCustomSend || senderConfig.unloadTransports || !_syncUnloadSender) && syncInterface) { - _syncUnloadSender = (payload: string[], isAsync: boolean) => { + _syncUnloadSender = (payload: IInternalStorageItem[], isAsync: boolean) => { return _doSend(syncInterface, payload, isAsync); }; } @@ -440,9 +442,13 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { // flush if we would exceed the max-size limit by adding this item const buffer = _self._buffer; _checkMaxSize(payload); + let payloadItem = { + item: payload, + cnt: 0 // inital cnt will always be 0 + } as IInternalStorageItem; // enqueue the payload - buffer.enqueue(payload); + buffer.enqueue(payloadItem); // ensure an invocation timeout is set _setupTimer(); @@ -466,8 +472,13 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { /** * xhr state changes */ - _self._xhrReadyStateChange = (xhr: XMLHttpRequest, payload: string[], countOfItemsInPayload: number) => { - return _xhrReadyStateChange(xhr, payload, countOfItemsInPayload); + _self._xhrReadyStateChange = (xhr: XMLHttpRequest, payload: string[] | IInternalStorageItem[], countOfItemsInPayload: number) => { + // since version 3.2.0, this function is no-op + if (_isStringArr(payload)) { + return; + } + return _xhrReadyStateChange(xhr, payload as IInternalStorageItem[],countOfItemsInPayload); + } /** @@ -543,71 +554,52 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { /** * error handler */ - _self._onError = (payload: string[], message: string, event?: ErrorEvent) => { - _throwInternal(_self.diagLog(), - eLoggingSeverity.WARNING, - _eInternalMessageId.OnError, - "Failed to send telemetry.", - { message }); - - _self._buffer && _self._buffer.clearSent(payload); + _self._onError = (payload: IInternalStorageItem[] | string[], message: string, event?: ErrorEvent) => { + // since version 3.1.3, string[] is no-op + if (_isStringArr(payload)) { + return; + } + return _onError(payload as IInternalStorageItem[], message, event); }; /** * partial success handler */ - _self._onPartialSuccess = (payload: string[], results: IBackendResponse) => { - const failed: string[] = []; - const retry: string[] = []; - - // Iterate through the reversed array of errors so that splicing doesn't have invalid indexes after the first item. - const errors = results.errors.reverse(); - for (const error of errors) { - const extracted = payload.splice(error.index, 1)[0]; - if (_isRetriable(error.statusCode)) { - retry.push(extracted); - } else { - // All other errors, including: 402 (Monthly quota exceeded) and 439 (Too many requests and refresh cache). - failed.push(extracted); - } - } - - if (payload.length > 0) { - _self._onSuccess(payload, results.itemsAccepted); - } - - if (failed.length > 0) { - _self._onError(failed, formatErrorMessageXhr(null, ["partial success", results.itemsAccepted, "of", results.itemsReceived].join(" "))); - } - - if (retry.length > 0) { - _resendPayload(retry); - - _throwInternal(_self.diagLog(), - eLoggingSeverity.WARNING, - _eInternalMessageId.TransmissionFailed, "Partial success. " + - "Delivered: " + payload.length + ", Failed: " + failed.length + - ". Will retry to send " + retry.length + " our of " + results.itemsReceived + " items"); + _self._onPartialSuccess = (payload: IInternalStorageItem[] | string[], results: IBackendResponse) => { + // since version 3.1.3, string[] is no-op + if (_isStringArr(payload)) { + return; } + return _onPartialSuccess(payload as IInternalStorageItem[], results); }; /** * success handler */ - _self._onSuccess = (payload: string[], countOfItemsInPayload: number) => { - _self._buffer && _self._buffer.clearSent(payload); + _self._onSuccess = (payload: IInternalStorageItem[] | string[], countOfItemsInPayload: number) => { + // since version 3.1.3, string[] is no-op + if (_isStringArr(payload)) { + return; + } + return _onSuccess(payload as IInternalStorageItem[], countOfItemsInPayload); + + //_self._buffer && _self._buffer.clearSent(payload); }; /** * xdr state changes */ - _self._xdrOnLoad = (xdr: IXDomainRequest, payload: string[]) => { - return _xdrOnLoad(xdr, payload); + _self._xdrOnLoad = (xdr: IXDomainRequest, payload: IInternalStorageItem[] | string[]) => { + // since version 3.1.3, string[] is no-op + if (_isStringArr(payload)) { + return; + } + return _xdrOnLoad(xdr, payload as IInternalStorageItem[]); } - function _xdrOnLoad (xdr: IXDomainRequest, payload: string[]) { + function _xdrOnLoad (xdr: IXDomainRequest, payload: IInternalStorageItem[]) { const responseText = _getResponseText(xdr); if (xdr && (responseText + "" === "200" || responseText === "")) { _consecutiveErrors = 0; @@ -680,12 +672,71 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { /** * xhr state changes */ - function _xhrReadyStateChange (xhr: XMLHttpRequest, payload: string[], countOfItemsInPayload: number) { + function _xhrReadyStateChange (xhr: XMLHttpRequest, payload: IInternalStorageItem[], countOfItemsInPayload: number) { if (xhr.readyState === 4) { _checkResponsStatus(xhr.status, payload, xhr.responseURL, countOfItemsInPayload, formatErrorMessageXhr(xhr), _getResponseText(xhr) || xhr.response); } } + /** + * error handler + */ + function _onError(payload: IInternalStorageItem[], message: string, event?: ErrorEvent) { + _throwInternal(_self.diagLog(), + eLoggingSeverity.WARNING, + _eInternalMessageId.OnError, + "Failed to send telemetry.", + { message }); + + _self._buffer && _self._buffer.clearSent(payload); + } + /** + * partial success handler + */ + function _onPartialSuccess(payload: IInternalStorageItem[], results: IBackendResponse) { + const failed: IInternalStorageItem[] = []; + const retry: IInternalStorageItem[] = []; + + // Iterate through the reversed array of errors so that splicing doesn't have invalid indexes after the first item. + const errors = results.errors.reverse(); + for (const error of errors) { + const extracted = payload.splice(error.index, 1)[0]; + if (_isRetriable(error.statusCode)) { + retry.push(extracted); + } else { + // All other errors, including: 402 (Monthly quota exceeded) and 439 (Too many requests and refresh cache). + failed.push(extracted); + } + } + + if (payload.length > 0) { + _self._onSuccess(payload, results.itemsAccepted); + } + + if (failed.length > 0) { + _self._onError(failed, formatErrorMessageXhr(null, ["partial success", results.itemsAccepted, "of", results.itemsReceived].join(" "))); + } + + if (retry.length > 0) { + _resendPayload(retry); + + _throwInternal(_self.diagLog(), + eLoggingSeverity.WARNING, + _eInternalMessageId.TransmissionFailed, "Partial success. " + + "Delivered: " + payload.length + ", Failed: " + failed.length + + ". Will retry to send " + retry.length + " our of " + results.itemsReceived + " items"); + } + } + + + /** + * success handler + */ + function _onSuccess(payload: IInternalStorageItem[], countOfItemsInPayload: number) { + _self._buffer && _self._buffer.clearSent(payload); + } + + function _getPayloadArr(payload?: IPayloadData) { try { if (payload) { @@ -823,7 +874,7 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { return _self._sample.isSampledIn(envelope); } - function _getOnComplete(payload: string[], status: number, headers: {[headerName: string]: string;}, response?: string) { + function _getOnComplete(payload: IInternalStorageItem[], status: number, headers: {[headerName: string]: string;}, response?: string) { // *********************************************************************************************** //TODO: handle other status codes @@ -834,7 +885,7 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { } } - function _doSend(sendInterface: IXHROverride, payload: string[], isAsync: boolean, markAsSent: boolean = true): void | IPromise { + function _doSend(sendInterface: IXHROverride, payload: IInternalStorageItem[], isAsync: boolean, markAsSent: boolean = true): void | IPromise { let onComplete = (status: number, headers: {[headerName: string]: string;}, response?: string) => { return _getOnComplete(payload, status, headers, response); } @@ -852,7 +903,7 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { return null; } - function _getPayload(payload: string[]): IInternalPayloadData { + function _getPayload(payload: IInternalStorageItem[]): IInternalPayloadData { if (isArray(payload) && payload.length > 0) { let batch = _self._buffer.batchPayloads(payload); let headers = _getHeaders(); @@ -897,7 +948,7 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { return false; } - function _checkResponsStatus(status: number, payload: string[], responseUrl: string, countOfItemsInPayload: number, errorMessage: string, res: any) { + function _checkResponsStatus(status: number, payload: IInternalStorageItem[], responseUrl: string, countOfItemsInPayload: number, errorMessage: string, res: any) { let response: IBackendResponse = null; if (!_self._appId) { response = parseResponse(res); @@ -975,7 +1026,7 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { return false; } - function _doUnloadSend(payload: string[], isAsync: boolean) { + function _doUnloadSend(payload: IInternalStorageItem[], isAsync: boolean) { if (_syncUnloadSender) { // We are unloading so always call the sender with sync set to false @@ -994,7 +1045,7 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { let data = internalPayload && internalPayload.oriPayload; if (!_disableBeaconSplit) { // Failed to send entire payload so try and split data and try to send as much events as possible - let droppedPayload: string[] = []; + let droppedPayload: IInternalStorageItem[] = []; for (let lp = 0; lp < data.length; lp++) { const thePayload = data[lp]; let arr = [thePayload]; @@ -1017,14 +1068,27 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { } + function _isStringArr(arr: string[] | IInternalStorageItem[]) { + try { + if (arr && arr.length){ + return (isString(arr[0])); + } + + } catch(e) { + //TODO: log, sender use IInternalStorageItem instead of string since 3.1.3 + } + return null; + + } + - function _fetchKeepAliveSender(payload: string[], isAsync: boolean) { + function _fetchKeepAliveSender(payload: IInternalStorageItem[], isAsync: boolean) { let transport = null; if (isArray(payload)) { let payloadSize = payload.length; for (let lp = 0; lp < payload.length; lp++) { - payloadSize += payload[lp].length; + payloadSize += payload[lp].item.length; } let syncFetchPayload = _sendPostMgr.getSyncFetchPayload(); @@ -1050,7 +1114,7 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { * Resend payload. Adds payload back to the send buffer and setup a send timer (with exponential backoff). * @param payload */ - function _resendPayload(payload: string[], linearFactor: number = 1) { + function _resendPayload(payload: IInternalStorageItem[], linearFactor: number = 1) { if (!payload || payload.length === 0) { return; } @@ -1060,6 +1124,8 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { _consecutiveErrors++; for (const item of payload) { + item.cnt = item.cnt || 0; // to make sure we have cnt for each payload + item.cnt ++; // when resend, increase cnt buffer.enqueue(item); } @@ -1160,6 +1226,8 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { } } + + /** * Validate UUID Format * Specs taken from https://tools.ietf.org/html/rfc4122 and breeze repo @@ -1276,9 +1344,12 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { /** * xhr state changes * @deprecated + * since version 3.2.0, if the payload is string[], this function is no-op (string[] is only used for backwards Compatibility) */ - public _xhrReadyStateChange(xhr: XMLHttpRequest, payload: string[], countOfItemsInPayload: number) { + public _xhrReadyStateChange(xhr: XMLHttpRequest, payload: string[] | IInternalStorageItem[], countOfItemsInPayload: number) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging + // TODO: no-op + // add note to users, this will be removed } /** @@ -1298,30 +1369,37 @@ export class Sender extends BaseTelemetryPlugin implements IChannelControls { /** * error handler + * @Internal + * since version 3.2.0, if the payload is string[], this function is no-op (string[] is only used for backwards Compatibility) */ - public _onError(payload: string[], message: string, event?: ErrorEvent) { + public _onError(payload: string[] | IInternalStorageItem[], message: string, event?: ErrorEvent) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } /** * partial success handler + * @Internal + * since version 3.2.0, if the payload is string[], this function is no-op (string[] is only used for backwards Compatibility) */ - public _onPartialSuccess(payload: string[], results: IBackendResponse) { + public _onPartialSuccess(payload: string[] | IInternalStorageItem[], results: IBackendResponse) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } /** * success handler + * @Internal + * since version 3.2.0, if the payload is string[], this function is no-op (string[] is only used for backwards Compatibility) */ - public _onSuccess(payload: string[], countOfItemsInPayload: number) { + public _onSuccess(payload: string[] | IInternalStorageItem[], countOfItemsInPayload: number) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } /** * xdr state changes * @deprecated + * since version 3.2.0, if the payload is string[], this function is no-op (string[] is only used for backwards Compatibility) */ - public _xdrOnLoad(xdr: IXDomainRequest, payload: string[]) { + public _xdrOnLoad(xdr: IXDomainRequest, payload: string[] | IInternalStorageItem[]) { // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging } diff --git a/channels/offline-channel-js/Tests/Unit/src/channel.tests.ts b/channels/offline-channel-js/Tests/Unit/src/channel.tests.ts index a3d75326f..3326e22c9 100644 --- a/channels/offline-channel-js/Tests/Unit/src/channel.tests.ts +++ b/channels/offline-channel-js/Tests/Unit/src/channel.tests.ts @@ -365,7 +365,7 @@ export class ChannelTests extends AITestClass { return true; } return false; - }, "Wait for fetch response" + new Date().toISOString(), 15, 1000) as any) + }, "Wait for fetch response" + new Date().toISOString(), 200, 1000) as any) }); this.testCase({ diff --git a/channels/offline-channel-js/Tests/Unit/src/dbprovider.tests.ts b/channels/offline-channel-js/Tests/Unit/src/dbprovider.tests.ts index 306094e81..360dc2771 100644 --- a/channels/offline-channel-js/Tests/Unit/src/dbprovider.tests.ts +++ b/channels/offline-channel-js/Tests/Unit/src/dbprovider.tests.ts @@ -90,13 +90,13 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for init response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for init response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let isclosed = this.ctx.isclosed; if (isclosed) { return true; } return false; - }, "Wait for close response" + new Date().toISOString(), 15, 1000) as any) + }, "Wait for close response" + new Date().toISOString(), 30, 1000) as any) }); this.testCaseAsync({ @@ -149,27 +149,27 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for Init response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for Init response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.evt; if (item) { return true; } return false; - }, "Wait for add Event response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for add Event response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.getEvt; if (item) { return true; } return false; - }, "Wait for get Event response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get Event response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let isclosed = this.ctx.isclosed; if (isclosed) { return true; } return false; - }, "Wait for close response" + new Date().toISOString(), 15, 1000) as any) + }, "Wait for close response" + new Date().toISOString(), 30, 1000) as any) }); this.testCaseAsync({ @@ -284,28 +284,28 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for Init response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for Init response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.preEvts; if (item) { return true; } return false; - }, "Wait for get previous Events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get previous Events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.evt; if (item) { return true; } return false; - }, "Wait for add Event response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for add Event response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.allEvts; if (item) { return true; } return false; - }, "Wait for get all Events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get all Events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item1 = this.ctx.evt1; let item2 = this.ctx.evt2; if (item1 && item2) { @@ -313,40 +313,40 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for add all Events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for add all Events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items = this.ctx.allEvts1; if (items) { return true; } return false; - }, "Wait for get all Events1 response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get all Events1 response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items = this.ctx.nextBatch; if (items && items.length == 1) { return true; } return false; - }, "Wait for get next Batch response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get next Batch response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items = this.ctx.twoEvts; if (items && items.length == 2) { return true; } return false; - }, "Wait for get two Events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get two Events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.clear; if (item) { return true; } return false; - }, "Wait for clear response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for clear response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let isclosed = this.ctx.isclosed; if (isclosed) { return true; } return false; - }, "Wait for close response" + new Date().toISOString(), 15, 1000) as any) + }, "Wait for close response" + new Date().toISOString(), 30, 1000) as any) }); @@ -413,14 +413,14 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for Init response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for Init response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.evt; if (item) { return true; } return false; - }, "Wait for add Event response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for add Event response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.nextBatchErr; if (item) { Assert.equal(item.message, "open cursor mock error"); @@ -428,13 +428,13 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for handle error response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for handle error response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let isclosed = this.ctx.isclosed; if (isclosed) { return true; } return false; - }, "Wait for close response" + new Date().toISOString(), 15, 1000) as any) + }, "Wait for close response" + new Date().toISOString(), 30, 1000) as any) }); @@ -541,7 +541,7 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for Init response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for Init response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items = this.ctx.removeEvts; if (items) { @@ -549,7 +549,7 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for remove evt response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for remove evt response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items = this.ctx.allEvts; if (items) { @@ -557,14 +557,14 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for get Events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get Events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item1 = this.ctx.removeEvts1; if (item1) { return true; } return false; - }, "Wait for remove Event1 response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for remove Event1 response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items2 = this.ctx.removeEvts2; if (items2) { @@ -572,7 +572,7 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for remove event2 response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for remove event2 response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items = this.ctx.allEvts1; if (items ) { @@ -580,7 +580,7 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for get Events1 response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get Events1 response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let isclosed = this.ctx.isclosed; if (isclosed) { Assert.equal(this.batchDrop.length, 1, "notification should be called once"); // sent in clean process during initialization @@ -588,7 +588,7 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for close response" + new Date().toISOString(), 15, 1000) as any) + }, "Wait for close response" + new Date().toISOString(), 30, 1000) as any) }); @@ -667,7 +667,7 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for Init response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for Init response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.evt; let item1 = this.ctx.evt1; let item2 = this.ctx.evt2; @@ -676,7 +676,7 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for get Events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get Events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items = this.ctx.allEvts1; if (items && items.length == 0) { @@ -684,13 +684,13 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for get Events1 response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get Events1 response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let isclosed = this.ctx.isclosed; if (isclosed) { return true; } return false; - }, "Wait for close response" + new Date().toISOString(), 15, 1000) as any) + }, "Wait for close response" + new Date().toISOString(), 30, 1000) as any) }); this.testCaseAsync({ @@ -706,7 +706,7 @@ export class OfflineDbProviderTests extends AITestClass { let endpoint = DEFAULT_BREEZE_ENDPOINT + DEFAULT_BREEZE_PATH; let provider = new IndexedDbProvider(); let itemCtx = this.core.getProcessTelContext(); - let storageConfig = createDynamicConfig({inStorageMaxTime: 10000}).cfg; + let storageConfig = createDynamicConfig({inStorageMaxTime: 30000}).cfg; let providerCxt = { itemCtx: itemCtx, storageConfig: storageConfig, @@ -739,7 +739,7 @@ export class OfflineDbProviderTests extends AITestClass { this.ctx.addEvent1Err = reason; Assert.ok(false, "error for add event1"); }); - this.clock.tick(6000); + this.clock.tick(25000); let evt2 = TestHelper.mockEvent(endpoint, 2, false); @@ -784,7 +784,7 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for Init response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for Init response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items = this.ctx.allEvts; let cnt = 0; if (items && items.length == 3) { @@ -796,7 +796,7 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for get Events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get Events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.cleanEvts; if (item) { @@ -804,7 +804,7 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for clean Events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for clean Events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let items = this.ctx.allEvts1; if (items) { @@ -812,7 +812,7 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for get Events1 response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get Events1 response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let isclosed = this.ctx.isclosed; if (isclosed) { Assert.equal(this.batchDrop.length, 1, "notification should be called once"); @@ -821,7 +821,7 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for close response" + new Date().toISOString(), 15, 1000) as any) + }, "Wait for close response" + new Date().toISOString(), 30, 1000) as any) }); this.testCaseAsync({ @@ -898,7 +898,7 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for Init response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for Init response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.addEventErr; if (item) { Assert.equal(item.message, "open db mock error"); @@ -906,14 +906,14 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for add Event handle error response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for add Event handle error response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.removeEvt; if (item) { return true; } return false; - }, "Wait for remove Event handle error response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for remove Event handle error response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.getEvtsErr; if (item) { Assert.equal(item.message, "open db mock error"); @@ -921,21 +921,21 @@ export class OfflineDbProviderTests extends AITestClass { } return false; - }, "Wait for get all events handle error response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get all events handle error response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.cleanEvts; if (item !== null) { return true; } return false; - }, "Wait for get clean events handle error response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get clean events handle error response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.clearEvts; if (item) { return true; } return false; - }, "Wait for get clear events handle error response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for get clear events handle error response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let isclosed = this.ctx.isclosed; if (isclosed) { return true; @@ -1044,55 +1044,55 @@ export class OfflineDbProviderTests extends AITestClass { return true; } return false; - }, "Wait for Init response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for Init response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.addEvent; if (item) { return true; } return false; - }, "Wait for add Event response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for add Event response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.nextBatch ; if (item) { return true; } return false; - }, "Wait for next batch response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for next batch response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.allEvts; if (item) { return true; } return false; - }, "Wait for all events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for all events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.removeEvts; if (item) { return true; } return false; - }, "Wait for remove events response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for remove events response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.clear; if (item) { return true; } return false; - }, "Wait for clear response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for clear response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let item = this.ctx.clean; if (item !== null) { return true; } return false; - }, "Wait for clean response" + new Date().toISOString(), 15, 1000) as any).concat(PollingAssert.createPollingAssert(() => { + }, "Wait for clean response" + new Date().toISOString(), 30, 1000) as any).concat(PollingAssert.createPollingAssert(() => { let isclosed = this.ctx.isclosed; if (isclosed) { return true; } return false; - }, "Wait for close response" + new Date().toISOString(), 15, 1000) as any) + }, "Wait for close response" + new Date().toISOString(), 30, 1000) as any) }); } diff --git a/channels/offline-channel-js/package.json b/channels/offline-channel-js/package.json index de6c49dad..38dd8766d 100644 --- a/channels/offline-channel-js/package.json +++ b/channels/offline-channel-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-offlinechannel-js", - "version": "0.1.2", + "version": "0.2.0", "description": "Microsoft Application Insights JavaScript SDK Offline Channel", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -28,10 +28,10 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "peerDependencies": { "tslib": "*" diff --git a/channels/tee-channel-js/package.json b/channels/tee-channel-js/package.json index d197e9535..7d6432d99 100644 --- a/channels/tee-channel-js/package.json +++ b/channels/tee-channel-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-teechannel-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights JavaScript SDK Tee Channel", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -54,10 +54,10 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "license": "MIT" } diff --git a/common/Tests/Framework/package.json b/common/Tests/Framework/package.json index 6362959aa..32cf62de2 100644 --- a/common/Tests/Framework/package.json +++ b/common/Tests/Framework/package.json @@ -52,7 +52,7 @@ }, "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" } } diff --git a/common/Tests/Framework/src/AITestClass.ts b/common/Tests/Framework/src/AITestClass.ts index 1bf14cbc3..4cbb73d0d 100644 --- a/common/Tests/Framework/src/AITestClass.ts +++ b/common/Tests/Framework/src/AITestClass.ts @@ -611,7 +611,11 @@ export class AITestClass { let resultPayload: any[] = []; if (spy.called && spy.args && spy.args.length > 0) { spy.args.forEach(call => { - call[0].forEach((message: string) => { + call[0].forEach((item: any) => { + let message = item; + if (typeof item !== "string") { + message = item.item; + } if (message) { // Ignore the internal SendBrowserInfoOnUserInit message (Only occurs when running tests in a browser) if (includeInit || message.indexOf("AI (Internal): 72 ") === -1) { diff --git a/common/config/rush/npm-shrinkwrap.json b/common/config/rush/npm-shrinkwrap.json index 4a147c5b3..7f2f8f687 100644 --- a/common/config/rush/npm-shrinkwrap.json +++ b/common/config/rush/npm-shrinkwrap.json @@ -12,8 +12,8 @@ "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -297,17 +297,17 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@microsoft/api-extractor": { - "version": "7.43.0", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.0.tgz", - "integrity": "sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==", + "version": "7.43.1", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.1.tgz", + "integrity": "sha512-ohg40SsvFFgzHFAtYq5wKJc8ZDyY46bphjtnSvhSSlXpPTG7GHwyyXkn48UZiUCBwr2WC7TRC1Jfwz7nreuiyQ==", "dependencies": { - "@microsoft/api-extractor-model": "7.28.13", + "@microsoft/api-extractor-model": "7.28.14", "@microsoft/tsdoc": "0.14.2", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "4.0.2", + "@rushstack/node-core-library": "4.1.0", "@rushstack/rig-package": "0.5.2", - "@rushstack/terminal": "0.10.0", - "@rushstack/ts-command-line": "4.19.1", + "@rushstack/terminal": "0.10.1", + "@rushstack/ts-command-line": "4.19.2", "lodash": "~4.17.15", "minimatch": "~3.0.3", "resolve": "~1.22.1", @@ -320,13 +320,13 @@ } }, "node_modules/@microsoft/api-extractor-model": { - "version": "7.28.13", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.13.tgz", - "integrity": "sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==", + "version": "7.28.14", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.14.tgz", + "integrity": "sha512-Bery/c8A8SsKPSvA82cTTuy/+OcxZbLRmKhPkk91/AJOQzxZsShcrmHFAGeiEqSIrv1nPZ3tKq9kfMLdCHmsqg==", "dependencies": { "@microsoft/tsdoc": "0.14.2", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "4.0.2" + "@rushstack/node-core-library": "4.1.0" } }, "node_modules/@microsoft/api-extractor/node_modules/typescript": { @@ -409,17 +409,17 @@ } }, "node_modules/@nevware21/ts-async": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.5.0.tgz", - "integrity": "sha512-fJ2wSl5fd4UWoWbnXpPVKRg2Uw6u4+o9RsBHb35tiaOajVxJ97LrKAtrCGi6E19GpgfQbAWRFvz/iDXe3XCjWQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.5.1.tgz", + "integrity": "sha512-O2kN8n2HpDWJ7Oji+oTMnhITrCndmrNvrHbGDwAIBydx+FWvLE/vrw4QwnRRMvSCa2AJrcP59Ryklxv30KfkWQ==", "dependencies": { - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@nevware21/ts-utils": ">= 0.11.2 < 2.x" } }, "node_modules/@nevware21/ts-utils": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.11.1.tgz", - "integrity": "sha512-1QZSZ39UzjC8MR0+LRO2l8ITFHYdCZeHfBG9p3XUCz0hQ22I0Pf/XE5EF+TPSJK3LLME3pUNx2MCQ4XEtOHv+g==" + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.11.2.tgz", + "integrity": "sha512-80W8BkS09kkGuUHJX50Fqq+QqAslxUaOQytH+3JhRacXs1EpEt2JOOkYKytqFZAYir3SeH9fahniEaDzIBxlUw==" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -533,14 +533,11 @@ } }, "node_modules/@rollup/plugin-replace/node_modules/magic-string": { - "version": "0.30.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz", - "integrity": "sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, "node_modules/@rollup/pluginutils": { @@ -567,12 +564,12 @@ "node_modules/@rush-temp/1ds-core-js": { "version": "0.0.0", "resolved": "file:projects/1ds-core-js.tgz", - "integrity": "sha512-R/+dUkD7vnnFDiR5yEOPZ5/LLrcFJvh5DWHs2nEvAlij2q+olgFI0ZYSsC+cvjTfN1KNN2Bxt3nKwBtbeb84bQ==", + "integrity": "sha512-hEFDIYiJcmeRGhD2UEmaL7b487olMGqaolwv4eoKYgCeFcd42gg1G90VEVf/GV5jR/cFkyPYL0oomODI+1fm6Q==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -595,12 +592,12 @@ "node_modules/@rush-temp/1ds-post-js": { "version": "0.0.0", "resolved": "file:projects/1ds-post-js.tgz", - "integrity": "sha512-L5TjtUz0xg0N06Cf6CwGk2q1ZbsJ5dwQbp95PPTxaysNIFRjgsPDbs3Yg35o3nkYga6cj2OA+lnpMEfnBwm+sg==", + "integrity": "sha512-0LYCOwOxlF8Pn9d5dLCiuf5z8T/S0wug/zH72ctxabfvKKz2NYc0O0iCBErhtkmTeJuJWBbmkCBxgLRqKUDvZA==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -617,12 +614,12 @@ "node_modules/@rush-temp/ai-test-framework": { "version": "0.0.0", "resolved": "file:projects/ai-test-framework.tgz", - "integrity": "sha512-4EJB8YBv7HEJSYDyu3zo1FiGMFKW9wgSwISIKLxpfDqQ/h4fIHUJkqbRy9q1CUkMyKQZZBsdlmGv407G0gl0tw==", + "integrity": "sha512-i8L9al7YfV205G5UQttp7Do21ziq98plr92VSnkVOOmz2dtB0kXtOdLtlVxtDvtZIoiGvo1wpU0j9mPUuLNdBw==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -643,13 +640,13 @@ "node_modules/@rush-temp/applicationinsights-analytics-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-analytics-js.tgz", - "integrity": "sha512-enACKO7xFZ1Qvlxqo5elhzBl/lR6LjvsqkYBdWp67y65fMLlsj/iiSAXycncPwu0vj/wWWGA0qRp/7Jz7MfmRg==", + "integrity": "sha512-0xckFcN2+P6PLHdlvOpyAx8spTKcSxitz+t60x5BCzLpfMrYrFmA9hOirY6a9RktZUt8GCPaxgk4TVCj8UQFCw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -671,14 +668,14 @@ "node_modules/@rush-temp/applicationinsights-cfgsync-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-cfgsync-js.tgz", - "integrity": "sha512-dpoiI4EF6yomQ5nGuB+SIGMyo5q/9VasIVqeQKlw96bTXYUaQl9MXM02wPowLBlL6KqZybU9t/LXrRPIoyPBOA==", + "integrity": "sha512-xMBH3gXddy9zalHlwO6nG6x28VfBcTQ19kNRiFqJWHsN2aLBs3dsDEqDP5Pyb87S0O0WlMSPBjV/k0uXAA0lqw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -700,14 +697,14 @@ "node_modules/@rush-temp/applicationinsights-channel-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-channel-js.tgz", - "integrity": "sha512-gN+hb/DnDL68Hyr2+fKjEBihJaVgw/58FM3US0O/zPx6LTbKDMKcouonma+OBZXqqE8O/yadnz86umwJl8DVhg==", + "integrity": "sha512-1ReO8xzqEu6EtiGTJfOEWrX0H66rBzFhiI4gVD4lsrxogp/+vUf7jZ6sR2Uj4UU/+aLkWz1TQC0QwjlOP1NSuw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -727,12 +724,12 @@ "node_modules/@rush-temp/applicationinsights-chrome-debug-extension": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-chrome-debug-extension.tgz", - "integrity": "sha512-HF3VcxqHwxfIm0b3Zm8/z0wpkuKZmqxJQTV4BE99SiOxNqhWPMbRA6AzKXePnGZKukKbb4Ni8kA0GkKKGrui6Q==", + "integrity": "sha512-f3RI+93J6cfgM+aJBEWAR4VL+GMwfz90bnhbUCk1zYGqzDQEG+sPjckmDc7r+IeXU9rCutK6JQOxhh2sbBf36A==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -761,13 +758,13 @@ "node_modules/@rush-temp/applicationinsights-clickanalytics-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-clickanalytics-js.tgz", - "integrity": "sha512-YdxJHg07JqPHPergHG9lDcO/6WK9ofC4RnrAZf/C0o41wnlAjR5fF4cj6bF7kUdxQVTxeVVcSSnnY1mNnsbIJQ==", + "integrity": "sha512-vLG1jtUoEaDdjkwJjpI+JbjmU1mscwDS59yBN6tUFxkj3W3KAgRObsc9Mbff0OtNtvB/ZrILJDibOnkZ8cydxA==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -786,13 +783,13 @@ "node_modules/@rush-temp/applicationinsights-common": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-common.tgz", - "integrity": "sha512-ZZy5KLgxm1Ypcz6oedFzl0Kdkb31xNETFasdK0agRyhVJuRMnt0jGFFb6q1U3g0EamB2bDTnUxodK3DXwSo2zQ==", + "integrity": "sha512-qjI7IV3bCKy4YOj+f5InCka4wnDvxJpWbbb7jo8F3rULYwpV7yMBIFE2DLttwrPJowF3jESp0CZD6U+9iraZTQ==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -812,14 +809,14 @@ "node_modules/@rush-temp/applicationinsights-core-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-core-js.tgz", - "integrity": "sha512-KMq+yAWsH/J7daon+PRaoKeYAiPUdgukJoEaGoj01d4E8raNyl5Lnr3rDQvA5U608J9AuTgl6Z/p5YVBzIPFFA==", + "integrity": "sha512-5ixW1SnUFE3DhOPw5YudR3FXG/iKsa6GBEDFlsdiAVV5pkWUkJtfNfg8MBhJRfak8qOt3x/cIPq6RUmxRJyMcg==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -841,13 +838,13 @@ "node_modules/@rush-temp/applicationinsights-debugplugin-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-debugplugin-js.tgz", - "integrity": "sha512-KJMur2u7KUdYVE6Fm2J/yNNoZQndgBKj0xtpJiCb5m1vdh78tehor4eOTE9KLREGdFK44QNCMStQLrnqvE7Ycg==", + "integrity": "sha512-lcO9h5kSI8EHAlUiePOe9bDlTWZtq+OX5emM7pZ3D4lvpNx5iokDlEOevHyP4/1rWemZHQgQjcLQEiVG1Kgw+Q==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -866,14 +863,14 @@ "node_modules/@rush-temp/applicationinsights-dependencies-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-dependencies-js.tgz", - "integrity": "sha512-C9rZ/ThX0Vj7ZDBvjQUY387UkD0y70jOi3Rc3HKX429XG2RK3lkXD2n7lUCLt/SMYCsXK3nyHEcXgHe1mxuPcQ==", + "integrity": "sha512-QFn/JsTFfkYZLIKP02arDnebLSTrssmKbiorSEpRxabEmE037V8XRg+AO8EvSPilz3Gt9tLfIYumEPjdDDOfUw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -894,10 +891,10 @@ "node_modules/@rush-temp/applicationinsights-example-aisku": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-example-aisku.tgz", - "integrity": "sha512-YYtAjG2S96t57Tu+1QGWcZ1Z9eX+N3flcbC1pdG/uuv9MJDn6eQ5zo1a5RnmLcpGmUbalEdVeXEYfmFUy4OH+Q==", + "integrity": "sha512-bueUtVJiHCA7fEX60617GuUZ1mzbScWx/1z6hTNw6YAXnU5RjDwA3lotnw1ML4jP2NBn8tBUdG0QqTdqHzQ3KA==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -912,12 +909,12 @@ "node_modules/@rush-temp/applicationinsights-example-cfgsync": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-example-cfgsync.tgz", - "integrity": "sha512-dx1GhITCJi0lNru+36zViIK/7r5AeYXEi55MYyd/awATvzp9b1lNOg/SLuhAw99kF/gBifqB2N4jrrZz09MpCQ==", + "integrity": "sha512-PubfIZLK8f3HLRNpyBnx2xyg2M2BV1l4e4aCX5ZmMThMmCnXMNt5KB6yFDOOaEIBFtqHAII6FCC8srSVXOyKTw==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -938,10 +935,10 @@ "node_modules/@rush-temp/applicationinsights-example-dependencies": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-example-dependencies.tgz", - "integrity": "sha512-OteBqT9gGYWlY8SMOWlagm/7CMmzf1wJy+E00XrSMCJgkqHSJ+nsY8sXRi3HQiSIUgzsspJO639OoHPt6HgiGA==", + "integrity": "sha512-JlzIZW5Z3L8Xoe3hJjPuJutpLK37jtAUyu/03sQ+0TriWjVL7zwFpNtLPJQU8u0ZT6gz+7IBs9SNht+bkwM/4A==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -956,12 +953,12 @@ "node_modules/@rush-temp/applicationinsights-example-shared-worker": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-example-shared-worker.tgz", - "integrity": "sha512-4FgRwocTsG4JsmaBPTYwyMookZfpYH9jKlTJmPR4Jul101+QVKsjGKbLDRd/jlQB/uiKDfM5zmQHFq/5l4NV7g==", + "integrity": "sha512-VJlFCAPg3eq7MSWOf5UnwXSWjHZP54wBoUiUHM+9mYCFhiuxESPPTWPEdfvPhQfbBrdWKVcxmKsiIYlghohtHg==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -991,14 +988,14 @@ "node_modules/@rush-temp/applicationinsights-offlinechannel-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-offlinechannel-js.tgz", - "integrity": "sha512-kGMBbKi0kyHiembZ70If9uZNgMKbT3EPj6OLZgllZ6ZxU7e6N1yntUmwTXzQP609C/w6glO1XScqtk2L5B8k4A==", + "integrity": "sha512-2mZZB67MuG3cwaK/gdZ7zf6vmxgbaUl9jZp8mhV+yvL+JjkBTqYDssH8y1bvMMQcjwAE51kI6ggsCyHaAr4BFw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -1018,12 +1015,12 @@ "node_modules/@rush-temp/applicationinsights-osplugin-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-osplugin-js.tgz", - "integrity": "sha512-ny6VsvgAUdQPjUtzZMhLl0uNvDr3vWGw2R05WITvIWwQ9+F5qpxsqv4kGYLiF7NIOimSVJ5wNPWk64wM6wFmng==", + "integrity": "sha512-tV0Ux+hWDzEQT0b9rcfkBs6ul1T7XGzlvO0V5Zk8EqNVKfYvE50UwLpkJaBhvXitOtrMYMchd3ess31CHYh/qQ==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -1039,13 +1036,13 @@ "node_modules/@rush-temp/applicationinsights-perfmarkmeasure-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-perfmarkmeasure-js.tgz", - "integrity": "sha512-qsqW5OIUFHCJ7RGXHRj4svPnocbxq5+UEgzzWXRtBiNIcUCTzG1Fe6ROwUfmLUJbId96dGTD91MY9cmZwSVT5Q==", + "integrity": "sha512-FGGfWoa2tfwdjF9yQXlUyoCrOlPosBtSMMof0XoTU8xB/qUMnsnZvgpHb0ghT1szPh/PCNztaFaWknEkIKXrkw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -1064,13 +1061,13 @@ "node_modules/@rush-temp/applicationinsights-properties-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-properties-js.tgz", - "integrity": "sha512-GajTUeJwkeE7NYJNsRXhts4BClBVgSadsQsj8tPespN9evf2te5q+LZjRfgd7ODC6x4hfYnjyBru3yXNFfTtuA==", + "integrity": "sha512-JEXM+HPJghkSnxhIr1uAZi5eIIp8CW8EEQuIcQQym95NxKHLgp/lI7MMpqgwKrHJAVmOcZYhJmgUI+XrxAFEgg==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -1137,12 +1134,12 @@ "node_modules/@rush-temp/applicationinsights-shims": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-shims.tgz", - "integrity": "sha512-zSTO+DXC5WaEp01pbkgWts1bytm2FhKSyazzsLP6PCde4C9Yajq+UUDfWs6ks+WXCPwP6Yve3XwEw7RZt+taCA==", + "integrity": "sha512-zKaWFb12Vr+Vi6EiPsHKp+dyQIkbGDptjL9BxVjZviwFHWYdVyZCRDwihi2DuKhWCnsXs1k4cE0fyQAPb+0Qaw==", "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -1159,14 +1156,14 @@ "node_modules/@rush-temp/applicationinsights-teechannel-js": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-teechannel-js.tgz", - "integrity": "sha512-Lu+2CyFyPi6mGke1B744Uc3nJrIrWP6+QLP5QQstDu/mM5rAz/CU75PMymlmxZkmIBzV5ESOc3zM8/M2z1eL5g==", + "integrity": "sha512-thXy52AhQy0JLyg/XqBDGUkfwGkw+JU2yEfxwxVSibeOlf3k5wc1aIJ+JvNILw706JOUvq/GuoL/4zCIgnju2Q==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -1186,7 +1183,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-zw630q1RNWS+5YYmQDj/k0D0coXUVX825wxn95pihQvoNkCO9SxuKwetW7RcZUoveccyW+ZOcCq4aIW8MI70Dg==", + "integrity": "sha512-F98Dq5m7zb6PsKtzyl1714sUFgiAwnEu06SC+rL3DMTQYeN2zJXoLlpK6/NhlwrWqJkl61+xRPHPgg5SpKLM4w==", "dependencies": { "tslib": "*", "typescript": "^4.9.3" @@ -1195,14 +1192,14 @@ "node_modules/@rush-temp/applicationinsights-web": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-web.tgz", - "integrity": "sha512-yxvuJrwi0RJpAM4ubxAqwxZtjUzRwBLeU+wpCkB2TNY52Z6hdhibLtOqM0tzzMrENcCUC6deIb2TYw4Zp6r4ug==", + "integrity": "sha512-p9wc4p8UW8bClY/OHpBKMs9W+bUVPovsFDiZnxBeZ1iN7y/0NwdyevkAyOvRtd3GjG0rcyGEE98j5fsUiokIBg==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -1227,14 +1224,14 @@ "node_modules/@rush-temp/applicationinsights-web-basic": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-web-basic.tgz", - "integrity": "sha512-qRTH9201dOhyTJV5Sy0EtANKMV7Dj06erCjSzrQSP5CEwkohbATBJx1klFEHSwknKdt38+PYnw9x5jjLSeQ1Bg==", + "integrity": "sha512-eczOt/CJ649KAhscDgOaTt1U2ULot+gEskgvK+Bx0rNzjqh3aZ/RJ+upEQhDo0yrb/LBntCNJ2ijHcvzppT2uw==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -1259,7 +1256,7 @@ "node_modules/@rush-temp/applicationinsights-web-snippet": { "version": "0.0.0", "resolved": "file:projects/applicationinsights-web-snippet.tgz", - "integrity": "sha512-FEbLWYDtFNJ6z+1y+l3cH8dzE5IBVlcoKWa5km4XLTZkQOo7ySZREIoUP09hPvR7wMj99zvmQZDoLZjOsqmtaQ==", + "integrity": "sha512-lRLSt0dqM7ze4/UizNd4wE+cxVpy0M5MGAtMYv8+W6i4CCHqyRF5ATM0LEe1F/W6ak3RWkOO0+AhyMrScKD3LQ==", "dependencies": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -1281,9 +1278,9 @@ } }, "node_modules/@rushstack/node-core-library": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.0.2.tgz", - "integrity": "sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.1.0.tgz", + "integrity": "sha512-qz4JFBZJCf1YN5cAXa1dP6Mki/HrsQxc/oYGAGx29dF2cwF2YMxHoly0FBhMw3IEnxo5fMj0boVfoHVBkpkx/w==", "dependencies": { "fs-extra": "~7.0.1", "import-lazy": "~4.0.0", @@ -1311,11 +1308,11 @@ } }, "node_modules/@rushstack/terminal": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.0.tgz", - "integrity": "sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.1.tgz", + "integrity": "sha512-C6Vi/m/84IYJTkfzmXr1+W8Wi3MmBjVF/q3za91Gb3VYjKbpALHVxY6FgH625AnDe5Z0Kh4MHKWA3Z7bqgAezA==", "dependencies": { - "@rushstack/node-core-library": "4.0.2", + "@rushstack/node-core-library": "4.1.0", "supports-color": "~8.1.1" }, "peerDependencies": { @@ -1328,11 +1325,11 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.1.tgz", - "integrity": "sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.2.tgz", + "integrity": "sha512-cqmXXmBEBlzo9WtyUrHtF9e6kl0LvBY7aTSVX4jfnBfXWZQWnPq9JTFPlQZ+L/ZwjZ4HrNwQsOVvhe9oOucZkw==", "dependencies": { - "@rushstack/terminal": "0.10.0", + "@rushstack/terminal": "0.10.1", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -1568,16 +1565,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz", + "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==", "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/type-utils": "7.7.1", + "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -1618,15 +1615,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", + "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4" }, "engines": { @@ -1646,13 +1643,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1663,13 +1660,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz", + "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==", "peer": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/utils": "7.7.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1690,9 +1687,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", "peer": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1703,13 +1700,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1770,17 +1767,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", + "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", "semver": "^7.6.0" }, "engines": { @@ -1810,12 +1807,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2248,9 +2245,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001608", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001608.tgz", - "integrity": "sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==", + "version": "1.0.30001612", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz", + "integrity": "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==", "funding": [ { "type": "opencollective", @@ -2644,9 +2641,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.731", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.731.tgz", - "integrity": "sha512-+TqVfZjpRz2V/5SPpmJxq9qK620SC5SqCnxQIOi7i/U08ZDcTpKbT7Xjj9FU5CbXTMUb4fywbIr8C7cGv4hcjw==" + "version": "1.4.746", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.746.tgz", + "integrity": "sha512-jeWaIta2rIG2FzHaYIhSuVWqC6KJYo7oSBX4Jv7g+aVujKztfvdpf+n6MGwZdC5hQXbax4nntykLH2juIQrfPg==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -2765,12 +2762,15 @@ } }, "node_modules/eslint-plugin-security": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-2.1.1.tgz", - "integrity": "sha512-7cspIGj7WTfR3EhaILzAPcfCo5R9FbeWvbgsPYWivSurTBKW88VQxtP3c4aWMG9Hz/GfJlJVdXEJ3c8LqS+u2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.0.tgz", + "integrity": "sha512-2Ij7PkmXIF2cKwoVkEgemwoXbOnxg5UfdhdcpNxZwJxC/10dbsdhHISrTyJ/n8DUkt3yiN6P1ywEgcMGjIwHIw==", "peer": true, "dependencies": { "safe-regex": "^2.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/eslint-scope": { @@ -6512,17 +6512,17 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@microsoft/api-extractor": { - "version": "7.43.0", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.0.tgz", - "integrity": "sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==", + "version": "7.43.1", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.1.tgz", + "integrity": "sha512-ohg40SsvFFgzHFAtYq5wKJc8ZDyY46bphjtnSvhSSlXpPTG7GHwyyXkn48UZiUCBwr2WC7TRC1Jfwz7nreuiyQ==", "requires": { - "@microsoft/api-extractor-model": "7.28.13", + "@microsoft/api-extractor-model": "7.28.14", "@microsoft/tsdoc": "0.14.2", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "4.0.2", + "@rushstack/node-core-library": "4.1.0", "@rushstack/rig-package": "0.5.2", - "@rushstack/terminal": "0.10.0", - "@rushstack/ts-command-line": "4.19.1", + "@rushstack/terminal": "0.10.1", + "@rushstack/ts-command-line": "4.19.2", "lodash": "~4.17.15", "minimatch": "~3.0.3", "resolve": "~1.22.1", @@ -6539,13 +6539,13 @@ } }, "@microsoft/api-extractor-model": { - "version": "7.28.13", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.13.tgz", - "integrity": "sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==", + "version": "7.28.14", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.14.tgz", + "integrity": "sha512-Bery/c8A8SsKPSvA82cTTuy/+OcxZbLRmKhPkk91/AJOQzxZsShcrmHFAGeiEqSIrv1nPZ3tKq9kfMLdCHmsqg==", "requires": { "@microsoft/tsdoc": "0.14.2", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "4.0.2" + "@rushstack/node-core-library": "4.1.0" } }, "@microsoft/dynamicproto-js": { @@ -6598,17 +6598,17 @@ "requires": {} }, "@nevware21/ts-async": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.5.0.tgz", - "integrity": "sha512-fJ2wSl5fd4UWoWbnXpPVKRg2Uw6u4+o9RsBHb35tiaOajVxJ97LrKAtrCGi6E19GpgfQbAWRFvz/iDXe3XCjWQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.5.1.tgz", + "integrity": "sha512-O2kN8n2HpDWJ7Oji+oTMnhITrCndmrNvrHbGDwAIBydx+FWvLE/vrw4QwnRRMvSCa2AJrcP59Ryklxv30KfkWQ==", "requires": { - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@nevware21/ts-utils": ">= 0.11.2 < 2.x" } }, "@nevware21/ts-utils": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.11.1.tgz", - "integrity": "sha512-1QZSZ39UzjC8MR0+LRO2l8ITFHYdCZeHfBG9p3XUCz0hQ22I0Pf/XE5EF+TPSJK3LLME3pUNx2MCQ4XEtOHv+g==" + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.11.2.tgz", + "integrity": "sha512-80W8BkS09kkGuUHJX50Fqq+QqAslxUaOQytH+3JhRacXs1EpEt2JOOkYKytqFZAYir3SeH9fahniEaDzIBxlUw==" }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -6679,9 +6679,9 @@ }, "dependencies": { "magic-string": { - "version": "0.30.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz", - "integrity": "sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" } @@ -6700,12 +6700,12 @@ }, "@rush-temp/1ds-core-js": { "version": "file:projects\\1ds-core-js.tgz", - "integrity": "sha512-R/+dUkD7vnnFDiR5yEOPZ5/LLrcFJvh5DWHs2nEvAlij2q+olgFI0ZYSsC+cvjTfN1KNN2Bxt3nKwBtbeb84bQ==", + "integrity": "sha512-hEFDIYiJcmeRGhD2UEmaL7b487olMGqaolwv4eoKYgCeFcd42gg1G90VEVf/GV5jR/cFkyPYL0oomODI+1fm6Q==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6727,12 +6727,12 @@ }, "@rush-temp/1ds-post-js": { "version": "file:projects\\1ds-post-js.tgz", - "integrity": "sha512-L5TjtUz0xg0N06Cf6CwGk2q1ZbsJ5dwQbp95PPTxaysNIFRjgsPDbs3Yg35o3nkYga6cj2OA+lnpMEfnBwm+sg==", + "integrity": "sha512-0LYCOwOxlF8Pn9d5dLCiuf5z8T/S0wug/zH72ctxabfvKKz2NYc0O0iCBErhtkmTeJuJWBbmkCBxgLRqKUDvZA==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6748,12 +6748,12 @@ }, "@rush-temp/ai-test-framework": { "version": "file:projects\\ai-test-framework.tgz", - "integrity": "sha512-4EJB8YBv7HEJSYDyu3zo1FiGMFKW9wgSwISIKLxpfDqQ/h4fIHUJkqbRy9q1CUkMyKQZZBsdlmGv407G0gl0tw==", + "integrity": "sha512-i8L9al7YfV205G5UQttp7Do21ziq98plr92VSnkVOOmz2dtB0kXtOdLtlVxtDvtZIoiGvo1wpU0j9mPUuLNdBw==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6773,13 +6773,13 @@ }, "@rush-temp/applicationinsights-analytics-js": { "version": "file:projects\\applicationinsights-analytics-js.tgz", - "integrity": "sha512-enACKO7xFZ1Qvlxqo5elhzBl/lR6LjvsqkYBdWp67y65fMLlsj/iiSAXycncPwu0vj/wWWGA0qRp/7Jz7MfmRg==", + "integrity": "sha512-0xckFcN2+P6PLHdlvOpyAx8spTKcSxitz+t60x5BCzLpfMrYrFmA9hOirY6a9RktZUt8GCPaxgk4TVCj8UQFCw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6800,14 +6800,14 @@ }, "@rush-temp/applicationinsights-cfgsync-js": { "version": "file:projects\\applicationinsights-cfgsync-js.tgz", - "integrity": "sha512-dpoiI4EF6yomQ5nGuB+SIGMyo5q/9VasIVqeQKlw96bTXYUaQl9MXM02wPowLBlL6KqZybU9t/LXrRPIoyPBOA==", + "integrity": "sha512-xMBH3gXddy9zalHlwO6nG6x28VfBcTQ19kNRiFqJWHsN2aLBs3dsDEqDP5Pyb87S0O0WlMSPBjV/k0uXAA0lqw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6828,14 +6828,14 @@ }, "@rush-temp/applicationinsights-channel-js": { "version": "file:projects\\applicationinsights-channel-js.tgz", - "integrity": "sha512-gN+hb/DnDL68Hyr2+fKjEBihJaVgw/58FM3US0O/zPx6LTbKDMKcouonma+OBZXqqE8O/yadnz86umwJl8DVhg==", + "integrity": "sha512-1ReO8xzqEu6EtiGTJfOEWrX0H66rBzFhiI4gVD4lsrxogp/+vUf7jZ6sR2Uj4UU/+aLkWz1TQC0QwjlOP1NSuw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6854,12 +6854,12 @@ }, "@rush-temp/applicationinsights-chrome-debug-extension": { "version": "file:projects\\applicationinsights-chrome-debug-extension.tgz", - "integrity": "sha512-HF3VcxqHwxfIm0b3Zm8/z0wpkuKZmqxJQTV4BE99SiOxNqhWPMbRA6AzKXePnGZKukKbb4Ni8kA0GkKKGrui6Q==", + "integrity": "sha512-f3RI+93J6cfgM+aJBEWAR4VL+GMwfz90bnhbUCk1zYGqzDQEG+sPjckmDc7r+IeXU9rCutK6JQOxhh2sbBf36A==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6887,13 +6887,13 @@ }, "@rush-temp/applicationinsights-clickanalytics-js": { "version": "file:projects\\applicationinsights-clickanalytics-js.tgz", - "integrity": "sha512-YdxJHg07JqPHPergHG9lDcO/6WK9ofC4RnrAZf/C0o41wnlAjR5fF4cj6bF7kUdxQVTxeVVcSSnnY1mNnsbIJQ==", + "integrity": "sha512-vLG1jtUoEaDdjkwJjpI+JbjmU1mscwDS59yBN6tUFxkj3W3KAgRObsc9Mbff0OtNtvB/ZrILJDibOnkZ8cydxA==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6911,13 +6911,13 @@ }, "@rush-temp/applicationinsights-common": { "version": "file:projects\\applicationinsights-common.tgz", - "integrity": "sha512-ZZy5KLgxm1Ypcz6oedFzl0Kdkb31xNETFasdK0agRyhVJuRMnt0jGFFb6q1U3g0EamB2bDTnUxodK3DXwSo2zQ==", + "integrity": "sha512-qjI7IV3bCKy4YOj+f5InCka4wnDvxJpWbbb7jo8F3rULYwpV7yMBIFE2DLttwrPJowF3jESp0CZD6U+9iraZTQ==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6936,14 +6936,14 @@ }, "@rush-temp/applicationinsights-core-js": { "version": "file:projects\\applicationinsights-core-js.tgz", - "integrity": "sha512-KMq+yAWsH/J7daon+PRaoKeYAiPUdgukJoEaGoj01d4E8raNyl5Lnr3rDQvA5U608J9AuTgl6Z/p5YVBzIPFFA==", + "integrity": "sha512-5ixW1SnUFE3DhOPw5YudR3FXG/iKsa6GBEDFlsdiAVV5pkWUkJtfNfg8MBhJRfak8qOt3x/cIPq6RUmxRJyMcg==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6964,13 +6964,13 @@ }, "@rush-temp/applicationinsights-debugplugin-js": { "version": "file:projects\\applicationinsights-debugplugin-js.tgz", - "integrity": "sha512-KJMur2u7KUdYVE6Fm2J/yNNoZQndgBKj0xtpJiCb5m1vdh78tehor4eOTE9KLREGdFK44QNCMStQLrnqvE7Ycg==", + "integrity": "sha512-lcO9h5kSI8EHAlUiePOe9bDlTWZtq+OX5emM7pZ3D4lvpNx5iokDlEOevHyP4/1rWemZHQgQjcLQEiVG1Kgw+Q==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -6988,14 +6988,14 @@ }, "@rush-temp/applicationinsights-dependencies-js": { "version": "file:projects\\applicationinsights-dependencies-js.tgz", - "integrity": "sha512-C9rZ/ThX0Vj7ZDBvjQUY387UkD0y70jOi3Rc3HKX429XG2RK3lkXD2n7lUCLt/SMYCsXK3nyHEcXgHe1mxuPcQ==", + "integrity": "sha512-QFn/JsTFfkYZLIKP02arDnebLSTrssmKbiorSEpRxabEmE037V8XRg+AO8EvSPilz3Gt9tLfIYumEPjdDDOfUw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7015,10 +7015,10 @@ }, "@rush-temp/applicationinsights-example-aisku": { "version": "file:projects\\applicationinsights-example-aisku.tgz", - "integrity": "sha512-YYtAjG2S96t57Tu+1QGWcZ1Z9eX+N3flcbC1pdG/uuv9MJDn6eQ5zo1a5RnmLcpGmUbalEdVeXEYfmFUy4OH+Q==", + "integrity": "sha512-bueUtVJiHCA7fEX60617GuUZ1mzbScWx/1z6hTNw6YAXnU5RjDwA3lotnw1ML4jP2NBn8tBUdG0QqTdqHzQ3KA==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7032,12 +7032,12 @@ }, "@rush-temp/applicationinsights-example-cfgsync": { "version": "file:projects\\applicationinsights-example-cfgsync.tgz", - "integrity": "sha512-dx1GhITCJi0lNru+36zViIK/7r5AeYXEi55MYyd/awATvzp9b1lNOg/SLuhAw99kF/gBifqB2N4jrrZz09MpCQ==", + "integrity": "sha512-PubfIZLK8f3HLRNpyBnx2xyg2M2BV1l4e4aCX5ZmMThMmCnXMNt5KB6yFDOOaEIBFtqHAII6FCC8srSVXOyKTw==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7057,10 +7057,10 @@ }, "@rush-temp/applicationinsights-example-dependencies": { "version": "file:projects\\applicationinsights-example-dependencies.tgz", - "integrity": "sha512-OteBqT9gGYWlY8SMOWlagm/7CMmzf1wJy+E00XrSMCJgkqHSJ+nsY8sXRi3HQiSIUgzsspJO639OoHPt6HgiGA==", + "integrity": "sha512-JlzIZW5Z3L8Xoe3hJjPuJutpLK37jtAUyu/03sQ+0TriWjVL7zwFpNtLPJQU8u0ZT6gz+7IBs9SNht+bkwM/4A==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7074,12 +7074,12 @@ }, "@rush-temp/applicationinsights-example-shared-worker": { "version": "file:projects\\applicationinsights-example-shared-worker.tgz", - "integrity": "sha512-4FgRwocTsG4JsmaBPTYwyMookZfpYH9jKlTJmPR4Jul101+QVKsjGKbLDRd/jlQB/uiKDfM5zmQHFq/5l4NV7g==", + "integrity": "sha512-VJlFCAPg3eq7MSWOf5UnwXSWjHZP54wBoUiUHM+9mYCFhiuxESPPTWPEdfvPhQfbBrdWKVcxmKsiIYlghohtHg==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7107,14 +7107,14 @@ }, "@rush-temp/applicationinsights-offlinechannel-js": { "version": "file:projects\\applicationinsights-offlinechannel-js.tgz", - "integrity": "sha512-kGMBbKi0kyHiembZ70If9uZNgMKbT3EPj6OLZgllZ6ZxU7e6N1yntUmwTXzQP609C/w6glO1XScqtk2L5B8k4A==", + "integrity": "sha512-2mZZB67MuG3cwaK/gdZ7zf6vmxgbaUl9jZp8mhV+yvL+JjkBTqYDssH8y1bvMMQcjwAE51kI6ggsCyHaAr4BFw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7133,12 +7133,12 @@ }, "@rush-temp/applicationinsights-osplugin-js": { "version": "file:projects\\applicationinsights-osplugin-js.tgz", - "integrity": "sha512-ny6VsvgAUdQPjUtzZMhLl0uNvDr3vWGw2R05WITvIWwQ9+F5qpxsqv4kGYLiF7NIOimSVJ5wNPWk64wM6wFmng==", + "integrity": "sha512-tV0Ux+hWDzEQT0b9rcfkBs6ul1T7XGzlvO0V5Zk8EqNVKfYvE50UwLpkJaBhvXitOtrMYMchd3ess31CHYh/qQ==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7153,13 +7153,13 @@ }, "@rush-temp/applicationinsights-perfmarkmeasure-js": { "version": "file:projects\\applicationinsights-perfmarkmeasure-js.tgz", - "integrity": "sha512-qsqW5OIUFHCJ7RGXHRj4svPnocbxq5+UEgzzWXRtBiNIcUCTzG1Fe6ROwUfmLUJbId96dGTD91MY9cmZwSVT5Q==", + "integrity": "sha512-FGGfWoa2tfwdjF9yQXlUyoCrOlPosBtSMMof0XoTU8xB/qUMnsnZvgpHb0ghT1szPh/PCNztaFaWknEkIKXrkw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7177,13 +7177,13 @@ }, "@rush-temp/applicationinsights-properties-js": { "version": "file:projects\\applicationinsights-properties-js.tgz", - "integrity": "sha512-GajTUeJwkeE7NYJNsRXhts4BClBVgSadsQsj8tPespN9evf2te5q+LZjRfgd7ODC6x4hfYnjyBru3yXNFfTtuA==", + "integrity": "sha512-JEXM+HPJghkSnxhIr1uAZi5eIIp8CW8EEQuIcQQym95NxKHLgp/lI7MMpqgwKrHJAVmOcZYhJmgUI+XrxAFEgg==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7247,12 +7247,12 @@ }, "@rush-temp/applicationinsights-shims": { "version": "file:projects\\applicationinsights-shims.tgz", - "integrity": "sha512-zSTO+DXC5WaEp01pbkgWts1bytm2FhKSyazzsLP6PCde4C9Yajq+UUDfWs6ks+WXCPwP6Yve3XwEw7RZt+taCA==", + "integrity": "sha512-zKaWFb12Vr+Vi6EiPsHKp+dyQIkbGDptjL9BxVjZviwFHWYdVyZCRDwihi2DuKhWCnsXs1k4cE0fyQAPb+0Qaw==", "requires": { "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7268,14 +7268,14 @@ }, "@rush-temp/applicationinsights-teechannel-js": { "version": "file:projects\\applicationinsights-teechannel-js.tgz", - "integrity": "sha512-Lu+2CyFyPi6mGke1B744Uc3nJrIrWP6+QLP5QQstDu/mM5rAz/CU75PMymlmxZkmIBzV5ESOc3zM8/M2z1eL5g==", + "integrity": "sha512-thXy52AhQy0JLyg/XqBDGUkfwGkw+JU2yEfxwxVSibeOlf3k5wc1aIJ+JvNILw706JOUvq/GuoL/4zCIgnju2Q==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7294,7 +7294,7 @@ }, "@rush-temp/applicationinsights-test-module-type-check": { "version": "file:projects\\applicationinsights-test-module-type-check.tgz", - "integrity": "sha512-zw630q1RNWS+5YYmQDj/k0D0coXUVX825wxn95pihQvoNkCO9SxuKwetW7RcZUoveccyW+ZOcCq4aIW8MI70Dg==", + "integrity": "sha512-F98Dq5m7zb6PsKtzyl1714sUFgiAwnEu06SC+rL3DMTQYeN2zJXoLlpK6/NhlwrWqJkl61+xRPHPgg5SpKLM4w==", "requires": { "tslib": "*", "typescript": "^4.9.3" @@ -7302,14 +7302,14 @@ }, "@rush-temp/applicationinsights-web": { "version": "file:projects\\applicationinsights-web.tgz", - "integrity": "sha512-yxvuJrwi0RJpAM4ubxAqwxZtjUzRwBLeU+wpCkB2TNY52Z6hdhibLtOqM0tzzMrENcCUC6deIb2TYw4Zp6r4ug==", + "integrity": "sha512-p9wc4p8UW8bClY/OHpBKMs9W+bUVPovsFDiZnxBeZ1iN7y/0NwdyevkAyOvRtd3GjG0rcyGEE98j5fsUiokIBg==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7333,14 +7333,14 @@ }, "@rush-temp/applicationinsights-web-basic": { "version": "file:projects\\applicationinsights-web-basic.tgz", - "integrity": "sha512-qRTH9201dOhyTJV5Sy0EtANKMV7Dj06erCjSzrQSP5CEwkohbATBJx1klFEHSwknKdt38+PYnw9x5jjLSeQ1Bg==", + "integrity": "sha512-eczOt/CJ649KAhscDgOaTt1U2ULot+gEskgvK+Bx0rNzjqh3aZ/RJ+upEQhDo0yrb/LBntCNJ2ijHcvzppT2uw==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", "@nevware21/grunt-eslint-ts": "^0.2.2", "@nevware21/grunt-ts-plugin": "^0.4.3", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", @@ -7363,7 +7363,7 @@ }, "@rush-temp/applicationinsights-web-snippet": { "version": "file:projects\\applicationinsights-web-snippet.tgz", - "integrity": "sha512-FEbLWYDtFNJ6z+1y+l3cH8dzE5IBVlcoKWa5km4XLTZkQOo7ySZREIoUP09hPvR7wMj99zvmQZDoLZjOsqmtaQ==", + "integrity": "sha512-lRLSt0dqM7ze4/UizNd4wE+cxVpy0M5MGAtMYv8+W6i4CCHqyRF5ATM0LEe1F/W6ak3RWkOO0+AhyMrScKD3LQ==", "requires": { "@microsoft/api-extractor": "^7.40.0", "@microsoft/dynamicproto-js": "^2.0.3", @@ -7385,9 +7385,9 @@ } }, "@rushstack/node-core-library": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.0.2.tgz", - "integrity": "sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.1.0.tgz", + "integrity": "sha512-qz4JFBZJCf1YN5cAXa1dP6Mki/HrsQxc/oYGAGx29dF2cwF2YMxHoly0FBhMw3IEnxo5fMj0boVfoHVBkpkx/w==", "requires": { "fs-extra": "~7.0.1", "import-lazy": "~4.0.0", @@ -7407,20 +7407,20 @@ } }, "@rushstack/terminal": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.0.tgz", - "integrity": "sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.1.tgz", + "integrity": "sha512-C6Vi/m/84IYJTkfzmXr1+W8Wi3MmBjVF/q3za91Gb3VYjKbpALHVxY6FgH625AnDe5Z0Kh4MHKWA3Z7bqgAezA==", "requires": { - "@rushstack/node-core-library": "4.0.2", + "@rushstack/node-core-library": "4.1.0", "supports-color": "~8.1.1" } }, "@rushstack/ts-command-line": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.1.tgz", - "integrity": "sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.2.tgz", + "integrity": "sha512-cqmXXmBEBlzo9WtyUrHtF9e6kl0LvBY7aTSVX4jfnBfXWZQWnPq9JTFPlQZ+L/ZwjZ4HrNwQsOVvhe9oOucZkw==", "requires": { - "@rushstack/terminal": "0.10.0", + "@rushstack/terminal": "0.10.1", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -7647,16 +7647,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz", + "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==", "peer": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/type-utils": "7.7.1", + "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -7677,54 +7677,54 @@ } }, "@typescript-eslint/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", + "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", "peer": true, "requires": { - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", "peer": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" } }, "@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz", + "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==", "peer": true, "requires": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/utils": "7.7.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", "peer": true }, "@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", "peer": true, "requires": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7763,17 +7763,17 @@ } }, "@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", + "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", "semver": "^7.6.0" }, "dependencies": { @@ -7789,12 +7789,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", "peer": true, "requires": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.1", "eslint-visitor-keys": "^3.4.3" } }, @@ -8093,9 +8093,9 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "caniuse-lite": { - "version": "1.0.30001608", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001608.tgz", - "integrity": "sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==" + "version": "1.0.30001612", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz", + "integrity": "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==" }, "chalk": { "version": "4.1.2", @@ -8385,9 +8385,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.731", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.731.tgz", - "integrity": "sha512-+TqVfZjpRz2V/5SPpmJxq9qK620SC5SqCnxQIOi7i/U08ZDcTpKbT7Xjj9FU5CbXTMUb4fywbIr8C7cGv4hcjw==" + "version": "1.4.746", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.746.tgz", + "integrity": "sha512-jeWaIta2rIG2FzHaYIhSuVWqC6KJYo7oSBX4Jv7g+aVujKztfvdpf+n6MGwZdC5hQXbax4nntykLH2juIQrfPg==" }, "encodeurl": { "version": "1.0.2", @@ -8493,9 +8493,9 @@ } }, "eslint-plugin-security": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-2.1.1.tgz", - "integrity": "sha512-7cspIGj7WTfR3EhaILzAPcfCo5R9FbeWvbgsPYWivSurTBKW88VQxtP3c4aWMG9Hz/GfJlJVdXEJ3c8LqS+u2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.0.tgz", + "integrity": "sha512-2Ij7PkmXIF2cKwoVkEgemwoXbOnxg5UfdhdcpNxZwJxC/10dbsdhHISrTyJ/n8DUkt3yiN6P1ywEgcMGjIwHIw==", "peer": true, "requires": { "safe-regex": "^2.1.1" diff --git a/docs/README.md b/docs/README.md index 82ded3892..5c9837144 100644 --- a/docs/README.md +++ b/docs/README.md @@ -18,8 +18,8 @@ [![GitHub Workflow Status (main)](https://img.shields.io/github/actions/workflow/status/microsoft/ApplicationInsights-JS/ci.yml?branch=main)](https://github.com/microsoft/ApplicationInsights-JS/tree/main) [![Build Status](https://dev.azure.com/mseng/AppInsights/_apis/build/status%2FAppInsights%20-%20DevTools%2F1DS%20JavaScript%20SDK%20web%20SKU%20(main%3B%20master)?branchName=main)](https://dev.azure.com/mseng/AppInsights/_build/latest?definitionId=8184&branchName=main) [![npm version](https://badge.fury.io/js/%40microsoft%2Fapplicationinsights-web.svg)](https://badge.fury.io/js/%40microsoft%2Fapplicationinsights-web) -[![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js.svg?label=minified%20size)](https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js) -[![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js.svg?compression=gzip&softmax=50000&max=55000)](https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js) +[![minified size size](https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js.svg)](https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js) +[![gzip size](https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js.gzip.svg)](https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js) ## Before Getting Started diff --git a/examples/AISKU/package.json b/examples/AISKU/package.json index 8008c5788..dd6ca9e81 100644 --- a/examples/AISKU/package.json +++ b/examples/AISKU/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/applicationinsights-example-aisku", "author": "Microsoft Application Insights Team", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights AISKU Example", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "keywords": [ @@ -51,8 +51,8 @@ "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@microsoft/applicationinsights-web": "3.1.2", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@microsoft/applicationinsights-web": "3.2.0", + "@microsoft/applicationinsights-core-js": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" } } diff --git a/examples/cfgSync/package.json b/examples/cfgSync/package.json index 4207c1b7e..aefa85c7f 100644 --- a/examples/cfgSync/package.json +++ b/examples/cfgSync/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/applicationinsights-example-cfgsync", "author": "Microsoft Application Insights Team", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights CfgSync Plugin Example", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "keywords": [ @@ -62,10 +62,10 @@ }, "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-cfgsync-js": "3.1.2", + "@microsoft/applicationinsights-cfgsync-js": "3.2.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@microsoft/applicationinsights-web": "3.1.2", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@microsoft/applicationinsights-web": "3.2.0", + "@microsoft/applicationinsights-core-js": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" } } diff --git a/examples/dependency/package.json b/examples/dependency/package.json index 57af4dbb6..1bcde2b23 100644 --- a/examples/dependency/package.json +++ b/examples/dependency/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/applicationinsights-example-dependencies", "author": "Microsoft Application Insights Team", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights Dependencies Example", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "keywords": [ @@ -51,9 +51,9 @@ "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@microsoft/applicationinsights-web": "3.1.2", - "@microsoft/applicationinsights-dependencies-js": "3.1.2", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@microsoft/applicationinsights-web": "3.2.0", + "@microsoft/applicationinsights-dependencies-js": "3.2.0", + "@microsoft/applicationinsights-core-js": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" } } diff --git a/examples/shared-worker/package.json b/examples/shared-worker/package.json index b0468deeb..4d71e5b5a 100644 --- a/examples/shared-worker/package.json +++ b/examples/shared-worker/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/applicationinsights-example-shared-worker", "author": "Microsoft Application Insights Team", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights Shared Worker Example", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "keywords": [ @@ -63,9 +63,9 @@ "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@microsoft/applicationinsights-web": "3.1.2", - "@microsoft/applicationinsights-web-snippet": "1.1.4", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@microsoft/applicationinsights-web": "3.2.0", + "@microsoft/applicationinsights-web-snippet": "1.2.0", + "@microsoft/applicationinsights-core-js": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" } } diff --git a/extensions/applicationinsights-analytics-js/Tests/Unit/src/AnalyticsPlugin.tests.ts b/extensions/applicationinsights-analytics-js/Tests/Unit/src/AnalyticsPlugin.tests.ts index e2042abdb..4528bf636 100644 --- a/extensions/applicationinsights-analytics-js/Tests/Unit/src/AnalyticsPlugin.tests.ts +++ b/extensions/applicationinsights-analytics-js/Tests/Unit/src/AnalyticsPlugin.tests.ts @@ -826,7 +826,7 @@ export class AnalyticsPluginTests extends AITestClass { }); this.throwInternalSpy = this.sandbox.spy(appInsights.core.logger, "throwInternal"); - sender._sender = (payload:string[], isAsync:boolean) => { + sender._sender = (payload:any[], isAsync:boolean) => { sender._onSuccess(payload, payload.length); }; this.sandbox.spy() @@ -842,10 +842,10 @@ export class AnalyticsPluginTests extends AITestClass { Assert.ok(!this.throwInternalSpy.called, "No internal errors"); }].concat(this.waitForException(1)) .concat(() => { - let isLocal = window.location.protocol === "file:"; let exp = this.trackSpy.args[0]; const payloadStr: string[] = this.getPayloadMessages(this.trackSpy); + if (payloadStr.length > 0) { const payload = JSON.parse(payloadStr[0]); const data = payload.data; @@ -909,7 +909,7 @@ export class AnalyticsPluginTests extends AITestClass { }); this.throwInternalSpy = this.sandbox.spy(appInsights.core.logger, "throwInternal"); - sender._sender = (payload:string[], isAsync:boolean) => { + sender._sender = (payload:any[], isAsync:boolean) => { sender._onSuccess(payload, payload.length); }; this.sandbox.spy() @@ -924,7 +924,6 @@ export class AnalyticsPluginTests extends AITestClass { Assert.ok(!this.throwInternalSpy.called, "No internal errors"); }].concat(this.waitForException(1)) .concat(() => { - let exp = this.trackSpy.args[0]; const payloadStr: string[] = this.getPayloadMessages(this.trackSpy); if (payloadStr.length > 0) { @@ -983,7 +982,7 @@ export class AnalyticsPluginTests extends AITestClass { }); this.throwInternalSpy = this.sandbox.spy(appInsights.core.logger, "throwInternal"); - sender._sender = (payload:string[], isAsync:boolean) => { + sender._sender = (payload:any[], isAsync:boolean) => { sender._onSuccess(payload, payload.length); }; this.sandbox.spy() @@ -1065,7 +1064,7 @@ export class AnalyticsPluginTests extends AITestClass { }); this.throwInternalSpy = this.sandbox.spy(appInsights.core.logger, "throwInternal"); - sender._sender = (payload:string[], isAsync:boolean) => { + sender._sender = (payload:any[], isAsync:boolean) => { sender._onSuccess(payload, payload.length); }; this.sandbox.spy() @@ -1914,10 +1913,13 @@ export class AnalyticsPluginTests extends AITestClass { } Assert.ok(true, "* [" + argCount + " of " + expectedCount + "] checking spy " + new Date().toISOString()); - try { if (argCount >= expectedCount) { - const payload = JSON.parse(this.trackSpy.args[0][0]); + let payloads: any = [] + this.trackSpy.args[0][0].forEach(item => { + payloads.push(item.item) + }); + const payload = JSON.parse(payloads); const baseType = payload.data.baseType; // call the appropriate Validate depending on the baseType switch (baseType) { diff --git a/extensions/applicationinsights-analytics-js/package.json b/extensions/applicationinsights-analytics-js/package.json index 42776fc6b..50cefdea4 100644 --- a/extensions/applicationinsights-analytics-js/package.json +++ b/extensions/applicationinsights-analytics-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-analytics-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights JavaScript SDK - Web Analytics", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -32,8 +32,8 @@ "@microsoft/ai-test-framework": "0.0.1", "@microsoft/applicationinsights-rollup-plugin-uglify3-js": "1.0.0", "@microsoft/applicationinsights-rollup-es5": "1.0.2", - "@microsoft/applicationinsights-properties-js": "3.1.2", - "@microsoft/applicationinsights-channel-js": "3.1.2", + "@microsoft/applicationinsights-properties-js": "3.2.0", + "@microsoft/applicationinsights-channel-js": "3.2.0", "@microsoft/api-extractor": "^7.40.0", "typescript": "^4.9.3", "tslib": "^2.0.0", @@ -60,9 +60,9 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" }, "license": "MIT" } diff --git a/extensions/applicationinsights-cfgsync-js/README.md b/extensions/applicationinsights-cfgsync-js/README.md index e6c065fbd..bc1de4f9c 100644 --- a/extensions/applicationinsights-cfgsync-js/README.md +++ b/extensions/applicationinsights-cfgsync-js/README.md @@ -19,7 +19,7 @@ Refer to [our GitHub page](https://github.com/microsoft/ApplicationInsights-JS) | onCfgChangeReceive | function
[Optional] | null | Overrides callback function to handle event details when changes are received via event listener. | | overrideSyncFn | function
[Optional] | null | Overrides sync() function to broadcast changes. | | overrideFetchFn | function
[Optional] | null | Overrides fetch function to get config from cfgUrl when cfgUrl is defined. | -| nonOverrideConfigs | NonOverrideCfg
[Optional] | {instrumentationKey: true, connectionString: true, endpointUrl: true } | When current instance is set with syncMode: `Receive`, config fields under nonOverrideConfigs will NOT be changed by any confif details sent out from other instances. | +| nonOverrideConfigs | NonOverrideCfg
[Optional] | {instrumentationKey: true, connectionString: true, endpointUrl: true } | When current instance is set with syncMode: `Receive`, config fields under nonOverrideConfigs will NOT be changed by any confif details sent out from other instances. NOTE: this config will be ONLY applied during initialization, so it won't be changed dynamically. | | scheduleFetchTimeout | number
[Optional] | 30 mins | Identifies the time interval (in milliseconds) for fetching config details from cfgUrl when cfgUrl is defined. If set to 0, the fetch operation will only be called once during initialization. | diff --git a/extensions/applicationinsights-cfgsync-js/Tests/Unit/src/cfgsyncplugin.tests.ts b/extensions/applicationinsights-cfgsync-js/Tests/Unit/src/cfgsyncplugin.tests.ts index 2328c2b07..8889f88a1 100644 --- a/extensions/applicationinsights-cfgsync-js/Tests/Unit/src/cfgsyncplugin.tests.ts +++ b/extensions/applicationinsights-cfgsync-js/Tests/Unit/src/cfgsyncplugin.tests.ts @@ -1,5 +1,5 @@ import { Assert, AITestClass, IFetchArgs, PollingAssert } from "@microsoft/ai-test-framework"; -import { AppInsightsCore, IAppInsightsCore, IPlugin, ITelemetryItem, getGlobal, getGlobalInst } from "@microsoft/applicationinsights-core-js"; +import { AppInsightsCore, FeatureOptInMode, IAppInsightsCore, IPlugin, ITelemetryItem, getGlobal, getGlobalInst } from "@microsoft/applicationinsights-core-js"; import { IConfiguration } from "@microsoft/applicationinsights-core-js"; import { CfgSyncPlugin } from "../../../../applicationinsights-cfgsync-js/src/applicationinsights-cfgsync-js"; import { ICfgSyncConfig, ICfgSyncMode, NonOverrideCfg } from "../../../src/Interfaces/ICfgSyncConfig"; @@ -10,7 +10,7 @@ import { createSyncPromise } from "@nevware21/ts-async"; export class CfgSyncPluginTests extends AITestClass { private core: AppInsightsCore; - private _config: IConfiguration; + private _config: IConfiguration & IConfig; private mainInst: CfgSyncPlugin; private identifier: string; private _channel: ChannelPlugin; @@ -98,12 +98,14 @@ export class CfgSyncPluginTests extends AITestClass { this.core.config.extensionConfig[this.identifier].syncMode = ICfgSyncMode.Receive; this.core.config.extensionConfig[this.identifier].receiveChanges = true; this.core.config.extensionConfig[this.identifier].blkCdnCfg = true; + this.core.config.extensionConfig[this.identifier].nonOverrideConfigs = {}; this.clock.tick(1); targets = this.mainInst["_getDbgPlgTargets"](); Assert.equal(targets[0], true, "auto sync should not be changed to false dynamically"); Assert.equal(targets[1], false, "receive changes should not be changed dynamically"); Assert.equal(targets[3], true, "blkCdnCfg changes should be changed dynamically"); + Assert.deepEqual(targets[4], defaultNonOverrideCfg, "nonOverrideCfg changes should not be changed dynamically"); Assert.equal(patchEvnSpy.callCount, 3, "event dispatch should be called again"); curMainCfg = this.mainInst.getCfg(); Assert.deepEqual(curMainCfg, this.core.config, "main config should be set test2"); @@ -269,7 +271,7 @@ export class CfgSyncPluginTests extends AITestClass { let fetchStub = this._context["fetchStub"]; let patchEvnSpy = this._context["patchEvnSpy"]; let config = { - instrumentationKey:"testIkey", + //instrumentationKey:"testIkey", // should not be override enableAjaxPerfTracking: true } as IConfiguration & IConfig; if (fetchStub.called && patchEvnSpy.called) { @@ -328,7 +330,7 @@ export class CfgSyncPluginTests extends AITestClass { let fetchStub = this._context["fetchStub"]; let patchEvnSpy = this._context["patchEvnSpy"]; let config = { - instrumentationKey:"testIkey", + //instrumentationKey:"testIkey", // should not be override enableAjaxPerfTracking: true } as IConfiguration & IConfig; if (fetchStub.called && patchEvnSpy.called) { @@ -522,6 +524,124 @@ export class CfgSyncPluginTests extends AITestClass { }, "response received", 60, 100) as any) }); + this.testCaseAsync({ + name: "CfgSyncPlugin: Test with current cfgSync CDN v1", + stepDelay: 10, + useFakeTimers: true, + useFakeServer: true, + steps: [ () => { + + let doc = getGlobal(); + this.onDone(() => { + this.core.unload(false); + }); + let fetchStub = this.sandbox.spy((doc as any), "fetch"); + + this._config.featureOptIn = {["iKeyUsage"]: {mode: FeatureOptInMode.enable}, ["CdnUsage"]:{mode: FeatureOptInMode.disable}} + this._config.throttleMgrCfg = { + ["109"]: {disabled: true}, + ["106"]: {disabled: true}, + ["110"]: {disabled: true} + } + this._config.extensionConfig = { [this.identifier]: { + syncMode: ICfgSyncMode.Receive, + cfgUrl: "https://js.monitor.azure.com/scripts/b/ai.config.1.cfg.json", + scheduleFetchTimeout: 10000 + }}; + this._context["fetchStub"] = fetchStub; + this.core.initialize(this._config, [this._channel]); + + }].concat(PollingAssert.createPollingAssert(() => { + let fetchStub = this._context["fetchStub"]; + Assert.equal(fetchStub.callCount, 1, "fetch is should called once"); + if (fetchStub.called) { + return true; + } + return false; + }, "wait for fetch response", 60, 100) as any).concat(PollingAssert.createPollingAssert(() => { + let coreConfig = this.core.config as IConfig & IConfiguration; + let featureOptIn = coreConfig.featureOptIn || {}; + let throttleMgrConfig = coreConfig.throttleMgrCfg || {}; + let ikeyOptIn = featureOptIn["iKeyUsage"]; + let defaultIkey = throttleMgrConfig["109"]; + let defaultEnabled = !defaultIkey.disabled; + let onConfig = ikeyOptIn.onCfg; + let offConfig = ikeyOptIn.onCfg; + if (onConfig && offConfig && defaultEnabled) { + let ikeyMsg = throttleMgrConfig["106"]; + Assert.equal(ikeyMsg.disabled, false, "ikey msg should be enabled"); + let otherMsg = throttleMgrConfig["110"]; + Assert.equal(otherMsg.disabled, true, "other msg should be disabled"); + let cdnOptIn = featureOptIn["CdnUsage"]; + Assert.equal(cdnOptIn.mode, 2, "cdn feature optin should be disabled"); + Assert.equal(ikeyOptIn.mode, 3, "ikey feature optin should be enabled"); + return true; + } + return false; + }, "wait for core config update", 60, 100) as any) + }); + + this.testCaseAsync({ + name: "CfgSyncPlugin: NonOverride values should not be changed Test with current cfgSync CDN v1", + stepDelay: 10, + useFakeTimers: true, + useFakeServer: true, + steps: [ () => { + + let doc = getGlobal(); + this.onDone(() => { + this.core.unload(false); + }); + let fetchStub = this.sandbox.spy((doc as any), "fetch"); + this._config.throttleMgrCfg = {}; + this._config.featureOptIn = {["iKeyUsage"]: {mode: FeatureOptInMode.enable}, ["CdnUsage"]:{mode: FeatureOptInMode.disable}} + this._config.throttleMgrCfg = { + ["109"]: {disabled: true}, + ["106"]: {disabled: true}, + ["110"]: {disabled: true} + } + + this._config.extensionConfig = { [this.identifier]: { + syncMode: ICfgSyncMode.Receive, + cfgUrl: "https://js.monitor.azure.com/scripts/b/ai.config.1.cfg.json", + scheduleFetchTimeout: 10000, + nonOverrideConfigs: {throttleMgrCfg: true} + + } as ICfgSyncConfig}; + this._context["fetchStub"] = fetchStub; + this.core.initialize(this._config, [this._channel]); + + }].concat(PollingAssert.createPollingAssert(() => { + let fetchStub = this._context["fetchStub"]; + Assert.equal(fetchStub.callCount, 1, "fetch is should called once"); + if (fetchStub.called) { + return true; + } + return false; + }, "wait for fetch response", 60, 100) as any).concat(PollingAssert.createPollingAssert(() => { + let coreConfig = this.core.config as IConfig & IConfiguration; + let featureOptIn = coreConfig.featureOptIn || {}; + let throttleMgrConfig = coreConfig.throttleMgrCfg || {}; + let ikeyOptIn = featureOptIn["iKeyUsage"]; + + let onConfig = ikeyOptIn.onCfg; + let offConfig = ikeyOptIn.onCfg; + if (onConfig && offConfig) { + let defaultIkey = throttleMgrConfig["109"]; + Assert.equal(defaultIkey.disabled, true, "ikey msg should be disbaled"); + let ikeyMsg = throttleMgrConfig["106"]; + Assert.equal(ikeyMsg.disabled, true, "ikey msg should be disabled"); + let otherMsg = throttleMgrConfig["110"]; + Assert.equal(otherMsg.disabled, true, "other msg should be disabled"); + let cdnOptIn = featureOptIn["CdnUsage"]; + Assert.equal(cdnOptIn.mode, 2, "cdn feature optin should be disabled"); + Assert.equal(ikeyOptIn.mode, 3, "ikey feature optin should be enabled"); + return true; + } + return false; + }, "wait for core config update", 60, 100) as any) + }); + } } diff --git a/extensions/applicationinsights-cfgsync-js/package.json b/extensions/applicationinsights-cfgsync-js/package.json index 3f7a28761..12911077c 100644 --- a/extensions/applicationinsights-cfgsync-js/package.json +++ b/extensions/applicationinsights-cfgsync-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-cfgsync-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights CfgSync Plugin", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -57,10 +57,10 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "license": "MIT" } diff --git a/extensions/applicationinsights-cfgsync-js/src/CfgSyncPlugin.ts b/extensions/applicationinsights-cfgsync-js/src/CfgSyncPlugin.ts index e9d479dfa..3461638f1 100644 --- a/extensions/applicationinsights-cfgsync-js/src/CfgSyncPlugin.ts +++ b/extensions/applicationinsights-cfgsync-js/src/CfgSyncPlugin.ts @@ -106,7 +106,7 @@ export class CfgSyncPlugin extends BaseTelemetryPlugin implements ICfgSyncPlugin }; _self["_getDbgPlgTargets"] = () => { - return [_broadcastChanges, _receiveChanges, _evtName, _blkCdnCfg]; + return [_broadcastChanges, _receiveChanges, _evtName, _blkCdnCfg, _nonOverrideConfigs]; }; function _initDefaults() { @@ -179,7 +179,8 @@ export class CfgSyncPlugin extends BaseTelemetryPlugin implements ICfgSyncPlugin _overrideSyncFn = _extensionConfig.overrideSyncFn; _overrideFetchFn = _extensionConfig.overrideFetchFn; _onCfgChangeReceive = _extensionConfig.onCfgChangeReceive; - _nonOverrideConfigs = _extensionConfig.nonOverrideConfigs; + _nonOverrideConfigs = _extensionConfig.nonOverrideConfigs; // override values should not be changed + _fetchTimeout = _extensionConfig.scheduleFetchTimeout; _fetchFn = _getFetchFnInterface(); _retryCnt = 0; @@ -316,7 +317,9 @@ export class CfgSyncPlugin extends BaseTelemetryPlugin implements ICfgSyncPlugin if (JSON) { let cdnCfg = JSON.parse(response); //comments are not allowed let cfg = applyCdnfeatureCfg(cdnCfg, _self.core); - cfg && _setCfg(cfg, isAutoSync); + let newCfg = cfg && isPlainObject(cfg) && _replaceTartgetByKeys(cfg); + newCfg && _setCfg(newCfg, isAutoSync); + //cfg && _setCfg(cfg, isAutoSync); } } else { _retryCnt ++; diff --git a/extensions/applicationinsights-cfgsync-js/src/Interfaces/ICfgSyncConfig.ts b/extensions/applicationinsights-cfgsync-js/src/Interfaces/ICfgSyncConfig.ts index 1ff9e1a57..b9ed1fb5a 100644 --- a/extensions/applicationinsights-cfgsync-js/src/Interfaces/ICfgSyncConfig.ts +++ b/extensions/applicationinsights-cfgsync-js/src/Interfaces/ICfgSyncConfig.ts @@ -38,7 +38,8 @@ export interface ICfgSyncConfig { */ overrideFetchFn?: SendGetFunction; /** - * When current instance is set with syncMode: `Receive`, config fields under nonOverrideConfigs will NOT be changed by any confif details sent out from other instances. + * When current instance is set with syncMode: `Receive`, config fields under nonOverrideConfigs will NOT be changed by any config details sent out from other instances. + * NOTE: this config will be ONLY applied during initialization, so it won't be changed dynamically * @default {instrumentationKey:true,connectionString:true,endpointUrl:true} */ nonOverrideConfigs?: NonOverrideCfg; diff --git a/extensions/applicationinsights-clickanalytics-js/package.json b/extensions/applicationinsights-clickanalytics-js/package.json index c683e3cdb..df7cd0739 100644 --- a/extensions/applicationinsights-clickanalytics-js/package.json +++ b/extensions/applicationinsights-clickanalytics-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-clickanalytics-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights Click Analytics extension", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -51,10 +51,10 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", - "@microsoft/applicationinsights-properties-js": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", + "@microsoft/applicationinsights-properties-js": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" }, "repository": { "type": "git", diff --git a/extensions/applicationinsights-debugplugin-js/README.md b/extensions/applicationinsights-debugplugin-js/README.md index 4936f4e20..21a868ee6 100644 --- a/extensions/applicationinsights-debugplugin-js/README.md +++ b/extensions/applicationinsights-debugplugin-js/README.md @@ -5,8 +5,8 @@ [![GitHub Workflow Status (main)](https://img.shields.io/github/actions/workflow/status/microsoft/ApplicationInsights-JS/ci.yml?branch=main)](https://github.com/microsoft/ApplicationInsights-JS/tree/main) [![Build Status](https://dev.azure.com/mseng/AppInsights/_apis/build/status%2FAppInsights%20-%20DevTools%2F1DS%20JavaScript%20SDK%20web%20SKU%20(main%3B%20master)?branchName=main)](https://dev.azure.com/mseng/AppInsights/_build/latest?definitionId=8184&branchName=main) [![npm version](https://badge.fury.io/js/%40microsoft%2Fapplicationinsights-debugplugin-js.svg)](https://badge.fury.io/js/%40microsoft%2Fapplicationinsights-debugplugin-js) -[![gzip size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ext/ai.dbg.2.min.js.svg?compression=gzip&softmax=30000&max=35000)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ext/ai.dbg.2.min.js.svg?compression=gzip&softmax=20000&max=25000) -[![minified size size](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ext/ai.dbg.2.min.js.svg?label=minified%20size)](https://img.badgesize.io/https://js.monitor.azure.com/scripts/b/ext/ai.dbg.2.min.js.svg?label=minified%20size) +[![gzip size](https://js.monitor.azure.com/scripts/b/ext/ai.dbg.2.min.js.gzip.svg)](https://js.monitor.azure.com/scripts/b/ext/ai.dbg.2.min.js.gzip.svg) +[![minified size size](https://js.monitor.azure.com/scripts/b/ext/ai.dbg.2.min.js.svg)](https://js.monitor.azure.com/scripts/b/ext/ai.dbg.2.min.js.svg) This README is broken down into several parts: diff --git a/extensions/applicationinsights-debugplugin-js/package.json b/extensions/applicationinsights-debugplugin-js/package.json index c0a7184a7..9b1500112 100644 --- a/extensions/applicationinsights-debugplugin-js/package.json +++ b/extensions/applicationinsights-debugplugin-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-debugplugin-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights JavaScript SDK - Debug Plugin extension", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -52,10 +52,10 @@ }, "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", - "@microsoft/applicationinsights-common": "3.1.2", - "@microsoft/applicationinsights-core-js": "3.1.2", + "@microsoft/applicationinsights-common": "3.2.0", + "@microsoft/applicationinsights-core-js": "3.2.0", "@microsoft/applicationinsights-shims": "3.0.1", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" }, "license": "MIT" } diff --git a/extensions/applicationinsights-dependencies-js/package.json b/extensions/applicationinsights-dependencies-js/package.json index ce4385d67..c65c6905d 100644 --- a/extensions/applicationinsights-dependencies-js/package.json +++ b/extensions/applicationinsights-dependencies-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-dependencies-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights XHR dependencies plugin", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -57,10 +57,10 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "license": "MIT" } diff --git a/extensions/applicationinsights-osplugin-js/package.json b/extensions/applicationinsights-osplugin-js/package.json index 8f5716f8b..0d4f49a64 100644 --- a/extensions/applicationinsights-osplugin-js/package.json +++ b/extensions/applicationinsights-osplugin-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-osplugin-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights OS Plugin", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -30,11 +30,11 @@ }, "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-common": "3.1.2", + "@microsoft/applicationinsights-common": "3.2.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "devDependencies": { "@microsoft/ai-test-framework": "0.0.1", diff --git a/extensions/applicationinsights-perfmarkmeasure-js/package.json b/extensions/applicationinsights-perfmarkmeasure-js/package.json index 25a4bd5a6..92e8611df 100644 --- a/extensions/applicationinsights-perfmarkmeasure-js/package.json +++ b/extensions/applicationinsights-perfmarkmeasure-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-perfmarkmeasure-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights Performance Mark and Measure Manager plugin", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -55,8 +55,8 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" }, "license": "MIT" } diff --git a/extensions/applicationinsights-properties-js/Tests/Unit/src/propertiesSize.tests.ts b/extensions/applicationinsights-properties-js/Tests/Unit/src/propertiesSize.tests.ts index ae6071e14..9d569845d 100644 --- a/extensions/applicationinsights-properties-js/Tests/Unit/src/propertiesSize.tests.ts +++ b/extensions/applicationinsights-properties-js/Tests/Unit/src/propertiesSize.tests.ts @@ -5,7 +5,7 @@ export class PropertiesExtensionSizeCheck extends AITestClass { private readonly MAX_DEFLATE_SIZE = 18; private readonly rawFilePath = "../dist/es5/applicationinsights-properties-js.min.js"; // Automatically updated by version scripts - private readonly currentVer = "3.1.2"; + private readonly currentVer = "3.2.0"; private readonly proFilePath = `../browser/es5/ai.props.${this.currentVer[0]}.min.js`; public testInitialize() { diff --git a/extensions/applicationinsights-properties-js/package.json b/extensions/applicationinsights-properties-js/package.json index 5e6e2dc35..70cabc3e3 100644 --- a/extensions/applicationinsights-properties-js/package.json +++ b/extensions/applicationinsights-properties-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-properties-js", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights properties (Part A) plugin", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -58,9 +58,9 @@ "dependencies": { "@microsoft/dynamicproto-js": "^2.0.3", "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" }, "license": "MIT" } diff --git a/gruntfile.js b/gruntfile.js index fdde8a9e3..79828d156 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -239,7 +239,7 @@ module.exports = function (grunt) { // const perfTestVersions = ["2.0.0","2.0.1","2.1.0","2.2.0","2.2.1","2.2.2","2.3.0","2.3.1", // "2.4.1","2.4.3","2.4.4","2.5.2","2.5.3","2.5.4","2.5.5","2.5.6","2.5.7","2.5.8","2.5.9","2.5.10","2.5.11", // "2.6.0","2.6.1","2.6.2","2.6.3","2.6.4","2.6.5","2.7.0"]; - const perfTestVersions=["3.1.2"]; + const perfTestVersions=["3.2.0"]; function buildConfig(modules) { var buildCmds = { diff --git a/package.json b/package.json index 6a7f070b2..53fbad80d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/applicationinsights-web", "description": "Microsoft Application Insights JavaScript SDK", - "version": "3.1.2", + "version": "3.2.0", "keywords": [ "browser performance monitoring", "script errors", diff --git a/shared/1ds-core-js/package.json b/shared/1ds-core-js/package.json index 3b618f6fe..01b96c22f 100644 --- a/shared/1ds-core-js/package.json +++ b/shared/1ds-core-js/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/1ds-core-js", - "version": "4.1.2", + "version": "4.2.0", "description": "Microsoft Application Insights JavaScript SDK - 1ds-core-js", "author": "Microsoft Application Insights Team", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", @@ -37,10 +37,10 @@ ], "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", + "@microsoft/applicationinsights-core-js": "3.2.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" }, "devDependencies": { "@types/qunit": "^2.19.3", @@ -49,7 +49,7 @@ "@microsoft/applicationinsights-rollup-plugin-uglify3-js": "1.0.0", "@microsoft/applicationinsights-rollup-es5": "1.0.2", "@microsoft/api-extractor": "^7.40.0", - "@nevware21/ts-async": ">= 0.3.0 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x", "grunt": "^1.5.3", "grunt-cli": "^1.4.3", "grunt-contrib-qunit": "^6.2.1", diff --git a/shared/AppInsightsCommon/package.json b/shared/AppInsightsCommon/package.json index 15ef2e323..52fe86adf 100644 --- a/shared/AppInsightsCommon/package.json +++ b/shared/AppInsightsCommon/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-common", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights Common JavaScript Library", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "author": "Microsoft Application Insights Team", @@ -55,9 +55,9 @@ }, "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", - "@microsoft/applicationinsights-core-js": "3.1.2", + "@microsoft/applicationinsights-core-js": "3.2.0", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" }, "license": "MIT" } diff --git a/shared/AppInsightsCore/package.json b/shared/AppInsightsCore/package.json index e95728eb8..4e9c09969 100644 --- a/shared/AppInsightsCore/package.json +++ b/shared/AppInsightsCore/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/applicationinsights-core-js", "author": "Microsoft Application Insights Team", - "version": "3.1.2", + "version": "3.2.0", "description": "Microsoft Application Insights Core Javascript SDK", "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme", "keywords": [ @@ -69,7 +69,7 @@ "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", - "@nevware21/ts-async": ">= 0.3.0 < 2.x" + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", + "@nevware21/ts-async": ">= 0.5.1 < 2.x" } } diff --git a/shared/AppInsightsCore/src/JavaScriptSDK/DataCacheHelper.ts b/shared/AppInsightsCore/src/JavaScriptSDK/DataCacheHelper.ts index 7abcfc265..79f2e2bac 100644 --- a/shared/AppInsightsCore/src/JavaScriptSDK/DataCacheHelper.ts +++ b/shared/AppInsightsCore/src/JavaScriptSDK/DataCacheHelper.ts @@ -6,7 +6,7 @@ import { normalizeJsName } from "./HelperFuncs"; import { STR_EMPTY } from "./InternalConstants"; import { newId } from "./RandomHelper"; -const version = "3.0.5"; +const version = "#version#"; let instanceName = "." + newId(6); let _dataUid = 0; diff --git a/tools/applicationinsights-web-snippet/package.json b/tools/applicationinsights-web-snippet/package.json index 6b2b5c0b8..9bb0e1b71 100644 --- a/tools/applicationinsights-web-snippet/package.json +++ b/tools/applicationinsights-web-snippet/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-web-snippet", - "version": "1.1.4", + "version": "1.2.0", "description": "Microsoft Application Insights Web Snippet", "main": "dist/es5/node/applicationinsights-web-snippet.js", "module": "dist-es5/applicationinsights-web-snippet.js", @@ -32,8 +32,8 @@ "devDependencies": { "@types/qunit": "^2.19.3", "@microsoft/ai-test-framework": "0.0.1", - "@microsoft/applicationinsights-web": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", + "@microsoft/applicationinsights-web": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", "@microsoft/applicationinsights-rollup-plugin-uglify3-js": "1.0.0", "@microsoft/applicationinsights-rollup-es5": "1.0.2", "@microsoft/dynamicproto-js": "^2.0.3", diff --git a/tools/chrome-debug-extension/manifest.json b/tools/chrome-debug-extension/manifest.json index 4ffc8d0ab..ea494fa18 100644 --- a/tools/chrome-debug-extension/manifest.json +++ b/tools/chrome-debug-extension/manifest.json @@ -2,8 +2,8 @@ "name": "Telemetry Viewer", "short_name": "Telemetry Viewer", "description": "A browser extension that provides a real time view of what's happening in Application Insights including what telemetry is being logged by the web application", - "version": "0.5.2", - "version_name": "0.5.2", + "version": "0.6.0", + "version_name": "0.6.0", "manifest_version": 2, "icons": { "16": "images/icon-16.png", diff --git a/tools/chrome-debug-extension/package.json b/tools/chrome-debug-extension/package.json index c6b5c5205..a7e604268 100644 --- a/tools/chrome-debug-extension/package.json +++ b/tools/chrome-debug-extension/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/applicationinsights-chrome-debug-extension", - "version": "0.5.2", + "version": "0.6.0", "description": "A chrome based browser extension that provides a real time view of what's happening in Application Insights including what telemetry is being logged by the web application", "homepage": "https://github.com/microsoft/ApplicationInsights-JS/tree/main/tools/chrome-debug-extension#readme", "keywords": [ @@ -43,11 +43,11 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@microsoft/applicationinsights-core-js": "3.1.2", - "@microsoft/applicationinsights-common": "3.1.2", + "@microsoft/applicationinsights-core-js": "3.2.0", + "@microsoft/applicationinsights-common": "3.2.0", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.0 < 2.x", + "@nevware21/ts-utils": ">= 0.11.1 < 2.x", "file-saver": "^2.0.0", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/tools/shims/package.json b/tools/shims/package.json index f9b17e874..9810a7497 100644 --- a/tools/shims/package.json +++ b/tools/shims/package.json @@ -54,6 +54,6 @@ "typescript": "^4.9.3" }, "dependencies": { - "@nevware21/ts-utils": ">= 0.11.0 < 2.x" + "@nevware21/ts-utils": ">= 0.11.1 < 2.x" } } diff --git a/tools/sizeImageGenerator/old-size-image-generator.js b/tools/sizeImageGenerator/old-size-image-generator.js new file mode 100644 index 000000000..ba99e09e5 --- /dev/null +++ b/tools/sizeImageGenerator/old-size-image-generator.js @@ -0,0 +1,73 @@ +const fsPromise = require('fs').promises; +const fs = require('fs'); +const zlib = require('zlib'); + +async function generateSizeBadge(path, fileSize) { + try { + const sizeBadge = `https://img.shields.io/badge/size-${fileSize}kb-blue`; + const res = await fetch(encodeURI(sizeBadge)); + if (!res.ok) { + throw new Error(`Failed to fetch ${sizeBadge}: ${res.status} ${res.statusText}`); + } + const buffer = await res.arrayBuffer(); + await fsPromise.writeFile(`img/ai.${path}.svg`, Buffer.from(buffer)); + } catch (err) { + throw new Error(`Failed to generate size badge: ${err.message}`); + } +} + +async function downloadFile(version) { + try { + let url = "https://js.monitor.azure.com/scripts/b/ai." + version + ".js"; + const res = await fetch(encodeURI(url)); + if (!res.ok) { + throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`); + } + const buffer = await res.arrayBuffer(); + await fsPromise.writeFile(`./cdnFile/ai.${version}.js`, Buffer.from(buffer)); + } catch (err) { + throw new Error(`Failed to generate size badge: ${err.message}`); + } +} + +function createDirectory(dirName) { + const dir = `./${dirName}`; + if (!fs.existsSync(dir)){ + fs.mkdirSync(dir); + } +} + +async function main() { + createDirectory("cdnFile"); + createDirectory("img"); + const versions = ["3.1.2", "3.1.1", "3.1.0", "3.0.9", "3.0.8", "3.0.7", + "3.0.6", "3.0.5", "3.0.4", "3.0.3", "3.0.2", "3.0.1", "3.0.0", "2.8.18", + "2.8.17", "2.8.16", "2.8.15", "2.8.14", "2.8.13", "2.8.12", "2.8.11", + "2.8.10", "2.8.9", "2.8.8", "2.8.7", "2.8.6", "2.8.5", "2.8.4", "2.8.3", + "2.8.2", "2.8.1", "2.8.0", "2.7.4", "2.7.3", "2.7.2", "2.7.1", "2.7.0", + "2.6.5", "2.6.4", "2.6.3", "2.6.2", "2.6.1", "2.6.0", "2.5.11", "2.5.10", + "2.5.9", "2.5.8", "2.5.7", "2.5.6", "2.5.5", "2.5.4", "2.5.3", "2.5.2", + "2.4.4", "2.4.3", "2.4.1", "2.3.1", "2.3.0", "2.2.2", "2.2.0", "2.1.0", + "2.0.1", "2.0.0", "3", "3.gbl"]; + + for (let i = 0; i < versions.length; i++) { + let version = versions[i]; + await downloadFile(version); + await downloadFile(version + ".min"); + const filename = `./cdnFile/ai.${version}.js`; + const minFileName = `./cdnFile/ai.${version}.min.js`; + try { + const fileSize = Math.ceil((await fsPromise.stat(filename)).size / 1024); + const minFileSize = Math.ceil((await fsPromise.stat(minFileName)).size / 1024); + const fileContent = await fsPromise.readFile(filename); + const gzippedContent = zlib.gzipSync(fileContent); + const gzippedSize = Math.ceil(gzippedContent.length / 1024); + await generateSizeBadge(version + ".js", fileSize); + await generateSizeBadge(version + ".min.js", minFileSize); + await generateSizeBadge(version + ".min.js.gzip", gzippedSize); + } catch (err) { + console.error('Error:', err); + } + } +} +main(); diff --git a/tools/sizeImageGenerator/package.json b/tools/sizeImageGenerator/package.json new file mode 100644 index 000000000..f5dc84403 --- /dev/null +++ b/tools/sizeImageGenerator/package.json @@ -0,0 +1,33 @@ +{ + "name": "applicationinsights-js-size-image-generator", + "version": "3.1.3-dev", + "author": "Javascript Telemetry SDKs ", + "description": "size image generator", + "homepage": "https://github.com/microsoft/ApplicationInsights-JS", + "sideEffects": false, + "scripts": { + "clean": "git clean -xdf", + "update": "rush update", + "build": "", + "rebuild": "", + "test": "", + "issues": "node ./size-image-generator.js" + }, + "keywords": [ + "1DS", + "Js", + "SDK" + ], + "repository": { + "type": "git", + "url": "https://github.com/microsoft/ApplicationInsights-JS/tree/main/tools/status-tools" + }, + "devDependencies": { + "globby": "^11.0.0", + "grunt": "^1.5.3" + }, + "dependencies": { + "node-fetch": "^3.3.2", + "zlib": "^1.0.5" + } +} diff --git a/tools/sizeImageGenerator/size-image-generator.js b/tools/sizeImageGenerator/size-image-generator.js new file mode 100644 index 000000000..763d7646c --- /dev/null +++ b/tools/sizeImageGenerator/size-image-generator.js @@ -0,0 +1,60 @@ +const fsPromise = require('fs').promises; +const fs = require('fs'); +const zlib = require('zlib'); +async function getVersionFromPackageJson(packageJsonPath) { + try { + const data = await fsPromise.readFile(packageJsonPath, 'utf8'); + const packageJson = JSON.parse(data); + if (packageJson && packageJson.version) { + return packageJson.version; + } else { + throw new Error('No version found in package.json'); + } + } catch (err) { + throw new Error(`Failed to read package.json: ${err.message}`); + } +} + +async function generateSizeBadge(path, fileSize) { + try { + const sizeBadge = `https://img.shields.io/badge/size-${fileSize}kb-blue`; + const res = await fetch(encodeURI(sizeBadge)); + if (!res.ok) { + throw new Error(`Failed to fetch ${sizeBadge}: ${res.status} ${res.statusText}`); + } + const buffer = await res.arrayBuffer(); + await fsPromise.writeFile(`img/ai.${path}.svg`, Buffer.from(buffer)); + } catch (err) { + throw new Error(`Failed to generate size badge: ${err.message}`); + } +} +function createDirectory(dirName) { + const dir = `./${dirName}`; + if (!fs.existsSync(dir)){ + fs.mkdirSync(dir); + } +} +async function main() { + createDirectory("img"); + const packageJsonPath = '../../AISKU/package.json'; + try { + const version = await getVersionFromPackageJson(packageJsonPath); + const filename = `../../AISKU/browser/es5/ai.${version}.js`; + const minFileName = `../../AISKU/browser/es5/ai.${version}.min.js`; + + const fileSize = Math.ceil((await fsPromise.stat(filename)).size / 1024); + const minFileSize = Math.ceil((await fsPromise.stat(minFileName)).size / 1024); + + const fileContent = await fsPromise.readFile(filename); + const gzippedContent = zlib.gzipSync(fileContent); + const gzippedSize = Math.ceil(gzippedContent.length / 1024); + + await generateSizeBadge(version + ".js", fileSize); + await generateSizeBadge(version + ".min.js", minFileSize); + await generateSizeBadge(version + ".min.js.gzip", gzippedSize); + + } catch (err) { + console.error('Error:', err); + } +} +main(); diff --git a/version.json b/version.json index b231cea83..cf44c7bdc 100644 --- a/version.json +++ b/version.json @@ -1,64 +1,64 @@ { "description": "The release value identifies the base version that will be applied via the tools/release-tools/setVersion.js", "usage": "When creating a new release you should update this value directly or via the eg. 'npm run setVersion -- 3.2.0' or 'npm run setVersion -- -patch' or 'npm run setVersion -- -minor'", - "release": "3.1.2", + "release": "3.2.0", "next": "patch", "pkgs": { "@microsoft/applicationinsights-web": { "package": "package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-web-basic": { "package": "AISKULight/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-channel-js": { "package": "channels/applicationinsights-channel-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-analytics-js": { "package": "extensions/applicationinsights-analytics-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-clickanalytics-js": { "package": "extensions/applicationinsights-clickanalytics-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-osplugin-js": { "package": "extensions/applicationinsights-osplugin-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-debugplugin-js": { "package": "extensions/applicationinsights-debugplugin-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-dependencies-js": { "package": "extensions/applicationinsights-dependencies-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-perfmarkmeasure-js": { "package": "extensions/applicationinsights-perfmarkmeasure-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-properties-js": { "package": "extensions/applicationinsights-properties-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-common": { "package": "shared/AppInsightsCommon/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-core-js": { "package": "shared/AppInsightsCore/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-offlinechannel-js": { "package": "channels/offline-channel-js/package.json", - "release": "0.1.2" + "release": "0.2.0" }, "@microsoft/applicationinsights-chrome-debug-extension": { "package": "tools/chrome-debug-extension/package.json", - "release": "0.5.2" + "release": "0.6.0" }, "applicationinsights-web-config": { "package": "tools/config/package.json", @@ -66,43 +66,43 @@ }, "@microsoft/applicationinsights-example-aisku": { "package": "examples/AISKU/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-example-dependencies": { "package": "examples/dependency/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-example-shared-worker": { "package": "examples/shared-worker/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-teechannel-js": { "package": "channels/tee-channel-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-test-module-type-check": { "package": "AISKU/Tests/es6-module-type-check/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-cfgsync-js": { "package": "extensions/applicationinsights-cfgsync-js/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/applicationinsights-example-cfgsync": { "package": "examples/cfgSync/package.json", - "release": "3.1.2" + "release": "3.2.0" }, "@microsoft/1ds-post-js": { "package": "channels/1ds-post-js/package.json", - "release": "4.1.2" + "release": "4.2.0" }, "@microsoft/1ds-core-js": { "package": "shared/1ds-core-js/package.json", - "release": "4.1.2" + "release": "4.2.0" }, "@microsoft/applicationinsights-web-snippet": { "package": "tools/applicationinsights-web-snippet/package.json", - "release": "1.1.4" + "release": "1.2.0" } } }