diff --git a/.aiAutoMinify.json b/.aiAutoMinify.json index 8209d565e..15c2193e1 100644 --- a/.aiAutoMinify.json +++ b/.aiAutoMinify.json @@ -6,6 +6,16 @@ "ePendingOp", "CallbackType", "eW3CTraceFlags", + "eValueKind", + "EventLatencyValue", + "eEventPropertyType", + "EventPersistenceValue", + "EventSendType", + "eTraceLevel", + "_eExtendedInternalMessageId", + "GuidStyle", + "FieldValueSanitizerType", + "TransportType", "eRequestHeaders", "eTraceStateKeyType", "eOfflineValue", @@ -13,7 +23,6 @@ "eStorageType", "FieldType", "eDistributedTracingModes", - "EventPersistenceValue", "eEventsDiscardedReason", "eBatchDiscardedReason", "FeatureOptInMode", @@ -22,7 +31,6 @@ "eLoggingSeverity", "_eInternalMessageId", "SendRequestReason", - "TransportType", "eStatsType", "TelemetryUnloadReason", "TelemetryUpdateReason", @@ -92,18 +100,7 @@ ] }, "@microsoft/1ds-core-js": { - "constEnums": [ - "eValueKind", - "EventLatencyValue", - "eEventPropertyType", - "EventPersistenceValue", - "EventSendType", - "eTraceLevel", - "_eExtendedInternalMessageId", - "GuidStyle", - "FieldValueSanitizerType", - "TransportType" - ] + "constEnums": [] }, "@microsoft/1ds-post-js": { "constEnums": [ diff --git a/common/config/rush/npm-shrinkwrap.json b/common/config/rush/npm-shrinkwrap.json index 5a9f4ca7c..64a1209ea 100644 --- a/common/config/rush/npm-shrinkwrap.json +++ b/common/config/rush/npm-shrinkwrap.json @@ -210,86 +210,138 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/config-array": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.2.tgz", - "integrity": "sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "peer": true, "dependencies": { - "@eslint/object-schema": "^3.0.2", - "debug": "^4.3.1", - "minimatch": "^10.2.1" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.2.tgz", - "integrity": "sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "peer": true, "dependencies": { - "@eslint/core": "^1.1.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "peer": true + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "peer": true, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": ">= 4" } }, - "node_modules/@eslint/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz", - "integrity": "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==", + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "peer": true, "dependencies": { - "@types/json-schema": "^7.0.15" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "*" } }, - "node_modules/@eslint/object-schema": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.2.tgz", - "integrity": "sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==", + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "peer": true, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.0.tgz", - "integrity": "sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "peer": true, "dependencies": { - "@eslint/core": "^1.1.0", - "levn": "^0.4.1" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": ">=10.10.0" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "node_modules/@humanwhocodes/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "peer": true + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "peer": true, - "engines": { - "node": ">=18.18.0" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "peer": true, "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=18.18.0" + "node": "*" } }, "node_modules/@humanwhocodes/module-importer": { @@ -305,18 +357,12 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "peer": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "peer": true }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", @@ -324,17 +370,17 @@ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" }, "node_modules/@microsoft/api-extractor": { - "version": "7.57.4", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.57.4.tgz", - "integrity": "sha512-rAkgJ9G6mb1OnLX3SThmtNjzX0yWdTcQoweZr1JyXd8+J5mJx8a8FyuPS9EDx6apdTT2mZnOSGurbidc1+g/jA==", + "version": "7.57.6", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.57.6.tgz", + "integrity": "sha512-0rFv/D8Grzw1Mjs2+8NGUR+o4h9LVm5zKRtMeWnpdB5IMJF4TeHCL1zR5LMCIudkOvyvjbhMG5Wjs0B5nqsrRQ==", "dependencies": { - "@microsoft/api-extractor-model": "7.33.2", + "@microsoft/api-extractor-model": "7.33.4", "@microsoft/tsdoc": "~0.16.0", - "@microsoft/tsdoc-config": "~0.18.0", - "@rushstack/node-core-library": "5.20.2", - "@rushstack/rig-package": "0.7.1", - "@rushstack/terminal": "0.22.2", - "@rushstack/ts-command-line": "5.3.2", + "@microsoft/tsdoc-config": "~0.18.1", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/rig-package": "0.7.2", + "@rushstack/terminal": "0.22.3", + "@rushstack/ts-command-line": "5.3.3", "diff": "~8.0.2", "lodash": "~4.17.23", "minimatch": "10.2.1", @@ -348,13 +394,13 @@ } }, "node_modules/@microsoft/api-extractor-model": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.33.2.tgz", - "integrity": "sha512-lRr4nl1asW3LIrn4L5+fWUxkKnp31I70BcLgyWz8ThdrdwXp0X64Qsmq4nH91z27Y8Fok3ejdI/36BZUsCLPTA==", + "version": "7.33.4", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.33.4.tgz", + "integrity": "sha512-u1LTaNTikZAQ9uK6KG1Ms7nvNedsnODnspq/gH2dcyETWvH4hVNGNDvRAEutH66kAmxA4/necElqGNs1FggC8w==", "dependencies": { "@microsoft/tsdoc": "~0.16.0", - "@microsoft/tsdoc-config": "~0.18.0", - "@rushstack/node-core-library": "5.20.2" + "@microsoft/tsdoc-config": "~0.18.1", + "@rushstack/node-core-library": "5.20.3" } }, "node_modules/@microsoft/api-extractor/node_modules/typescript": { @@ -383,23 +429,23 @@ "integrity": "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==" }, "node_modules/@microsoft/tsdoc-config": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.0.tgz", - "integrity": "sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.1.tgz", + "integrity": "sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==", "dependencies": { "@microsoft/tsdoc": "0.16.0", - "ajv": "~8.12.0", + "ajv": "~8.18.0", "jju": "~1.4.0", "resolve": "~1.22.2" } }, "node_modules/@nevware21/grunt-eslint-ts": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@nevware21/grunt-eslint-ts/-/grunt-eslint-ts-0.5.1.tgz", - "integrity": "sha512-Ita/SqAURvKj0SlyyxZAXyUAscDieMUD1tf+O9pzc/2P3Q2NSXWHeCRw+cOdBYnTRKxW4miGCJwlVst8p93ULA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nevware21/grunt-eslint-ts/-/grunt-eslint-ts-0.5.2.tgz", + "integrity": "sha512-k2gzszSryZ+oeM1lCSAgXHXeMvPtzyesHKKd1sH8etQMvmwQJq0lYi5VpjIABzgWAE1jO5/4ZPQq0XB2QieAag==", "dependencies": { - "@nevware21/ts-async": ">= 0.5.2 < 2.x", - "@nevware21/ts-utils": ">= 0.11.3 < 2.x", + "@nevware21/ts-async": ">= 0.5.5 < 2.x", + "@nevware21/ts-utils": ">= 0.12.6 < 2.x", "eslint-formatter-codeframe": "^7.32.1" }, "engines": { @@ -408,19 +454,19 @@ "peerDependencies": { "@typescript-eslint/eslint-plugin": "*", "@typescript-eslint/parser": "*", - "eslint": ">=7", + "eslint": "^7.0.0 || ^8.0.0", "eslint-plugin-security": "*", "grunt": ">=1", "typescript": ">=1" } }, "node_modules/@nevware21/grunt-ts-plugin": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@nevware21/grunt-ts-plugin/-/grunt-ts-plugin-0.5.1.tgz", - "integrity": "sha512-ezNls+4NTWOI4D4WLeEWeGOKAQdJ1PnEpj+DpGaP0FJAEk5aXhx4tRGIhXr8wE7bNuUDI3lctZjR+GONbAgekg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nevware21/grunt-ts-plugin/-/grunt-ts-plugin-0.5.2.tgz", + "integrity": "sha512-lW0vWYDYV+ZlMf+2+edD/VdSjH/Gfy2+nuxbTCeNxySkC1FPrWFDh3Iefe8BplIdoySoZxVyqhsCaME+SoCO4Q==", "dependencies": { - "@nevware21/ts-async": ">= 0.5.2 < 2.x", - "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + "@nevware21/ts-async": ">= 0.5.5 < 2.x", + "@nevware21/ts-utils": ">= 0.12.6 < 2.x" }, "engines": { "node": ">= 0.8.0" @@ -439,9 +485,9 @@ } }, "node_modules/@nevware21/ts-utils": { - "version": "0.12.6", - "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.12.6.tgz", - "integrity": "sha512-UsS1hbgr/V/x8dT7hVHvr/PwHzASi8/Itis1+L8ykLiqsUXdfzrB1maL0vMmKbDEJpmGARsoC/7RIswi+n248Q==" + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.13.0.tgz", + "integrity": "sha512-F3mD+DsUn9OiZmZc5tg0oKqrJCtiCstwx+wE+DNzFYh2cCRUuzTYdK9zGGP/au2BWvbOQ6Tqlbjr2+dT1P3AlQ==" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -574,9 +620,9 @@ } }, "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.7.tgz", - "integrity": "sha512-FjiwU9HaHW6YB3H4a1sFudnv93lvydNjz2lmyUXR6IwKhGI+bgL3SOZrBGn6kvvX2pJvhEkGSGjyTHN47O4rqA==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1402,11 +1448,11 @@ } }, "node_modules/@rushstack/node-core-library": { - "version": "5.20.2", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.20.2.tgz", - "integrity": "sha512-L6yT/ynRpTqDZyic//y7sEMlzKhbwC1rnTkGX3gnnGBygl/x6yJrsayjdj2Fx+q+7BX6NgXa1jEkDNffSi0pPA==", + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.20.3.tgz", + "integrity": "sha512-95JgEPq2k7tHxhF9/OJnnyHDXfC9cLhhta0An/6MlkDsX2A6dTzDrTUG18vx4vjc280V0fi0xDH9iQczpSuWsw==", "dependencies": { - "ajv": "~8.13.0", + "ajv": "~8.18.0", "ajv-draft-04": "~1.0.0", "ajv-formats": "~3.0.1", "fs-extra": "~11.3.0", @@ -1424,21 +1470,6 @@ } } }, - "node_modules/@rushstack/node-core-library/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/@rushstack/problem-matcher": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@rushstack/problem-matcher/-/problem-matcher-0.2.1.tgz", @@ -1453,20 +1484,20 @@ } }, "node_modules/@rushstack/rig-package": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.7.1.tgz", - "integrity": "sha512-hLwDnp4yMcAd/gcUol8NPWNctpIXzVOgMyhZ8DagnEJls9TOZd0xF//5hS+YTiX7/+4rLfBra+NoB3rtFxjDdA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.7.2.tgz", + "integrity": "sha512-9XbFWuqMYcHUso4mnETfhGVUSaADBRj6HUAAEYk50nMPn8WRICmBuCphycQGNB3duIR6EEZX3Xj3SYc2XiP+9A==", "dependencies": { "resolve": "~1.22.1", "strip-json-comments": "~3.1.1" } }, "node_modules/@rushstack/terminal": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.22.2.tgz", - "integrity": "sha512-pAAG+hwhJeKxQ9mbH8VmCQYZ2yY3qbZJXOozr1CFyViW53psxZeH7PIlgMY4MLrzrRmNzS9r00puCZb2LH6qKw==", + "version": "0.22.3", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.22.3.tgz", + "integrity": "sha512-gHC9pIMrUPzAbBiI4VZMU7Q+rsCzb8hJl36lFIulIzoceKotyKL3Rd76AZ2CryCTKEg+0bnTj406HE5YY5OQvw==", "dependencies": { - "@rushstack/node-core-library": "5.20.2", + "@rushstack/node-core-library": "5.20.3", "@rushstack/problem-matcher": "0.2.1", "supports-color": "~8.1.1" }, @@ -1480,11 +1511,11 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.3.2.tgz", - "integrity": "sha512-NRvBWsh/UNQ4DvkQcRRRXHVeJDtMm4Ho7EhivglSBNMpXzRqUOkkICSf+deMhsAmzNsQ9sWfOo6tWz53+n7J0A==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.3.3.tgz", + "integrity": "sha512-c+ltdcvC7ym+10lhwR/vWiOhsrm/bP3By2VsFcs5qTKv+6tTmxgbVrtJ5NdNjANiV5TcmOZgUN+5KYQ4llsvEw==", "dependencies": { - "@rushstack/terminal": "0.22.2", + "@rushstack/terminal": "0.22.3", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -1603,12 +1634,6 @@ "@types/har-format": "*" } }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "peer": true - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -1662,12 +1687,6 @@ "@types/unist": "*" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "peer": true - }, "node_modules/@types/lodash": { "version": "4.17.24", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", @@ -1923,9 +1942,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", - "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "peer": true, "dependencies": { "brace-expansion": "^5.0.2" @@ -2041,14 +2060,14 @@ } }, "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -2288,10 +2307,9 @@ } }, "node_modules/bare-fs": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.4.tgz", - "integrity": "sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==", - "optional": true, + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.5.tgz", + "integrity": "sha512-XvwYM6VZqKoqDll8BmSww5luA5eflDzY0uEFfBJtFKe4PAAtxBjU3YIxzIBzhyaEQBy1VXEQBto4cpN5RZJw+w==", "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", @@ -2312,10 +2330,9 @@ } }, "node_modules/bare-os": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", - "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", - "optional": true, + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.7.0.tgz", + "integrity": "sha512-64Rcwj8qlnTZU8Ps6JJEdSmxBEUGgI7g8l+lMtsJLl4IsfTcHMTfJ188u2iGV6P6YPRZrtv72B2kjn+hp+Yv3g==", "engines": { "bare": ">=1.14.0" } @@ -2324,7 +2341,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", - "optional": true, "dependencies": { "bare-os": "^3.0.1" } @@ -2333,7 +2349,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.0.tgz", "integrity": "sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==", - "optional": true, "dependencies": { "streamx": "^2.21.0", "teex": "^1.0.1" @@ -2355,7 +2370,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", - "optional": true, "dependencies": { "bare-path": "^3.0.0" } @@ -2409,9 +2423,9 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dependencies": { "balanced-match": "^4.0.2" }, @@ -2514,9 +2528,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001774", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz", - "integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==", + "version": "1.0.30001775", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz", + "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==", "funding": [ { "type": "opencollective", @@ -2697,9 +2711,9 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -2721,22 +2735,6 @@ } } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -2923,6 +2921,18 @@ "node": ">=8" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -3086,58 +3096,59 @@ } }, "node_modules/eslint": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.2.tgz", - "integrity": "sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.2", - "@eslint/config-helpers": "^0.5.2", - "@eslint/core": "^1.1.0", - "@eslint/plugin-kit": "^0.6.0", - "@humanfs/node": "^0.16.6", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.3.2", + "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.1", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.1.1", - "esquery": "^1.7.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", + "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-formatter-codeframe": { @@ -3171,18 +3182,16 @@ } }, "node_modules/eslint-scope": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.1.tgz", - "integrity": "sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "peer": true, "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3216,16 +3225,20 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "peer": true + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "peer": true, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/eslint/node_modules/ignore": { @@ -3243,30 +3256,30 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "peer": true }, - "node_modules/espree": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.1.1.tgz", - "integrity": "sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "peer": true, "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "*" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "peer": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3441,6 +3454,21 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "peer": true }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -3475,15 +3503,15 @@ } }, "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "peer": true, "dependencies": { - "flat-cache": "^4.0.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=16.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/file-saver": { @@ -3586,22 +3614,23 @@ } }, "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "peer": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.4" + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=16" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.4.tgz", + "integrity": "sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==", "peer": true }, "node_modules/for-in": { @@ -3670,6 +3699,19 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3803,9 +3845,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.3.tgz", - "integrity": "sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3852,6 +3894,21 @@ "which": "bin/which" } }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", @@ -3905,6 +3962,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "peer": true + }, "node_modules/grunt": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", @@ -4078,6 +4141,18 @@ "nopt": "bin/nopt.js" } }, + "node_modules/grunt/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/grunt/node_modules/minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", @@ -4424,6 +4499,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -4515,17 +4599,21 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -4722,6 +4810,12 @@ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "peer": true + }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -5500,9 +5594,9 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -5512,6 +5606,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "peer": true, "engines": { "node": ">=6" } @@ -5678,9 +5773,9 @@ } }, "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.7.tgz", - "integrity": "sha512-FjiwU9HaHW6YB3H4a1sFudnv93lvydNjz2lmyUXR6IwKhGI+bgL3SOZrBGn6kvvX2pJvhEkGSGjyTHN47O4rqA==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5794,6 +5889,22 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rollup": { "version": "3.30.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.30.0.tgz", @@ -6447,11 +6558,12 @@ } }, "node_modules/tar-fs/node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", + "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", "dependencies": { "b4a": "^1.6.4", + "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } @@ -6475,7 +6587,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", - "optional": true, "dependencies": { "streamx": "^2.12.5" } @@ -6501,6 +6612,12 @@ } } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "peer": true + }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -6591,10 +6708,22 @@ "node": ">=4" } }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typed-query-selector": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", - "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==" + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.1.tgz", + "integrity": "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==" }, "node_modules/typedoc": { "version": "0.26.11", @@ -6617,12 +6746,25 @@ "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x" } }, + "node_modules/typedoc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz", - "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -6817,6 +6959,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, "dependencies": { "punycode": "^2.1.0" } diff --git a/rush.json b/rush.json index 0d2021c26..f23779a77 100644 --- a/rush.json +++ b/rush.json @@ -1,6 +1,6 @@ { "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json", - "npmVersion": "9.9.3", + "npmVersion": "9.9.4", "rushVersion": "5.169.3", "projectFolderMaxDepth": 4, "projects": [ diff --git a/shared/1ds-core-js/src/Index.ts b/shared/1ds-core-js/src/Index.ts index e879830d2..b9a84629d 100644 --- a/shared/1ds-core-js/src/Index.ts +++ b/shared/1ds-core-js/src/Index.ts @@ -1,30 +1,37 @@ /** * Index.ts -* @author Abhilash Panwar (abpanwar) -* @copyright Microsoft 2018 -* File to export public classes, interfaces and enums. +* Re-export package — all implementation merged into @microsoft/applicationinsights-core-js. +* This package exists for backward compatibility with consumers of @microsoft/1ds-core-js. */ -import { AppInsightsCore } from "./AppInsightsCore"; -import { - FieldValueSanitizerFunc, FieldValueSanitizerTypes, IEventProperty, IEventTiming, IExtendedConfiguration, IExtendedTelemetryItem, - IFieldSanitizerDetails, IFieldValueSanitizerProvider, IPropertyStorageOverride, IValueSanitizer -} from "./DataModels"; -import { - EventLatency, EventLatencyValue, EventPersistence, EventPersistenceValue, EventPropertyType, EventSendType, FieldValueSanitizerType, - GuidStyle, TraceLevel, ValueKind, _ExtendedInternalMessageId, _eExtendedInternalMessageId, eEventPropertyType, eTraceLevel, eValueKind -} from "./Enums"; -import { ValueSanitizer } from "./ValueSanitizer"; +// Re-export AppInsightsExtCore as AppInsightsCore so existing consumers are not broken +export { AppInsightsExtCore as AppInsightsCore } from "@microsoft/applicationinsights-core-js"; + +// Re-export all 1DS-specific types from core export { - ValueKind, eValueKind, IExtendedConfiguration, IPropertyStorageOverride, - EventLatency, EventPersistence, TraceLevel, eTraceLevel, IEventProperty, IExtendedTelemetryItem, - AppInsightsCore, _ExtendedInternalMessageId, _eExtendedInternalMessageId, EventPropertyType, eEventPropertyType, - IEventTiming, GuidStyle, - FieldValueSanitizerFunc, FieldValueSanitizerType, FieldValueSanitizerTypes, IFieldSanitizerDetails, - IFieldValueSanitizerProvider, IValueSanitizer, ValueSanitizer, - EventLatencyValue, EventPersistenceValue, EventSendType -}; + ValueKind, eValueKind, + EventLatency, EventLatencyValue, + EventPersistence, EventPersistenceValue, + EventPropertyType, eEventPropertyType, + EventSendType, + TraceLevel, eTraceLevel, + _ExtendedInternalMessageId, _eExtendedInternalMessageId, + GuidStyle, FieldValueSanitizerType, + IExtendedConfiguration, IPropertyStorageOverride, + IEventProperty, IExtendedTelemetryItem, IEventTiming, + FieldValueSanitizerFunc, FieldValueSanitizerTypes, + IFieldSanitizerDetails, IFieldValueSanitizerProvider, IValueSanitizer, + ValueSanitizer, + isValueAssigned, isLatency, isUint8ArrayAvailable, getTenantId, sanitizeProperty, + Version, FullVersionString, getCommonSchemaMetaData, getCookieValue, + extend, createGuid, isDocumentObjectAvailable, isWindowObjectAvailable, + setProcessTelemetryTimings, getTime, + isArrayValid, isValueKind, getFieldValueType, + isChromium, isGreaterThanZero, + createExtendedTelemetryItemFromSpan +} from "@microsoft/applicationinsights-core-js"; +// Re-export all core types that were previously re-exported by this package export { IAppInsightsCore, IChannelControls, IPlugin, INotificationManager, NotificationManager, INotificationListener, IConfiguration, ITelemetryItem, ITelemetryPlugin, BaseTelemetryPlugin, IProcessTelemetryContext, ITelemetryPluginChain, @@ -32,24 +39,19 @@ export { IPerfEvent, IPerfManager, IPerfManagerProvider, PerfEvent, PerfManager, doPerf, ICustomProperties, Tags, AppInsightsCore as InternalAppInsightsCore, _InternalLogMessage, _InternalMessageId, eActiveStatus, ActiveStatus, createEnumStyle, eLoggingSeverity, _eInternalMessageId, _throwInternal, _warnToConsole, _logInternalMessage, - // The HelperFuncs functions isTypeof, isUndefined, isNullOrUndefined, hasOwnProperty, isObject, isFunction, attachEvent, detachEvent, normalizeJsName, objForEachKey, strStartsWith, strEndsWith, strContains, strTrim, isDate, isArray, isError, isString, isNumber, isBoolean, toISOString, arrForEach, arrIndexOf, arrMap, arrReduce, objKeys, objDefineAccessors, dateNow, getExceptionName, throwError, setValue, getSetValue, isNotTruthy, isTruthy, proxyAssign, proxyFunctions, proxyFunctionAs, optimizeObject, addEventHandler, newGuid, perfNow, newId, generateW3CId, safeGetLogger, objFreeze, objSeal, fieldRedaction, - // EnvUtils getGlobal, getGlobalInst, hasWindow, getWindow, hasDocument, getDocument, getCrypto, getMsCrypto, hasNavigator, getNavigator, hasHistory, getHistory, getLocation, getPerformance, hasJSON, getJSON, isReactNative, getConsole, dumpObj, isIE, getIEVersion, strUndefined, strObject, strPrototype, strFunction, setEnableEnvMocks, strUndefined as Undefined, - // Random randomValue, random32, - // Cookie Handling ICookieMgr, ICookieMgrConfig, uaDisallowsSameSiteNone as disallowsSameSiteNone, areCookiesSupported, areCookiesSupported as cookieAvailable, createCookieMgr, safeGetCookieMgr, - // Aliases - toISOString as getISOString, + toISOString as getISOString, openXhr, isBeaconsSupported, isFetchSupported, isXhrSupported, useXDomainRequest, addPageHideEventListener, addPageShowEventListener, addEventListeners, addPageUnloadEventListener, removeEventHandler, removeEventListeners, removePageUnloadEventListener, removePageHideEventListener, removePageShowEventListener, eventOn, eventOff, mergeEvtNamespace, @@ -61,8 +63,6 @@ export { ITelemetryUpdateState, IUnloadableComponent, IDistributedTraceContext, createTraceParent, parseTraceParent, isValidTraceId, isValidSpanId, isValidTraceParent, isSampledFlag, formatTraceParent, findW3cTraceParent, IUnloadHook, ILegacyUnloadHook, IUnloadHookContainer, - - // Dynamic Config definitions IConfigCheckFn, IConfigDefaultCheck, IConfigDefaults, IConfigSetFn, IDynamicConfigHandler, IDynamicPropertyHandler, IWatchDetails, IWatcherHandler, WatcherFunction, createDynamicConfig, onConfigChange, getDynamicConfigHandler, blockDynamicConversion, forceDynamicConversion, @@ -70,20 +70,5 @@ export { getResponseText, formatErrorMessageXdr, formatErrorMessageXhr, prependTransports, parseResponse, _getAllResponseHeaders, _appendHeader, _IInternalXhrOverride, _ITimeoutOverrideWrapper, IXDomainRequest, isFeatureEnabled, FeatureOptInMode, TransportType, - - // Test Hooks _testHookMaxUnloadHooksCb } from "@microsoft/applicationinsights-core-js"; - -export { - isValueAssigned, isLatency, isUint8ArrayAvailable, getTenantId, sanitizeProperty, - Version, FullVersionString, getCommonSchemaMetaData, getCookieValue, - extend, createGuid, isDocumentObjectAvailable, isWindowObjectAvailable, - setProcessTelemetryTimings, getTime, - isArrayValid, isValueKind, getFieldValueType, - isChromium, // Replace with ai-core version once published in ai-core - openXhr, - isGreaterThanZero -} from "./Utils"; - -export { createExtendedTelemetryItemFromSpan } from "./extSpanUtils"; \ No newline at end of file diff --git a/shared/1ds-core-js/test/Unit/src/ESPromiseTests.ts b/shared/1ds-core-js/test/Unit/src/ESPromiseTests.ts deleted file mode 100644 index 1ff9db3c5..000000000 --- a/shared/1ds-core-js/test/Unit/src/ESPromiseTests.ts +++ /dev/null @@ -1,471 +0,0 @@ -import { AITestClass } from "@microsoft/ai-test-framework"; -import { createAsyncAllPromise, createAsyncPromise, createAsyncRejectedPromise, createAsyncResolvedPromise, IPromise } from '@nevware21/ts-async'; -import * as sinon from 'sinon'; - -export class ESPromiseTests extends AITestClass { - - public testInitialize() { - } - - public registerTests() { - this.testCase({ - name: "Test promise with invalid resolver", - test: () => { - let clock = sinon.useFakeTimers(); - try { - try { - let promise = createAsyncPromise(undefined as any); - QUnit.assert.ok(false, "expected an exception to be thrown with undefined"); - } catch(e) { - QUnit.assert.ok(e.message.indexOf("is not a function") != -1, "Expected the exception message to include reason for failure - " + e.message); - } - - try { - let promise = createAsyncPromise(null as any); - QUnit.assert.ok(false, "expected an exception to be thrown with null"); - } catch(e) { - QUnit.assert.ok(e.message.indexOf("is not a function") != -1, "Expected the exception message to include reason for failure - " + e.message); - } - - try { - let promise = createAsyncPromise(42); - QUnit.assert.ok(false, "expected an exception to be thrown with null"); - } catch(e) { - QUnit.assert.ok(e.message.indexOf("is not a function") != -1, "Expected the exception message to include reason for failure - " + e.message); - } - } finally { - clock.restore(); - } - } - }); - - this.testCase({ - name: "Test resolving promise", - test: () => { - let clock = sinon.useFakeTimers(); - let promise: IPromise; - try { - let resolvedValue = null; - let rejectedValue = null; - promise = createAsyncPromise((resolve, reject) => { - resolve(42); - }).then((value) => { - resolvedValue = value; - return value; - }, (value) => { - rejectedValue = value; - return value; - }); - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Cause the async promise execution to occur - clock.tick(100); - QUnit.assert.equal(resolvedValue, 42, "Expected the promise to be resolved"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected"); - - resolvedValue = null; - rejectedValue = null; - promise = createAsyncPromise((resolve, reject) => { - resolve(42); - }).then((value) => { - resolvedValue = value; - return value; - }).catch((value) => { - rejectedValue = value; - return value; - }) - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Cause the async promise execution to occur - clock.tick(100); - QUnit.assert.equal(resolvedValue, 42, "Expected the promise to be resolved"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected"); - } finally { - clock.restore(); - } - } - }); - - this.testCase({ - name: "Test rejecting promise", - test: () => { - let clock = sinon.useFakeTimers(); - let promise: IPromise; - try { - let resolvedValue: number | null = null; - let rejectedValue = null; - promise = createAsyncPromise((resolve, reject) => { - reject(-42); - }).then((value) => { - resolvedValue = value; - return value; - }, (value) => { - rejectedValue = value; - return value; - }); - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Cause the async promise execution to occur - clock.tick(100); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved"); - QUnit.assert.equal(rejectedValue, -42, "Expected the promise to be rejected"); - - resolvedValue = null; - rejectedValue = null; - promise = createAsyncPromise((resolve, reject) => { - reject(-42); - }).then((value) => { - resolvedValue = value; - return value; - }).catch((value) => { - rejectedValue = value; - return value; - }); - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Cause the async promise execution to occur - clock.tick(100); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved"); - QUnit.assert.equal(rejectedValue, -42, "Expected the promise to be rejected"); - } finally { - clock.restore(); - } - } - }); - - this.testCase({ - name: "Test rejecting promise by throwing", - test: () => { - let clock = sinon.useFakeTimers(); - let promise: IPromise = null; - try { - let resolvedValue: number | null = null; - let rejectedValue = null; - promise = createAsyncPromise((resolve, reject) => { - throw new Error("Simulated failure!"); - }).then((value) => { - resolvedValue = value; - return value; - }, (value) => { - rejectedValue = value; - return value; - }); - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Cause the async promise execution to occur - clock.tick(100); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved"); - QUnit.assert.ok(rejectedValue != null, "Expected the promise to be rejected with a value"); - QUnit.assert.ok(rejectedValue.message.indexOf("Simulated failure!") != -1, "Expected the promise to be rejected with the contained exception"); - - resolvedValue = null; - rejectedValue = null; - promise = createAsyncPromise((resolve, reject) => { - throw new Error("Simulated failure!"); - }).then((value) => { - resolvedValue = value; - return value; - }).catch((value) => { - rejectedValue = value; - return value; - }) - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Cause the async promise execution to occur - clock.tick(100); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved"); - QUnit.assert.ok(rejectedValue != null, "Expected the promise to be rejected with a value"); - QUnit.assert.ok(rejectedValue.message.indexOf("Simulated failure!") != -1, "Expected the promise to be rejected with the contained exception"); - } finally { - clock.restore(); - } - } - }); - - this.testCase({ - name: "Test resolving promise with a returned value", - test: () => { - let clock = sinon.useFakeTimers(); - let promise: IPromise = null; - let subPromise: IPromise = null; - try { - let resolvedValue: any = null; - promise = createAsyncPromise((resolve, reject) => { - resolve(42); - }).then((value) => { - return 53; - }).then((value) => { - resolvedValue = value; - return value; - }); - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - - // Cause the async promise execution to occur - clock.tick(100); - QUnit.assert.equal(resolvedValue, 53, "Expected the promise to be resolved with the returned value not the initial resolved value"); - - resolvedValue = null; - promise = createAsyncPromise((resolve, reject) => { - resolve(42); - }).then((value) => { - // Don't return anything - }).then((value) => { - resolvedValue = value; - }); - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - - // Cause the async promise execution to occur - clock.tick(100); - QUnit.assert.equal(resolvedValue, undefined, "Expected the promise to be resolved with undefined from the Promise returned by the initial then"); - - } finally { - clock.restore(); - } - } - }); - - this.testCase({ - name: "Test resolving promise with a promise", - test: () => { - let clock = sinon.useFakeTimers(); - let promise: IPromise = null; - let preResolved: IPromise = createAsyncResolvedPromise(53); - let preRejected: IPromise = createAsyncRejectedPromise(new Error("Simulated Pre Rejected Promise...")); - // Handle the rejected promise to avoid test failure - preRejected.catch(() => {}); - - try { - let resolvedValue = null; - let rejectedValue = null; - promise = createAsyncPromise((resolve, reject) => { - resolve(42); - }).then((value) => { - return preResolved; - }).then((value) => { - resolvedValue = value; - }, - (value) => { - rejectedValue = value; - }); - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Cause the async promise execution to occur - clock.tick(10); - QUnit.assert.equal(resolvedValue, 53, "Expected the promise to be resolved"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - resolvedValue = null; - rejectedValue = null; - promise = createAsyncPromise((resolve, reject) => { - resolve(42); - }).then((value) => { - return preRejected; - }).then((value) => { - resolvedValue = value; - }, - (value) => { - rejectedValue = value; - }); - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Cause the async promise execution to occur - clock.tick(10); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to be resolved"); - QUnit.assert.ok(rejectedValue != null, "Expected the promise to be rejected with a value"); - QUnit.assert.ok(rejectedValue.message.indexOf("Simulated Pre Rejected Promise") != -1, "Expected the promise to be rejected with the contained exception"); - - let unresolvedPromise = createAsyncPromise((resolve, reject) => { - setTimeout(() => { - resolve(68); - }, 2000); - }) - resolvedValue = null; - rejectedValue = null; - promise = createAsyncPromise((resolve, reject) => { - resolve(42); - }).then((value) => { - return unresolvedPromise; - }).then((value) => { - resolvedValue = value; - }, - (value) => { - rejectedValue = value; - }); - - // Should not be resolved or rejected yet as this should happen asynchronously - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Cause the async promise execution to occur, but not enough for the unresolved promise - clock.tick(100); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // let some more time pass but still not enough for the unresolved promise - clock.tick(1000); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Now lets trigger the unresolved promise - clock.tick(1000); - QUnit.assert.equal(resolvedValue, 68, "Expected the promise to be resolved"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - } finally { - clock.restore(); - } - } - }); - - this.testCase({ - name: "Testing waiting for multiple promises", - test: () => { - let clock = sinon.useFakeTimers(); - - try { - let workerPromises: IPromise[] = []; - let workerResolved: boolean[] = []; - let resolvedValue:any = null; - - // Create the promises - for (let lp = 0; lp < 10; lp++) { - workerResolved[lp] = false; - workerPromises[lp] = createAsyncPromise((resolve, reject) => { - setTimeout(() => { - // Wait to resolve this promise - workerResolved[lp] = true; - resolve(lp); - }, (lp + 1) * 1000); - }) - } - - // Create the uber waiting promise - let thePromise: IPromise = createAsyncAllPromise(workerPromises); - thePromise.then((value) => { - resolvedValue = value; - }); - - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - - for (let lp = 0; lp < 10; lp++) { - clock.tick(100); - QUnit.assert.equal(workerResolved[lp], false, "Worker not resolved yet"); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet - " + lp); - clock.tick(899); - QUnit.assert.equal(workerResolved[lp], false, "Worker not resolved yet"); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet - " + lp); - // This will cause the worker promise to get resolved - clock.tick(1); - QUnit.assert.equal(workerResolved[lp], true, "Worker now resolved"); - } - - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - clock.tick(50); - QUnit.assert.ok(resolvedValue != null, "Expected the promise to be resolved"); - for (let lp = 0; lp < 10; lp++) - { - QUnit.assert.equal(resolvedValue[lp], lp, "Value mismatch"); - } - } finally { - clock.restore(); - } - } - }); - - this.testCase({ - name: "Testing waiting for multiple promises where one rejects", - test: () => { - let clock = sinon.useFakeTimers(); - - try { - let workerPromises: IPromise[] = []; - let workerResolved: boolean[] = []; - let resolvedValue:any = null; - let rejectedValue:any = null; - - // Create the promises - for (let lp = 0; lp < 10; lp++) { - workerResolved[lp] = false; - workerPromises[lp] = createAsyncPromise((resolve, reject) => { - setTimeout(() => { - // Wait to resolve this promise - workerResolved[lp] = true; - if (lp == 5) - { - reject(new Error("Simulated Rejection")); - return; - } - - resolve(lp); - }, (lp + 1) * 1000); - }) - } - - // Create the uber waiting promise - let thePromise: IPromise = createAsyncAllPromise(workerPromises); - thePromise.then((value) => { - resolvedValue = value; - }, - (value) => { - rejectedValue = value; - }); - - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - for (let lp = 0; lp < 5; lp++) { - clock.tick(100); - QUnit.assert.equal(workerResolved[lp], false, "Worker not resolved yet"); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet - " + lp); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet - " + lp); - clock.tick(899); - QUnit.assert.equal(workerResolved[lp], false, "Worker not resolved yet"); - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet - " + lp); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet - " + lp); - // This will cause the worker promise to get resolved - clock.tick(1); - QUnit.assert.equal(workerResolved[lp], true, "Worker now resolved"); - } - - QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); - QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); - - // Now lets cause the rejected promise to run - clock.tick(1500); - QUnit.assert.ok(resolvedValue == null, "Expected the promise to not be resolved"); - QUnit.assert.ok(rejectedValue != null, "Expected the promise to be rejected"); - QUnit.assert.ok(rejectedValue.message.indexOf("Simulated Rejection") != -1, "Main promise should have rejected with the rejected error"); - } finally { - clock.restore(); - } - } - }); - } -} diff --git a/shared/1ds-core-js/test/Unit/src/core.unittests.ts b/shared/1ds-core-js/test/Unit/src/core.unittests.ts index 557a2d46f..a80258527 100644 --- a/shared/1ds-core-js/test/Unit/src/core.unittests.ts +++ b/shared/1ds-core-js/test/Unit/src/core.unittests.ts @@ -1,25 +1,7 @@ -import { CoreTest } from './CoreTest'; -import { ESPromiseTests } from './ESPromiseTests'; -import { ESPromiseSchedulerTests } from './ESPromiseSchedulerTests'; -import { DynamicProtoTests } from './DynamicProtoTests'; -import { UtilsTest } from './UtilsTest'; -import { ValueSanitizerTests } from './ValueSanitizerTests'; -import {FileSizeCheckTest} from './FileSizeCheckTest' -import { GlobalTestHooks } from './GlobalTestHooks.Test'; -import { SpanUtilsTests } from './SpanUtilsTests'; - - +import { FileSizeCheckTest } from './FileSizeCheckTest'; export function registerTests() { - new GlobalTestHooks().registerTests(); - new CoreTest('CoreTest').registerTests(); - new ESPromiseTests('ESPromiseTests').registerTests(); - new ESPromiseSchedulerTests('ESPromiseSchedulerTests').registerTests(); - new DynamicProtoTests('DynamicProtoTests').registerTests(); - new UtilsTest('UtilsTest').registerTests(); - new ValueSanitizerTests('ValueSanitizerTests').registerTests(); new FileSizeCheckTest('FileSizeCheckTest').registerTests(); - new SpanUtilsTests('SpanUtilsTests').registerTests(); } registerTests(); diff --git a/shared/1ds-core-js/test/UnitTests.html b/shared/1ds-core-js/test/UnitTests.html index 6d0a8d219..2e8591636 100644 --- a/shared/1ds-core-js/test/UnitTests.html +++ b/shared/1ds-core-js/test/UnitTests.html @@ -27,7 +27,7 @@ loadFetchModule(modules, "whatwg-fetch"); loadCommonModules(modules, () => { - var testModule = modules.add("test/Unit/src/core.unittests", "./Unit/dist/core.unittests.js") + var testModule = modules.add("core.unittests", "./Unit/dist/core.unittests.js") testModule.run = function () { console && console.log("Starting tests..."); QUnit.start(); diff --git a/shared/AppInsightsCore/Tests/Unit/src/ai/AppInsightsCoreSize.Tests.ts b/shared/AppInsightsCore/Tests/Unit/src/ai/AppInsightsCoreSize.Tests.ts index 98af1328b..8997e871d 100644 --- a/shared/AppInsightsCore/Tests/Unit/src/ai/AppInsightsCoreSize.Tests.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/ai/AppInsightsCoreSize.Tests.ts @@ -51,10 +51,10 @@ function _checkSize(checkType: string, maxSize: number, size: number, isNightly: } export class AppInsightsCoreSizeCheck extends AITestClass { - private readonly MAX_RAW_SIZE = 124; - private readonly MAX_BUNDLE_SIZE = 124; - private readonly MAX_RAW_DEFLATE_SIZE = 49; - private readonly MAX_BUNDLE_DEFLATE_SIZE = 49; + private readonly MAX_RAW_SIZE = 132; + private readonly MAX_BUNDLE_SIZE = 132; + private readonly MAX_RAW_DEFLATE_SIZE = 53; + private readonly MAX_BUNDLE_DEFLATE_SIZE = 53; private readonly rawFilePath = "../dist/es5/index.min.js"; private readonly prodFilePath = "../browser/es5/applicationinsights-core-js.min.js"; diff --git a/shared/AppInsightsCore/Tests/Unit/src/aiunittests.ts b/shared/AppInsightsCore/Tests/Unit/src/aiunittests.ts index 90ae0a7da..fd2018fea 100644 --- a/shared/AppInsightsCore/Tests/Unit/src/aiunittests.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/aiunittests.ts @@ -32,6 +32,9 @@ import { ThrottleMgrTest } from "./ai/ThrottleMgr.tests"; import { UtilTests } from "./ai/Util.tests"; import { W3CTraceStateModesTests } from "./trace/W3CTraceStateModes.tests"; +// 1DS (OneCollector) extended tests (merged from 1ds-core-js) +import { registerTests as registerExtTests } from "./ext/core.unittests"; + export function runTests() { new GlobalTestHooks().registerTests(); new DynamicTests().registerTests(); @@ -67,4 +70,7 @@ export function runTests() { new ThrottleMgrTest().registerTests(); new UtilTests().registerTests(); new W3CTraceStateModesTests().registerTests(); + + // 1DS (OneCollector) extended tests + registerExtTests(); } diff --git a/shared/1ds-core-js/test/Unit/src/CoreTest.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/CoreTest.ts similarity index 98% rename from shared/1ds-core-js/test/Unit/src/CoreTest.ts rename to shared/AppInsightsCore/Tests/Unit/src/ext/CoreTest.ts index 778940800..b7f12c21c 100644 --- a/shared/1ds-core-js/test/Unit/src/CoreTest.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/CoreTest.ts @@ -1,9 +1,9 @@ import { AITestClass } from "@microsoft/ai-test-framework"; import { - AppInsightsCore, IExtendedConfiguration, IPropertyStorageOverride, + AppInsightsExtCore as AppInsightsCore, IExtendedConfiguration, IPropertyStorageOverride, IExtendedTelemetryItem, EventLatency, FullVersionString -} from '../../../src/Index'; -import { AppInsightsCore as AIInternalCore, IChannelControls, blockDynamicConversion } from '@microsoft/applicationinsights-core-js'; +} from '../../../../src/ext/Index'; +import { AppInsightsCore as AIInternalCore, IChannelControls, blockDynamicConversion } from '../../../../src/index'; import dynamicProto from "@microsoft/dynamicproto-js"; export class CoreTest extends AITestClass { diff --git a/shared/1ds-core-js/test/Unit/src/DynamicProtoTests.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/DynamicProtoTests.ts similarity index 99% rename from shared/1ds-core-js/test/Unit/src/DynamicProtoTests.ts rename to shared/AppInsightsCore/Tests/Unit/src/ext/DynamicProtoTests.ts index 7ed40219e..a46cb7d4c 100644 --- a/shared/1ds-core-js/test/Unit/src/DynamicProtoTests.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/DynamicProtoTests.ts @@ -1,6 +1,5 @@ import { AITestClass } from "@microsoft/ai-test-framework"; import dynamicProto from '@microsoft/dynamicproto-js'; -import * as sinon from 'sinon'; interface IInheritTest { executionOrder:string[]; diff --git a/shared/1ds-core-js/test/Unit/src/ESPromiseSchedulerTests.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/ESPromiseSchedulerTests.ts similarity index 98% rename from shared/1ds-core-js/test/Unit/src/ESPromiseSchedulerTests.ts rename to shared/AppInsightsCore/Tests/Unit/src/ext/ESPromiseSchedulerTests.ts index e5659ce30..3d0db7ab5 100644 --- a/shared/1ds-core-js/test/Unit/src/ESPromiseSchedulerTests.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/ESPromiseSchedulerTests.ts @@ -1,8 +1,7 @@ import { AITestClass } from "@microsoft/ai-test-framework"; -import { DiagnosticLogger } from '@microsoft/applicationinsights-core-js'; +import { DiagnosticLogger } from '../../../../src/index'; import { strIndexOf } from '@nevware21/ts-utils'; import { createAsyncPromise, createNativePromise, createNativeResolvedPromise, createTaskScheduler } from '@nevware21/ts-async'; -import * as sinon from 'sinon'; export function makeRegex(value: string) { if (value && value.length > 0) { diff --git a/shared/AppInsightsCore/Tests/Unit/src/ext/ESPromiseTests.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/ESPromiseTests.ts new file mode 100644 index 000000000..584ef0d49 --- /dev/null +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/ESPromiseTests.ts @@ -0,0 +1,435 @@ +import { AITestClass } from "@microsoft/ai-test-framework"; +import { createAsyncAllPromise, createAsyncPromise, createAsyncRejectedPromise, createAsyncResolvedPromise, IPromise } from '@nevware21/ts-async'; + +export class ESPromiseTests extends AITestClass { + + public testInitialize() { + } + + public registerTests() { + this.testCase({ + name: "Test promise with invalid resolver", + useFakeTimers: true, + test: () => { + try { + let promise = createAsyncPromise(undefined as any); + QUnit.assert.ok(false, "expected an exception to be thrown with undefined"); + } catch(e) { + QUnit.assert.ok(e.message.indexOf("is not a function") != -1, "Expected the exception message to include reason for failure - " + e.message); + } + + try { + let promise = createAsyncPromise(null as any); + QUnit.assert.ok(false, "expected an exception to be thrown with null"); + } catch(e) { + QUnit.assert.ok(e.message.indexOf("is not a function") != -1, "Expected the exception message to include reason for failure - " + e.message); + } + + try { + let promise = createAsyncPromise(42); + QUnit.assert.ok(false, "expected an exception to be thrown with null"); + } catch(e) { + QUnit.assert.ok(e.message.indexOf("is not a function") != -1, "Expected the exception message to include reason for failure - " + e.message); + } + } + }); + + this.testCase({ + name: "Test resolving promise", + useFakeTimers: true, + test: () => { + let promise: IPromise; + let resolvedValue = null; + let rejectedValue = null; + promise = createAsyncPromise((resolve, reject) => { + resolve(42); + }).then((value) => { + resolvedValue = value; + return value; + }, (value) => { + rejectedValue = value; + return value; + }); + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Cause the async promise execution to occur + this.clock.tick(100); + QUnit.assert.equal(resolvedValue, 42, "Expected the promise to be resolved"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected"); + + resolvedValue = null; + rejectedValue = null; + promise = createAsyncPromise((resolve, reject) => { + resolve(42); + }).then((value) => { + resolvedValue = value; + return value; + }).catch((value) => { + rejectedValue = value; + return value; + }) + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Cause the async promise execution to occur + this.clock.tick(100); + QUnit.assert.equal(resolvedValue, 42, "Expected the promise to be resolved"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected"); + } + }); + + this.testCase({ + name: "Test rejecting promise", + useFakeTimers: true, + test: () => { + let promise: IPromise; + let resolvedValue: number | null = null; + let rejectedValue = null; + promise = createAsyncPromise((resolve, reject) => { + reject(-42); + }).then((value) => { + resolvedValue = value; + return value; + }, (value) => { + rejectedValue = value; + return value; + }); + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Cause the async promise execution to occur + this.clock.tick(100); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved"); + QUnit.assert.equal(rejectedValue, -42, "Expected the promise to be rejected"); + + resolvedValue = null; + rejectedValue = null; + promise = createAsyncPromise((resolve, reject) => { + reject(-42); + }).then((value) => { + resolvedValue = value; + return value; + }).catch((value) => { + rejectedValue = value; + return value; + }); + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Cause the async promise execution to occur + this.clock.tick(100); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved"); + QUnit.assert.equal(rejectedValue, -42, "Expected the promise to be rejected"); + } + }); + + this.testCase({ + name: "Test rejecting promise by throwing", + useFakeTimers: true, + test: () => { + let promise: IPromise = null; + let resolvedValue: number | null = null; + let rejectedValue = null; + promise = createAsyncPromise((resolve, reject) => { + throw new Error("Simulated failure!"); + }).then((value) => { + resolvedValue = value; + return value; + }, (value) => { + rejectedValue = value; + return value; + }); + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Cause the async promise execution to occur + this.clock.tick(100); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved"); + QUnit.assert.ok(rejectedValue != null, "Expected the promise to be rejected with a value"); + QUnit.assert.ok(rejectedValue.message.indexOf("Simulated failure!") != -1, "Expected the promise to be rejected with the contained exception"); + + resolvedValue = null; + rejectedValue = null; + promise = createAsyncPromise((resolve, reject) => { + throw new Error("Simulated failure!"); + }).then((value) => { + resolvedValue = value; + return value; + }).catch((value) => { + rejectedValue = value; + return value; + }) + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Cause the async promise execution to occur + this.clock.tick(100); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved"); + QUnit.assert.ok(rejectedValue != null, "Expected the promise to be rejected with a value"); + QUnit.assert.ok(rejectedValue.message.indexOf("Simulated failure!") != -1, "Expected the promise to be rejected with the contained exception"); + } + }); + + this.testCase({ + name: "Test resolving promise with a returned value", + useFakeTimers: true, + test: () => { + let promise: IPromise = null; + let subPromise: IPromise = null; + let resolvedValue: any = null; + promise = createAsyncPromise((resolve, reject) => { + resolve(42); + }).then((value) => { + return 53; + }).then((value) => { + resolvedValue = value; + return value; + }); + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + + // Cause the async promise execution to occur + this.clock.tick(100); + QUnit.assert.equal(resolvedValue, 53, "Expected the promise to be resolved with the returned value not the initial resolved value"); + + resolvedValue = null; + promise = createAsyncPromise((resolve, reject) => { + resolve(42); + }).then((value) => { + // Don't return anything + }).then((value) => { + resolvedValue = value; + }); + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + + // Cause the async promise execution to occur + this.clock.tick(100); + QUnit.assert.equal(resolvedValue, undefined, "Expected the promise to be resolved with undefined from the Promise returned by the initial then"); + } + }); + + this.testCase({ + name: "Test resolving promise with a promise", + useFakeTimers: true, + test: () => { + let promise: IPromise = null; + let preResolved: IPromise = createAsyncResolvedPromise(53); + let preRejected: IPromise = createAsyncRejectedPromise(new Error("Simulated Pre Rejected Promise...")); + // Handle the rejected promise to avoid test failure + preRejected.catch(() => {}); + + let resolvedValue = null; + let rejectedValue = null; + promise = createAsyncPromise((resolve, reject) => { + resolve(42); + }).then((value) => { + return preResolved; + }).then((value) => { + resolvedValue = value; + }, + (value) => { + rejectedValue = value; + }); + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Cause the async promise execution to occur + this.clock.tick(10); + QUnit.assert.equal(resolvedValue, 53, "Expected the promise to be resolved"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + resolvedValue = null; + rejectedValue = null; + promise = createAsyncPromise((resolve, reject) => { + resolve(42); + }).then((value) => { + return preRejected; + }).then((value) => { + resolvedValue = value; + }, + (value) => { + rejectedValue = value; + }); + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Cause the async promise execution to occur + this.clock.tick(10); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to be resolved"); + QUnit.assert.ok(rejectedValue != null, "Expected the promise to be rejected with a value"); + QUnit.assert.ok(rejectedValue.message.indexOf("Simulated Pre Rejected Promise") != -1, "Expected the promise to be rejected with the contained exception"); + + let unresolvedPromise = createAsyncPromise((resolve, reject) => { + setTimeout(() => { + resolve(68); + }, 2000); + }) + resolvedValue = null; + rejectedValue = null; + promise = createAsyncPromise((resolve, reject) => { + resolve(42); + }).then((value) => { + return unresolvedPromise; + }).then((value) => { + resolvedValue = value; + }, + (value) => { + rejectedValue = value; + }); + + // Should not be resolved or rejected yet as this should happen asynchronously + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Cause the async promise execution to occur, but not enough for the unresolved promise + this.clock.tick(100); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // let some more time pass but still not enough for the unresolved promise + this.clock.tick(1000); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Now lets trigger the unresolved promise + this.clock.tick(1000); + QUnit.assert.equal(resolvedValue, 68, "Expected the promise to be resolved"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + } + }); + + this.testCase({ + name: "Testing waiting for multiple promises", + useFakeTimers: true, + test: () => { + let workerPromises: IPromise[] = []; + let workerResolved: boolean[] = []; + let resolvedValue:any = null; + + // Create the promises + for (let lp = 0; lp < 10; lp++) { + workerResolved[lp] = false; + workerPromises[lp] = createAsyncPromise((resolve, reject) => { + setTimeout(() => { + // Wait to resolve this promise + workerResolved[lp] = true; + resolve(lp); + }, (lp + 1) * 1000); + }) + } + + // Create the uber waiting promise + let thePromise: IPromise = createAsyncAllPromise(workerPromises); + thePromise.then((value) => { + resolvedValue = value; + }); + + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + + for (let lp = 0; lp < 10; lp++) { + this.clock.tick(100); + QUnit.assert.equal(workerResolved[lp], false, "Worker not resolved yet"); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet - " + lp); + this.clock.tick(899); + QUnit.assert.equal(workerResolved[lp], false, "Worker not resolved yet"); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet - " + lp); + // This will cause the worker promise to get resolved + this.clock.tick(1); + QUnit.assert.equal(workerResolved[lp], true, "Worker now resolved"); + } + + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + this.clock.tick(50); + QUnit.assert.ok(resolvedValue != null, "Expected the promise to be resolved"); + for (let lp = 0; lp < 10; lp++) + { + QUnit.assert.equal(resolvedValue[lp], lp, "Value mismatch"); + } + } + }); + + this.testCase({ + name: "Testing waiting for multiple promises where one rejects", + useFakeTimers: true, + test: () => { + let workerPromises: IPromise[] = []; + let workerResolved: boolean[] = []; + let resolvedValue:any = null; + let rejectedValue:any = null; + + // Create the promises + for (let lp = 0; lp < 10; lp++) { + workerResolved[lp] = false; + workerPromises[lp] = createAsyncPromise((resolve, reject) => { + setTimeout(() => { + // Wait to resolve this promise + workerResolved[lp] = true; + if (lp == 5) + { + reject(new Error("Simulated Rejection")); + return; + } + + resolve(lp); + }, (lp + 1) * 1000); + }) + } + + // Create the uber waiting promise + let thePromise: IPromise = createAsyncAllPromise(workerPromises); + thePromise.then((value) => { + resolvedValue = value; + }, + (value) => { + rejectedValue = value; + }); + + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + for (let lp = 0; lp < 5; lp++) { + this.clock.tick(100); + QUnit.assert.equal(workerResolved[lp], false, "Worker not resolved yet"); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet - " + lp); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet - " + lp); + this.clock.tick(899); + QUnit.assert.equal(workerResolved[lp], false, "Worker not resolved yet"); + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet - " + lp); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet - " + lp); + // This will cause the worker promise to get resolved + this.clock.tick(1); + QUnit.assert.equal(workerResolved[lp], true, "Worker now resolved"); + } + + QUnit.assert.equal(resolvedValue, null, "Expected the promise to not be resolved yet"); + QUnit.assert.equal(rejectedValue, null, "Expected the promise to not be rejected yet"); + + // Now lets cause the rejected promise to run + this.clock.tick(1500); + QUnit.assert.ok(resolvedValue == null, "Expected the promise to not be resolved"); + QUnit.assert.ok(rejectedValue != null, "Expected the promise to be rejected"); + QUnit.assert.ok(rejectedValue.message.indexOf("Simulated Rejection") != -1, "Main promise should have rejected with the rejected error"); + } + }); + } +} diff --git a/shared/1ds-core-js/test/Unit/src/GlobalTestHooks.Test.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/GlobalTestHooks.Test.ts similarity index 83% rename from shared/1ds-core-js/test/Unit/src/GlobalTestHooks.Test.ts rename to shared/AppInsightsCore/Tests/Unit/src/ext/GlobalTestHooks.Test.ts index b67bf2fe7..1e31a24c8 100644 --- a/shared/1ds-core-js/test/Unit/src/GlobalTestHooks.Test.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/GlobalTestHooks.Test.ts @@ -1,5 +1,5 @@ import { Assert } from "@microsoft/ai-test-framework"; -import { _testHookMaxUnloadHooksCb } from "@microsoft/applicationinsights-core-js"; +import { _testHookMaxUnloadHooksCb } from "../../../../src/index"; import { dumpObj } from "@nevware21/ts-utils"; export class GlobalTestHooks { diff --git a/shared/1ds-core-js/test/Unit/src/SpanUtilsTests.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/SpanUtilsTests.ts similarity index 99% rename from shared/1ds-core-js/test/Unit/src/SpanUtilsTests.ts rename to shared/AppInsightsCore/Tests/Unit/src/ext/SpanUtilsTests.ts index 18b2a71e1..ed7a5e280 100644 --- a/shared/1ds-core-js/test/Unit/src/SpanUtilsTests.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/SpanUtilsTests.ts @@ -37,9 +37,9 @@ import { IOTelSpanCtx, IOTelApi, IOTelConfig -} from "@microsoft/applicationinsights-core-js"; -import { createExtendedTelemetryItemFromSpan, IMsWebSpanTelemetry } from "../../../src/extSpanUtils"; -import { IExtendedTelemetryItem } from "../../../src/DataModels"; +} from "../../../../src/index"; +import { createExtendedTelemetryItemFromSpan, IMsWebSpanTelemetry } from "../../../../src/ext/extSpanUtils"; +import { IExtendedTelemetryItem } from "../../../../src/ext/DataModels"; export class SpanUtilsTests extends AITestClass { private _core!: AppInsightsCore; diff --git a/shared/1ds-core-js/test/Unit/src/TestHelper.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/TestHelper.ts similarity index 97% rename from shared/1ds-core-js/test/Unit/src/TestHelper.ts rename to shared/AppInsightsCore/Tests/Unit/src/ext/TestHelper.ts index 52d142bf8..179d03886 100644 --- a/shared/1ds-core-js/test/Unit/src/TestHelper.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/TestHelper.ts @@ -1,4 +1,4 @@ -import { IExtendedTelemetryItem } from '../../../src/DataModels'; +import { IExtendedTelemetryItem } from '../../../../src/ext/DataModels'; export class TestHelper { private static _idCount = 0; diff --git a/shared/1ds-core-js/test/Unit/src/UtilsTest.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/UtilsTest.ts similarity index 99% rename from shared/1ds-core-js/test/Unit/src/UtilsTest.ts rename to shared/AppInsightsCore/Tests/Unit/src/ext/UtilsTest.ts index d7bafad71..b4346e25a 100644 --- a/shared/1ds-core-js/test/Unit/src/UtilsTest.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/UtilsTest.ts @@ -1,7 +1,7 @@ import { AITestClass } from "@microsoft/ai-test-framework"; -import { uaDisallowsSameSiteNone } from "@microsoft/applicationinsights-core-js"; -import { EventPropertyType, ValueKind } from '../../../src/Enums'; -import * as Utils from '../../../src/Utils'; +import { uaDisallowsSameSiteNone } from "../../../../src/index"; +import { EventPropertyType, ValueKind } from '../../../../src/ext/Enums'; +import * as Utils from '../../../../src/ext/Utils'; export class UtilsTest extends AITestClass { public registerTests() { diff --git a/shared/1ds-core-js/test/Unit/src/ValueSanitizerTests.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/ValueSanitizerTests.ts similarity index 98% rename from shared/1ds-core-js/test/Unit/src/ValueSanitizerTests.ts rename to shared/AppInsightsCore/Tests/Unit/src/ext/ValueSanitizerTests.ts index ed963e9df..3689036d9 100644 --- a/shared/1ds-core-js/test/Unit/src/ValueSanitizerTests.ts +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/ValueSanitizerTests.ts @@ -1,10 +1,10 @@ import { AITestClass } from "@microsoft/ai-test-framework"; import { TestHelper } from './TestHelper'; -import { IExtendedTelemetryItem, IValueSanitizer } from '../../../src/DataModels'; -import { EventPersistence, EventPropertyType, ValueKind } from '../../../src/Enums'; -import { sanitizeProperty, getCommonSchemaMetaData } from '../../../src/Utils'; -import { arrForEach, isNullOrUndefined, objKeys } from '@microsoft/applicationinsights-core-js'; -import { ValueSanitizer } from '../../../src/ValueSanitizer'; +import { IExtendedTelemetryItem, IValueSanitizer } from '../../../../src/ext/DataModels'; +import { EventPersistence, EventPropertyType, ValueKind } from '../../../../src/ext/Enums'; +import { sanitizeProperty, getCommonSchemaMetaData } from '../../../../src/ext/Utils'; +import { arrForEach, isNullOrUndefined, objKeys } from '../../../../src/index'; +import { ValueSanitizer } from '../../../../src/ext/ValueSanitizer'; export class ValueSanitizerTests extends AITestClass { diff --git a/shared/AppInsightsCore/Tests/Unit/src/ext/core.unittests.ts b/shared/AppInsightsCore/Tests/Unit/src/ext/core.unittests.ts new file mode 100644 index 000000000..bc6922150 --- /dev/null +++ b/shared/AppInsightsCore/Tests/Unit/src/ext/core.unittests.ts @@ -0,0 +1,19 @@ +import { CoreTest } from './CoreTest'; +import { ESPromiseTests } from './ESPromiseTests'; +import { ESPromiseSchedulerTests } from './ESPromiseSchedulerTests'; +import { DynamicProtoTests } from './DynamicProtoTests'; +import { UtilsTest } from './UtilsTest'; +import { ValueSanitizerTests } from './ValueSanitizerTests'; +import { SpanUtilsTests } from './SpanUtilsTests'; + + + +export function registerTests() { + new CoreTest('CoreTest').registerTests(); + new ESPromiseTests('ESPromiseTests').registerTests(); + new ESPromiseSchedulerTests('ESPromiseSchedulerTests').registerTests(); + new DynamicProtoTests('DynamicProtoTests').registerTests(); + new UtilsTest('UtilsTest').registerTests(); + new ValueSanitizerTests('ValueSanitizerTests').registerTests(); + new SpanUtilsTests('SpanUtilsTests').registerTests(); +} diff --git a/shared/AppInsightsCore/Tests/Unit/src/oneds/ESPromiseSchedulerTests.ts b/shared/AppInsightsCore/Tests/Unit/src/oneds/ESPromiseSchedulerTests.ts new file mode 100644 index 000000000..3d0db7ab5 --- /dev/null +++ b/shared/AppInsightsCore/Tests/Unit/src/oneds/ESPromiseSchedulerTests.ts @@ -0,0 +1,200 @@ +import { AITestClass } from "@microsoft/ai-test-framework"; +import { DiagnosticLogger } from '../../../../src/index'; +import { strIndexOf } from '@nevware21/ts-utils'; +import { createAsyncPromise, createNativePromise, createNativeResolvedPromise, createTaskScheduler } from '@nevware21/ts-async'; + +export function makeRegex(value: string) { + if (value && value.length > 0) { + // Escape any slashes first! + value = value.replace(/\\/g, "\\\\"); + // eslint-disable-next-line security/detect-non-literal-regexp + value = value.replace(/([\+\?\|\{\}\[\]\(\)\^\$\#\.\=\!\:\/])/g, "\\$1"); + value = value.replace(/\*/g, ".*"); + return new RegExp("(" + value + ")"); + } + + return null; +} +export class ESPromiseSchedulerTests extends AITestClass { + private _traceLogger: DiagnosticLogger; + + public testInitialize() { + this._traceLogger = new DiagnosticLogger({ loggingLevelConsole: 1 }); + } + + public registerTests() { + this.testCase({ + name: "Test that the scheduler waits for the events correctly", + test: () => { + let scheduler = createTaskScheduler(createAsyncPromise, "test1"); + + let order:string[] = []; + let expectedOrder:string[] = []; + expectedOrder.push("sch1"); + expectedOrder.push("sch2"); + expectedOrder.push("sch3"); + expectedOrder.push("sch4"); + expectedOrder.push("wait"); + expectedOrder.push("test1"); + expectedOrder.push("finished1"); + expectedOrder.push("test2"); + expectedOrder.push("sch2.1"); + expectedOrder.push("wait2.1"); + expectedOrder.push("sch2.2"); + expectedOrder.push("finished2.1"); + expectedOrder.push("finished2"); + expectedOrder.push("test3"); + expectedOrder.push("sch3.1"); + expectedOrder.push("finished3"); + expectedOrder.push("test4"); + expectedOrder.push("sch4.1"); + expectedOrder.push("reject4-Timeout: Task [test1.0.3-(t4)] - Running: * ms"); + expectedOrder.push("test2.2"); + expectedOrder.push("sch2.3"); + expectedOrder.push("reject2.2-Timeout: Task [test1.0.4-(2.2)] - Running: * ms"); + expectedOrder.push("test3.1"); + expectedOrder.push("finished3.1"); + expectedOrder.push("test4.1"); + expectedOrder.push("wait4.2"); + expectedOrder.push("sch4.3"); + expectedOrder.push("finished4.2"); + expectedOrder.push("finished4.1"); + expectedOrder.push("wait2.3"); + expectedOrder.push("test2.3"); + expectedOrder.push("finished2.3"); + expectedOrder.push("test4.3"); + expectedOrder.push("finished4.3"); + + let testWait = createNativePromise((testComplete) => { + order.push("sch1"); + scheduler.queue(() => { + return createNativePromise((test1Complete) => { + setTimeout(() => { + order.push("test1"); + test1Complete("t1.complete"); + }, 20); + }); + }, "t1").then(() => { + order.push("finished1"); + }); + order.push("sch2"); + scheduler.queue(() => { + order.push("test2"); + order.push("sch2.1"); + return createNativePromise((t21Resolve) => { + order.push("wait2.1"); + setTimeout(() => { + order.push("sch2.2"); + scheduler.queue(() => { + order.push("test2.2"); + order.push("sch2.3"); + return scheduler.queue(() => { + return createNativePromise((t23Resolve) => { + order.push("wait2.3"); + setTimeout(() => { + order.push("test2.3"); + t23Resolve("2.3.complete"); + }, 1) + }); + }, "2.3").then(() => { + order.push("finished2.3"); + }, (reason) => { + order.push("reject2.3-" + reason); + }); + }, "2.2", 10).then(() => { + order.push("finished2.2"); + }, (reason) => { + order.push("reject2.2-" + reason); + }); + t21Resolve(); + }, 1); + }).then(() => { + order.push("finished2.1"); + }, (reason) => { + order.push("reject2.1-" + reason); + }); + }, "t2").then(() => { + order.push("finished2"); + }, (reason) => { + order.push("reject2-" + reason); + }); + order.push("sch3"); + scheduler.queue(() => { + order.push("test3"); + order.push("sch3.1"); + scheduler.queue(() => { + order.push("test3.1"); + return createNativeResolvedPromise("t3.1.complete"); + }, "3.1").then(() => { + order.push("finished3.1"); + }, (reason) => { + order.push("reject3.1-" + reason); + }); + return createNativeResolvedPromise("t3.complete"); + }, "t3", 10).then(() => { + order.push("finished3"); + }, (reason) => { + order.push("reject3-" + reason); + }); + + order.push("sch4"); + scheduler.queue(() => { + order.push("test4"); + order.push("sch4.1"); + // Note because this is returning the scheduling result (promise) it will actually run immediately (this avoids avoid deadlocking) as the test2 event is not complete yet + // which means there is actually no "waiting" scheduled event + return scheduler.queue(() => { + order.push("test4.1"); + return createNativePromise((t42Resolve) => { + order.push("wait4.2"); + setTimeout(() => { + order.push("sch4.3"); + scheduler.queue(() => { + order.push("test4.3"); + return createNativeResolvedPromise("resolved"); + }, "4.3").then(() => { + order.push("finished4.3"); + testComplete("t4.3.complete"); + }, (reason) => { + order.push("reject4.3-" + reason); + testComplete("t4.3.complete"); + }); + // Just resolve this one + t42Resolve(); + }, 1) + }).then(() => { + order.push("finished4.2") + }, (reason) => { + order.push("reject4.2-" + reason); + }); + }, "t4.1").then(() => { + order.push("finished4.1"); + }, (reason) => { + order.push("reject4.1-" + reason); + }); + }, "t4", 10).then(() => { + order.push("finished4"); + }, (reason) => { + order.push("reject4-" + reason); + }); + }); + + order.push("wait"); + return testWait.then(() => { + QUnit.assert.equal(order.length, expectedOrder.length, "Expecting all scheduled event have completed"); + for (let lp = 0; lp < expectedOrder.length; lp++) { + if (order.length > lp) { + if (strIndexOf(expectedOrder[lp], "*")) { + QUnit.assert.ok(makeRegex(expectedOrder[lp])!.test(order[lp]), "Checking - " + order[lp]); + } else { + QUnit.assert.equal(order[lp], expectedOrder[lp], expectedOrder[lp]); + } + } else { + QUnit.assert.ok(false, "Missing expected result - " + expectedOrder[lp]); + } + } + }) as PromiseLike; + } + }); + } +} diff --git a/shared/1ds-core-js/src/AppInsightsCore.ts b/shared/AppInsightsCore/src/ext/AppInsightsExtCore.ts similarity index 84% rename from shared/1ds-core-js/src/AppInsightsCore.ts rename to shared/AppInsightsCore/src/ext/AppInsightsExtCore.ts index 76dadcb27..2bb946abf 100644 --- a/shared/1ds-core-js/src/AppInsightsCore.ts +++ b/shared/AppInsightsCore/src/ext/AppInsightsExtCore.ts @@ -4,11 +4,17 @@ * @copyright Microsoft 2018 */ import dynamicProto from "@microsoft/dynamicproto-js"; -import { - AppInsightsCore as InternalCore, IConfigDefaults, IDiagnosticLogger, INotificationManager, IPlugin, ITelemetryItem, _throwInternal, - createDynamicConfig, doPerf, dumpObj, eLoggingSeverity, throwError -} from "@microsoft/applicationinsights-core-js"; -import { ITimerHandler, objDeepFreeze } from "@nevware21/ts-utils"; +import { ITimerHandler, dumpObj, objDeepFreeze, throwError } from "@nevware21/ts-utils"; +import { createDynamicConfig } from "../config/DynamicConfig"; +import { AppInsightsCore as InternalCore } from "../core/AppInsightsCore"; +import { doPerf } from "../core/PerfManager"; +import { _throwInternal } from "../diagnostics/DiagnosticLogger"; +import { eLoggingSeverity } from "../enums/ai/LoggingEnums"; +import { IDiagnosticLogger } from "../interfaces/ai/IDiagnosticLogger"; +import { INotificationManager } from "../interfaces/ai/INotificationManager"; +import { ITelemetryItem } from "../interfaces/ai/ITelemetryItem"; +import { IPlugin } from "../interfaces/ai/ITelemetryPlugin"; +import { IConfigDefaults } from "../interfaces/config/IConfigDefaults"; import { IExtendedConfiguration, IExtendedTelemetryItem, IPropertyStorageOverride } from "./DataModels"; import { EventLatencyValue, _eExtendedInternalMessageId } from "./Enums"; import { STR_DEFAULT_ENDPOINT_URL, STR_EMPTY, STR_VERSION } from "./InternalConstants"; @@ -38,11 +44,11 @@ function _chkPropOverride(propertyStorageOverride: IPropertyStorageOverride) { * @group Classes * @group Entrypoint */ -export class AppInsightsCore extends InternalCore { +export class AppInsightsExtCore extends InternalCore { constructor() { super(); - dynamicProto(AppInsightsCore, this, (_self, _base) => { + dynamicProto(AppInsightsExtCore, this, (_self, _base) => { _self.initialize = (config: C, extensions: IPlugin[], logger?: IDiagnosticLogger, notificationManager?: INotificationManager) => { doPerf(_self, () => "AppInsightsCore.initialize", () => { diff --git a/shared/1ds-core-js/src/BaseCore.ts b/shared/AppInsightsCore/src/ext/BaseCore.ts similarity index 82% rename from shared/1ds-core-js/src/BaseCore.ts rename to shared/AppInsightsCore/src/ext/BaseCore.ts index ffb09923d..98e95bbcc 100644 --- a/shared/1ds-core-js/src/BaseCore.ts +++ b/shared/AppInsightsCore/src/ext/BaseCore.ts @@ -7,11 +7,16 @@ * @copyright Microsoft 2018 */ import dynamicProto from "@microsoft/dynamicproto-js"; -import { - AppInsightsCore as InternalCore, IConfigDefaults, IDiagnosticLogger, INotificationManager, IPlugin, ITelemetryItem, _throwInternal, - createDynamicConfig, dumpObj, eLoggingSeverity -} from "@microsoft/applicationinsights-core-js"; -import { ITimerHandler, objDeepFreeze } from "@nevware21/ts-utils"; +import { ITimerHandler, dumpObj, objDeepFreeze } from "@nevware21/ts-utils"; +import { createDynamicConfig } from "../config/DynamicConfig"; +import { AppInsightsCore as InternalCore } from "../core/AppInsightsCore"; +import { _throwInternal } from "../diagnostics/DiagnosticLogger"; +import { eLoggingSeverity } from "../enums/ai/LoggingEnums"; +import { IDiagnosticLogger } from "../interfaces/ai/IDiagnosticLogger"; +import { INotificationManager } from "../interfaces/ai/INotificationManager"; +import { ITelemetryItem } from "../interfaces/ai/ITelemetryItem"; +import { IPlugin } from "../interfaces/ai/ITelemetryPlugin"; +import { IConfigDefaults } from "../interfaces/config/IConfigDefaults"; import { IExtendedConfiguration, IExtendedTelemetryItem } from "./DataModels"; import { _eExtendedInternalMessageId } from "./Enums"; import { STR_DEFAULT_ENDPOINT_URL } from "./InternalConstants"; diff --git a/shared/1ds-core-js/src/DataModels.ts b/shared/AppInsightsCore/src/ext/DataModels.ts similarity index 98% rename from shared/1ds-core-js/src/DataModels.ts rename to shared/AppInsightsCore/src/ext/DataModels.ts index 55a0dfafa..ad5c0cc0d 100644 --- a/shared/1ds-core-js/src/DataModels.ts +++ b/shared/AppInsightsCore/src/ext/DataModels.ts @@ -4,7 +4,8 @@ * @copyright Microsoft 2018 * File containing the interfaces for Web JS SDK. */ -import { IConfiguration, ITelemetryItem } from "@microsoft/applicationinsights-core-js"; +import { IConfiguration } from "../interfaces/ai/IConfiguration"; +import { ITelemetryItem } from "../interfaces/ai/ITelemetryItem"; import { EventLatencyValue, EventPersistenceValue, EventSendType, FieldValueSanitizerType } from "./Enums"; /** diff --git a/shared/1ds-core-js/src/Enums.ts b/shared/AppInsightsCore/src/ext/Enums.ts similarity index 98% rename from shared/1ds-core-js/src/Enums.ts rename to shared/AppInsightsCore/src/ext/Enums.ts index 559d0530a..ca9e24604 100644 --- a/shared/1ds-core-js/src/Enums.ts +++ b/shared/AppInsightsCore/src/ext/Enums.ts @@ -5,7 +5,8 @@ * File containing the enums as constants. */ -import { _eInternalMessageId, createEnumStyle } from "@microsoft/applicationinsights-core-js"; +import { createEnumStyle } from "../enums/EnumHelperFuncs"; +import { _eInternalMessageId } from "../enums/ai/LoggingEnums"; /** * The eValueKind contains a set of values that specify value kind of the property. diff --git a/shared/AppInsightsCore/src/ext/Index.ts b/shared/AppInsightsCore/src/ext/Index.ts new file mode 100644 index 000000000..dfe0c3a2c --- /dev/null +++ b/shared/AppInsightsCore/src/ext/Index.ts @@ -0,0 +1,37 @@ +/** +* Index.ts - 1DS-specific exports (now part of AppInsightsCore package) +*/ +import { AppInsightsExtCore } from "./AppInsightsExtCore"; +import { + FieldValueSanitizerFunc, FieldValueSanitizerTypes, IEventProperty, IEventTiming, IExtendedConfiguration, IExtendedTelemetryItem, + IFieldSanitizerDetails, IFieldValueSanitizerProvider, IPropertyStorageOverride, IValueSanitizer +} from "./DataModels"; +import { + EventLatency, EventLatencyValue, EventPersistence, EventPersistenceValue, EventPropertyType, EventSendType, FieldValueSanitizerType, + GuidStyle, TraceLevel, ValueKind, _ExtendedInternalMessageId, _eExtendedInternalMessageId, eEventPropertyType, eTraceLevel, eValueKind +} from "./Enums"; +import { ValueSanitizer } from "./ValueSanitizer"; + +export { + ValueKind, eValueKind, IExtendedConfiguration, IPropertyStorageOverride, + EventLatency, EventPersistence, TraceLevel, eTraceLevel, IEventProperty, IExtendedTelemetryItem, + AppInsightsExtCore, _ExtendedInternalMessageId, _eExtendedInternalMessageId, + EventPropertyType, eEventPropertyType, IEventTiming, GuidStyle, + FieldValueSanitizerFunc, FieldValueSanitizerType, FieldValueSanitizerTypes, + IFieldSanitizerDetails, IFieldValueSanitizerProvider, IValueSanitizer, ValueSanitizer, + EventLatencyValue, EventPersistenceValue, EventSendType +}; + +export { + isValueAssigned, isLatency, isUint8ArrayAvailable, getTenantId, sanitizeProperty, + Version, FullVersionString, getCommonSchemaMetaData, getCookieValue, + extend, createGuid, isDocumentObjectAvailable, isWindowObjectAvailable, + setProcessTelemetryTimings, getTime, + isArrayValid, isValueKind, getFieldValueType, + isChromium, openXhr, isGreaterThanZero +} from "./Utils"; + +// Only export BaseCore if you want it in the public API (was NOT exported in original 1ds-core-js) +// export { BaseCore } from "./BaseCore"; + +export { createExtendedTelemetryItemFromSpan } from "./extSpanUtils"; diff --git a/shared/1ds-core-js/src/InternalConstants.ts b/shared/AppInsightsCore/src/ext/InternalConstants.ts similarity index 100% rename from shared/1ds-core-js/src/InternalConstants.ts rename to shared/AppInsightsCore/src/ext/InternalConstants.ts diff --git a/shared/1ds-core-js/src/Utils.ts b/shared/AppInsightsCore/src/ext/Utils.ts similarity index 96% rename from shared/1ds-core-js/src/Utils.ts rename to shared/AppInsightsCore/src/ext/Utils.ts index 4ce5bb42f..3f77b292f 100644 --- a/shared/1ds-core-js/src/Utils.ts +++ b/shared/AppInsightsCore/src/ext/Utils.ts @@ -5,11 +5,13 @@ * File containing utility functions. */ import { - ICookieMgr, ITelemetryItem, arrForEach, getGlobalInst, getNavigator, hasDocument, hasWindow, isArray, isBoolean, isNullOrUndefined, - isNumber, isObject, isReactNative, isString, isUndefined, newGuid, objForEachKey, perfNow -} from "@microsoft/applicationinsights-core-js"; -import { ObjProto, strShimObject } from "@microsoft/applicationinsights-shims"; -import { strIndexOf, strLeft } from "@nevware21/ts-utils"; + arrForEach, getInst as getGlobalInst, getNavigator, hasDocument, hasWindow, isArray, isBoolean, isNullOrUndefined, isNumber, isObject, + isString, isUndefined, objForEachKey, perfNow, strIndexOf, strLeft +} from "@nevware21/ts-utils"; +import { ICookieMgr } from "../interfaces/ai/ICookieMgr"; +import { ITelemetryItem } from "../interfaces/ai/ITelemetryItem"; +import { newGuid } from "../utils/CoreUtils"; +import { isReactNative } from "../utils/EnvUtils"; import { IEventProperty, IExtendedTelemetryItem } from "./DataModels"; import { EventLatency, EventLatencyValue, FieldValueSanitizerType, GuidStyle, eEventPropertyType, eValueKind } from "./Enums"; import { STR_EMPTY } from "./InternalConstants"; @@ -17,7 +19,7 @@ import { STR_EMPTY } from "./InternalConstants"; export const Version = "#version#"; export const FullVersionString = "1DS-Web-JS-" + Version; -const ObjHasOwnProperty = ObjProto.hasOwnProperty; +const ObjHasOwnProperty = Object.prototype.hasOwnProperty; // Defining here so we don't need to take (import) the ApplicationInsights Common module const strDisabledPropertyName: string = "Microsoft_ApplicationInsights_BypassAjaxInstrumentation"; @@ -343,7 +345,7 @@ export function getFieldValueType(value: any): FieldValueSanitizerType { theType = FieldValueSanitizerType.Number; } else if (objType === "boolean") { theType = FieldValueSanitizerType.Boolean; - } else if (objType === strShimObject) { + } else if (objType === "object") { theType = FieldValueSanitizerType.Object; if (isArray(value)) { theType = FieldValueSanitizerType.Array; diff --git a/shared/1ds-core-js/src/ValueSanitizer.ts b/shared/AppInsightsCore/src/ext/ValueSanitizer.ts similarity index 98% rename from shared/1ds-core-js/src/ValueSanitizer.ts rename to shared/AppInsightsCore/src/ext/ValueSanitizer.ts index a7d3af4c2..a24c920fd 100644 --- a/shared/1ds-core-js/src/ValueSanitizer.ts +++ b/shared/AppInsightsCore/src/ext/ValueSanitizer.ts @@ -1,5 +1,4 @@ -import { isNullOrUndefined, isString, objForEachKey } from "@microsoft/applicationinsights-core-js"; -import { arrForEach, arrIncludes, arrIndexOf, getLength } from "@nevware21/ts-utils"; +import { arrForEach, arrIncludes, arrIndexOf, getLength, isNullOrUndefined, isString, objForEachKey } from "@nevware21/ts-utils"; import { FieldValueSanitizerFunc, FieldValueSanitizerTypes, IEventProperty, IFieldSanitizerDetails, IFieldValueSanitizerProvider, IValueSanitizer } from "./DataModels"; diff --git a/shared/1ds-core-js/src/extSpanUtils.ts b/shared/AppInsightsCore/src/ext/extSpanUtils.ts similarity index 91% rename from shared/1ds-core-js/src/extSpanUtils.ts rename to shared/AppInsightsCore/src/ext/extSpanUtils.ts index edca811c9..96237fa80 100644 --- a/shared/1ds-core-js/src/extSpanUtils.ts +++ b/shared/AppInsightsCore/src/ext/extSpanUtils.ts @@ -1,25 +1,37 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +import { + ILazyValue, arrIncludes, asString, getLazy, getNavigator, isBoolean, isNullOrUndefined, isNumber, isString, strLower, strStartsWith, + throwError +} from "@nevware21/ts-utils"; +import { eOTelSpanKind } from "../enums/otel/OTelSpanKind"; +import { eOTelSpanStatusCode } from "../enums/otel/OTelSpanStatus"; +import { IAppInsightsCore } from "../interfaces/ai/IAppInsightsCore"; +import { IConfiguration } from "../interfaces/ai/IConfiguration"; +import { OTelAttributeValue } from "../interfaces/otel/IOTelAttributes"; +import { IAttributeContainer } from "../interfaces/otel/attribute/IAttributeContainer"; +import { IReadableSpan } from "../interfaces/otel/trace/IReadableSpan"; +import { + getHttpClientIp, getHttpHost, getHttpMethod, getHttpScheme, getHttpStatusCode, getHttpUrl, getSyntheticType, getUserAgent +} from "../internal/commonUtils"; +import { hrTimeToMilliseconds } from "../internal/timeHelpers"; import { ATTR_CLIENT_ADDRESS, ATTR_CLIENT_PORT, ATTR_ENDUSER_ID, ATTR_ENDUSER_PSEUDO_ID, ATTR_ERROR_TYPE, ATTR_EXCEPTION_MESSAGE, ATTR_EXCEPTION_STACKTRACE, ATTR_EXCEPTION_TYPE, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_NETWORK_LOCAL_ADDRESS, ATTR_NETWORK_LOCAL_PORT, ATTR_NETWORK_PEER_ADDRESS, ATTR_NETWORK_PEER_PORT, ATTR_NETWORK_PROTOCOL_NAME, ATTR_NETWORK_PROTOCOL_VERSION, ATTR_NETWORK_TRANSPORT, ATTR_SERVER_ADDRESS, ATTR_SERVER_PORT, ATTR_URL_FULL, ATTR_URL_PATH, ATTR_URL_QUERY, ATTR_URL_SCHEME, - ATTR_USER_AGENT_ORIGINAL, EXP_ATTR_ENDUSER_ID, EXP_ATTR_ENDUSER_PSEUDO_ID, EXP_ATTR_SYNTHETIC_TYPE, IAppInsightsCore, - IAttributeContainer, IConfiguration, IReadableSpan, OTelAttributeValue, SEMATTRS_DB_NAME, SEMATTRS_DB_OPERATION, SEMATTRS_DB_STATEMENT, - SEMATTRS_DB_SYSTEM, SEMATTRS_ENDUSER_ID, SEMATTRS_EXCEPTION_MESSAGE, SEMATTRS_EXCEPTION_STACKTRACE, SEMATTRS_EXCEPTION_TYPE, - SEMATTRS_HTTP_CLIENT_IP, SEMATTRS_HTTP_FLAVOR, SEMATTRS_HTTP_HOST, SEMATTRS_HTTP_METHOD, SEMATTRS_HTTP_ROUTE, SEMATTRS_HTTP_SCHEME, - SEMATTRS_HTTP_STATUS_CODE, SEMATTRS_HTTP_TARGET, SEMATTRS_HTTP_URL, SEMATTRS_HTTP_USER_AGENT, SEMATTRS_NET_HOST_IP, - SEMATTRS_NET_HOST_NAME, SEMATTRS_NET_HOST_PORT, SEMATTRS_NET_PEER_IP, SEMATTRS_NET_PEER_NAME, SEMATTRS_NET_PEER_PORT, - SEMATTRS_NET_TRANSPORT, SEMATTRS_PEER_SERVICE, SEMATTRS_RPC_GRPC_STATUS_CODE, SEMATTRS_RPC_SYSTEM, createAttributeContainer, - eOTelSpanKind, eOTelSpanStatusCode, fieldRedaction, getHttpClientIp, getHttpHost, getHttpMethod, getHttpScheme, getHttpStatusCode, - getHttpUrl, getSyntheticType, getUserAgent, hrTimeToMilliseconds, toISOString -} from "@microsoft/applicationinsights-core-js"; -import { - ILazyValue, arrIncludes, asString, getLazy, getNavigator, isBoolean, isNullOrUndefined, isNumber, isString, strLower, strStartsWith, - throwError -} from "@nevware21/ts-utils"; + ATTR_USER_AGENT_ORIGINAL, EXP_ATTR_ENDUSER_ID, EXP_ATTR_ENDUSER_PSEUDO_ID, EXP_ATTR_SYNTHETIC_TYPE, SEMATTRS_DB_NAME, + SEMATTRS_DB_OPERATION, SEMATTRS_DB_STATEMENT, SEMATTRS_DB_SYSTEM, SEMATTRS_ENDUSER_ID, SEMATTRS_EXCEPTION_MESSAGE, + SEMATTRS_EXCEPTION_STACKTRACE, SEMATTRS_EXCEPTION_TYPE, SEMATTRS_HTTP_CLIENT_IP, SEMATTRS_HTTP_FLAVOR, SEMATTRS_HTTP_HOST, + SEMATTRS_HTTP_METHOD, SEMATTRS_HTTP_ROUTE, SEMATTRS_HTTP_SCHEME, SEMATTRS_HTTP_STATUS_CODE, SEMATTRS_HTTP_TARGET, SEMATTRS_HTTP_URL, + SEMATTRS_HTTP_USER_AGENT, SEMATTRS_NET_HOST_IP, SEMATTRS_NET_HOST_NAME, SEMATTRS_NET_HOST_PORT, SEMATTRS_NET_PEER_IP, + SEMATTRS_NET_PEER_NAME, SEMATTRS_NET_PEER_PORT, SEMATTRS_NET_TRANSPORT, SEMATTRS_PEER_SERVICE, SEMATTRS_RPC_GRPC_STATUS_CODE, + SEMATTRS_RPC_SYSTEM +} from "../otel/attribute/SemanticConventions"; +import { createAttributeContainer } from "../otel/attribute/attributeContainer"; +import { fieldRedaction } from "../utils/EnvUtils"; +import { toISOString } from "../utils/HelperFuncs"; import { IExtendedTelemetryItem } from "./DataModels"; import { STR_NOT_SPECIFIED } from "./InternalConstants"; diff --git a/shared/AppInsightsCore/src/index.ts b/shared/AppInsightsCore/src/index.ts index cb5abe5d9..c40e690b1 100644 --- a/shared/AppInsightsCore/src/index.ts +++ b/shared/AppInsightsCore/src/index.ts @@ -368,3 +368,44 @@ export { export const PropertiesPluginIdentifier = "AppInsightsPropertiesPlugin"; export const BreezeChannelIdentifier = "AppInsightsChannelPlugin"; export const AnalyticsPluginIdentifier = "ApplicationInsightsAnalytics"; + +// ========================================================================== +// 1DS (OneCollector) exports - merged from @microsoft/1ds-core-js +// ========================================================================== + +// 1DS Enums +export { + ValueKind, eValueKind, + EventLatency, EventLatencyValue, + EventPersistenceValue, + EventPropertyType, eEventPropertyType, + EventSendType, + TraceLevel, eTraceLevel, + _ExtendedInternalMessageId, _eExtendedInternalMessageId, + GuidStyle, FieldValueSanitizerType +} from "./ext/Enums"; + +// 1DS Data Models (interfaces) +export { + IExtendedConfiguration, IPropertyStorageOverride, + IEventProperty, IExtendedTelemetryItem, IEventTiming, + FieldValueSanitizerFunc, FieldValueSanitizerTypes, + IFieldSanitizerDetails, IFieldValueSanitizerProvider, IValueSanitizer +} from "./ext/DataModels"; + +// 1DS Classes +export { AppInsightsExtCore } from "./ext/AppInsightsExtCore"; +export { ValueSanitizer } from "./ext/ValueSanitizer"; + +// 1DS Utils +export { + isValueAssigned, isLatency, isUint8ArrayAvailable, getTenantId, sanitizeProperty, + Version, FullVersionString, getCommonSchemaMetaData, getCookieValue, + extend, createGuid, isDocumentObjectAvailable, isWindowObjectAvailable, + setProcessTelemetryTimings, getTime, + isArrayValid, isValueKind, getFieldValueType, + isChromium, isGreaterThanZero +} from "./ext/Utils"; + +// 1DS Span Utils +export { createExtendedTelemetryItemFromSpan } from "./ext/extSpanUtils";