diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 551701c17c27..2dfefcf747bb 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -11694,7 +11694,7 @@ packages: dev: false file:projects/agrifood-farming.tgz: - resolution: {integrity: sha512-Cs4B7tvjJLwjqDPEmgdASnNycBv7EJIuRlaHy2Id8SHWc+0Ho6hR/dC0o3lg3zWDEGHH6p3QW36hjewnaEUOfA==, tarball: file:projects/agrifood-farming.tgz} + resolution: {integrity: sha512-s8R4IIpQodHE0SQODEsc19cpaCtryR+cpzTKBPPxjgvHNyZl8IG1yykOLe0D/+3fICaApfqQtKVGnc5xqSQEpA==, tarball: file:projects/agrifood-farming.tgz} name: '@rush-temp/agrifood-farming' version: 0.0.0 dependencies: @@ -11742,7 +11742,7 @@ packages: dev: false file:projects/ai-anomaly-detector.tgz: - resolution: {integrity: sha512-mQK3vNGXOc176SnCJRtU/sF6drJtW64xmTWIiuWD8jjrYrgpn4dZnNQy2MT0ZPCGSyHk5DO3+lOVkbunjt0Mog==, tarball: file:projects/ai-anomaly-detector.tgz} + resolution: {integrity: sha512-rxbhqSj8anfiAZRHiD5NYjMGV078Rf2VHXiWNQopWwGFDBa87HWr10NnxRSdRwHXcidz42KSZNOL6amh1PsgvA==, tarball: file:projects/ai-anomaly-detector.tgz} name: '@rush-temp/ai-anomaly-detector' version: 0.0.0 dependencies: @@ -11790,7 +11790,7 @@ packages: dev: false file:projects/ai-content-safety.tgz: - resolution: {integrity: sha512-XeLIGmGEvhQIAis3L87dxk2mNUwuOURUo7sQabcVlOGYBeqE8ph1B667SdIGMuA5n4MrD3Ns1+hxrNuPcgB5ig==, tarball: file:projects/ai-content-safety.tgz} + resolution: {integrity: sha512-Ry/3BylPQzZpgRe6PqA3KoFRI9w/YpLx6nK+2OmEfC5ISVAFn7Wsg6j5Kl90TSxIjkuh5RrGignEW1M46U+30A==, tarball: file:projects/ai-content-safety.tgz} name: '@rush-temp/ai-content-safety' version: 0.0.0 dependencies: @@ -11836,30 +11836,30 @@ packages: dev: false file:projects/ai-document-intelligence.tgz: - resolution: {integrity: sha512-zURjI8KO009BcdIDTFJo5RtJ5DbL6mfI7ZODOyLGsBvEvJLc+V84Eu6HszTN6lVFifOv+9ImSFYsSXxQOhV2/A==, tarball: file:projects/ai-document-intelligence.tgz} + resolution: {integrity: sha512-uutTUFZVDT3yxQl/ju/2t4V8nSM+27SowbG9VCJq4F5FlAM6suic4U3Tk7khNoTeadqPLgFgLvFOT53Darz6jw==, tarball: file:projects/ai-document-intelligence.tgz} name: '@rush-temp/ai-document-intelligence' version: 0.0.0 dependencies: '@azure/identity': 4.4.1 '@microsoft/api-extractor': 7.47.9(@types/node@18.19.54) '@types/node': 18.19.54 - '@vitest/browser': 2.1.2(playwright@1.47.2)(typescript@5.6.2)(vitest@2.1.2) + '@vitest/browser': 2.1.2(playwright@1.47.2)(typescript@5.5.4)(vitest@2.1.2) '@vitest/coverage-istanbul': 2.1.2(vitest@2.1.2) dotenv: 16.4.5 - eslint: 9.12.0 + eslint: 8.57.1 mkdirp: 3.0.1 playwright: 1.47.2 prettier: 3.3.3 rimraf: 5.0.10 + tshy: 1.18.0 tslib: 2.7.0 - typescript: 5.6.2 + typescript: 5.5.4 vitest: 2.1.2(@types/node@18.19.54)(@vitest/browser@2.1.2) transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/ui' - bufferutil - happy-dom - - jiti - jsdom - less - lightningcss @@ -11877,7 +11877,7 @@ packages: dev: false file:projects/ai-document-translator.tgz: - resolution: {integrity: sha512-mmv2XkpfDGbfGRLrkuDt4yFpZmbXR0sqVo2Ek4+xk6jSqsByIY25WXVvJOm7NgEbITknjPFezgFxDc+auL9YzA==, tarball: file:projects/ai-document-translator.tgz} + resolution: {integrity: sha512-dUsdQD5j5TrusUCkmqLYDcUtPkNenDi6/49vHAcw/m5kjTooX8BwoN56JdNTLrcKhtcaW21D9Ksd/c7SW2UEqw==, tarball: file:projects/ai-document-translator.tgz} name: '@rush-temp/ai-document-translator' version: 0.0.0 dependencies: @@ -11923,7 +11923,7 @@ packages: dev: false file:projects/ai-form-recognizer.tgz: - resolution: {integrity: sha512-gBxXQ5ipm2y4CUU+lcOdGdVHayX0zjEKzWKcLH6D9O+Fzk6DSYBjJpo/S6iJTxE7+BhE/3P5uocseP8hfXpAFg==, tarball: file:projects/ai-form-recognizer.tgz} + resolution: {integrity: sha512-NDMSHJhJU/UVO2n24YYQ2eN+pzKvKwj4VngOXtN3qdPt0nsVLpksO0Z6671OPBlMOJDd7WlAJTg9J2jt0vgPGQ==, tarball: file:projects/ai-form-recognizer.tgz} name: '@rush-temp/ai-form-recognizer' version: 0.0.0 dependencies: @@ -11972,7 +11972,7 @@ packages: dev: false file:projects/ai-inference.tgz: - resolution: {integrity: sha512-Q6X9wbW7QeTbk4gw8qkRpVcIdIzZRS1jnI7Cx5WyrQMSFYlbQjNB7xrPeSoGlyGBOAkMmK9KMdV5ECIy0ebKfA==, tarball: file:projects/ai-inference.tgz} + resolution: {integrity: sha512-l2kOheCd94FGir+YPD591JYY1SIP8Pja8LWXm6wqQZy9Z6Dz1kuzYE0JJNk767gUBoO+PsaeTWLR3s227gcc1Q==, tarball: file:projects/ai-inference.tgz} name: '@rush-temp/ai-inference' version: 0.0.0 dependencies: @@ -12018,7 +12018,7 @@ packages: dev: false file:projects/ai-language-conversations.tgz: - resolution: {integrity: sha512-yerYCmyZV1azLLV8LUsaU5F92efOd2sjBaSQmAgBr+abMDdYOUDic+EFfF5xfW+5N+2Cs6wyAOH3tTMOZ0wXrw==, tarball: file:projects/ai-language-conversations.tgz} + resolution: {integrity: sha512-KUNB3tWomxHXjR2Jf7H4Ty7yANj/AXvLXrn8fAj7ryFL2ScU6grcP3iMviQ9YiAfpppJLOpAwGiV2+jc6Pya+w==, tarball: file:projects/ai-language-conversations.tgz} name: '@rush-temp/ai-language-conversations' version: 0.0.0 dependencies: @@ -12068,7 +12068,7 @@ packages: dev: false file:projects/ai-language-text.tgz: - resolution: {integrity: sha512-+28V/u3iH+goVWI66BNbymqVcY+E3RFpiYIDeTU2Yz9PU6RShfvTLT4vZrF0Pp88kJA3Tn6pgX8oHPz/O2o7Ag==, tarball: file:projects/ai-language-text.tgz} + resolution: {integrity: sha512-80v0lWm6zR/8GodSpyDKWf65gfd9zRbMOwC3aBpGjUb5bbCPtUuH9EY2uNW1wkcoZlUssPOs876xIG5LNz0gZg==, tarball: file:projects/ai-language-text.tgz} name: '@rush-temp/ai-language-text' version: 0.0.0 dependencies: @@ -12146,7 +12146,7 @@ packages: dev: false file:projects/ai-metrics-advisor.tgz: - resolution: {integrity: sha512-coyFFPdd9Q2nK0DwJnPVWx2f1l1TLfNMYbnY2XgbWjqpZh/teNUb4ZqcRubYqbQD8RMyxoGXR9e4tEIqbZTTBg==, tarball: file:projects/ai-metrics-advisor.tgz} + resolution: {integrity: sha512-Axx7UVtJKy+zQckp/x3+8EYOrnp0cwPGpaurLmyg1tR2S0ZR3cw9cCpibJKJWxxwniM3qajxz4YGfZ3bU6OxfA==, tarball: file:projects/ai-metrics-advisor.tgz} name: '@rush-temp/ai-metrics-advisor' version: 0.0.0 dependencies: @@ -12192,7 +12192,7 @@ packages: dev: false file:projects/ai-text-analytics.tgz: - resolution: {integrity: sha512-UK+H5rVUmq4AkLOJ5z8umJ3DpnmEfqia5KDwO2gcg7VsqNizYkBcDfyfSFQ4tDB0SH7OHqfgoGlaiLsOQPslWw==, tarball: file:projects/ai-text-analytics.tgz} + resolution: {integrity: sha512-KOA9Pj7xbL9uTgnkFOeedjjrZwNNIdFQpIBbHI04JXqnsvtWqz7Wz1KLolcs5sI8QY0JVQY+gSj2utCAxQ/AYA==, tarball: file:projects/ai-text-analytics.tgz} name: '@rush-temp/ai-text-analytics' version: 0.0.0 dependencies: @@ -12240,7 +12240,7 @@ packages: dev: false file:projects/ai-translation-document.tgz: - resolution: {integrity: sha512-GwYwLipQMJO2h0BspCG1Xa9ODSq/e4t5S5eIT/Pxly3RxLu6t4I5Zg1ImBhNHosEaoPCczu18B+5pcrRH97eeg==, tarball: file:projects/ai-translation-document.tgz} + resolution: {integrity: sha512-otROmo6ijA5vj1m5tYr9VWMP8frXGMyRD4cpYvFrBbqLkCjGhJVuxJNbMl6YvXzRhWr9xcNNjyYbhcd60pqBXQ==, tarball: file:projects/ai-translation-document.tgz} name: '@rush-temp/ai-translation-document' version: 0.0.0 dependencies: @@ -12286,7 +12286,7 @@ packages: dev: false file:projects/ai-translation-text.tgz: - resolution: {integrity: sha512-NcebnaA5NxdYBZ6E9GlBXZijylX98riPk2bucP/lIWXsiVWyQmgGa9W5WqR00vDzQM4x1cuvemB8DowGagW5pw==, tarball: file:projects/ai-translation-text.tgz} + resolution: {integrity: sha512-xN4WcqLOVhondD7CKnX6w++SvBgdztnzBRyd/zvPIhx6uK0/pYPIAvd0lZdbO7iJ0c9EiE2e1TIGZc98L/oPTw==, tarball: file:projects/ai-translation-text.tgz} name: '@rush-temp/ai-translation-text' version: 0.0.0 dependencies: @@ -12332,7 +12332,7 @@ packages: dev: false file:projects/ai-vision-face.tgz: - resolution: {integrity: sha512-5g5LumaEBcJkRv08bvusoXDQBbmBTxxibd4rKSkLm0QLA+Xal4mgMTmvsy3HddXhPuHAr1a52PURIdB8J2s2+g==, tarball: file:projects/ai-vision-face.tgz} + resolution: {integrity: sha512-t/948E3134gOvUKwyUZJSOaC/+NqkGCg0hjO+T5vfVHUGl8E8MhhearJY3lrWINvzjOIFaMqjQlcJT1q8qXk3Q==, tarball: file:projects/ai-vision-face.tgz} name: '@rush-temp/ai-vision-face' version: 0.0.0 dependencies: @@ -12374,7 +12374,7 @@ packages: dev: false file:projects/ai-vision-image-analysis.tgz: - resolution: {integrity: sha512-sZG3tcmXR7BHFJqNNO7mClVQKiweAJDbcbR4nFlRVMH/hHmRUjpXpNSNnZwARUqgYXVIWTqquLwVOw9lmb+5vQ==, tarball: file:projects/ai-vision-image-analysis.tgz} + resolution: {integrity: sha512-9StZ8+Sco5p2xzQYLFHqWLTN8AS8Pai6Gk4/6OEf7rGgS/DmNKSy6Hui8ll1uo4465Dor3AptuLohzBxYmaGcg==, tarball: file:projects/ai-vision-image-analysis.tgz} name: '@rush-temp/ai-vision-image-analysis' version: 0.0.0 dependencies: @@ -12464,7 +12464,7 @@ packages: dev: false file:projects/api-management-custom-widgets-tools.tgz: - resolution: {integrity: sha512-VS3iSY4cfLrl9YHM8diplgSKEw7w4BgMOwcRjkx+5KJ5s9qlnb3JaXV0sC+0kPJxKsLRXue9+xcWa0LmQcjDWg==, tarball: file:projects/api-management-custom-widgets-tools.tgz} + resolution: {integrity: sha512-8FZ5rNXHxo+LemYkBz8v/cUjtWQcH1alcfWuG2G5F335XUrtkLS4HRAzImETGk7HqTVAefd/PZh7+7SW5c2HEA==, tarball: file:projects/api-management-custom-widgets-tools.tgz} name: '@rush-temp/api-management-custom-widgets-tools' version: 0.0.0 dependencies: @@ -12504,7 +12504,7 @@ packages: dev: false file:projects/app-configuration.tgz: - resolution: {integrity: sha512-hlC8uwvsEG8oh23t5w8ddpDXB41wEk/60kkldKYXlLRqOui9Ys6goM0mn9oj/qZ+HdTYYLNwFF3TYkRKM384qg==, tarball: file:projects/app-configuration.tgz} + resolution: {integrity: sha512-gP8LmTDcRMVlrqAqNcSkU7VUCah65ZvbQc9vU9IMWko1If+tI5mj902b2uvjSPrF7IXAQo383gEGyDzj1ErdmQ==, tarball: file:projects/app-configuration.tgz} name: '@rush-temp/app-configuration' version: 0.0.0 dependencies: @@ -12545,7 +12545,7 @@ packages: dev: false file:projects/arm-advisor.tgz: - resolution: {integrity: sha512-j50IS1ldc8YFbLuR0O/sJUZRdGkK4K21T2T/p7QAMH6hXNBV81n8Z/6TkVVGKiujCP5ByN74dXoNRLDZPJk3hA==, tarball: file:projects/arm-advisor.tgz} + resolution: {integrity: sha512-vjYn8Yd5EXXOgKLNpGyAvkC5LGFv6xsgcpiT0QZe30ZW0klgr5gc62jAD3Yw6Ge+ILveFS79926EY/u12zuwJQ==, tarball: file:projects/arm-advisor.tgz} name: '@rush-temp/arm-advisor' version: 0.0.0 dependencies: @@ -12573,7 +12573,7 @@ packages: dev: false file:projects/arm-agrifood.tgz: - resolution: {integrity: sha512-vZM3DyGbtnOoJa4slS3DI62pHQpgWSibVKRi5lO9b8yDalDhrUdcyY7VY8Q06DKSizKfIhcJofYi0Jo2JX1YIQ==, tarball: file:projects/arm-agrifood.tgz} + resolution: {integrity: sha512-ZqbxbBoGp7BhpUgIPPmOGYgycRH/4B8JU+7piW099E5SyXRCQs0vlN+oklvfS2JFTtCOyKPlyeXuQQPW9BljCg==, tarball: file:projects/arm-agrifood.tgz} name: '@rush-temp/arm-agrifood' version: 0.0.0 dependencies: @@ -12602,7 +12602,7 @@ packages: dev: false file:projects/arm-analysisservices.tgz: - resolution: {integrity: sha512-GLHyFimX/x0Edc68NbyNXwwLS3C2u3CLKGsfAxOcQ2/Ehl8hn2zAc+yfzlhEVNV18zs855I2RNmLdantKfqhig==, tarball: file:projects/arm-analysisservices.tgz} + resolution: {integrity: sha512-SOaKSNZzq+FluIDEmAexhZFCivV9Oipkch/KWG9Vji0m8f17OnWvFKGmbLsaYOIFo03lzWhQ+v5NTKA85cMTXg==, tarball: file:projects/arm-analysisservices.tgz} name: '@rush-temp/arm-analysisservices' version: 0.0.0 dependencies: @@ -12631,7 +12631,7 @@ packages: dev: false file:projects/arm-apicenter.tgz: - resolution: {integrity: sha512-DDKemUzvGmhil+yTK3XdEHQPJzHoNocEvaBvhyqim5IKqYITSxGrw15RM6tK3RxYsxsyhm+8PYC5E4cfxRFByA==, tarball: file:projects/arm-apicenter.tgz} + resolution: {integrity: sha512-fpSAQZ3kg/ZEtCN27sQWfgrxWGGciE5IEwX27Am+41u8nfT1UwxgORGwyZtu5dxKfPQi61qoSsThm6xLuDxOiQ==, tarball: file:projects/arm-apicenter.tgz} name: '@rush-temp/arm-apicenter' version: 0.0.0 dependencies: @@ -12661,7 +12661,7 @@ packages: dev: false file:projects/arm-apimanagement.tgz: - resolution: {integrity: sha512-w71B8wlzqMjsqAaYwa5S7TX/WfqXgsslxBHeelihjZXTQfmH2JTLp/Jb+URULR9XV9l2gE7p5mCBphmFNa3dFg==, tarball: file:projects/arm-apimanagement.tgz} + resolution: {integrity: sha512-yG0sipzczlsjHcwJadYKD70WCRXxyEtgxsjyFWAdDe/91bI+QPTJ3z8XaVdlPAR0ETAj15iR/q8qJmxjX6tbtQ==, tarball: file:projects/arm-apimanagement.tgz} name: '@rush-temp/arm-apimanagement' version: 0.0.0 dependencies: @@ -12691,7 +12691,7 @@ packages: dev: false file:projects/arm-appcomplianceautomation.tgz: - resolution: {integrity: sha512-zPGuCARoqMk9lxx22kePwtVwfAIxb3xV27l9v+b2qbmd/GZto8c56LYLW0Jlc5YZxFc8OfFS40fnUXswt+aNMQ==, tarball: file:projects/arm-appcomplianceautomation.tgz} + resolution: {integrity: sha512-+AZX6KCPhu99ZBjEgIuUKWQlLsKIGq0hTy66QWQlktwB/DoY4kflboGpZGb3ykSP3ymxUMbrsOAQ0VYVigUh/w==, tarball: file:projects/arm-appcomplianceautomation.tgz} name: '@rush-temp/arm-appcomplianceautomation' version: 0.0.0 dependencies: @@ -12722,7 +12722,7 @@ packages: dev: false file:projects/arm-appconfiguration.tgz: - resolution: {integrity: sha512-vH4vUAApC+YkD3Dfb6ic88lhLKSXnSSK3pkV+JI8G7ldkfrCqG+nM949fpSeSXxZ33nKs5ekC+3lmGWHQksRIQ==, tarball: file:projects/arm-appconfiguration.tgz} + resolution: {integrity: sha512-7uLch2VfD1okr1ySITj5+REC8VAcGtlG3AsEnnA5lt82fE/GLc769RfY7Q3Xl5jL56Qkf9z4yLtMzYGRPMV+FQ==, tarball: file:projects/arm-appconfiguration.tgz} name: '@rush-temp/arm-appconfiguration' version: 0.0.0 dependencies: @@ -12752,7 +12752,7 @@ packages: dev: false file:projects/arm-appcontainers.tgz: - resolution: {integrity: sha512-sKAAGIUJAXoM/D34CwHp63CIbvhI8dWFWEUyu/MqYaIaOMCEzAq+LC6wa+Y8jyPdygnFBuf1fY7by88ewbQQIg==, tarball: file:projects/arm-appcontainers.tgz} + resolution: {integrity: sha512-kjruBKXtbcRnhv5rZ5yMv5drqqlVMaNPSoprSVqXiQnlDSScQ7/Ioj9rsfDTgOzBnT26JM8ZjZY6tVwqLrXZeQ==, tarball: file:projects/arm-appcontainers.tgz} name: '@rush-temp/arm-appcontainers' version: 0.0.0 dependencies: @@ -12783,7 +12783,7 @@ packages: dev: false file:projects/arm-appinsights.tgz: - resolution: {integrity: sha512-aN/H2SkdJltZmBVCyJf1B6aVq42p62AisM2n1kscNgIorbSBIqcMkTz+0VRDAMdi7wMD2OYoo8Rxxxuna5d0Lg==, tarball: file:projects/arm-appinsights.tgz} + resolution: {integrity: sha512-35hDLtbgI79tld5msoAgv6fZHp7F/DSYx32JgPk9uLiar7mKbYAxDkEhta2M05kRkE/ywLHwvIJC5QoxDgiFsw==, tarball: file:projects/arm-appinsights.tgz} name: '@rush-temp/arm-appinsights' version: 0.0.0 dependencies: @@ -12810,7 +12810,7 @@ packages: dev: false file:projects/arm-appplatform.tgz: - resolution: {integrity: sha512-sTdgGMCB4fHfqmiMFEKv3ifUbZVk6uGdQysv9K/5VLJQrOOC8MNfwq5oYOmzXWXkSgF1/LmJjRRfFu3IGDhDiQ==, tarball: file:projects/arm-appplatform.tgz} + resolution: {integrity: sha512-OAyeCbyggoOoPLuqNCbHV53ychb3XIguTDAkevIeNeUZyKAh9CORbxBxTvcRHNUo1g3F8C9EqEhdJxPWLpz+JQ==, tarball: file:projects/arm-appplatform.tgz} name: '@rush-temp/arm-appplatform' version: 0.0.0 dependencies: @@ -12840,7 +12840,7 @@ packages: dev: false file:projects/arm-appservice-1.tgz: - resolution: {integrity: sha512-mTPkB0S2WMTWFivB6kmxsh3KpkaGZTEn99uOXf1Di7nY/CwIHJpBG8ki32zxFKMrvdHtJjJWkLqhxgqkTEvvew==, tarball: file:projects/arm-appservice-1.tgz} + resolution: {integrity: sha512-licZltUN6Xq2gNbpCAeNv7zYprGL4ADnKmFF3gtvdJ2Vyxnu1WXnBWj6farnldPU7CecateAfhP4/PkjXtnxnA==, tarball: file:projects/arm-appservice-1.tgz} name: '@rush-temp/arm-appservice-1' version: 0.0.0 dependencies: @@ -12871,7 +12871,7 @@ packages: dev: false file:projects/arm-appservice-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-le+WclDqZDepxAaWxN3fIUHL7HNa8zb72MdJUr7LIzg/HkKSxaYqbj8Vq8SE7eCBNH214YR1p5XfDUNm1MRZqw==, tarball: file:projects/arm-appservice-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-m//Z0td9BmBpDwnSu2FO2vYHSnrv6Ypikdgu68WS2w1FXNVB15NWkvcPabbEj4kYD6iBZqMoAWQ3WztncBVvtg==, tarball: file:projects/arm-appservice-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-appservice-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -12901,7 +12901,7 @@ packages: dev: false file:projects/arm-appservice.tgz: - resolution: {integrity: sha512-0AxWpg2PGyfwn7Fcj+qffF3GRHNqT/ckL81rwjtYI7JnftJ0BbzMcsH3idEsu5RXaC2JAl6d2ImAkng2ZJ/3rw==, tarball: file:projects/arm-appservice.tgz} + resolution: {integrity: sha512-ZMjGPf1AZXDjrrnS49/qrwx/Cqp6Us4uDGXLcvDj2KhQyhl7Kb+VIS/rCaNNEAoEPSetHpzaEYdebi+qEqgIxg==, tarball: file:projects/arm-appservice.tgz} name: '@rush-temp/arm-appservice' version: 0.0.0 dependencies: @@ -12948,7 +12948,7 @@ packages: dev: false file:projects/arm-astro.tgz: - resolution: {integrity: sha512-t3gp2HykYuK2fxua+0V6w5QCE68AXPdV1U7SjjFodWsucS8L7Prn55qQoJsr+mMUFkXn49m/7O4NRunhjnDDUw==, tarball: file:projects/arm-astro.tgz} + resolution: {integrity: sha512-+6/O3LoFp3RAkxXps9x0i5chiltmFFhBs1Vq14ecWfZ7Wa7jaRztOA/I+qFeL2zYo+Vf7hTnqLseNvGyHwLkrw==, tarball: file:projects/arm-astro.tgz} name: '@rush-temp/arm-astro' version: 0.0.0 dependencies: @@ -12978,7 +12978,7 @@ packages: dev: false file:projects/arm-attestation.tgz: - resolution: {integrity: sha512-JP3oXHVm11vuB1HxqvDfpIBVuDPLOUrRWBLWbo8HGURI9ss+v83VdQO5qVScyPY+JZ/6MwcFSFIA8BTSVlLV+g==, tarball: file:projects/arm-attestation.tgz} + resolution: {integrity: sha512-FjYfuUDCohNPN5R0yKQv8xHtokfk63LJlGr8KM8Hqgpl2NI75OFZTsB07nf35KJ+PuxL+sLPkGj+VKyVtmw19g==, tarball: file:projects/arm-attestation.tgz} name: '@rush-temp/arm-attestation' version: 0.0.0 dependencies: @@ -13005,7 +13005,7 @@ packages: dev: false file:projects/arm-authorization-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-fKmixst908lrfU7yUoETdsMJhPNXegcGa1VL63Pm2LcWrwMlRn0YJb7kbLZhSXgAqKRWHdTaN/PGid1SR5xZFQ==, tarball: file:projects/arm-authorization-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-YfwPBb6y/E+EUDMu1T87Bhl4fgZnnVI/lQzDQN1/k9XZnQ21UIZrL/U/oqAs0kXIjrZODMPqaALlpJRWIPVRzA==, tarball: file:projects/arm-authorization-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-authorization-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -13033,7 +13033,7 @@ packages: dev: false file:projects/arm-authorization.tgz: - resolution: {integrity: sha512-fVHt83RsUiOUMiyDVLxiocujqCYf9b1HFDQATmwjQxEYpCwbhgJPkaw8Qm8A55gogDeOvSCby+XTRAG2NOk7CQ==, tarball: file:projects/arm-authorization.tgz} + resolution: {integrity: sha512-2PGaI8pMxHi3g9AFvqqs/rDtAm82jTnM085CRXBFbUUlipdVhWuPUtxa6ZebpSzs8Rn+KNh2MbMpvBeVeMQ+rg==, tarball: file:projects/arm-authorization.tgz} name: '@rush-temp/arm-authorization' version: 0.0.0 dependencies: @@ -13063,7 +13063,7 @@ packages: dev: false file:projects/arm-automanage.tgz: - resolution: {integrity: sha512-R7D6aWLvN+1AsZWt/JoARQffzrNM7n7eH85CFiDYC4OCV+lcLOMgYJXoQim5NvD5zAJB6KXTai7V4Ug12mN7YA==, tarball: file:projects/arm-automanage.tgz} + resolution: {integrity: sha512-yqrG/JXu3svIJemSo2z9XwYR7QyqzQiANkGIdAZVzoXpvRBJS0QdUot/rUv/cBBdN8PqoQUvUpZN5xn5GtBnPg==, tarball: file:projects/arm-automanage.tgz} name: '@rush-temp/arm-automanage' version: 0.0.0 dependencies: @@ -13091,7 +13091,7 @@ packages: dev: false file:projects/arm-automation.tgz: - resolution: {integrity: sha512-xm3HJfEFQKLUDmRLWV9jTHmxq5b9diVCJZ8SguZLq/LOnu9xWixFuL38MYUCwV7ikdUlFkh8TLIIXvx2a1+Z+g==, tarball: file:projects/arm-automation.tgz} + resolution: {integrity: sha512-K6jGyBr3usOzC03+mxBtCKmhQJesqtjVQTH02BgXZ/uWwOKAhJ0LBfMRIyH3FThk99UGvPvS6OMU5c9bVdvGHA==, tarball: file:projects/arm-automation.tgz} name: '@rush-temp/arm-automation' version: 0.0.0 dependencies: @@ -13121,7 +13121,7 @@ packages: dev: false file:projects/arm-avs.tgz: - resolution: {integrity: sha512-s3CYnYB4Xs8s56oIRpu6ft6LKwWxJd2rAbRQajiiWPzokn+XxDg7KFnEaFyqTa0gxDgfuB7f9O3Mwq9XR1NOuQ==, tarball: file:projects/arm-avs.tgz} + resolution: {integrity: sha512-Mi8kIxevxIs8NNado2AdlKvQbEA/N8k1i9i+pzghhe02onsJ2Hd9NXjYgq1OuS9QUifPnpq21QUfYHykNr7D/A==, tarball: file:projects/arm-avs.tgz} name: '@rush-temp/arm-avs' version: 0.0.0 dependencies: @@ -13152,7 +13152,7 @@ packages: dev: false file:projects/arm-azureadexternalidentities.tgz: - resolution: {integrity: sha512-/0w9x+HtRJsg/BVNECBZ7YtpEpImweZe11MW9gtV/6taqKa40M4ERcCxcaMfryWTemcZGOPYc/IPQnSLVj5VKQ==, tarball: file:projects/arm-azureadexternalidentities.tgz} + resolution: {integrity: sha512-q67bEgdxXJZLg20i5LHI42jAY5/XZ7/u8vV15t7kP4bEpIELZlBO7c/JmA4YHf69rpsc5ihyhn5FjCTFW8AOGQ==, tarball: file:projects/arm-azureadexternalidentities.tgz} name: '@rush-temp/arm-azureadexternalidentities' version: 0.0.0 dependencies: @@ -13181,7 +13181,7 @@ packages: dev: false file:projects/arm-azurestack.tgz: - resolution: {integrity: sha512-CAeob5fq9zY1Tpg7oba2HuvdEEgv9KgAo4C4bevufGIXX0+hBNj+jAMjD+v1x0kIWoBkCjCxpBTxU0akoTyVfA==, tarball: file:projects/arm-azurestack.tgz} + resolution: {integrity: sha512-T7YTO/MgQh0dw6AzP3IVb4XmRwyQzxHEnlIN1lzpwq1yhaCzoEhcNf15Gq3mFEPytMJIFW0fdPan6bpk36qDVQ==, tarball: file:projects/arm-azurestack.tgz} name: '@rush-temp/arm-azurestack' version: 0.0.0 dependencies: @@ -13208,7 +13208,7 @@ packages: dev: false file:projects/arm-azurestackhci.tgz: - resolution: {integrity: sha512-2c7VX8yC3d721NWjZnaLiVjkrlwvOMWE0tYYw9iEj76qyn17v4HDDVSuuBTVIv1Q5J0Ejb1kaaSsaYQq0iXjJg==, tarball: file:projects/arm-azurestackhci.tgz} + resolution: {integrity: sha512-YrPT+stG81lMdx0nfCDWQHYsSL6aPAg6RKvOzky65HUZo/EwfmIHw+MHMnY1wqDHMz+KPMrEn2tebk4xoD3j3A==, tarball: file:projects/arm-azurestackhci.tgz} name: '@rush-temp/arm-azurestackhci' version: 0.0.0 dependencies: @@ -13239,7 +13239,7 @@ packages: dev: false file:projects/arm-baremetalinfrastructure.tgz: - resolution: {integrity: sha512-J+3x4xxYfZz5mxsoa/CTHqkAZ5J9DhJ0jMqqXulf9SF3SzWS0l6gffe78tFJemrEcA+gR1HpjqpI5wy2Im24wQ==, tarball: file:projects/arm-baremetalinfrastructure.tgz} + resolution: {integrity: sha512-QTPqM3t+JELs+y4azr2niG89Taw+PfVdxyYOhlGDs/XnaA24KZSVewS29oltxRM+NCsnkAbYgkKooVXmE3NXpg==, tarball: file:projects/arm-baremetalinfrastructure.tgz} name: '@rush-temp/arm-baremetalinfrastructure' version: 0.0.0 dependencies: @@ -13269,7 +13269,7 @@ packages: dev: false file:projects/arm-batch.tgz: - resolution: {integrity: sha512-GzGCopQ9KbMjORsZM5l6Q9G6BiGLe7XvXbigD/eGvU7rE6/3U7CY9bORHfB6MyeBJLab9BbRxzNcNlP8w2tL8A==, tarball: file:projects/arm-batch.tgz} + resolution: {integrity: sha512-Ji9xVeQj7M0XujhC9agenCi8FLVSFWl93gNBh1xaduKFmrsoH9f8HYcXRIRLUF/orO+Xoo58iudptx+xef9q3w==, tarball: file:projects/arm-batch.tgz} name: '@rush-temp/arm-batch' version: 0.0.0 dependencies: @@ -13299,7 +13299,7 @@ packages: dev: false file:projects/arm-billing.tgz: - resolution: {integrity: sha512-hBrwE8YTVASJTUfX1hJSV7lq1o1jZ70DD4DVmq2t5zdugjxFftxsytzyQzdCBYfvAHa5Vxm7a+8gWDOJPsWC9w==, tarball: file:projects/arm-billing.tgz} + resolution: {integrity: sha512-BmrjANaKNUHqlGgA3jm8Y/p5JadJ6NKOjic45sSg/ekPhXqmhVvb3bsT6T7FRYtYabLLwaPDNrnhVsUqMhRXkw==, tarball: file:projects/arm-billing.tgz} name: '@rush-temp/arm-billing' version: 0.0.0 dependencies: @@ -13329,7 +13329,7 @@ packages: dev: false file:projects/arm-billingbenefits.tgz: - resolution: {integrity: sha512-itMhmNZHQbc/GNPoW6Y1iFkIu89HCEsyb3pIAgm9vb+pvZLg/bAZ8khtw2ZgCsqmwX7y1YX8sBSdyCLVGdbsbw==, tarball: file:projects/arm-billingbenefits.tgz} + resolution: {integrity: sha512-qqpGwzGVe8UyLBjb+Q2H0w++N2M+LINBLqmA0ackMrHC4Qb8SVjtA2/BGQs9vFLyY/h2rWiHVn+Ge1aRQR4+Fw==, tarball: file:projects/arm-billingbenefits.tgz} name: '@rush-temp/arm-billingbenefits' version: 0.0.0 dependencies: @@ -13358,7 +13358,7 @@ packages: dev: false file:projects/arm-botservice.tgz: - resolution: {integrity: sha512-IGdmnDZRAwhbvBMezbH1dGxEc7QHbmSKpaugEj7T3W0T6FDRF3AbR07fQAo3OnPEhwod8ii/3SoAXny5qSB0iA==, tarball: file:projects/arm-botservice.tgz} + resolution: {integrity: sha512-gMMlAZUSlbA6oW8JWTsgZCRahPkynG0iuyMGnMMsIGCR7chcsYZbay7AhvGIyGuAJxVd0YDJktT65/Pr8+tUzA==, tarball: file:projects/arm-botservice.tgz} name: '@rush-temp/arm-botservice' version: 0.0.0 dependencies: @@ -13388,7 +13388,7 @@ packages: dev: false file:projects/arm-cdn.tgz: - resolution: {integrity: sha512-CU+l5VuL+i0O+4HK2Q7Y2b7lCrRgMt45lOmj0YaCe6MVoCfjpQWczHWhP1oEWctDD94TQTEJzgXe5H4G17ZP0Q==, tarball: file:projects/arm-cdn.tgz} + resolution: {integrity: sha512-SKc7MjCuLrmeSSGPkZAviCMQ8jCRHDf7rIYC5CBcbER57ASteCeDrKYas5kb2L0TLmbNUwXfSaXWthKau6LtzQ==, tarball: file:projects/arm-cdn.tgz} name: '@rush-temp/arm-cdn' version: 0.0.0 dependencies: @@ -13418,7 +13418,7 @@ packages: dev: false file:projects/arm-changeanalysis.tgz: - resolution: {integrity: sha512-fkFX4kPWeb0cHbHCQ1PCsHMsN6H0p7K/8jAhpxNCcAFQMzkGDm4/DUvQ3OgWAriEHtrwIMULSNMvCVdcFH+gRg==, tarball: file:projects/arm-changeanalysis.tgz} + resolution: {integrity: sha512-UpEcej4ZUbTzbrJbE605xfDMr7/vpWc8g+N7AbL76z0YdKPYBW5NbIwJmvOhFyxy9W4I17BPdQcEMf6T+2Z5ow==, tarball: file:projects/arm-changeanalysis.tgz} name: '@rush-temp/arm-changeanalysis' version: 0.0.0 dependencies: @@ -13445,7 +13445,7 @@ packages: dev: false file:projects/arm-changes.tgz: - resolution: {integrity: sha512-YgAy00G/LtoxeeF2ZNMoQ/rn3vaPIcFapaR0xuFWqnUjWcUalsow6Qg438jNJW4bEDjpiIoKfZjQ+N7+Z6C2fw==, tarball: file:projects/arm-changes.tgz} + resolution: {integrity: sha512-33MnuXslqx7VSNY4X5iAEFNLBOhq0ZiZoDkgh9upgLeZaq8I8Ea4AKa5BwJb9/QaakwzfidxItf1/zp72y9dZA==, tarball: file:projects/arm-changes.tgz} name: '@rush-temp/arm-changes' version: 0.0.0 dependencies: @@ -13472,7 +13472,7 @@ packages: dev: false file:projects/arm-chaos.tgz: - resolution: {integrity: sha512-QThF364IZSP+M4ugEC1TtKgsf+eekhrNvtv7FAgV3AcV4BqHRIkyjgvd1M43EIc7K6QcCNZVKC3X868dbs+05A==, tarball: file:projects/arm-chaos.tgz} + resolution: {integrity: sha512-duaMsSr0lGppEg/Ju//lJZAkNyykRa8bkqNf4t+o/2Szsodz0owinK1qBD1bgm+u/Jt3pahz6sdeIJB6NVJ6Yw==, tarball: file:projects/arm-chaos.tgz} name: '@rush-temp/arm-chaos' version: 0.0.0 dependencies: @@ -13503,7 +13503,7 @@ packages: dev: false file:projects/arm-cognitiveservices.tgz: - resolution: {integrity: sha512-GmUfTUwnCvA2pMOatgpWu39YEiNawlAF2XeCQ0RkmYcuLeOaHpFDd+zoDayqDaXR0yLhPHe+CRNKQUdXrKzinA==, tarball: file:projects/arm-cognitiveservices.tgz} + resolution: {integrity: sha512-m0cGihg4gHrMSuW/rUI6Ojiakx3u3E1aSUbeE1Q0zlC7XVu82TzlYFzMUzwZwAlkgJM4TI2abZj45OQXZlkHEw==, tarball: file:projects/arm-cognitiveservices.tgz} name: '@rush-temp/arm-cognitiveservices' version: 0.0.0 dependencies: @@ -13533,7 +13533,7 @@ packages: dev: false file:projects/arm-commerce-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-rUjLWbTeEv7ZbU9vLGHuEPpOx6KC1gstxAzby4xC9jwldp5BftF1gv79Am5Ve6A8Qr1bHTrBRl+lquXhgUKHRQ==, tarball: file:projects/arm-commerce-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-vAsyFvItEaUXW6z6TO+O8DvXUCGA4U84samVLzdsxJZlSYwwD4hKu+y0WHbzVixsa3YktlgR3HhkyCl76ow8eQ==, tarball: file:projects/arm-commerce-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-commerce-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -13561,7 +13561,7 @@ packages: dev: false file:projects/arm-commerce.tgz: - resolution: {integrity: sha512-g4qTZHRvIuxEI6GMS4Dh9Z8IoXSQHKPFxLx3Y7UA4x8+BMD/PSYsiyU+HADZ8rlgsOj4WfDocx9xhnuR0NZazg==, tarball: file:projects/arm-commerce.tgz} + resolution: {integrity: sha512-HyS6mswmWqdZ60P2RuHN6fiKLijQXXC6yWL8hKCAySRdkdWbnm++Q0NHzDbwiBd7cNHEgWWKUccKua1rXJuO/g==, tarball: file:projects/arm-commerce.tgz} name: '@rush-temp/arm-commerce' version: 0.0.0 dependencies: @@ -13588,7 +13588,7 @@ packages: dev: false file:projects/arm-commitmentplans.tgz: - resolution: {integrity: sha512-jgfxpWcmTZFofFB8aNJrQoLvL8pP7ohgvs1YRjAxtsKAP9KGgiogvLGE9Y33JwpG3YOZws7fLhcYQQGDWshU0Q==, tarball: file:projects/arm-commitmentplans.tgz} + resolution: {integrity: sha512-lqB1qydqD9NAPOFhwywksGv79G6WAMCRPW3ApWhtjGNCC1EqIMLyngr5w49F5vyeHcg5n3JJuONcdCKCA6Xu2A==, tarball: file:projects/arm-commitmentplans.tgz} name: '@rush-temp/arm-commitmentplans' version: 0.0.0 dependencies: @@ -13615,7 +13615,7 @@ packages: dev: false file:projects/arm-communication.tgz: - resolution: {integrity: sha512-TGWfwDU++ZbuZkxlDVi6eK0FhRg6z9GWl/UsgZwNtx5SLIiHUaYrVQthh0Tx0zbRVtNZQVFP8UlfvTx3Mm1lDg==, tarball: file:projects/arm-communication.tgz} + resolution: {integrity: sha512-bVrKA8gfoikiwXCgsq9it2F/j4eIq1J+60/V8hix9CoJqIebkdIZmJ0b50bQi0bbOJ3/kcThbxxiOoqhI3VMtw==, tarball: file:projects/arm-communication.tgz} name: '@rush-temp/arm-communication' version: 0.0.0 dependencies: @@ -13645,7 +13645,7 @@ packages: dev: false file:projects/arm-compute-1.tgz: - resolution: {integrity: sha512-ltoqytPE1QVwr7Sob5PjXXoDsknShksZFG9vsodvBaEPOHz+3m3/LPQe1AZrhBRnbb6XWOeaDkSZnDkbfTZ86A==, tarball: file:projects/arm-compute-1.tgz} + resolution: {integrity: sha512-ODLRyAFUrC7ZPKjPMg854wvS/rryYoa+X++OJM8UtXpZOnw/PumlLJLt0upMGBFN0oD2lFoRAvm18H0K0i2uuA==, tarball: file:projects/arm-compute-1.tgz} name: '@rush-temp/arm-compute-1' version: 0.0.0 dependencies: @@ -13677,7 +13677,7 @@ packages: dev: false file:projects/arm-compute-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-GffiJ3m6SkVjee8GzJXjpgrKiqt7EDdqq7SmAb4bnUsPUNHygQQ4/M4H+YGE47/7SYI61JRC4GGTa0So3GN2mQ==, tarball: file:projects/arm-compute-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-y/P8nziaPBWoZGAP89EPdpKBhDeajxK+iaMejTmEXZMO9zOa+LY/9/DrV4PK6m9pIwCHLya7OLGMIUGJNspteQ==, tarball: file:projects/arm-compute-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-compute-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -13707,7 +13707,7 @@ packages: dev: false file:projects/arm-compute.tgz: - resolution: {integrity: sha512-O1ljGJZzzkrw/HcrAfi+3gxy5QHmSIjNolBRs5bD6PGadspNHkT+m7z/MovJC7+AnF5/qhsKMVoNUs0gQt6lOw==, tarball: file:projects/arm-compute.tgz} + resolution: {integrity: sha512-2NNZ7L3W9+XWLBsybqKkBhZcZMNDG/DAOUmym0KrbZoXxaX/c8AiT/3IwRCxbnm+PcD4omDW5j/FMbTkmNONTA==, tarball: file:projects/arm-compute.tgz} name: '@rush-temp/arm-compute' version: 0.0.0 dependencies: @@ -13755,7 +13755,7 @@ packages: dev: false file:projects/arm-computefleet.tgz: - resolution: {integrity: sha512-du/MWids31r8DpXCF7byu32onO5MtKHiAOSKeSgkNFRiLr4bxapXJwBhntDiobMezB2WJA78zf0833EGTjJcvw==, tarball: file:projects/arm-computefleet.tgz} + resolution: {integrity: sha512-fTi0yddULfZ4PhmfGeyg2/2mnUX9upFkxvWjc1UVAAFUGvbSZj5yQftNNAPU3ostDMOUnR5OKSQlpiBUN+jvIw==, tarball: file:projects/arm-computefleet.tgz} name: '@rush-temp/arm-computefleet' version: 0.0.0 dependencies: @@ -13796,7 +13796,7 @@ packages: dev: false file:projects/arm-computeschedule.tgz: - resolution: {integrity: sha512-8MHwaRx5A143tiaqXUAg9VoxuCW3ntTOOGyZP1MYLJ0RwBCrAhEQP3qwbr1ebwdM1ggnXtOp1QESXpNPiSTAFg==, tarball: file:projects/arm-computeschedule.tgz} + resolution: {integrity: sha512-aJw/ul0kPg4UR8vwkegLRRQcLxCOCuLDbIk4S2fgVZyjYCDwHqnNAaxmuCzlbT5JjAS30x6wxlUqgX5xKKAvnQ==, tarball: file:projects/arm-computeschedule.tgz} name: '@rush-temp/arm-computeschedule' version: 0.0.0 dependencies: @@ -13837,7 +13837,7 @@ packages: dev: false file:projects/arm-confidentialledger.tgz: - resolution: {integrity: sha512-r9C2B39MoV92dpUTX6LewfFjQVl6xt1XbfA8tTUMgeBx7XckJ9PdrQaUX4/a/Wu3fQQVAs8KJxxLpP6/jcd8tA==, tarball: file:projects/arm-confidentialledger.tgz} + resolution: {integrity: sha512-/mAZXNdZ/E+Bma6wfATQk4nowYATtAjzVWrNjmEv88X7TWcosjoF9S3OtsmahlMho45GQeBQesEeLMv8aIsYpg==, tarball: file:projects/arm-confidentialledger.tgz} name: '@rush-temp/arm-confidentialledger' version: 0.0.0 dependencies: @@ -13868,7 +13868,7 @@ packages: dev: false file:projects/arm-confluent.tgz: - resolution: {integrity: sha512-2CyfCPtvCztuWZqQpsyJRvXsUX1QYWymEkenlrqxR9RLtCp3PnDc7i/rthg8eh66RATNpCWIELiJfHeGm8wUfA==, tarball: file:projects/arm-confluent.tgz} + resolution: {integrity: sha512-EAEXIU9FBFdX131c6x3XT4IOx9bojcSGxSSjHZpSf0mMuxxLTK5Lzq0AwqNuPj96D79aG1VnOiQOp32N6IcdNA==, tarball: file:projects/arm-confluent.tgz} name: '@rush-temp/arm-confluent' version: 0.0.0 dependencies: @@ -13898,7 +13898,7 @@ packages: dev: false file:projects/arm-connectedvmware.tgz: - resolution: {integrity: sha512-eposj3oB77pzGOiesx91Pb2s/PMXi/i9/7cxVZ/KUBEnT+trQu5Z7X8gVXDJrSwDsS5iufMIXhKBYYQGEI6QvA==, tarball: file:projects/arm-connectedvmware.tgz} + resolution: {integrity: sha512-ADUFaFS/8OanfT9HmmoVJAanvIyMNdvY83/qR9hgOcaBpE+Pye0RaP0yR7fDXNEMspzBfXCAQD7NuqWptdYE8g==, tarball: file:projects/arm-connectedvmware.tgz} name: '@rush-temp/arm-connectedvmware' version: 0.0.0 dependencies: @@ -13928,7 +13928,7 @@ packages: dev: false file:projects/arm-consumption.tgz: - resolution: {integrity: sha512-h8QYilRLuOtHTC62vMgIS87j8jsSnN7hEztpMR+rt/zTPQE0Aju31BJZsrMjyeb2JVBNrJK0+7qo4ifxy01s0A==, tarball: file:projects/arm-consumption.tgz} + resolution: {integrity: sha512-ljSbZqDvjeA1ZeBxedF5W4MrrmcnG4r1C9my2UW+SvJyA0Qa9XOBpS3ng8BKqNbjeC0wjuRXqNDqSkLoPTPgAA==, tarball: file:projects/arm-consumption.tgz} name: '@rush-temp/arm-consumption' version: 0.0.0 dependencies: @@ -13956,7 +13956,7 @@ packages: dev: false file:projects/arm-containerinstance.tgz: - resolution: {integrity: sha512-SaSrVVISz1ZjPeO8jG5TiqvC+1hhhHv4PtTMZfzgDCxcfKp5zRXmcNRQ7CcRIjk4JPbWPLMwXELm78E9ykeRPw==, tarball: file:projects/arm-containerinstance.tgz} + resolution: {integrity: sha512-L0/F5cyMoejXt+Bk50tWAccZVi9P28A97pFk/oEmndSaglS19F8wpbraCz18/8pPCKYQOOUdDyTyMSmPZ13rNQ==, tarball: file:projects/arm-containerinstance.tgz} name: '@rush-temp/arm-containerinstance' version: 0.0.0 dependencies: @@ -13986,7 +13986,7 @@ packages: dev: false file:projects/arm-containerregistry.tgz: - resolution: {integrity: sha512-wX5l8Eto7xHEyyzj/+i58KOGcMjLIt8lK3CUvrpbqWAyXckfLD+EJpMDlMkQKP7B8KJZn0rBSOvo2DOPVuh5dw==, tarball: file:projects/arm-containerregistry.tgz} + resolution: {integrity: sha512-KrXOKsJYZpzKdKzGiYv7qFxQ3vghP1VHojVZxFQCml8xG6rpPqFLU9Csv19go+mDtKlsYjla7KXq9dffrioF3A==, tarball: file:projects/arm-containerregistry.tgz} name: '@rush-temp/arm-containerregistry' version: 0.0.0 dependencies: @@ -14016,7 +14016,7 @@ packages: dev: false file:projects/arm-containerservice-1.tgz: - resolution: {integrity: sha512-bYk9jhoOSa4Qv3EhhKixMq/9Q3iyEpC7syNtXZRCvyZQsrwgS7GMsKLygYTSXLdGRzMAZ3QMMNJG3wMX4wIt/w==, tarball: file:projects/arm-containerservice-1.tgz} + resolution: {integrity: sha512-psB8fi8xPgd4DQhH0+W7ux4LdjTXnjFwhOZOD/uf8b6HAJbFmoblTBuzEFw4p9jm7HHUK06KlgkVtHjDFTkKuQ==, tarball: file:projects/arm-containerservice-1.tgz} name: '@rush-temp/arm-containerservice-1' version: 0.0.0 dependencies: @@ -14046,7 +14046,7 @@ packages: dev: false file:projects/arm-containerservice.tgz: - resolution: {integrity: sha512-+pWOSQtyUTgc+0gU+LQWfB3e7nHG8fOJZHsLs2+Hn2ypGNYGLXdNLaWhWpBdg+iucgdqMDw8Ja5e6SYHCJuwGw==, tarball: file:projects/arm-containerservice.tgz} + resolution: {integrity: sha512-lj+Z+DNeeSo6UQusAcA9/sd9wa+QTHxJRZg9lItZp5LNLUEgeXnBg0xkxEpAIw07ojn6vWjM/fqWQIV4L9lOVw==, tarball: file:projects/arm-containerservice.tgz} name: '@rush-temp/arm-containerservice' version: 0.0.0 dependencies: @@ -14093,7 +14093,7 @@ packages: dev: false file:projects/arm-containerservicefleet.tgz: - resolution: {integrity: sha512-PQcr24oEdrDmHejzWucB0wHC97fJYA0bMoBDyilrYMNbHCS0pK7QDKMdK4mGsai7bqz2o+qSS+8DbqOXLTX1PQ==, tarball: file:projects/arm-containerservicefleet.tgz} + resolution: {integrity: sha512-uQDDni3B2mNlmUuzOFpNBkY/v4Nr4mufQjb2tYJlnt6/s7vg7iqxI2QI4aBjvPEjYOJh1Z7z8/4iFlRibR3Ljw==, tarball: file:projects/arm-containerservicefleet.tgz} name: '@rush-temp/arm-containerservicefleet' version: 0.0.0 dependencies: @@ -14124,7 +14124,7 @@ packages: dev: false file:projects/arm-cosmosdb.tgz: - resolution: {integrity: sha512-JrDCM1+VHSJ5iafdZnbxtpex9/rZxZop4mpPU4+3YqKptJjwPYW96DF1lWRpx3HYZoQvKzP0jbY5cjQvPko2ww==, tarball: file:projects/arm-cosmosdb.tgz} + resolution: {integrity: sha512-HX2XPGeQprhMiZuTB9dd3tOPFGyov+CwWHuuYzo+HxRGHAmlsGPj9YPGz5+EB04xoLIWQgx34HLOA2cZM0G82A==, tarball: file:projects/arm-cosmosdb.tgz} name: '@rush-temp/arm-cosmosdb' version: 0.0.0 dependencies: @@ -14155,7 +14155,7 @@ packages: dev: false file:projects/arm-cosmosdbforpostgresql.tgz: - resolution: {integrity: sha512-HCORHKmsdswJ/9Rv77nWQWlJQFHjerRkQOnoCqD8pUw+Ismf8Zj0ucEgyFwI0vDvKAzlEeY6n9QvwWcWJw+URQ==, tarball: file:projects/arm-cosmosdbforpostgresql.tgz} + resolution: {integrity: sha512-fbSR7O0byc3EEfrk0lF6QDoz3wXXU0iH50zy6yuv7jhRMlkonKR0+5vE4wJe6nJVKKNBS8ghSJmHL8tJ5n4kSg==, tarball: file:projects/arm-cosmosdbforpostgresql.tgz} name: '@rush-temp/arm-cosmosdbforpostgresql' version: 0.0.0 dependencies: @@ -14185,7 +14185,7 @@ packages: dev: false file:projects/arm-costmanagement.tgz: - resolution: {integrity: sha512-evd1cjGM5HTpXhj8kSwA7QmD5tb0GxTYz+T59fq9SP5Z0PGdYZT8olaVKB/JCQdWQsilNV87n3/D2x0TUlmmZw==, tarball: file:projects/arm-costmanagement.tgz} + resolution: {integrity: sha512-8VKWfNLoXGfTRK2RIUihzqTmJOg6HiPgaRtidu6bd2TpatWtX8rkkkXsADRIVH6OVwp2hBzHxC8Go87t2m5a2g==, tarball: file:projects/arm-costmanagement.tgz} name: '@rush-temp/arm-costmanagement' version: 0.0.0 dependencies: @@ -14215,7 +14215,7 @@ packages: dev: false file:projects/arm-customerinsights.tgz: - resolution: {integrity: sha512-8EmhMChGAmXNcp/+zjkXdCiV9+hvhutxPiwjve5CbDEN3ucqRKUbSZBvsd/shMFeX7prRglhZ0UamdOeIhzS0Q==, tarball: file:projects/arm-customerinsights.tgz} + resolution: {integrity: sha512-tef1W4nI6pm94v2cisoKy8rsQ7oeZA4ZhZXukzziDUgNEBEGHG6M9lNiI3RmE5jN4knSadKmF6R3gdmlhuSEzA==, tarball: file:projects/arm-customerinsights.tgz} name: '@rush-temp/arm-customerinsights' version: 0.0.0 dependencies: @@ -14244,7 +14244,7 @@ packages: dev: false file:projects/arm-dashboard.tgz: - resolution: {integrity: sha512-K1R/oyol5L6Lt2wIyUkEFH3olTzpnCCE3PhrSQCK7VQy+dYGIsEiclTK9o2iomcVztgsOK3Lx4+oF9/CvzCScQ==, tarball: file:projects/arm-dashboard.tgz} + resolution: {integrity: sha512-+uhyH4X3a04aVItfcXJCZ69DrTWRsmLhQGOODdUedFaLjfjbc/NyLFfI48FEPHBKSInS+eKQFmH+2b7EUTtfFg==, tarball: file:projects/arm-dashboard.tgz} name: '@rush-temp/arm-dashboard' version: 0.0.0 dependencies: @@ -14274,7 +14274,7 @@ packages: dev: false file:projects/arm-databox.tgz: - resolution: {integrity: sha512-ABCwqA8GmSQMERRbafuhUaexodTf4aMgRSuCf8IEUz7ghLImZNWF/TjdwXi/8m7AEuNx6goyjbLg/wdBmAm7wQ==, tarball: file:projects/arm-databox.tgz} + resolution: {integrity: sha512-eQ8buFlDDk2N0uTF4H5r0K1lrI5dakaYCguY3/5Lk06pDmFN8KbIS27IA3u42OvF/Bawpc1Hch2O6BfVcsvOlw==, tarball: file:projects/arm-databox.tgz} name: '@rush-temp/arm-databox' version: 0.0.0 dependencies: @@ -14304,7 +14304,7 @@ packages: dev: false file:projects/arm-databoxedge-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-P6LLolKn9TxUcNL+DXszOupHW16PFEi2jP+WaT2wEXIHPhhnQtRjdG4Wk1NlnV+iQCbvYqJTIMwX2KIAPbsmSQ==, tarball: file:projects/arm-databoxedge-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-yGHHQj3b9veF7XF1HvpIRdEQ9HHsmOMnD9prt97YFnjK58SD5DUhbJWemU+d1D6/xqRVlTTBtJBv+wA/9Rn7sg==, tarball: file:projects/arm-databoxedge-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-databoxedge-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -14334,7 +14334,7 @@ packages: dev: false file:projects/arm-databoxedge.tgz: - resolution: {integrity: sha512-WiTu65aQZkHG0CIlTv7ms1p2lVpwj8AG+Wl7NG/y68PjxcNbU+xx8mu3RUowYp3oVaiD4tmdW03PxJcPn0UrDA==, tarball: file:projects/arm-databoxedge.tgz} + resolution: {integrity: sha512-zTYR1hawvy18RYKqky9wu2LBpvWc0GUp0bZnqHeqzdg9X7UaI8QLCClzXe9qEd5WqEAtDAnYUSEC0X3jvUyqyg==, tarball: file:projects/arm-databoxedge.tgz} name: '@rush-temp/arm-databoxedge' version: 0.0.0 dependencies: @@ -14363,7 +14363,7 @@ packages: dev: false file:projects/arm-databricks.tgz: - resolution: {integrity: sha512-fxpi+OwV0m4BzZoXLRr8m5XPNMJ4lmqdYMEZFvhvL/YHisTBxD0ydczsjrzF/Nwjg/CBZjEvoX6aC993ZLUGHQ==, tarball: file:projects/arm-databricks.tgz} + resolution: {integrity: sha512-RXI1XeTPejqTgNNOw37ZWktKXmL/puYILXvGTkrujMhxWKks0nYcwk9RugFNDqiwAcSVtijMgjBz6umoI6hjVw==, tarball: file:projects/arm-databricks.tgz} name: '@rush-temp/arm-databricks' version: 0.0.0 dependencies: @@ -14393,7 +14393,7 @@ packages: dev: false file:projects/arm-datacatalog.tgz: - resolution: {integrity: sha512-KXRSpZoBFakUPSlBgKVrlRb/0R3SfBt/2IoxUHqXKEBQ+YkWgnpJUtrsi+puV9Lj792KItOHABnaNdYsFQQIcg==, tarball: file:projects/arm-datacatalog.tgz} + resolution: {integrity: sha512-80kly3hApa9Sajza0bFx64QKl+6sumC6jJmPYyl0ezlI5nDPvkwvJSsOtrIW2DnlgcaMq71MWISg6DMyAXgIIw==, tarball: file:projects/arm-datacatalog.tgz} name: '@rush-temp/arm-datacatalog' version: 0.0.0 dependencies: @@ -14422,7 +14422,7 @@ packages: dev: false file:projects/arm-datadog.tgz: - resolution: {integrity: sha512-3/4FfKMzeYF45doitgdXODW1GCpTR6Qt07UXnUQknmPx4Z5hD7fUZ/lhRhPQIkYC+T6xn3H+kgTrpNr5AzpzwA==, tarball: file:projects/arm-datadog.tgz} + resolution: {integrity: sha512-pYRNi6Q5ttM4AIwcaH5n2LYmaE9kAykIbD1QyquHbqoyD3k4oFVASIZEwlqWPIyWpgrj/FtaKG9/EFT3n8D2kA==, tarball: file:projects/arm-datadog.tgz} name: '@rush-temp/arm-datadog' version: 0.0.0 dependencies: @@ -14452,7 +14452,7 @@ packages: dev: false file:projects/arm-datafactory.tgz: - resolution: {integrity: sha512-urWiWwwdI5TR3DydiAWFk7nCq/5gZn4lsnRs2OXgELNNnXpJfbLfU+1/z7CnYDSQGsA5wR+u9iC42D47ttvgug==, tarball: file:projects/arm-datafactory.tgz} + resolution: {integrity: sha512-iOLeUEsGV/odmVzk+vJA6iyUj22hHUdQw+ADckIeuHrsi9CNfFRKu8YZHERnLmLJJbdejPqRXMr01KdNZ2SCtA==, tarball: file:projects/arm-datafactory.tgz} name: '@rush-temp/arm-datafactory' version: 0.0.0 dependencies: @@ -14482,7 +14482,7 @@ packages: dev: false file:projects/arm-datalake-analytics.tgz: - resolution: {integrity: sha512-ArzJu96X58+OcYy7d0BdnMthLlgSWtbR6P5VU3ghxAbLQ6plsWy73mLDrc7FE6cIvdBl353KgTUSTrvf55uwuw==, tarball: file:projects/arm-datalake-analytics.tgz} + resolution: {integrity: sha512-kLadl1tR3bouJk4yremLkn9xTwtzE1onV9P9Aciulakae5Mx0iPN3Rr5d5mOcKaxh0PG0NRJgWKLhmQ7B9RoxA==, tarball: file:projects/arm-datalake-analytics.tgz} name: '@rush-temp/arm-datalake-analytics' version: 0.0.0 dependencies: @@ -14511,7 +14511,7 @@ packages: dev: false file:projects/arm-datamigration.tgz: - resolution: {integrity: sha512-AUiVgHkYSmpCCBumkMlhQkQUspeHqMyDfEV+aH9UdrIbQWlZ9Ma0/+y1noZktCg/nRtwk9sCfk73PO5ec6PrkQ==, tarball: file:projects/arm-datamigration.tgz} + resolution: {integrity: sha512-/FNRGEhuOQjVd0muvkj3qK9otyBZGGtyvd3Ag9IgzDdVAHJThd8sM6s0fMq7SOKnyGdxcoda7ejighGcNarnnw==, tarball: file:projects/arm-datamigration.tgz} name: '@rush-temp/arm-datamigration' version: 0.0.0 dependencies: @@ -14540,7 +14540,7 @@ packages: dev: false file:projects/arm-dataprotection.tgz: - resolution: {integrity: sha512-sgYyZ4N+dqNTke3Sv44Wf7QrB/N2QgfKG/1cssFfoue3xPByWVEoiWOp+XRg5tZMVSHmgb2du9huoluNGpRMFQ==, tarball: file:projects/arm-dataprotection.tgz} + resolution: {integrity: sha512-QAMh6pnRsDMLm3WFmfn6quhhvNOdDIrSvCazlxcAl20UtEZy3Up/9QfCU7js/v9Zq7HENW1trNtdjWxKP4ow0Q==, tarball: file:projects/arm-dataprotection.tgz} name: '@rush-temp/arm-dataprotection' version: 0.0.0 dependencies: @@ -14571,7 +14571,7 @@ packages: dev: false file:projects/arm-defendereasm.tgz: - resolution: {integrity: sha512-ROaU9qdvQ4Mp8FErQmnzDXLlK24fowwMHpWWaBFkrvYO/lSD4dXtI7Fu6D4YzvyI/sf6BrBVwaKFh5bjTcXgAg==, tarball: file:projects/arm-defendereasm.tgz} + resolution: {integrity: sha512-jdeD+y40c+WsExckOAJQlEkcJK5XPcd0m1eVUEAT5DNizWCxK3SKi0He9Skol/DUnqLYo8rIKiKmQSSD68mGmQ==, tarball: file:projects/arm-defendereasm.tgz} name: '@rush-temp/arm-defendereasm' version: 0.0.0 dependencies: @@ -14601,7 +14601,7 @@ packages: dev: false file:projects/arm-deploymentmanager.tgz: - resolution: {integrity: sha512-L5T74sbbIbvcU5hl1fYzI6Mp6F9Vt3tz2BfRrkzJI176XmuB6+sI2i9A7gLyQhxts1kgp65mELFN0jpBTKIigQ==, tarball: file:projects/arm-deploymentmanager.tgz} + resolution: {integrity: sha512-Yi7f/RE328PSdv8iYQ53a5/sVlXzt3a6TEzvHrsZOJ3e0mFZ6/KOy/X2+vEWWQsAdMbBsClrJbtaz0pxu/dEfQ==, tarball: file:projects/arm-deploymentmanager.tgz} name: '@rush-temp/arm-deploymentmanager' version: 0.0.0 dependencies: @@ -14630,7 +14630,7 @@ packages: dev: false file:projects/arm-desktopvirtualization.tgz: - resolution: {integrity: sha512-63fbuh1Elv9bErYNzaeL3E/e/SpAX8rS5ZEo840VlOGsRau/58shIAgr6nkAe0mq7bSA/clYpE6t9t3pxcVZiA==, tarball: file:projects/arm-desktopvirtualization.tgz} + resolution: {integrity: sha512-eL5RX+9Jx99cv/fxmX1uuH4XyqNSpZ5uY+YIXTtpkuQTCMmyDrSCvLK7Uoe58fDfjAa+Q2xJE/kzPubq155F+g==, tarball: file:projects/arm-desktopvirtualization.tgz} name: '@rush-temp/arm-desktopvirtualization' version: 0.0.0 dependencies: @@ -14658,7 +14658,7 @@ packages: dev: false file:projects/arm-devcenter.tgz: - resolution: {integrity: sha512-pjkcpXIXhJsqdievn9pQi/hsFqQfnxhygVRwWeYLn6HNValjZvbVNt+9kw6u7/SOB4LC9abudIDr0Z+JyZFixg==, tarball: file:projects/arm-devcenter.tgz} + resolution: {integrity: sha512-Y8FdhWDpBujRLbe7SF2wgGsClyhGuF5vcJ1pYpTDNBmfh5Nnw0D9I3rD1eu9r+gyAq0nwShKDC9WZx/OtZqAxw==, tarball: file:projects/arm-devcenter.tgz} name: '@rush-temp/arm-devcenter' version: 0.0.0 dependencies: @@ -14689,7 +14689,7 @@ packages: dev: false file:projects/arm-devhub.tgz: - resolution: {integrity: sha512-rKgyGIvSh0W5oXjOhvnma9mFnTlBfX+V5vMnl9ZkqhDrWIUUlHB8RW9gidPtFjTPrZAWaWrHqbCX09KvPOX4ug==, tarball: file:projects/arm-devhub.tgz} + resolution: {integrity: sha512-Yjw9ANAojxReo2LjL07gBSat1NCPMKiaKIX77VFRooTQNd7baPDxsQ9T7rOO+dpdGZ0a9Yq9xKkLxXndA8xPCA==, tarball: file:projects/arm-devhub.tgz} name: '@rush-temp/arm-devhub' version: 0.0.0 dependencies: @@ -14717,7 +14717,7 @@ packages: dev: false file:projects/arm-deviceprovisioningservices.tgz: - resolution: {integrity: sha512-K84GOD5aW9q09OqBKnKCrT0C7upIdPHPno09FfZ+OqOQJ8dW4UB7Px+4LXr6l2Ft5ThvzMTSX2zzkASvfKeIyA==, tarball: file:projects/arm-deviceprovisioningservices.tgz} + resolution: {integrity: sha512-nanv2oHzu23fby8Z9KZOfZpqETKOWuBUXy2qInZQZWXfIdv3zHPVcC9wnw0Wm+HJR1RH8yCKajDP3zK9fDVPyQ==, tarball: file:projects/arm-deviceprovisioningservices.tgz} name: '@rush-temp/arm-deviceprovisioningservices' version: 0.0.0 dependencies: @@ -14747,7 +14747,7 @@ packages: dev: false file:projects/arm-deviceregistry.tgz: - resolution: {integrity: sha512-7esVDgi9xVNSLSWOmFlBU52D7gdM1G3BVAFO+D54RTvFOMSceura1poPVsyXkaMEpuLG4JvqBnD73lahcsPSeA==, tarball: file:projects/arm-deviceregistry.tgz} + resolution: {integrity: sha512-MC1GAJ5+eTLg5jYCIFKG05g9k6b4BLcle+cRhrdK8ug6gPrDgUuFYtfhavMMLDjB5S70TSjuKP7iz6EaVqCRdg==, tarball: file:projects/arm-deviceregistry.tgz} name: '@rush-temp/arm-deviceregistry' version: 0.0.0 dependencies: @@ -14778,7 +14778,7 @@ packages: dev: false file:projects/arm-deviceupdate.tgz: - resolution: {integrity: sha512-tkLkqNtAKlL//CZLIthAh0zz7ubE7aTpzH1gZpynTxLmElfao+2mhqvn+wnSQ9H4MIZCWu/Je4CjJaWkQ2hBWQ==, tarball: file:projects/arm-deviceupdate.tgz} + resolution: {integrity: sha512-Fi87j42fzx7EAKXWBiIgUDz+cL8QIG19kNbPEJnCUnroZT1CgePW+0TBTMTpdy0XHDqrzJTdkv60HJGSNV6OPg==, tarball: file:projects/arm-deviceupdate.tgz} name: '@rush-temp/arm-deviceupdate' version: 0.0.0 dependencies: @@ -14808,7 +14808,7 @@ packages: dev: false file:projects/arm-devopsinfrastructure.tgz: - resolution: {integrity: sha512-ccrIS68bDVShagHR/K7bAktyfPIYQk2toFSwPha7pxsCwKYbBie0xyqyaRJf56F9ugIBBWs2GGl5GUoyVh00lA==, tarball: file:projects/arm-devopsinfrastructure.tgz} + resolution: {integrity: sha512-uLfSmRkBvgM/BNZeE4Og3nR1nthkDOLsfNfilOaCOt82XavON+qeM/thVTSYjQUqlW1sN6M+/mTAGV3IbGHFTA==, tarball: file:projects/arm-devopsinfrastructure.tgz} name: '@rush-temp/arm-devopsinfrastructure' version: 0.0.0 dependencies: @@ -14839,7 +14839,7 @@ packages: dev: false file:projects/arm-devspaces.tgz: - resolution: {integrity: sha512-Ix60GT+8pCNlR78O/DCH6lp44rlu8GxCjm/DaUYkLy5noAcF4n6qufOFP5URt9SVNPqCI+jIt1IV35dYaGWiTA==, tarball: file:projects/arm-devspaces.tgz} + resolution: {integrity: sha512-V6pn0ljyLRLiGv2tP6ttNPqZWD4Ln2/flqCz5dsxKv6tXKlFjZaDFbaqkcd5HXlyo2a1m8RKEJKyEQws8P8l9w==, tarball: file:projects/arm-devspaces.tgz} name: '@rush-temp/arm-devspaces' version: 0.0.0 dependencies: @@ -14868,7 +14868,7 @@ packages: dev: false file:projects/arm-devtestlabs.tgz: - resolution: {integrity: sha512-pct3yESkYzm6mOCTHRkIM1DX+WyS06a7AAaHVW+9yxOKRnSaHu22BKNSAFMABAOv5T5PtKVOXSjplfnZtf6a6Q==, tarball: file:projects/arm-devtestlabs.tgz} + resolution: {integrity: sha512-v0OynTI0c0Lytqyx5x4bCW/laQTF/yWZrsu7lH3eSo4Ri05hLXu6xGZd7ktUcsbeDfufDpRK7uLu2xXKR+AIcA==, tarball: file:projects/arm-devtestlabs.tgz} name: '@rush-temp/arm-devtestlabs' version: 0.0.0 dependencies: @@ -14897,7 +14897,7 @@ packages: dev: false file:projects/arm-digitaltwins.tgz: - resolution: {integrity: sha512-y7lmO2dEETJ7gfdSGuLjkNNerJJjP2ehsiXeOu5lEeHjelSBZpq5eovSGiC2SSAsJYhgjBnPa8FezxFgal1ghw==, tarball: file:projects/arm-digitaltwins.tgz} + resolution: {integrity: sha512-ksbql7mYLO+qVGFtYns9eW5MhaxsEkyGYZ+6xCTEMdqpX1dIwH7PiGKvnYVKReS0aP6POx9EcXmqxeved+EclQ==, tarball: file:projects/arm-digitaltwins.tgz} name: '@rush-temp/arm-digitaltwins' version: 0.0.0 dependencies: @@ -14927,7 +14927,7 @@ packages: dev: false file:projects/arm-dns-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-ePWpgoHU8/FVEf+ELp8TFJHGazelT802wthozBu7TOHmKhWvIrVn7PWsbJqHJ+0Tq/7uw6Fn3eYXzFwa+Qu/2Q==, tarball: file:projects/arm-dns-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-WUlWtWISz4noyl/K9DEDzVklAcGQdv/Vrktil9V/mlkPFA+9zNMQITDp1KJ5ecg/bzMheV3M+zGvcLwTVbns9w==, tarball: file:projects/arm-dns-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-dns-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -14957,7 +14957,7 @@ packages: dev: false file:projects/arm-dns.tgz: - resolution: {integrity: sha512-GtoItqsDySJp4zPNT7MejyLTapT25UHlfecIoEj+qmBbFMCbpiFDstik7OOT1MAJJldMrMbYPkTlBVerayTFpQ==, tarball: file:projects/arm-dns.tgz} + resolution: {integrity: sha512-cNoeVEY8Tqk/FrQTkxrgM0CLQ6Dw0lZf/SuOc00yzpvmbP5r+Ln+VyW0LmjEAHJuU+Wa7WXSXM9bccphSdB2Tw==, tarball: file:projects/arm-dns.tgz} name: '@rush-temp/arm-dns' version: 0.0.0 dependencies: @@ -14986,7 +14986,7 @@ packages: dev: false file:projects/arm-dnsresolver.tgz: - resolution: {integrity: sha512-PrcOSx7aR21DS4BPf0qonWOQvA9hopXFvoLeHfccipcuv3d4xkpzmW7MXaXIUIMNvSFyXyt/kzn4YFOYuKI/MA==, tarball: file:projects/arm-dnsresolver.tgz} + resolution: {integrity: sha512-gep5ujkJodPYfKnKyThoq+x9Km167oO7dAVXOUY9HJGwMgYQCughc4+/OnVblnrgWaOKdWCM3jXZCH6BpSdcQw==, tarball: file:projects/arm-dnsresolver.tgz} name: '@rush-temp/arm-dnsresolver' version: 0.0.0 dependencies: @@ -15016,7 +15016,7 @@ packages: dev: false file:projects/arm-domainservices.tgz: - resolution: {integrity: sha512-uHynBgqPkFhSYw2BCNGIRvFv5elnw/VaZk6AmZzpwrIB7OmeKB2/NNaIKVkU90rqziK5Tavn9u20HHtfTvSS7Q==, tarball: file:projects/arm-domainservices.tgz} + resolution: {integrity: sha512-BeSrIwwzJ8e+JQsXWbi4r+B7/UCU0aE/hoM3J2ZSM7thEjqjyTUVUF2up0BBCeb6Eujp78i8gwjx9kDKg+m6Rg==, tarball: file:projects/arm-domainservices.tgz} name: '@rush-temp/arm-domainservices' version: 0.0.0 dependencies: @@ -15045,7 +15045,7 @@ packages: dev: false file:projects/arm-dynatrace.tgz: - resolution: {integrity: sha512-MnAUN6KLUFLyFH9VQXm7hp9U8/HfVCQfG60PycCeuNeOksOXdGExPM6kmgPQ0N6g/ObDGcnEY+PR+QZfEHMbVw==, tarball: file:projects/arm-dynatrace.tgz} + resolution: {integrity: sha512-oANyRy8KFipAz2ZDwNR+e7vfeNDXhJ5UUJdDZPgXEMHMUB0VIaqk8iqAxKORKOgv3mB6Au2KQkclGHixmu0opg==, tarball: file:projects/arm-dynatrace.tgz} name: '@rush-temp/arm-dynatrace' version: 0.0.0 dependencies: @@ -15075,7 +15075,7 @@ packages: dev: false file:projects/arm-edgezones.tgz: - resolution: {integrity: sha512-v2qyQorhkPdU1pEh7I9mFAf+3GfQ8NKI583ib++GyTC3p/mJyWTYQAJRf9fWcWf+TTjRFsW1LmJrSs0Hu4n+Tg==, tarball: file:projects/arm-edgezones.tgz} + resolution: {integrity: sha512-+2e56zkHJG9Ou50fgKhbsrFsC9dDv89ATAItBeDTG5KAlnUcJC2heml5HZK0pjLlIal3qqoCFvQ5GbJvK6TDnw==, tarball: file:projects/arm-edgezones.tgz} name: '@rush-temp/arm-edgezones' version: 0.0.0 dependencies: @@ -15116,7 +15116,7 @@ packages: dev: false file:projects/arm-education.tgz: - resolution: {integrity: sha512-3amM+xuI6cykJGZyTKhXHmTNfRw/J4EYp08XAwub4kpqH5n0+z38LWjhoI//hHuQFVsLZ4Pozims56icgUlrHw==, tarball: file:projects/arm-education.tgz} + resolution: {integrity: sha512-VHgBprarm44/UbR4LULw2dxW5L4sf2b0sIXOf2VIVqFlgbxDT7HTkCWPZeTso2cGutQH020PQxnfQ2MogWVeSg==, tarball: file:projects/arm-education.tgz} name: '@rush-temp/arm-education' version: 0.0.0 dependencies: @@ -15144,7 +15144,7 @@ packages: dev: false file:projects/arm-elastic.tgz: - resolution: {integrity: sha512-S8rHkUXxXyeyUbRi3pU1JT8ECuFqfT5gXxK07kEchVdKKfCU5Dlxe3uuayxqSetuB931OACWksL5r0oSPzNK/w==, tarball: file:projects/arm-elastic.tgz} + resolution: {integrity: sha512-0+hpUWNMaoP/gT8V3pZTcTbRk4TctbkqRAgtksqaSdy7eRGlA0+AiJ6ykWHP0hg9OCZsXv66Z/PRB7H/EOVDMw==, tarball: file:projects/arm-elastic.tgz} name: '@rush-temp/arm-elastic' version: 0.0.0 dependencies: @@ -15174,7 +15174,7 @@ packages: dev: false file:projects/arm-elasticsan.tgz: - resolution: {integrity: sha512-BlEMVnmD+3jzmWPpvV0xMkGlqs4tz4NmdRAjl+EtycSetf19XpKwDEQbJHo5Z4yy4EE4ERDZzk6ksJXkvaisXg==, tarball: file:projects/arm-elasticsan.tgz} + resolution: {integrity: sha512-cPSiZfZ/20HItvSlkp64mX4CdWBLNfAwIkbYksQnmGr5oBPalJDHD/vAsFAVwEyEsSz80dBnC6fjQXXwE4u1MQ==, tarball: file:projects/arm-elasticsan.tgz} name: '@rush-temp/arm-elasticsan' version: 0.0.0 dependencies: @@ -15205,7 +15205,7 @@ packages: dev: false file:projects/arm-eventgrid.tgz: - resolution: {integrity: sha512-+RjW6GKKvhqUMuvC5uzbFTqvKlR9q43QRpNsKi35nXe6pqqaIivojqbxNxttM5jCaJhNxf2Y5slQKZEo/RFiSw==, tarball: file:projects/arm-eventgrid.tgz} + resolution: {integrity: sha512-V+vC8fskpaujJUOWdFIXTk0xzERVtMuxJolLTGi0U3C1MiSrGQPE5PujweesyfSlm+G+uNFfRAUV1Qv0hm+r8A==, tarball: file:projects/arm-eventgrid.tgz} name: '@rush-temp/arm-eventgrid' version: 0.0.0 dependencies: @@ -15235,7 +15235,7 @@ packages: dev: false file:projects/arm-eventhub-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-sPp9QJwT1ZhRwgJioU+4kdx05v2O4F7B+VHgFpkzK0redYN9pJsfjjDmLLtS4MLXl6Q/mg03I/G5tCkYzn1eiA==, tarball: file:projects/arm-eventhub-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-G1dabpx+gQql0rs/R5Ffxt+n7Z80mMagxqcOpeb1G8Q9YSnMhX56Wfpontoq9DDChfPaoLkijqv28c+iL8W3Uw==, tarball: file:projects/arm-eventhub-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-eventhub-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -15265,7 +15265,7 @@ packages: dev: false file:projects/arm-eventhub.tgz: - resolution: {integrity: sha512-Mil802lj1EHvYl2S/YV3mAubjIwchp8XBYt5HN/nDilw/MsIC9dbKFoa9lxSV0n1BsisQoP/H1FKxM3QgaJhug==, tarball: file:projects/arm-eventhub.tgz} + resolution: {integrity: sha512-n6D6i0XBsBIQ7hPnWL74IRmS83rXOCKNynzPd2FTdSvEnC8MwBZUhnBaZnCBKdrI68INxbFVd526whyM+jh31A==, tarball: file:projects/arm-eventhub.tgz} name: '@rush-temp/arm-eventhub' version: 0.0.0 dependencies: @@ -15297,7 +15297,7 @@ packages: dev: false file:projects/arm-extendedlocation.tgz: - resolution: {integrity: sha512-J/Y9g+tD5KoYQsL4smK0BQyVY9XNn29PRNO45SAZ2w+zeVAL7scDspHiUdn6Yx1QJz4ztPyR+Eq9OmdYKaO+WQ==, tarball: file:projects/arm-extendedlocation.tgz} + resolution: {integrity: sha512-krGJ9DPyirnmPixBoGMipAwnHfCQrErM+sM0NumGMe4wAJ9zXuLRFLEpqAqtEcEApPCtykjFh6JknpKVwu/cbQ==, tarball: file:projects/arm-extendedlocation.tgz} name: '@rush-temp/arm-extendedlocation' version: 0.0.0 dependencies: @@ -15327,7 +15327,7 @@ packages: dev: false file:projects/arm-fabric.tgz: - resolution: {integrity: sha512-z/L7iOtkj5NHCtLf5mD3zHqdAEGkrkoCPi6xM7p1QmrmSdT8DIlXyKN2/7g5zklySQDnFi6oN+ss1MJ11X1e7A==, tarball: file:projects/arm-fabric.tgz} + resolution: {integrity: sha512-4u6kKh1l8jg7Op7TgZ01rDJOQ+syARzRYjz0QfLkD2vL+ZDRDd3tVP8pgIvlmdMfrn6Jz01ZEJzsIWuGUr6GMw==, tarball: file:projects/arm-fabric.tgz} name: '@rush-temp/arm-fabric' version: 0.0.0 dependencies: @@ -15368,7 +15368,7 @@ packages: dev: false file:projects/arm-features.tgz: - resolution: {integrity: sha512-f7ciYuAP6IrDWhhPV8G4TcvlxsPw3LhQPHz4Qltcc/HJt0mukBdzwMztkCr+cOx4HW5vi5atUW0A8y/TKVUjLw==, tarball: file:projects/arm-features.tgz} + resolution: {integrity: sha512-iUtvMozoMBnZyUA1uayZiX+LXYTGXoVcuyRzsuvt07KV10csko/EpbqmcNcCz9uKrWjQetOKnbGmmTflBveWyA==, tarball: file:projects/arm-features.tgz} name: '@rush-temp/arm-features' version: 0.0.0 dependencies: @@ -15395,7 +15395,7 @@ packages: dev: false file:projects/arm-fluidrelay.tgz: - resolution: {integrity: sha512-dwffW5IROzrgFOqyLI1bAe0t0xnhMD15cl6Sdj5DkF6bzCNYdD3KF9Y1+pBdTUGu3ssLBni25v5QGY5SL9bHUA==, tarball: file:projects/arm-fluidrelay.tgz} + resolution: {integrity: sha512-Etl/SeURmlUubhR0Ob/D3CfQOzJ4u7MxstNciRUGqo02md8JeWqkPeXKmNFwdKHT5nvf/6DkZNNOtCEE0Av3Zw==, tarball: file:projects/arm-fluidrelay.tgz} name: '@rush-temp/arm-fluidrelay' version: 0.0.0 dependencies: @@ -15423,7 +15423,7 @@ packages: dev: false file:projects/arm-frontdoor.tgz: - resolution: {integrity: sha512-96aW16KXJae62lU4Pktin4qiP3KdaF5lOP/os9uyUFKM84ejYVGxK7SkoBrWBGTAi/2jR8+2hTs/OBTozMEh4w==, tarball: file:projects/arm-frontdoor.tgz} + resolution: {integrity: sha512-vKMvRmtgCZKMBNsY8f7nK7e3mVMAdODJS7ZqmQtSd2UVLmoIRt11ZvEoKSJpVboj7WVP9KMHnZdvhYZQE2Lpvw==, tarball: file:projects/arm-frontdoor.tgz} name: '@rush-temp/arm-frontdoor' version: 0.0.0 dependencies: @@ -15453,7 +15453,7 @@ packages: dev: false file:projects/arm-graphservices.tgz: - resolution: {integrity: sha512-ACaHUQ658CBmi788RY5wdXy3efeO8ifhgx8RYC6bxtrKkg8Y+RbdfsyKYr5qRtFWo7DgONuk8DoCyWbDK5ccUg==, tarball: file:projects/arm-graphservices.tgz} + resolution: {integrity: sha512-3NvfLQ03T72sfniuq9QhCd1qL/V9fxnLa+v6ihi+ECb9w+vHrpmseIdf9OyMucpFJ8Aw/3xoKURHcOAU+Qj1Ig==, tarball: file:projects/arm-graphservices.tgz} name: '@rush-temp/arm-graphservices' version: 0.0.0 dependencies: @@ -15483,7 +15483,7 @@ packages: dev: false file:projects/arm-guestconfiguration.tgz: - resolution: {integrity: sha512-54Exk1i4+TTB18+81gI9L1BF9HP+tP5XJ8ODYTbzlORRPySb5rwqbJqMiZwFlh9faDSNUb01NuXe7EfYcUGoeQ==, tarball: file:projects/arm-guestconfiguration.tgz} + resolution: {integrity: sha512-cA1FyNxt0pSSEU1S66JOFfxVu6XqvRNBQ2q7QwdoH3+oic3Wpm9tW0HeDic/Pzf1DqCiw91fpg4+/ws9CFX7uA==, tarball: file:projects/arm-guestconfiguration.tgz} name: '@rush-temp/arm-guestconfiguration' version: 0.0.0 dependencies: @@ -15512,7 +15512,7 @@ packages: dev: false file:projects/arm-hanaonazure.tgz: - resolution: {integrity: sha512-O3fMcEv1vM0bdXlP1+LArFrWvkzDEySXpA+5qM2bEz2vMBpuTYJ6NgpE5Ae9HMz1L2FksgeJPW6TVgZ4BAGC+A==, tarball: file:projects/arm-hanaonazure.tgz} + resolution: {integrity: sha512-bGd+gt1jDNuGL/Rm2eRj4XEvxEtEF8PiOv+SBhQ9agGH7zFTWipoVkYVjnHUU1vUzLyc+GUwcLIka2xO2gc7Vg==, tarball: file:projects/arm-hanaonazure.tgz} name: '@rush-temp/arm-hanaonazure' version: 0.0.0 dependencies: @@ -15541,7 +15541,7 @@ packages: dev: false file:projects/arm-hardwaresecuritymodules.tgz: - resolution: {integrity: sha512-WhMDge+HlNGk45vcZaUuo+yy7wptjaryc/zkRxGmU7e6vMMXuJ6Cb/qnIIjQnxhoqafmz71bV39MrZPGs9zFhw==, tarball: file:projects/arm-hardwaresecuritymodules.tgz} + resolution: {integrity: sha512-uv3Mq0PPI1ZgkGmfUT83p44xUO0PaUAeoUbRtExLlt8Jok+MBWxfnzUQWIfX6Rzq7PCnlmK1kWiKaTbvrPg18Q==, tarball: file:projects/arm-hardwaresecuritymodules.tgz} name: '@rush-temp/arm-hardwaresecuritymodules' version: 0.0.0 dependencies: @@ -15571,7 +15571,7 @@ packages: dev: false file:projects/arm-hdinsight.tgz: - resolution: {integrity: sha512-XvUPI6T8GT53As8dAq1BXnKHO3IlWrLfBGVuBud2zg3bK8RfzD+jMJm4fCwsnxaoPpbvzsKFJWRNtodyxEafIw==, tarball: file:projects/arm-hdinsight.tgz} + resolution: {integrity: sha512-zMrL7ofN8+te6KaIQmgTYzYMlHPHJRuFEEgHM8ZLuAimEW576RPs8KXvXwuofem4NQgWSc7bqUwK9Iu1P+6aog==, tarball: file:projects/arm-hdinsight.tgz} name: '@rush-temp/arm-hdinsight' version: 0.0.0 dependencies: @@ -15602,7 +15602,7 @@ packages: dev: false file:projects/arm-hdinsightcontainers.tgz: - resolution: {integrity: sha512-QAtB2Sb2TJO4cogGdUAi/Q7RgSbrynsqVRTxUGtnlfRFNlG0Lu+n8MftUWhmXLWAUdYyHLEY5pXWU5f41NY12g==, tarball: file:projects/arm-hdinsightcontainers.tgz} + resolution: {integrity: sha512-h+ps8HfICBAgLR44hUimb5E1+uXXoIH3JdG/2A3i7p7v42Ugx/sItLlA9fWNGIvPzjY4PgVU5I6MgvZ91Kop3Q==, tarball: file:projects/arm-hdinsightcontainers.tgz} name: '@rush-temp/arm-hdinsightcontainers' version: 0.0.0 dependencies: @@ -15632,7 +15632,7 @@ packages: dev: false file:projects/arm-healthbot.tgz: - resolution: {integrity: sha512-DQ80GrqmQ2QEVcNl1Yl9U4pHYwieUvE0lSd9KXiq2l2d2I/dAeUT9VpZ8i1EWlD2kqUyhRb2aAzG9pMbG7v+JA==, tarball: file:projects/arm-healthbot.tgz} + resolution: {integrity: sha512-+ArxG70DUfSapmVfsUS3+qtnoVYcGnjip2GZM0saz5+f0hZ22M8mt+hK8IXxTwV1FlputOllFK28VMasXnn32g==, tarball: file:projects/arm-healthbot.tgz} name: '@rush-temp/arm-healthbot' version: 0.0.0 dependencies: @@ -15661,7 +15661,7 @@ packages: dev: false file:projects/arm-healthcareapis.tgz: - resolution: {integrity: sha512-0KuF6Ft3w+wfKFcPFxLMj4YOiztGfU5pBMTuf6Q74owkZFewXGoIWKcppKsUWI3ap4EzA1SwHFIr3LsxmZ4RVQ==, tarball: file:projects/arm-healthcareapis.tgz} + resolution: {integrity: sha512-XBGaQMB4VgyAgGLpvJR9sq16/fF0jft7xTk5YuMo/RU/Fz44iBlqKxsLhkyApe6mX5ntExLzcPyx/+ClgvsblQ==, tarball: file:projects/arm-healthcareapis.tgz} name: '@rush-temp/arm-healthcareapis' version: 0.0.0 dependencies: @@ -15691,7 +15691,7 @@ packages: dev: false file:projects/arm-healthdataaiservices.tgz: - resolution: {integrity: sha512-tyUVQWuRSVdZRjkIIEh5b4fZckDMvvH7VO1rsKdnfXJ+4tNr3u4ODFAPPokAPxM7oh5dY9zDx4v3DlU8B2ykyw==, tarball: file:projects/arm-healthdataaiservices.tgz} + resolution: {integrity: sha512-doiKxRc+38oVx0Qt+lctNPslUlNkW0blc5gXsZJz9pQbtd7TBjIqZarC+qVHMuz9YlmEqbzegwmBiCmo9w56Sg==, tarball: file:projects/arm-healthdataaiservices.tgz} name: '@rush-temp/arm-healthdataaiservices' version: 0.0.0 dependencies: @@ -15732,7 +15732,7 @@ packages: dev: false file:projects/arm-hybridcompute.tgz: - resolution: {integrity: sha512-A7+V6V2mM+iJkWIhyHHxwFwt5oGrgdlu4gcYutMpglOzI3GPtS8r9iQPQFEai8whcLa1KeT2njUD7TA4HLseVQ==, tarball: file:projects/arm-hybridcompute.tgz} + resolution: {integrity: sha512-GbBxQuYrq19FZ59UFShF5lBTkFwItJzW3WvsG8XqLOvSx7vLQYbVF66JoWA61Do1X5xnkWG1sfSFXH1Wi0oTMA==, tarball: file:projects/arm-hybridcompute.tgz} name: '@rush-temp/arm-hybridcompute' version: 0.0.0 dependencies: @@ -15763,7 +15763,7 @@ packages: dev: false file:projects/arm-hybridconnectivity.tgz: - resolution: {integrity: sha512-toWD1QwUpQt4nvOJ6qOkz7hKXktq+YMMTGlRA2pup/Plr1put0Hfmw4hZpb69la7oULK8OAvWMmrIMhkHpYkEA==, tarball: file:projects/arm-hybridconnectivity.tgz} + resolution: {integrity: sha512-a+0Rw4wx99bkMcZ2/pXvGnt88WPAYVCzx/6RIyMxUawfz7HbUU8J7NhXDhd6VYkyOeHLlv1PT+JzKpxCWvky4g==, tarball: file:projects/arm-hybridconnectivity.tgz} name: '@rush-temp/arm-hybridconnectivity' version: 0.0.0 dependencies: @@ -15791,7 +15791,7 @@ packages: dev: false file:projects/arm-hybridcontainerservice.tgz: - resolution: {integrity: sha512-Ch0B+r0E5lcafqv5mJtERBZ2h/CTci+qi7UH6ERV312+H4i5AHiCAlM9QGuEYbvy/lxf03oqPY0hv9550c+mUw==, tarball: file:projects/arm-hybridcontainerservice.tgz} + resolution: {integrity: sha512-lQu/RLkt4xTxb0/ULu0NgTk/3DDP6Cy83qupaQ7hbxARXILPjEsekIhPpyLDqyr58h5kaFOm5qfMpi/cuC7ocg==, tarball: file:projects/arm-hybridcontainerservice.tgz} name: '@rush-temp/arm-hybridcontainerservice' version: 0.0.0 dependencies: @@ -15821,7 +15821,7 @@ packages: dev: false file:projects/arm-hybridkubernetes.tgz: - resolution: {integrity: sha512-A1KwxoKJj/A9qMsxA4eCbKwi659yvvc8ZDDgM0FHpB8+89nK4qlBEyZeMb+/JjuhG0yqY5F2jbEUHeD7X+13Jw==, tarball: file:projects/arm-hybridkubernetes.tgz} + resolution: {integrity: sha512-fzcQSxgmL/OD8xu4fFtRjNA4pm0njzVzm5bnM+efb4cln/U6RCFiH34AX0u6OSUCLEyMFb1aLqUiz1xYKvFknQ==, tarball: file:projects/arm-hybridkubernetes.tgz} name: '@rush-temp/arm-hybridkubernetes' version: 0.0.0 dependencies: @@ -15850,7 +15850,7 @@ packages: dev: false file:projects/arm-hybridnetwork.tgz: - resolution: {integrity: sha512-TKOU3765APfF1sXCtWFmS9kkAFlLFu18lc7ABS8GWlnXLAjDCvGVCezXZzpqMLNsTN5acwUXlnyNj3+Tlsai/Q==, tarball: file:projects/arm-hybridnetwork.tgz} + resolution: {integrity: sha512-UqabuG49toOIivd0LnUDv2D8YMuC1cDaqfNx6wGTp2MC0E4DwSwUhtjnM8dFr2j1T2QqZuUL2IYm6lTvv/0gHw==, tarball: file:projects/arm-hybridnetwork.tgz} name: '@rush-temp/arm-hybridnetwork' version: 0.0.0 dependencies: @@ -15880,7 +15880,7 @@ packages: dev: false file:projects/arm-imagebuilder.tgz: - resolution: {integrity: sha512-+vGAgUGPlPSaN21fzMWrEZmx+AZWsdYRpByPeMhTwYhfVi4uzbdXyTpOVaMkxaqS0hhrxyRE5ZnYvwvcZT2dlA==, tarball: file:projects/arm-imagebuilder.tgz} + resolution: {integrity: sha512-bgOd8CWBMnqkGsqB9Uv7u6+D8ewJNMB7vGI8+jG9hqCTJ7kTWAZj/NsdyO9mou9sZoBx7hNjalnUfDbKeHK02A==, tarball: file:projects/arm-imagebuilder.tgz} name: '@rush-temp/arm-imagebuilder' version: 0.0.0 dependencies: @@ -15912,7 +15912,7 @@ packages: dev: false file:projects/arm-informaticadatamanagement.tgz: - resolution: {integrity: sha512-i2CziwTSBg8j5RhNjNmpP/LinKwwy3eyQT8oufZsfgw7p6jpIpxcs2P5Ra6DV5/pfBZ5/6esUY8Vqpx1kHYF2w==, tarball: file:projects/arm-informaticadatamanagement.tgz} + resolution: {integrity: sha512-8mCDe8/jbidJ8nwzpfnDp24JUTnvEDDIRwJUxzkWATcYLWkeCa/LssuPFJ5t3bgrF5bk190K+a7WSyp89LtoQQ==, tarball: file:projects/arm-informaticadatamanagement.tgz} name: '@rush-temp/arm-informaticadatamanagement' version: 0.0.0 dependencies: @@ -15943,7 +15943,7 @@ packages: dev: false file:projects/arm-iotcentral.tgz: - resolution: {integrity: sha512-S/L2FGlf085ipWUHAhJ3fvhYCWn+9KBXghnVsCz8AJd5xwinrBk8McdtTsufGvgeSstbi9jVJQeaxhpu9QGUlw==, tarball: file:projects/arm-iotcentral.tgz} + resolution: {integrity: sha512-2D521hNDRACnuDvTPLQnvWHGwJcrdZk4Fc5xijIOr+l3dKIJ4vTpKXaFVU/v4ft3bZcjJIjxLr9XnQ6f0KMnGg==, tarball: file:projects/arm-iotcentral.tgz} name: '@rush-temp/arm-iotcentral' version: 0.0.0 dependencies: @@ -15972,7 +15972,7 @@ packages: dev: false file:projects/arm-iotfirmwaredefense.tgz: - resolution: {integrity: sha512-roRyeym+QIWhzqB0KXnMiMldmUD966AITQr7wx++Gd1TH1Ox1CDg9UkGWvgqsRA4I7upSLBfJa8/931L6ZUMEw==, tarball: file:projects/arm-iotfirmwaredefense.tgz} + resolution: {integrity: sha512-KvY9/ulvRGT+nnUKLcZ4xvAJG/wayvAIeuMIBo4Z8CxClUkGIjwVTpsqiU3DkLRvnZ7U4hr2QPM9wxblC6oKTg==, tarball: file:projects/arm-iotfirmwaredefense.tgz} name: '@rush-temp/arm-iotfirmwaredefense' version: 0.0.0 dependencies: @@ -16000,7 +16000,7 @@ packages: dev: false file:projects/arm-iothub-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-9p4Psf6Q7zHS4UWcwAAWgkXbRxQRTyu3HOqE7+7PKk4tkN0876cHgM0gSxnFoHXKnDscQhl2ZaXJyQjvRKUf7g==, tarball: file:projects/arm-iothub-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-HlPbflppVL5rbwqZ+F7bUBcLakK06k+6JiwlZUuzq7W8hqekpCyM2Yj0isVZjIgsqnRqxUqWexTXg3Dx0rcH5w==, tarball: file:projects/arm-iothub-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-iothub-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -16030,7 +16030,7 @@ packages: dev: false file:projects/arm-iothub.tgz: - resolution: {integrity: sha512-GDWMfgWejcd92dDdM1KyoeNkpgyx4WSUxutN8swNawRNJYT5+79whhcu2qmd0RbxihyEXkl6eYd8t5oycIAiYw==, tarball: file:projects/arm-iothub.tgz} + resolution: {integrity: sha512-ZGt1udk09jEQyMeceUkptI04ybH2WE4G0Htafng6Vq2107kymYtHmgsZUuT/eZCXIRceVWEKyvmHpvA0lUdHlg==, tarball: file:projects/arm-iothub.tgz} name: '@rush-temp/arm-iothub' version: 0.0.0 dependencies: @@ -16060,7 +16060,7 @@ packages: dev: false file:projects/arm-keyvault-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-M5CO2jCGaHi06jeamT94/CDb/tg0XE803bfDDaMlnT2qymaapX5N5UVKhkvD5GAJwGRuNWFbfkmqrgh4e8am9w==, tarball: file:projects/arm-keyvault-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-FzMoxXhLTjGCraaNF0se2eYdVZ5Zr6fw0I28sCzEqFTOxJ1mGkWW5GWkIfSvNFLkvcQIyRPEwR4LgWK8fgFJng==, tarball: file:projects/arm-keyvault-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-keyvault-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -16090,7 +16090,7 @@ packages: dev: false file:projects/arm-keyvault.tgz: - resolution: {integrity: sha512-GrAcYI1zUjT62D2FT7LSERerJlENsfhSU8lxob8JGELfBuR+55a2crllastCyE49Ztl996vo+mlxJEWgWniZ6A==, tarball: file:projects/arm-keyvault.tgz} + resolution: {integrity: sha512-4pdnv0Eksjyz3vyzcU1UJFHLfRIjCft2ZmldR7LGf8bUwQF7gkdE3G7rt0GqPuDrl6hHZjZbrKT89PEDQyYsEA==, tarball: file:projects/arm-keyvault.tgz} name: '@rush-temp/arm-keyvault' version: 0.0.0 dependencies: @@ -16120,7 +16120,7 @@ packages: dev: false file:projects/arm-kubernetesconfiguration.tgz: - resolution: {integrity: sha512-jZGiOFKHxeiWcResE29LFmwEB3zl41e1cJwpKXyhncUpQOPN4llbj0RqScgnTGee63QZMbZEudyIGeN/TTzg+g==, tarball: file:projects/arm-kubernetesconfiguration.tgz} + resolution: {integrity: sha512-HfU8LcbWaeQjuFlsEZv2AS2lUHPe398ZrqDdxyTTWgfwkBSLOiiUPJZsLy2ORuueY9ENCIocUwqE8BqQieQErg==, tarball: file:projects/arm-kubernetesconfiguration.tgz} name: '@rush-temp/arm-kubernetesconfiguration' version: 0.0.0 dependencies: @@ -16150,7 +16150,7 @@ packages: dev: false file:projects/arm-kusto.tgz: - resolution: {integrity: sha512-689AavaHrysNgAtoZ4Sm5uUWVGRLxBi8EcWu4/dBMnS0gJ/GAHJrSAmMABQ+qGxBzLfaX3AHvHcX+FhpG6CCmg==, tarball: file:projects/arm-kusto.tgz} + resolution: {integrity: sha512-ww+EgAkR+0hQ3d6lEMiUHxKoWGuJQTpjuU9cjxUyyOTgVD1vZFxi7BQdPeHrD5x7fbaOyqKYTcHygpOItL8v7g==, tarball: file:projects/arm-kusto.tgz} name: '@rush-temp/arm-kusto' version: 0.0.0 dependencies: @@ -16180,7 +16180,7 @@ packages: dev: false file:projects/arm-labservices.tgz: - resolution: {integrity: sha512-qwonIVw07NCdoojfY+fUQICI+OppdVZ+QzuBMv91fJKVR0Ol67AoMrNXtVkvKigwMa8mVjORLreT4ZEwrDGNFw==, tarball: file:projects/arm-labservices.tgz} + resolution: {integrity: sha512-kNvQmjKo4RehFKDEvTAKVvmNYkcgBrrgIrQ1E5DvbHtY5lWhQ5DET3EnsGdipwHUr+KbzvU3+nHE+w+5zG4yjQ==, tarball: file:projects/arm-labservices.tgz} name: '@rush-temp/arm-labservices' version: 0.0.0 dependencies: @@ -16210,7 +16210,7 @@ packages: dev: false file:projects/arm-largeinstance.tgz: - resolution: {integrity: sha512-iEjio4MLyEkQp+luSyvOyMT8a3q4GKbrtmq/ehi7zpk4uToVKEVuYyVylIRf4Eh+ciaLmxRroT5ruXw7MsFLsQ==, tarball: file:projects/arm-largeinstance.tgz} + resolution: {integrity: sha512-drD8yv8Ja+Z3dAmA4FfSBntGV8RMZ7OtIdx8F6TQFLgRtBjAEVKm9Hk/DvMlQJnv55qXXFHpYKWYgIrJZin+Yg==, tarball: file:projects/arm-largeinstance.tgz} name: '@rush-temp/arm-largeinstance' version: 0.0.0 dependencies: @@ -16240,7 +16240,7 @@ packages: dev: false file:projects/arm-links.tgz: - resolution: {integrity: sha512-rx7ZkivNlhfJW5ERvq1o12dC9jiOyGfU2g+UJsCvy/FV2ewjcgSwvHi9+iQ8DElgQNQaYvD2P0mTjbbo3Z8f8g==, tarball: file:projects/arm-links.tgz} + resolution: {integrity: sha512-M/ShkqTnPESJ7vHfHfToVqubiGCXA6oETnYcf1amuctOuJBD5aB5DzBlX6SJvVrwR0qLzCcKNlZYDBz0+GYmDA==, tarball: file:projects/arm-links.tgz} name: '@rush-temp/arm-links' version: 0.0.0 dependencies: @@ -16267,7 +16267,7 @@ packages: dev: false file:projects/arm-loadtesting.tgz: - resolution: {integrity: sha512-1Fdzhu000nxPJjVkKeDt7h1VgD1COGbOCkWpcxH3kPvyAKV8Egk+uYCcuPVye3PEymH50qMnsVnZNud0xAjVog==, tarball: file:projects/arm-loadtesting.tgz} + resolution: {integrity: sha512-szrfSA6Jv3cCx9CpIDzvbtNYahMosoUs+eyRwKTPHyUHtxB11eUqCuaOABEVwHnjKPogrndppPmKZkqLZPqvHQ==, tarball: file:projects/arm-loadtesting.tgz} name: '@rush-temp/arm-loadtesting' version: 0.0.0 dependencies: @@ -16296,7 +16296,7 @@ packages: dev: false file:projects/arm-locks-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-PtfNgc4B8DcUHVpn2xDvz21SRbkXdHwvEjX9D8daagbSHmnZq/JT5Vzg6jFaQE6oFt6uqNuA40DSNK74cGAtfA==, tarball: file:projects/arm-locks-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-1Z3p5AmPTCU65/lO0MAyXx8Tl3YiFhw/uj7pMocYHHx4/GSYtNH5dlYBv0gJL4qGQhTVQzhARrq9zyvpRKNbqw==, tarball: file:projects/arm-locks-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-locks-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -16324,7 +16324,7 @@ packages: dev: false file:projects/arm-locks.tgz: - resolution: {integrity: sha512-b5vjzRQo3jKDsNupC/S8CnCszmbDkOkuYwkpdPt0D7uU9GiwdbpFOhkYMa61O/B3Ap5pQIaSzzBZS7zdiYJUaw==, tarball: file:projects/arm-locks.tgz} + resolution: {integrity: sha512-dz1Mi5cEB9bZsAFcfFfuvG5tWFxqSiG9YUMVRmziFB0zfpPVwfFRxr8KWKKE/n1zG2LWAI+7PCacwwkHDXlzzQ==, tarball: file:projects/arm-locks.tgz} name: '@rush-temp/arm-locks' version: 0.0.0 dependencies: @@ -16351,7 +16351,7 @@ packages: dev: false file:projects/arm-logic.tgz: - resolution: {integrity: sha512-Pipoi1SJt+gmNB0ZyyTKJIk4FP/dYea3LysN/bkM1mh1+dmKhelf9dWJOO/itjXgnjRaHCbnnEEPjHUlyKfU7A==, tarball: file:projects/arm-logic.tgz} + resolution: {integrity: sha512-jDteyY3Lc1svP9ii97wF1BgJrww5QmdWhGY37EKKAtwN+JxHVXQtKOn2rYuPVZ/0J/J2cZBhuLGPl4zdth6CxA==, tarball: file:projects/arm-logic.tgz} name: '@rush-temp/arm-logic' version: 0.0.0 dependencies: @@ -16381,7 +16381,7 @@ packages: dev: false file:projects/arm-machinelearning.tgz: - resolution: {integrity: sha512-4ouvVQUeU++VLv++AIepntQvXHoNspilDl3+v5hTFvHefl8PZCGRiL+NJhQTFGhkYnYQ48zwixOcXA2aWfCv3w==, tarball: file:projects/arm-machinelearning.tgz} + resolution: {integrity: sha512-wIB19ohpARdGZZUYL5WD6lZyYgSelyMW9YUfOiR+uYfN6G95+oWc7Xz3KDZuFSbJOXU3vSlqADtVbYBP3kPjOg==, tarball: file:projects/arm-machinelearning.tgz} name: '@rush-temp/arm-machinelearning' version: 0.0.0 dependencies: @@ -16412,7 +16412,7 @@ packages: dev: false file:projects/arm-machinelearningcompute.tgz: - resolution: {integrity: sha512-xFXNGqAGc1b3eizVo0MgSZGBmRCPCXVHSRC/ObP+mRfHvUT2Lu5Kelx5O3ZTUIhxdCj4xUiMGgfxVnXfkSjjzw==, tarball: file:projects/arm-machinelearningcompute.tgz} + resolution: {integrity: sha512-cvPobu+1EnIzvSHACDZwHFzpR8FR8Q5k52UgAH1h+8/vpH0g32MjaCg5nVblDD/OMDC28Fa15lKhzlEndKJMKw==, tarball: file:projects/arm-machinelearningcompute.tgz} name: '@rush-temp/arm-machinelearningcompute' version: 0.0.0 dependencies: @@ -16441,7 +16441,7 @@ packages: dev: false file:projects/arm-machinelearningexperimentation.tgz: - resolution: {integrity: sha512-P1txVffFiVlbcx/2GuMBAIreY6zs77rdkuPEX3vtHQ4ToA4MTJgVHRoCe8lRM+IvFdmxn8pq024J1QSe7F6Rjg==, tarball: file:projects/arm-machinelearningexperimentation.tgz} + resolution: {integrity: sha512-JkfrEtaqwMlSQ166826l623lc7UCNAm4k/3fUNDXtAjDk/2MxPye5cZfcqI9DIfKGaMa2PWbA61Sqlb2UvyCXg==, tarball: file:projects/arm-machinelearningexperimentation.tgz} name: '@rush-temp/arm-machinelearningexperimentation' version: 0.0.0 dependencies: @@ -16469,7 +16469,7 @@ packages: dev: false file:projects/arm-maintenance.tgz: - resolution: {integrity: sha512-k8RDoMl1Kuoc634KQfLEvmT/EWuVRqkA70dlsf+70YYPHLuP2KHmV7QMPrBYl4DrzPl6bHJdSaNcBlz64rGtLQ==, tarball: file:projects/arm-maintenance.tgz} + resolution: {integrity: sha512-rIM4/4JoWUn8S1hX1LWYlz5v+cGT46mxD7w0TZOFwU4UpZPJLUia+b4iVTrcpSYUftINi89WplW7bLm79Nnm3g==, tarball: file:projects/arm-maintenance.tgz} name: '@rush-temp/arm-maintenance' version: 0.0.0 dependencies: @@ -16498,7 +16498,7 @@ packages: dev: false file:projects/arm-managedapplications.tgz: - resolution: {integrity: sha512-F2MyIKu6zWhsy41KaNumSn02/LFa9IGX9lwdfTCEg3lJsN4azhyPjvHdH15gQ4HAp0+eOiSWldtkgDk/PLhHqg==, tarball: file:projects/arm-managedapplications.tgz} + resolution: {integrity: sha512-VyBqKlv/NSRFT9xpGm+ewqepHIbZwf/LALuoN5DQeZUixkCJt1BlyYIBX7k1n/kl1wW7qCf/qhUOipEb34AbPA==, tarball: file:projects/arm-managedapplications.tgz} name: '@rush-temp/arm-managedapplications' version: 0.0.0 dependencies: @@ -16528,7 +16528,7 @@ packages: dev: false file:projects/arm-managednetworkfabric.tgz: - resolution: {integrity: sha512-bPk5XVaEUO0zXb9yaW2Hj9Y/pG1iL/LYEO8nDpQgEHwuHCYeM/swIdmdr1Rst3Uo3zzN+/ew7zqZJ8QTPUHnFA==, tarball: file:projects/arm-managednetworkfabric.tgz} + resolution: {integrity: sha512-SzoO/ozeP+oX9qsmS03zRPTHJYfsHa9mXa9xbG30mvzBDZFnfftRUEeiizeGDw0qKyykllEVdTFLZ6tiPyPzkg==, tarball: file:projects/arm-managednetworkfabric.tgz} name: '@rush-temp/arm-managednetworkfabric' version: 0.0.0 dependencies: @@ -16558,7 +16558,7 @@ packages: dev: false file:projects/arm-managementgroups.tgz: - resolution: {integrity: sha512-Rwe6B3BbES8Hz0QVLsteOgXL/beMxNi107qlQGxbh30VHPzYLBtdccHPhwSq62QvbWcVyIPchcMACdgz1S0j/A==, tarball: file:projects/arm-managementgroups.tgz} + resolution: {integrity: sha512-oJM0IeWubpGBkUHv9B4FmE3B/EKI6I5IbB5IcuXIWJkgquYgDiKI1LyXEpqCGweU12i2vhZLbmEim9TtvjN9Rg==, tarball: file:projects/arm-managementgroups.tgz} name: '@rush-temp/arm-managementgroups' version: 0.0.0 dependencies: @@ -16587,7 +16587,7 @@ packages: dev: false file:projects/arm-managementpartner.tgz: - resolution: {integrity: sha512-kd3+k97PQpHgAfNIgJNBQ7TEIRXrwxZddxEErVl+rOCwRm+Y0AjSg/WtmaoMc87iY982AnTDg+HCSMQa4N8r6w==, tarball: file:projects/arm-managementpartner.tgz} + resolution: {integrity: sha512-OYrmWS6sAXGvoXO3+gJF37XBDlCRmaX94cV/bUlhdmVjI6Nb6mFchhk9/FMunTmL9yP6GLVGmclK30YafDI8/w==, tarball: file:projects/arm-managementpartner.tgz} name: '@rush-temp/arm-managementpartner' version: 0.0.0 dependencies: @@ -16615,7 +16615,7 @@ packages: dev: false file:projects/arm-maps.tgz: - resolution: {integrity: sha512-EBCgiitVtdwiTXYU+bQl8G8MMa87FBVnL6uxNK4Fve8hjxVJM8Rec1gT1VEIsBCoIRzEJDxxF3Cgtq+QnR7EDw==, tarball: file:projects/arm-maps.tgz} + resolution: {integrity: sha512-gGA7A8o8MoXMMVZTlk6DYqRRab/ImhHlcwVBhy8Zbdtgm82OStiA2nwSIHMEoP/j/TPXVC69dOBgBKy9OINK0g==, tarball: file:projects/arm-maps.tgz} name: '@rush-temp/arm-maps' version: 0.0.0 dependencies: @@ -16643,7 +16643,7 @@ packages: dev: false file:projects/arm-mariadb.tgz: - resolution: {integrity: sha512-oPXvkTJpAHzDYcEpsh5jc8zxUB6xLl0R/DrC5uzqq09dR4WZjEUsvb49nE/ze8xSQHfrlZCq6Q37Y5tzdapyNw==, tarball: file:projects/arm-mariadb.tgz} + resolution: {integrity: sha512-NxX/JPWcsKpqVcNevLOzMWdbX5YY64cnJLQSo552gyxrvodMDDGaXUjGuUYs8Cvg0uq9RfyI4HzSsQ3HmKp8jA==, tarball: file:projects/arm-mariadb.tgz} name: '@rush-temp/arm-mariadb' version: 0.0.0 dependencies: @@ -16672,7 +16672,7 @@ packages: dev: false file:projects/arm-marketplaceordering.tgz: - resolution: {integrity: sha512-DZVYIj3H/0DQkk5Ec0fk+1x/6aGAXv02onoajTw47sFlNgCCWKwI+4P6PmGpYhgqPM2GRCTrMATu26sdEn87Wg==, tarball: file:projects/arm-marketplaceordering.tgz} + resolution: {integrity: sha512-eAyFCBeDAL0u+NHvxr1WEiRELrncs/yZpo+96xVwrhzTiRcdXZcPsmgphyC2bXFGGbERzEOtZwBqSgnPmMd/wg==, tarball: file:projects/arm-marketplaceordering.tgz} name: '@rush-temp/arm-marketplaceordering' version: 0.0.0 dependencies: @@ -16700,7 +16700,7 @@ packages: dev: false file:projects/arm-mediaservices.tgz: - resolution: {integrity: sha512-izgi8ySNj+DWeqIV2fMh5pt/TwpjcUZ2gyS5IosZC4oKkqq/KMw90yefOJIIyAEFpCqLr8MkVQedaB7Db57R5w==, tarball: file:projects/arm-mediaservices.tgz} + resolution: {integrity: sha512-hbWekKUIaEOXaCzofT8MT65BLUmMcKu8rsRCUxoa21lclSe117zoq7vxMEFeznBKByNcgGPvG2rdNVEN85iIlw==, tarball: file:projects/arm-mediaservices.tgz} name: '@rush-temp/arm-mediaservices' version: 0.0.0 dependencies: @@ -16730,7 +16730,7 @@ packages: dev: false file:projects/arm-migrate.tgz: - resolution: {integrity: sha512-tNfNYYzMi1DCwbUKPK3B4z9hmQtSR60MQSJj5pNAowb/UPtUBNVwed87bsa9bTY+Qxifn4MGG7mbCT1IwQofZA==, tarball: file:projects/arm-migrate.tgz} + resolution: {integrity: sha512-X+PG3Ezc3WM5hZeyK40diE6lMIg2Vro+B3POXyhNdMuIq6COIArHyDjBL9lkzJzxjfrcTJFxZN7LsVfgM10L9A==, tarball: file:projects/arm-migrate.tgz} name: '@rush-temp/arm-migrate' version: 0.0.0 dependencies: @@ -16758,7 +16758,7 @@ packages: dev: false file:projects/arm-migrationdiscoverysap.tgz: - resolution: {integrity: sha512-BcJQ89TKzElrIiaXh5YtgDhk8X+lwrl0BIiKJz2QUhpR9OMg3mjj4eq/oS6JoOCcNDKOxjRSCpXx6HywG1L5vg==, tarball: file:projects/arm-migrationdiscoverysap.tgz} + resolution: {integrity: sha512-PMEHA8wqOUylWp3e5/q/9Q893e03qKcdf6KTultwod0lvLI6jDmwMNiuaSimhX7arDFLqj6U+dOi0BCOcAN2yg==, tarball: file:projects/arm-migrationdiscoverysap.tgz} name: '@rush-temp/arm-migrationdiscoverysap' version: 0.0.0 dependencies: @@ -16788,7 +16788,7 @@ packages: dev: false file:projects/arm-mixedreality.tgz: - resolution: {integrity: sha512-gbmVTEZBfQMTMyy8mxsSd4vbEtMEO3EFJcj/OUDqULJ4lWWF98X+jm26tAjZegg6TBJfa6ADf4rzbB5r3fKMkQ==, tarball: file:projects/arm-mixedreality.tgz} + resolution: {integrity: sha512-ASiwxu/fX6hMzgTxmlZte0kmuDc3ppE+XwF9sBx6WhGwZ95mvXA5x/z5bmIz5TIHCsbsj4Sma5jUfhuCFoUE5w==, tarball: file:projects/arm-mixedreality.tgz} name: '@rush-temp/arm-mixedreality' version: 0.0.0 dependencies: @@ -16815,7 +16815,7 @@ packages: dev: false file:projects/arm-mobilenetwork.tgz: - resolution: {integrity: sha512-bqG6WdkfosSkD/X4uHK6ajyxmEYfat5nqT/eM7Ts/S7agguMOYEoMIi7sV7Tl8b+aLpg8H+jIzOtGPiXC4Jj1A==, tarball: file:projects/arm-mobilenetwork.tgz} + resolution: {integrity: sha512-S4QWyu/vDNk0qYgLlZ3ckB0f5yWIiQousINAxVAwb5w1hLzQEQUi0eHRsWH4i12w+0do+ljeZs60lbQQOE1NqQ==, tarball: file:projects/arm-mobilenetwork.tgz} name: '@rush-temp/arm-mobilenetwork' version: 0.0.0 dependencies: @@ -16846,7 +16846,7 @@ packages: dev: false file:projects/arm-mongocluster.tgz: - resolution: {integrity: sha512-EU8WPXxVnF2TP9sFdHD+Fhu0oD4WBj2gtulPY6pw393PtU2cp7IyaeETiBLyH2xxw4WRCyX1pjtNxADgOWpq1g==, tarball: file:projects/arm-mongocluster.tgz} + resolution: {integrity: sha512-C+Fh0CPft28MXX2huCTJ6UMZoBvu50cB2jlvAaHN0EsOCRHSgzeT3L7RkqgxlRsMypTy4aa3msN080B5T0KIiQ==, tarball: file:projects/arm-mongocluster.tgz} name: '@rush-temp/arm-mongocluster' version: 0.0.0 dependencies: @@ -16887,7 +16887,7 @@ packages: dev: false file:projects/arm-monitor-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-7ZbHeBibWftYjaS1Fy0HXDIV6LW+N7gTGaiK9xPDpjcddK1DpEIugafR+4RT0DEk0wS0ylw5QbQp0oj36AuLzw==, tarball: file:projects/arm-monitor-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-HzvtT7qE7U4Vo+PcyT81nFJimStPVz/QlFX1zpPCUe4ITFcfkUG7aDq+RVBIsxTqM/Z6zk8EUtGxWXBGvUw01w==, tarball: file:projects/arm-monitor-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-monitor-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -16915,7 +16915,7 @@ packages: dev: false file:projects/arm-monitor.tgz: - resolution: {integrity: sha512-VFRPZvLJgTamF9gOc9aX+H91ea4FYBOqQEWOeOVJTHBmKpprA78gwuo8fgpjrMfGtbHUyyQxI+9m4OGdcJXJ8g==, tarball: file:projects/arm-monitor.tgz} + resolution: {integrity: sha512-7nScovV8V7ac2slSpxrc5PYOsBR3BLC4SM/KzX3P+8TycaL7oWPa8wesWwlzDweodoSX7yIdBBKH8FlyKLl+1w==, tarball: file:projects/arm-monitor.tgz} name: '@rush-temp/arm-monitor' version: 0.0.0 dependencies: @@ -16945,7 +16945,7 @@ packages: dev: false file:projects/arm-msi.tgz: - resolution: {integrity: sha512-Ul24fzYggBiK/aamwNjY085iYv+MBXLFuiJ+dnYgcA3y+/a5B+qhmFW83H5inn+OwToTpZgUfbciPALRKrwuCQ==, tarball: file:projects/arm-msi.tgz} + resolution: {integrity: sha512-IIWfKkRGHTC1IXVsDV3w5LCThHnvmW62ewg+JXh0yMHVfiLs0NzD9vGFnCqdMNp9MQVihZjSF9+A/jZvWkPjow==, tarball: file:projects/arm-msi.tgz} name: '@rush-temp/arm-msi' version: 0.0.0 dependencies: @@ -16973,7 +16973,7 @@ packages: dev: false file:projects/arm-mysql-flexible.tgz: - resolution: {integrity: sha512-Hb6Q5S2NJFruSASGGfdUDhiUqQteOb3Es8RtR0u+j3qCuP+1k2ntvMuY5O9lnU1F4IuHyXwjOwT8jKVlFH3Hzw==, tarball: file:projects/arm-mysql-flexible.tgz} + resolution: {integrity: sha512-P9Jts16lwQxytRTSza3261Xj8bs3MgiF2mtK4ibvP8C9POS05NHupzEPob6bzrOfSWlc5STL8JOMMduiDPtB4w==, tarball: file:projects/arm-mysql-flexible.tgz} name: '@rush-temp/arm-mysql-flexible' version: 0.0.0 dependencies: @@ -17004,7 +17004,7 @@ packages: dev: false file:projects/arm-mysql.tgz: - resolution: {integrity: sha512-HWgmW0VWX/2hz+miS1302KiQ0Ohv6CeieppfQ+Hw6mZS9nUT2Yh17zgMGryzLYitj3yKCOFuFTlOZ+HVBST75g==, tarball: file:projects/arm-mysql.tgz} + resolution: {integrity: sha512-DDxg9P/mJWZ19rI6y9gMoEHcu/7uWcuvm7P1VKCuUjYYhJQGBFnQRBWLZwjwTL3JA218aA3bvdAk1EIjTw6RFQ==, tarball: file:projects/arm-mysql.tgz} name: '@rush-temp/arm-mysql' version: 0.0.0 dependencies: @@ -17033,7 +17033,7 @@ packages: dev: false file:projects/arm-netapp.tgz: - resolution: {integrity: sha512-XN/TOI9+um6TqZHjNR8Ev/toefYj+8oJXGMFEPc1fPtGEWcFFqg7fQfqd3rOPzhUhK+vq/LBc2jB2Gir856lmQ==, tarball: file:projects/arm-netapp.tgz} + resolution: {integrity: sha512-j8W66PF6exlFOnA4gK5gY+EZo26W1l35XxbR3DH9yCeIRIjv4iPFGGYNDOTWaRpWk6v/lelLa5VUm35dw6jH3g==, tarball: file:projects/arm-netapp.tgz} name: '@rush-temp/arm-netapp' version: 0.0.0 dependencies: @@ -17064,7 +17064,7 @@ packages: dev: false file:projects/arm-network-1.tgz: - resolution: {integrity: sha512-B/QAfq7A2656Gqn0xVUjwr3EfGi2mYGDRDy9Z/TC3jzxQVYXKTMJJ0X1MEkyypK20XmoJlVoqgNoNP/UbNx/Iw==, tarball: file:projects/arm-network-1.tgz} + resolution: {integrity: sha512-P6v6Y6MPKekCBz8tVkLHXb8cHO4JTuwSDWMh7nKIzZVb4eys17p7AfSxY87s1M8A3pUV1qxWDT6fZMUakKIgSA==, tarball: file:projects/arm-network-1.tgz} name: '@rush-temp/arm-network-1' version: 0.0.0 dependencies: @@ -17095,7 +17095,7 @@ packages: dev: false file:projects/arm-network-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-bnCH2UpFCvtz4BMccjYctwW+YNUvNkK/GVMIhEQ3LhVWBKG1toiymnCbGtNUlFBotgnzqon+gogntWaAH2wdog==, tarball: file:projects/arm-network-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-JLZmbYruauNf5jAw8reAwOW4SUnoeOW3rNZ62Vsfmxk5sIswrDIWE735tQmN1Gjyrfhjq5+7EuwjGBQPHHmhYQ==, tarball: file:projects/arm-network-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-network-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -17125,7 +17125,7 @@ packages: dev: false file:projects/arm-network.tgz: - resolution: {integrity: sha512-3KE8yHpRjIWjQ3MCIYCe8r2i5UHgEsZ99r57eLuqUaXbWwMVK6JhX1uEQZZJ6aQU31A2nI3rRt8JhdfaguwtUQ==, tarball: file:projects/arm-network.tgz} + resolution: {integrity: sha512-Xyjtn9FDQI1SEQ64xoXelZxs1P+6+TGkFN4KG8Wi6QyUjzKKGyFyT1fCGCkZUlu/ypmjUioU9EWVVderM9TBTw==, tarball: file:projects/arm-network.tgz} name: '@rush-temp/arm-network' version: 0.0.0 dependencies: @@ -17172,7 +17172,7 @@ packages: dev: false file:projects/arm-networkanalytics.tgz: - resolution: {integrity: sha512-AMCqp/mzss3Oksp0yhUjMM5/J51sk0E1481GjeL45AGtBoJrTlzvlGLFZDHEyNESEoJtbAyqkumeC52L2wpTMw==, tarball: file:projects/arm-networkanalytics.tgz} + resolution: {integrity: sha512-UoysNevuv0w7CTk1AuE3UH7xiDMa/+CieOAJWClYhD2aAIutEnN78yck5/106N96Qi72JW1SsDz+wAJOBzQYRQ==, tarball: file:projects/arm-networkanalytics.tgz} name: '@rush-temp/arm-networkanalytics' version: 0.0.0 dependencies: @@ -17202,7 +17202,7 @@ packages: dev: false file:projects/arm-networkcloud.tgz: - resolution: {integrity: sha512-8h61VDXkOPtIMZT92EqmVtbZ89phYJWTVGzUUh8SdQZbTxT+zRQQGfK8Eca+/fzv9AtEXNAcgizxuJDgE4L+fg==, tarball: file:projects/arm-networkcloud.tgz} + resolution: {integrity: sha512-+QylFC+YcqMdK5//WrecbK1Gr3GBySi1WStnR6nxbBqAYMqbN70rbqZwYEbxfkPTFQ4N8+3wyAiuzqsYRPVkaQ==, tarball: file:projects/arm-networkcloud.tgz} name: '@rush-temp/arm-networkcloud' version: 0.0.0 dependencies: @@ -17232,7 +17232,7 @@ packages: dev: false file:projects/arm-networkfunction.tgz: - resolution: {integrity: sha512-xGDdVNtxzfzWZM0HeWW/0FkSVaaZWg45d9NYyU3OoaEfL+mFJjO1FWfkaPtUCz9d5sRpUmu9ylX/FDuPNlfxzg==, tarball: file:projects/arm-networkfunction.tgz} + resolution: {integrity: sha512-4WbYQp6T3We8oP9VALcEjkRGYzSlghVKAjRMM8gDcjaU5oHG5MoshluJKBA47ayAp/rFxaMuXIx6sIVOoDoUFA==, tarball: file:projects/arm-networkfunction.tgz} name: '@rush-temp/arm-networkfunction' version: 0.0.0 dependencies: @@ -17261,7 +17261,7 @@ packages: dev: false file:projects/arm-newrelicobservability.tgz: - resolution: {integrity: sha512-dRpg7cKC+2E656IvoUXS8i8eKvPdnMzUhZXWK5j3rxcci6FsGJY6UFNzattYWlzsSLm0TX9GXa6PY3Fsx0kqGQ==, tarball: file:projects/arm-newrelicobservability.tgz} + resolution: {integrity: sha512-TAiMv0k21/jqXxppRbMs/07ZSLxW6IRwJBQhlKEcJHNsmHo6rCHMO4hExMHorI0DL/V+FtRE7qN7KpJbCd4J0g==, tarball: file:projects/arm-newrelicobservability.tgz} name: '@rush-temp/arm-newrelicobservability' version: 0.0.0 dependencies: @@ -17291,7 +17291,7 @@ packages: dev: false file:projects/arm-nginx.tgz: - resolution: {integrity: sha512-/LFuCke0zDXDreTFsY8iqwAgRQmRDlHqyCTNayy/NEKj6qhnnyAJ6ygX9fZrT7LQsyt5CLqSlMIpLypP6CssMw==, tarball: file:projects/arm-nginx.tgz} + resolution: {integrity: sha512-fz7Oa6r1GrMB6FkjOCZiQb0jQB+dsAIpnTUFCLbY5XuFPrbk6oY7YbhvkHv0X3aTgdMpr0/6ijbBeUvshAmlww==, tarball: file:projects/arm-nginx.tgz} name: '@rush-temp/arm-nginx' version: 0.0.0 dependencies: @@ -17321,7 +17321,7 @@ packages: dev: false file:projects/arm-notificationhubs.tgz: - resolution: {integrity: sha512-iohnXTKeTHXjvms8pHA/brn67wnhYD8wS/Xn/ZXltAKgqyuijgCy69XluhgoMGezraecwxKJF0WTYa92wYlelA==, tarball: file:projects/arm-notificationhubs.tgz} + resolution: {integrity: sha512-uBK2r4DcUzLlfgjUJAMwPWl56L9/3C3vUoWT9Dzc85hHRaDbZ3zXkm1YezjfG53EKul0v2Qx6LIgh7gyrCLn7w==, tarball: file:projects/arm-notificationhubs.tgz} name: '@rush-temp/arm-notificationhubs' version: 0.0.0 dependencies: @@ -17351,7 +17351,7 @@ packages: dev: false file:projects/arm-oep.tgz: - resolution: {integrity: sha512-ZpvScUYsP9hlnaO0yleIKfha0MlZh+M20p6SoWvBDyZE9DQvBDWrm0q7yncdOFHSV9B+veYr+u/uJOfunxAviA==, tarball: file:projects/arm-oep.tgz} + resolution: {integrity: sha512-68IZIrAoTKTUqRVI8yPpUV+ewzjaojHal2DKCtmBDZHSoKt0G2V5SoWb+S1qEqkqKvgI8KrNBuh4P4TcffZLmQ==, tarball: file:projects/arm-oep.tgz} name: '@rush-temp/arm-oep' version: 0.0.0 dependencies: @@ -17380,7 +17380,7 @@ packages: dev: false file:projects/arm-operationalinsights.tgz: - resolution: {integrity: sha512-s5Oa9UF+YPYurQ+0sMmRDJ8xU3ovkTbPeHXCuY1nCA3AYHcWiBru8e0SHp69foSXKiekKFIeN7XnXJCZvmywXg==, tarball: file:projects/arm-operationalinsights.tgz} + resolution: {integrity: sha512-/XQzuFwq99V3AsA68kZ3NLjhHcvQF2+i3CZKbJdtHNyJxn+VxtieY4ojqvyYSpJXRPrFNmBE0EaZiFZ+N2HmfA==, tarball: file:projects/arm-operationalinsights.tgz} name: '@rush-temp/arm-operationalinsights' version: 0.0.0 dependencies: @@ -17410,7 +17410,7 @@ packages: dev: false file:projects/arm-operations.tgz: - resolution: {integrity: sha512-cjBWW26Ng57CJVzL1DtmPQ2t/cSth4WSa2DVfPLqwo8PYv3elfyQZzU9YOkPYThI3MIu2qJSxOJHP4/UClRFDg==, tarball: file:projects/arm-operations.tgz} + resolution: {integrity: sha512-Nyj28Pu9y21IA9herds/9S0UQYh33wTNsML2Vun7fHv8DzSpekiM2TYnWKCwpr1k4sdYvv0PHQ0MOTmcJ1+eig==, tarball: file:projects/arm-operations.tgz} name: '@rush-temp/arm-operations' version: 0.0.0 dependencies: @@ -17439,7 +17439,7 @@ packages: dev: false file:projects/arm-oracledatabase.tgz: - resolution: {integrity: sha512-ziIpJE4cTtp3oY4BKF2JgTUrWKC9MNg5xklCx4/G0tpl+QPN6awzWMGDN9QaTRQ1Nz1og8udbI0JG14AUNLnMg==, tarball: file:projects/arm-oracledatabase.tgz} + resolution: {integrity: sha512-HZUyn2gZAaz1Pambusqc+xa/XX/mSlFW/Azm675ZTzqMSqcRjltj+YCxlk1WJQ5H5ZCRqCRkdvvJMFHgUJUTqA==, tarball: file:projects/arm-oracledatabase.tgz} name: '@rush-temp/arm-oracledatabase' version: 0.0.0 dependencies: @@ -17470,7 +17470,7 @@ packages: dev: false file:projects/arm-orbital.tgz: - resolution: {integrity: sha512-HAdb3COvZSqWD+NXXexZDJ6AjPNmAZVTb9+R3upw7MGLqDcvKNMd1BR3LbbO1UA7v4f/ddATSjqnD9BLEJRQxQ==, tarball: file:projects/arm-orbital.tgz} + resolution: {integrity: sha512-rR2NWOdcCvMjBSc7BbfuDvrhH2G0QKviWKNS2qAkFvN191f+bqPcdk8ZR1Q+4P8XhBqxPmo9TG8qyhdWHYFJaA==, tarball: file:projects/arm-orbital.tgz} name: '@rush-temp/arm-orbital' version: 0.0.0 dependencies: @@ -17500,7 +17500,7 @@ packages: dev: false file:projects/arm-paloaltonetworksngfw.tgz: - resolution: {integrity: sha512-WXwwttbkTUsPOKZ8KFcONkyzCIn0hBCaUBOcMa4RkeOVlBHaumxVp0148S9KE0zT7uhASVsmvM0qS1HdKM66Uw==, tarball: file:projects/arm-paloaltonetworksngfw.tgz} + resolution: {integrity: sha512-s3HioPqb7gwPpSCFHS7W8ryXo9jmAMuzbgATE7/2S6dYQ+IKyRj1lN/nki/j4EEJtav2k5j90tzus08q2GTd9g==, tarball: file:projects/arm-paloaltonetworksngfw.tgz} name: '@rush-temp/arm-paloaltonetworksngfw' version: 0.0.0 dependencies: @@ -17530,7 +17530,7 @@ packages: dev: false file:projects/arm-peering.tgz: - resolution: {integrity: sha512-fSqJdXzWVuMLGhCtsrarwl6OiM6LOEiVdPLuKPrnlv2U8SJrCHVl18tf12gKxiM+Qy1x54EVg7SsqssHiCrYaQ==, tarball: file:projects/arm-peering.tgz} + resolution: {integrity: sha512-f+AFNpdQZ4Z3yQqr8ZgaCwqa692flWfgQD7pjMyEn6v3VSw2S6JG6NjBWX27QDvMFCs68HELlLHSHM6ZFRPk7A==, tarball: file:projects/arm-peering.tgz} name: '@rush-temp/arm-peering' version: 0.0.0 dependencies: @@ -17557,7 +17557,7 @@ packages: dev: false file:projects/arm-playwrighttesting.tgz: - resolution: {integrity: sha512-nUWyCeuYSpTQzmokXguADCYg2atdidXLGKhxSjht+tCCv4dPRvD8Ew9sjIoWOW2M2gSFo3JRtwJ5mDf9hqCT7A==, tarball: file:projects/arm-playwrighttesting.tgz} + resolution: {integrity: sha512-ZQjUMOohvWsMYYSWPuZKW7mN20dfdpOfzA7SRb4dmlMPvxUL5FYGNlpl8IRVt8xWKYprxhtMxVBsHtCGqEp93Q==, tarball: file:projects/arm-playwrighttesting.tgz} name: '@rush-temp/arm-playwrighttesting' version: 0.0.0 dependencies: @@ -17587,7 +17587,7 @@ packages: dev: false file:projects/arm-policy-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-c8WuNzmDkYA8+4tTfAsRs4McBwF54jiXzPkDf8UsHfb7xGPMwKrYa8U9nblDFbgR7Hte13G5CimBzcgmpCsi4w==, tarball: file:projects/arm-policy-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-OZ8MTL6GxXP/ZneIKRGcr80kINASAsgIjcg2fHxZtkUZH5TH4JPEjuHFagZ0MByacU0t66iZERDwn3gcWJuEdA==, tarball: file:projects/arm-policy-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-policy-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -17615,7 +17615,7 @@ packages: dev: false file:projects/arm-policy.tgz: - resolution: {integrity: sha512-TikMnJT90/hTLWuLKk6RJ+oCi0WrNmgDcAkaiK8tHdFxFNIwYZM8MxWKDsiTiwuavvOBzYfH3Mituct/0ms1wg==, tarball: file:projects/arm-policy.tgz} + resolution: {integrity: sha512-S+GzCiPK6HX/0lTkjaRpCy03c3kT9lGY3+ZxU/F/92OapIDzSFVFNUny06b1BfQPmg9v61vIf4xqga3i3Gk99Q==, tarball: file:projects/arm-policy.tgz} name: '@rush-temp/arm-policy' version: 0.0.0 dependencies: @@ -17643,7 +17643,7 @@ packages: dev: false file:projects/arm-policyinsights.tgz: - resolution: {integrity: sha512-oOT8OK3YGCj4z7xDVUbC0XgAc73YBSMMtmGIZjtR/kGA3FA8H8F4RN/1QiHT55aqm0hAL6wHJwFVricLaQg+4A==, tarball: file:projects/arm-policyinsights.tgz} + resolution: {integrity: sha512-dAv5NkASdcbI/jhOjA5IzfqQCGGA/uLTDCq1ely1jyJwXbtSoVaY6P5doNX/f68zbGQp3iW3mW48w+SBQOfdLg==, tarball: file:projects/arm-policyinsights.tgz} name: '@rush-temp/arm-policyinsights' version: 0.0.0 dependencies: @@ -17673,7 +17673,7 @@ packages: dev: false file:projects/arm-portal.tgz: - resolution: {integrity: sha512-SgVl8z5EciLmuKKXvedWFz+Aknx6rakUvLvKwiOudTPIuL/c6uvwc3MBKO4mT7gMO0oid891yEL499/AEbh4cg==, tarball: file:projects/arm-portal.tgz} + resolution: {integrity: sha512-GTgTCV+m/TYwrvbyTI7qSMK1jvDtmwh41idgAqWVTRzMIwWa1TGSQ/626YPREt0V0JvNfidP+BrTu3M8MMpYNg==, tarball: file:projects/arm-portal.tgz} name: '@rush-temp/arm-portal' version: 0.0.0 dependencies: @@ -17701,7 +17701,7 @@ packages: dev: false file:projects/arm-postgresql-flexible.tgz: - resolution: {integrity: sha512-ldF16x5gZHIJLjf+ax9P6OVWHu8UxFnzMETfdji8fmlPeJlQeFDu2/rA9sneMG/6zAtEhBRNlynI9xanzEPiJA==, tarball: file:projects/arm-postgresql-flexible.tgz} + resolution: {integrity: sha512-+xkEamzzAMZNMr7Nns+hTSm3xsPppbHh99xg8gCbVIHhTghl1G03b0v+E/gkzGj+g9fhuXrREXUowN3SloLz8Q==, tarball: file:projects/arm-postgresql-flexible.tgz} name: '@rush-temp/arm-postgresql-flexible' version: 0.0.0 dependencies: @@ -17731,7 +17731,7 @@ packages: dev: false file:projects/arm-postgresql.tgz: - resolution: {integrity: sha512-O2SnzZstsFG3Xmribf2Y20M2B2eEK5CiWiUBAuvZaPzOV7HAd4jF5BuU5UQIgw+M2MtHEtqn/yh3YQismDNhVQ==, tarball: file:projects/arm-postgresql.tgz} + resolution: {integrity: sha512-eGaMPRDBUrkQ7BkRgHghRvh1Pb/nLEa8+IYtLbAHF7LXfKs//EiTU/0yg0oyU+NQjDdJCt9X1KK6u3FpBfR8ZA==, tarball: file:projects/arm-postgresql.tgz} name: '@rush-temp/arm-postgresql' version: 0.0.0 dependencies: @@ -17760,7 +17760,7 @@ packages: dev: false file:projects/arm-powerbidedicated.tgz: - resolution: {integrity: sha512-D90FPKOypB4s4HDD35w6H9sdwHHmlDxJ3jqVzHg5BR2A5xl+JeWKEu4ka/QDYHWxu6tlfQgdBq4qMVu94HJ9Ug==, tarball: file:projects/arm-powerbidedicated.tgz} + resolution: {integrity: sha512-LRrWD48x/bNFmasTDKCOl4Wq9TgAV7fPqJWPRIbaeMqmljIILlOqzjQTCWupt7wcqI+20UQIKHsU4lsH2H9Uww==, tarball: file:projects/arm-powerbidedicated.tgz} name: '@rush-temp/arm-powerbidedicated' version: 0.0.0 dependencies: @@ -17790,7 +17790,7 @@ packages: dev: false file:projects/arm-powerbiembedded.tgz: - resolution: {integrity: sha512-T9wzorSGi8GjH0TVike594OhHpvhfDQzGi6f8I/tnAGkaq9k3EFriB1wGXYnRjcZxRA/JhIXSkWnrt04wMXt+Q==, tarball: file:projects/arm-powerbiembedded.tgz} + resolution: {integrity: sha512-rrvuHwyQcDNx6BAODw2EfMNlTvtuhaZM7TqPaSCRIECXuchO/WLPvxL6rnvdSgfic5WJ4PqBwQWm0DUbTymN/g==, tarball: file:projects/arm-powerbiembedded.tgz} name: '@rush-temp/arm-powerbiembedded' version: 0.0.0 dependencies: @@ -17819,7 +17819,7 @@ packages: dev: false file:projects/arm-privatedns.tgz: - resolution: {integrity: sha512-RzimUaRpfRNNsP0IEU2H/kSdXPtBTVQpz2/O41Qm4xeb4NtI6/H/vjyfBjm+9Ifuv+9nNFHMcqC0qpamze0wSA==, tarball: file:projects/arm-privatedns.tgz} + resolution: {integrity: sha512-eOpU54Xe7vDeQ9bvgw6bILjt2lKG8IxMADgclBjt5XkCSfcv7hKEGlwuuP5gLAczwTl9tk2mgjYSpEJ4BDuB7Q==, tarball: file:projects/arm-privatedns.tgz} name: '@rush-temp/arm-privatedns' version: 0.0.0 dependencies: @@ -17849,7 +17849,7 @@ packages: dev: false file:projects/arm-purview.tgz: - resolution: {integrity: sha512-x5M1dS34o72cq4BsMCm8035t0CB6GPLoz1/3R5q2ylISblgjeiZyZX5V9QYDZMidqffL/VPhscaXaXGU4lgY2g==, tarball: file:projects/arm-purview.tgz} + resolution: {integrity: sha512-PUe5Dr/BGLMCRzMRlNiBjcbkqfMpnhBE3DZfdBv/tku5bU88G6KHq8OFAyJ62tYWqb87Wg8LpXDXRfJWrI70SA==, tarball: file:projects/arm-purview.tgz} name: '@rush-temp/arm-purview' version: 0.0.0 dependencies: @@ -17878,7 +17878,7 @@ packages: dev: false file:projects/arm-quantum.tgz: - resolution: {integrity: sha512-L94Xm9u4VwYYuPqF1oo6Fg3P5FbFM1/2eFkG6B37Majvb6r8hbO/BmQtC2D1rAmQm+XPNLKE/EA8gEysCPVsVQ==, tarball: file:projects/arm-quantum.tgz} + resolution: {integrity: sha512-90Jm7U1UNPrD2nJyW6irsrgNBiAuul6Ng9bHTzkW1vZkmCFV/Jy2h2LlEatMhJB/qn7UI/I2Hgl30as/hjFsZA==, tarball: file:projects/arm-quantum.tgz} name: '@rush-temp/arm-quantum' version: 0.0.0 dependencies: @@ -17908,7 +17908,7 @@ packages: dev: false file:projects/arm-qumulo.tgz: - resolution: {integrity: sha512-93s0NqKkdoyB2+GH4GyjLZty0T1oeXMERf36tjloyDiGDvIEoxi2Ri0Ke601onOKbRRXsfqNiw6Gb8a630fLNA==, tarball: file:projects/arm-qumulo.tgz} + resolution: {integrity: sha512-wrPRZ7OSOkCHxNLPg6ETrQ/CrYpXETWjxefVX2rsLsoIfwU8NnnudhcVuoBUewoSBkbk1whuOBX++ps7d+KHpQ==, tarball: file:projects/arm-qumulo.tgz} name: '@rush-temp/arm-qumulo' version: 0.0.0 dependencies: @@ -17939,7 +17939,7 @@ packages: dev: false file:projects/arm-quota.tgz: - resolution: {integrity: sha512-g5xHMxPMVPEOEYNOoR9ZpxY7piO4tM7SrXvllyYrJ27gFJeOzJa06ySdE1Bf0tq23xI2poOFt+RBUHkl6nRK6w==, tarball: file:projects/arm-quota.tgz} + resolution: {integrity: sha512-Da+qEIKvkxF6EmBgF1bdo3xNiAswOb+e3qvmqxB9fDFjL/LfELEHyabN9V8NCgMVNIE41fw3/V2E6hOxj68JRg==, tarball: file:projects/arm-quota.tgz} name: '@rush-temp/arm-quota' version: 0.0.0 dependencies: @@ -17969,7 +17969,7 @@ packages: dev: false file:projects/arm-recoveryservices-siterecovery.tgz: - resolution: {integrity: sha512-Pk09j+7M6/NbmC1NAEwiMcgFBo79h65ZhrZYaRB0jaQMn1lBjILPnlXWiHIho+5pjp+FY79I/WHP/TVBkeY3Rg==, tarball: file:projects/arm-recoveryservices-siterecovery.tgz} + resolution: {integrity: sha512-3YmQDRQ0RU8q3CEeViyd0F7uo1QONvC7EAAUp2GNrj36ubHAxanoLwvsK+Q8sZYAUrri/xHi1sdsdoccMgZYng==, tarball: file:projects/arm-recoveryservices-siterecovery.tgz} name: '@rush-temp/arm-recoveryservices-siterecovery' version: 0.0.0 dependencies: @@ -17999,7 +17999,7 @@ packages: dev: false file:projects/arm-recoveryservices.tgz: - resolution: {integrity: sha512-JuNcfEsRUQn5xB+oobUVmJi6AYH+VuM+Zf0NsI+LRpUNUMEGtQ3E7Inui+qap75dVhlSVcx8mv8/ubsEZv9FnQ==, tarball: file:projects/arm-recoveryservices.tgz} + resolution: {integrity: sha512-aGZqv2Es3GWdq6otQcr2HEGL13nviNR6t5LclTlAm9C7mSDfHX7sVfBgUWdI8h2XUooZ9U98nEjBBPejGl4Fog==, tarball: file:projects/arm-recoveryservices.tgz} name: '@rush-temp/arm-recoveryservices' version: 0.0.0 dependencies: @@ -18030,7 +18030,7 @@ packages: dev: false file:projects/arm-recoveryservicesbackup.tgz: - resolution: {integrity: sha512-ofsVsYgA+49rgLOm0lBnjBuquR/EJrR+ZVjHsuzkQghHvIND54mVjsgz79/bTmEnezcxJoB/FsHZr9kUjruOBw==, tarball: file:projects/arm-recoveryservicesbackup.tgz} + resolution: {integrity: sha512-AZe2jKXj/q0Jcljzfw6897HNX9ycP+TOSQl3z8izvmwCtYI2EKVHVs6KT9nkW23+E3j3X2q64fKor0XCtGLHEA==, tarball: file:projects/arm-recoveryservicesbackup.tgz} name: '@rush-temp/arm-recoveryservicesbackup' version: 0.0.0 dependencies: @@ -18062,7 +18062,7 @@ packages: dev: false file:projects/arm-recoveryservicesdatareplication.tgz: - resolution: {integrity: sha512-bpjylD8w0G2NeSGWADWw44UyKxgJzpwFXhmdApVr9IqyBLmUjjQaFpv/1ygnQ0JrezXrk1Fwks3QuElufP4k6g==, tarball: file:projects/arm-recoveryservicesdatareplication.tgz} + resolution: {integrity: sha512-tS4HVmuGAkIWY4SSgaprvax+JOdjvNd5Qjp3J3NZ38dP+EovJaLMM5PdiibJPg9pNg5PcuEyDyQguzO5/cJEOA==, tarball: file:projects/arm-recoveryservicesdatareplication.tgz} name: '@rush-temp/arm-recoveryservicesdatareplication' version: 0.0.0 dependencies: @@ -18092,7 +18092,7 @@ packages: dev: false file:projects/arm-redhatopenshift.tgz: - resolution: {integrity: sha512-sAXqI3ZOkg+1mLcHINlbDdfxyC37H0GRRew0jrQXYqS2Cbb8I58c2/scsbpXBJ/oDwdL+pd5WJQKl3gDr1ZQyA==, tarball: file:projects/arm-redhatopenshift.tgz} + resolution: {integrity: sha512-nmTDnTBfI+Wiz9lbnEo/K9o/YJ4969WxFny4epZ31rpvTqem9h+aAZDT5xVvZdfubJTBgDM6Mfk+O79nlnCzIg==, tarball: file:projects/arm-redhatopenshift.tgz} name: '@rush-temp/arm-redhatopenshift' version: 0.0.0 dependencies: @@ -18123,7 +18123,7 @@ packages: dev: false file:projects/arm-rediscache.tgz: - resolution: {integrity: sha512-xMDBT7vRCqYoRX7+G08GzMqnisN+f0Vlru2bJbf3WN7pPxwPlShEBHTQ0zsY8+8UapKAIDS0wzIMvvyhX12/UQ==, tarball: file:projects/arm-rediscache.tgz} + resolution: {integrity: sha512-8IG6+1nX75u3bM5sSZQ2zTo08+NX6HMQzy8ov9tNKFyi0L/TNSCGU9KPul+rWgQ/0BqnT81b//C6N1L7/Pt81A==, tarball: file:projects/arm-rediscache.tgz} name: '@rush-temp/arm-rediscache' version: 0.0.0 dependencies: @@ -18155,7 +18155,7 @@ packages: dev: false file:projects/arm-redisenterprisecache.tgz: - resolution: {integrity: sha512-2OuZxOIoB+wE5E0rj/0Xtz1fMoA1iFAQeTbUhnptoXZ7G41XSdiaZkk5gFkGtQ8K+rEYBTM+6u8s6HvxjyKSjg==, tarball: file:projects/arm-redisenterprisecache.tgz} + resolution: {integrity: sha512-fAG0zihUEXQ92Bx34lGz0Szk5rXwA/gQwKfk+6KmAG43mh0VWjB2Ris5vQRbYynNMZ/wgTi6NVcV+edMWyqCIg==, tarball: file:projects/arm-redisenterprisecache.tgz} name: '@rush-temp/arm-redisenterprisecache' version: 0.0.0 dependencies: @@ -18186,7 +18186,7 @@ packages: dev: false file:projects/arm-relay.tgz: - resolution: {integrity: sha512-HuekB5MGR/3uz7+qX1pkZx6+oBu8nur/tLgKn2x1h2weuvxuy/LOFWr2msecVUC9Gu9xGkkQZsO9BSq0CIhjIQ==, tarball: file:projects/arm-relay.tgz} + resolution: {integrity: sha512-bFakmh6RPrLKgxppLuR8uXuvIN3xlPaDbx26yN4X1plOrY+tNN/+IBOt0o+Q7waxsV36lf57iqOhwE+/N3H0uQ==, tarball: file:projects/arm-relay.tgz} name: '@rush-temp/arm-relay' version: 0.0.0 dependencies: @@ -18216,7 +18216,7 @@ packages: dev: false file:projects/arm-reservations.tgz: - resolution: {integrity: sha512-YO4FdzBwu28JXX1LGR5NmopnizH3aH8AnFuk8PyE1r4hPsjrYDi7Bg+oTdxb92/2gofn+DYRlM/YuRBe5MY/Jg==, tarball: file:projects/arm-reservations.tgz} + resolution: {integrity: sha512-La9F/kMi+BYUmMNGlMbmgh+s//Bu5u0sTQfnquHKp8uNUqsVpaX7/GOJKPyEX4v0SjplGSVxFakVeHL5LaLQZQ==, tarball: file:projects/arm-reservations.tgz} name: '@rush-temp/arm-reservations' version: 0.0.0 dependencies: @@ -18246,7 +18246,7 @@ packages: dev: false file:projects/arm-resourceconnector.tgz: - resolution: {integrity: sha512-7r+Caa+famctT+bERIWkh6nD0hVAVPJgkbAgMkUDKMMTvU+jmKhaRNy5B5BdUuK6lflISiJKo2PLS7oq6hyKOQ==, tarball: file:projects/arm-resourceconnector.tgz} + resolution: {integrity: sha512-+1HL7qj2oHy1u4GmQajmi+IKnFQqCdNxF2pJScZHsYjB1HEbAj39rQwsx4Rjkd5xR7kPYbzFC5HjXOx3D5nsMw==, tarball: file:projects/arm-resourceconnector.tgz} name: '@rush-temp/arm-resourceconnector' version: 0.0.0 dependencies: @@ -18276,7 +18276,7 @@ packages: dev: false file:projects/arm-resourcegraph.tgz: - resolution: {integrity: sha512-PKWFSBeWTB3RW6IoTMuumq1t0qoCvNPIFXP6VgICu7m1FyYpYQOM3lZ4iA+9kBrpYdNQEMxcd291e8j8PelyFQ==, tarball: file:projects/arm-resourcegraph.tgz} + resolution: {integrity: sha512-JPjc4McLqBJjfwboTtv1QCjfEKnDZUf1+U3WkrSUlqisZRjJ6aVl8ZDlMqikWpc9i3YFJHgFMuUagnXzI9E0cg==, tarball: file:projects/arm-resourcegraph.tgz} name: '@rush-temp/arm-resourcegraph' version: 0.0.0 dependencies: @@ -18303,7 +18303,7 @@ packages: dev: false file:projects/arm-resourcehealth.tgz: - resolution: {integrity: sha512-YJse1skI7U90dSoVqsB7W43DlnFxCIu3jU9VSFaM91m6DN/+1t4JjHscCabpvYpYYMtPv1uEFbcNe/oELTT3vw==, tarball: file:projects/arm-resourcehealth.tgz} + resolution: {integrity: sha512-mUmDgyvVm77Mq9cl3ZTKpyNUUuAkGd3314zoCsozIYc93Su5q4pZiUk/Kxigqj8l4kQ3+ae67IB7ZrzQLipcDw==, tarball: file:projects/arm-resourcehealth.tgz} name: '@rush-temp/arm-resourcehealth' version: 0.0.0 dependencies: @@ -18331,7 +18331,7 @@ packages: dev: false file:projects/arm-resourcemover.tgz: - resolution: {integrity: sha512-1OaUJwMEBJg+zABRSPt+3xcPPjHBD//xqS7iicMG7YVTRRmPWJfIU4rOxOdkKfJ484AF78wtAbI1c5TbISBxQQ==, tarball: file:projects/arm-resourcemover.tgz} + resolution: {integrity: sha512-oUu8cCzEl+fWhoVCOePYOmphYMJs6g2ZlQ6/xgGKzkOv7oGaTyInm+SiIxZqnz6nSWu09rHirsxAe+O8XGJHNA==, tarball: file:projects/arm-resourcemover.tgz} name: '@rush-temp/arm-resourcemover' version: 0.0.0 dependencies: @@ -18361,7 +18361,7 @@ packages: dev: false file:projects/arm-resources-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-QmCIBi9Rh+M0UbqRUHqnv4sKl/4foIiUl6P/FRh/1VxPT/uxZv/yA7yWx60XK6UsLHK0GqIaDIuoXRcrP0sEDA==, tarball: file:projects/arm-resources-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-hN0wr1r1GbSncMjQEDhIW5VYSvVSMoT90+FF/4qOavMluszq5DnMFBxR2z6DANQ6xU2nLm9WEKa6S4JyIGpigw==, tarball: file:projects/arm-resources-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-resources-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -18391,7 +18391,7 @@ packages: dev: false file:projects/arm-resources-subscriptions.tgz: - resolution: {integrity: sha512-BWiBCZ8DrTvYtOTrKMg0t8uXaIcjQwfG33PdnOxpsUGBGDU+vU5S1xLUeXm3mHXVHg5WvARqVWBKoXUgStB0RQ==, tarball: file:projects/arm-resources-subscriptions.tgz} + resolution: {integrity: sha512-qhA1M+sMpl11reN9zmrbfbpn8HKuGIfO0Qli7ONzksQmCEZ0eNx5IJi5+PZ5+0PT7HxP/StQwJyAMGpQsdt15A==, tarball: file:projects/arm-resources-subscriptions.tgz} name: '@rush-temp/arm-resources-subscriptions' version: 0.0.0 dependencies: @@ -18419,7 +18419,7 @@ packages: dev: false file:projects/arm-resources.tgz: - resolution: {integrity: sha512-JqWS42xp1LBmw2Vt0MWGue1tx8fRp04bLdq77O3upDVLTpksZkNBQyMpQdPvM6dpAVYcIrjsP2RlibzOGaWM0A==, tarball: file:projects/arm-resources.tgz} + resolution: {integrity: sha512-VJ2ZSr//nnrQdQSgVNcEyhfOEaESfbk4tVWLTJZ5umow2S7jtBEV7cMHZHqhObD2TDc6Jzcit5L4G7upr/zYnQ==, tarball: file:projects/arm-resources.tgz} name: '@rush-temp/arm-resources' version: 0.0.0 dependencies: @@ -18449,7 +18449,7 @@ packages: dev: false file:projects/arm-resourcesdeploymentstacks.tgz: - resolution: {integrity: sha512-w1qpRkt2KGi0v1JnbxcJrU6EChWrsjapeDle4u9XiQk+eQq2V64Vr1101KFN/31EcBZVndFb/k5LUQUFAReXkA==, tarball: file:projects/arm-resourcesdeploymentstacks.tgz} + resolution: {integrity: sha512-yyRLezFY8H+vjTTSa0MVoCE7TMlv27xJiLdmkGDnelwFKpBo6/2cwZNligO0BC0w//cEkTXH33yr/AJ+rqI5lQ==, tarball: file:projects/arm-resourcesdeploymentstacks.tgz} name: '@rush-temp/arm-resourcesdeploymentstacks' version: 0.0.0 dependencies: @@ -18480,7 +18480,7 @@ packages: dev: false file:projects/arm-scvmm.tgz: - resolution: {integrity: sha512-9CALsrjrdueT716KYVr+WsmvSDJi2pAMFscBUUf5SxksN+u3+GFpjxn1t6gIfifdAcqdpwwIi+C6dAJOYHQhww==, tarball: file:projects/arm-scvmm.tgz} + resolution: {integrity: sha512-o3w2jxmcrAV6gbXFHt6MnJJiE79CWSpegfRgC5isL0LIKtVE8LNkEucabsd22gCHWiVyDvZLrrQUkZb7EHdhOQ==, tarball: file:projects/arm-scvmm.tgz} name: '@rush-temp/arm-scvmm' version: 0.0.0 dependencies: @@ -18511,7 +18511,7 @@ packages: dev: false file:projects/arm-search.tgz: - resolution: {integrity: sha512-JlKGpcSU5jEa7Giyvx+k5k1b6Dh7Zhs2k11IdiytGy3Fm2Qijk3btIRIcK22ABwiRl6Pvq6OTwTg7CHcm9U3WA==, tarball: file:projects/arm-search.tgz} + resolution: {integrity: sha512-NNn/oLf1snRFzWOTs/p2stol7ofLvy6kKfQvpsaraxyU9arohuUXl9PsiPA6ATa9hwR1SoRfTnl7hv016/11Jg==, tarball: file:projects/arm-search.tgz} name: '@rush-temp/arm-search' version: 0.0.0 dependencies: @@ -18542,7 +18542,7 @@ packages: dev: false file:projects/arm-security.tgz: - resolution: {integrity: sha512-Cx3vVnuVkixfnjxkezpLLCFgoblfiqXnK3MfSB6l4e2ulZsVfX/07iNCALqvxcGXwcmPYdTR4WxrFXQ689j39w==, tarball: file:projects/arm-security.tgz} + resolution: {integrity: sha512-qX5Bt0iuWZYa+FKt92nR0OAR1x7O6A4z9eRKbgDmxMBmsd4aaLRsPGba4L8YW3YKMCQ/txKodNBBbYzIG1X++A==, tarball: file:projects/arm-security.tgz} name: '@rush-temp/arm-security' version: 0.0.0 dependencies: @@ -18573,7 +18573,7 @@ packages: dev: false file:projects/arm-securitydevops.tgz: - resolution: {integrity: sha512-Hbv+DXT5nJ8GFCIRuIvUqxf2TgunmPyhTNYE40uKiiY3Hy/mR553bHUfT4ba72QSHJJEXmsuTruOHYPJYEd2zw==, tarball: file:projects/arm-securitydevops.tgz} + resolution: {integrity: sha512-jFKjkibhDa+2YyMqo9a0+vHHjCNbr6vFETQpFrkRl2BHoz/SjFRWgaH4H/AeULpjfv65Evfsc7fIXTTWiFFADA==, tarball: file:projects/arm-securitydevops.tgz} name: '@rush-temp/arm-securitydevops' version: 0.0.0 dependencies: @@ -18603,7 +18603,7 @@ packages: dev: false file:projects/arm-securityinsight.tgz: - resolution: {integrity: sha512-07YttJ6drF9eY3g7/egmTFy98lTuUS1HxFhoMr7e3bKMzDbgkDPi0cbiVf/1Dm1f0yFQFHGm3JM5b/VuoFDSkA==, tarball: file:projects/arm-securityinsight.tgz} + resolution: {integrity: sha512-Xthk9kjRS5Ln3QcomZv8mv+ytV67AWwvUNADkKfmvc5vqs9/EPnhuuGuss8MoxN6OJbDtgB81P52eCxOy8/kXg==, tarball: file:projects/arm-securityinsight.tgz} name: '@rush-temp/arm-securityinsight' version: 0.0.0 dependencies: @@ -18633,7 +18633,7 @@ packages: dev: false file:projects/arm-selfhelp.tgz: - resolution: {integrity: sha512-B8Xs0UMUJTwbnl5F2Apj4D3Qu5RkXCPoa9tQSFuJn2GzHB4LH3opGMIxaYbpZo4OFaVWh07abb+O4DtWfjdYzg==, tarball: file:projects/arm-selfhelp.tgz} + resolution: {integrity: sha512-Yp/5kbvvAsjKM5O1G5+IvkmdHgOpOYTvR0ENz6bQEyvLiRrpxQOY87arhZtpGod6CzBwj3Y/copZm+7ju1tclw==, tarball: file:projects/arm-selfhelp.tgz} name: '@rush-temp/arm-selfhelp' version: 0.0.0 dependencies: @@ -18664,7 +18664,7 @@ packages: dev: false file:projects/arm-serialconsole.tgz: - resolution: {integrity: sha512-1VE+SNe7NzYszDtx/foPi9v0rkuxg2qasxcS9Tyjejde/S0rOz6F+Dv1RKxgPn8bYZEK6+0TB2SN9JgmSPB3UA==, tarball: file:projects/arm-serialconsole.tgz} + resolution: {integrity: sha512-tbuwl2XgYher86fTQN84E92cYvZDMac2r6+LhOjRPooInHomS0vfV6OiMCca3gJkyIqKvCIaewYRBtsDBRxHLA==, tarball: file:projects/arm-serialconsole.tgz} name: '@rush-temp/arm-serialconsole' version: 0.0.0 dependencies: @@ -18691,7 +18691,7 @@ packages: dev: false file:projects/arm-servicebus.tgz: - resolution: {integrity: sha512-7s8SvOlfHwdEc4CR6JyrNmWm3wGNKBZRJn4pSdwLo9R+Xe3FNHuzPoFV5uONB87vlzFE2ev5wu/7LWz08LhWHw==, tarball: file:projects/arm-servicebus.tgz} + resolution: {integrity: sha512-fZLIGgcwn7u0kdCmHfjpryDtEtO5ffOIkYi8PYsdd0fUU8YmspnxCfkWagKhRS15Jrih20V/lXq5fBMABDZLsA==, tarball: file:projects/arm-servicebus.tgz} name: '@rush-temp/arm-servicebus' version: 0.0.0 dependencies: @@ -18721,7 +18721,7 @@ packages: dev: false file:projects/arm-servicefabric-1.tgz: - resolution: {integrity: sha512-zsDMTNrg16MLi1iNaoOIMZxZALsSMGOK+omzyhDBlf4QUQWZzwVgwW7zV4/uE+S2BzXAdvV91WEx1mKhLtUZvQ==, tarball: file:projects/arm-servicefabric-1.tgz} + resolution: {integrity: sha512-6UGCRqxRluNxX5M2NvMf5GOtpbgAmdnrVYtQtTc/pMREuGHiSnNV7eKBlc+wOgzXPBWMQupwd8QcVYyt7AlEww==, tarball: file:projects/arm-servicefabric-1.tgz} name: '@rush-temp/arm-servicefabric-1' version: 0.0.0 dependencies: @@ -18751,7 +18751,7 @@ packages: dev: false file:projects/arm-servicefabric.tgz: - resolution: {integrity: sha512-LyOU99tUfJdleRudJAd7zFDFD8Q3z+gYCoSw/ARvqPI/uOr5KZwBSt4kqmrieHC4CKjc48EOjgPRm/Z9atnOcA==, tarball: file:projects/arm-servicefabric.tgz} + resolution: {integrity: sha512-ngmoIRydHeG2s2KBbidNsGCs6ezegZAFBdzDa8rdED3Jxk0QfVBjgEX3R8BlM0UBkjXN2vPoVbWGQ5qtent8RQ==, tarball: file:projects/arm-servicefabric.tgz} name: '@rush-temp/arm-servicefabric' version: 0.0.0 dependencies: @@ -18798,7 +18798,7 @@ packages: dev: false file:projects/arm-servicefabricmanagedclusters.tgz: - resolution: {integrity: sha512-Kkikw+KilbQHL1sc42pegiA8WkR+uAco/BMH4k/OfFR7yk2VlliKjBLSIwTIxb938XrEZeGry8mMy4vQuMJrFg==, tarball: file:projects/arm-servicefabricmanagedclusters.tgz} + resolution: {integrity: sha512-ogHNglY23yny1DzKJ+TJ/hwk80KD8woVXF0nzMGtgr4xK1VDR/nDCnJ6fwvcu2jyvA7w/RqXQOE04kMjn35VqA==, tarball: file:projects/arm-servicefabricmanagedclusters.tgz} name: '@rush-temp/arm-servicefabricmanagedclusters' version: 0.0.0 dependencies: @@ -18829,7 +18829,7 @@ packages: dev: false file:projects/arm-servicefabricmesh.tgz: - resolution: {integrity: sha512-HX67hh3knqcchYlSWFKX7wn7lYFmFdqW44X8dTnUSExwFNuHuQ/zrDbGpWsuqFn97NcEeh3FDQXpbLGYuKQiHQ==, tarball: file:projects/arm-servicefabricmesh.tgz} + resolution: {integrity: sha512-xdLa+h/zRyPVz8Ha6gyMY2Dj6Pvv6w/A0pv7yqt/wQkCiPana7auJyJcc3F9sUUynNuhoZyKZ9VnImlcCndRDQ==, tarball: file:projects/arm-servicefabricmesh.tgz} name: '@rush-temp/arm-servicefabricmesh' version: 0.0.0 dependencies: @@ -18857,7 +18857,7 @@ packages: dev: false file:projects/arm-servicelinker.tgz: - resolution: {integrity: sha512-Rw9j5L7fekoArYrh1wMGsfhEZ31UiUPfIxUolDb54yo3PCThBme8twGSwDL/TvfJw8Ms4nH01um92ivf1XxiHQ==, tarball: file:projects/arm-servicelinker.tgz} + resolution: {integrity: sha512-cnaI2wou6rHncFY3xOn2EbxClEZwq09rcqTfSBp3qXuHhSadKZ1boREjRNWJDS0F9WKSbFArOgrtw3NWLGKoIA==, tarball: file:projects/arm-servicelinker.tgz} name: '@rush-temp/arm-servicelinker' version: 0.0.0 dependencies: @@ -18887,7 +18887,7 @@ packages: dev: false file:projects/arm-servicemap.tgz: - resolution: {integrity: sha512-6sR8Zk9I/BpB+lqR44CCHVMqn6mJHGxhWFC8wqqwpd/xd0XKbfYB/Rewaso+Ud5JliX73VXAs4vQ55y5GuehMQ==, tarball: file:projects/arm-servicemap.tgz} + resolution: {integrity: sha512-tX4zJQlbhwSe26x/zw+ypLR0+mUdS+fsc48e6w0nL/cmSs0E/TZzBlQRl7H4fVQV01mYWJxkX0D7LC2yv7ZkQw==, tarball: file:projects/arm-servicemap.tgz} name: '@rush-temp/arm-servicemap' version: 0.0.0 dependencies: @@ -18915,7 +18915,7 @@ packages: dev: false file:projects/arm-servicenetworking.tgz: - resolution: {integrity: sha512-HXdDuirNeRFqL55QZZiz8+wHDLGi2el7xSPOVJim4WhO5iZ8INACkCr9+RkN1IMRff50DfUdK6w1McDIPlQu8g==, tarball: file:projects/arm-servicenetworking.tgz} + resolution: {integrity: sha512-iUYiVR/KEAgA1sVq8TOnnR8ZTBNFZgdxt8pkDAgYtjSGoJ77QpIkKsTaAXH7Gdc/yG2nHYULm31NjySZrjk0Jg==, tarball: file:projects/arm-servicenetworking.tgz} name: '@rush-temp/arm-servicenetworking' version: 0.0.0 dependencies: @@ -18945,7 +18945,7 @@ packages: dev: false file:projects/arm-signalr.tgz: - resolution: {integrity: sha512-hKhoT7t0dBvBxAuD0VmG1ItZDNjprz3Zl4/cPIyN/GEsNFyUcPWpxLvMnQExKWjWYqkE6GozEtWfUuN3o6qVBA==, tarball: file:projects/arm-signalr.tgz} + resolution: {integrity: sha512-//D4ROtuMFfkL448Xw2X6VNSawv1JP64/9b1tROovvse4yyaKVm3EuToGihzlT6i7ZYDtoeKR2RjNzzq+EdVEQ==, tarball: file:projects/arm-signalr.tgz} name: '@rush-temp/arm-signalr' version: 0.0.0 dependencies: @@ -18975,7 +18975,7 @@ packages: dev: false file:projects/arm-sphere.tgz: - resolution: {integrity: sha512-7oOjTxSO9G2XEd7cfFHhYM+CyMj+huZ5KPdc2wprA3zoA977UPWKtfsrV7q0oNaWyobr20uuBsW8tTe8mCxp9g==, tarball: file:projects/arm-sphere.tgz} + resolution: {integrity: sha512-a3acwGYvmSNDqzWAPZOha0SLZNQyeLTnutW4erOGrck4OEnYDR7COhnUpiOGL8BIgaushPAZ9ePo8zN9M+Nz9w==, tarball: file:projects/arm-sphere.tgz} name: '@rush-temp/arm-sphere' version: 0.0.0 dependencies: @@ -19005,7 +19005,7 @@ packages: dev: false file:projects/arm-springappdiscovery.tgz: - resolution: {integrity: sha512-neDf8PG1/HSmeFOC97uswyfatTahZx+L1+y62JF0c5K5g/2RpdkyMzMM3y/XE+hOirtZNRTx3Cemu52pYqQcFw==, tarball: file:projects/arm-springappdiscovery.tgz} + resolution: {integrity: sha512-4ITn6D0Ow4w7vp76TUnkAoGmmI8hDWT0ysmmBqkow/42rTL3EEUuC4BOWFWgSC3MyjUf/qV5Ng5HpePLqAYfaA==, tarball: file:projects/arm-springappdiscovery.tgz} name: '@rush-temp/arm-springappdiscovery' version: 0.0.0 dependencies: @@ -19035,7 +19035,7 @@ packages: dev: false file:projects/arm-sql.tgz: - resolution: {integrity: sha512-4uzGOXMp2QsJGHHzTsjVP6qykvXtQDmexBR2ZWiG5oqjkJ7F1rPXeH7dEpdWYyK+vCl3xpyTB2Aw2LHyVgREEA==, tarball: file:projects/arm-sql.tgz} + resolution: {integrity: sha512-JswK/xxfffuq6GqmLZ30PNB4b8XpPVWgYDG+myAsaxqKhXx1uKcRMLsaQr3tTTT0bRV2unkmbNG3Ey7BjBsnpQ==, tarball: file:projects/arm-sql.tgz} name: '@rush-temp/arm-sql' version: 0.0.0 dependencies: @@ -19065,7 +19065,7 @@ packages: dev: false file:projects/arm-sqlvirtualmachine.tgz: - resolution: {integrity: sha512-ylVlvSENVEipjj6tzFfAhyBgcg2NyekGz0ICwYeh1+vwN2AyUR1utdpOO98OVBw/I1m2wfCunfsfuMfnIwLWWg==, tarball: file:projects/arm-sqlvirtualmachine.tgz} + resolution: {integrity: sha512-y6IMjc81X/5x0M7oNaOorHAJVycAiUks/CZ3E74U9GRsVPC7Qr+GlE4M4bMnRUl2JR/KKGzkR/5gOStOc7BNow==, tarball: file:projects/arm-sqlvirtualmachine.tgz} name: '@rush-temp/arm-sqlvirtualmachine' version: 0.0.0 dependencies: @@ -19095,7 +19095,7 @@ packages: dev: false file:projects/arm-standbypool.tgz: - resolution: {integrity: sha512-cZ+3KqNhZXQ8w2JL3VlYce2KrfDPCXGHgRqZQiOUbujloVx+MYlARSceN8vLAF1WdVx2Mpz/R1xQQmKgPnLA6A==, tarball: file:projects/arm-standbypool.tgz} + resolution: {integrity: sha512-98KO/aEO7Jt3dxN6nU+52vmQJ/fj9Y3X144am3zcamP9wQA2Yavq2srKLUS6HzKzv1ylVl6B3mqfR1SGtdV3YQ==, tarball: file:projects/arm-standbypool.tgz} name: '@rush-temp/arm-standbypool' version: 0.0.0 dependencies: @@ -19136,7 +19136,7 @@ packages: dev: false file:projects/arm-storage-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-Dk0/NKFoJ3RV/lGmc0Zrq+VaBnlCKOBo5EREfY9ckNo+fiexKWC2nQHSUv0oxe4Y1wlASmuESfjF7Xbc7lqicQ==, tarball: file:projects/arm-storage-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-BhJiAVxtvqPZQlVltSqRfNHXwvEfkM/zpBh7m9Au6h/boIEOg4zrghJ53FF+KLkijK7Vs1w/yWjNhj1CxNcdRg==, tarball: file:projects/arm-storage-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-storage-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -19165,7 +19165,7 @@ packages: dev: false file:projects/arm-storage.tgz: - resolution: {integrity: sha512-D+gdM1Cx/LTFUhd06ZEyB9xm+/pOlNTPAjdNVdChyorVn/lnXjEZh3f3sgRphixkYlck4kGxtFAdzwu1srfsLA==, tarball: file:projects/arm-storage.tgz} + resolution: {integrity: sha512-J2YksUzTqL/qDyCRy1HI3hf64NDRxxs2OA2+mSiTTA2G2bwIgiAQ9f+yjxdynLnaE6JvGO4qNdYTMNuyh7XgWg==, tarball: file:projects/arm-storage.tgz} name: '@rush-temp/arm-storage' version: 0.0.0 dependencies: @@ -19195,7 +19195,7 @@ packages: dev: false file:projects/arm-storageactions.tgz: - resolution: {integrity: sha512-8Pj/Bf/MGP8ktyIo+0pu9anWngbnHunMPbX+I92bfX9YPloFF4+8BkP7uzTCFhX2pFrKapmacRZ7ygRwJmv57g==, tarball: file:projects/arm-storageactions.tgz} + resolution: {integrity: sha512-prmV8ZjJK1sfwzNJx1FWYXmERGr6ithKFTPq1hc9zv6FVq2W4vLi3d78/SgBwYr1Ro/YCMFU2DHR5LF62YUDKg==, tarball: file:projects/arm-storageactions.tgz} name: '@rush-temp/arm-storageactions' version: 0.0.0 dependencies: @@ -19225,7 +19225,7 @@ packages: dev: false file:projects/arm-storagecache.tgz: - resolution: {integrity: sha512-ift1WaqWkoJTVzAQUPL0XmlDFuMeNaX1pgZ/fBJzu9b3QRq2mNmp5ZHZYItvyGREoHQFazdmDiiuy9u2L3dY+A==, tarball: file:projects/arm-storagecache.tgz} + resolution: {integrity: sha512-Lm1hQxdHpuLDC/UNmLXg+/Ownfpz77HS4pVUwdXeLOoZHt83c19tUvnUyl2fkxN6l43gFURxaNxBxDXOkf1Fvg==, tarball: file:projects/arm-storagecache.tgz} name: '@rush-temp/arm-storagecache' version: 0.0.0 dependencies: @@ -19256,7 +19256,7 @@ packages: dev: false file:projects/arm-storageimportexport.tgz: - resolution: {integrity: sha512-dKaklFHHYla9L6VZNIdahMaANzLo0UZzRdaszl5JsMG38wAYDcYd299I44veO5MrVF0y0Z7PiCnZvDMcDKT5nw==, tarball: file:projects/arm-storageimportexport.tgz} + resolution: {integrity: sha512-Kk+hVNzhiYAcPVoHMzfRA5ic9EyKfxOLyyOEDtcL6xhew8VcE9zMtnTQUV0pHWXl2wBeYGaikA7tDW3fevL6CA==, tarball: file:projects/arm-storageimportexport.tgz} name: '@rush-temp/arm-storageimportexport' version: 0.0.0 dependencies: @@ -19284,7 +19284,7 @@ packages: dev: false file:projects/arm-storagemover.tgz: - resolution: {integrity: sha512-fEA/lydnfM5333GkobFYgVdqYYPqs6g3+n6uH0UrvUFb9jOjyichQrE4TAf3Jkwyd3QC1OmiBsaBcPGOyFKMlg==, tarball: file:projects/arm-storagemover.tgz} + resolution: {integrity: sha512-JnK7xSJNR07rz1If0YUYDFVjUFPo21pNFxLhED9D3gYscmtJQ0SLoJ2KoBFlVldINKvW4FN/Uwk/r6uJJ4Ogwg==, tarball: file:projects/arm-storagemover.tgz} name: '@rush-temp/arm-storagemover' version: 0.0.0 dependencies: @@ -19315,7 +19315,7 @@ packages: dev: false file:projects/arm-storagesync.tgz: - resolution: {integrity: sha512-/UPAsoxu3THqO2p2vWl/wEAMG2rS7wT0PuXr9F+BGFO7r+TRmPey4/p/Km2MP7AKoxoiZZl+wxEcUbBftO/qVQ==, tarball: file:projects/arm-storagesync.tgz} + resolution: {integrity: sha512-RNJ1JUw5ZYzt/jJzLrHCEzi+oY4efJtJ/xWqnVlOXw1STl/s+MRleM+tSKw4zub9yVN3YkXlK4NC+/rrlrohiA==, tarball: file:projects/arm-storagesync.tgz} name: '@rush-temp/arm-storagesync' version: 0.0.0 dependencies: @@ -19344,7 +19344,7 @@ packages: dev: false file:projects/arm-storsimple1200series.tgz: - resolution: {integrity: sha512-L9ILvdPbReCuNr+9f12UcihnSndHXgI8sKv9IIaWiCKQMPEMP1Pk7a1npC4KMJt+evOhtGhoxhd7YKL8Yh+Fwg==, tarball: file:projects/arm-storsimple1200series.tgz} + resolution: {integrity: sha512-ciw7udwQWYlaCJI74gDNSzUk/TDizsfB2U1yaJazGBKiOARwAzklZ1dKYcI/sybBJliLu95B2NpbDPnWbGzVYg==, tarball: file:projects/arm-storsimple1200series.tgz} name: '@rush-temp/arm-storsimple1200series' version: 0.0.0 dependencies: @@ -19373,7 +19373,7 @@ packages: dev: false file:projects/arm-storsimple8000series.tgz: - resolution: {integrity: sha512-nnZ8n6xK3zOtbM+qw8WWaCiniwWN7riA/2xuXpI1MJYb3WLCqRDhF1OPGEE62sMd0PvC0ZDWurZ/M+MVL5+3jw==, tarball: file:projects/arm-storsimple8000series.tgz} + resolution: {integrity: sha512-LB4whcJidzmcAduNBKpZ+yeUiP81Hd4ontBuS9xwBC3mskmSNchBRUHBnOP1NNm6dsJh8yJ/cwo2ERVPwtU9qw==, tarball: file:projects/arm-storsimple8000series.tgz} name: '@rush-temp/arm-storsimple8000series' version: 0.0.0 dependencies: @@ -19402,7 +19402,7 @@ packages: dev: false file:projects/arm-streamanalytics.tgz: - resolution: {integrity: sha512-D7TpBeB6DPpAWPJwq3jlivrojOWee/r7TSJuv7hxUBVKF0fcyqtEPHTafSUwEZAS0zGodfBuuwTyIDzC5u4JMA==, tarball: file:projects/arm-streamanalytics.tgz} + resolution: {integrity: sha512-JD1vmdc8K94+1hhPgqErq99pNyvDDHQK9GhWqNCu5gCvV0k12jofyv7v4bxrt4ucRLwSn22jyl4BSa+35SOt9w==, tarball: file:projects/arm-streamanalytics.tgz} name: '@rush-temp/arm-streamanalytics' version: 0.0.0 dependencies: @@ -19432,7 +19432,7 @@ packages: dev: false file:projects/arm-subscriptions-profile-2020-09-01-hybrid.tgz: - resolution: {integrity: sha512-9kqe6iGwxQqLIhNyZxk7iWE0ISaPERLYdW/T/EUKdhAPHCXOEWl6jyoRv7GlrISyrO+VyzlaZA3/Mpkm7bp80A==, tarball: file:projects/arm-subscriptions-profile-2020-09-01-hybrid.tgz} + resolution: {integrity: sha512-Duc1ZdKb4APnFH0ct5dtnrHstDYeQ3UdD0jCg0oldd3hDwCkEplmDm3Eue8WFbRnx1tBUvwhn1PzMZ39mKkJAg==, tarball: file:projects/arm-subscriptions-profile-2020-09-01-hybrid.tgz} name: '@rush-temp/arm-subscriptions-profile-2020-09-01-hybrid' version: 0.0.0 dependencies: @@ -19460,7 +19460,7 @@ packages: dev: false file:projects/arm-subscriptions.tgz: - resolution: {integrity: sha512-nlZ0V5NInUqt+nDesrlEcOW0zco4k2AFLjKYpXat5aapkaSrXM122M6QjSS1bANc2PaujIMet4YgNk52bczlHQ==, tarball: file:projects/arm-subscriptions.tgz} + resolution: {integrity: sha512-7tTcBOLvvnnVpm8e/xueEqechdj+7gXaKqZcictAopdO6H/0bVZyvP1i2CiN2QXB8Yg0+tGoiUK72rJmZsvg3w==, tarball: file:projects/arm-subscriptions.tgz} name: '@rush-temp/arm-subscriptions' version: 0.0.0 dependencies: @@ -19489,7 +19489,7 @@ packages: dev: false file:projects/arm-support.tgz: - resolution: {integrity: sha512-xboAPd4ZedMCUoDARb1jBQG9OqiV4eJeM083O69HM96KcD1ofFIJ9bxWAf2r+QTN5zNOmcD8MKAZHTIfrYdEEA==, tarball: file:projects/arm-support.tgz} + resolution: {integrity: sha512-WCl64lCimB7pNbgeonCmJS1qSwmNxoB6KqBmmA/s3TzENiqmhzfqBERkslh/x7b1IE1Qclqts3l7lxzEGVHPhA==, tarball: file:projects/arm-support.tgz} name: '@rush-temp/arm-support' version: 0.0.0 dependencies: @@ -19519,7 +19519,7 @@ packages: dev: false file:projects/arm-synapse.tgz: - resolution: {integrity: sha512-uhGp6uBIE4OQAM8QkLCFZQEAUH5gllL9g/fcgsTXbIl2wN+hErb7FPbhgejXx4YoSuD/XXeGP+mF00qez1ObRQ==, tarball: file:projects/arm-synapse.tgz} + resolution: {integrity: sha512-YzkU2mRcXDAm0GKZVMcNnyOmEsK5Fo5WBd1ZZuvr6HxVnfLGSHhyhbxWddrkkYLaEU3WB5Lo+MyMTNMX7fiJuA==, tarball: file:projects/arm-synapse.tgz} name: '@rush-temp/arm-synapse' version: 0.0.0 dependencies: @@ -19549,7 +19549,7 @@ packages: dev: false file:projects/arm-templatespecs.tgz: - resolution: {integrity: sha512-WZcUYjB8p3XJq4YE2aTRuwfjFLUgiAubD/bprro19usu44kuVqxFw5/a137CkCosJWFRyFFcZS1VVuFlWlOlbQ==, tarball: file:projects/arm-templatespecs.tgz} + resolution: {integrity: sha512-pV8zvIeZl6Zw1r+rYImToOFqB3IonsnSchpOcLET1HULXxF9sYPkdZHof+x8586LfA0/cSq5ew+NP7Gjll0rBA==, tarball: file:projects/arm-templatespecs.tgz} name: '@rush-temp/arm-templatespecs' version: 0.0.0 dependencies: @@ -19576,7 +19576,7 @@ packages: dev: false file:projects/arm-timeseriesinsights.tgz: - resolution: {integrity: sha512-kTjFi9gRBxK6iv7PZ26RytCDhwZPBDvOgiW08rJZUG5uTjoKKXbao1mhdhIwW6OCxRAXBx7jeSaJ5pEKDgmM9Q==, tarball: file:projects/arm-timeseriesinsights.tgz} + resolution: {integrity: sha512-aNZ/o+0GLk76WBRObGYUXx3X/XEDM7lf21OB1/njJK7+nYpqAUl1KsUZFtST6jJpxcqdCEz/2aIl1zKfzPTUYg==, tarball: file:projects/arm-timeseriesinsights.tgz} name: '@rush-temp/arm-timeseriesinsights' version: 0.0.0 dependencies: @@ -19606,7 +19606,7 @@ packages: dev: false file:projects/arm-trafficmanager.tgz: - resolution: {integrity: sha512-4dB87usrmS7g4Y/wbt3BHkHC3NX2FbtRD5l8O2Iy7LTnWDpUk5GXZDyhJEuO/FzzxB4eYI/+VJMHmCkrWck/gw==, tarball: file:projects/arm-trafficmanager.tgz} + resolution: {integrity: sha512-iMPP4pHuXFMziscMsQ1kfrfINmu+Uz1dWESxOfAlBWFrYkuZpyacWXySRRy3uQYtDpFO3b8fPcWbKvn5hDlzUA==, tarball: file:projects/arm-trafficmanager.tgz} name: '@rush-temp/arm-trafficmanager' version: 0.0.0 dependencies: @@ -19634,7 +19634,7 @@ packages: dev: false file:projects/arm-trustedsigning.tgz: - resolution: {integrity: sha512-pM0yO35qILHYaE1RUXpcUNchhXTOxF//WJ9yoM6Ts5G+oXI1oodtUQKcj5F4KUpGj8JTvdsyMqzjzeCR6coWlw==, tarball: file:projects/arm-trustedsigning.tgz} + resolution: {integrity: sha512-PWnXX1lNECFzpFwIBdThheK+pAh5+FI6vvbgRxa8BW0yAULyjVeTRFCIfXFY3YF2CQFatKKBOn4NSc3x/3qnHA==, tarball: file:projects/arm-trustedsigning.tgz} name: '@rush-temp/arm-trustedsigning' version: 0.0.0 dependencies: @@ -19674,7 +19674,7 @@ packages: dev: false file:projects/arm-visualstudio.tgz: - resolution: {integrity: sha512-sZqUoPfTZMPABUs78TRxnVgyyvmkfpfdFgnTqDtKV2VMfR1+elQonhWnIB9zZvzM3PWKhHKYMbMYGL6q/6hY0A==, tarball: file:projects/arm-visualstudio.tgz} + resolution: {integrity: sha512-DbNavcbXUgqJf1lVPCu+S0ckwd7yNiEiQBlMq+J9c6NWHNmpGUea5c0clXWdBUs80gZGpGTUwud0PDnolmNP0w==, tarball: file:projects/arm-visualstudio.tgz} name: '@rush-temp/arm-visualstudio' version: 0.0.0 dependencies: @@ -19703,7 +19703,7 @@ packages: dev: false file:projects/arm-vmwarecloudsimple.tgz: - resolution: {integrity: sha512-cJ3NpR44iDYdN1p6NKqiioV82rBsnbQgREtB9uLcCedMwuJGmvmwoUC//X92+gT14R2mD0AJhcto91Z6gZ3gEg==, tarball: file:projects/arm-vmwarecloudsimple.tgz} + resolution: {integrity: sha512-Tb8LWMIa0cIApKDexTqAgxFIxetP0QeBXH28LQra7/oULW46CHZN5t1Of/XCg8NCebnR1VVq4H6YuBkamFn1aQ==, tarball: file:projects/arm-vmwarecloudsimple.tgz} name: '@rush-temp/arm-vmwarecloudsimple' version: 0.0.0 dependencies: @@ -19733,7 +19733,7 @@ packages: dev: false file:projects/arm-voiceservices.tgz: - resolution: {integrity: sha512-0p3hyirUi4tE54EaNnC0IWATrXVXxXhkSBwUQgaaUQasL2bJe8yYRldg2gLuMfM04fDB+dof6sV70bI4MOTyDg==, tarball: file:projects/arm-voiceservices.tgz} + resolution: {integrity: sha512-XYwbHyA1LMsbMzM6i2d8EdRmVkm+qlO0js/H0WV6PQ6cYCjYvhSJn32S2thsRXHsbvpfHZyR9VEDJ+K69PE7Kg==, tarball: file:projects/arm-voiceservices.tgz} name: '@rush-temp/arm-voiceservices' version: 0.0.0 dependencies: @@ -19763,7 +19763,7 @@ packages: dev: false file:projects/arm-webpubsub.tgz: - resolution: {integrity: sha512-B+gUzveoYN7PvJ8n62fRjUH/JR8mOH0Ta8LfjVdqK3cKhfD7jHU0JIww2tJlbx8dWOUAwUQ8OV1yx7FhcFBVIA==, tarball: file:projects/arm-webpubsub.tgz} + resolution: {integrity: sha512-eSjHx16RUnAwJ0qPNc/yBMfVn8boFuomPD7Wnj3vGH2rMUGpcYAFHgUWjT2uzauFhU4zTAX38bbGLTrztjcDLQ==, tarball: file:projects/arm-webpubsub.tgz} name: '@rush-temp/arm-webpubsub' version: 0.0.0 dependencies: @@ -19793,7 +19793,7 @@ packages: dev: false file:projects/arm-webservices.tgz: - resolution: {integrity: sha512-EXRMDSMgRVCzdphqLjHqc6Qh4i+GeQMaSx49YG1QK3Y3k7gVOOD8vJ3yOlF559/cbZItinNFpCDRdwCY7ZDK6g==, tarball: file:projects/arm-webservices.tgz} + resolution: {integrity: sha512-3AUvG7keFYXdmeWVGjQDBgg1dBpae5B4tz4hGkJgtHnL7WH9G2+Y6qtIlEe4q0ds2VToZOoKGTP0Q7foU+XMCA==, tarball: file:projects/arm-webservices.tgz} name: '@rush-temp/arm-webservices' version: 0.0.0 dependencies: @@ -19822,7 +19822,7 @@ packages: dev: false file:projects/arm-workloads.tgz: - resolution: {integrity: sha512-9U3p/HSzE9FvRsMI2GncQDU/qTzmcIaUdVwVNFhJGhcw0yB3o6HaNUNk+KvFtNLNDRAONVLRqBn3X0FPqTyezg==, tarball: file:projects/arm-workloads.tgz} + resolution: {integrity: sha512-RRKjeLMz7miNlGELRsyC5l8m1QaEW2d2GRvUqSuxYqyOcO32Cx7HcuSLbptoyR4vWOdRivMQpQsjPkRWgZxkXA==, tarball: file:projects/arm-workloads.tgz} name: '@rush-temp/arm-workloads' version: 0.0.0 dependencies: @@ -19852,7 +19852,7 @@ packages: dev: false file:projects/arm-workloadssapvirtualinstance.tgz: - resolution: {integrity: sha512-gi64gGNgcvfqymMJtk6TVCzhfTMNm/c31TtUvbb2NIEHfnL8ilqLp36MslfDII8HAePx/Q0tSp1e+GsDj/B/vg==, tarball: file:projects/arm-workloadssapvirtualinstance.tgz} + resolution: {integrity: sha512-4EYSd9RcS40GlkNR5IGqsCeh/Pv9Xx36j0V1k/2Bjlw5hkpWBo5uCDAR9qWXC0F9YVv4FZ1VqcupEgjyoIvBOQ==, tarball: file:projects/arm-workloadssapvirtualinstance.tgz} name: '@rush-temp/arm-workloadssapvirtualinstance' version: 0.0.0 dependencies: @@ -19882,7 +19882,7 @@ packages: dev: false file:projects/arm-workspaces.tgz: - resolution: {integrity: sha512-ml2DCKgBYjaSTnSfhlgJNaOxIwsWXXFdQkuotrNuVxOXzBY2qGnGbeZvE8925RqOmcL7dgi7ILvZ3iV7KOgvnA==, tarball: file:projects/arm-workspaces.tgz} + resolution: {integrity: sha512-WtBMuClZa6vT0ju0K65NztpljH40w+V5vKmOMUPK9vC0k2X7wxX13niHj6fZeyHftV0uAhK3rRZZjYIYVnr1rw==, tarball: file:projects/arm-workspaces.tgz} name: '@rush-temp/arm-workspaces' version: 0.0.0 dependencies: @@ -19909,7 +19909,7 @@ packages: dev: false file:projects/attestation.tgz: - resolution: {integrity: sha512-S4+RET61OboKlkCbVFuMQAwKSN2zLs3FcTZgdjO0uFskexGuKt7ZFfpeNJQeA0DgfkttUVoDmpFTI5DSCiIvPA==, tarball: file:projects/attestation.tgz} + resolution: {integrity: sha512-0kI30QHKBXk+W68K+zxIKPJWca0weJVb/pp/HR9iPyiQpzqPYrwbMSUbK2Z1AwmRx6AoWKXW49xwlLybTrkEPg==, tarball: file:projects/attestation.tgz} name: '@rush-temp/attestation' version: 0.0.0 dependencies: @@ -19961,7 +19961,7 @@ packages: dev: false file:projects/batch.tgz: - resolution: {integrity: sha512-qcejYVKun66XfHmA/hkE/MzrE/Wd7ZohaNc47LLKtziqFrTEbvhvHct55kMvhO5btpLaKyyY5h/DHxniRhBEqw==, tarball: file:projects/batch.tgz} + resolution: {integrity: sha512-ed24pRYe+m5nW118Ux5kuuHDi6kMlZ4Qm7V4d/RlZHUMZ7sRqJBQZOrbaTAeIvDardnSMcNixvohDhTKlovOPg==, tarball: file:projects/batch.tgz} name: '@rush-temp/batch' version: 0.0.0 dependencies: @@ -20002,7 +20002,7 @@ packages: dev: false file:projects/communication-alpha-ids.tgz: - resolution: {integrity: sha512-iUYWqI/PwHdHd4PpLPlBaIzTsyUOcTPCkIepenHDvHNu6Iy3QZpi0jYqo1GRbvIXMs2i8nQ4/WxAhUwADxvLGw==, tarball: file:projects/communication-alpha-ids.tgz} + resolution: {integrity: sha512-xFgJleznDehcuviTpsLqycCqPzUAqwPJ0E2Z0xdZcrNvEigbqrOj/drGbCv7YIvnFyBCO/xapXdLAYOm5ukuAQ==, tarball: file:projects/communication-alpha-ids.tgz} name: '@rush-temp/communication-alpha-ids' version: 0.0.0 dependencies: @@ -20231,7 +20231,7 @@ packages: dev: false file:projects/communication-identity.tgz: - resolution: {integrity: sha512-WKDtxUJqqvXMsdSa52wAn4azC0enIDOAdwEw5zMBZQm6BnBbauirwUVFcz6WW973ieqI31pHhue6zTAefwWTfQ==, tarball: file:projects/communication-identity.tgz} + resolution: {integrity: sha512-k6k745cwIrTlRp09oHrKDdBaGBTa7Hg2HmHAZoRzqbgS7rBgx7Pcdjacfs4NrPofMDzGsATT3LuwyMCDEvylLw==, tarball: file:projects/communication-identity.tgz} name: '@rush-temp/communication-identity' version: 0.0.0 dependencies: @@ -20327,7 +20327,7 @@ packages: dev: false file:projects/communication-job-router.tgz: - resolution: {integrity: sha512-jlO9QjK5W6b4aS+ABhwfwjecO7DG0i3iSpzAEeXKH+DR+tD8gEfi9OXiQrLbQpHSqrMf4XYtfU6dNA2AwXh9qw==, tarball: file:projects/communication-job-router.tgz} + resolution: {integrity: sha512-mrWimvzdQQ2oP/dvkEM0P3pKsYmsZAZF7VmyJ6lAStfZRAIwZLIbw7TIGfTxIdrLmi0Z7HQJpoRLC9At2UQSVw==, tarball: file:projects/communication-job-router.tgz} name: '@rush-temp/communication-job-router' version: 0.0.0 dependencies: @@ -20373,7 +20373,7 @@ packages: dev: false file:projects/communication-messages.tgz: - resolution: {integrity: sha512-MAIKLbEP+GCVWFg2oIMjZKZJDM/m9BUh5idjXIvPmDF1cWTS0ebUcTbNZOZSsMLDs6vlEj+JLtjreghnm3tauQ==, tarball: file:projects/communication-messages.tgz} + resolution: {integrity: sha512-0W4DsVHZHJYvVHCWLB2U4jta6l9Bs17F+B++0lekolDACQ6Mvjw4381+dcj03MgMIc97cOjk7G07s5YZ30mXkQ==, tarball: file:projects/communication-messages.tgz} name: '@rush-temp/communication-messages' version: 0.0.0 dependencies: @@ -20419,7 +20419,7 @@ packages: dev: false file:projects/communication-phone-numbers.tgz: - resolution: {integrity: sha512-Xb+Yw0lwlocVQeDFA/jNZvzdOU3j33WKDWOm0CrPPRLXEF2c1O0w8RJbKLrlQ7Pk9+dUeCs0gGzkKOA2/kE8kA==, tarball: file:projects/communication-phone-numbers.tgz} + resolution: {integrity: sha512-hRdt1H4gRCYl3EswQf98r+dTcXZAjsRVHSo0BYFMqhe7P855XD5WWC89RZJEY0qmkajuGmPRaJKSZRARYdUvRQ==, tarball: file:projects/communication-phone-numbers.tgz} name: '@rush-temp/communication-phone-numbers' version: 0.0.0 dependencies: @@ -20465,7 +20465,7 @@ packages: dev: false file:projects/communication-recipient-verification.tgz: - resolution: {integrity: sha512-t/dSvm83l91b6FK3+kH9Of9AiX5bzXCafc3Ozc4rrYa3RLo17slswJdH/eWYgibiNyf3/YpK59pNPWf92rffdQ==, tarball: file:projects/communication-recipient-verification.tgz} + resolution: {integrity: sha512-J+rtKd7sOJYyndWDR27PsojcmgR/hFyjqFpMCe+8K9dWL/1aSVcq8SgJrsN7wjX5d4F2RdHpQgrQX03MT4tfEg==, tarball: file:projects/communication-recipient-verification.tgz} name: '@rush-temp/communication-recipient-verification' version: 0.0.0 dependencies: @@ -20548,7 +20548,7 @@ packages: dev: false file:projects/communication-short-codes.tgz: - resolution: {integrity: sha512-GyoXHmXlQ4LSxjc8HzKSOz1kNAMGUZ5DPDh+jj/XwE7hZpoZ4JQlobh9xzBpkwfAMudYx1Pqrw0TbPxVyJRGIg==, tarball: file:projects/communication-short-codes.tgz} + resolution: {integrity: sha512-lsIHAuCOCp15qm4M/bW8noYmn5G7YNHGXXJMbRJpoF1xugHYd32txq9ncfkW736opZLogdl4g4BaP7Xz09jltg==, tarball: file:projects/communication-short-codes.tgz} name: '@rush-temp/communication-short-codes' version: 0.0.0 dependencies: @@ -20595,7 +20595,7 @@ packages: dev: false file:projects/communication-sms.tgz: - resolution: {integrity: sha512-hShG7UuPjkcZPi05sMJIIKzt7P8KxHVV8NFqfQFkJqZTqUpz/oX1qgIGF6qfeuRdlAgWHBO6Bm5dbvAB/27bLA==, tarball: file:projects/communication-sms.tgz} + resolution: {integrity: sha512-LKLE/O+Ik1n006WeJxC+plQO8u+4Afv3HIi61dH+4uPsZtPmODiCePKj/LOJ4lk+HMbvO1rMuA/FIFtfZ23xRg==, tarball: file:projects/communication-sms.tgz} name: '@rush-temp/communication-sms' version: 0.0.0 dependencies: @@ -20641,7 +20641,7 @@ packages: dev: false file:projects/communication-tiering.tgz: - resolution: {integrity: sha512-Gx+JUJpNjV1mZZiLy6bn+WknQlil9GipTAREI0F3CUfv3ptQ0HRF58MEOl2Em/k34ChET8Bd4BjQrbByAexSlg==, tarball: file:projects/communication-tiering.tgz} + resolution: {integrity: sha512-BWypMb8plmmmJEsL0pwLaKwyxs5PocxMyKUBQGAGR3hHDbBiXH6mxyx51fXa4Wr6XZRhn8nYYs9QOJTzpuYWqQ==, tarball: file:projects/communication-tiering.tgz} name: '@rush-temp/communication-tiering' version: 0.0.0 dependencies: @@ -20688,7 +20688,7 @@ packages: dev: false file:projects/communication-toll-free-verification.tgz: - resolution: {integrity: sha512-5dlVQHAIFCsmOM1Hjbnq/hx+h1HL5uBEYLs7OKQ75sEECEOYNItbISt14G/hUmgedeUo+MdUMcfbWsJSOoHFjg==, tarball: file:projects/communication-toll-free-verification.tgz} + resolution: {integrity: sha512-ZioTnRKuptXOXirUF/1bAhaRRjKUYu0UW+jUAGsEodkIYnfz24jbuTuzbn393sijtrTRdF+i7PVw1DTHPRm/bA==, tarball: file:projects/communication-toll-free-verification.tgz} name: '@rush-temp/communication-toll-free-verification' version: 0.0.0 dependencies: @@ -20732,7 +20732,7 @@ packages: dev: false file:projects/confidential-ledger.tgz: - resolution: {integrity: sha512-RS9NA+FZyxsiEJ5qT7QL2SMjx6oTJ3cT6L2stXjDw8TUwgpxE20tNQ1M1qU1kQzC3OvXeDNoIK49+siKZFJZQw==, tarball: file:projects/confidential-ledger.tgz} + resolution: {integrity: sha512-8fjMFjF5SoW8yrayja4pbxrjsxJdJMZRuUplkkv6lxJ5wjTZy1EIwJPAzxgUoTnNB1u/MoEPTzmNx7RJnwGgww==, tarball: file:projects/confidential-ledger.tgz} name: '@rush-temp/confidential-ledger' version: 0.0.0 dependencies: @@ -20763,7 +20763,7 @@ packages: dev: false file:projects/container-registry.tgz: - resolution: {integrity: sha512-wy/9SdJ0Aa3QtDo9n0BtE0pxHcjU9WCzTNOq2s3IpUjQqalYvCKockZSOJHbVBPu69Dx/c79boY2vIs67UVLAw==, tarball: file:projects/container-registry.tgz} + resolution: {integrity: sha512-jmM7LwjpJOtYestVY03GFx1ssRr5jWBw9/sxoIGmScTRQjJcTv5i8JzK0IqKm7/S7XsqLzXX3oBzaorftDdy+A==, tarball: file:projects/container-registry.tgz} name: '@rush-temp/container-registry' version: 0.0.0 dependencies: @@ -21269,7 +21269,7 @@ packages: dev: false file:projects/cosmos.tgz: - resolution: {integrity: sha512-BG2/F66EtJdYXB9BS5ncXfyl4gxmvR84N+dH6gAs8DGMweff3YRX7EmXb3DCcrfLgueG4g8AE+AShB+AELDOUA==, tarball: file:projects/cosmos.tgz} + resolution: {integrity: sha512-NEqtZrEtVRqcc1RrP9qCUnz4o0zgsC7tkoxjKPFZLBpTi69xVv26oJ7K5VrTLpU8teQ27nrsg54/EFibL1/TVQ==, tarball: file:projects/cosmos.tgz} name: '@rush-temp/cosmos' version: 0.0.0 dependencies: @@ -21344,7 +21344,7 @@ packages: dev: false file:projects/data-tables.tgz: - resolution: {integrity: sha512-GUoND/1zfLnVHc9TvBZo58JMS2xCmpHbs9YwV0UyCUkgC32Ah9CseHjUOBhEau4OJZd7GIqmx6PmNhvMqaAlJw==, tarball: file:projects/data-tables.tgz} + resolution: {integrity: sha512-X1zclHAGfTFnz6q1/ZFTUe4YrekWw6uMS2yKlLKco/56UIa1vn4eC2Q+pCg8jPbOBUdWA/f0OAdjhxboot56KQ==, tarball: file:projects/data-tables.tgz} name: '@rush-temp/data-tables' version: 0.0.0 dependencies: @@ -21389,7 +21389,7 @@ packages: dev: false file:projects/defender-easm.tgz: - resolution: {integrity: sha512-edWbdSpLv1D+o4+VTjMzLaXckmUqFJYRK6/D5psEoaSTTXSY31FYcxSPp+APpHpfReU1ncV/rLt7ICye5WEO3Q==, tarball: file:projects/defender-easm.tgz} + resolution: {integrity: sha512-BocgBDcvhUdkw/U4W+vt8WexyU396P1FcGpgdXZOQ3Y9Fe56tzVaHr4Y2P/ju4KbFc249kjnNVvl0byCKyIczg==, tarball: file:projects/defender-easm.tgz} name: '@rush-temp/defender-easm' version: 0.0.0 dependencies: @@ -21511,7 +21511,7 @@ packages: dev: false file:projects/developer-devcenter.tgz: - resolution: {integrity: sha512-mQIm2JCw/Gsg9qQrOO2tEyt46vf6Dn+UNZH4eLu2hYywu70OJfIdE2QRySOjGYSKkMaO+hvKHUHokLJS2u6soA==, tarball: file:projects/developer-devcenter.tgz} + resolution: {integrity: sha512-sZyITmh4h7E6XkOr1goePoOUzSZ3ljNiC95mbwBzaD92vb4L9xMmDhAEffwKCjZQ5yySLHeZV2OLOqO4g72r/Q==, tarball: file:projects/developer-devcenter.tgz} name: '@rush-temp/developer-devcenter' version: 0.0.0 dependencies: @@ -21552,7 +21552,7 @@ packages: dev: false file:projects/digital-twins-core.tgz: - resolution: {integrity: sha512-HgmXSGaWmjNqZ/wSUHa9QCILiaatflM3TufRLP2WNFRXrXMbmIeJObl+Iz5T59ftC/AJOGkUIR+GwFiDS+ESGw==, tarball: file:projects/digital-twins-core.tgz} + resolution: {integrity: sha512-K6z+PMb/YARqupOFlkcGUfXqjJUDXN8UZGXcN0r973IhyHnx4dlfDdDBeFFbPDYAMN8BDv1/6vedFVo7aKOc8g==, tarball: file:projects/digital-twins-core.tgz} name: '@rush-temp/digital-twins-core' version: 0.0.0 dependencies: @@ -21651,7 +21651,7 @@ packages: dev: false file:projects/event-hubs.tgz: - resolution: {integrity: sha512-6nKUp0FboUYDZKtlwJMJhj9xC1m1aWMtmZV4Dk3Ux2W3I09hBb3WNjlUjE2UliB8+UYvycenLO4SAaGLLesWGg==, tarball: file:projects/event-hubs.tgz} + resolution: {integrity: sha512-+HzH3P5PeM6fLWGWcyUDI/2d8ZPr9uOkjf5IMXXW+7viY/TpMMadf9ku/1GCqLksadjfRwGOJqfMJwVoXWYigw==, tarball: file:projects/event-hubs.tgz} name: '@rush-temp/event-hubs' version: 0.0.0 dependencies: @@ -21709,7 +21709,7 @@ packages: dev: false file:projects/eventgrid-namespaces.tgz: - resolution: {integrity: sha512-TpaQh2QLoRl7K9q2EkZ60Lj32gSFx/NLS5rS29J2XE98qB3zIn4Cq/fCehwjY95WIRDQA2lJ+atAJOUznLcuYA==, tarball: file:projects/eventgrid-namespaces.tgz} + resolution: {integrity: sha512-HCwtJrdHQd1ycp6VX+oKXCs0zuOELQtH1ynjLEIw3kixC5epadFFMYhWVibCJ1Km7SDTiejOWxkEUOq2FhWQTw==, tarball: file:projects/eventgrid-namespaces.tgz} name: '@rush-temp/eventgrid-namespaces' version: 0.0.0 dependencies: @@ -21758,7 +21758,7 @@ packages: dev: false file:projects/eventgrid-system-events.tgz: - resolution: {integrity: sha512-uUxURbiSr/6FqIrXwaQQUbDdaf1q1TMX2BHGFCRBBCfRzInC4XpanLZ4bVi5CzrzPiKyTp6j2bXxI2ZYVW93zQ==, tarball: file:projects/eventgrid-system-events.tgz} + resolution: {integrity: sha512-cDQRX9ZpRKDi02xJSpmxpF3UzmU/xCzxNPZnVRSoIupZ2EKWqKt9WEaQSydy/aNIzy2raMibWqyTO5Nf9gHuzg==, tarball: file:projects/eventgrid-system-events.tgz} name: '@rush-temp/eventgrid-system-events' version: 0.0.0 dependencies: @@ -21852,7 +21852,7 @@ packages: dev: false file:projects/eventhubs-checkpointstore-blob.tgz(chai@4.3.10): - resolution: {integrity: sha512-oZT3pkd7iP6/eDOzP1hMsPdZGr4uVa7kKAmcAPC66OtMfG8aGfMVlX99cXZREqNfQ/cycW9d6y/QLpYvKOts1g==, tarball: file:projects/eventhubs-checkpointstore-blob.tgz} + resolution: {integrity: sha512-m1V0PP5WR2Ox0RzHWDizwSFANg0zj8UuBqVt6ECtSO6DgfiCj9FuSaIpOKwhvb+prOV4GGC4IihtwBaORDQPGg==, tarball: file:projects/eventhubs-checkpointstore-blob.tgz} id: file:projects/eventhubs-checkpointstore-blob.tgz name: '@rush-temp/eventhubs-checkpointstore-blob' version: 0.0.0 @@ -21904,7 +21904,7 @@ packages: dev: false file:projects/eventhubs-checkpointstore-table.tgz(chai@4.3.10): - resolution: {integrity: sha512-qll9lPAi9k2zTGohWe4Gqkmz3ORfc9tVm0mSWLlRokBblMWy2Db/vynM3z8rUqKtAyFBC38rTGl2AdLCMP+Evw==, tarball: file:projects/eventhubs-checkpointstore-table.tgz} + resolution: {integrity: sha512-aTiThbGjLc8XtCtTW8nlwpFiTXyhXPRPdynjmMoe8xmsJ6DOhQRuHkFH/FcfN7lh7W5wBJ9pQhtekB+RVT+EsQ==, tarball: file:projects/eventhubs-checkpointstore-table.tgz} id: file:projects/eventhubs-checkpointstore-table.tgz name: '@rush-temp/eventhubs-checkpointstore-table' version: 0.0.0 @@ -21956,7 +21956,7 @@ packages: dev: false file:projects/functions-authentication-events.tgz: - resolution: {integrity: sha512-TnCtaJNI8rM3o46VQxH5c+zUnKf0ZpAYe8oKLJT8WZYcRWw6Ygli8D6KlTiTUMl0BDwnxpb39helhtVmAYQXFQ==, tarball: file:projects/functions-authentication-events.tgz} + resolution: {integrity: sha512-LHfQ4TU5puF3HT2KJsP6/629Ek6M91PnInZr+OnvQPKQ6yv9Q+Lx/GbKvcezZ/Ts2fo6IeyyuBEnerDQvcFWaQ==, tarball: file:projects/functions-authentication-events.tgz} name: '@rush-temp/functions-authentication-events' version: 0.0.0 dependencies: @@ -22002,7 +22002,7 @@ packages: dev: false file:projects/health-deidentification.tgz: - resolution: {integrity: sha512-3Zlz+188mWXrZxdoJl5fB0DlvQfS5l3ATHen6YEOqUABed6QWm9rUhlLPjaTg1AbasByRJgI3EMZ6VQt+4FjRQ==, tarball: file:projects/health-deidentification.tgz} + resolution: {integrity: sha512-FgUjMxR7C8Mxur4d4r3jwFVcGId46XQtMnkvz6z22uNgor23+FRbusECRKOtynej4fA68EV+psD3HgBofX1yoQ==, tarball: file:projects/health-deidentification.tgz} name: '@rush-temp/health-deidentification' version: 0.0.0 dependencies: @@ -22043,7 +22043,7 @@ packages: dev: false file:projects/health-insights-cancerprofiling.tgz: - resolution: {integrity: sha512-H08XezcxzfD0sYD5MN7Hjc+v4bkgCLHrMR83oFGLzM0NwIg13rEz2RNz0Ck6XZ93vjWkMkqDOm/Fh9/8eUWXsg==, tarball: file:projects/health-insights-cancerprofiling.tgz} + resolution: {integrity: sha512-YzMtdy+q9gAmqFbR22mib/GMo20oIYZUAddihjWPBr00RUNRL5k0alhI1/3hT8xsSnvqkNymZwqqfmxjpC4sVg==, tarball: file:projects/health-insights-cancerprofiling.tgz} name: '@rush-temp/health-insights-cancerprofiling' version: 0.0.0 dependencies: @@ -22091,7 +22091,7 @@ packages: dev: false file:projects/health-insights-clinicalmatching.tgz: - resolution: {integrity: sha512-FpINYkz1+xj/jYqYLTEhplutJt+LTmTfsptBZPW7IgIcfgPdOuwMc8/+QXq4RSy+XDrM8lxWXe/LdPzL1xSqpA==, tarball: file:projects/health-insights-clinicalmatching.tgz} + resolution: {integrity: sha512-oJiRB940+TJb5iK6Mmx8vGnK6twk6eYUdnPRrqSzTTDO+vYnA1epL9PgdPg4JtkHYq5YSQDxBJVro1t8J+sCFw==, tarball: file:projects/health-insights-clinicalmatching.tgz} name: '@rush-temp/health-insights-clinicalmatching' version: 0.0.0 dependencies: @@ -22139,7 +22139,7 @@ packages: dev: false file:projects/health-insights-radiologyinsights.tgz: - resolution: {integrity: sha512-oGIjzvhHIEzlxVQViYzJMUBcVCeq0rBKIGz7FXydAnYBH5VPPQDNIijXs2Jjm37wpj6KZt1DUHeu1ACErGKQXg==, tarball: file:projects/health-insights-radiologyinsights.tgz} + resolution: {integrity: sha512-YVldAnR672BIjQ5APmZiPdeeSTTE5JR4TxEQ9MaPjQn5f80H8zq2drSn+bDVdjTvXV92h/T+GnYShsaKaztBxA==, tarball: file:projects/health-insights-radiologyinsights.tgz} name: '@rush-temp/health-insights-radiologyinsights' version: 0.0.0 dependencies: @@ -22187,7 +22187,7 @@ packages: dev: false file:projects/identity-broker.tgz: - resolution: {integrity: sha512-jDesDQ2rJP0o85FLwuliapxSsTDhNrFvZXIZjga9/+pga+j9yrPoFEAeGCJYAIsyjRKUnDyQoJasjrdf5/cFIg==, tarball: file:projects/identity-broker.tgz} + resolution: {integrity: sha512-AQBiNaB80DZYZ60YqO0uJuMTvxymE/vTC0Xkl0NR0Im1FWTzBd5+ydSh7kye/jy0zHHltW+msY7EWtz+AlRW2A==, tarball: file:projects/identity-broker.tgz} name: '@rush-temp/identity-broker' version: 0.0.0 dependencies: @@ -22216,7 +22216,7 @@ packages: dev: false file:projects/identity-cache-persistence.tgz: - resolution: {integrity: sha512-qshsWWLQ0e/wFF+h7tR/BQL+wgTFwlbyHGio+vlwFapFnowgNhEgxU2A/IG8D+mhe+aS4BotojLHC+c0OiGRrQ==, tarball: file:projects/identity-cache-persistence.tgz} + resolution: {integrity: sha512-KHbqYaFZwaG1Vhk/Du+PZFWfPQOxAY9/bkl+oyMlWLKNV5BOZhekHfuZgXH5NledST6eq5pCakpIdPKiqmfI8w==, tarball: file:projects/identity-cache-persistence.tgz} name: '@rush-temp/identity-cache-persistence' version: 0.0.0 dependencies: @@ -22253,7 +22253,7 @@ packages: dev: false file:projects/identity-vscode.tgz: - resolution: {integrity: sha512-bO+Y8ejwVj7nN9x+mN23oNqk7/5c9gvxnc+LL8qaLWy0kHdNjz5FqM88j9Ri5ZluOjXsKxhPfUEOyKlep1HkWA==, tarball: file:projects/identity-vscode.tgz} + resolution: {integrity: sha512-Y+8vITqQkS0PWra0NVoyyiv6DSrkecNcVDPmchYqd3jLGBKCXCTpXDBgak5le8kyOf/7ZO0v3ch5C/SwRCJW9g==, tarball: file:projects/identity-vscode.tgz} name: '@rush-temp/identity-vscode' version: 0.0.0 dependencies: @@ -22346,7 +22346,7 @@ packages: dev: false file:projects/iot-device-update.tgz: - resolution: {integrity: sha512-6fyG/hM1qrm6ns2ZiV1MEo2OO9aty8GE2uLHkLVNg3rnUixQDRZxBDnhrCCboIOXlS2l04NUUB+2USiC+fs7VA==, tarball: file:projects/iot-device-update.tgz} + resolution: {integrity: sha512-ZeaxRDFBGWkckB4/kg3hSeLLxQ3YFBJNGU+jxLZnQZeAl6sc2gQP/yjdtQtQasxcb+6J3pLg+jy3K7EdzipChg==, tarball: file:projects/iot-device-update.tgz} name: '@rush-temp/iot-device-update' version: 0.0.0 dependencies: @@ -22439,7 +22439,7 @@ packages: dev: false file:projects/keyvault-admin.tgz: - resolution: {integrity: sha512-GEHtlO5HTTXaUApRibmBr0VKmTfAOAZGhIkvzBu93FEuuJ26iO2OWvRWzc+EubgcqwdBgQ+JBqc7NFsvFBHA0Q==, tarball: file:projects/keyvault-admin.tgz} + resolution: {integrity: sha512-bNyzpP8coTXk3Ec7mG//Q2ZYxAgU3VhuNCRMHH3PkqLhA7dxP+8x3ARJSFw5iQze+8Nx+8vcfmNLl4rJoLHlVA==, tarball: file:projects/keyvault-admin.tgz} name: '@rush-temp/keyvault-admin' version: 0.0.0 dependencies: @@ -22480,7 +22480,7 @@ packages: dev: false file:projects/keyvault-certificates.tgz: - resolution: {integrity: sha512-XNKFZfdh7XQto/ZVfRFTM07V062QctMmWJ9dKTPOBvQ+V+2x02T5AIIM+HzTm5MrmXQpyqxlXK5vO9IP8VH2CQ==, tarball: file:projects/keyvault-certificates.tgz} + resolution: {integrity: sha512-tQUslsD2OC0Kc9np9QpgKYnoclMT78HdhlZ3bL/B7nNzzObzcTNknQ3Iw8jpzPcUTpCccobZanSFKKOrFLPMDQ==, tarball: file:projects/keyvault-certificates.tgz} name: '@rush-temp/keyvault-certificates' version: 0.0.0 dependencies: @@ -22559,7 +22559,7 @@ packages: dev: false file:projects/keyvault-keys.tgz: - resolution: {integrity: sha512-sq5gKgFcGqZ8ivwP1fbiLvWeJ3EbklMHINp1ZgAeevvIiYuCoBN1sBwVX5yZneBbblFqHknmjTrgGUgXsCXq4A==, tarball: file:projects/keyvault-keys.tgz} + resolution: {integrity: sha512-42EuT5wcv9lPSxyJ3BqRRscPOwQFUIcje9ZX2QPtfdG/TfIop7sWgsN00bQnx+17N3uw9YushvqoskjgfAQUDQ==, tarball: file:projects/keyvault-keys.tgz} name: '@rush-temp/keyvault-keys' version: 0.0.0 dependencies: @@ -22606,7 +22606,7 @@ packages: dev: false file:projects/keyvault-secrets.tgz: - resolution: {integrity: sha512-pEjpXeg8BhzQrU0bFc2SFJy0Gvx7rk4cgWT8rFPsBiV0FvgLX9FU12g+G4kFx7LwTizJ6fXDOERa8vqLNb3gUg==, tarball: file:projects/keyvault-secrets.tgz} + resolution: {integrity: sha512-MWn/ZdZEIhSyLyoP2xXCV39TmOZAw2Z+J2KXpkrUOeOPvhCUimiVlHXIhIihM6bQsTk3Hzz60xa4fVI4iW9IVg==, tarball: file:projects/keyvault-secrets.tgz} name: '@rush-temp/keyvault-secrets' version: 0.0.0 dependencies: @@ -22642,7 +22642,7 @@ packages: dev: false file:projects/load-testing.tgz: - resolution: {integrity: sha512-s9r1btShxNY3xoiQTl3gCd+1mpNTN26rhzLwYbal4Ug0Iol0n7K6ZZU7AQIlUidKSHx0MqyK/uGmVXa5bP/b5A==, tarball: file:projects/load-testing.tgz} + resolution: {integrity: sha512-uPFHGCxVth5dqyOFKqtBeo3KdvnLlgQKP2lHSyqn2G+a7Nw3s+2fGkYiRuxO2kGibEuVZzBg4WJn972PIFzcCA==, tarball: file:projects/load-testing.tgz} name: '@rush-temp/load-testing' version: 0.0.0 dependencies: @@ -22748,7 +22748,7 @@ packages: dev: false file:projects/maps-geolocation.tgz: - resolution: {integrity: sha512-rvWHmz/syvAOFp86mwSueDxXPTQR0bYIMUXX+FtIMPhJ8lX1LPHG5/OiHpZcGaaHjmVi4QkAqeL1UbanzSC3hg==, tarball: file:projects/maps-geolocation.tgz} + resolution: {integrity: sha512-wOQ2imT7/Olm5oHjU36fcnh1UVyLhR85MtmOd+NG759aFlC9Dkdh+9zUlb7UKgAgfMa8QTp+NbNOjmwful4yUA==, tarball: file:projects/maps-geolocation.tgz} name: '@rush-temp/maps-geolocation' version: 0.0.0 dependencies: @@ -22795,7 +22795,7 @@ packages: dev: false file:projects/maps-render.tgz: - resolution: {integrity: sha512-S4dzdVwNeszvXdPfkm/MIYhJsLanzc/yJ/pZfX4TiWREq40Q0eFt3iNrRs1RYmtdkrLdSks03C5WX7eDacZBCg==, tarball: file:projects/maps-render.tgz} + resolution: {integrity: sha512-Q48y4j1cLw/8BaCOJGbB1Y6G4eEctFesdQjOR3avgv2moibwLajs0Em9duzmp381Dj3acqAOwIAkFRWm/trg/g==, tarball: file:projects/maps-render.tgz} name: '@rush-temp/maps-render' version: 0.0.0 dependencies: @@ -22842,7 +22842,7 @@ packages: dev: false file:projects/maps-route.tgz: - resolution: {integrity: sha512-8UzSXr5iK7NqYGVXPE1RtzlXoeiyeUFJm0FPgp2zCvDhSj/yzguktU19DGMoseH0YrZdhgdOic6v9bAKn6C/Tw==, tarball: file:projects/maps-route.tgz} + resolution: {integrity: sha512-3ZIFY8K9V/tkUD8EYh1UeMvWlLn8R4dhOr31KvnzIVANe/V7ZBeeehfNIefOrBBNDoboN7YkxZ6LlUWbqQ+fSw==, tarball: file:projects/maps-route.tgz} name: '@rush-temp/maps-route' version: 0.0.0 dependencies: @@ -22890,7 +22890,7 @@ packages: dev: false file:projects/maps-search.tgz: - resolution: {integrity: sha512-8+K9ms4YK3CWqCu3g8xPVFI38IailQauHXPnzDDmndMjezFRnKYyu3MHG3Hpb9oxIjjOla8YdDUvVnH7ygkFbA==, tarball: file:projects/maps-search.tgz} + resolution: {integrity: sha512-MmlNE+xPJI26I/xY7nIyZ0aiYyLp71Z2wyolWCKyeVDchqotjBzgTxqKY1DbBfYWLXQeJPs0W82IJoq4s6I8gQ==, tarball: file:projects/maps-search.tgz} name: '@rush-temp/maps-search' version: 0.0.0 dependencies: @@ -22938,7 +22938,7 @@ packages: dev: false file:projects/microsoft-playwright-testing.tgz: - resolution: {integrity: sha512-xpirfRdOWn32HnBb78HxKKbplBdg5dagpdT8y9oVXsQTw7/SQhrWosexS173D89jQxMS4jLoWnB+bX/MQMZZxw==, tarball: file:projects/microsoft-playwright-testing.tgz} + resolution: {integrity: sha512-+eJtd4HTQq83BPlgrMUX0f9gJNzMz2KVqqqyvUrIl1V5bIW4WlnB3ryHYIbSFR2fplCFn7gn236Xgoqt3Q2QaQ==, tarball: file:projects/microsoft-playwright-testing.tgz} name: '@rush-temp/microsoft-playwright-testing' version: 0.0.0 dependencies: @@ -23006,7 +23006,7 @@ packages: dev: false file:projects/mixed-reality-remote-rendering.tgz: - resolution: {integrity: sha512-w4llMPb5Wt4RMxvSFiFdLAqi7iQBr5TzzR09vcdqD30/nj3VgQFrjfmQu5U5ZkIIVS1IpEGkD43p4Y815f/1Gw==, tarball: file:projects/mixed-reality-remote-rendering.tgz} + resolution: {integrity: sha512-HmHF0CKUcjOnx+zfrbxAZ2NRoRhwg05LdKFuNtnTACVArPWWm9SpbOjSLS296zHNzwVfSV2YzZ4Ls0qKf6XtZQ==, tarball: file:projects/mixed-reality-remote-rendering.tgz} name: '@rush-temp/mixed-reality-remote-rendering' version: 0.0.0 dependencies: @@ -23089,7 +23089,7 @@ packages: dev: false file:projects/monitor-ingestion.tgz: - resolution: {integrity: sha512-jzEXSB2xH7ipc5y8Rk+RRUSHEMxeziZOJE8UZDtDKaL0EDAGsARF6C1WAX2lsOqT3fpyOA8xukhQ6UO6u37aFg==, tarball: file:projects/monitor-ingestion.tgz} + resolution: {integrity: sha512-BVSkaP7pIBSc+DkkYl/Y3+yUfYXr7PTKxDomB0Em4dJsheJeXhT48s2vfiDyTu2eA/teg/S4D8qs8WC6ivdg5g==, tarball: file:projects/monitor-ingestion.tgz} name: '@rush-temp/monitor-ingestion' version: 0.0.0 dependencies: @@ -23222,7 +23222,7 @@ packages: dev: false file:projects/monitor-query.tgz: - resolution: {integrity: sha512-42iEjln8SkZxD6NaLGZAKYwFsM9vwcIU4XC3i+Xva6cHDUXrv/OCcIU0ruFxxJWzCMx95hnwpz0/pxH0j1HA7g==, tarball: file:projects/monitor-query.tgz} + resolution: {integrity: sha512-gGKKPVas+OcuI+oID194EoBBjtIPVEkY+KNrs4a3aMgUOeZ7hxFQsOBrb/6SrS8AddwYhzbVfHItZ6tYsORCuw==, tarball: file:projects/monitor-query.tgz} name: '@rush-temp/monitor-query' version: 0.0.0 dependencies: @@ -23306,7 +23306,7 @@ packages: dev: false file:projects/openai.tgz: - resolution: {integrity: sha512-/yiMIb++mM6PTsnfJJKTIuEWVqcpZaXAhqvm7yCEomw6LbkvTpFu/KlU3RBY2Yw9JlAOMhpDjk9tJomf/wqPIg==, tarball: file:projects/openai.tgz} + resolution: {integrity: sha512-ryp9FwJiV8LG+/87VqFapwN2raP91si+sIYMSs2yMD8iEjaZVEwkz2agO2ol0W+BVk7b8hDpsCE81ThuTh5mMg==, tarball: file:projects/openai.tgz} name: '@rush-temp/openai' version: 0.0.0 dependencies: @@ -23392,7 +23392,7 @@ packages: dev: false file:projects/perf-ai-form-recognizer.tgz: - resolution: {integrity: sha512-Bg6ryJlc01GbyzatMcANSJ652rV2knY7tr3klWRwXjoDlyuvGCndo6OK3okSTtOQ+/yAtQinrg0Bnr8SLsdSkg==, tarball: file:projects/perf-ai-form-recognizer.tgz} + resolution: {integrity: sha512-UgfivXnq9yO6r2HLEg4W7ejsEeMqk6VYiJ59E3dMiHvuXAxjsbYrJOQL8etu/5N85RkuHUmGgHmHXgd1T4Aw5g==, tarball: file:projects/perf-ai-form-recognizer.tgz} name: '@rush-temp/perf-ai-form-recognizer' version: 0.0.0 dependencies: @@ -23412,7 +23412,7 @@ packages: dev: false file:projects/perf-ai-language-text.tgz: - resolution: {integrity: sha512-ltcxVmdtrazoRmFy0P9CogHT2dY4nNplFwBMobYGzG3esoPccSYqg0XtLqkb6dqrP6TL5PK/C8j9IFoK14Chmg==, tarball: file:projects/perf-ai-language-text.tgz} + resolution: {integrity: sha512-QktNFGHtIrskryuod2Zefg2B1UGUBzvHB/PHy0MWNaL+ZOYaxG9kKCL9FT8Il3H4w6hklcE8Qbd+EWrQQT8j/g==, tarball: file:projects/perf-ai-language-text.tgz} name: '@rush-temp/perf-ai-language-text' version: 0.0.0 dependencies: @@ -23451,7 +23451,7 @@ packages: dev: false file:projects/perf-ai-text-analytics.tgz: - resolution: {integrity: sha512-tL7ZBqnYY4Gh9MrKZCketkNBUCnkCh8AwgLuIX+YWaXcEoCdArW07beaFegD1Qeq7sJSfO9rlo+yUSi4bEwnug==, tarball: file:projects/perf-ai-text-analytics.tgz} + resolution: {integrity: sha512-S2//MjApHXQzD+u5gojkeWjOh4uC022o8cbshMw3Io+c33Nf6qu3zJxji4PsVYlQV0zZnVhr0ULh/pF+wTxgjQ==, tarball: file:projects/perf-ai-text-analytics.tgz} name: '@rush-temp/perf-ai-text-analytics' version: 0.0.0 dependencies: @@ -23595,7 +23595,7 @@ packages: dev: false file:projects/perf-identity.tgz: - resolution: {integrity: sha512-Ns7HHIRyp4xIWNYqye1Dc3ey0H9JWbwAwB2aH/FhaxnLCbgDXzdblm3BJRpI05aiZSm25sVtGyz/DJIAfOfS0A==, tarball: file:projects/perf-identity.tgz} + resolution: {integrity: sha512-Tm25eU++RHqNcknG6hehyQUtZiN22+/fqA7Y2R2I4doq9LmaNpWm+k9fktEPW0Udo0tg2gKcc/84dljluTO6Aw==, tarball: file:projects/perf-identity.tgz} name: '@rush-temp/perf-identity' version: 0.0.0 dependencies: @@ -23616,7 +23616,7 @@ packages: dev: false file:projects/perf-keyvault-certificates.tgz: - resolution: {integrity: sha512-798DoekIfnjLiRxREUVHdiLmHi4FJa70bGFOi4R6gxt69cgW57qwFi6ik8TP8+j8HxRRC0Fi+GoKy6zdV4Tn7Q==, tarball: file:projects/perf-keyvault-certificates.tgz} + resolution: {integrity: sha512-FLfFxRDdlKxMUXOwx3JNBfOXShTk96oPTdkI+MDfWct5iLo6ouaspEGW7FQ9XbgoruhLf8a2iVk5NlXwKKGMHw==, tarball: file:projects/perf-keyvault-certificates.tgz} name: '@rush-temp/perf-keyvault-certificates' version: 0.0.0 dependencies: @@ -23638,7 +23638,7 @@ packages: dev: false file:projects/perf-keyvault-keys.tgz: - resolution: {integrity: sha512-Go/Xxuo3RhYeJCUV/d0OP03qhmbpzXImO/z0QlJP4GTUsUBODXlC7wLOpsrBW0IM/sHRhzOFvZK1U9zsUU2SHg==, tarball: file:projects/perf-keyvault-keys.tgz} + resolution: {integrity: sha512-giSOVCyTfx79HDmxFFl7gj9FJpx4K9BNOiDRIOAJufuKoQEog3VExLt9+Gr+/v7LDnkRwXzTMoia9J5CgT6SUA==, tarball: file:projects/perf-keyvault-keys.tgz} name: '@rush-temp/perf-keyvault-keys' version: 0.0.0 dependencies: @@ -23660,7 +23660,7 @@ packages: dev: false file:projects/perf-keyvault-secrets.tgz: - resolution: {integrity: sha512-WSSooqKe/2x6VF+kdP+5KoSaxS1wyK9FFdB0o39jPrpYpZhdc42jsUj/nkDIqWo8KxHxkXO3ReMh5AisHQWqGw==, tarball: file:projects/perf-keyvault-secrets.tgz} + resolution: {integrity: sha512-axiLjz6sQo1R06CzuBk5hq5TKZIG6GEoeG7ASmfCIxw/ITIHysCoXsCZvYvgqGugG8gR0feJFAWuUZrDkh3iTQ==, tarball: file:projects/perf-keyvault-secrets.tgz} name: '@rush-temp/perf-keyvault-secrets' version: 0.0.0 dependencies: @@ -23682,7 +23682,7 @@ packages: dev: false file:projects/perf-monitor-ingestion.tgz: - resolution: {integrity: sha512-irk1RGl+xI9cPhLol4UgvBi2xR5hJuzRlcGd8VPsk6aBnpV5GtxX9I33sk4RdzQVBxpWqNscKUztIdE8PspfXw==, tarball: file:projects/perf-monitor-ingestion.tgz} + resolution: {integrity: sha512-cg5zwuxND8KBfNNmStTyRertrDOsYKHMRbJOJ0UxuNVVffLMbtzzWl1a+itccxKQCgeBBZCDMwKAFb1gn8U86A==, tarball: file:projects/perf-monitor-ingestion.tgz} name: '@rush-temp/perf-monitor-ingestion' version: 0.0.0 dependencies: @@ -23721,7 +23721,7 @@ packages: dev: false file:projects/perf-monitor-query.tgz: - resolution: {integrity: sha512-LS97r5Sciwlw7sZP2DfzR3WUaut3mhkilPFEpx3dNivTA27i2zf6/wgz+lcYV8QG57RJzgziI1p3+HuXIi/1Jg==, tarball: file:projects/perf-monitor-query.tgz} + resolution: {integrity: sha512-ANYlPKIZlyM7HOpJTpjnSQ2XDTXy9ebcfJscqy4O0j09EqHdxlh6jphIszNv+JgpNVnP82rlMIfoJRkd9s589A==, tarball: file:projects/perf-monitor-query.tgz} name: '@rush-temp/perf-monitor-query' version: 0.0.0 dependencies: @@ -23741,7 +23741,7 @@ packages: dev: false file:projects/perf-schema-registry-avro.tgz: - resolution: {integrity: sha512-3Npq32S7gNHDWvFJgKtgi2rcckZ2dkbzQc7y7IVUnRx5kRMhEObj8Y+y8UmVyWXqOig0Z6Q1lwTBCVbjF2Ex9Q==, tarball: file:projects/perf-schema-registry-avro.tgz} + resolution: {integrity: sha512-BYktlRuuSmlAOIP1PrLlPbBtElqtzS7ENRY8P1Dh/MCAZ0jpoShXXJjViNP5XGg7+n35+FeeNT+8LPsMPedj+A==, tarball: file:projects/perf-schema-registry-avro.tgz} name: '@rush-temp/perf-schema-registry-avro' version: 0.0.0 dependencies: @@ -23762,7 +23762,7 @@ packages: dev: false file:projects/perf-search-documents.tgz: - resolution: {integrity: sha512-qJs9hKYvk0FMICJfbp+uWd4i1WNU9a6UGPyV6YOCeOkWcoT+Ov/YMESkVi12X0U8ot6Iv2yTg3IAhP/RaT22fQ==, tarball: file:projects/perf-search-documents.tgz} + resolution: {integrity: sha512-1TcM5NDFQf/cfuMbuROrfQ5CueOvvQ58+Il8ZDKhncxSjujXRDZf7u4QjUf4SwTZPcoBDTysbjJCTNavy8usuQ==, tarball: file:projects/perf-search-documents.tgz} name: '@rush-temp/perf-search-documents' version: 0.0.0 dependencies: @@ -23861,7 +23861,7 @@ packages: dev: false file:projects/perf-template.tgz: - resolution: {integrity: sha512-oK3lt2w3mvq8ZKT420CX6VAM8m7mM/bQDlLfCjFpEXdOOiMhf5b5Mc5PzE9WKwGiOMjcCURLlEZAtFrUOOQ8Pg==, tarball: file:projects/perf-template.tgz} + resolution: {integrity: sha512-RKt9bxt1yDQgVHXTp/x0VlGfZgWs1ZpE8j0di0ZAkSt96+egaS+ODThP40s3J3Q7NObgfu3OEjQweIHZvpT7bQ==, tarball: file:projects/perf-template.tgz} name: '@rush-temp/perf-template' version: 0.0.0 dependencies: @@ -23882,7 +23882,7 @@ packages: dev: false file:projects/purview-administration.tgz: - resolution: {integrity: sha512-+Lo5sBSgG1iiTY7lSYjZGMPYp7cJIY99qUFFD0CcqDN+57oO+8Z5PuFerCr5wsqG/KGzjz1DZsU4y4HAuQC5JA==, tarball: file:projects/purview-administration.tgz} + resolution: {integrity: sha512-MQS/1cqX9HyQEgBe+B6AvE12gF2fTgsWgdcrv8tQQSmfAS2waa6en+o2O57Phv6EQkyP4l62Ef1PrPuFDInrVA==, tarball: file:projects/purview-administration.tgz} name: '@rush-temp/purview-administration' version: 0.0.0 dependencies: @@ -23927,7 +23927,7 @@ packages: dev: false file:projects/purview-catalog.tgz: - resolution: {integrity: sha512-1QC+PgsqwFAUYHIGauIXvA+aHwyltPYq/Jh3vdqAze2nQH7rSHtI6H+uv5OtCK0fJbvyCLeLGtt4QedsbmImAA==, tarball: file:projects/purview-catalog.tgz} + resolution: {integrity: sha512-HyhHGxEDc6/0wgiTZS0qUuzNo/ckWojvdWDRn4D3hwp287JxGcVMAoaBr8wiJuxcunzgqDh7TmUViDPD40Wpzg==, tarball: file:projects/purview-catalog.tgz} name: '@rush-temp/purview-catalog' version: 0.0.0 dependencies: @@ -23973,7 +23973,7 @@ packages: dev: false file:projects/purview-datamap.tgz: - resolution: {integrity: sha512-j9Fyp+CS073IEyhNcDxDP96DyFZl1Uw/iUkacRjZR2GDdCoJK2s15tevR980Ns6OE4wC0Hd0NErCT+ch+mU8fQ==, tarball: file:projects/purview-datamap.tgz} + resolution: {integrity: sha512-pQ47LMlb1COoISRPdklUM1w17lO1jYO+UweXkhHquSXev36+mXwEVe6vDLBzJMNjjClsJGjpcrQTnQ7dswtTHQ==, tarball: file:projects/purview-datamap.tgz} name: '@rush-temp/purview-datamap' version: 0.0.0 dependencies: @@ -24019,7 +24019,7 @@ packages: dev: false file:projects/purview-scanning.tgz: - resolution: {integrity: sha512-F6fMaifF+UZYMmQL6L82h0U82uPvq804dznj6nyAT6HTs/QArgOPT3PRW5yfjYtjglkOneAFR+uYGEF4M3bbRA==, tarball: file:projects/purview-scanning.tgz} + resolution: {integrity: sha512-TWUbAABMm/tGNI1/jrLxkykfoRupx0+xvokbeyyvAskamJsPv31DWAGzxQRyt5fTc3UX85HI+pzRX5N/bVY2bw==, tarball: file:projects/purview-scanning.tgz} name: '@rush-temp/purview-scanning' version: 0.0.0 dependencies: @@ -24064,7 +24064,7 @@ packages: dev: false file:projects/purview-sharing.tgz: - resolution: {integrity: sha512-rESQag7jacmeVbqm1SUYRzWVUN2EeKX9CKhB4p31mp+hyCvbR4YuKm1nme32UX1Y/XgmTu976kuud6vK17zKvw==, tarball: file:projects/purview-sharing.tgz} + resolution: {integrity: sha512-J+C4imnoxnciqSsPoGM1m680rmJHeUOEM4IoJcpg6jG3VNLXedPB37yTpVxY6tqNnVHxgmcROH9Bjl5kbDfF5g==, tarball: file:projects/purview-sharing.tgz} name: '@rush-temp/purview-sharing' version: 0.0.0 dependencies: @@ -24112,7 +24112,7 @@ packages: dev: false file:projects/purview-workflow.tgz: - resolution: {integrity: sha512-WDNMrXBUnadgzoHoLWsuCaOPMiNG9J3Zo50j2MA6AGi7sQS2SXC+iks3aYrdvXnI1Gdwgu7bmcuFOVSokLYpjg==, tarball: file:projects/purview-workflow.tgz} + resolution: {integrity: sha512-++OASiOLQE+9J8Ufg7LG3EAZmySKvRn9TQA80Vns+Kd55R8mWohlXQ0gM6528LlBJrgWbk2fkjC9j2QlDhHIaA==, tarball: file:projects/purview-workflow.tgz} name: '@rush-temp/purview-workflow' version: 0.0.0 dependencies: @@ -24158,7 +24158,7 @@ packages: dev: false file:projects/quantum-jobs.tgz: - resolution: {integrity: sha512-EyI5vM1la+ICxSer0h+O6kaHVTU/DBzZqUolZH+hElzKDiXmpxXpqD2P7x/ZZoXFHSKwArFmu5I6kYz/75IY9w==, tarball: file:projects/quantum-jobs.tgz} + resolution: {integrity: sha512-IlA2RIZlXWxllZmxrnOyubOy08TGdYjzilmU9iXQ7HgIP+516WI8kiwDt9H/LE568QPmkhyUonpRC8BTBOOw3g==, tarball: file:projects/quantum-jobs.tgz} name: '@rush-temp/quantum-jobs' version: 0.0.0 dependencies: @@ -24204,7 +24204,7 @@ packages: dev: false file:projects/schema-registry-avro.tgz: - resolution: {integrity: sha512-CSM6bUuSWAB1vosfROpbOfdPvZUiA4b6ylTfPRMSyVUV0A3aW2Xv0OnM/dmjmFv2bXj7xA0lLFiyJ76YKrZObg==, tarball: file:projects/schema-registry-avro.tgz} + resolution: {integrity: sha512-/vA4YkOsB+M+MWRQM7X4cARPyKJL0zF+uZw2vA1wl4TMcPV1ZxCJX6n/mokhGcsdJBJ5K9XkAQ+KjGP910v+Sg==, tarball: file:projects/schema-registry-avro.tgz} name: '@rush-temp/schema-registry-avro' version: 0.0.0 dependencies: @@ -24258,7 +24258,7 @@ packages: dev: false file:projects/schema-registry-json.tgz: - resolution: {integrity: sha512-2f41GQADPD/ogg/63PuUCaPrDgUyh2c8rFdW0PkSfoud/yxXmrhAQsM5kuDQl8tyCtdxtIByghnxme6RrII5+g==, tarball: file:projects/schema-registry-json.tgz} + resolution: {integrity: sha512-zMhIdAv1iElRZPhOnMULxuEaX0E9jb2JPJKcoPbWC75e9IvOmBH/0AX2XlHSFrnooDAaqCtFcaRalQKoE+3OIQ==, tarball: file:projects/schema-registry-json.tgz} name: '@rush-temp/schema-registry-json' version: 0.0.0 dependencies: @@ -24303,7 +24303,7 @@ packages: dev: false file:projects/schema-registry.tgz: - resolution: {integrity: sha512-/oTB4TYqKdwtQtHiFtbSRPDgyOLhIOAM8858HpqnOiyH7XbQOomvybRhcCA1wzGd8HxyikQHw/a6EK0rFWOIjw==, tarball: file:projects/schema-registry.tgz} + resolution: {integrity: sha512-yA5edB/kaTLT3QHClIRzUorQQEskuZdIkFIFTNVtpOP+aT+qRZIaTDQfbjpDnNBViDpC9IZWkktU3NOsUUss5A==, tarball: file:projects/schema-registry.tgz} name: '@rush-temp/schema-registry' version: 0.0.0 dependencies: @@ -24344,7 +24344,7 @@ packages: dev: false file:projects/search-documents.tgz: - resolution: {integrity: sha512-OsJFQ32sOfN2koO/FiVq5Vz20h8vtW1p+Wkxw3axa8lzMhxfb1Nq5IcvOFLvWx2/WleRt4Sll1EgpR9K/Q1Vjg==, tarball: file:projects/search-documents.tgz} + resolution: {integrity: sha512-JZPvnO6/Jcoxq9ZfligECbNVtoAJ5aOCUDV1I9iXoZhk9EAjp6dQWLqX8UWKiMWQBnMl/BT2DMbgOUbdUiS0/w==, tarball: file:projects/search-documents.tgz} name: '@rush-temp/search-documents' version: 0.0.0 dependencies: @@ -24393,7 +24393,7 @@ packages: dev: false file:projects/service-bus.tgz: - resolution: {integrity: sha512-R0M+BLwA7P9dfld21J2xOS7lPwHPk5T9WCtOeZakFY8YtVRvbnoTdza5C/cQPVVmHRjzQxbumDhrch//tT/nSg==, tarball: file:projects/service-bus.tgz} + resolution: {integrity: sha512-AWZZkHqT/9iI7REatPivhaFY9CpXVZ3RTAZ2cDfUpr2rD2AkGsC7xlK/m7hfiP+KpKF+CHSVKrqoLfDmscKiJg==, tarball: file:projects/service-bus.tgz} name: '@rush-temp/service-bus' version: 0.0.0 dependencies: @@ -24507,7 +24507,7 @@ packages: dev: false file:projects/storage-blob.tgz: - resolution: {integrity: sha512-Rag6sV6e/oyzaz5WXpyCyg36wbMeSfgivyQciXwZIKkV1SstpChHwbnfb9zPrdMa9TrpYMwe5yis7kUonlm0HA==, tarball: file:projects/storage-blob.tgz} + resolution: {integrity: sha512-44jBwMRnnOdvjj6/sg0immrMOOV+Wn5yWF8CmEk2OcW9U2hJ1pA28kIcgYfQ1uu8JC+SgsadHyOthyUh3SKk0w==, tarball: file:projects/storage-blob.tgz} name: '@rush-temp/storage-blob' version: 0.0.0 dependencies: @@ -24555,7 +24555,7 @@ packages: dev: false file:projects/storage-file-datalake.tgz: - resolution: {integrity: sha512-FC/2g+ENPQlUMKPrj3Nm2p9penM3sSaIAbZw01qhZUjDQ+tVAlecwqqfQLcAk8qh82sJ9vd4GByEduRHyzh4kA==, tarball: file:projects/storage-file-datalake.tgz} + resolution: {integrity: sha512-lIhrv5ADPLnWdXWmlUm0vaygykPAZ486DxKvritXwkjGMSMEre3KKyhyu/nMSk5cMYuDBKnI8ca1qyATmmsJPA==, tarball: file:projects/storage-file-datalake.tgz} name: '@rush-temp/storage-file-datalake' version: 0.0.0 dependencies: @@ -24606,7 +24606,7 @@ packages: dev: false file:projects/storage-file-share.tgz: - resolution: {integrity: sha512-GuFyt0d1m2oDh+TuXVpczjUZCwDnEzFgIoq2AHS5ZiB/R5XeCofIDIFQQJQaCuUtY39c6ul4aX5uCP1B8rLN0g==, tarball: file:projects/storage-file-share.tgz} + resolution: {integrity: sha512-HyJ2/CF0HL9Setq4V72wicPSUYTG08XKQA4+3iuiwonzYn5MJR4GNtbNI6yeHqCztzcAEbVHobVls4zB99HN0g==, tarball: file:projects/storage-file-share.tgz} name: '@rush-temp/storage-file-share' version: 0.0.0 dependencies: @@ -24698,7 +24698,7 @@ packages: dev: false file:projects/storage-queue.tgz: - resolution: {integrity: sha512-IePQwAAuWIRX+Uvxr7M1JRQIhzkotL9NYuw5L8zmuzay7pXXiZUHZed7ghZ56YESovhpwqGm5qwtrYwu4mDl4Q==, tarball: file:projects/storage-queue.tgz} + resolution: {integrity: sha512-n5kEh4aa3dbN0WbpmR2/NUsqiUYExzquaMl7WUIWXjG1AxNiJvB+DMAD8YBLPnKozdIXZL8/R6xXV5i5d8+aEQ==, tarball: file:projects/storage-queue.tgz} name: '@rush-temp/storage-queue' version: 0.0.0 dependencies: @@ -24791,7 +24791,7 @@ packages: dev: false file:projects/synapse-access-control.tgz: - resolution: {integrity: sha512-9QtpFkHrrk+oSh/EPshLaS7q0EU4JlC8oGXP0Wtnhz/vvANql8qUi3CfFB4r/VzcQRGQQufhp+E27fRRbjZUOA==, tarball: file:projects/synapse-access-control.tgz} + resolution: {integrity: sha512-xBRwQr0VlPm77nkHjk85tPySwz44jLWlYHLl6zaKsmqVbQ6ZKVA4qBQNflmg4/ZW4nqWO9bypiSLt7LyUBTQLQ==, tarball: file:projects/synapse-access-control.tgz} name: '@rush-temp/synapse-access-control' version: 0.0.0 dependencies: @@ -24841,7 +24841,7 @@ packages: dev: false file:projects/synapse-artifacts.tgz: - resolution: {integrity: sha512-HYsAX3ou8HzMoiOnGC8uxCTjvSAQJ+YzovfPbRtv2GuAN5OcOdKvNulIwbKyIKWixrfUBDqvXcWRHdzFpIKU2g==, tarball: file:projects/synapse-artifacts.tgz} + resolution: {integrity: sha512-y36pCAWl7KhbzL5FDLzEJ2Y6WeiQzKDs+MjS+6Ou690hXc/VA09CEty/FUNnMUTUBFbscfy6IQDhSnWeDwmYbA==, tarball: file:projects/synapse-artifacts.tgz} name: '@rush-temp/synapse-artifacts' version: 0.0.0 dependencies: @@ -25062,7 +25062,7 @@ packages: dev: false file:projects/template.tgz: - resolution: {integrity: sha512-qseFMv7dU409oMyS9L9XyK3qTP+dUvmYNe27taFStTecL5Iglm+3icDkMQgEzxFV7XZxHlKK2bI+j5k5LT0n3g==, tarball: file:projects/template.tgz} + resolution: {integrity: sha512-CInlxrzq1puqe+ArK28Lpe8iIgujEauSoiWX+bTL/RvOu0cdr1CrFeZThotp5Vu78VtamGMrICDmnALRq0lbxQ==, tarball: file:projects/template.tgz} name: '@rush-temp/template' version: 0.0.0 dependencies: @@ -25105,7 +25105,7 @@ packages: dev: false file:projects/test-credential.tgz: - resolution: {integrity: sha512-z0h2+PnicCgLrh3QclZVb/npXPzYeCPjyaoFJqK0r04uK7ke42Ge8XNx++ejWYdefP9vg43CAa4q0y6cA+9kKA==, tarball: file:projects/test-credential.tgz} + resolution: {integrity: sha512-aArHiEcfPNEaUDPnLrqSzBLMcl5nSy6OfetgB2G9uroK4tEW/9RJN6Y+6GebyqK6bzH0RjRQHFihl4wuXSuN0g==, tarball: file:projects/test-credential.tgz} name: '@rush-temp/test-credential' version: 0.0.0 dependencies: diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/CHANGELOG.md b/sdk/documentintelligence/ai-document-intelligence-rest/CHANGELOG.md index 0773a05e6281..a273d725e4a7 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/CHANGELOG.md +++ b/sdk/documentintelligence/ai-document-intelligence-rest/CHANGELOG.md @@ -1,154 +1,40 @@ -# Release History - -## 1.0.0-beta.3 (2024-08-20) - -### Features Added - -- Added support for the Analyze Batch Documents API with the long-running operations, `/documentModels/{modelId}:analyzeBatch`. -- Added support for method `/documentModels/{modelId}/analyzeResults/{resultId}/pdf`. -- Added support for method `/documentModels/{modelId}/analyzeResults/{resultId}/figures/{figureId}`. -- Added support for the analysis method to specify other kinds of output through `AnalyzeDocumentFromStreamBodyParam#output` param : can be `pdf` and `figures`. -- Added property `id` to `Output` model. -- Added support for the Copy Classifier API with method `/documentClassifiers:authorizeCopy`. -- Added method `/documentClassifiers/{classifierId}:copyTo`. -- Added new enum type to `DocumentBuildMode`: `generative`. -- Added property `warnings` to `AnalyzeResultOutput ` model. -- Added properties `classifierId`, `split`, and `trainingHours` to `DocumentModelDetailsOutput` model. -- Added properties `confidenceThreshold`, `features`, `maxDocumentsToAnalyze`, `modelId`, and `queryFields` to `DocumentTypeDetailsOutput` model. -- Added properties `allowOverwrite` and `maxTrainingHours` to `BuildDocumentModelRequest` model. -- Added parameter `pages` to `ClassifyDocument` overloads. -- Added properties `classifierId`, `docTypes`, and `split` to `ComposeDocumentModelRequest`. -- Added property `allowOverwrite` to `BuildDocumentClassifierRequest`. -- Added property `getOperationId()` method to the pollers. - -### Other Changes - -- The `@azure-rest/ai-document-intelligence` Rest Level Client Library, now targets the Azure AI Document Intelligence service API version `2024-07-31-preview`. Support for `2024-02-29-preview` has been removed. -- Removed support for extracting lists from analyzed documents: - - Removed models `DocumentListOutput` and `DocumentListItemOutput`. - - Removed property `lists` from `AnalyzeResultOutput`. -- Changes to the Compose Document API: - - Removed model `ComponentDocumentModelDetails`. - - Removed property `componentModels` from `ComposeDocumentModelRequest`. - - `ComposeDocumentModelRequest` now requires a map of `DocumentTypeDetails` and a classifier ID. -- Removed model `QuotaDetailsOutput`. -- Removed property `customNeuralDocumentModelBuilds` from `ResourceDetailsOutput`. -- Removed required property `fieldSchema` and from `DocumentTypeDetailsOuput`. -- `DocumentFieldType` is now a required property of `DocumentFieldSchema`. - -## 1.0.0-beta.2 (2024-03-06) - -### Features Added - -- Support for "retry-after" header has been added for long-running operations, including `/documentModels/{modelId}:analyze`, `/documentModels:build`, and `/documentClassifiers:build`. -- `BuildDocumentClassifierContent` now includes a new property, `baseClassifierId`. -- `DocumentClassifierDetailsOutput` now includes a new property, `baseClassifierId`. -- A new property, `warnings`, has been added to `DocumentModelDetailsOutput` and `DocumentClassifierDetailsOutput`, represents an array of objects with `code`, `message`, and `target`. -- `DocumentFieldOutput` now includes a new property, `valueSelectionGroup`. -- A new member, `"completed"`, has been added to `OperationDetails#status`. - +## 1.0.0-beta.1 (2024-10-08) + ### Breaking Changes -- The `@azure-rest/ai-document-intelligence` Rest Level Client Library, previously known as Form Recognizer, now targets the Azure AI Document Intelligence service API version `"2024-02-29-preview"`. Please note that support for `2023-10-31-preview` has been discontinued. - -## 1.0.0-beta.1 (2023-11-16) - -### Features Added - -This marks the first preview of `@azure-rest/ai-document-intelligence` Rest Level Client Library for the Azure AI Document Intelligence service (formerly known as Form Recognizer), targeting service API version `"2023-10-31-preview"`. - -_**Note: Form Recognizer has been rebranded to Document Intelligence.**_ - -- Updates all REST API operation paths from `{endpoint}/formrecognizer` to `{endpoint}/documentintelligence`. SDK would handle this change automatically, users would not have to do additional work to support this. -- `@azure-rest/ai-document-intelligence` is the new package, replacing `@azure/ai-form-recognizer` package. The new package supports a Rest Level Client, which is part of the new generation of Azure SDKs to simplify the development experience. The new package is not compatible with the previous `@azure/ai-form-recognizer` package without necessary changes to your code. -- **Breaking Changes (with the `@azure/ai-form-recognizer` SDK)** - API shapes have been designed from scratch to support the new Rest Level Client for the Document Intelligence service. Please refer to the [Readme](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/README.md) and [Samples](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest/samples) for more understanding. - -### `"2023-10-31-preview"` Service API version - -The new `"2023-10-31-preview"` service version comes with some new features and a few breaking changes when compared to the API versions supported by the `@azure/ai-form-recognizer` library. - -**New Features** - -- **Markdown content format** - - Supports output with Markdown content format along with the default plain _text_. For now, this is only supported for "prebuilt-layout". Markdown content format is deemed a more friendly format for LLM consumption in a chat or automation use scenario. - - Service follows the GFM spec ([GitHub Flavored Markdown](https://github.github.com/gfm/)) for the Markdown format. Also introduces a new _contentFormat_ property with value "text" or "markdown" to indicate the result content format. - - ```ts - import DocumentIntelligence from "@azure-rest/ai-document-intelligence"; - const client = DocumentIntelligence(process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], { - key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"], - }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/6704eff082aaaf2d97c1371a28461f512f8d748a/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf", - }, - queryParameters: { outputContentFormat: "markdown" }, // <-- new query parameter - }); - ``` - -- **Query Fields** - - When this feature flag is specified, the service will further extract the values of the fields specified via the queryFields query parameter to supplement any existing fields defined by the model as fallback. - - ```ts - await client.path("/documentModels/{modelId}:analyze", "prebuilt-layout").post({ - contentType: "application/json", - body: { urlSource: "..." }, - queryParameters: { - features: ["queryFields"], - queryFields: ["NumberOfGuests", "StoreNumber"], - }, // <-- new query parameter - }); - ``` - -- **Split Options** - - In the previous API versions supported by the older `@azure/ai-form-recognizer` library, document splitting and classification operation (`"/documentClassifiers/{classifierId}:analyze"`) always tried to split the input file into multiple documents. - - To enable a wider set of scenarios, service introduces a "split" query parameter with the new "2023-10-31-preview" service version. The following values are supported: - - - `split: "auto"` - - Let service determine where to split. - - - `split: "none"` - - The entire file is treated as a single document. No splitting is performed. - - - `split: "perPage"` - - Each page is treated as a separate document. Each empty page is kept as its own document. - -**Breaking Changes** - -- **prebuilt-receipt** - Currency related fields have been updated. Currency symbol ("$") and code ("USD") are returned along with the amount as shown below. - - ```json - { - "content": "$123.45", - "confidence": 0.995, - "type": "currency", - "valueCurrency": { - "amount": 123.45, - "currencySymbol": "$", - "currencyCode": "USD" - }, - ... - } - ``` - -**Retirements/Deprecations** - -- `"prebuilt-businessCard"` model is retired. -- `"prebuilt-document"` model is retired, this model is essentially `"prebuilt-layout"` with `features: ["keyValuePairs"]` specified. _(This is only supported as an optional feature for "prebuilt-layout" and "prebuilt-invoice".)_ - -If you wish to still use these models, please rely on the older `@azure/ai-form-recognizer` library through the older service API versions. - -If you were using the old `@azure/ai-form-recognizer` package, please refer [MIGRATION_GUIDE.MD](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/MIGRATION-FR_v4-DI_v1.md) for more details. + - Removed operation SimplePollerLike.getOperationId + - Operation AnalyzeDocumentFromStream.post has a new signature + - Operation AnalyzeDocumentFromStream.post has a new signature + - Operation ClassifyDocumentFromStream.post has a new signature + - Operation ClassifyDocumentFromStream.post has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + - Operation GetDocumentModelBuildOperation.get has a new signature + diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/MIGRATION-FR_v4-DI_v1.md b/sdk/documentintelligence/ai-document-intelligence-rest/MIGRATION-FR_v4-DI_v1.md deleted file mode 100644 index 2e4a5e8784e5..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/MIGRATION-FR_v4-DI_v1.md +++ /dev/null @@ -1,315 +0,0 @@ -# Migrating from `@azure/ai-form-recognizer` Version 4.0.0 to `@azure-rest/ai-document-intelligence` Version 1.0.0-beta.1 - -In this first preview of `@azure-rest/ai-document-intelligence` Rest Level Client Library, this package introduces a new design for the Azure AI Document Intelligence service (formerly known as Form Recognizer), targeting service API version `"2023-10-31-preview"`. - -To leverage features of the newest Azure AI Document Intelligence service API (version "2023-10-31-preview" and newer), the new SDK is required, and application code must be changed to use the new client. Similarly, the new major version 4 of the client library cannot be used to communicate with versions 2.1 of the service API. To summarize: - -- Version 3 of the `@azure/ai-form-recognizer` package _only_ supports Form Recognizer service API version 2.1, and will not receive support for newer (date-based) versions of Form Recognizer. -- Version 4 of the `@azure/ai-form-recognizer` package supports service API version "2022-08-31" of Form Recognizer. - -_**Note: Form Recognizer has been rebranded to Document Intelligence.**_ - -- Version 1 of the `@azure-rest/ai-document-intelligence` package will receive support for newer (date-based) versions of Azure AI Document Intelligence. - -This document provides instructions for updating your application code to the new `@azure-rest/ai-document-intelligence` SDK client library. In this document, the examples provided use TypeScript to provide type information, but all runtime behavior changes naturally apply to plain JavaScript as well. - -## Partial Migration (Side-by-Side) - -To avoid migrating an application all at once, `@azure-rest/ai-document-intelligence` Version 1.0.0-beta.1 may be installed alongside `@azure/ai-form-recognizer` Version 4.0.0. For instance, add the following to the `dependencies` field of `package.json`: - -```javascript -{ - ..., - "dependencies": { - ..., - "@azure/ai-form-recognizer": "^4.0.0", - "@azure-rest/ai-document-intelligence": "1.0.0-beta.1" - } -} -``` - -Then, the two packages may be used side-by-side, and an application may be migrated partially or over time: - -```javascript -import { DocumentAnalysisClient } from "@azure/ai-form-recognizer"; -import DocumentIntelligence from "@azure-rest/ai-document-intelligence"; -``` - -## Understanding the New Package - -In the new `@azure-rest/ai-document-intelligence` package, several types and method signatures have been introduced which would feel newer owing to the redesign as a Rest Level Client package. - -- `@azure/ai-form-recognizer` package offered `DocumentAnalysisClient` and `DocumentModelAdministrationClient` classes. -- The new `@azure-rest/ai-document-intelligence` package offers a `createClient` method that allows creating a an instance of `DocumentIntelligenceClient`, which would be the equivalent of the two classes offered through `@azure/ai-form-recognizer` package. - -## Migrating from `DocumentAnalysisClient` to `DocumentIntelligence` - -The previous `DocumentAnalysisClient` class offered - -```ts -beginAnalyzeDocument(modelId, document: FormRecognizerRequestBody) -beginAnalyzeDocumentFromUrl(modelId, documentUrl) -beginClassifyDocument(classifierId, document: FormRecognizerRequestBody) -beginClassifyDocumentFromUrl(classifierId, documentUrl) -``` - -methods to analyze/classify documents. - -Equivalently, the new `DocumentIntelligence` offers the following instead through the routes: - -```ts -path("/documentModels/{modelId}:analyze", "").post({ - contentType: "application/json", - body: { urlSource: "..." }, // or { base64Source: "..." } -}); - -path("/documentClassifiers/{classifierId}:analyze", "").post({ - contentType: "application/json", - body: { urlSource: "..." }, // or { base64Source: "..." } -}); -``` - -### URL Inputs - -As in the previous "@azure/ai-form-recognizer" v4.0.0 SDK, to provide a publicly-accessible URL as an input to an analysis operation, use the `beginAnalyzeDocumentFromUrl` method, which treats the data passed to it as a file's contents. In the new `@azure-rest/ai-document-intelligence` package, the equivalent is to use the `path` method to call the `analyze` route and pass the URL as body (shown below). - -Previous ("@azure/ai-form-recognizer" v4.0.0): - -```typescript -import { AzureKeyCredential, DocumentAnalysisClient } from "@azure/ai-form-recognizer"; - -const client = new DocumentAnalysisClient(process.env.FORM_RECOGNIZER_ENDPOINT, new AzureKeyCredential(process.env.FORM_RECOGNIZER_API_KEY); ); -const url = "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/identityDocument/license.jpg"; - -const poller = await client.beginAnalyzeDocumentFromUrl("", url); -``` - -Current ("@azure-rest/ai-document-intelligence" v1.0.0-beta.1): - -```typescript -import DocumentIntelligence from "@azure-rest/ai-document-intelligence"; - -const client = DocumentIntelligence(process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], { - key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"], -}); -const url = - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/identityDocument/license.jpg"; - -const initialResponse = await client.path("/documentModels/{modelId}:analyze", "").post({ - contentType: "application/json", - body: { urlSource: url }, -}); - -if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; -} -const poller = await getLongRunningPoller(client, initialResponse); -``` - -### Base64 Inputs - -As in the previous "@azure/ai-form-recognizer" v4.0.0 SDK, to provide a document input to an analysis operation, use the `beginAnalyzeDocument` method, which treats the data passed to it as a file's contents. -In the new `@azure-rest/ai-document-intelligence` package, the equivalent is to use the `path` method to call the `analyze` route and pass the base64-encoded contents (string) as body (shown below). - -_Note: Subject to change in the future previews of this package for better._ - -Previous ("@azure/ai-form-recognizer" v4.0.0): - -```ts -const { DocumentAnalysisClient, AzureKeyCredential } = require("@azure/ai-form-recognizer"); -const fs = require("fs"); - -const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(apiKey)); -const path = ""; -const readStream = fs.createReadStream(path); -const poller = await client.beginAnalyzeDocument(modelId, readStream); -``` - -Current ("@azure-rest/ai-document-intelligence" v1.0.0-beta.1): - -```ts -import DocumentIntelligence from "@azure-rest/ai-document-intelligence"; - -const client = DocumentIntelligence(endpoint, { key: apiKey }); -const filePath = ""; -const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); -const initialResponse = await client.path("/documentModels/{modelId}:analyze", "").post({ - contentType: "application/json", - body: { base64Source }, -}); - -if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; -} - -const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); -``` - -## Example with polling - -```ts -const endpoint = ""; -const apiKey = ""; -const path = ""; // pdf/jpeg/png/tiff formats - -const readStream = fs.createReadStream(path); - -const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(apiKey)); -const poller = await client.beginAnalyzeDocument("prebuilt-layout", readStream); -const { pages, tables } = await poller.pollUntilDone(); -``` - -```ts -const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" } -); - -const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); -const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { base64Source }, - }); - -if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; -} - -const poller = await getLongRunningPoller(client, initialResponse); -const analyzeResult = ((await poller.pollUntilDone().body) as AnalyzeResultOperationOutput) - .analyzeResult; - -const pages = analyzeResult?.pages; -const tables = analyzeResult?.tables; -``` - -## Migrating from `DocumentModelAdministrationClient` to `DocumentIntelligence` - -The `DocumentModelAdministrationClient` class, was used for all model management operations (creating, reading, listing, and deleting models). The new `DocumentIntelligence` offers the following instead through the routes: - -```ts -beginBuildDocumentClassifier(classifierId, [docTypeSources]) -beginBuildDocumentModel(modelId, containerUrl, buildMode: "template") -beginBuildDocumentModel(modelId, contentSource, buildMode: "template") -beginComposeDocumentModel(modelId, [componentModelIds]) -beginCopyModelTo(sourceModelId, authorization) -deleteDocumentClassifier(classifierId) -deleteDocumentModel(modelId) -getCopyAuthorization(destinationModelId) -getDocumentClassifier(classifierId) -getDocumentModel(modelId) -getOperation(operationId) -getResourceDetails() -listDocumentClassifiers() -listDocumentModels() -listOperations() -``` - -Equivalently, the new `DocumentIntelligence` offers the following instead through the routes: - -```ts -path("/documentClassifiers:build").post({ - body: { - classifierId: "", - docTypes: { - foo: { - azureBlobSource: { - containerUrl: "", - }, - }, - }, - }, -}); -path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId: modelName, - azureBlobSource: { - containerUrl: "", - }, - }, -}); -path("/documentModels:compose").post({ - body: { - componentModels: componentModelIds, - modelId, - }, -}); -path("/documentClassifiers/{classifierId}", classifierId).delete(); -path("/documentModels/{modelId}", modelId).delete(); -path("/documentModels/{modelId}:copyTo", sourceModel.modelId).post({ - body: targetAuth.body, -}); -path("/documentClassifiers/{classifierId}", classifierId).get(); -path("/documentModels/{modelId}", model.modelId).get(); -path("/operations/{operationId}", "").get(); -path("/info").get(); -path("/documentClassifiers").get(); -path("/documentModels").get(); -path("/operations").get(); -``` - -_**All the methods presented above do support options bags to configure the settings**_ - -## Features Added in the new service API version "2023-10-31-preview" - -### Markdown content format - -Supports output with Markdown content format along with the default plain _text_. For now, this is only supported for "prebuilt-layout". Markdown content format is deemed a more friendly format for LLM consumption in a chat or automation use scenario. - -Service follows the GFM spec ([GitHub Flavored Markdown](https://github.github.com/gfm/)) for the Markdown format. Also introduces a new _contentFormat_ property with value "text" or "markdown" to indicate the result content format. - -```ts -import DocumentIntelligence from "@azure-rest/ai-document-intelligence"; -const client = DocumentIntelligence(process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], { - key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"], -}); - -const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/6704eff082aaaf2d97c1371a28461f512f8d748a/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf", - }, - queryParameters: { outputContentFormat: "markdown" }, // <-- new query parameter - }); -``` - -### Query Fields - -When this feature flag is specified, the service will further extract the values of the fields specified via the queryFields query parameter to supplement any existing fields defined by the model as fallback. - -```ts -await client.path("/documentModels/{modelId}:analyze", "prebuilt-layout").post({ - contentType: "application/json", - body: { urlSource: "..." }, - queryParameters: { - features: ["queryFields"], - queryFields: ["NumberOfGuests", "StoreNumber"], - }, // <-- new query parameter -}); -``` - -### Split Options - -In the previous API versions supported by the older `@azure/ai-form-recognizer` library, document splitting and classification operation (`"/documentClassifiers/{classifierId}:analyze"`) always tried to split the input file into multiple documents. - -To enable a wider set of scenarios, service introduces a "split" query parameter with the new "2023-10-31-preview" service version. The following values are supported: - -- `split: "auto"` - - Let service determine where to split. - -- `split: "none"` - - The entire file is treated as a single document. No splitting is performed. - -- `split: "perPage"` - - Each page is treated as a separate document. Each empty page is kept as its own document. - -Checkout our [samples](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta) for more examples. diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/README.md b/sdk/documentintelligence/ai-document-intelligence-rest/README.md index 7f6e954883a7..eca53ad6c7a7 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/README.md +++ b/sdk/documentintelligence/ai-document-intelligence-rest/README.md @@ -1,41 +1,13 @@ -# Azure DocumentIntelligence (formerly FormRecognizer) REST client library for JavaScript +# Azure DocumentIntelligence(formerlyFormRecognizer) REST client library for JavaScript Extracts content, layout, and structured data from documents. **Please rely heavily on our [REST client docs](https://github.com/Azure/azure-sdk-for-js/blob/main/documentation/rest-clients.md) to use this library** -> NOTE: Form Recognizer has been rebranded to Document Intelligence. Please check the [Migration Guide from `@azure/ai-form-recognizer` to `@azure-rest/ai-document-intelligence`](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest/MIGRATION-FR_v4-DI_v1.md). - Key links: -- [Source code](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest) - [Package (NPM)](https://www.npmjs.com/package/@azure-rest/ai-document-intelligence) - [API reference documentation](https://docs.microsoft.com/javascript/api/@azure-rest/ai-document-intelligence?view=azure-node-preview) -- [Samples](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest/samples) -- [Changelog](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest/CHANGELOG.md) -- [Migration Guide from Form Recognizer](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest/MIGRATION-FR_v4-DI_v1.md) - -> This version of the client library defaults to the `"2024-07-31-preview"` version of the service. - -This table shows the relationship between SDK versions and supported API versions of the service: - -| SDK version | Supported API version of service | -| ------------ | -------------------------------- | -| 1.0.0-beta.3 | 2024-07-31-preview | -| 1.0.0-beta.2 | 2024-02-29-preview | -| 1.0.0-beta.1 | 2023-10-31-preview | - -> Please rely on the older `@azure/ai-form-recognizer` library through the older service API versions for retired models, such as `"prebuilt-businessCard"` and `"prebuilt-document"`. For more information, see [Changelog](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest/CHANGELOG.md). - -The below table describes the relationship of each client and its supported API version(s): - -| Service API version | Supported clients | Package | -| ------------------- | ------------------------------------------------------------ | ------------------------------------------------------------- | -| 2024-07-31-preview | DocumentIntelligenceClient | `@azure-rest/ai-document-intelligence` version `1.0.0-beta.3` | -| 2024-02-29-preview | DocumentIntelligenceClient | `@azure-rest/ai-document-intelligence` version `1.0.0-beta.2` | -| 2023-10-31-preview | DocumentIntelligenceClient | `@azure-rest/ai-document-intelligence` version `1.0.0-beta.1` | -| 2023-07-31 | DocumentAnalysisClient and DocumentModelAdministrationClient | `@azure/ai-form-recognizer` version `^5.0.0` | -| 2022-08-01 | DocumentAnalysisClient and DocumentModelAdministrationClient | `@azure/ai-form-recognizer` version `^4.0.0` | ## Getting started @@ -61,7 +33,7 @@ To use an [Azure Active Directory (AAD) token credential](https://github.com/Azu provide an instance of the desired credential type obtained from the [@azure/identity](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#credentials) library. -To authenticate with AAD, you must first `npm` install [`@azure/identity`](https://www.npmjs.com/package/@azure/identity) +To authenticate with AAD, you must first `npm` install [`@azure/identity`](https://www.npmjs.com/package/@azure/identity) After setup, you can choose which type of [credential](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#credentials) from `@azure/identity` to use. As an example, [DefaultAzureCredential](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#defaultazurecredential) @@ -70,229 +42,6 @@ can be used to authenticate the client. Set the values of the client ID, tenant ID, and client secret of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET -### Using a Token Credential - -```ts -import DocumentIntelligence from "@azure-rest/ai-document-intelligence"; - -const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], - new DefaultAzureCredential(), -); -``` - -### Using an API KEY - -```ts -import DocumentIntelligence from "@azure-rest/ai-document-intelligence"; - -const client = DocumentIntelligence(process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], { - key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"], -}); -``` - -## Document Models - -### Analyze prebuilt-layout (urlSource) - -```ts -const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/6704eff082aaaf2d97c1371a28461f512f8d748a/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf", - }, - queryParameters: { locale: "en-IN" }, - }); -``` - -### Analyze prebuilt-layout (base64Source) - -```ts -import fs from "fs"; -import path from "path"; - -const filePath = path.join(ASSET_PATH, "forms", "Invoice_1.pdf"); -const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); -const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - queryParameters: { locale: "en-IN" }, - }); -``` - -Continue creating the poller from initial response - -```ts -import { - getLongRunningPoller, - AnalyzeResultOperationOutput, - isUnexpected, -} from "@azure-rest/ai-document-intelligence"; - -if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; -} -const poller = await getLongRunningPoller(client, initialResponse); -const result = (await poller.pollUntilDone()).body as AnalyzeResultOperationOutput; -console.log(result); -// { -// status: 'succeeded', -// createdDateTime: '2023-11-10T13:31:31Z', -// lastUpdatedDateTime: '2023-11-10T13:31:34Z', -// analyzeResult: { -// apiVersion: '2023-10-31-preview', -// . -// . -// . -// contentFormat: 'text' -// } -// } -``` - -### Markdown content format - -Supports output with Markdown content format along with the default plain _text_. For now, this is only supported for "prebuilt-layout". Markdown content format is deemed a more friendly format for LLM consumption in a chat or automation use scenario. - -Service follows the GFM spec ([GitHub Flavored Markdown](https://github.github.com/gfm/)) for the Markdown format. Also introduces a new _contentFormat_ property with value "text" or "markdown" to indicate the result content format. - -```ts -import DocumentIntelligence from "@azure-rest/ai-document-intelligence"; -const client = DocumentIntelligence(process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], { - key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"], -}); - -const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/6704eff082aaaf2d97c1371a28461f512f8d748a/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf", - }, - queryParameters: { outputContentFormat: "markdown" }, // <-- new query parameter - }); -``` - -### Query Fields - -When this feature flag is specified, the service will further extract the values of the fields specified via the queryFields query parameter to supplement any existing fields defined by the model as fallback. - -```ts -await client.path("/documentModels/{modelId}:analyze", "prebuilt-layout").post({ - contentType: "application/json", - body: { urlSource: "..." }, - queryParameters: { - features: ["queryFields"], - queryFields: ["NumberOfGuests", "StoreNumber"], - }, // <-- new query parameter -}); -``` - -### Split Options - -In the previous API versions supported by the older `@azure/ai-form-recognizer` library, document splitting and classification operation (`"/documentClassifiers/{classifierId}:analyze"`) always tried to split the input file into multiple documents. - -To enable a wider set of scenarios, service introduces a "split" query parameter with the new "2023-10-31-preview" service version. The following values are supported: - -- `split: "auto"` - - Let service determine where to split. - -- `split: "none"` - - The entire file is treated as a single document. No splitting is performed. - -- `split: "perPage"` - - Each page is treated as a separate document. Each empty page is kept as its own document. - -## Document Classifiers #Build - -```ts -import { - DocumentClassifierBuildOperationDetailsOutput, - getLongRunningPoller, - isUnexpected, -} from "@azure-rest/ai-document-intelligence"; - -const containerSasUrl = (): string => - process.env["DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL"]; -const initialResponse = await client.path("/documentClassifiers:build").post({ - body: { - classifierId: `customClassifier${getRandomNumber()}`, - description: "Custom classifier description", - docTypes: { - foo: { - azureBlobSource: { - containerUrl: containerSasUrl(), - }, - }, - bar: { - azureBlobSource: { - containerUrl: containerSasUrl(), - }, - }, - }, - }, -}); - -if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; -} -const poller = await getLongRunningPoller(client, initialResponse); -const response = (await poller.pollUntilDone()) - .body as DocumentClassifierBuildOperationDetailsOutput; -console.log(response); -// { -// operationId: '31466834048_f3ee629e-73fb-48ab-993b-1d55d73ca460', -// kind: 'documentClassifierBuild', -// status: 'succeeded', -// . -// . -// result: { -// classifierId: 'customClassifier10978', -// createdDateTime: '2023-11-09T12:45:56Z', -// . -// . -// description: 'Custom classifier description' -// }, -// apiVersion: '2023-10-31-preview' -// } -``` - -## Get Info - -```ts -const response = await client.path("/info").get(); -if (isUnexpected(response)) { - throw response.body.error; -} -console.log(response.body.customDocumentModels.limit); -// 20000 -``` - -## List Document Models - -```ts -import { paginate } from "@azure-rest/ai-document-intelligence"; -const response = await client.path("/documentModels").get(); -if (isUnexpected(response)) { - throw response.body.error; -} - -const modelsInAccount: string[] = []; -for await (const model of paginate(client, response)) { - console.log(model.modelId); -} -``` - ## Troubleshooting ### Logging diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/api-extractor.json b/sdk/documentintelligence/ai-document-intelligence-rest/api-extractor.json index 6a70a0a1f069..00758c3a187a 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/api-extractor.json +++ b/sdk/documentintelligence/ai-document-intelligence-rest/api-extractor.json @@ -1,18 +1,31 @@ { "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", "mainEntryPointFilePath": "./dist/esm/index.d.ts", - "docModel": { "enabled": true }, - "apiReport": { "enabled": true, "reportFolder": "./review" }, + "docModel": { + "enabled": true + }, + "apiReport": { + "enabled": true, + "reportFolder": "./review" + }, "dtsRollup": { "enabled": true, "untrimmedFilePath": "", "publicTrimmedFilePath": "./types/ai-document-intelligence.d.ts" }, "messages": { - "tsdocMessageReporting": { "default": { "logLevel": "none" } }, + "tsdocMessageReporting": { + "default": { + "logLevel": "none" + } + }, "extractorMessageReporting": { - "ae-missing-release-tag": { "logLevel": "none" }, - "ae-unresolved-link": { "logLevel": "none" } + "ae-missing-release-tag": { + "logLevel": "none" + }, + "ae-unresolved-link": { + "logLevel": "none" + } } } -} +} \ No newline at end of file diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets.json b/sdk/documentintelligence/ai-document-intelligence-rest/assets.json deleted file mode 100644 index ff651b11c442..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/assets.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "AssetsRepo": "Azure/azure-sdk-assets", - "AssetsRepoPrefixPath": "js", - "TagPrefix": "js/documentintelligence/ai-document-intelligence-rest", - "Tag": "js/documentintelligence/ai-document-intelligence-rest_c52f06c699" -} diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/Acord_27.pdf b/sdk/documentintelligence/ai-document-intelligence-rest/assets/Acord_27.pdf deleted file mode 100644 index 4e0b5b42d884..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/Acord_27.pdf and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/businessCard/business-card-english.jpg b/sdk/documentintelligence/ai-document-intelligence-rest/assets/businessCard/business-card-english.jpg deleted file mode 100644 index 7c2bef76ed3e..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/businessCard/business-card-english.jpg and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/Form_1.jpg b/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/Form_1.jpg deleted file mode 100644 index 29cae664f1b8..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/Form_1.jpg and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/Invoice_1.pdf b/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/Invoice_1.pdf deleted file mode 100644 index 5ffff2960d74..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/Invoice_1.pdf and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/Invoice_1.tiff b/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/Invoice_1.tiff deleted file mode 100644 index 224fb82205b0..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/Invoice_1.tiff and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/selection_mark_form.pdf b/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/selection_mark_form.pdf deleted file mode 100644 index 0721647fa52b..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/forms/selection_mark_form.pdf and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/healthInsuranceCard/insurance.png b/sdk/documentintelligence/ai-document-intelligence-rest/assets/healthInsuranceCard/insurance.png deleted file mode 100644 index 676c8a231d1e..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/healthInsuranceCard/insurance.png and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/identityDocument/license.png b/sdk/documentintelligence/ai-document-intelligence-rest/assets/identityDocument/license.png deleted file mode 100644 index 661312305a45..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/identityDocument/license.png and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/invoice/Invoice_1.pdf b/sdk/documentintelligence/ai-document-intelligence-rest/assets/invoice/Invoice_1.pdf deleted file mode 100644 index 5ffff2960d74..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/invoice/Invoice_1.pdf and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/invoice/sample_invoice.jpg b/sdk/documentintelligence/ai-document-intelligence-rest/assets/invoice/sample_invoice.jpg deleted file mode 100644 index 6f8796469d78..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/invoice/sample_invoice.jpg and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/layout-pageobject.pdf b/sdk/documentintelligence/ai-document-intelligence-rest/assets/layout-pageobject.pdf deleted file mode 100644 index 1115199236c8..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/layout-pageobject.pdf and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/receipt/contoso-allinone.jpg b/sdk/documentintelligence/ai-document-intelligence-rest/assets/receipt/contoso-allinone.jpg deleted file mode 100644 index 1aaad34387ec..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/receipt/contoso-allinone.jpg and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/receipt/contoso-receipt.png b/sdk/documentintelligence/ai-document-intelligence-rest/assets/receipt/contoso-receipt.png deleted file mode 100644 index 1f9fcbf60a04..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/receipt/contoso-receipt.png and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/receipt/multipage_invoice1.pdf b/sdk/documentintelligence/ai-document-intelligence-rest/assets/receipt/multipage_invoice1.pdf deleted file mode 100644 index 5ac1edf588c9..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/receipt/multipage_invoice1.pdf and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/vaccinationCard/vaccination.jpg b/sdk/documentintelligence/ai-document-intelligence-rest/assets/vaccinationCard/vaccination.jpg deleted file mode 100644 index 4b5f7d10dedc..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/vaccinationCard/vaccination.jpg and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/w2/w2-multiple.png b/sdk/documentintelligence/ai-document-intelligence-rest/assets/w2/w2-multiple.png deleted file mode 100644 index df2af007a02c..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/w2/w2-multiple.png and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/assets/w2/w2-single.png b/sdk/documentintelligence/ai-document-intelligence-rest/assets/w2/w2-single.png deleted file mode 100644 index 3d282db03149..000000000000 Binary files a/sdk/documentintelligence/ai-document-intelligence-rest/assets/w2/w2-single.png and /dev/null differ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/eslint.config.mjs b/sdk/documentintelligence/ai-document-intelligence-rest/eslint.config.mjs index 68c02604a4c1..113bdc3eaf5f 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/eslint.config.mjs +++ b/sdk/documentintelligence/ai-document-intelligence-rest/eslint.config.mjs @@ -8,10 +8,10 @@ export default [ "@azure/azure-sdk/ts-apiextractor-json-types": "warn", "@azure/azure-sdk/ts-package-json-types": "warn", "@azure/azure-sdk/ts-package-json-engine-is-present": "warn", - "tsdoc/syntax": "warn", "@azure/azure-sdk/ts-package-json-module": "off", "@azure/azure-sdk/ts-package-json-files-required": "off", "@azure/azure-sdk/ts-package-json-main-is-cjs": "off", - }, - }, + "tsdoc/syntax": "warn" + } + } ]; diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/karma.conf.js b/sdk/documentintelligence/ai-document-intelligence-rest/karma.conf.js deleted file mode 100644 index 4fdf26c79ac0..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/karma.conf.js +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -// https://github.com/karma-runner/karma-chrome-launcher -process.env.CHROME_BIN = require("puppeteer").executablePath(); -require("dotenv").config(); -const { relativeRecordingsPath } = require("@azure-tools/test-recorder"); -process.env.RECORDINGS_RELATIVE_PATH = relativeRecordingsPath(); - -module.exports = function (config) { - config.set({ - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: "./", - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ["source-map-support", "mocha"], - - plugins: [ - "karma-mocha", - "karma-mocha-reporter", - "karma-chrome-launcher", - "karma-firefox-launcher", - "karma-env-preprocessor", - "karma-coverage", - "karma-sourcemap-loader", - "karma-junit-reporter", - "karma-source-map-support", - ], - - // list of files / patterns to load in the browser - files: [ - "dist-test/index.browser.js", - { - pattern: "dist-test/index.browser.js.map", - type: "html", - included: false, - served: true, - }, - ], - - // list of files / patterns to exclude - exclude: [], - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - "**/*.js": ["sourcemap", "env"], - // IMPORTANT: COMMENT following line if you want to debug in your browsers!! - // Preprocess source file to calculate code coverage, however this will make source file unreadable - // "dist-test/index.js": ["coverage"] - }, - - envPreprocessor: [ - "TEST_MODE", - "ENDPOINT", - "AZURE_CLIENT_SECRET", - "AZURE_CLIENT_ID", - "AZURE_TENANT_ID", - "SUBSCRIPTION_ID", - "RECORDINGS_RELATIVE_PATH", - ], - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ["mocha", "coverage", "junit"], - - coverageReporter: { - // specify a common output directory - dir: "coverage-browser/", - reporters: [ - { type: "json", subdir: ".", file: "coverage.json" }, - { type: "lcovonly", subdir: ".", file: "lcov.info" }, - { type: "html", subdir: "html" }, - { type: "cobertura", subdir: ".", file: "cobertura-coverage.xml" }, - ], - }, - - junitReporter: { - outputDir: "", // results will be saved as $outputDir/$browserName.xml - outputFile: "test-results.browser.xml", // if included, results will be saved as $outputDir/$browserName/$outputFile - suite: "", // suite will become the package name attribute in xml testsuite element - useBrowserName: false, // add browser name to report and classes names - nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element - classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element - properties: {}, // key value pair of properties to add to the section of the report - }, - - // web server port - port: 9876, - - // enable / disable colors in the output (reporters and logs) - colors: true, - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: false, - - // --no-sandbox allows our tests to run in Linux without having to change the system. - // --disable-web-security allows us to authenticate from the browser without having to write tests using interactive auth, which would be far more complex. - browsers: ["ChromeHeadlessNoSandbox"], - customLaunchers: { - ChromeHeadlessNoSandbox: { - base: "ChromeHeadless", - flags: ["--no-sandbox", "--disable-web-security"], - }, - }, - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: false, - - // Concurrency level - // how many browser should be started simultaneous - concurrency: 1, - - browserNoActivityTimeout: 60000000, - browserDisconnectTimeout: 10000, - browserDisconnectTolerance: 3, - - client: { - mocha: { - // change Karma's debug.html to the mocha web reporter - reporter: "html", - timeout: "600000", - }, - }, - }); -}; diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/package.json b/sdk/documentintelligence/ai-document-intelligence-rest/package.json index 2c8a0fb4d53c..7ffdac77e30e 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/package.json +++ b/sdk/documentintelligence/ai-document-intelligence-rest/package.json @@ -1,6 +1,6 @@ { "name": "@azure-rest/ai-document-intelligence", - "version": "1.0.0-beta.3", + "version": "1.0.0-beta.1", "description": "Document Intelligence Rest Client", "engines": { "node": ">=18.0.0" @@ -56,91 +56,84 @@ }, "dependencies": { "@azure-rest/core-client": "^2.1.0", - "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.6.0", - "@azure/core-lro": "^3.0.0", - "@azure/core-paging": "^1.5.0", "@azure/core-rest-pipeline": "^1.5.0", "@azure/logger": "^1.0.0", - "tslib": "^2.6.2" + "tslib": "^2.6.2", + "@azure/core-lro": "^3.0.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-paging": "^1.5.0" }, "devDependencies": { - "@azure-tools/test-credential": "^2.0.0", - "@azure-tools/test-recorder": "^4.0.0", - "@azure/core-util": "^1.0.0", - "@azure/dev-tool": "^1.0.0", - "@azure/eslint-plugin-azure-sdk": "^3.0.0", - "@azure/identity": "^4.2.1", + "dotenv": "^16.0.0", "@microsoft/api-extractor": "^7.40.3", "@types/node": "^18.0.0", + "eslint": "^8.55.0", + "prettier": "^3.2.5", + "rimraf": "^5.0.5", + "mkdirp": "^3.0.1", + "typescript": "~5.5.3", + "tshy": "^1.11.1", + "@azure/identity": "^4.2.1", "@vitest/browser": "^2.0.5", "@vitest/coverage-istanbul": "^2.0.5", - "dotenv": "^16.0.0", - "eslint": "^9.9.0", - "mkdirp": "^3.0.1", "playwright": "^1.41.2", - "prettier": "^3.2.5", - "rimraf": "^5.0.5", - "typescript": "~5.6.2", - "vitest": "^2.0.5" + "vitest": "^2.0.5", + "@azure-tools/test-credential": "^2.0.0", + "@azure-tools/test-recorder": "^4.0.0", + "@azure/dev-tool": "^1.0.0", + "@azure/eslint-plugin-azure-sdk": "^3.0.0" }, "scripts": { - "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", - "build": "npm run clean && dev-tool run build-package && mkdirp ./review && dev-tool run extract-api", - "build:samples": "dev-tool samples publish --force", - "build:test": "npm run clean && dev-tool run build-package && dev-tool run build-test", - "check-format": "dev-tool run vendored prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.{ts,cts,mts}\" \"test/**/*.{ts,cts,mts}\" \"*.{js,cjs,mjs,json}\"", "clean": "rimraf --glob dist dist-browser dist-esm test-dist temp types *.tgz *.log", - "execute:samples": "dev-tool samples run samples-dev", "extract-api": "rimraf review && mkdirp ./review && dev-tool run extract-api", - "format": "dev-tool run vendored prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.{ts,cts,mts}\" \"test/**/*.{ts,cts,mts}\" \"*.{js,cjs,mjs,json}\"", - "generate:client": "echo skipped", - "integration-test": "npm run integration-test:node && npm run integration-test:browser", - "integration-test:browser": "echo skipped", - "integration-test:node": "echo skipped", + "pack": "npm pack 2>&1", "lint": "eslint package.json api-extractor.json src test", "lint:fix": "eslint package.json api-extractor.json src test --fix --fix-type [problem,suggestion]", - "minify": "uglifyjs -c -m --comments --source-map \"content='./dist/index.js.map'\" -o ./dist/index.min.js ./dist/index.js", - "pack": "npm pack 2>&1", - "test": "npm run clean && dev-tool run build-package && npm run unit-test:node && dev-tool run bundle && npm run unit-test:browser && npm run integration-test", - "test:browser": "npm run clean && npm run build:test && npm run unit-test:browser && npm run integration-test:browser", - "test:node": "npm run clean && dev-tool run build-package && npm run unit-test:node && npm run integration-test:node", "unit-test": "npm run unit-test:node && npm run unit-test:browser", - "unit-test:browser": "echo skipped", + "unit-test:browser": "npm run build:test && dev-tool run test:vitest --browser", "unit-test:node": "dev-tool run test:vitest", - "update-snippets": "echo skipped" + "integration-test": "npm run integration-test:node && npm run integration-test:browser", + "integration-test:browser": "echo skipped", + "integration-test:node": "echo skipped", + "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", + "build:samples": "echo skipped", + "check-format": "dev-tool run vendored prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.{ts,cts,mts}\" \"test/**/*.{ts,cts,mts}\" \"*.{js,cjs,mjs,json}\" ", + "execute:samples": "echo skipped", + "format": "dev-tool run vendored prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.{ts,cts,mts}\" \"test/**/*.{ts,cts,mts}\" \"*.{js,cjs,mjs,json}\" ", + "generate:client": "echo skipped", + "test:browser": "npm run clean && npm run build:test && npm run unit-test:browser && npm run integration-test:browser", + "minify": "uglifyjs -c -m --comments --source-map \"content='./dist/index.js.map'\" -o ./dist/index.min.js ./dist/index.js", + "build:test": "npm run clean && tshy && dev-tool run build-test", + "build": "npm run clean && tshy && mkdirp ./review && dev-tool run extract-api", + "test:node": "npm run clean && tshy && npm run unit-test:node && npm run integration-test:node", + "test": "npm run clean && tshy && npm run unit-test:node && dev-tool run bundle && npm run unit-test:browser && npm run integration-test" }, "exports": { "./package.json": "./package.json", ".": { "browser": { + "source": "./src/index.ts", "types": "./dist/browser/index.d.ts", "default": "./dist/browser/index.js" }, "react-native": { + "source": "./src/index.ts", "types": "./dist/react-native/index.d.ts", "default": "./dist/react-native/index.js" }, "import": { + "source": "./src/index.ts", "types": "./dist/esm/index.d.ts", "default": "./dist/esm/index.js" }, "require": { + "source": "./src/index.ts", "types": "./dist/commonjs/index.d.ts", "default": "./dist/commonjs/index.js" } } }, "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "module": "./dist/esm/index.js", - "//sampleConfiguration": { - "productName": "Azure Document Intelligence Rest Client", - "productSlugs": [ - "azure", - "document-intelligence", - "ai-document-intelligence" - ], - "disableDocsMs": true - } -} + "types": "./dist/commonjs/index.d.ts" +} \ No newline at end of file diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/review/ai-document-intelligence.api.md b/sdk/documentintelligence/ai-document-intelligence-rest/review/ai-document-intelligence.api.md index 7f33e9b12484..2b732125ffbc 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/review/ai-document-intelligence.api.md +++ b/sdk/documentintelligence/ai-document-intelligence-rest/review/ai-document-intelligence.api.md @@ -2096,7 +2096,6 @@ export interface Routes { // @public export interface SimplePollerLike, TResult> { - getOperationId(): string; getOperationState(): TState; getResult(): TResult | undefined; isDone(): boolean; diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/sample.env b/sdk/documentintelligence/ai-document-intelligence-rest/sample.env deleted file mode 100644 index 4edbb15d213c..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/sample.env +++ /dev/null @@ -1,8 +0,0 @@ -# Used in most samples. Retrieve these values from a Cognitive Services instance -# in the Azure Portal. -DOCUMENT_INTELLIGENCE_ENDPOINT="https://.cognitiveservies.azure.com/" -DOCUMENT_INTELLIGENCE_API_KEY="
" - -# Our tests assume that TEST_MODE is "playback" by default. You can -# change it to "record" to generate new recordings, or "live" to bypass the recorder entirely. -# TEST_MODE=playback diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeDocumentByModelId.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeDocumentByModelId.ts deleted file mode 100644 index ac70505c598a..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeDocumentByModelId.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to analyze a document using a model with a given ID. The model ID may refer to any model, - * whether custom, prebuilt, composed, etc. - * - * @summary analyze a document using a model by ID - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - const modelId = process.env.DOCUMENT_INTELLIGENCE_CUSTOM_MODEL_ID || "";// "prebuilt-layout"; - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", modelId) - .post({ - contentType: "application/json", - body: { - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/receipt/contoso-receipt.png", - }, - queryParameters: { locale: "en-IN" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const document = documents && documents[0]; - if (!document) { - throw new Error("Expected at least one document in the result."); - } - - console.log( - "Extracted document:", - document.docType, - `(confidence: ${document.confidence || ""})` - ); - console.log("Fields:", document.fields); -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeIdentityDocument.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeIdentityDocument.ts deleted file mode 100644 index 37df16bc9b66..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeIdentityDocument.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of an identity document (such as a driver license or passport) from a URL - * to a file using the prebuilt identity document model. - * - * The prebuilt identity document model can return several fields. For a detailed list of the fields supported by the - * identity document model, see the `IdentityDocument` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/iddocumentfieldschema - * - * @summary extract data from an identity document - * @azsdk-skip-javascript - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-idDocument") - .post({ - contentType: "application/json", - body: { - // The Document Intelligence service will access the following URL to a driver license image and extract data from it - urlSource: - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/identityDocument/license.png", - }, - queryParameters: { locale: "en-IN" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const document = documents && documents[0]; - - // Use of PrebuiltModels.Receipt above (rather than the raw model ID), adds strong typing of the model's output - if (document) { - // The identity document model has multiple document types, so we need to know which document type was actually - // extracted. - if (document.docType === "idDocument.driverLicense") { - // For the sake of the example, we'll only show a few of the fields that are produced. - console.log("Extracted a Driver License:"); - console.log(document.fields) - } else if (document.docType === "idDocument.passport") { - console.log("Extracted a Passport:"); - console.log(document.fields) - } else { - // The only reason this would happen is if the client library's schema for the prebuilt identity document model is - // out of date, and a new document type has been introduced. - console.error("Unknown document type in result:", document); - } - } else { - throw new Error("Expected at least one receipt in the result."); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeInvoice.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeInvoice.ts deleted file mode 100644 index ed2ce320051d..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeInvoice.ts +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of an invoice from a URL to a file using the prebuilt invoice model. - * - * The prebuilt invoice model can return several fields. For a detailed list of the fields supported by the invoice - * model, see the `Invoice` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/invoicefieldschema - * - * @summary extract data from an invoice document - * @azsdk-skip-javascript - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-invoice") - .post({ - contentType: "application/json", - body: { - // The Document Intelligence service will access the following URL to an invoice image and extract data from it - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/invoice/sample_invoice.jpg", - } - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const document = documents && documents[0]; - if (!document) { - throw new Error("Expected at least one document in the result."); - } - - - // Use of PrebuiltModels.Receipt above (rather than the raw model ID), adds strong typing of the model's output - if (document) { - console.log(document.fields); - } else { - throw new Error("Expected at least one receipt in the result."); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeReceipt.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeReceipt.ts deleted file mode 100644 index 8f0eaeae8bc7..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeReceipt.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of a receipt from a URL to a file using the prebuilt receipt model. - * - * The prebuilt receipt model can return several fields. For a detailed list of the fields supported by the receipt - * model, see the `Receipt` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/receiptfieldschema - * - * @summary extract data from a receipt document - * @azsdk-skip-javascript - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - // The Document Intelligence service will access the following URL to a receipt image and extract data from it - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/receipt/contoso-receipt.png", - } - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const document = documents && documents[0]; - - - - // Use of PrebuiltModels.Receipt above (rather than the raw model ID), as it adds strong typing of the model's output - if (document) { - console.log(document.fields); - } else { - throw new Error("Expected at least one receipt in the result."); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeReceiptByModelId.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeReceiptByModelId.ts deleted file mode 100644 index c8fc574766e9..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeReceiptByModelId.ts +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of a receipt from a URL to a file using the prebuilt receipt model. Rather - * than using the `PrebuiltModels.Receipt` document model, this sample shows the use of the prebuilt model by ID, - * resulting in a weaker type that exactly mirrors the model's field schema at runtime. - * - * The prebuilt receipt model can return several fields. For a detailed list of the fields supported by the - * receipt model, see the `Receipt` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/receiptfieldschema - * - * @summary use the "prebuilt-receipt" model ID to extract data from a receipt document (weakly-typed) - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - // The Document Intelligence service will access the following URL to a receipt image and extract data from it - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/receipt/contoso-receipt.png", - } - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - - poller.onProgress((state) => console.log("Operation:", state.result, state.status)); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const result = documents && documents[0]; - if (result) { - console.log(result.fields); - } else { - throw new Error("Expected at least one receipt in the result."); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeW2TaxForm.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeW2TaxForm.ts deleted file mode 100644 index 261e0eb6011d..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/analyzeW2TaxForm.ts +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of a United States W2 tax form from a file using the prebuilt US W2 model. - * - * The prebuilt W2 model can return several fields. For a detailed list of the fields supported by the model, see the - * `TaxUsW2` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/taxusw2fieldschema - * - * @summary extract data from a United States W2 tax document - * @azsdk-skip-javascript - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; -import fs from "fs"; -import path from "path"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const filePath = fs.readFileSync(path.join(".", "assets", "w2", "w2-single.png")); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-tax.us.w2") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - const document = documents?.[0]; - - if (document) { - console.log("Extracted W2 tax form:"); - console.log(document.fields); - } else { - throw new Error("Expected at least one document in the result."); - } -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/buildClassifier.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/buildClassifier.ts deleted file mode 100644 index 9358f1110f00..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/buildClassifier.ts +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to programmatically build a custom classifier. - * - * The Document Intelligence service expects the training data to be organized and labeled according to a particular - * convention and stored in an Azure Storage container. For more information about creating a training data set, please - * see the information at the following link to the service's documentation: - * - * https://aka.ms/azsdk/documentitelligence/buildclassifiermodel - * - * @summary build a classifier from a training data set - */ - -import DocumentIntelligence, { DocumentClassifierBuildOperationDetailsOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const random = Date.now().toString(); - const modelId = - (process.env.CUSTOM_CLASSIFIER_ID || "") + random.substring(random.length - 6); - - const trainingDataSasUrl1 = - process.env.CUSTOM_CLASSIFIER_TRAINING_DATA_SAS_URL_1 || ""; - - const trainingDataSasUrl2 = - process.env.CUSTOM_CLASSIFIER_TRAINING_DATA_SAS_URL_2 || ""; - - const initialResponse = await client.path("/documentClassifiers:build").post({ - body: { - classifierId: modelId, - description: "Custom classifier description", - docTypes: { - foo: { - azureBlobSource: { - containerUrl: trainingDataSasUrl1, - }, - }, - bar: { - azureBlobSource: { - containerUrl: trainingDataSasUrl2, - }, - }, - }, - } - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const classifier = ( - (await (poller).pollUntilDone()).body as DocumentClassifierBuildOperationDetailsOutput - ).result; - if (!classifier) { - throw new Error("Expected a DocumentClassifierDetailsOutput response."); - } - - - console.log("Classifier ID:", classifier.classifierId); - console.log("Description:", classifier.description); - console.log("Created:", classifier.createdDateTime); - - console.log("Document Types:"); - for (const [docType, details] of Object.entries(classifier.docTypes)) { - console.log(`- Name: "${docType}", source: ${JSON.stringify(details, null, 2)}`); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/buildModel.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/buildModel.ts deleted file mode 100644 index a50eaa0e4a3e..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/buildModel.ts +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to programmatically build a model with a single document type using a training data set. - * - * The Document Intelligence service expects the training data to be organized and labeled according to a particular - * convention and stored in an Azure Storage container. For more information about creating a training data set, please - * see the information at the following link to the service's documentation: - * - * https://aka.ms/azsdk/documentitelligence/buildtrainingset - * - * @summary build a model with a single document type from a training data set - */ - -import DocumentIntelligence, { DocumentModelBuildOperationDetailsOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - const random = Date.now().toString(); - const modelId = - (process.env.CUSTOM_MODEL_ID || "") + random.substring(random.length - 6); - const trainingDataSasUrl = - process.env.CUSTOM_MODEL_TRAINING_DATA_SAS_URL || ""; - - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId, - azureBlobSource: { - containerUrl: trainingDataSasUrl - }, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse); - const model = ( - (await (await poller).pollUntilDone()).body as DocumentModelBuildOperationDetailsOutput - ).result; - if (!model) { - throw new Error("Expected a DocumentModelDetailsOutput response."); - } - - console.log("Model ID:", model.modelId); - console.log("Description:", model.description); - console.log("Created:", model.createdDateTime); - - // A model may contain several document types, which describe the possible object structures of fields extracted using - // this model - - console.log("Document Types:"); - for (const [docType, { description, fieldSchema: schema }] of Object.entries( - model.docTypes || {} - )) { - console.log(`- Name: "${docType}"`); - console.log(` Description: "${description}"`); - - // For simplicity, this example will only show top-level field names - console.log(" Fields:"); - - for (const [fieldName, fieldSchema] of Object.entries(schema)) { - console.log(` - "${fieldName}" (${fieldSchema.type})`); - console.log(` ${fieldSchema.description || ""}`); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/classifyDocument.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/classifyDocument.ts deleted file mode 100644 index ad6ba315f0e3..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/classifyDocument.ts +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to use a custom classifier to get the document type (class) of a document. - * - * @summary use a custom classifier to classify a document - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - const documentUrl = - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/invoice/Invoice_1.pdf"; - - const classifierId = process.env.CUSTOM_CLASSIFIER_ID ?? ""; - const initialResponse = await client - .path("/documentClassifiers/{classifierId}:analyze", classifierId) - .post({ - contentType: "application/json", - body: { - urlSource: documentUrl, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - if (analyzeResult?.documents === undefined || analyzeResult.documents.length === 0) { - throw new Error("Failed to extract any documents."); - } - - for (const document of analyzeResult.documents) { - console.log( - `Extracted a document with type '${document.docType}' on page ${document.boundingRegions?.[0].pageNumber} (confidence: ${document.confidence})` - ); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/composeModel.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/composeModel.ts deleted file mode 100644 index d16fca04a898..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/composeModel.ts +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample demonstrates how to create a composed model from several individual labeled models. - * - * We build all of the component models used in the composition operation and then finally create the composed model. - * The resulting composed model will have all of the document types of its component submodels. When used for analysis, - * it will first classify the input as belonging to one of the document types.zzs - * - * @summary create a composed model from several individual labeled models - * @azsdk-weight 60 - */ - -import DocumentIntelligence, { DocumentModelBuildOperationDetailsOutput, DocumentModelComposeOperationDetailsOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - // This object will hold the SAS-encoded URLs to containers that hold - // different types of purchase order documents and their labels. - const purchaseOrderSasUrls = { - supplies: - process.env["PURCHASE_ORDER_SUPPLIES_SAS_URL"] || - "", - equipment: - process.env["PURCHASE_ORDER_EQUIPMENT_SAS_URL"] || - "", - furniture: - process.env["PURCHASE_ORDER_FURNITURE_SAS_URL"] || - "", - cleaningSupplies: - process.env["PURCHASE_ORDER_CLEANING_SUPPLIES_SAS_URL"] || - "", - }; - - // We'll put the last few digits of the current timestamp into the model IDs, just to make sure they're unique. - const random = Date.now().toString(); - - const modelIds = await Promise.all( - Object.entries(purchaseOrderSasUrls) - .map(async ([kind, sasUrl]) => { - const modelId = kind + "ComponentModel" + random.substring(random.length - 6); - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId: modelId, - azureBlobSource: { - containerUrl: sasUrl, - }, - }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const model = ( - (await (poller).pollUntilDone()).body as DocumentModelBuildOperationDetailsOutput - ).result!; - - return model; - }) - .map(async (model) => { return { modelId: (await model).modelId } }) - ); - - // Finally, create the composed model. - - const composedModelId = "purchaseOrders" + random.substring(random.length - 6); - - const initialResponse = await client.path("/documentModels:compose").post({ - body: { - description: "A composed model that classifies purchase order documents and extracts data from them.", - componentModels: modelIds, - modelId: composedModelId, - - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - - const composedModel = ( - (await (poller).pollUntilDone()).body as DocumentModelComposeOperationDetailsOutput - ).result!; - - - console.log("Model ID:", composedModel.modelId); - console.log("Description:", composedModel.description); - console.log("Created:", composedModel.createdDateTime); - - // The composed model should have a document type for each one of the individually built models that are composed into - // this larger model. - - console.log("Document Types:"); - for (const [docType, { description, fieldSchema: schema }] of Object.entries( - composedModel.docTypes || {} - )) { - console.log(`- Name: "${docType}"`); - console.log(` Description: "${description}"`); - - // For simplicity, this example will only show top-level field names - console.log(" Fields:"); - - for (const [fieldName, fieldSchema] of Object.entries(schema)) { - console.log(` - "${fieldName}" (${fieldSchema.type})`); - console.log(` ${fieldSchema.description || ""}`); - } - } -} - -main().catch((err) => { - console.error("The sample encountered an error:", err); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/copyModel.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/copyModel.ts deleted file mode 100644 index 2da44e98c499..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/copyModel.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to copy a model from one resource to another. The model is created with a new model ID (and - * optionally a new description) in the destination resource, but will have the same document types as the source model. - * - * @summary copy a model from one resource to another - */ - -import DocumentIntelligence, { DocumentModelCopyToOperationDetailsOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - - const random = Date.now().toString(); - const destinationModelId = - (process.env.CUSTOM_MODEL_ID || "") + random.substring(random.length - 6); - - // The authorization must be created by the destination resource. - // const destinationClient = new DocumentModelAdministrationClient(endpoint, credential); - const destinationClient = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - // const authorization = await destinationClient.getCopyAuthorization(destinationModelId); - const targetAuth = await destinationClient.path("/documentModels:authorizeCopy").post({ - body: { - modelId: destinationModelId, - }, - }); - if (isUnexpected(targetAuth)) { - throw targetAuth.body.error; - } - const sourceEndpoint = process.env.DOCUMENT_INTELLIGENCE_SOURCE_ENDPOINT || ""; - const sourceModelId = process.env.COPY_SOURCE_MODEL_ID || ""; - - // Then, the source resource can initiate the copy operation. - const sourceClient = DocumentIntelligence( - sourceEndpoint, - { key: process.env.DOCUMENT_INTELLIGENCE_SOURCE_API_KEY || "" }) - - const copyInitResponse = await sourceClient - .path("/documentModels/{modelId}:copyTo", sourceModelId) - .post({ - body: targetAuth.body, - }); - - if (isUnexpected(copyInitResponse)) { - throw copyInitResponse.body.error; - } - const copyPoller = getLongRunningPoller(sourceClient, copyInitResponse); - const model = ( - (await (await copyPoller).pollUntilDone()).body as DocumentModelCopyToOperationDetailsOutput - ).result!; - - console.log("Model ID:", model.modelId); - console.log("Description:", model.description); - console.log("Created:", model.createdDateTime); -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/extractLayout.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/extractLayout.ts deleted file mode 100644 index 6b94c2622512..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/extractLayout.ts +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract only the basic layout information from a document using the `beginExtractLayout` - * method. Layout information consists of the arrangement of basic OCR elements, such as pages (including their contents - * such as lines, words, and selection marks), tables, and text font styles. - * - * @summary use the prebuilt layout model to extract basic document elements only - * @azsdk-skip-javascript - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf", - } - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - const tables = analyzeResult?.tables; - - if (!pages || pages.length <= 0) { - console.log("No pages were extracted from the document."); - } else { - console.log("Pages:"); - for (const page of pages) { - console.log("- Page", page.pageNumber, `(unit: ${page.unit})`); - console.log(` ${page.width}x${page.height}, angle: ${page.angle}`); - console.log( - ` ${page.lines && page.lines.length} lines, ${page.words && page.words.length} words` - ); - - if (page.lines && page.lines.length > 0) { - console.log(" Lines:"); - - for (const line of page.lines) { - console.log(` - "${line.content}"`); - } - } - } - } - - if (!tables || tables.length <= 0) { - console.log("No tables were extracted from the document."); - } else { - console.log("Tables:"); - for (const table of tables) { - console.log( - `- Extracted table: ${table.columnCount} columns, ${table.rowCount} rows (${table.cells.length} cells)` - ); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/getClassifier.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/getClassifier.ts deleted file mode 100644 index 1a6352dba334..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/getClassifier.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to get the details of a custom classifier by its ID, including information about the document - * types that the classifier supports. - * - * @summary get information about a classifier by its ID - */ - -import DocumentIntelligence, { isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const classifierId = process.env.CUSTOM_CLASSIFIER_ID ?? ""; - const classifier = await client.path("/documentClassifiers/{classifierId}", classifierId).get(); - - if (isUnexpected(classifier)) { - throw classifier.body.error; - } - console.log("ID", classifier.body.classifierId); - console.log("Created:", classifier.body.createdDateTime); - console.log("Description: ", classifier.body.description || ""); - - console.log("Document Types:"); - for (const [docType, details] of Object.entries(classifier.body.docTypes || {})) { - // We can also programmatically access a schema of the fields. - console.log(`- Name "${docType}", source: ${JSON.stringify(details, null, 2)}`); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/getInfo.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/getInfo.ts deleted file mode 100644 index b5644db43610..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/getInfo.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to programmatically retrieve metadata about the number of custom models in the Form Recognizer - * resource and the limit of custom models that the resource will allow to be created. - * - * @summary get information about the count and limit of custom models in the resource - */ - -import DocumentIntelligence, { isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - const info = await client.path("/info").get(); - if (isUnexpected(info)) { - throw info.body.error; - } - console.log( - `Custom document models: ${info.body.customDocumentModels.count} of ${info.body.customDocumentModels.limit}` - ); -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/getModel.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/getModel.ts deleted file mode 100644 index 1ca43511e8c0..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/getModel.ts +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to get the full information about a custom model by its model ID, including information about - * the document types in the model and their field schemas. - * - * @summary get information about a model by its ID - */ - -import DocumentIntelligence, { isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - // The model ID to query. This can be any model ID, not just a custom model, so for example - // the following sample uses `"prebuilt-idDocument"`, but you can change it to any model ID - // you'd like to inspect. - const modelId = "prebuilt-idDocument"; - const model = await client.path("/documentModels/{modelId}", modelId).get(); - - if (isUnexpected(model)) { - throw model.body.error; - } - - console.log("ID", model.body.modelId); - console.log("Created:", model.body.createdDateTime); - console.log("Description: ", model.body.description || ""); - - console.log("Document Types:"); - for (const [docType, { fieldSchema }] of Object.entries(model.body.docTypes || {})) { - // We can also programmatically access a schema of the fields. - console.log("-", docType, JSON.stringify(fieldSchema, undefined, 2)); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/listModels.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/listModels.ts deleted file mode 100644 index eb081a1ce61a..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/listModels.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to iterate over the models in a resource. This will include both custom and prebuilt models. - * - * @summary iterate over the models in a resource - */ - -import DocumentIntelligence, { isUnexpected, paginate } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - - const response = await client.path("/documentModels").get(); - if (isUnexpected(response)) { - throw response.body.error; - } - - for await (const model of paginate(client, response)) { - console.log("- ID", model.modelId); - console.log(" Created:", model.createdDateTime); - console.log(" Description: ", model.description || ""); - - // The model summary does not include `docTypes`, so we must additionally call `getModel` to retrieve them - const detailedModel = (await client.path("/documentModels/{modelId}", model.modelId).get()); - - if (isUnexpected(detailedModel)) { - throw detailedModel.body.error; - } - const docTypes = detailedModel.body.docTypes; - - console.log(" Document Types:"); - for (const docType of Object.keys(docTypes || {})) { - console.log(" -", docType); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/readDocument.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/readDocument.ts deleted file mode 100644 index 440c4e16040c..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples-dev/readDocument.ts +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract the text content of a document using the "prebuilt-read" model. - * - * @summary use the prebuilt "read" model to extract information about the text content of a document - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-read") - .post({ - contentType: "application/json", - body: { - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf", - }, - queryParameters: { features: ["barcodes"] }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - - // The "prebuilt-read" model (`beginReadDocument` method) only extracts information about the textual content of the - // document, such as page text elements and information about the language of the text. - const pages = analyzeResult?.pages; - const languages = analyzeResult?.languages; - const styles = analyzeResult?.styles; - - - if (!pages || pages.length <= 0) { - console.log("No pages were extracted from the document."); - } else { - console.log("Pages:"); - for (const page of pages) { - console.log("- Page", page.pageNumber, `(unit: ${page.unit})`); - console.log(` ${page.width}x${page.height}, angle: ${page.angle}`); - console.log( - ` ${page.lines && page.lines.length} lines, ${page.words && page.words.length} words` - ); - - if (page.lines && page.lines.length > 0) { - console.log(" Lines:"); - - for (const line of page.lines) { - console.log(` - "${line.content}"`); - } - } - } - } - - if (!languages || languages.length <= 0) { - console.log("No language spans were extracted from the document."); - } else { - console.log("Languages:"); - for (const languageEntry of languages) { - console.log( - `- Found language: ${languageEntry.locale} (confidence: ${languageEntry.confidence})` - ); - } - } - - if (!styles || styles.length <= 0) { - console.log("No text styles were extracted from the document."); - } else { - console.log("Styles:"); - for (const style of styles) { - console.log( - `- Handwritten: ${style.isHandwritten ? "yes" : "no"} (confidence=${style.confidence})` - ); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/README.md b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/README.md deleted file mode 100644 index bf2ee8a8d627..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/README.md +++ /dev/null @@ -1,72 +0,0 @@ -# Azure Document Intelligence Rest Client client library samples for JavaScript (Beta) - -These sample programs show how to use the JavaScript client libraries for Azure Document Intelligence Rest Client in some common scenarios. - -| **File Name** | **Description** | -| ------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| [composeModel.js][composemodel] | create a composed model from several individual labeled models | -| [analyzeDocumentByModelId.js][analyzedocumentbymodelid] | analyze a document using a model by ID | -| [analyzeReceiptByModelId.js][analyzereceiptbymodelid] | use the "prebuilt-receipt" model ID to extract data from a receipt document (weakly-typed) | -| [buildClassifier.js][buildclassifier] | build a classifier from a training data set | -| [buildModel.js][buildmodel] | build a model with a single document type from a training data set | -| [classifyDocument.js][classifydocument] | use a custom classifier to classify a document | -| [copyModel.js][copymodel] | copy a model from one resource to another | -| [getClassifier.js][getclassifier] | get information about a classifier by its ID | -| [getInfo.js][getinfo] | get information about the count and limit of custom models in the resource | -| [getModel.js][getmodel] | get information about a model by its ID | -| [listModels.js][listmodels] | iterate over the models in a resource | -| [readDocument.js][readdocument] | use the prebuilt "read" model to extract information about the text content of a document | - -## Prerequisites - -The sample programs are compatible with [LTS versions of Node.js](https://github.com/nodejs/release#release-schedule). - -You need [an Azure subscription][freesub] to run these sample programs. - -Samples retrieve credentials to access the service endpoint from environment variables. Alternatively, edit the source code to include the appropriate credentials. See each individual sample for details on which environment variables/credentials it requires to function. - -Adapting the samples to run in the browser may require some additional consideration. For details, please see the [package README][package]. - -## Setup - -To run the samples using the published version of the package: - -1. Install the dependencies using `npm`: - -```bash -npm install -``` - -2. Edit the file `sample.env`, adding the correct credentials to access the Azure service and run the samples. Then rename the file from `sample.env` to just `.env`. The sample programs will read this file automatically. - -3. Run whichever samples you like (note that some samples may require additional setup, see the table above): - -```bash -node composeModel.js -``` - -Alternatively, run a single sample with the correct environment variables set (setting up the `.env` file is not required if you do this), for example (cross-platform): - -```bash -npx cross-env DOCUMENT_INTELLIGENCE_ENDPOINT="" DOCUMENT_INTELLIGENCE_API_KEY="" PURCHASE_ORDER_SUPPLIES_SAS_URL="" PURCHASE_ORDER_EQUIPMENT_SAS_URL="" PURCHASE_ORDER_FURNITURE_SAS_URL="" PURCHASE_ORDER_CLEANING_SUPPLIES_SAS_URL="" node composeModel.js -``` - -## Next Steps - -Take a look at our [API Documentation][apiref] for more information about the APIs that are available in the clients. - -[composemodel]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/composeModel.js -[analyzedocumentbymodelid]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/analyzeDocumentByModelId.js -[analyzereceiptbymodelid]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/analyzeReceiptByModelId.js -[buildclassifier]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/buildClassifier.js -[buildmodel]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/buildModel.js -[classifydocument]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/classifyDocument.js -[copymodel]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/copyModel.js -[getclassifier]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getClassifier.js -[getinfo]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getInfo.js -[getmodel]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getModel.js -[listmodels]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/listModels.js -[readdocument]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/readDocument.js -[apiref]: https://docs.microsoft.com/javascript/api/@azure-rest/ai-document-intelligence -[freesub]: https://azure.microsoft.com/free/ -[package]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest/README.md diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/analyzeDocumentByModelId.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/analyzeDocumentByModelId.js deleted file mode 100644 index 098e789db469..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/analyzeDocumentByModelId.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to analyze a document using a model with a given ID. The model ID may refer to any model, - * whether custom, prebuilt, composed, etc. - * - * @summary analyze a document using a model by ID - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - const modelId = process.env.DOCUMENT_INTELLIGENCE_CUSTOM_MODEL_ID || ""; // "prebuilt-layout"; - - const initialResponse = await client.path("/documentModels/{modelId}:analyze", modelId).post({ - contentType: "application/json", - body: { - urlSource: - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/receipt/contoso-receipt.png", - }, - queryParameters: { locale: "en-IN" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = (await poller.pollUntilDone()).body.analyzeResult; - - const documents = analyzeResult?.documents; - - const document = documents && documents[0]; - if (!document) { - throw new Error("Expected at least one document in the result."); - } - - console.log( - "Extracted document:", - document.docType, - `(confidence: ${document.confidence || ""})`, - ); - console.log("Fields:", document.fields); -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/analyzeReceiptByModelId.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/analyzeReceiptByModelId.js deleted file mode 100644 index 9264a61f4e1a..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/analyzeReceiptByModelId.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of a receipt from a URL to a file using the prebuilt receipt model. Rather - * than using the `PrebuiltModels.Receipt` document model, this sample shows the use of the prebuilt model by ID, - * resulting in a weaker type that exactly mirrors the model's field schema at runtime. - * - * The prebuilt receipt model can return several fields. For a detailed list of the fields supported by the - * receipt model, see the `Receipt` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/receiptfieldschema - * - * @summary use the "prebuilt-receipt" model ID to extract data from a receipt document (weakly-typed) - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - // The Document Intelligence service will access the following URL to a receipt image and extract data from it - urlSource: - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/receipt/contoso-receipt.png", - }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - - poller.onProgress((state) => console.log("Operation:", state.result, state.status)); - const analyzeResult = (await poller.pollUntilDone()).body.analyzeResult; - - const documents = analyzeResult?.documents; - - const result = documents && documents[0]; - if (result) { - console.log(result.fields); - } else { - throw new Error("Expected at least one receipt in the result."); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/buildClassifier.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/buildClassifier.js deleted file mode 100644 index ed481b8012aa..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/buildClassifier.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to programmatically build a custom classifier. - * - * The Document Intelligence service expects the training data to be organized and labeled according to a particular - * convention and stored in an Azure Storage container. For more information about creating a training data set, please - * see the information at the following link to the service's documentation: - * - * https://aka.ms/azsdk/documentitelligence/buildclassifiermodel - * - * @summary build a classifier from a training data set - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - - const random = Date.now().toString(); - const modelId = - (process.env.CUSTOM_CLASSIFIER_ID || "") + random.substring(random.length - 6); - - const trainingDataSasUrl1 = - process.env.CUSTOM_CLASSIFIER_TRAINING_DATA_SAS_URL_1 || ""; - - const trainingDataSasUrl2 = - process.env.CUSTOM_CLASSIFIER_TRAINING_DATA_SAS_URL_2 || ""; - - const initialResponse = await client.path("/documentClassifiers:build").post({ - body: { - classifierId: modelId, - description: "Custom classifier description", - docTypes: { - foo: { - azureBlobSource: { - containerUrl: trainingDataSasUrl1, - }, - }, - bar: { - azureBlobSource: { - containerUrl: trainingDataSasUrl2, - }, - }, - }, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const classifier = (await poller.pollUntilDone()).body.result; - if (!classifier) { - throw new Error("Expected a DocumentClassifierDetailsOutput response."); - } - - console.log("Classifier ID:", classifier.classifierId); - console.log("Description:", classifier.description); - console.log("Created:", classifier.createdDateTime); - - console.log("Document Types:"); - for (const [docType, details] of Object.entries(classifier.docTypes)) { - console.log(`- Name: "${docType}", source: ${JSON.stringify(details, null, 2)}`); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/buildModel.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/buildModel.js deleted file mode 100644 index bbc03c07d574..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/buildModel.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to programmatically build a model with a single document type using a training data set. - * - * The Document Intelligence service expects the training data to be organized and labeled according to a particular - * convention and stored in an Azure Storage container. For more information about creating a training data set, please - * see the information at the following link to the service's documentation: - * - * https://aka.ms/azsdk/documentitelligence/buildtrainingset - * - * @summary build a model with a single document type from a training data set - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - const random = Date.now().toString(); - const modelId = - (process.env.CUSTOM_MODEL_ID || "") + random.substring(random.length - 6); - const trainingDataSasUrl = - process.env.CUSTOM_MODEL_TRAINING_DATA_SAS_URL || ""; - - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId, - azureBlobSource: { - containerUrl: trainingDataSasUrl, - }, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse); - const model = (await (await poller).pollUntilDone()).body.result; - if (!model) { - throw new Error("Expected a DocumentModelDetailsOutput response."); - } - - console.log("Model ID:", model.modelId); - console.log("Description:", model.description); - console.log("Created:", model.createdDateTime); - - // A model may contain several document types, which describe the possible object structures of fields extracted using - // this model - - console.log("Document Types:"); - for (const [docType, { description, fieldSchema: schema }] of Object.entries( - model.docTypes || {}, - )) { - console.log(`- Name: "${docType}"`); - console.log(` Description: "${description}"`); - - // For simplicity, this example will only show top-level field names - console.log(" Fields:"); - - for (const [fieldName, fieldSchema] of Object.entries(schema)) { - console.log(` - "${fieldName}" (${fieldSchema.type})`); - console.log(` ${fieldSchema.description || ""}`); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/classifyDocument.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/classifyDocument.js deleted file mode 100644 index 07f3b4365304..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/classifyDocument.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to use a custom classifier to get the document type (class) of a document. - * - * @summary use a custom classifier to classify a document - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - const documentUrl = - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/invoice/Invoice_1.pdf"; - - const classifierId = process.env.CUSTOM_CLASSIFIER_ID ?? ""; - const initialResponse = await client - .path("/documentClassifiers/{classifierId}:analyze", classifierId) - .post({ - contentType: "application/json", - body: { - urlSource: documentUrl, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = (await poller.pollUntilDone()).body.analyzeResult; - - if (analyzeResult?.documents === undefined || analyzeResult.documents.length === 0) { - throw new Error("Failed to extract any documents."); - } - - for (const document of analyzeResult.documents) { - console.log( - `Extracted a document with type '${document.docType}' on page ${document.boundingRegions?.[0].pageNumber} (confidence: ${document.confidence})`, - ); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/composeModel.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/composeModel.js deleted file mode 100644 index 59f97ac3dd1d..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/composeModel.js +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample demonstrates how to create a composed model from several individual labeled models. - * - * We build all of the component models used in the composition operation and then finally create the composed model. - * The resulting composed model will have all of the document types of its component submodels. When used for analysis, - * it will first classify the input as belonging to one of the document types.zzs - * - * @summary create a composed model from several individual labeled models - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - - // This object will hold the SAS-encoded URLs to containers that hold - // different types of purchase order documents and their labels. - const purchaseOrderSasUrls = { - supplies: - process.env["PURCHASE_ORDER_SUPPLIES_SAS_URL"] || - "", - equipment: - process.env["PURCHASE_ORDER_EQUIPMENT_SAS_URL"] || - "", - furniture: - process.env["PURCHASE_ORDER_FURNITURE_SAS_URL"] || - "", - cleaningSupplies: - process.env["PURCHASE_ORDER_CLEANING_SUPPLIES_SAS_URL"] || - "", - }; - - // We'll put the last few digits of the current timestamp into the model IDs, just to make sure they're unique. - const random = Date.now().toString(); - - const modelIds = await Promise.all( - Object.entries(purchaseOrderSasUrls) - .map(async ([kind, sasUrl]) => { - const modelId = kind + "ComponentModel" + random.substring(random.length - 6); - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId: modelId, - azureBlobSource: { - containerUrl: sasUrl, - }, - }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const model = (await poller.pollUntilDone()).body.result; - - return model; - }) - .map(async (model) => { - return { modelId: (await model).modelId }; - }), - ); - - // Finally, create the composed model. - - const composedModelId = "purchaseOrders" + random.substring(random.length - 6); - - const initialResponse = await client.path("/documentModels:compose").post({ - body: { - description: - "A composed model that classifies purchase order documents and extracts data from them.", - componentModels: modelIds, - modelId: composedModelId, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - - const composedModel = (await poller.pollUntilDone()).body.result; - - console.log("Model ID:", composedModel.modelId); - console.log("Description:", composedModel.description); - console.log("Created:", composedModel.createdDateTime); - - // The composed model should have a document type for each one of the individually built models that are composed into - // this larger model. - - console.log("Document Types:"); - for (const [docType, { description, fieldSchema: schema }] of Object.entries( - composedModel.docTypes || {}, - )) { - console.log(`- Name: "${docType}"`); - console.log(` Description: "${description}"`); - - // For simplicity, this example will only show top-level field names - console.log(" Fields:"); - - for (const [fieldName, fieldSchema] of Object.entries(schema)) { - console.log(` - "${fieldName}" (${fieldSchema.type})`); - console.log(` ${fieldSchema.description || ""}`); - } - } -} - -main().catch((err) => { - console.error("The sample encountered an error:", err); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/copyModel.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/copyModel.js deleted file mode 100644 index e729fa10de76..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/copyModel.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to copy a model from one resource to another. The model is created with a new model ID (and - * optionally a new description) in the destination resource, but will have the same document types as the source model. - * - * @summary copy a model from one resource to another - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const random = Date.now().toString(); - const destinationModelId = - (process.env.CUSTOM_MODEL_ID || "") + random.substring(random.length - 6); - - // The authorization must be created by the destination resource. - // const destinationClient = new DocumentModelAdministrationClient(endpoint, credential); - const destinationClient = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - // const authorization = await destinationClient.getCopyAuthorization(destinationModelId); - const targetAuth = await destinationClient.path("/documentModels:authorizeCopy").post({ - body: { - modelId: destinationModelId, - }, - }); - if (isUnexpected(targetAuth)) { - throw targetAuth.body.error; - } - const sourceEndpoint = process.env.DOCUMENT_INTELLIGENCE_SOURCE_ENDPOINT || ""; - const sourceModelId = process.env.COPY_SOURCE_MODEL_ID || ""; - - // Then, the source resource can initiate the copy operation. - const sourceClient = DocumentIntelligence(sourceEndpoint, { - key: process.env.DOCUMENT_INTELLIGENCE_SOURCE_API_KEY || "", - }); - - const copyInitResponse = await sourceClient - .path("/documentModels/{modelId}:copyTo", sourceModelId) - .post({ - body: targetAuth.body, - }); - - if (isUnexpected(copyInitResponse)) { - throw copyInitResponse.body.error; - } - const copyPoller = getLongRunningPoller(sourceClient, copyInitResponse); - const model = (await (await copyPoller).pollUntilDone()).body.result; - - console.log("Model ID:", model.modelId); - console.log("Description:", model.description); - console.log("Created:", model.createdDateTime); -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getClassifier.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getClassifier.js deleted file mode 100644 index 0a72ff6d40bf..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getClassifier.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to get the details of a custom classifier by its ID, including information about the document - * types that the classifier supports. - * - * @summary get information about a classifier by its ID - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - - const classifierId = process.env.CUSTOM_CLASSIFIER_ID ?? ""; - const classifier = await client.path("/documentClassifiers/{classifierId}", classifierId).get(); - - if (isUnexpected(classifier)) { - throw classifier.body.error; - } - console.log("ID", classifier.body.classifierId); - console.log("Created:", classifier.body.createdDateTime); - console.log("Description: ", classifier.body.description || ""); - - console.log("Document Types:"); - for (const [docType, details] of Object.entries(classifier.body.docTypes || {})) { - // We can also programmatically access a schema of the fields. - console.log(`- Name "${docType}", source: ${JSON.stringify(details, null, 2)}`); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getInfo.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getInfo.js deleted file mode 100644 index 290adf4bc8d8..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getInfo.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to programmatically retrieve metadata about the number of custom models in the Form Recognizer - * resource and the limit of custom models that the resource will allow to be created. - * - * @summary get information about the count and limit of custom models in the resource - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - const info = await client.path("/info").get(); - if (isUnexpected(info)) { - throw info.body.error; - } - console.log( - `Custom document models: ${info.body.customDocumentModels.count} of ${info.body.customDocumentModels.limit}`, - ); -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getModel.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getModel.js deleted file mode 100644 index 0a2182b4dace..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/getModel.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to get the full information about a custom model by its model ID, including information about - * the document types in the model and their field schemas. - * - * @summary get information about a model by its ID - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - - // The model ID to query. This can be any model ID, not just a custom model, so for example - // the following sample uses `"prebuilt-idDocument"`, but you can change it to any model ID - // you'd like to inspect. - const modelId = "prebuilt-idDocument"; - const model = await client.path("/documentModels/{modelId}", modelId).get(); - - if (isUnexpected(model)) { - throw model.body.error; - } - - console.log("ID", model.body.modelId); - console.log("Created:", model.body.createdDateTime); - console.log("Description: ", model.body.description || ""); - - console.log("Document Types:"); - for (const [docType, { fieldSchema }] of Object.entries(model.body.docTypes || {})) { - // We can also programmatically access a schema of the fields. - console.log("-", docType, JSON.stringify(fieldSchema, undefined, 2)); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/listModels.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/listModels.js deleted file mode 100644 index 0c257a445214..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/listModels.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to iterate over the models in a resource. This will include both custom and prebuilt models. - * - * @summary iterate over the models in a resource - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { isUnexpected, paginate } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - - const response = await client.path("/documentModels").get(); - if (isUnexpected(response)) { - throw response.body.error; - } - - for await (const model of paginate(client, response)) { - console.log("- ID", model.modelId); - console.log(" Created:", model.createdDateTime); - console.log(" Description: ", model.description || ""); - - // The model summary does not include `docTypes`, so we must additionally call `getModel` to retrieve them - const detailedModel = await client.path("/documentModels/{modelId}", model.modelId).get(); - - if (isUnexpected(detailedModel)) { - throw detailedModel.body.error; - } - const docTypes = detailedModel.body.docTypes; - - console.log(" Document Types:"); - for (const docType of Object.keys(docTypes || {})) { - console.log(" -", docType); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/package.json b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/package.json deleted file mode 100644 index c89c769c0df8..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@azure-samples/ai-document-intelligence-js-beta", - "private": true, - "version": "1.0.0", - "description": "Azure Document Intelligence Rest Client client library samples for JavaScript (Beta)", - "engines": { - "node": ">=18.0.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Azure/azure-sdk-for-js.git", - "directory": "sdk/documentintelligence/ai-document-intelligence-rest" - }, - "keywords": [ - "node", - "azure", - "cloud", - "typescript", - "browser", - "isomorphic" - ], - "author": "Microsoft Corporation", - "license": "MIT", - "bugs": { - "url": "https://github.com/Azure/azure-sdk-for-js/issues" - }, - "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest", - "dependencies": { - "@azure-rest/ai-document-intelligence": "next", - "dotenv": "latest" - } -} diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/readDocument.js b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/readDocument.js deleted file mode 100644 index 5b300c136e3b..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/readDocument.js +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract the text content of a document using the "prebuilt-read" model. - * - * @summary use the prebuilt "read" model to extract information about the text content of a document - */ - -const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default, - { getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence"); - -require("dotenv").config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }, - ); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-read") - .post({ - contentType: "application/json", - body: { - urlSource: - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf", - }, - queryParameters: { features: ["barcodes"] }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = (await poller.pollUntilDone()).body.analyzeResult; - - // The "prebuilt-read" model (`beginReadDocument` method) only extracts information about the textual content of the - // document, such as page text elements and information about the language of the text. - const pages = analyzeResult?.pages; - const languages = analyzeResult?.languages; - const styles = analyzeResult?.styles; - - if (!pages || pages.length <= 0) { - console.log("No pages were extracted from the document."); - } else { - console.log("Pages:"); - for (const page of pages) { - console.log("- Page", page.pageNumber, `(unit: ${page.unit})`); - console.log(` ${page.width}x${page.height}, angle: ${page.angle}`); - console.log( - ` ${page.lines && page.lines.length} lines, ${page.words && page.words.length} words`, - ); - - if (page.lines && page.lines.length > 0) { - console.log(" Lines:"); - - for (const line of page.lines) { - console.log(` - "${line.content}"`); - } - } - } - } - - if (!languages || languages.length <= 0) { - console.log("No language spans were extracted from the document."); - } else { - console.log("Languages:"); - for (const languageEntry of languages) { - console.log( - `- Found language: ${languageEntry.locale} (confidence: ${languageEntry.confidence})`, - ); - } - } - - if (!styles || styles.length <= 0) { - console.log("No text styles were extracted from the document."); - } else { - console.log("Styles:"); - for (const style of styles) { - console.log( - `- Handwritten: ${style.isHandwritten ? "yes" : "no"} (confidence=${style.confidence})`, - ); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/sample.env b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/sample.env deleted file mode 100644 index 4edbb15d213c..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/javascript/sample.env +++ /dev/null @@ -1,8 +0,0 @@ -# Used in most samples. Retrieve these values from a Cognitive Services instance -# in the Azure Portal. -DOCUMENT_INTELLIGENCE_ENDPOINT="https://.cognitiveservies.azure.com/" -DOCUMENT_INTELLIGENCE_API_KEY="" - -# Our tests assume that TEST_MODE is "playback" by default. You can -# change it to "record" to generate new recordings, or "live" to bypass the recorder entirely. -# TEST_MODE=playback diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/README.md b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/README.md deleted file mode 100644 index a76449906a69..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/README.md +++ /dev/null @@ -1,95 +0,0 @@ -# Azure Document Intelligence Rest Client client library samples for TypeScript (Beta) - -These sample programs show how to use the TypeScript client libraries for Azure Document Intelligence Rest Client in some common scenarios. - -| **File Name** | **Description** | -| ------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| [composeModel.ts][composemodel] | create a composed model from several individual labeled models | -| [analyzeDocumentByModelId.ts][analyzedocumentbymodelid] | analyze a document using a model by ID | -| [analyzeIdentityDocument.ts][analyzeidentitydocument] | extract data from an identity document | -| [analyzeInvoice.ts][analyzeinvoice] | extract data from an invoice document | -| [analyzeReceipt.ts][analyzereceipt] | extract data from a receipt document | -| [analyzeReceiptByModelId.ts][analyzereceiptbymodelid] | use the "prebuilt-receipt" model ID to extract data from a receipt document (weakly-typed) | -| [analyzeW2TaxForm.ts][analyzew2taxform] | extract data from a United States W2 tax document | -| [buildClassifier.ts][buildclassifier] | build a classifier from a training data set | -| [buildModel.ts][buildmodel] | build a model with a single document type from a training data set | -| [classifyDocument.ts][classifydocument] | use a custom classifier to classify a document | -| [copyModel.ts][copymodel] | copy a model from one resource to another | -| [extractLayout.ts][extractlayout] | use the prebuilt layout model to extract basic document elements only | -| [getClassifier.ts][getclassifier] | get information about a classifier by its ID | -| [getInfo.ts][getinfo] | get information about the count and limit of custom models in the resource | -| [getModel.ts][getmodel] | get information about a model by its ID | -| [listModels.ts][listmodels] | iterate over the models in a resource | -| [readDocument.ts][readdocument] | use the prebuilt "read" model to extract information about the text content of a document | - -## Prerequisites - -The sample programs are compatible with [LTS versions of Node.js](https://github.com/nodejs/release#release-schedule). - -Before running the samples in Node, they must be compiled to JavaScript using the TypeScript compiler. For more information on TypeScript, see the [TypeScript documentation][typescript]. Install the TypeScript compiler using: - -```bash -npm install -g typescript -``` - -You need [an Azure subscription][freesub] to run these sample programs. - -Samples retrieve credentials to access the service endpoint from environment variables. Alternatively, edit the source code to include the appropriate credentials. See each individual sample for details on which environment variables/credentials it requires to function. - -Adapting the samples to run in the browser may require some additional consideration. For details, please see the [package README][package]. - -## Setup - -To run the samples using the published version of the package: - -1. Install the dependencies using `npm`: - -```bash -npm install -``` - -2. Compile the samples: - -```bash -npm run build -``` - -3. Edit the file `sample.env`, adding the correct credentials to access the Azure service and run the samples. Then rename the file from `sample.env` to just `.env`. The sample programs will read this file automatically. - -4. Run whichever samples you like (note that some samples may require additional setup, see the table above): - -```bash -node dist/composeModel.js -``` - -Alternatively, run a single sample with the correct environment variables set (setting up the `.env` file is not required if you do this), for example (cross-platform): - -```bash -npx cross-env DOCUMENT_INTELLIGENCE_ENDPOINT="" DOCUMENT_INTELLIGENCE_API_KEY="" PURCHASE_ORDER_SUPPLIES_SAS_URL="" PURCHASE_ORDER_EQUIPMENT_SAS_URL="" PURCHASE_ORDER_FURNITURE_SAS_URL="" PURCHASE_ORDER_CLEANING_SUPPLIES_SAS_URL="" node dist/composeModel.js -``` - -## Next Steps - -Take a look at our [API Documentation][apiref] for more information about the APIs that are available in the clients. - -[composemodel]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/composeModel.ts -[analyzedocumentbymodelid]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeDocumentByModelId.ts -[analyzeidentitydocument]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeIdentityDocument.ts -[analyzeinvoice]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeInvoice.ts -[analyzereceipt]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeReceipt.ts -[analyzereceiptbymodelid]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeReceiptByModelId.ts -[analyzew2taxform]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeW2TaxForm.ts -[buildclassifier]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/buildClassifier.ts -[buildmodel]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/buildModel.ts -[classifydocument]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/classifyDocument.ts -[copymodel]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/copyModel.ts -[extractlayout]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/extractLayout.ts -[getclassifier]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getClassifier.ts -[getinfo]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getInfo.ts -[getmodel]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getModel.ts -[listmodels]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/listModels.ts -[readdocument]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/readDocument.ts -[apiref]: https://docs.microsoft.com/javascript/api/@azure-rest/ai-document-intelligence -[freesub]: https://azure.microsoft.com/free/ -[package]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest/README.md -[typescript]: https://www.typescriptlang.org/docs/home.html diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/package.json b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/package.json deleted file mode 100644 index 67c2ae765085..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@azure-samples/ai-document-intelligence-ts-beta", - "private": true, - "version": "1.0.0", - "description": "Azure Document Intelligence Rest Client client library samples for TypeScript (Beta)", - "engines": { - "node": ">=18.0.0" - }, - "scripts": { - "build": "tsc", - "prebuild": "rimraf dist/" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Azure/azure-sdk-for-js.git", - "directory": "sdk/documentintelligence/ai-document-intelligence-rest" - }, - "keywords": [ - "node", - "azure", - "cloud", - "typescript", - "browser", - "isomorphic" - ], - "author": "Microsoft Corporation", - "license": "MIT", - "bugs": { - "url": "https://github.com/Azure/azure-sdk-for-js/issues" - }, - "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/documentintelligence/ai-document-intelligence-rest", - "dependencies": { - "@azure-rest/ai-document-intelligence": "next", - "dotenv": "latest" - }, - "devDependencies": { - "@types/node": "^18.0.0", - "typescript": "~5.6.2", - "rimraf": "latest" - } -} diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/sample.env b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/sample.env deleted file mode 100644 index 4edbb15d213c..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/sample.env +++ /dev/null @@ -1,8 +0,0 @@ -# Used in most samples. Retrieve these values from a Cognitive Services instance -# in the Azure Portal. -DOCUMENT_INTELLIGENCE_ENDPOINT="https://.cognitiveservies.azure.com/" -DOCUMENT_INTELLIGENCE_API_KEY="" - -# Our tests assume that TEST_MODE is "playback" by default. You can -# change it to "record" to generate new recordings, or "live" to bypass the recorder entirely. -# TEST_MODE=playback diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeDocumentByModelId.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeDocumentByModelId.ts deleted file mode 100644 index ac70505c598a..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeDocumentByModelId.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to analyze a document using a model with a given ID. The model ID may refer to any model, - * whether custom, prebuilt, composed, etc. - * - * @summary analyze a document using a model by ID - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - const modelId = process.env.DOCUMENT_INTELLIGENCE_CUSTOM_MODEL_ID || "";// "prebuilt-layout"; - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", modelId) - .post({ - contentType: "application/json", - body: { - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/receipt/contoso-receipt.png", - }, - queryParameters: { locale: "en-IN" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const document = documents && documents[0]; - if (!document) { - throw new Error("Expected at least one document in the result."); - } - - console.log( - "Extracted document:", - document.docType, - `(confidence: ${document.confidence || ""})` - ); - console.log("Fields:", document.fields); -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeIdentityDocument.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeIdentityDocument.ts deleted file mode 100644 index 02c576dd08aa..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeIdentityDocument.ts +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of an identity document (such as a driver license or passport) from a URL - * to a file using the prebuilt identity document model. - * - * The prebuilt identity document model can return several fields. For a detailed list of the fields supported by the - * identity document model, see the `IdentityDocument` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/iddocumentfieldschema - * - * @summary extract data from an identity document - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-idDocument") - .post({ - contentType: "application/json", - body: { - // The Document Intelligence service will access the following URL to a driver license image and extract data from it - urlSource: - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/identityDocument/license.png", - }, - queryParameters: { locale: "en-IN" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const document = documents && documents[0]; - - // Use of PrebuiltModels.Receipt above (rather than the raw model ID), adds strong typing of the model's output - if (document) { - // The identity document model has multiple document types, so we need to know which document type was actually - // extracted. - if (document.docType === "idDocument.driverLicense") { - // For the sake of the example, we'll only show a few of the fields that are produced. - console.log("Extracted a Driver License:"); - console.log(document.fields) - } else if (document.docType === "idDocument.passport") { - console.log("Extracted a Passport:"); - console.log(document.fields) - } else { - // The only reason this would happen is if the client library's schema for the prebuilt identity document model is - // out of date, and a new document type has been introduced. - console.error("Unknown document type in result:", document); - } - } else { - throw new Error("Expected at least one receipt in the result."); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeInvoice.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeInvoice.ts deleted file mode 100644 index 314b3777e4c3..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeInvoice.ts +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of an invoice from a URL to a file using the prebuilt invoice model. - * - * The prebuilt invoice model can return several fields. For a detailed list of the fields supported by the invoice - * model, see the `Invoice` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/invoicefieldschema - * - * @summary extract data from an invoice document - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-invoice") - .post({ - contentType: "application/json", - body: { - // The Document Intelligence service will access the following URL to an invoice image and extract data from it - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/invoice/sample_invoice.jpg", - } - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const document = documents && documents[0]; - if (!document) { - throw new Error("Expected at least one document in the result."); - } - - - // Use of PrebuiltModels.Receipt above (rather than the raw model ID), adds strong typing of the model's output - if (document) { - console.log(document.fields); - } else { - throw new Error("Expected at least one receipt in the result."); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeReceipt.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeReceipt.ts deleted file mode 100644 index 41cb9a422796..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeReceipt.ts +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of a receipt from a URL to a file using the prebuilt receipt model. - * - * The prebuilt receipt model can return several fields. For a detailed list of the fields supported by the receipt - * model, see the `Receipt` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/receiptfieldschema - * - * @summary extract data from a receipt document - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - // The Document Intelligence service will access the following URL to a receipt image and extract data from it - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/receipt/contoso-receipt.png", - } - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const document = documents && documents[0]; - - - - // Use of PrebuiltModels.Receipt above (rather than the raw model ID), as it adds strong typing of the model's output - if (document) { - console.log(document.fields); - } else { - throw new Error("Expected at least one receipt in the result."); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeReceiptByModelId.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeReceiptByModelId.ts deleted file mode 100644 index c8fc574766e9..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeReceiptByModelId.ts +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of a receipt from a URL to a file using the prebuilt receipt model. Rather - * than using the `PrebuiltModels.Receipt` document model, this sample shows the use of the prebuilt model by ID, - * resulting in a weaker type that exactly mirrors the model's field schema at runtime. - * - * The prebuilt receipt model can return several fields. For a detailed list of the fields supported by the - * receipt model, see the `Receipt` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/receiptfieldschema - * - * @summary use the "prebuilt-receipt" model ID to extract data from a receipt document (weakly-typed) - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - // The Document Intelligence service will access the following URL to a receipt image and extract data from it - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/receipt/contoso-receipt.png", - } - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - - poller.onProgress((state) => console.log("Operation:", state.result, state.status)); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - const result = documents && documents[0]; - if (result) { - console.log(result.fields); - } else { - throw new Error("Expected at least one receipt in the result."); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeW2TaxForm.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeW2TaxForm.ts deleted file mode 100644 index c2d1e7f65e47..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/analyzeW2TaxForm.ts +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract elements of a United States W2 tax form from a file using the prebuilt US W2 model. - * - * The prebuilt W2 model can return several fields. For a detailed list of the fields supported by the model, see the - * `TaxUsW2` type in the documentation, or refer to the following link: - * - * https://aka.ms/azsdk/documentitelligence/taxusw2fieldschema - * - * @summary extract data from a United States W2 tax document - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; -import fs from "fs"; -import path from "path"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const filePath = fs.readFileSync(path.join(".", "assets", "w2", "w2-single.png")); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-tax.us.w2") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - const document = documents?.[0]; - - if (document) { - console.log("Extracted W2 tax form:"); - console.log(document.fields); - } else { - throw new Error("Expected at least one document in the result."); - } -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/buildClassifier.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/buildClassifier.ts deleted file mode 100644 index 9358f1110f00..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/buildClassifier.ts +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to programmatically build a custom classifier. - * - * The Document Intelligence service expects the training data to be organized and labeled according to a particular - * convention and stored in an Azure Storage container. For more information about creating a training data set, please - * see the information at the following link to the service's documentation: - * - * https://aka.ms/azsdk/documentitelligence/buildclassifiermodel - * - * @summary build a classifier from a training data set - */ - -import DocumentIntelligence, { DocumentClassifierBuildOperationDetailsOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const random = Date.now().toString(); - const modelId = - (process.env.CUSTOM_CLASSIFIER_ID || "") + random.substring(random.length - 6); - - const trainingDataSasUrl1 = - process.env.CUSTOM_CLASSIFIER_TRAINING_DATA_SAS_URL_1 || ""; - - const trainingDataSasUrl2 = - process.env.CUSTOM_CLASSIFIER_TRAINING_DATA_SAS_URL_2 || ""; - - const initialResponse = await client.path("/documentClassifiers:build").post({ - body: { - classifierId: modelId, - description: "Custom classifier description", - docTypes: { - foo: { - azureBlobSource: { - containerUrl: trainingDataSasUrl1, - }, - }, - bar: { - azureBlobSource: { - containerUrl: trainingDataSasUrl2, - }, - }, - }, - } - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const classifier = ( - (await (poller).pollUntilDone()).body as DocumentClassifierBuildOperationDetailsOutput - ).result; - if (!classifier) { - throw new Error("Expected a DocumentClassifierDetailsOutput response."); - } - - - console.log("Classifier ID:", classifier.classifierId); - console.log("Description:", classifier.description); - console.log("Created:", classifier.createdDateTime); - - console.log("Document Types:"); - for (const [docType, details] of Object.entries(classifier.docTypes)) { - console.log(`- Name: "${docType}", source: ${JSON.stringify(details, null, 2)}`); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/buildModel.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/buildModel.ts deleted file mode 100644 index a50eaa0e4a3e..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/buildModel.ts +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to programmatically build a model with a single document type using a training data set. - * - * The Document Intelligence service expects the training data to be organized and labeled according to a particular - * convention and stored in an Azure Storage container. For more information about creating a training data set, please - * see the information at the following link to the service's documentation: - * - * https://aka.ms/azsdk/documentitelligence/buildtrainingset - * - * @summary build a model with a single document type from a training data set - */ - -import DocumentIntelligence, { DocumentModelBuildOperationDetailsOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - const random = Date.now().toString(); - const modelId = - (process.env.CUSTOM_MODEL_ID || "") + random.substring(random.length - 6); - const trainingDataSasUrl = - process.env.CUSTOM_MODEL_TRAINING_DATA_SAS_URL || ""; - - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId, - azureBlobSource: { - containerUrl: trainingDataSasUrl - }, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse); - const model = ( - (await (await poller).pollUntilDone()).body as DocumentModelBuildOperationDetailsOutput - ).result; - if (!model) { - throw new Error("Expected a DocumentModelDetailsOutput response."); - } - - console.log("Model ID:", model.modelId); - console.log("Description:", model.description); - console.log("Created:", model.createdDateTime); - - // A model may contain several document types, which describe the possible object structures of fields extracted using - // this model - - console.log("Document Types:"); - for (const [docType, { description, fieldSchema: schema }] of Object.entries( - model.docTypes || {} - )) { - console.log(`- Name: "${docType}"`); - console.log(` Description: "${description}"`); - - // For simplicity, this example will only show top-level field names - console.log(" Fields:"); - - for (const [fieldName, fieldSchema] of Object.entries(schema)) { - console.log(` - "${fieldName}" (${fieldSchema.type})`); - console.log(` ${fieldSchema.description || ""}`); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/classifyDocument.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/classifyDocument.ts deleted file mode 100644 index ad6ba315f0e3..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/classifyDocument.ts +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to use a custom classifier to get the document type (class) of a document. - * - * @summary use a custom classifier to classify a document - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - const documentUrl = - "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/invoice/Invoice_1.pdf"; - - const classifierId = process.env.CUSTOM_CLASSIFIER_ID ?? ""; - const initialResponse = await client - .path("/documentClassifiers/{classifierId}:analyze", classifierId) - .post({ - contentType: "application/json", - body: { - urlSource: documentUrl, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - if (analyzeResult?.documents === undefined || analyzeResult.documents.length === 0) { - throw new Error("Failed to extract any documents."); - } - - for (const document of analyzeResult.documents) { - console.log( - `Extracted a document with type '${document.docType}' on page ${document.boundingRegions?.[0].pageNumber} (confidence: ${document.confidence})` - ); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/composeModel.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/composeModel.ts deleted file mode 100644 index 5e1044f9cf49..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/composeModel.ts +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample demonstrates how to create a composed model from several individual labeled models. - * - * We build all of the component models used in the composition operation and then finally create the composed model. - * The resulting composed model will have all of the document types of its component submodels. When used for analysis, - * it will first classify the input as belonging to one of the document types.zzs - * - * @summary create a composed model from several individual labeled models - */ - -import DocumentIntelligence, { DocumentModelBuildOperationDetailsOutput, DocumentModelComposeOperationDetailsOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - // This object will hold the SAS-encoded URLs to containers that hold - // different types of purchase order documents and their labels. - const purchaseOrderSasUrls = { - supplies: - process.env["PURCHASE_ORDER_SUPPLIES_SAS_URL"] || - "", - equipment: - process.env["PURCHASE_ORDER_EQUIPMENT_SAS_URL"] || - "", - furniture: - process.env["PURCHASE_ORDER_FURNITURE_SAS_URL"] || - "", - cleaningSupplies: - process.env["PURCHASE_ORDER_CLEANING_SUPPLIES_SAS_URL"] || - "", - }; - - // We'll put the last few digits of the current timestamp into the model IDs, just to make sure they're unique. - const random = Date.now().toString(); - - const modelIds = await Promise.all( - Object.entries(purchaseOrderSasUrls) - .map(async ([kind, sasUrl]) => { - const modelId = kind + "ComponentModel" + random.substring(random.length - 6); - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId: modelId, - azureBlobSource: { - containerUrl: sasUrl, - }, - }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const model = ( - (await (poller).pollUntilDone()).body as DocumentModelBuildOperationDetailsOutput - ).result!; - - return model; - }) - .map(async (model) => { return { modelId: (await model).modelId } }) - ); - - // Finally, create the composed model. - - const composedModelId = "purchaseOrders" + random.substring(random.length - 6); - - const initialResponse = await client.path("/documentModels:compose").post({ - body: { - description: "A composed model that classifies purchase order documents and extracts data from them.", - componentModels: modelIds, - modelId: composedModelId, - - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - - const composedModel = ( - (await (poller).pollUntilDone()).body as DocumentModelComposeOperationDetailsOutput - ).result!; - - - console.log("Model ID:", composedModel.modelId); - console.log("Description:", composedModel.description); - console.log("Created:", composedModel.createdDateTime); - - // The composed model should have a document type for each one of the individually built models that are composed into - // this larger model. - - console.log("Document Types:"); - for (const [docType, { description, fieldSchema: schema }] of Object.entries( - composedModel.docTypes || {} - )) { - console.log(`- Name: "${docType}"`); - console.log(` Description: "${description}"`); - - // For simplicity, this example will only show top-level field names - console.log(" Fields:"); - - for (const [fieldName, fieldSchema] of Object.entries(schema)) { - console.log(` - "${fieldName}" (${fieldSchema.type})`); - console.log(` ${fieldSchema.description || ""}`); - } - } -} - -main().catch((err) => { - console.error("The sample encountered an error:", err); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/copyModel.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/copyModel.ts deleted file mode 100644 index 2da44e98c499..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/copyModel.ts +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to copy a model from one resource to another. The model is created with a new model ID (and - * optionally a new description) in the destination resource, but will have the same document types as the source model. - * - * @summary copy a model from one resource to another - */ - -import DocumentIntelligence, { DocumentModelCopyToOperationDetailsOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - - const random = Date.now().toString(); - const destinationModelId = - (process.env.CUSTOM_MODEL_ID || "") + random.substring(random.length - 6); - - // The authorization must be created by the destination resource. - // const destinationClient = new DocumentModelAdministrationClient(endpoint, credential); - const destinationClient = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - // const authorization = await destinationClient.getCopyAuthorization(destinationModelId); - const targetAuth = await destinationClient.path("/documentModels:authorizeCopy").post({ - body: { - modelId: destinationModelId, - }, - }); - if (isUnexpected(targetAuth)) { - throw targetAuth.body.error; - } - const sourceEndpoint = process.env.DOCUMENT_INTELLIGENCE_SOURCE_ENDPOINT || ""; - const sourceModelId = process.env.COPY_SOURCE_MODEL_ID || ""; - - // Then, the source resource can initiate the copy operation. - const sourceClient = DocumentIntelligence( - sourceEndpoint, - { key: process.env.DOCUMENT_INTELLIGENCE_SOURCE_API_KEY || "" }) - - const copyInitResponse = await sourceClient - .path("/documentModels/{modelId}:copyTo", sourceModelId) - .post({ - body: targetAuth.body, - }); - - if (isUnexpected(copyInitResponse)) { - throw copyInitResponse.body.error; - } - const copyPoller = getLongRunningPoller(sourceClient, copyInitResponse); - const model = ( - (await (await copyPoller).pollUntilDone()).body as DocumentModelCopyToOperationDetailsOutput - ).result!; - - console.log("Model ID:", model.modelId); - console.log("Description:", model.description); - console.log("Created:", model.createdDateTime); -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/extractLayout.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/extractLayout.ts deleted file mode 100644 index ea4cb0a9a5d5..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/extractLayout.ts +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract only the basic layout information from a document using the `beginExtractLayout` - * method. Layout information consists of the arrangement of basic OCR elements, such as pages (including their contents - * such as lines, words, and selection marks), tables, and text font styles. - * - * @summary use the prebuilt layout model to extract basic document elements only - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf", - } - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - const tables = analyzeResult?.tables; - - if (!pages || pages.length <= 0) { - console.log("No pages were extracted from the document."); - } else { - console.log("Pages:"); - for (const page of pages) { - console.log("- Page", page.pageNumber, `(unit: ${page.unit})`); - console.log(` ${page.width}x${page.height}, angle: ${page.angle}`); - console.log( - ` ${page.lines && page.lines.length} lines, ${page.words && page.words.length} words` - ); - - if (page.lines && page.lines.length > 0) { - console.log(" Lines:"); - - for (const line of page.lines) { - console.log(` - "${line.content}"`); - } - } - } - } - - if (!tables || tables.length <= 0) { - console.log("No tables were extracted from the document."); - } else { - console.log("Tables:"); - for (const table of tables) { - console.log( - `- Extracted table: ${table.columnCount} columns, ${table.rowCount} rows (${table.cells.length} cells)` - ); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getClassifier.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getClassifier.ts deleted file mode 100644 index 1a6352dba334..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getClassifier.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to get the details of a custom classifier by its ID, including information about the document - * types that the classifier supports. - * - * @summary get information about a classifier by its ID - */ - -import DocumentIntelligence, { isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const classifierId = process.env.CUSTOM_CLASSIFIER_ID ?? ""; - const classifier = await client.path("/documentClassifiers/{classifierId}", classifierId).get(); - - if (isUnexpected(classifier)) { - throw classifier.body.error; - } - console.log("ID", classifier.body.classifierId); - console.log("Created:", classifier.body.createdDateTime); - console.log("Description: ", classifier.body.description || ""); - - console.log("Document Types:"); - for (const [docType, details] of Object.entries(classifier.body.docTypes || {})) { - // We can also programmatically access a schema of the fields. - console.log(`- Name "${docType}", source: ${JSON.stringify(details, null, 2)}`); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getInfo.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getInfo.ts deleted file mode 100644 index b5644db43610..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getInfo.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to programmatically retrieve metadata about the number of custom models in the Form Recognizer - * resource and the limit of custom models that the resource will allow to be created. - * - * @summary get information about the count and limit of custom models in the resource - */ - -import DocumentIntelligence, { isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - const info = await client.path("/info").get(); - if (isUnexpected(info)) { - throw info.body.error; - } - console.log( - `Custom document models: ${info.body.customDocumentModels.count} of ${info.body.customDocumentModels.limit}` - ); -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getModel.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getModel.ts deleted file mode 100644 index 1ca43511e8c0..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/getModel.ts +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to get the full information about a custom model by its model ID, including information about - * the document types in the model and their field schemas. - * - * @summary get information about a model by its ID - */ - -import DocumentIntelligence, { isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - // The model ID to query. This can be any model ID, not just a custom model, so for example - // the following sample uses `"prebuilt-idDocument"`, but you can change it to any model ID - // you'd like to inspect. - const modelId = "prebuilt-idDocument"; - const model = await client.path("/documentModels/{modelId}", modelId).get(); - - if (isUnexpected(model)) { - throw model.body.error; - } - - console.log("ID", model.body.modelId); - console.log("Created:", model.body.createdDateTime); - console.log("Description: ", model.body.description || ""); - - console.log("Document Types:"); - for (const [docType, { fieldSchema }] of Object.entries(model.body.docTypes || {})) { - // We can also programmatically access a schema of the fields. - console.log("-", docType, JSON.stringify(fieldSchema, undefined, 2)); - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/listModels.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/listModels.ts deleted file mode 100644 index eb081a1ce61a..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/listModels.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to iterate over the models in a resource. This will include both custom and prebuilt models. - * - * @summary iterate over the models in a resource - */ - -import DocumentIntelligence, { isUnexpected, paginate } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - - const response = await client.path("/documentModels").get(); - if (isUnexpected(response)) { - throw response.body.error; - } - - for await (const model of paginate(client, response)) { - console.log("- ID", model.modelId); - console.log(" Created:", model.createdDateTime); - console.log(" Description: ", model.description || ""); - - // The model summary does not include `docTypes`, so we must additionally call `getModel` to retrieve them - const detailedModel = (await client.path("/documentModels/{modelId}", model.modelId).get()); - - if (isUnexpected(detailedModel)) { - throw detailedModel.body.error; - } - const docTypes = detailedModel.body.docTypes; - - console.log(" Document Types:"); - for (const docType of Object.keys(docTypes || {})) { - console.log(" -", docType); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/readDocument.ts b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/readDocument.ts deleted file mode 100644 index 440c4e16040c..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/src/readDocument.ts +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -/** - * This sample shows how to extract the text content of a document using the "prebuilt-read" model. - * - * @summary use the prebuilt "read" model to extract information about the text content of a document - */ - -import DocumentIntelligence, { AnalyzeResultOperationOutput, getLongRunningPoller, isUnexpected } from "@azure-rest/ai-document-intelligence"; - -import * as dotenv from "dotenv"; -dotenv.config(); - -async function main() { - const client = DocumentIntelligence( - process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"] || "", - { key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"] || "" }) - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-read") - .post({ - contentType: "application/json", - body: { - urlSource: "https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf", - }, - queryParameters: { features: ["barcodes"] }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = await getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - - // The "prebuilt-read" model (`beginReadDocument` method) only extracts information about the textual content of the - // document, such as page text elements and information about the language of the text. - const pages = analyzeResult?.pages; - const languages = analyzeResult?.languages; - const styles = analyzeResult?.styles; - - - if (!pages || pages.length <= 0) { - console.log("No pages were extracted from the document."); - } else { - console.log("Pages:"); - for (const page of pages) { - console.log("- Page", page.pageNumber, `(unit: ${page.unit})`); - console.log(` ${page.width}x${page.height}, angle: ${page.angle}`); - console.log( - ` ${page.lines && page.lines.length} lines, ${page.words && page.words.length} words` - ); - - if (page.lines && page.lines.length > 0) { - console.log(" Lines:"); - - for (const line of page.lines) { - console.log(` - "${line.content}"`); - } - } - } - } - - if (!languages || languages.length <= 0) { - console.log("No language spans were extracted from the document."); - } else { - console.log("Languages:"); - for (const languageEntry of languages) { - console.log( - `- Found language: ${languageEntry.locale} (confidence: ${languageEntry.confidence})` - ); - } - } - - if (!styles || styles.length <= 0) { - console.log("No text styles were extracted from the document."); - } else { - console.log("Styles:"); - for (const style of styles) { - console.log( - `- Handwritten: ${style.isHandwritten ? "yes" : "no"} (confidence=${style.confidence})` - ); - } - } -} - -main().catch((error) => { - console.error("An error occurred:", error); - process.exit(1); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/tsconfig.json b/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/tsconfig.json deleted file mode 100644 index 984eed535aa8..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/samples/v1-beta/typescript/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "moduleResolution": "node", - "resolveJsonModule": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "alwaysStrict": true, - "outDir": "dist", - "rootDir": "src" - }, - "include": [ - "src/**/*.ts" - ] -} diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/src/clientDefinitions.ts b/sdk/documentintelligence/ai-document-intelligence-rest/src/clientDefinitions.ts index 063816f42e4f..f49d6cf1ac1f 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/src/clientDefinitions.ts +++ b/sdk/documentintelligence/ai-document-intelligence-rest/src/clientDefinitions.ts @@ -104,7 +104,9 @@ export interface ListOperations { /** Lists all operations. */ get( options?: ListOperationsParameters, - ): StreamableMethod; + ): StreamableMethod< + ListOperations200Response | ListOperationsDefaultResponse + >; } export interface GetDocumentModelBuildOperation { @@ -112,19 +114,22 @@ export interface GetDocumentModelBuildOperation { get( options?: GetDocumentModelBuildOperationParameters, ): StreamableMethod< - GetDocumentModelBuildOperation200Response | GetDocumentModelBuildOperationDefaultResponse + | GetDocumentModelBuildOperation200Response + | GetDocumentModelBuildOperationDefaultResponse >; /** Gets operation info. */ get( options?: GetDocumentModelComposeOperationParameters, ): StreamableMethod< - GetDocumentModelComposeOperation200Response | GetDocumentModelComposeOperationDefaultResponse + | GetDocumentModelComposeOperation200Response + | GetDocumentModelComposeOperationDefaultResponse >; /** Gets operation info. */ get( options?: GetDocumentModelCopyToOperationParameters, ): StreamableMethod< - GetDocumentModelCopyToOperation200Response | GetDocumentModelCopyToOperationDefaultResponse + | GetDocumentModelCopyToOperation200Response + | GetDocumentModelCopyToOperationDefaultResponse >; /** Gets operation info. */ get( @@ -150,28 +155,36 @@ export interface GetResourceInfo { /** Return information about the current resource. */ get( options?: GetResourceInfoParameters, - ): StreamableMethod; + ): StreamableMethod< + GetResourceInfo200Response | GetResourceInfoDefaultResponse + >; } export interface GetAnalyzeResult { /** Gets the result of document analysis. */ get( options?: GetAnalyzeResultParameters, - ): StreamableMethod; + ): StreamableMethod< + GetAnalyzeResult200Response | GetAnalyzeResultDefaultResponse + >; } export interface GetAnalyzeResultPdf { /** Gets the generated searchable PDF output from document analysis. */ get( options?: GetAnalyzeResultPdfParameters, - ): StreamableMethod; + ): StreamableMethod< + GetAnalyzeResultPdf200Response | GetAnalyzeResultPdfDefaultResponse + >; } export interface GetAnalyzeResultFigure { /** Gets the generated cropped image of specified figure from document analysis. */ get( options?: GetAnalyzeResultFigureParameters, - ): StreamableMethod; + ): StreamableMethod< + GetAnalyzeResultFigure200Response | GetAnalyzeResultFigureDefaultResponse + >; } export interface AnalyzeDocumentFromStream { @@ -179,26 +192,33 @@ export interface AnalyzeDocumentFromStream { post( options: AnalyzeDocumentFromStreamParameters, ): StreamableMethod< - AnalyzeDocumentFromStream202Response | AnalyzeDocumentFromStreamDefaultResponse + | AnalyzeDocumentFromStream202Response + | AnalyzeDocumentFromStreamDefaultResponse >; /** Analyzes document with document model. */ post( options: AnalyzeDocumentParameters, - ): StreamableMethod; + ): StreamableMethod< + AnalyzeDocument202Response | AnalyzeDocumentDefaultResponse + >; } export interface GetAnalyzeBatchResult { /** Gets the result of batch document analysis. */ get( options?: GetAnalyzeBatchResultParameters, - ): StreamableMethod; + ): StreamableMethod< + GetAnalyzeBatchResult200Response | GetAnalyzeBatchResultDefaultResponse + >; } export interface AnalyzeBatchDocuments { /** Analyzes batch documents with document model. */ post( options: AnalyzeBatchDocumentsParameters, - ): StreamableMethod; + ): StreamableMethod< + AnalyzeBatchDocuments202Response | AnalyzeBatchDocumentsDefaultResponse + >; } export interface GetModel { @@ -233,7 +253,9 @@ export interface AuthorizeModelCopy { */ post( options: AuthorizeModelCopyParameters, - ): StreamableMethod; + ): StreamableMethod< + AuthorizeModelCopy200Response | AuthorizeModelCopyDefaultResponse + >; } export interface CopyModelTo { @@ -254,14 +276,18 @@ export interface BuildClassifier { /** Builds a custom document classifier. */ post( options: BuildClassifierParameters, - ): StreamableMethod; + ): StreamableMethod< + BuildClassifier202Response | BuildClassifierDefaultResponse + >; } export interface ListClassifiers { /** List all document classifiers. */ get( options?: ListClassifiersParameters, - ): StreamableMethod; + ): StreamableMethod< + ListClassifiers200Response | ListClassifiersDefaultResponse + >; } export interface GetClassifier { @@ -272,7 +298,9 @@ export interface GetClassifier { /** Deletes document classifier. */ delete( options?: DeleteClassifierParameters, - ): StreamableMethod; + ): StreamableMethod< + DeleteClassifier204Response | DeleteClassifierDefaultResponse + >; } export interface ClassifyDocumentFromStream { @@ -280,19 +308,24 @@ export interface ClassifyDocumentFromStream { post( options: ClassifyDocumentFromStreamParameters, ): StreamableMethod< - ClassifyDocumentFromStream202Response | ClassifyDocumentFromStreamDefaultResponse + | ClassifyDocumentFromStream202Response + | ClassifyDocumentFromStreamDefaultResponse >; /** Classifies document with document classifier. */ post( options: ClassifyDocumentParameters, - ): StreamableMethod; + ): StreamableMethod< + ClassifyDocument202Response | ClassifyDocumentDefaultResponse + >; } export interface GetClassifyResult { /** Gets the result of document classifier. */ get( options?: GetClassifyResultParameters, - ): StreamableMethod; + ): StreamableMethod< + GetClassifyResult200Response | GetClassifyResultDefaultResponse + >; } export interface AuthorizeClassifierCopy { @@ -302,21 +335,28 @@ export interface AuthorizeClassifierCopy { */ post( options: AuthorizeClassifierCopyParameters, - ): StreamableMethod; + ): StreamableMethod< + AuthorizeClassifierCopy200Response | AuthorizeClassifierCopyDefaultResponse + >; } export interface CopyClassifierTo { /** Copies document classifier to the target resource, region, and classifierId. */ post( options: CopyClassifierToParameters, - ): StreamableMethod; + ): StreamableMethod< + CopyClassifierTo202Response | CopyClassifierToDefaultResponse + >; } export interface Routes { /** Resource for '/operations' has methods for the following verbs: get */ (path: "/operations"): ListOperations; /** Resource for '/operations/\{operationId\}' has methods for the following verbs: get */ - (path: "/operations/{operationId}", operationId: string): GetDocumentModelBuildOperation; + ( + path: "/operations/{operationId}", + operationId: string, + ): GetDocumentModelBuildOperation; /** Resource for '/info' has methods for the following verbs: get */ (path: "/info"): GetResourceInfo; /** Resource for '/documentModels/\{modelId\}/analyzeResults/\{resultId\}' has methods for the following verbs: get */ @@ -339,7 +379,10 @@ export interface Routes { figureId: string, ): GetAnalyzeResultFigure; /** Resource for '/documentModels/\{modelId\}:analyze' has methods for the following verbs: post */ - (path: "/documentModels/{modelId}:analyze", modelId: string): AnalyzeDocumentFromStream; + ( + path: "/documentModels/{modelId}:analyze", + modelId: string, + ): AnalyzeDocumentFromStream; /** Resource for '/documentModels/\{modelId\}/analyzeBatchResults/\{resultId\}' has methods for the following verbs: get */ ( path: "/documentModels/{modelId}/analyzeBatchResults/{resultId}", @@ -347,7 +390,10 @@ export interface Routes { resultId: string, ): GetAnalyzeBatchResult; /** Resource for '/documentModels/\{modelId\}:analyzeBatch' has methods for the following verbs: post */ - (path: "/documentModels/{modelId}:analyzeBatch", modelId: string): AnalyzeBatchDocuments; + ( + path: "/documentModels/{modelId}:analyzeBatch", + modelId: string, + ): AnalyzeBatchDocuments; /** Resource for '/documentModels/\{modelId\}' has methods for the following verbs: get, delete */ (path: "/documentModels/{modelId}", modelId: string): GetModel; /** Resource for '/documentModels:build' has methods for the following verbs: post */ @@ -365,7 +411,10 @@ export interface Routes { /** Resource for '/documentClassifiers' has methods for the following verbs: get */ (path: "/documentClassifiers"): ListClassifiers; /** Resource for '/documentClassifiers/\{classifierId\}' has methods for the following verbs: get, delete */ - (path: "/documentClassifiers/{classifierId}", classifierId: string): GetClassifier; + ( + path: "/documentClassifiers/{classifierId}", + classifierId: string, + ): GetClassifier; /** Resource for '/documentClassifiers/\{classifierId\}:analyze' has methods for the following verbs: post */ ( path: "/documentClassifiers/{classifierId}:analyze", @@ -380,7 +429,10 @@ export interface Routes { /** Resource for '/documentClassifiers:authorizeCopy' has methods for the following verbs: post */ (path: "/documentClassifiers:authorizeCopy"): AuthorizeClassifierCopy; /** Resource for '/documentClassifiers/\{classifierId\}:copyTo' has methods for the following verbs: post */ - (path: "/documentClassifiers/{classifierId}:copyTo", classifierId: string): CopyClassifierTo; + ( + path: "/documentClassifiers/{classifierId}:copyTo", + classifierId: string, + ): CopyClassifierTo; } export type DocumentIntelligenceClient = Client & { diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/src/documentIntelligence.ts b/sdk/documentintelligence/ai-document-intelligence-rest/src/documentIntelligence.ts index 2ec732f8d18c..c7a250170fc6 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/src/documentIntelligence.ts +++ b/sdk/documentintelligence/ai-document-intelligence-rest/src/documentIntelligence.ts @@ -21,10 +21,15 @@ export interface DocumentIntelligenceClientOptions extends ClientOptions { export default function createClient( endpointParam: string, credentials: TokenCredential | KeyCredential, - { apiVersion = "2024-07-31-preview", ...options }: DocumentIntelligenceClientOptions = {}, + { + apiVersion = "2024-07-31-preview", + ...options + }: DocumentIntelligenceClientOptions = {}, ): DocumentIntelligenceClient { const endpointUrl = - options.endpoint ?? options.baseUrl ?? `${endpointParam}/documentintelligence`; + options.endpoint ?? + options.baseUrl ?? + `${endpointParam}/documentintelligence`; const userAgentInfo = `azsdk-js-ai-document-intelligence-rest/1.0.0-beta.1`; const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix @@ -39,11 +44,18 @@ export default function createClient( logger: options.loggingOptions?.logger ?? logger.info, }, credentials: { - scopes: options.credentials?.scopes ?? ["https://cognitiveservices.azure.com/.default"], - apiKeyHeaderName: options.credentials?.apiKeyHeaderName ?? "Ocp-Apim-Subscription-Key", + scopes: options.credentials?.scopes ?? [ + "https://cognitiveservices.azure.com/.default", + ], + apiKeyHeaderName: + options.credentials?.apiKeyHeaderName ?? "Ocp-Apim-Subscription-Key", }, }; - const client = getClient(endpointUrl, credentials, options) as DocumentIntelligenceClient; + const client = getClient( + endpointUrl, + credentials, + options, + ) as DocumentIntelligenceClient; client.pipeline.removePolicy({ name: "ApiVersionPolicy" }); client.pipeline.addPolicy({ diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/src/isUnexpected.ts b/sdk/documentintelligence/ai-document-intelligence-rest/src/isUnexpected.ts index c9c7a5e84046..37e14683cad9 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/src/isUnexpected.ts +++ b/sdk/documentintelligence/ai-document-intelligence-rest/src/isUnexpected.ts @@ -82,7 +82,8 @@ const responseMap: Record = { "GET /info": ["200"], "GET /documentModels/{modelId}/analyzeResults/{resultId}": ["200"], "GET /documentModels/{modelId}/analyzeResults/{resultId}/pdf": ["200"], - "GET /documentModels/{modelId}/analyzeResults/{resultId}/figures/{figureId}": ["200"], + "GET /documentModels/{modelId}/analyzeResults/{resultId}/figures/{figureId}": + ["200"], "GET /documentModels/{modelId}:analyze": ["200", "202"], "POST /documentModels/{modelId}:analyze": ["202"], "GET /documentModels/{modelId}/analyzeBatchResults/{resultId}": ["200"], @@ -152,7 +153,9 @@ export function isUnexpected( response: GetAnalyzeResultPdf200Response | GetAnalyzeResultPdfDefaultResponse, ): response is GetAnalyzeResultPdfDefaultResponse; export function isUnexpected( - response: GetAnalyzeResultFigure200Response | GetAnalyzeResultFigureDefaultResponse, + response: + | GetAnalyzeResultFigure200Response + | GetAnalyzeResultFigureDefaultResponse, ): response is GetAnalyzeResultFigureDefaultResponse; export function isUnexpected( response: @@ -167,7 +170,9 @@ export function isUnexpected( | AnalyzeDocumentDefaultResponse, ): response is AnalyzeDocumentDefaultResponse; export function isUnexpected( - response: GetAnalyzeBatchResult200Response | GetAnalyzeBatchResultDefaultResponse, + response: + | GetAnalyzeBatchResult200Response + | GetAnalyzeBatchResultDefaultResponse, ): response is GetAnalyzeBatchResultDefaultResponse; export function isUnexpected( response: @@ -182,16 +187,25 @@ export function isUnexpected( response: DeleteModel204Response | DeleteModelDefaultResponse, ): response is DeleteModelDefaultResponse; export function isUnexpected( - response: BuildModel202Response | BuildModelLogicalResponse | BuildModelDefaultResponse, + response: + | BuildModel202Response + | BuildModelLogicalResponse + | BuildModelDefaultResponse, ): response is BuildModelDefaultResponse; export function isUnexpected( - response: ComposeModel202Response | ComposeModelLogicalResponse | ComposeModelDefaultResponse, + response: + | ComposeModel202Response + | ComposeModelLogicalResponse + | ComposeModelDefaultResponse, ): response is ComposeModelDefaultResponse; export function isUnexpected( response: AuthorizeModelCopy200Response | AuthorizeModelCopyDefaultResponse, ): response is AuthorizeModelCopyDefaultResponse; export function isUnexpected( - response: CopyModelTo202Response | CopyModelToLogicalResponse | CopyModelToDefaultResponse, + response: + | CopyModelTo202Response + | CopyModelToLogicalResponse + | CopyModelToDefaultResponse, ): response is CopyModelToDefaultResponse; export function isUnexpected( response: ListModels200Response | ListModelsDefaultResponse, @@ -227,7 +241,9 @@ export function isUnexpected( response: GetClassifyResult200Response | GetClassifyResultDefaultResponse, ): response is GetClassifyResultDefaultResponse; export function isUnexpected( - response: AuthorizeClassifierCopy200Response | AuthorizeClassifierCopyDefaultResponse, + response: + | AuthorizeClassifierCopy200Response + | AuthorizeClassifierCopyDefaultResponse, ): response is AuthorizeClassifierCopyDefaultResponse; export function isUnexpected( response: @@ -373,17 +389,24 @@ function getParametrizedPathSuccess(method: string, path: string): string[] { // track if we have found a match to return the values found. let found = true; - for (let i = candidateParts.length - 1, j = pathParts.length - 1; i >= 1 && j >= 1; i--, j--) { - if (candidateParts[i]?.startsWith("{") && candidateParts[i]?.indexOf("}") !== -1) { + for ( + let i = candidateParts.length - 1, j = pathParts.length - 1; + i >= 1 && j >= 1; + i--, j-- + ) { + if ( + candidateParts[i]?.startsWith("{") && + candidateParts[i]?.indexOf("}") !== -1 + ) { const start = candidateParts[i]!.indexOf("}") + 1, end = candidateParts[i]?.length; // If the current part of the candidate is a "template" part // Try to use the suffix of pattern to match the path // {guid} ==> $ // {guid}:export ==> :export$ - const isMatched = new RegExp(`${candidateParts[i]?.slice(start, end)}`).test( - pathParts[j] || "", - ); + const isMatched = new RegExp( + `${candidateParts[i]?.slice(start, end)}`, + ).test(pathParts[j] || ""); if (!isMatched) { found = false; diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/src/outputModels.ts b/sdk/documentintelligence/ai-document-intelligence-rest/src/outputModels.ts index f0fa1aa5333d..60b3fa45107a 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/src/outputModels.ts +++ b/sdk/documentintelligence/ai-document-intelligence-rest/src/outputModels.ts @@ -55,7 +55,8 @@ export interface InnerErrorOutput { } /** Get Operation response object. */ -export interface DocumentModelBuildOperationDetailsOutput extends OperationDetailsOutputParent { +export interface DocumentModelBuildOperationDetailsOutput + extends OperationDetailsOutputParent { /** Operation result upon success. */ result?: DocumentModelDetailsOutput; /** Type of operation. */ @@ -179,7 +180,8 @@ export interface WarningOutput { } /** Get Operation response object. */ -export interface DocumentModelComposeOperationDetailsOutput extends OperationDetailsOutputParent { +export interface DocumentModelComposeOperationDetailsOutput + extends OperationDetailsOutputParent { /** Operation result upon success. */ result?: DocumentModelDetailsOutput; /** Type of operation. */ @@ -187,7 +189,8 @@ export interface DocumentModelComposeOperationDetailsOutput extends OperationDet } /** Get Operation response object. */ -export interface DocumentModelCopyToOperationDetailsOutput extends OperationDetailsOutputParent { +export interface DocumentModelCopyToOperationDetailsOutput + extends OperationDetailsOutputParent { /** Operation result upon success. */ result?: DocumentModelDetailsOutput; /** Type of operation. */ @@ -944,4 +947,5 @@ export type DocumentSignatureTypeOutput = string; /** Paged collection of DocumentModelDetails items */ export type PagedDocumentModelDetailsOutput = Paged; /** Paged collection of DocumentClassifierDetails items */ -export type PagedDocumentClassifierDetailsOutput = Paged; +export type PagedDocumentClassifierDetailsOutput = + Paged; diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/src/paginateHelper.ts b/sdk/documentintelligence/ai-document-intelligence-rest/src/paginateHelper.ts index e27846d32a90..94d5220235d9 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/src/paginateHelper.ts +++ b/sdk/documentintelligence/ai-document-intelligence-rest/src/paginateHelper.ts @@ -1,8 +1,16 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { getPagedAsyncIterator, PagedAsyncIterableIterator, PagedResult } from "@azure/core-paging"; -import { Client, createRestError, PathUncheckedResponse } from "@azure-rest/core-client"; +import { + getPagedAsyncIterator, + PagedAsyncIterableIterator, + PagedResult, +} from "@azure/core-paging"; +import { + Client, + createRestError, + PathUncheckedResponse, +} from "@azure-rest/core-client"; /** * Helper type to extract the type of an array @@ -67,7 +75,9 @@ export function paginate( typeof customGetPage === "function" ? customGetPage : async (pageLink: string) => { - const result = firstRun ? initialResponse : await client.pathUnchecked(pageLink).get(); + const result = firstRun + ? initialResponse + : await client.pathUnchecked(pageLink).get(); firstRun = false; checkPagingRequest(result); const nextLink = getNextLink(result.body, nextLinkName); @@ -93,7 +103,9 @@ function getNextLink(body: unknown, nextLinkName?: string): string | undefined { const nextLink = (body as Record)[nextLinkName]; if (typeof nextLink !== "string" && typeof nextLink !== "undefined") { - throw new Error(`Body Property ${nextLinkName} should be a string or undefined`); + throw new Error( + `Body Property ${nextLinkName} should be a string or undefined`, + ); } return nextLink; @@ -121,7 +133,18 @@ function getElements(body: unknown, itemName: string): T[] { * Checks if a request failed */ function checkPagingRequest(response: PathUncheckedResponse): void { - const Http2xxStatusCodes = ["200", "201", "202", "203", "204", "205", "206", "207", "208", "226"]; + const Http2xxStatusCodes = [ + "200", + "201", + "202", + "203", + "204", + "205", + "206", + "207", + "208", + "226", + ]; if (!Http2xxStatusCodes.includes(response.status)) { throw createRestError( `Pagination failed with unexpected statusCode ${response.status}`, diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/src/parameters.ts b/sdk/documentintelligence/ai-document-intelligence-rest/src/parameters.ts index b57b38addb54..3ab8786b4c36 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/src/parameters.ts +++ b/sdk/documentintelligence/ai-document-intelligence-rest/src/parameters.ts @@ -30,7 +30,8 @@ export interface ListOperationsHeaderParam { headers?: RawHttpHeadersInput & ListOperationsHeaders; } -export type ListOperationsParameters = ListOperationsHeaderParam & RequestParameters; +export type ListOperationsParameters = ListOperationsHeaderParam & + RequestParameters; export interface GetDocumentModelBuildOperationHeaders { /** An opaque, globally-unique, client-generated string identifier for the request. */ @@ -41,8 +42,8 @@ export interface GetDocumentModelBuildOperationHeaderParam { headers?: RawHttpHeadersInput & GetDocumentModelBuildOperationHeaders; } -export type GetDocumentModelBuildOperationParameters = GetDocumentModelBuildOperationHeaderParam & - RequestParameters; +export type GetDocumentModelBuildOperationParameters = + GetDocumentModelBuildOperationHeaderParam & RequestParameters; export interface GetDocumentModelComposeOperationHeaders { /** An opaque, globally-unique, client-generated string identifier for the request. */ @@ -65,8 +66,8 @@ export interface GetDocumentModelCopyToOperationHeaderParam { headers?: RawHttpHeadersInput & GetDocumentModelCopyToOperationHeaders; } -export type GetDocumentModelCopyToOperationParameters = GetDocumentModelCopyToOperationHeaderParam & - RequestParameters; +export type GetDocumentModelCopyToOperationParameters = + GetDocumentModelCopyToOperationHeaderParam & RequestParameters; export interface GetDocumentClassifierCopyToOperationHeaders { /** An opaque, globally-unique, client-generated string identifier for the request. */ @@ -101,7 +102,8 @@ export interface GetOperationHeaderParam { headers?: RawHttpHeadersInput & GetOperationHeaders; } -export type GetOperationParameters = GetOperationHeaderParam & RequestParameters; +export type GetOperationParameters = GetOperationHeaderParam & + RequestParameters; export type GetResourceInfoParameters = RequestParameters; export type GetAnalyzeResultParameters = RequestParameters; export type GetAnalyzeResultPdfParameters = RequestParameters; @@ -113,7 +115,11 @@ export interface AnalyzeDocumentFromStreamBodyParam { * * Value may contain any sequence of octets */ - body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream; + body: + | string + | Uint8Array + | ReadableStream + | NodeJS.ReadableStream; } export interface AnalyzeDocumentFromStreamQueryParamProperties { @@ -164,10 +170,11 @@ export interface AnalyzeDocumentFromStreamMediaTypesParam { | "application/vnd.openxmlformats-officedocument.presentationml.presentation"; } -export type AnalyzeDocumentFromStreamParameters = AnalyzeDocumentFromStreamQueryParam & - AnalyzeDocumentFromStreamMediaTypesParam & - AnalyzeDocumentFromStreamBodyParam & - RequestParameters; +export type AnalyzeDocumentFromStreamParameters = + AnalyzeDocumentFromStreamQueryParam & + AnalyzeDocumentFromStreamMediaTypesParam & + AnalyzeDocumentFromStreamBodyParam & + RequestParameters; export interface AnalyzeDocumentBodyParam { /** Analyze request parameters. */ @@ -294,7 +301,8 @@ export interface AuthorizeModelCopyBodyParam { body: AuthorizeCopyRequest; } -export type AuthorizeModelCopyParameters = AuthorizeModelCopyBodyParam & RequestParameters; +export type AuthorizeModelCopyParameters = AuthorizeModelCopyBodyParam & + RequestParameters; export interface CopyModelToBodyParam { /** Copy to request parameters. */ @@ -330,7 +338,8 @@ export interface BuildClassifierBodyParam { body: BuildDocumentClassifierRequest; } -export type BuildClassifierParameters = BuildClassifierBodyParam & RequestParameters; +export type BuildClassifierParameters = BuildClassifierBodyParam & + RequestParameters; export interface ListClassifiersHeaders { /** An opaque, globally-unique, client-generated string identifier for the request. */ @@ -341,7 +350,8 @@ export interface ListClassifiersHeaderParam { headers?: RawHttpHeadersInput & ListClassifiersHeaders; } -export type ListClassifiersParameters = ListClassifiersHeaderParam & RequestParameters; +export type ListClassifiersParameters = ListClassifiersHeaderParam & + RequestParameters; export interface GetClassifierHeaders { /** An opaque, globally-unique, client-generated string identifier for the request. */ @@ -352,7 +362,8 @@ export interface GetClassifierHeaderParam { headers?: RawHttpHeadersInput & GetClassifierHeaders; } -export type GetClassifierParameters = GetClassifierHeaderParam & RequestParameters; +export type GetClassifierParameters = GetClassifierHeaderParam & + RequestParameters; export interface DeleteClassifierHeaders { /** An opaque, globally-unique, client-generated string identifier for the request. */ @@ -363,7 +374,8 @@ export interface DeleteClassifierHeaderParam { headers?: RawHttpHeadersInput & DeleteClassifierHeaders; } -export type DeleteClassifierParameters = DeleteClassifierHeaderParam & RequestParameters; +export type DeleteClassifierParameters = DeleteClassifierHeaderParam & + RequestParameters; export interface ClassifyDocumentFromStreamBodyParam { /** @@ -371,7 +383,11 @@ export interface ClassifyDocumentFromStreamBodyParam { * * Value may contain any sequence of octets */ - body: string | Uint8Array | ReadableStream | NodeJS.ReadableStream; + body: + | string + | Uint8Array + | ReadableStream + | NodeJS.ReadableStream; } export interface ClassifyDocumentFromStreamQueryParamProperties { @@ -411,10 +427,11 @@ export interface ClassifyDocumentFromStreamMediaTypesParam { | "application/vnd.openxmlformats-officedocument.presentationml.presentation"; } -export type ClassifyDocumentFromStreamParameters = ClassifyDocumentFromStreamQueryParam & - ClassifyDocumentFromStreamMediaTypesParam & - ClassifyDocumentFromStreamBodyParam & - RequestParameters; +export type ClassifyDocumentFromStreamParameters = + ClassifyDocumentFromStreamQueryParam & + ClassifyDocumentFromStreamMediaTypesParam & + ClassifyDocumentFromStreamBodyParam & + RequestParameters; export interface ClassifyDocumentBodyParam { /** Classify request parameters. */ @@ -458,12 +475,13 @@ export interface AuthorizeClassifierCopyBodyParam { body: AuthorizeClassifierCopyRequest; } -export type AuthorizeClassifierCopyParameters = AuthorizeClassifierCopyBodyParam & - RequestParameters; +export type AuthorizeClassifierCopyParameters = + AuthorizeClassifierCopyBodyParam & RequestParameters; export interface CopyClassifierToBodyParam { /** Copy to request parameters. */ body: ClassifierCopyAuthorization; } -export type CopyClassifierToParameters = CopyClassifierToBodyParam & RequestParameters; +export type CopyClassifierToParameters = CopyClassifierToBodyParam & + RequestParameters; diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/src/pollingHelper.ts b/sdk/documentintelligence/ai-document-intelligence-rest/src/pollingHelper.ts index 9fa3aad7a3ae..7d9cb3edc706 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/src/pollingHelper.ts +++ b/sdk/documentintelligence/ai-document-intelligence-rest/src/pollingHelper.ts @@ -37,12 +37,14 @@ import { CopyClassifierToDefaultResponse, CopyClassifierToLogicalResponse, } from "./responses.js"; -import { AnalyzeBatchResultOperationOutput } from "./outputModels.js"; /** * A simple poller that can be used to poll a long running operation. */ -export interface SimplePollerLike, TResult> { +export interface SimplePollerLike< + TState extends OperationState, + TResult, +> { /** * Returns true if the poller has finished polling. */ @@ -51,10 +53,6 @@ export interface SimplePollerLike, TResul * Returns the state of the operation. */ getOperationState(): TState; - /** - * Returns the id of the operation. - */ - getOperationId(): string; /** * Returns the result value of the operation, * regardless of the state of the poller. @@ -70,7 +68,9 @@ export interface SimplePollerLike, TResul /** * Returns a promise that will resolve once the underlying operation is completed. */ - pollUntilDone(pollOptions?: { abortSignal?: AbortSignalLike }): Promise; + pollUntilDone(pollOptions?: { + abortSignal?: AbortSignalLike; + }): Promise; /** * Invokes the provided callback after each polling is completed, * sending the current state of the poller's operation. @@ -117,10 +117,14 @@ export interface SimplePollerLike, TResul * @returns - A poller object to poll for operation state updates and eventually get the final response. */ export async function getLongRunningPoller< - TResult extends AnalyzeBatchDocumentsLogicalResponse | AnalyzeBatchDocumentsDefaultResponse, + TResult extends + | AnalyzeBatchDocumentsLogicalResponse + | AnalyzeBatchDocumentsDefaultResponse, >( client: Client, - initialResponse: AnalyzeBatchDocuments202Response | AnalyzeBatchDocumentsDefaultResponse, + initialResponse: + | AnalyzeBatchDocuments202Response + | AnalyzeBatchDocumentsDefaultResponse, options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< @@ -145,17 +149,23 @@ export async function getLongRunningPoller< options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< - TResult extends BuildClassifierLogicalResponse | BuildClassifierDefaultResponse, + TResult extends + | BuildClassifierLogicalResponse + | BuildClassifierDefaultResponse, >( client: Client, initialResponse: BuildClassifier202Response | BuildClassifierDefaultResponse, options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< - TResult extends CopyClassifierToLogicalResponse | CopyClassifierToDefaultResponse, + TResult extends + | CopyClassifierToLogicalResponse + | CopyClassifierToDefaultResponse, >( client: Client, - initialResponse: CopyClassifierTo202Response | CopyClassifierToDefaultResponse, + initialResponse: + | CopyClassifierTo202Response + | CopyClassifierToDefaultResponse, options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< @@ -164,7 +174,9 @@ export async function getLongRunningPoller< | AnalyzeDocumentFromStreamDefaultResponse, >( client: Client, - initialResponse: AnalyzeDocumentFromStream202Response | AnalyzeDocumentFromStreamDefaultResponse, + initialResponse: + | AnalyzeDocumentFromStream202Response + | AnalyzeDocumentFromStreamDefaultResponse, options?: CreateHttpPollerOptions>, ): Promise, TResult>>; export async function getLongRunningPoller< @@ -191,7 +203,10 @@ export async function getLongRunningPoller( // response we were provided. return getLroResponse(initialResponse); }, - sendPollRequest: async (path: string, pollOptions?: { abortSignal?: AbortSignalLike }) => { + sendPollRequest: async ( + path: string, + pollOptions?: { abortSignal?: AbortSignalLike }, + ) => { // This is the callback that is going to be called to poll the service // to get the latest status. We use the client provided and the polling path // which is an opaque URL provided by caller, the service sends this in one of the following headers: operation-location, azure-asyncoperation or location @@ -217,23 +232,14 @@ export async function getLongRunningPoller( inputAbortSignal?.removeEventListener("abort", abortListener); } const lroResponse = getLroResponse(response as TResult); - lroResponse.rawResponse.headers["x-ms-original-url"] = initialResponse.request.url; + lroResponse.rawResponse.headers["x-ms-original-url"] = + initialResponse.request.url; return lroResponse; }, }; options.resolveOnUnsuccessful = options.resolveOnUnsuccessful ?? true; - - const httpPoller = createHttpPoller(poller, { - ...options, - updateState: (state, response) => { - const flatResponse = response.flatResponse; - if (!("body" in flatResponse)) return; - const flatResponseBody = flatResponse.body; - if (!("status" in flatResponseBody && flatResponseBody.status === "completed")) return; - state.status = "succeeded"; - }, - }); + const httpPoller = createHttpPoller(poller, options); const simplePoller: SimplePollerLike, TResult> = { isDone() { return httpPoller.isDone; @@ -270,26 +276,10 @@ export async function getLongRunningPoller( pollUntilDone: httpPoller.pollUntilDone, serialize: httpPoller.serialize, submitted: httpPoller.submitted, - getOperationId: () => parseOperationId(initialResponse.headers["operation-location"]), }; return simplePoller; } -/** - * Returns the operation-id from the operation-location header - */ -function parseOperationId(operationLocationHeader: string): string { - // regex to extract the operation id from the operation-location header with the regex "[^:]+://[^/]+/documentintelligence/.+/([^?/]+)" - const regex = /[^:]+:\/\/[^/]+\/documentintelligence\/.+\/([^?/]+)/; - const match = operationLocationHeader.match(regex); - if (!match) { - throw new Error( - `Failed to parse operation id from the operation-location header: ${operationLocationHeader}`, - ); - } - return match[1]; -} - /** * Converts a Rest Client response to a response that the LRO implementation understands * @param response - a rest client http response @@ -299,7 +289,9 @@ function getLroResponse( response: TResult, ): OperationResponse { if (Number.isNaN(response.status)) { - throw new TypeError(`Status code of the response is not a number. Value: ${response.status}`); + throw new TypeError( + `Status code of the response is not a number. Value: ${response.status}`, + ); } return { diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/src/responses.ts b/sdk/documentintelligence/ai-document-intelligence-rest/src/responses.ts index 12f251cdf383..df740974119e 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/src/responses.ts +++ b/sdk/documentintelligence/ai-document-intelligence-rest/src/responses.ts @@ -46,13 +46,15 @@ export interface GetDocumentModelBuildOperation200Headers { } /** The request has succeeded. */ -export interface GetDocumentModelBuildOperation200Response extends HttpResponse { +export interface GetDocumentModelBuildOperation200Response + extends HttpResponse { status: "200"; body: DocumentModelBuildOperationDetailsOutput; headers: RawHttpHeaders & GetDocumentModelBuildOperation200Headers; } -export interface GetDocumentModelBuildOperationDefaultResponse extends HttpResponse { +export interface GetDocumentModelBuildOperationDefaultResponse + extends HttpResponse { status: string; body: ErrorResponseOutput; } @@ -63,13 +65,15 @@ export interface GetDocumentModelComposeOperation200Headers { } /** The request has succeeded. */ -export interface GetDocumentModelComposeOperation200Response extends HttpResponse { +export interface GetDocumentModelComposeOperation200Response + extends HttpResponse { status: "200"; body: DocumentModelComposeOperationDetailsOutput; headers: RawHttpHeaders & GetDocumentModelComposeOperation200Headers; } -export interface GetDocumentModelComposeOperationDefaultResponse extends HttpResponse { +export interface GetDocumentModelComposeOperationDefaultResponse + extends HttpResponse { status: string; body: ErrorResponseOutput; } @@ -80,13 +84,15 @@ export interface GetDocumentModelCopyToOperation200Headers { } /** The request has succeeded. */ -export interface GetDocumentModelCopyToOperation200Response extends HttpResponse { +export interface GetDocumentModelCopyToOperation200Response + extends HttpResponse { status: "200"; body: DocumentModelCopyToOperationDetailsOutput; headers: RawHttpHeaders & GetDocumentModelCopyToOperation200Headers; } -export interface GetDocumentModelCopyToOperationDefaultResponse extends HttpResponse { +export interface GetDocumentModelCopyToOperationDefaultResponse + extends HttpResponse { status: string; body: ErrorResponseOutput; } @@ -97,13 +103,15 @@ export interface GetDocumentClassifierCopyToOperation200Headers { } /** The request has succeeded. */ -export interface GetDocumentClassifierCopyToOperation200Response extends HttpResponse { +export interface GetDocumentClassifierCopyToOperation200Response + extends HttpResponse { status: "200"; body: DocumentClassifierCopyToOperationDetailsOutput; headers: RawHttpHeaders & GetDocumentClassifierCopyToOperation200Headers; } -export interface GetDocumentClassifierCopyToOperationDefaultResponse extends HttpResponse { +export interface GetDocumentClassifierCopyToOperationDefaultResponse + extends HttpResponse { status: string; body: ErrorResponseOutput; } @@ -114,13 +122,15 @@ export interface GetDocumentClassifierBuildOperation200Headers { } /** The request has succeeded. */ -export interface GetDocumentClassifierBuildOperation200Response extends HttpResponse { +export interface GetDocumentClassifierBuildOperation200Response + extends HttpResponse { status: "200"; body: DocumentClassifierBuildOperationDetailsOutput; headers: RawHttpHeaders & GetDocumentClassifierBuildOperation200Headers; } -export interface GetDocumentClassifierBuildOperationDefaultResponse extends HttpResponse { +export interface GetDocumentClassifierBuildOperationDefaultResponse + extends HttpResponse { status: string; body: ErrorResponseOutput; } @@ -488,13 +498,15 @@ export interface ClassifyDocumentFromStream202Response extends HttpResponse { headers: RawHttpHeaders & ClassifyDocumentFromStream202Headers; } -export interface ClassifyDocumentFromStreamDefaultResponse extends HttpResponse { +export interface ClassifyDocumentFromStreamDefaultResponse + extends HttpResponse { status: string; body: ErrorResponseOutput; } /** The final response for long-running classifyDocumentFromStream operation */ -export interface ClassifyDocumentFromStreamLogicalResponse extends HttpResponse { +export interface ClassifyDocumentFromStreamLogicalResponse + extends HttpResponse { status: "200"; } diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/analysis.spec.ts b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/analysis.spec.ts deleted file mode 100644 index 3dabc0975119..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/analysis.spec.ts +++ /dev/null @@ -1,1081 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { Recorder, assertEnvironmentVariable } from "@azure-tools/test-recorder"; -import { createRecorder, testPollingOptions } from "./utils/recorderUtils.js"; -import DocumentIntelligence from "../../src/documentIntelligence.js"; -import { assert, describe, beforeEach, afterEach, it } from "vitest"; -import { - ASSET_PATH, - batchTrainingFilesContainerUrl, - batchTrainingFilesResultContainerUrl, - getRandomNumber, - makeTestUrl, -} from "./utils/utils.js"; -import path from "path"; -import fs from "fs"; -import { DocumentIntelligenceClient } from "../../src/clientDefinitions.js"; -import { - AnalyzeResultOperationOutput, - DocumentBarcodeOutput, - DocumentModelBuildOperationDetailsOutput, - DocumentModelDetailsOutput, - DocumentTableOutput, - getLongRunningPoller, - isUnexpected, -} from "../../src/index.js"; - -describe("DocumentIntelligenceClient", () => { - let recorder: Recorder; - let client: DocumentIntelligenceClient; - beforeEach(async function (context) { - recorder = await createRecorder(context); - await recorder.setMatcher("BodilessMatcher"); - client = DocumentIntelligence( - assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT"), - { key: assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_API_KEY") }, - recorder.configureClientOptions({}), - ); - }); - - afterEach(async function () { - await recorder.stop(); - }); - - describe("content analysis", () => { - it("pdf file stream", async () => { - const filePath = path.join(ASSET_PATH, "forms", "Invoice_1.pdf"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - queryParameters: { locale: "en-IN" }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - const tables = analyzeResult?.tables; - assert.ok(pages && pages.length > 0, `Expected non-empty pages but got ${pages}`); - assert.isNotEmpty(pages); - assert.isNotEmpty(tables); - - const [table] = tables!; - assert.ok(table.boundingRegions?.[0]); - assert.equal(table.boundingRegions?.[0].pageNumber, 1); - }); - - it("png file stream", async () => { - const filePath = path.join(ASSET_PATH, "receipt", "contoso-receipt.png"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - queryParameters: { locale: "en-IN" }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - const paragraphs = analyzeResult?.paragraphs; - - assert.ok( - paragraphs && paragraphs.length > 0, - `Expected non-empty paragraphs but got ${paragraphs}.`, - ); - - assert.ok(pages && pages.length > 0, `Expect no-empty pages but got ${pages}`); - }); - - it("jpeg file stream", async () => { - const filePath = path.join(ASSET_PATH, "forms", "Form_1.jpg"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - queryParameters: { locale: "en-IN" }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - const tables = analyzeResult?.tables; - assert.isNotEmpty(pages); - assert.isNotEmpty(tables); - const [table] = tables as DocumentTableOutput[]; - assert.ok(table.boundingRegions?.[0].polygon); - assert.equal(table.boundingRegions?.[0].pageNumber, 1); - }); - - it("tiff file stream", async () => { - const filePath = path.join(ASSET_PATH, "forms", "Invoice_1.tiff"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - const tables = analyzeResult?.tables; - assert.isNotEmpty(pages); - assert.isNotEmpty(tables); - const [table] = tables as DocumentTableOutput[]; - assert.ok(table.boundingRegions?.[0].polygon); - assert.equal(table.boundingRegions?.[0].pageNumber, 1); - }); - - it("pdf file stream without passing content type", async () => { - const filePath = path.join(ASSET_PATH, "forms", "Invoice_1.pdf"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - queryParameters: { locale: "en-IN" }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - const tables = analyzeResult?.tables; - assert.isNotEmpty(pages); - assert.isNotEmpty(tables); - const [table] = tables as DocumentTableOutput[]; - assert.ok(table.boundingRegions?.[0].polygon); - assert.equal(table.boundingRegions?.[0].pageNumber, 1); - }); - - it("url", async () => { - const url = makeTestUrl("/Invoice_1.pdf"); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { locale: "en-IN" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - const tables = analyzeResult?.tables; - - assert.isNotEmpty(pages); - - assert.isNotEmpty(tables); - const [table] = tables as DocumentTableOutput[]; - assert.ok(table.boundingRegions?.[0].polygon); - assert.equal(table.boundingRegions?.[0].pageNumber, 1); - }); - - it("with selection marks", async () => { - const filePath = path.join(ASSET_PATH, "forms", "selection_mark_form.pdf"); - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - queryParameters: { locale: "en-IN" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - const pages = analyzeResult?.pages; - assert.equal(pages?.[0].pageNumber, 1); - assert.isNotEmpty(pages?.[0].selectionMarks); - }); - - it("invalid locale throws", async () => { - const url = makeTestUrl("/Invoice_1.pdf"); - - try { - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { locale: "thisIsNotAValidLanguage" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput; - assert.fail("Expected an exception due to invalid locale."); - } catch (ex: any) { - assert.ok((ex as Error).message.includes("Invalid argument.")); - } - }); - - it("specifying pages", async () => { - const url = makeTestUrl("/Invoice_1.pdf"); - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { locale: "en-IN", pages: "1" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - await (await poller).pollUntilDone(); - }); - - it("invalid pages throws", async () => { - const url = makeTestUrl("/Invoice_1.pdf"); - - try { - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { locale: "en-IN", pages: "2" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - await (await poller).pollUntilDone(); - assert.fail("Expected an exception due to invalid pages."); - } catch (ex: any) { - // Just make sure we didn't get a bad error message - assert.isFalse((ex as Error).message.includes("")); - } - }); - - it("barcode", async function () { - const url = makeTestUrl("/barcode2.tif"); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-read") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { features: ["barcodes"] }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - - assert.isNotEmpty(pages); - - assert.isNotEmpty(pages?.[0].barcodes); - - const [barcode1, barcode2] = pages?.[0].barcodes as DocumentBarcodeOutput[]; - - assert.equal(barcode1.kind, "Code39"); - assert.equal(barcode1.value, "D589992-X"); - - assert.equal(barcode2.kind, "Code39"); - assert.equal(barcode2.value, "SYN121720213429"); - }); - - it("annotations", async function () { - const url = makeTestUrl("/annotations.jpg"); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { locale: "en-IN" }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - - assert.isNotEmpty(pages); - }); - - it("formula", async function () { - const url = makeTestUrl("/formula1.jpg"); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-read") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { features: ["formulas"] }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const pages = analyzeResult?.pages; - - assert.isNotEmpty(pages); - - assert.isNotEmpty(pages?.[0].formulas); - }); - }); - - describe("custom forms", () => { - let _model: DocumentModelDetailsOutput; - let modelName: string; - - // We only want to create the model once, but because of the recorder's - // precedence, we have to create it in a test, so one test will end up - // recording the entire creation and the other tests will still be able - // to use it. - async function requireModel(): Promise { - if (!_model) { - modelName = recorder.variable( - "customFormModelName", - `customFormModelName${getRandomNumber()}`, - ); - - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId: modelName, - azureBlobSource: { - containerUrl: assertEnvironmentVariable( - "DOCUMENT_INTELLIGENCE_SELECTION_MARK_STORAGE_CONTAINER_SAS_URL", - ), - }, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse); - const response = ( - (await (await poller).pollUntilDone()).body as DocumentModelBuildOperationDetailsOutput - ).result; - if (!response) { - throw new Error("Expected a DocumentModelDetailsOutput response."); - } - _model = response; - assert.ok(_model.modelId); - } - - return _model; - } - - it.skip("with selection marks", async () => { - const { modelId } = await requireModel(); - - const filePath = path.join(ASSET_PATH, "forms", "selection_mark_form.pdf"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client.path("/documentModels/{modelId}:analyze", modelId).post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - const pages = analyzeResult?.pages; - assert.ok(documents); - assert.equal(documents?.[0].docType, `${modelName}:${modelName}`); - assert.ok(pages?.[0]); - - /* There should be a table in the response, but it isn't recognized (maybe because it's too small or sparse) - assert.isNotEmpty(tables); - const [table] = tables!; - assert.ok(table.boundingRegions?.[0].boundingBox); - assert.equal(table.boundingRegions?.[0].pageNumber, 1);*/ - - assert.equal(pages?.[0].pageNumber, 1); - assert.isNotEmpty(pages?.[0].selectionMarks); - }); - - it("png file stream", async () => { - const filePath = path.join(ASSET_PATH, "forms", "Invoice_1.pdf"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-invoice") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - const documents = analyzeResult?.documents; - assert.isNotEmpty(documents); - - assert.equal(documents?.[0].docType, "invoice"); - }); - }); - - describe("receipts", () => { - it("png file stream", async () => { - const filePath = path.join(ASSET_PATH, "receipt", "contoso-receipt.png"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - const documents = analyzeResult?.documents; - assert.isNotEmpty(documents); - - assert.equal(documents?.[0].docType, "receipt.retailMeal"); - }); - - it("jpeg file stream", async () => { - const filePath = path.join(ASSET_PATH, "receipt", "contoso-allinone.jpg"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - const documents = analyzeResult?.documents; - assert.isNotEmpty(documents); - - assert.equal(documents?.[0].docType, "receipt.retailMeal"); - }); - - it("url", async () => { - const url = makeTestUrl("/contoso-allinone.jpg"); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - const documents = analyzeResult?.documents; - assert.isNotEmpty(documents); - - assert.equal(documents?.[0].docType, "receipt.retailMeal"); - }); - - it("specifying locale", async () => { - const url = makeTestUrl("/contoso-allinone.jpg"); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { locale: "en-IN" }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput; - }); - - it("invalid locale throws", async () => { - const url = makeTestUrl("/contoso-allinone.jpg"); - - try { - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-receipt") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { locale: "thisIsNotAValidLanguage" }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput; - assert.fail("Expected an exception due to invalid locale."); - } catch (ex: any) { - assert.ok((ex as Error).message.includes("Invalid argument.")); - } - }); - }); - - describe("invoices", () => { - it("pdf file stream", async () => { - const filePath = path.join(ASSET_PATH, "invoice", "Invoice_1.pdf"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-invoice") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - const documents = analyzeResult?.documents; - const pages = analyzeResult?.pages; - const tables = analyzeResult?.tables; - - assert.isNotEmpty(documents); - assert.isNotEmpty(pages); - assert.isNotEmpty(tables); - const [table] = tables!; - assert.ok(table.boundingRegions?.[0].polygon); - assert.equal(table.boundingRegions?.[0].pageNumber, 1); - }); - - it("url", async () => { - const url = makeTestUrl("/Invoice_1.pdf"); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-invoice") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - const documents = analyzeResult?.documents; - const pages = analyzeResult?.pages; - const tables = analyzeResult?.tables; - - assert.isNotEmpty(documents); - assert.isNotEmpty(pages); - assert.isNotEmpty(tables); - const [table] = tables!; - assert.ok(table.boundingRegions?.[0].polygon); - assert.equal(table.boundingRegions?.[0].pageNumber, 1); - }); - - it("invalid locale throws", async () => { - const url = makeTestUrl("/Invoice_1.pdf"); - - try { - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-invoice") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { locale: "thisIsNotAValidLanguage" }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput; - assert.fail("Expected an exception due to invalid locale."); - } catch (ex: any) { - assert.ok((ex as Error).message.includes("Invalid argument.")); - } - }); - }); - - describe("identityDocuments", () => { - it("png file stream", async () => { - const filePath = path.join(ASSET_PATH, "identityDocument", "license.png"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-idDocument") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - const receipt = documents?.[0]; - - assert.isNotEmpty(documents); - - assert.equal(receipt?.docType, "idDocument.driverLicense"); - }); - - it("url", async () => { - const url = makeTestUrl("/license.jpg"); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-idDocument") - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - const idDocument = documents?.[0]; - - assert.isNotEmpty(documents); - assert.equal(idDocument?.docType, "idDocument.driverLicense"); - }); - - it("invalid locale throws", async () => { - const url = makeTestUrl("/license.png"); - - try { - await client.path("/documentModels/{modelId}:analyze", "prebuilt-idDocument").post({ - contentType: "application/json", - body: { - urlSource: url, - }, - queryParameters: { - locale: "thisIsNotAValidLocaleString", - }, - }); - assert.fail("Expected an exception due to invalid locale."); - } catch (ex: any) { - // Just make sure we didn't get a bad error message - assert.isFalse((ex as Error).message.includes("")); - } - }); - }); - - describe("tax - US - w2", () => { - it("png file stream", async function () { - const filePath = path.join(ASSET_PATH, "w2", "w2-single.png"); - // - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-tax.us.w2") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - const w2Naive = documents?.[0]; - - assert.isNotEmpty(documents); - - assert.equal(w2Naive?.docType, "tax.us.w2"); - }); - }); - - describe("healthInsuranceCard - US", function () { - it("png file stream", async function () { - const filePath = path.join(ASSET_PATH, "healthInsuranceCard", "insurance.png"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-healthInsuranceCard.us") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - - assert.isNotEmpty(documents); - }); - }); - - describe("batch analysis", function () { - // We only want to create the model once, but because of the recorder's - // precedence, we have to create it in a test, so one test will end up - // recording the entire creation and the other tests will still be able - // to use it - let _model: DocumentModelDetailsOutput | undefined; - let modelId: string; - - async function requireModel(): Promise { - if (!_model) { - // Compute a unique name for the model - modelId = recorder.variable("batch-model", `modelName${getRandomNumber()}`); - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "generative", - modelId: modelId, - azureBlobSource: { - containerUrl: batchTrainingFilesContainerUrl(), - }, - }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const response = (await (await poller).pollUntilDone()).body as DocumentModelDetailsOutput; - if (!response) { - throw new Error("Expected a DocumentModelDetailsOutput response."); - } - _model = response; - - assert.equal(_model!.modelId, modelId); - } - - return _model!; - } - - it("batch training", async function () { - const model = await requireModel(); - const initialResponse = await client - .path("/documentModels/{modelId}:analyzeBatch", model.modelId) - .post({ - contentType: "application/json", - body: { - azureBlobSource: { - containerUrl: batchTrainingFilesContainerUrl(), - }, - resultContainerUrl: batchTrainingFilesResultContainerUrl(), - resultPrefix: "result", - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - // get the poller - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - // poll until the operation is done - await (await poller).pollUntilDone(); - }); - }); - - describe("get AnalyzeResult methods", function () { - it("getAnalyzeResult", async function () { - const filePath = path.join(ASSET_PATH, "layout-pageobject.pdf"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-read") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = await getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - - await poller.pollUntilDone(); - - const output = await client - .path( - "/documentModels/{modelId}/analyzeResults/{resultId}", - "prebuilt-read", - poller.getOperationId(), - ) - .get(); - }); - - it("getAnalyzeResult pdf", async function () { - const filePath = path.join(ASSET_PATH, "layout-pageobject.pdf"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-read") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - queryParameters: { output: ["pdf"] }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = await getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - - await poller.pollUntilDone(); - - const output = await client - .path( - "/documentModels/{modelId}/analyzeResults/{resultId}/pdf", - "prebuilt-read", - poller.getOperationId(), - ) - .get(); - - // A PDF's header is expected to be: %PDF- - assert.ok(output.body.toString().startsWith("%PDF-")); - }); - - it("getAnalyzeResult figures", async function () { - const filePath = path.join(ASSET_PATH, "layout-pageobject.pdf"); - - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", "prebuilt-layout") - .post({ - contentType: "application/json", - body: { - base64Source, - }, - queryParameters: { output: ["figures"] }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = await getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - - const result = (await poller.pollUntilDone()).body as AnalyzeResultOperationOutput; - const figures = result.analyzeResult?.figures; - assert.isArray(figures); - assert.isNotEmpty(figures?.[0]); - const figureId = figures?.[0].id; - assert.isDefined(figureId); - - const output = await client - .path( - "/documentModels/{modelId}/analyzeResults/{resultId}/figures/{figureId}", - "prebuilt-layout", - poller.getOperationId(), - figureId, - ) - .get(); - - // Header starts with a special character followed by "PNG" - assert.equal(output.body.toString().slice(1, 4), "PNG"); - }); - }); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/classifiers.spec.ts b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/classifiers.spec.ts deleted file mode 100644 index 01d35f9c3d42..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/classifiers.spec.ts +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { Recorder, assertEnvironmentVariable } from "@azure-tools/test-recorder"; -import { createRecorder, testPollingOptions } from "./utils/recorderUtils.js"; -import DocumentIntelligence from "../../src/documentIntelligence.js"; -import { assert, describe, beforeEach, afterEach, it, Context } from "vitest"; -import { ASSET_PATH, getRandomNumber, makeTestUrl } from "./utils/utils.js"; -import { DocumentIntelligenceClient } from "../../src/clientDefinitions.js"; -import { - AnalyzeResultOperationOutput, - DocumentClassifierBuildOperationDetailsOutput, - DocumentClassifierDetailsOutput, - getLongRunningPoller, - isUnexpected, -} from "../../src/index.js"; -import path from "path"; -import fs from "fs"; - -const containerSasUrl = (): string => - assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL"); - -describe.skip("classifiers", () => { - let recorder: Recorder; - let client: DocumentIntelligenceClient; - beforeEach(async function (context) { - recorder = await createRecorder(context); - await recorder.setMatcher("BodilessMatcher"); - client = DocumentIntelligence( - assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT"), - { key: assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_API_KEY") }, - recorder.configureClientOptions({}), - ); - }); - - afterEach(async function () { - await recorder.stop(); - }); - - let _classifier: DocumentClassifierDetailsOutput; - let _classifierId: string; - - const customClassifierDescription = "Custom classifier description"; - - // We only want to create the model once, but because of the recorder's - // precedence, we have to create it in a test, so one test will end up - // recording the entire creation and the other tests will still be able - // to use it. - async function requireClassifier(): Promise { - if (!_classifier) { - _classifierId = recorder.variable( - "customClassifierId", - `customClassifier${getRandomNumber()}`, - ); - - const initialResponse = await client.path("/documentClassifiers:build").post({ - body: { - classifierId: _classifierId, - description: "Custom classifier description", - docTypes: { - foo: { - azureBlobSource: { - containerUrl: containerSasUrl(), - }, - }, - bar: { - azureBlobSource: { - containerUrl: containerSasUrl(), - }, - }, - }, - }, - queryParameters: { customClassifierDescription }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse); - const response = ( - (await (await poller).pollUntilDone()).body as DocumentClassifierBuildOperationDetailsOutput - ).result; - if (!response) { - throw new Error("Expected a DocumentClassifierDetailsOutput response."); - } - _classifier = response; - - assert.ok(_classifier.classifierId); - } - - return _classifier; - } - - it("build classifier", async function (this: Context) { - const classifier = await requireClassifier(); - - assert.containsAllKeys(classifier.docTypes, ["foo", "bar"]); - assert.equal(classifier.classifierId, _classifierId); - assert.equal(classifier.description, customClassifierDescription); - }); - - it("analyze from PNG file stream", async function (this: Context) { - const filePath = path.join(ASSET_PATH, "forms", "Invoice_1.pdf"); - const { classifierId } = await requireClassifier(); - const base64Source = fs.readFileSync(filePath, { encoding: "base64" }); - - const initialResponse = await client - .path("/documentClassifiers/{classifierId}:analyze", classifierId) - .post({ - contentType: "application/json", - body: { - base64Source, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - assert.isNotEmpty(analyzeResult?.documents); - assert.oneOf(analyzeResult?.documents![0].docType, ["foo", "bar"]); - - // Additionally check that the pages aren't empty and that there are some common fields set - assert.isNotEmpty(analyzeResult?.pages); - assert.ok(analyzeResult?.pages![0].pageNumber); - assert.isDefined(analyzeResult?.pages![0].angle); - assert.ok(analyzeResult?.pages![0].height); - assert.ok(analyzeResult?.pages![0].width); - assert.ok(analyzeResult?.pages![0].unit); - }); - - it("analyze from PNG file URL", async function (this: Context) { - const url = makeTestUrl("/Invoice_1.pdf"); - const { classifierId } = await requireClassifier(); - - const initialResponse = await client - .path("/documentClassifiers/{classifierId}:analyze", classifierId) - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - assert.isNotEmpty(analyzeResult?.documents); - assert.oneOf(analyzeResult?.documents![0].docType, ["foo", "bar"]); - }); - - it("get & delete classifiers from the account", async function () { - await client.path("/documentClassifiers/{classifierId}", _classifierId).get(); - - // Delete the custom classifier we created - if (_classifierId) { - await client.path("/documentClassifiers/{classifierId}", _classifierId).delete(); - } - - // Try to get the classifier and assert that it's gone - try { - await client.path("/documentClassifiers/{classifierId}", _classifierId).get(); - assert.fail("Expected error while accessing a deleted classifier"); - } catch (error: any) { - assert.ok(error); - } - }); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/documentIntelligence.spec.ts b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/documentIntelligence.spec.ts deleted file mode 100644 index e0c6f85a5741..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/documentIntelligence.spec.ts +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { Recorder, assertEnvironmentVariable } from "@azure-tools/test-recorder"; -import { createTestCredential } from "@azure-tools/test-credential"; -import { createRecorder } from "./utils/recorderUtils.js"; -import DocumentIntelligence from "../../src/documentIntelligence.js"; -import { assert, describe, beforeEach, afterEach, it } from "vitest"; -import { getRandomNumber, containerSasUrl } from "./utils/utils.js"; -import { DocumentIntelligenceClient } from "../../src/clientDefinitions.js"; -import { - DocumentClassifierBuildOperationDetailsOutput, - getLongRunningPoller, - isUnexpected, -} from "../../src/index.js"; - -describe("DocumentIntelligenceClient", () => { - let recorder: Recorder; - let client: DocumentIntelligenceClient; - beforeEach(async function (context) { - recorder = await createRecorder(context); - await recorder.setMatcher("BodilessMatcher"); - client = DocumentIntelligence( - assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT"), - { key: assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_API_KEY") }, - recorder.configureClientOptions({}), - ); - }); - - afterEach(async function () { - await recorder.stop(); - }); - - it("API Key works - getInfo", async function () { - const response = await client.path("/info").get(); - if (isUnexpected(response)) { - throw response.body.error; - } - assert.strictEqual( - response.body.customDocumentModels.limit, - 20000, - "expected customDocumentModels limit should be 20000", - ); - }); - - it.skip("AAD works - getInfo", async function () { - client = DocumentIntelligence( - assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT"), - createTestCredential(), - recorder.configureClientOptions({}), - ); - const response = await client.path("/info").get(); - if (isUnexpected(response)) { - throw response.body.error; - } - assert.strictEqual( - response.body.customDocumentModels.limit, - 20000, - "expected customDocumentModels limit should be 20000", - ); - }); - - it.skip("documentClassifiers build", async function () { - const initialResponse = await client.path("/documentClassifiers:build").post({ - body: { - classifierId: recorder.variable( - "customClassifierId", - `customClassifier${getRandomNumber()}`, - ), - description: "Custom classifier description", - docTypes: { - foo: { - azureBlobSource: { - containerUrl: containerSasUrl(), - }, - }, - bar: { - // Adding source kind fails with 400 Invalid Argument - azureBlobSource: { - containerUrl: containerSasUrl(), - }, - }, - }, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse); - const response = ( - (await (await poller).pollUntilDone()).body - ); - assert.strictEqual( - response.result?.classifierId, - recorder.variable("customClassifierId"), - "expected classifierId to match", - ); - }); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/sampleTest.spec.ts b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/sampleTest.spec.ts new file mode 100644 index 000000000000..d4919ac91ac5 --- /dev/null +++ b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/sampleTest.spec.ts @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { createRecorder } from "./utils/recordedClient.js"; +import { assert, beforeEach, afterEach, it, describe } from "vitest"; + +describe("My test", () => { + // let recorder: Recorder; + + beforeEach(async function () { + // recorder = await createRecorder(this); + }); + + afterEach(async function () { + // await recorder.stop(); + }); + + it("sample test", async function () { + assert.equal(1, 1); + }); +}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/training.spec.ts b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/training.spec.ts deleted file mode 100644 index 1a31d84b74ce..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/training.spec.ts +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { - Recorder, - assertEnvironmentVariable, - testPollingOptions, -} from "@azure-tools/test-recorder"; -import { createRecorder } from "./utils/recorderUtils.js"; -import DocumentIntelligence from "../../src/documentIntelligence.js"; -import { assert, describe, beforeEach, afterEach, it, Context } from "vitest"; -import { getRandomNumber, containerSasUrl } from "./utils/utils.js"; -import { DocumentIntelligenceClient } from "../../src/clientDefinitions.js"; -import { - AnalyzeResultOperationOutput, - DocumentModelBuildOperationDetailsOutput, - DocumentModelComposeOperationDetailsOutput, - DocumentModelCopyToOperationDetailsOutput, - DocumentModelDetailsOutput, - DocumentTypeDetails, - getLongRunningPoller, - isUnexpected, - paginate, -} from "../../src/index.js"; - -describe("model management", () => { - let recorder: Recorder; - let client: DocumentIntelligenceClient; - beforeEach(async function (context) { - recorder = await createRecorder(context); - client = DocumentIntelligence( - assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT"), - { key: assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_API_KEY") }, - recorder.configureClientOptions({}), - ); - }); - - afterEach(async function () { - await recorder.stop(); - }); - - // #region Model Training - - /* - * All test steps that are related to training and validating - * models from source documents are encapsulated in this - * "describe" block - */ - - describe("model build", async function () { - const allModels: string[] = []; - - let id = 0; - function getId(): number { - return (id += 1); - } - - describe.skip(`custom model from trainingdata-v3`, async () => { - let _model: DocumentModelDetailsOutput; - - let modelId: string; - - // We only want to create the model once, but because of the recorder's - // precedence, we have to create it in a test, so one test will end up - // recording the entire creation and the other tests will still be able - // to use it - async function requireModel(): Promise { - if (!_model) { - // Compute a unique name for the model - modelId = recorder.variable(getId().toString(), `modelName${getRandomNumber()}`); - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId: modelId, - azureBlobSource: { - containerUrl: containerSasUrl(), - }, - }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse); - const response = ( - (await (await poller).pollUntilDone()).body as DocumentModelBuildOperationDetailsOutput - ).result; - if (!response) { - throw new Error("Expected a DocumentModelDetailsOutput response."); - } - _model = response; - - assert.equal(_model.modelId, modelId); - - allModels.push(_model.modelId); - } - - return _model; - } - - /* - * Make sure the model training API returns correct information - * for the model. - */ - it("validate model training response", async () => { - const model = await requireModel(); - - assert.ok(model, "Expecting valid response"); - assert.ok(model.modelId); - - assert.isNotEmpty(model.docTypes); - const submodel = model.docTypes![model.modelId]; - - // When training with labels, we will have expectations for the names - assert.ok( - submodel.fieldSchema!["Signature"], - "Expecting field with name 'Signature' to be valid", - ); - }); - - /* - * Use the model for some simple recognition - */ - describe("recognition", async () => { - it("form from url", async () => { - const model = await requireModel(); - const urlParts = containerSasUrl().split("?"); - const url = `${urlParts[0]}/Form_1.jpg?${urlParts[1]}`; - - const initialResponse = await client - .path("/documentModels/{modelId}:analyze", model.modelId) - .post({ - contentType: "application/json", - body: { - urlSource: url, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - - const poller = getLongRunningPoller(client, initialResponse, { - intervalInMs: testPollingOptions.updateIntervalInMs, - }); - const analyzeResult = ( - (await (await poller).pollUntilDone()).body as AnalyzeResultOperationOutput - ).analyzeResult; - - const documents = analyzeResult?.documents; - const tables = analyzeResult?.tables; - assert.isNotEmpty(documents); - const document = documents?.[0]; - - assert.isNotEmpty(document?.boundingRegions); - - assert.isNotEmpty(tables); - const [table] = tables!; - - assert.ok(table.boundingRegions?.[0].polygon); - assert.equal(table.boundingRegions?.[0].pageNumber, 1); - - assert.ok(document?.fields); - assert.ok(document?.fields?.["Merchant"]); - assert.ok(document?.fields?.["DatedAs"]); - assert.ok(document?.fields?.["CompanyPhoneNumber"]); - assert.ok(document?.fields?.["CompanyName"]); - assert.ok(document?.fields?.["Signature"]); - }); - }); - - it("getModel() verification", async () => { - const model = await requireModel(); - - const modelDetails = await client.path("/documentModels/{modelId}", model.modelId).get(); - - if (isUnexpected(modelDetails)) { - throw modelDetails.body.error; - } - - assert.strictEqual(modelDetails.body.modelId, model.modelId); - assert.strictEqual(modelDetails.body.description, model.description); - assert.ok(modelDetails.body.docTypes); - }); - }); - - /* - * These are tests that check that model querying functions as expected. - * This section also cleans up the models by deleting them. - */ - describe("model information", async () => { - it("iterate models in account", async () => { - const response = await client.path("/documentModels").get(); - if (isUnexpected(response)) { - throw response.body.error; - } - - const modelsInAccount: string[] = []; - for await (const model of paginate(client, response)) { - assert.ok(model.modelId); - modelsInAccount.push(model.modelId); - } - - for (const modelId of allModels) { - assert.isTrue(modelsInAccount.includes(modelId)); - } - }); - - it("delete models from the account", async () => { - // Delete all of the models - await Promise.all( - allModels.map((modelId) => client.path("/documentModels/{modelId}", modelId).delete()), - ); - - await Promise.all( - allModels.map(async (modelId) => { - try { - const res = await client.path("/documentModels/{modelId}", modelId).get(); - if (isUnexpected(res)) { - throw res.body.error; - } - console.log(`Model ${res.body.modelId} was not deleted!`); - throw new Error( - `The service returned model info for ${modelId}, but we thought we had deleted it!`, - ); - } catch (e: unknown) { - assert.isTrue((e as Error).message.endsWith(" not found.")); - } - }), - ); - }); - }); - }); - - // #endregion - - it.skip(`compose model`, async function () { - // Helper function to train/validate single model - async function makeModel(prefix: string): Promise> { - const modelId = recorder.variable(prefix, `${prefix}${getRandomNumber()}`); - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId: modelId, - azureBlobSource: { - containerUrl: containerSasUrl(), - }, - }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse); - const model = ( - (await (await poller).pollUntilDone()).body as DocumentModelBuildOperationDetailsOutput - ).result!; - - assert.equal(model.modelId, modelId); - assert.equal(model.modelId, modelId); - assert.ok(model.docTypes); - - return { modelId: model.docTypes }; - } - - const modelIdDoctypeMap = await Promise.all([makeModel("input1"), makeModel("input2")]); - - const modelId = recorder.variable("composedModelName", `composedModelName${getRandomNumber()}`); - const component1 = modelIdDoctypeMap[0]; - const component2 = modelIdDoctypeMap[1]; - const initialResponse = await client.path("/documentModels:compose").post({ - body: { - classifierId: recorder.variable("classifierId", `classifierId${getRandomNumber()}`), - docTypes: { component1, component2 }, - modelId, - }, - }); - - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const poller = getLongRunningPoller(client, initialResponse); - - const composedModel = ( - (await (await poller).pollUntilDone()).body as DocumentModelComposeOperationDetailsOutput - ).result!; - assert.ok(composedModel.modelId); - assert.equal(composedModel.modelId, modelId); - assert.ok(composedModel.docTypes); - - // Submodels - assert.equal(Object.entries(composedModel.docTypes ?? {}).length, 2); - }); - - it.skip(`copy model`, async function () { - // Since this test is isolated, we'll create a fresh set of resources for it - await recorder.addSanitizers( - { - bodyKeySanitizers: [ - { - jsonPath: "$.accessToken", - value: "access_token", - }, - ], - }, - ["playback", "record"], - ); - const modelId = recorder.variable("copySource", `copySource${getRandomNumber()}`); - - const initialResponse = await client.path("/documentModels:build").post({ - body: { - buildMode: "template", - modelId: modelId, - azureBlobSource: { - containerUrl: containerSasUrl(), - }, - }, - }); - if (isUnexpected(initialResponse)) { - throw initialResponse.body.error; - } - const trainingPoller = getLongRunningPoller(client, initialResponse); - const sourceModel = ( - (await (await trainingPoller).pollUntilDone()) - .body as DocumentModelBuildOperationDetailsOutput - ).result!; - - assert.equal(sourceModel.modelId, modelId); - - const targetModelId = recorder.variable("copyTarget", `copyTarget${getRandomNumber()}`); - const targetAuth = await client.path("/documentModels:authorizeCopy").post({ - body: { - modelId: targetModelId, - }, - }); - - if (isUnexpected(targetAuth)) { - throw targetAuth.body.error; - } - const copyInitResponse = await client - .path("/documentModels/{modelId}:copyTo", sourceModel.modelId) - .post({ - body: targetAuth.body, - }); - - if (isUnexpected(copyInitResponse)) { - throw copyInitResponse.body.error; - } - const copyPoller = getLongRunningPoller(client, copyInitResponse); - const copyResult = ( - (await (await copyPoller).pollUntilDone()).body as DocumentModelCopyToOperationDetailsOutput - ).result!; - - assert.ok(copyResult, "Expecting valid copy result"); - assert.equal(copyResult.modelId, targetAuth.body.targetModelId); - - assert.ok(copyResult.createdDateTime, "Expecting valid 'trainingStartedOn' property"); - - const targetModel = await client.path("/documentModels/{modelId}", copyResult.modelId).get(); - - if (isUnexpected(targetModel)) { - throw targetModel.body.error; - } - assert.equal(targetModel.body.modelId, targetAuth.body.targetModelId); - assert.equal(targetModel.body.modelId, copyResult.modelId); - }); -}); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/utils/recordedClient.ts b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/utils/recordedClient.ts new file mode 100644 index 000000000000..6e425fdcfdf9 --- /dev/null +++ b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/utils/recordedClient.ts @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { + Recorder, + RecorderStartOptions, + VitestTestContext, +} from "@azure-tools/test-recorder"; + +const replaceableVariables: Record = { + SUBSCRIPTION_ID: "azure_subscription_id", +}; + +const recorderEnvSetup: RecorderStartOptions = { + envSetupForPlayback: replaceableVariables, +}; + +/** + * creates the recorder and reads the environment variables from the `.env` file. + * Should be called first in the test suite to make sure environment variables are + * read before they are being used. + */ +export async function createRecorder( + context: VitestTestContext, +): Promise { + const recorder = new Recorder(context); + await recorder.start(recorderEnvSetup); + return recorder; +} diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/utils/recorderUtils.ts b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/utils/recorderUtils.ts deleted file mode 100644 index 41c2157acbf5..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/utils/recorderUtils.ts +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { - Recorder, - RecorderStartOptions, - TestInfo, - env, - isPlaybackMode, -} from "@azure-tools/test-recorder"; - -const envSetupForPlayback: { [k: string]: string } = { - AZURE_CLIENT_ID: "azure_client_id", - AZURE_CLIENT_SECRET: "azure_client_secret", - AZURE_TENANT_ID: "12345678-1234-1234-1234-123456789012", - DOCUMENT_INTELLIGENCE_API_KEY: "api_key", - DOCUMENT_INTELLIGENCE_ENDPOINT: "https://endpoint/", - DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL: - "https://storageaccount/trainingdata-v3?sastoken", - DOCUMENT_INTELLIGENCE_TESTING_CONTAINER_SAS_URL: "https://storageaccount/testingdata?sastoken", - DOCUMENT_INTELLIGENCE_SELECTION_MARK_STORAGE_CONTAINER_SAS_URL: - "https://storageaccount/selectionmark-v3?sastoken", - DOCUMENT_INTELLIGENCE_TARGET_RESOURCE_REGION: "westus2", - DOCUMENT_INTELLIGENCE_BATCH_TRAINING_DATA_CONTAINER_SAS_URL: - "https://storageaccount/batchtraining?sastoken", - DOCUMENT_INTELLIGENCE_BATCH_TRAINING_DATA_RESULT_CONTAINER_SAS_URL: - "https://storageaccount/batchtrainingresult?sastoken", - // fake resource id - DOCUMENT_INTELLIGENCE_TARGET_RESOURCE_ID: - "/subscriptions/e1367d46-77d4-4f57-8cfe-348edbdc84a3/resourceGroups/jstests/providers/Microsoft.CognitiveServices/accounts/jstests-fr", -}; - -export const recorderOptions: RecorderStartOptions = { - envSetupForPlayback, - removeCentralSanitizers: [ - "AZSDK4001", // envSetupForPlayback handles endpoint sanitization - "AZSDK2030", // no need to sanitize "operation-location" header since the endpoint is already sanitized - "AZSDK3430", // $.id - "AZSDK3496", // $..resourceLocation - ], - sanitizerOptions: { - generalSanitizers: [ - // endpoints - { - target: env["DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL"]?.split("/")[2] || "", - value: - envSetupForPlayback["DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL"].split("/")[2], - }, - { - target: env["DOCUMENT_INTELLIGENCE_TESTING_CONTAINER_SAS_URL"]?.split("/")[2] || "", - value: envSetupForPlayback["DOCUMENT_INTELLIGENCE_TESTING_CONTAINER_SAS_URL"].split("/")[2], - }, - { - target: - env["DOCUMENT_INTELLIGENCE_SELECTION_MARK_STORAGE_CONTAINER_SAS_URL"]?.split("/")[2] || - "", - value: - envSetupForPlayback[ - "DOCUMENT_INTELLIGENCE_SELECTION_MARK_STORAGE_CONTAINER_SAS_URL" - ].split("/")[2], - }, - // sas tokens - { - target: env["DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL"]?.split("?")[1] || "", - value: - envSetupForPlayback["DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL"].split("?")[1], - }, - { - target: env["DOCUMENT_INTELLIGENCE_TESTING_CONTAINER_SAS_URL"]?.split("?")[1] || "", - value: envSetupForPlayback["DOCUMENT_INTELLIGENCE_TESTING_CONTAINER_SAS_URL"].split("?")[1], - }, - { - target: - env["DOCUMENT_INTELLIGENCE_SELECTION_MARK_STORAGE_CONTAINER_SAS_URL"]?.split("?")[1] || - "", - value: - envSetupForPlayback[ - "DOCUMENT_INTELLIGENCE_SELECTION_MARK_STORAGE_CONTAINER_SAS_URL" - ].split("?")[1], - }, - { - target: - env["DOCUMENT_INTELLIGENCE_BATCH_TRAINING_DATA_CONTAINER_SAS_URL"]?.split("?")[1] || "", - value: - envSetupForPlayback["DOCUMENT_INTELLIGENCE_BATCH_TRAINING_DATA_CONTAINER_SAS_URL"].split( - "?", - )[1], - }, - { - target: - env["DOCUMENT_INTELLIGENCE_BATCH_TRAINING_DATA_RESULT_CONTAINER_SAS_URL"]?.split( - "?", - )[1] || "", - value: - envSetupForPlayback[ - "DOCUMENT_INTELLIGENCE_BATCH_TRAINING_DATA_RESULT_CONTAINER_SAS_URL" - ].split("?")[1], - }, - ], - }, -}; - -/** - * creates the recorder and reads the environment variables from the `.env` file. - * Should be called first in the test suite to make sure environment variables are - * read before they are being used. - */ -export async function createRecorder(context: TestInfo): Promise { - const recorder = new Recorder(context); - await recorder.start(recorderOptions); - return recorder; -} - -export const testPollingOptions = { - intervalInMs: isPlaybackMode() ? 0 : undefined, -}; diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/utils/utils.ts b/sdk/documentintelligence/ai-document-intelligence-rest/test/public/utils/utils.ts deleted file mode 100644 index 3a94e0da4a02..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/test/public/utils/utils.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import { assertEnvironmentVariable } from "@azure-tools/test-recorder"; -import { createClientLogger } from "@azure/logger"; - -import path from "path"; - -export const ASSET_PATH = path.resolve(path.join(process.cwd(), "assets")); - -export function makeTestUrl(urlPath: string): string { - const testingContainerUrl = assertEnvironmentVariable( - "DOCUMENT_INTELLIGENCE_TESTING_CONTAINER_SAS_URL", - ); - const parts = testingContainerUrl.split("?"); - return `${parts[0]}${urlPath}?${parts[1]}`; -} - -export function getRandomNumber(): number { - return Math.ceil(Math.random() * 1000 + 10000); -} - -export const containerSasUrl = (): string => - assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL"); - -export const batchTrainingFilesContainerUrl = (): string => - assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_BATCH_TRAINING_DATA_CONTAINER_SAS_URL"); - -export const batchTrainingFilesResultContainerUrl = (): string => - assertEnvironmentVariable("DOCUMENT_INTELLIGENCE_BATCH_TRAINING_DATA_RESULT_CONTAINER_SAS_URL"); - -export const logger = createClientLogger("ai-form-recognizer:test"); diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/tests.yml b/sdk/documentintelligence/ai-document-intelligence-rest/tests.yml deleted file mode 100644 index edc529d018e1..000000000000 --- a/sdk/documentintelligence/ai-document-intelligence-rest/tests.yml +++ /dev/null @@ -1,22 +0,0 @@ -# Parameterize Location to the test resources deployment script. This allows -# specifying a different Azure region to use when manually triggering the live -# tests pipeline. This is useful for when we want to test in different -# environments: Prod, Canary, etc. -parameters: - - name: Location - displayName: Location - type: string - default: eastus - -trigger: none - -extends: - template: /eng/pipelines/templates/stages/archetype-sdk-tests.yml - parameters: - PackageName: "@azure-rest/ai-document-intelligence" - ServiceDirectory: documentintelligence - Location: "${{ parameters.Location }}" - EnvVars: - AZURE_CLIENT_ID: $(aad-azure-sdk-test-client-id) - AZURE_TENANT_ID: $(aad-azure-sdk-test-tenant-id) - AZURE_CLIENT_SECRET: $(aad-azure-sdk-test-client-secret) diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/tsconfig.json b/sdk/documentintelligence/ai-document-intelligence-rest/tsconfig.json index a10f22a54c88..a6575847a41e 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/tsconfig.json +++ b/sdk/documentintelligence/ai-document-intelligence-rest/tsconfig.json @@ -3,7 +3,14 @@ "compilerOptions": { "module": "NodeNext", "moduleResolution": "NodeNext", - "rootDir": "." + "rootDir": ".", + "skipLibCheck": true }, - "include": ["./src/**/*.ts", "./src/**/*.mts", "./src/**/*.cts", "test/**/*.ts", "./test/**/*.ts"] -} + "include": [ + "./src/**/*.ts", + "./src/**/*.mts", + "./src/**/*.cts", + "test/**/*.ts", + "./test/**/*.ts" + ] +} \ No newline at end of file diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/tsp-location.yaml b/sdk/documentintelligence/ai-document-intelligence-rest/tsp-location.yaml index 66ce35132bd2..443b61bab560 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/tsp-location.yaml +++ b/sdk/documentintelligence/ai-document-intelligence-rest/tsp-location.yaml @@ -1,3 +1,4 @@ directory: specification/ai/DocumentIntelligence -commit: ec2a81edaecf3970e5938936e8256759905163e6 -repo: Azure/azure-rest-api-specs +commit: 8efaa61aa60b750f83b68893abb0481c9dbf5c13 +repo: /mnt/vss/_work/1/s/azure-rest-api-specs +additionalDirectories: diff --git a/sdk/documentintelligence/ai-document-intelligence-rest/vitest.config.ts b/sdk/documentintelligence/ai-document-intelligence-rest/vitest.config.ts index c7a030e63be0..f8ab2a758bf9 100644 --- a/sdk/documentintelligence/ai-document-intelligence-rest/vitest.config.ts +++ b/sdk/documentintelligence/ai-document-intelligence-rest/vitest.config.ts @@ -6,7 +6,7 @@ import { relativeRecordingsPath } from "@azure-tools/test-recorder"; export default defineConfig({ test: { - reporters: ["verbose", "basic"], + reporters: ["basic", "junit"], outputFile: { junit: "test-results.browser.xml", },