diff --git a/.licensed.yml b/.licensed.yml index 16fc609..8e118d6 100644 --- a/.licensed.yml +++ b/.licensed.yml @@ -16,5 +16,4 @@ reviewed: npm: - "@actions/http-client" - "balanced-match" - - "brace-expansion" - - "minimatch" \ No newline at end of file + - "brace-expansion" \ No newline at end of file diff --git a/.licenses/npm/@azure/abort-controller.dep.yml b/.licenses/npm/@azure/abort-controller.dep.yml index 32d238a..934bd3b 100644 --- a/.licenses/npm/@azure/abort-controller.dep.yml +++ b/.licenses/npm/@azure/abort-controller.dep.yml @@ -1,6 +1,6 @@ --- name: "@azure/abort-controller" -version: 2.2.0 +version: 2.1.2 type: npm summary: Microsoft Azure SDK for JavaScript - Aborter homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/abort-controller/README.md @@ -8,9 +8,9 @@ license: mit licenses: - sources: LICENSE text: | - Copyright (c) Microsoft Corporation. + The MIT License (MIT) - MIT License + Copyright (c) 2020 Microsoft Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -22,7 +22,7 @@ licenses: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER diff --git a/.licenses/npm/@azure/core-auth.dep.yml b/.licenses/npm/@azure/core-auth.dep.yml index 48b2844..193d51d 100644 --- a/.licenses/npm/@azure/core-auth.dep.yml +++ b/.licenses/npm/@azure/core-auth.dep.yml @@ -1,10 +1,10 @@ --- name: "@azure/core-auth" -version: 1.11.0 +version: 1.10.1 type: npm summary: Provides low-level interfaces and helper methods for authentication in Azure SDK -homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/core-auth/README.md +homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-auth/README.md license: mit licenses: - sources: LICENSE diff --git a/.licenses/npm/@azure/core-client.dep.yml b/.licenses/npm/@azure/core-client.dep.yml index 567784a..93ed4b6 100644 --- a/.licenses/npm/@azure/core-client.dep.yml +++ b/.licenses/npm/@azure/core-client.dep.yml @@ -1,6 +1,6 @@ --- name: "@azure/core-client" -version: 1.11.0 +version: 1.10.2 type: npm summary: Core library for interfacing with AutoRest generated code homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-client/ diff --git a/.licenses/npm/@azure/core-http-compat.dep.yml b/.licenses/npm/@azure/core-http-compat.dep.yml index c25f52b..8a8b5c1 100644 --- a/.licenses/npm/@azure/core-http-compat.dep.yml +++ b/.licenses/npm/@azure/core-http-compat.dep.yml @@ -1,9 +1,9 @@ --- name: "@azure/core-http-compat" -version: 2.5.0 +version: 2.4.0 type: npm summary: Core HTTP Compatibility Library to bridge the gap between Core V1 & V2 packages. -homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-http-compat/ +homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-compat/ license: mit licenses: - sources: LICENSE diff --git a/.licenses/npm/@azure/core-paging.dep.yml b/.licenses/npm/@azure/core-paging.dep.yml index 09c56a2..cc31605 100644 --- a/.licenses/npm/@azure/core-paging.dep.yml +++ b/.licenses/npm/@azure/core-paging.dep.yml @@ -1,6 +1,6 @@ --- name: "@azure/core-paging" -version: 1.7.0 +version: 1.6.2 type: npm summary: Core types for paging async iterable iterators homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/core-paging/README.md @@ -8,9 +8,9 @@ license: mit licenses: - sources: LICENSE text: | - Copyright (c) Microsoft Corporation. + The MIT License (MIT) - MIT License + Copyright (c) 2020 Microsoft Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -22,7 +22,7 @@ licenses: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER diff --git a/.licenses/npm/@azure/core-rest-pipeline.dep.yml b/.licenses/npm/@azure/core-rest-pipeline.dep.yml index 6635169..3db95a8 100644 --- a/.licenses/npm/@azure/core-rest-pipeline.dep.yml +++ b/.licenses/npm/@azure/core-rest-pipeline.dep.yml @@ -1,6 +1,6 @@ --- name: "@azure/core-rest-pipeline" -version: 1.25.0 +version: 1.24.0 type: npm summary: Isomorphic client library for making HTTP requests in node.js and browser. homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/core-rest-pipeline/README.md diff --git a/.licenses/npm/@azure/core-tracing.dep.yml b/.licenses/npm/@azure/core-tracing.dep.yml index 467ae44..71f7b7f 100644 --- a/.licenses/npm/@azure/core-tracing.dep.yml +++ b/.licenses/npm/@azure/core-tracing.dep.yml @@ -1,6 +1,6 @@ --- name: "@azure/core-tracing" -version: 1.4.0 +version: 1.3.1 type: npm summary: Provides low-level interfaces and helper methods for tracing in Azure SDK homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-tracing/README.md diff --git a/.licenses/npm/@azure/core-util.dep.yml b/.licenses/npm/@azure/core-util.dep.yml index 7a64517..a056485 100644 --- a/.licenses/npm/@azure/core-util.dep.yml +++ b/.licenses/npm/@azure/core-util.dep.yml @@ -1,6 +1,6 @@ --- name: "@azure/core-util" -version: 1.14.0 +version: 1.13.1 type: npm summary: Core library for shared utility methods homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-util/ diff --git a/.licenses/npm/@azure/core-xml.dep.yml b/.licenses/npm/@azure/core-xml.dep.yml index f501dd7..4987b55 100644 --- a/.licenses/npm/@azure/core-xml.dep.yml +++ b/.licenses/npm/@azure/core-xml.dep.yml @@ -1,9 +1,9 @@ --- name: "@azure/core-xml" -version: 1.6.0 +version: 1.5.1 type: npm summary: Core library for interacting with XML payloads -homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/core-xml/README.md +homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-xml/ license: mit licenses: - sources: LICENSE diff --git a/.licenses/npm/@azure/logger.dep.yml b/.licenses/npm/@azure/logger.dep.yml index 511d51b..065ecaa 100644 --- a/.licenses/npm/@azure/logger.dep.yml +++ b/.licenses/npm/@azure/logger.dep.yml @@ -1,6 +1,6 @@ --- name: "@azure/logger" -version: 1.4.0 +version: 1.3.0 type: npm summary: Microsoft Azure SDK for JavaScript - Logger homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/logger/README.md diff --git a/.licenses/npm/@azure/storage-blob.dep.yml b/.licenses/npm/@azure/storage-blob.dep.yml index 95136b4..f611da3 100644 --- a/.licenses/npm/@azure/storage-blob.dep.yml +++ b/.licenses/npm/@azure/storage-blob.dep.yml @@ -1,6 +1,6 @@ --- name: "@azure/storage-blob" -version: 12.33.0 +version: 12.32.0 type: npm summary: Microsoft Azure Storage SDK for JavaScript - Blob homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/storage/storage-blob/README.md diff --git a/.licenses/npm/@azure/storage-common.dep.yml b/.licenses/npm/@azure/storage-common.dep.yml index 139a9a9..1241630 100644 --- a/.licenses/npm/@azure/storage-common.dep.yml +++ b/.licenses/npm/@azure/storage-common.dep.yml @@ -1,6 +1,6 @@ --- name: "@azure/storage-common" -version: 12.5.0 +version: 12.4.0 type: npm summary: Azure Storage Common Client Library for JavaScript homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/storage/storage-common/README.md diff --git a/.licenses/npm/@typespec/ts-http-runtime.dep.yml b/.licenses/npm/@typespec/ts-http-runtime.dep.yml index 4650a4e..bad51e8 100644 --- a/.licenses/npm/@typespec/ts-http-runtime.dep.yml +++ b/.licenses/npm/@typespec/ts-http-runtime.dep.yml @@ -1,6 +1,6 @@ --- name: "@typespec/ts-http-runtime" -version: 0.3.8 +version: 0.3.6 type: npm summary: Isomorphic client library for making HTTP requests in node.js and browser. homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/ts-http-runtime/README.md diff --git a/.licenses/npm/fast-xml-builder.dep.yml b/.licenses/npm/fast-xml-builder.dep.yml index 3e52f41..1b2f691 100644 --- a/.licenses/npm/fast-xml-builder.dep.yml +++ b/.licenses/npm/fast-xml-builder.dep.yml @@ -1,6 +1,6 @@ --- name: fast-xml-builder -version: 1.3.1 +version: 1.2.0 type: npm summary: Build XML from JSON without C/C++ based libraries homepage: diff --git a/.licenses/npm/fast-xml-parser.dep.yml b/.licenses/npm/fast-xml-parser.dep.yml index 88bd3e2..07fd88d 100644 --- a/.licenses/npm/fast-xml-parser.dep.yml +++ b/.licenses/npm/fast-xml-parser.dep.yml @@ -1,6 +1,6 @@ --- name: fast-xml-parser -version: 5.11.0 +version: 5.10.1 type: npm summary: Validate XML, Parse XML, Build XML without C/C++ based libraries homepage: diff --git a/.licenses/npm/minimatch-10.2.6.dep.yml b/.licenses/npm/minimatch-10.2.5.dep.yml similarity index 97% rename from .licenses/npm/minimatch-10.2.6.dep.yml rename to .licenses/npm/minimatch-10.2.5.dep.yml index 9c6ecc7..d13280f 100644 --- a/.licenses/npm/minimatch-10.2.6.dep.yml +++ b/.licenses/npm/minimatch-10.2.5.dep.yml @@ -1,10 +1,10 @@ --- name: minimatch -version: 10.2.6 +version: 10.2.5 type: npm summary: a glob matcher in javascript homepage: -license: other +license: blueoak-1.0.0 licenses: - sources: LICENSE.md text: | diff --git a/.licenses/npm/strnum.dep.yml b/.licenses/npm/strnum.dep.yml index f8fbc94..c472ee0 100644 --- a/.licenses/npm/strnum.dep.yml +++ b/.licenses/npm/strnum.dep.yml @@ -1,6 +1,6 @@ --- name: strnum -version: 2.4.2 +version: 2.4.1 type: npm summary: Parse String to Number based on configuration homepage: diff --git a/.licenses/npm/xml-naming-0.1.0.dep.yml b/.licenses/npm/xml-naming-0.1.0.dep.yml new file mode 100644 index 0000000..6df51e8 --- /dev/null +++ b/.licenses/npm/xml-naming-0.1.0.dep.yml @@ -0,0 +1,12 @@ +--- +name: xml-naming +version: 0.1.0 +type: npm +summary: Validates XML name productions — Name, NCName, QName, NMToken, NMTokens — + for XML 1.0 and 1.1 +homepage: +license: mit +licenses: +- sources: README.md + text: MIT +notices: [] diff --git a/.licenses/npm/xml-naming.dep.yml b/.licenses/npm/xml-naming-0.3.0.dep.yml similarity index 100% rename from .licenses/npm/xml-naming.dep.yml rename to .licenses/npm/xml-naming-0.3.0.dep.yml diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js index 07b11d2..a5b4218 100644 --- a/dist/cache-save/index.js +++ b/dist/cache-save/index.js @@ -39288,7 +39288,7 @@ exports.w = { /***/ }), -/***/ 9437: +/***/ 8914: /***/ ((__unused_webpack_module, exports) => { var __webpack_unused_export__; @@ -39305,7 +39305,7 @@ exports.w = void 0; exports.w = { instrumenterImplementation: undefined, }; -//# sourceMappingURL=state-cjs.js.map +//# sourceMappingURL=state-cjs.cjs.map /***/ }), @@ -44290,7 +44290,7 @@ function httpHeaders_createHttpHeaders(rawHeaders) { * @returns RFC4122 v4 UUID. */ function randomUUID() { - return globalThis.crypto.randomUUID(); + return crypto.randomUUID(); } //# sourceMappingURL=uuidUtils.js.map ;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/pipelineRequest.js @@ -45299,7 +45299,7 @@ function logPolicy_logPolicy(options = {}) { logger(`Request: ${sanitizer.sanitize(request)}`); const response = await next(request); logger(`Response status code: ${response.status}`); - logger(`Headers: ${sanitizer.sanitize({ headers: response.headers })}`); + logger(`Headers: ${sanitizer.sanitize(response.headers)}`); return response; }, }; @@ -45404,7 +45404,7 @@ function userAgentPolicy_userAgentPolicy(options = {}) { * @param min - The smallest integer value allowed. * @param max - The largest integer value allowed. */ -function getRandomIntegerInclusive(min, max) { +function random_getRandomIntegerInclusive(min, max) { // Make sure inputs are integers. min = Math.ceil(min); max = Math.floor(max); @@ -45432,7 +45432,7 @@ function calculateRetryDelay(retryAttempt, config) { const clampedDelay = Math.min(config.maxRetryDelayInMs, exponentialDelay); // Allow the final value to have some "jitter" (within 50% of the delay size) so // that retries across multiple clients don't occur simultaneously. - const retryAfterInMs = clampedDelay / 2 + getRandomIntegerInclusive(0, clampedDelay / 2); + const retryAfterInMs = clampedDelay / 2 + random_getRandomIntegerInclusive(0, clampedDelay / 2); return { retryAfterInMs }; } //# sourceMappingURL=delay.js.map @@ -45637,7 +45637,7 @@ function isSystemError(err) { ;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/constants.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -const constants_SDK_VERSION = "0.3.8"; +const constants_SDK_VERSION = "0.3.6"; const constants_DEFAULT_RETRY_POLICY_COUNT = 3; //# sourceMappingURL=constants.js.map ;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/retryPolicy.js @@ -46885,17 +46885,14 @@ function getContentType(body) { function buildPipelineRequest(method, url, options = {}) { const requestContentType = getRequestContentType(options); const { body, multipartBody } = getRequestBody(options.body, requestContentType); - const accept = options.accept ?? - options.headers?.accept ?? - (options.noDefaultAcceptHeader ? undefined : "application/json"); const headers = createHttpHeaders({ ...(options.headers ? options.headers : {}), - ...(accept !== undefined && { accept }), + accept: options.accept ?? options.headers?.accept ?? "application/json", ...(requestContentType && { "content-type": requestContentType, }), }); - const { allowInsecureConnection, abortSignal, onUploadProgress, onDownloadProgress, timeout, responseAsStream, noDefaultAcceptHeader: _noDefaultAcceptHeader, url: _url, method: _method, body: _body, multipartBody: _multiBody, headers: _headers, ...rest } = options; + const { allowInsecureConnection, abortSignal, onUploadProgress, onDownloadProgress, timeout, responseAsStream, url: _url, method: _method, body: _body, multipartBody: _multiBody, headers: _headers, ...rest } = options; const request = createPipelineRequest({ url, method, @@ -47002,7 +46999,8 @@ function createParseError(response, err) { /** * Creates a client with a default pipeline * @param endpoint - Base endpoint for the client - * @param clientOptions - Client options + * @param credentials - Credentials to authenticate the requests + * @param options - Client options */ function getClient(endpoint, clientOptions = {}) { const pipeline = clientOptions.pipeline ?? createDefaultPipeline(clientOptions); @@ -47016,35 +47014,34 @@ function getClient(endpoint, clientOptions = {}) { }); } } - const noDefaultAcceptHeader = clientOptions.internal?.noDefaultAcceptHeader ?? false; const { allowInsecureConnection, httpClient } = clientOptions; const endpointUrl = clientOptions.endpoint ?? endpoint; const client = (path, ...args) => { const getUrl = (requestOptions) => buildRequestUrl(endpointUrl, path, args, { allowInsecureConnection, ...requestOptions }); return { get: (requestOptions = {}) => { - return buildOperation("GET", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("GET", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, post: (requestOptions = {}) => { - return buildOperation("POST", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("POST", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, put: (requestOptions = {}) => { - return buildOperation("PUT", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("PUT", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, patch: (requestOptions = {}) => { - return buildOperation("PATCH", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("PATCH", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, delete: (requestOptions = {}) => { - return buildOperation("DELETE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("DELETE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, head: (requestOptions = {}) => { - return buildOperation("HEAD", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("HEAD", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, options: (requestOptions = {}) => { - return buildOperation("OPTIONS", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("OPTIONS", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, trace: (requestOptions = {}) => { - return buildOperation("TRACE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("TRACE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, }; }; @@ -47054,23 +47051,23 @@ function getClient(endpoint, clientOptions = {}) { pipeline, }; } -function buildOperation(method, url, pipeline, options, allowInsecureConnection, httpClient, noDefaultAcceptHeader = false) { +function buildOperation(method, url, pipeline, options, allowInsecureConnection, httpClient) { allowInsecureConnection = options.allowInsecureConnection ?? allowInsecureConnection; return { then: function (onFulfilled, onrejected) { - return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, noDefaultAcceptHeader }, httpClient).then(onFulfilled, onrejected); + return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection }, httpClient).then(onFulfilled, onrejected); }, async asBrowserStream() { if (isNodeLike) { throw new Error("`asBrowserStream` is supported only in the browser environment. Use `asNodeStream` instead to obtain the response body stream. If you require a Web stream of the response in Node, consider using `Readable.toWeb` on the result of `asNodeStream`."); } else { - return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, noDefaultAcceptHeader, responseAsStream: true }, httpClient); + return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, responseAsStream: true }, httpClient); } }, async asNodeStream() { if (isNodeLike) { - return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, noDefaultAcceptHeader, responseAsStream: true }, httpClient); + return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, responseAsStream: true }, httpClient); } else { throw new Error("`isNodeStream` is not supported in the browser environment. Use `asBrowserStream` to obtain the response body stream."); @@ -47431,7 +47428,7 @@ async function util_userAgentPlatform_setPlatformSpecificData(map) { ;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/constants.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -const esm_constants_SDK_VERSION = "1.25.0"; +const esm_constants_SDK_VERSION = "1.24.0"; const esm_constants_DEFAULT_RETRY_POLICY_COUNT = 3; //# sourceMappingURL=constants.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/util/userAgent.js @@ -47756,30 +47753,20 @@ async function computeSha256Hash(content, encoding) { //# sourceMappingURL=internal.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/abort-controller/dist/esm/AbortError.js // Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. +// Licensed under the MIT license. /** * This error is thrown when an asynchronous operation has been aborted. * Check for this error by testing the `name` that the name property of the * error matches `"AbortError"`. * * @example - * ```ts snippet:AbortErrorSample - * import { AbortError } from "@azure/abort-controller"; - * - * async function doAsyncWork(options: { abortSignal: AbortSignal }): Promise { - * if (options.abortSignal.aborted) { - * throw new AbortError(); - * } - * - * // do async work - * } - * + * ```ts * const controller = new AbortController(); * controller.abort(); * try { - * doAsyncWork({ abortSignal: controller.signal }); + * doAsyncWork(controller.signal) * } catch (e) { - * if (e instanceof Error && e.name === "AbortError") { + * if (e.name === 'AbortError') { * // handle abort error here. * } * } @@ -47794,7 +47781,7 @@ class AbortError_AbortError extends Error { //# sourceMappingURL=AbortError.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/abort-controller/dist/esm/index.js // Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. +// Licensed under the MIT license. //# sourceMappingURL=index.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-util/dist/esm/createAbortablePromise.js @@ -47844,6 +47831,7 @@ function createAbortablePromise(buildPromise, options) { // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. + const delay_StandardAbortMessage = "The delay was aborted."; /** * A wrapper for setTimeout that resolves a promise after timeInMs milliseconds. @@ -47862,6 +47850,22 @@ function delay_delay(timeInMs, options) { abortErrorMsg: abortErrorMsg ?? delay_StandardAbortMessage, }); } +/** + * Calculates the delay interval for retry attempts using exponential delay with jitter. + * @param retryAttempt - The current retry attempt number. + * @param config - The exponential retry configuration. + * @returns An object containing the calculated retry delay. + */ +function delay_calculateRetryDelay(retryAttempt, config) { + // Exponentially increase the delay each time + const exponentialDelay = config.retryDelayInMs * Math.pow(2, retryAttempt); + // Don't let the delay exceed the maximum + const clampedDelay = Math.min(config.maxRetryDelayInMs, exponentialDelay); + // Allow the final value to have some "jitter" (within 50% of the delay size) so + // that retries across multiple clients don't occur simultaneously. + const retryAfterInMs = clampedDelay / 2 + getRandomIntegerInclusive(0, clampedDelay / 2); + return { retryAfterInMs }; +} //# sourceMappingURL=delay.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-util/dist/esm/error.js // Copyright (c) Microsoft Corporation. @@ -48159,8 +48163,8 @@ class TracingContextImpl { } } //# sourceMappingURL=tracingContext.js.map -// EXTERNAL MODULE: ./node_modules/@azure/core-tracing/dist/commonjs/state-cjs.js -var state_cjs = __nccwpck_require__(9437); +// EXTERNAL MODULE: ./node_modules/@azure/core-tracing/dist/commonjs/state.js +var commonjs_state = __nccwpck_require__(8914); ;// CONCATENATED MODULE: ./node_modules/@azure/core-tracing/dist/esm/state.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. @@ -48170,7 +48174,7 @@ var state_cjs = __nccwpck_require__(9437); /** * Defines the shared state between CJS and ESM by re-exporting the CJS state. */ -const state_state = state_cjs/* state */.w; +const state_state = commonjs_state/* state */.w; //# sourceMappingURL=state.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-tracing/dist/esm/instrumenter.js // Copyright (c) Microsoft Corporation. @@ -48252,8 +48256,8 @@ function createTracingClient(options) { function startSpan(name, operationOptions, spanOptions) { const startSpanResult = getInstrumenter().startSpan(name, { ...spanOptions, - packageName, - packageVersion, + packageName: packageName, + packageVersion: packageVersion, tracingContext: operationOptions?.tracingOptions?.tracingContext, }); let tracingContext = startSpanResult.tracingContext; @@ -48273,7 +48277,7 @@ function createTracingClient(options) { async function withSpan(name, operationOptions, callback, spanOptions) { const { span, updatedOptions } = startSpan(name, operationOptions, spanOptions); try { - const result = await withContext(updatedOptions.tracingOptions.tracingContext, () => callback(updatedOptions, span)); + const result = await withContext(updatedOptions.tracingOptions.tracingContext, () => Promise.resolve(callback(updatedOptions, span))); span.setStatus({ status: "success" }); return result; } @@ -49350,6 +49354,22 @@ function isSASCredential(credential) { ;// CONCATENATED MODULE: ./node_modules/@azure/core-auth/dist/esm/tokenCredential.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +/** + * @internal + * @param accessToken - Access token + * @returns Whether a token is bearer type or not + */ +function isBearerToken(accessToken) { + return !accessToken.tokenType || accessToken.tokenType === "Bearer"; +} +/** + * @internal + * @param accessToken - Access token + * @returns Whether a token is Pop token or not + */ +function isPopToken(accessToken) { + return accessToken.tokenType === "pop"; +} /** * Tests an object to determine whether it implements TokenCredential. * @@ -49381,7 +49401,7 @@ const disableKeepAlivePolicyName = "DisableKeepAlivePolicy"; function createDisableKeepAlivePolicy() { return { name: disableKeepAlivePolicyName, - sendRequest(request, next) { + async sendRequest(request, next) { request.disableKeepAlive = true; return next(request); }, @@ -50516,7 +50536,7 @@ const MapperTypeNames = { }; //# sourceMappingURL=serializer.js.map // EXTERNAL MODULE: ./node_modules/@azure/core-client/dist/commonjs/state-cjs.js -var commonjs_state_cjs = __nccwpck_require__(30); +var state_cjs = __nccwpck_require__(30); ;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/state.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. @@ -50526,7 +50546,7 @@ var commonjs_state_cjs = __nccwpck_require__(30); /** * Defines the shared state between CJS and ESM by re-exporting the CJS state. */ -const esm_state_state = commonjs_state_cjs/* state */.w; +const esm_state_state = state_cjs/* state */.w; //# sourceMappingURL=state.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/operationHelpers.js // Copyright (c) Microsoft Corporation. @@ -51715,22 +51735,6 @@ const util_originalRequestSymbol = Symbol("Original PipelineRequest"); // cloned but we need to retrieve the OperationSpec and OperationArguments from the // original request. const originalClientRequestSymbol = Symbol.for("@azure/core-client original request"); -const passThroughProps = new Set([ - "url", - "method", - "withCredentials", - "timeout", - "requestId", - "abortSignal", - "body", - "formData", - "onDownloadProgress", - "onUploadProgress", - "proxySettings", - "streamResponseStatusCodes", - "agent", - "requestOverrides", -]); function toPipelineRequest(webResource, options = {}) { const compatWebResource = webResource; const request = compatWebResource[util_originalRequestSymbol]; @@ -51814,7 +51818,23 @@ function toWebResourceLike(request, options) { if (prop === "keepAlive") { request.disableKeepAlive = !value; } - if (typeof prop === "string" && passThroughProps.has(prop)) { + const passThroughProps = [ + "url", + "method", + "withCredentials", + "timeout", + "requestId", + "abortSignal", + "body", + "formData", + "onDownloadProgress", + "onUploadProgress", + "proxySettings", + "streamResponseStatusCodes", + "agent", + "requestOverrides", + ]; + if (typeof prop === "string" && passThroughProps.includes(prop)) { request[prop] = value; } return Reflect.set(target, prop, value, receiver); @@ -53074,26 +53094,19 @@ class Matcher { ;// CONCATENATED MODULE: ./node_modules/fast-xml-builder/src/util.js -// String(val)/val.toString() drop the sign of -0 (e.g. String(-0) === '0'), silently -// corrupting a round-tripped negative-zero value. XML has no separate int/float syntax, -// so this is the single place every raw value gets turned into text. -function valToStr(val) { - return typeof val === 'number' && Object.is(val, -0) ? '-0' : String(val) -} - function safeComment(val) { - return valToStr(val) + return String(val) .replace(/--/g, '- -') // -- is illegal anywhere in comment content .replace(/--/g, '- -') // handle the scenario when 2 consiucative dashes appears .replace(/-$/, '- '); // trailing - would form -- with the closing --> } function safeCdata(val) { - return valToStr(val).replace(/\]\]>/g, ']]]]>') + return String(val).replace(/\]\]>/g, ']]]]>') } function escapeAttribute(val) { - return valToStr(val).replace(/"/g, '"').replace(/'/g, ''') + return String(val).replace(/"/g, '"').replace(/'/g, ''') } ;// CONCATENATED MODULE: ./node_modules/xml-naming/src/index.js /** @@ -53208,36 +53221,8 @@ const buildRegexes = (startChar, char, flags = '') => { const regexes10 = buildRegexes(nameStartChar10, nameChar10); // no /u — BMP only const regexes11 = buildRegexes(nameStartChar11, nameChar11, 'u'); // /u — enables \u{10000}-\u{EFFFF} -// --------------------------------------------------------------------------- -// ASCII-only fast path (opt-in, off by default) -// -// The XML 1.0 vs 1.1 NameStartChar/NameChar productions differ *only* in -// their non-ASCII ranges (merged vs split Latin-1 ranges, \u0487, and -// supplementary planes). Restricted to ASCII, both versions collapse to the -// same character classes, so a single regex pair covers both xmlVersion -// values — no /u flag needed. -// -// Rationale: unicode-aware regexes (the /u flag, required for XML 1.1's -// supplementary-plane range) are measurably slower in V8 than plain -// non-unicode regexes on the same input, even when the input is pure ASCII. -// For the common case — HTML/SVG ids, XML tags — names are ASCII, so callers -// who know this can opt in to skip the unicode-aware matching path entirely. -// This is a real but *conditional* win: mainly for XML 1.1 input (avoids /u), -// or at scale where the larger unicode character classes add engine -// overhead. It also changes behaviour (rejects legitimate non-ASCII XML -// 1.0/1.1 names), so it must never be silently enabled — hence off by -// default. -// --------------------------------------------------------------------------- - -const nameStartCharAscii = ':A-Za-z_'; -const nameCharAscii = nameStartCharAscii + '\\-\\.\\d'; - -const regexesAscii = buildRegexes(nameStartCharAscii, nameCharAscii); // no /u — ASCII only - -const getRegexes = (xmlVersion = '1.0', asciiOnly = false) => { - if (asciiOnly) return regexesAscii; - return xmlVersion === '1.1' ? regexes11 : regexes10; -}; +const getRegexes = (xmlVersion = '1.0') => + xmlVersion === '1.1' ? regexes11 : regexes10; // --------------------------------------------------------------------------- // Boolean validators @@ -53247,131 +53232,57 @@ const getRegexes = (xmlVersion = '1.0', asciiOnly = false) => { * Returns true if the string is a valid XML Name. * Colons are allowed anywhere (Name production). * Used for: DOCTYPE entity names, notation names, DTD element declarations. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const src_name = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).name.test(str); +const src_name = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).name.test(str); /** * Returns true if the string is a valid NCName (Non-Colonized Name). * Colons are not permitted. * Used for: namespace prefixes, local names, SVG id attributes. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const ncName = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).ncName.test(str); +const ncName = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).ncName.test(str); /** * Returns true if the string is a valid QName (Qualified Name). * Allows exactly one colon as a prefix separator: prefix:localName. * Used for: element and attribute names in namespace-aware XML/SVG. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const qName = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).qName.test(str); +const qName = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).qName.test(str); /** * Returns true if the string is a valid NMToken. * Like Name but no restriction on the first character. * Used for: DTD NMTOKEN attribute values. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const nmToken = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).nmToken.test(str); +const nmToken = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).nmToken.test(str); /** * Returns true if the string is a valid NMTokens value. * A whitespace-separated list of NMToken values. * Used for: DTD NMTOKENS attribute values. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const nmTokens = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).nmTokens.test(str); - -// --------------------------------------------------------------------------- -// Memoized validator factory -// -// Real documents reuse a small vocabulary of tag/attribute names across many -// siblings (e.g. `id`, `class`, `href` repeated across hundreds of elements). -// The plain boolean validators above re-run the regex on every call -// regardless of repeats. `createValidator` returns a closure with a private -// string -> boolean cache, so repeated names after the first become O(1) -// lookups instead of regex tests. -// -// - opts (xmlVersion, asciiOnly) are fixed at creation time, so the regex is -// resolved once, not on every call. -// - The cache is private to the returned closure — no shared/global state, -// no cross-caller pollution. -// - `maxCacheSize` bounds memory: once the cache reaches this many entries, -// it stops accepting new ones (existing entries keep serving hits; new -// misses just fall through to the regex, uncached). This avoids unbounded -// growth against adversarial/high-cardinality input (e.g. validating -// attacker-supplied names with no repeats) without the cost/complexity of -// a full LRU, and without the perf cliff of reset-and-refill thrashing. -// - Call `.reset()` on the returned function to clear the cache manually -// (e.g. between unrelated parse calls). -// --------------------------------------------------------------------------- - -const PRODUCTIONS = ['name', 'ncName', 'qName', 'nmToken', 'nmTokens']; - -/** - * Returns a memoized boolean validator function for a single production, - * with opts fixed at creation time. - * - * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean, maxCacheSize?: number }} [opts] - * maxCacheSize: max number of distinct strings to cache (default 2048). - * Once reached, new strings are validated but not cached; existing cached - * entries keep being served. - * @returns {((str: string) => boolean) & { reset: () => void }} - */ -const createValidator = (production, { xmlVersion = '1.0', asciiOnly = false, maxCacheSize = 2048 } = {}) => { - if (!PRODUCTIONS.includes(production)) { - throw new TypeError( - `Unknown production "${production}". Must be one of: ${PRODUCTIONS.join(', ')}` - ); - } - - const regex = getRegexes(xmlVersion, asciiOnly)[production]; - let cache = new Map(); - - const validator = (str) => { - const cached = cache.get(str); - if (cached !== undefined) return cached; - - const result = regex.test(str); - if (cache.size < maxCacheSize) cache.set(str, result); - return result; - }; - - validator.reset = () => { cache = new Map(); }; - - return validator; -}; +const nmTokens = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).nmTokens.test(str); // --------------------------------------------------------------------------- // Diagnostic validator // --------------------------------------------------------------------------- +const PRODUCTIONS = (/* unused pure expression or super */ null && (['name', 'ncName', 'qName', 'nmToken', 'nmTokens'])); + /** * Validates a string against a named production and returns a detailed result. * * @param {string} str * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * @param {{ xmlVersion?: '1.0'|'1.1' }} [opts] * @returns {{ valid: boolean, production: string, input: string, reason?: string, position?: number }} */ -const validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = {}) => { +const validate = (str, production, { xmlVersion = '1.0' } = {}) => { if (!PRODUCTIONS.includes(production)) { throw new TypeError( `Unknown production "${production}". Must be one of: ${PRODUCTIONS.join(', ')}` @@ -53379,20 +53290,13 @@ const validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = { } const validators = { name: src_name, ncName, qName, nmToken, nmTokens }; - const isValid = validators[production](str, { xmlVersion, asciiOnly }); + const isValid = validators[production](str, { xmlVersion }); if (isValid) return { valid: true, production, input: str }; let reason = 'Does not match the production rules'; let position; - // Diagnostic fallback char checks must mirror the same character set the - // boolean validator above used, or the reported reason/position could - // contradict the `valid: false` result (e.g. flagging a char as illegal - // that the unicode-aware check would have accepted). - const startCharPattern = asciiOnly ? /^[:A-Za-z_]/ : /^[:A-Za-z_\u00C0-\uFFFD]/; - const namePattern = asciiOnly ? /[\w\-\\.:]/ : /[\w\-\\.:\u00B7\u00C0-\uFFFD]/; - if (str.length === 0) { reason = 'Input is empty'; } else if (production === 'ncName' && str.includes(':')) { @@ -53409,13 +53313,13 @@ const validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = { position = str.lastIndexOf(':'); } else if ( ['name', 'ncName', 'qName'].includes(production) && - !startCharPattern.test(str[0]) + !/^[:A-Za-z_\u00C0-\uFFFD]/.test(str[0]) ) { reason = `First character "${str[0]}" is not a valid NameStartChar`; position = 0; } else { for (let i = 0; i < str.length; i++) { - if (!namePattern.test(str[i])) { + if (!/[\w\-\\.:\u00B7\u00C0-\uFFFD]/.test(str[i])) { reason = `Character "${str[i]}" at position ${i} is not a valid NameChar`; position = i; break; @@ -53435,7 +53339,7 @@ const validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = { * * @param {string[]} strings * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * @param {{ xmlVersion?: '1.0'|'1.1' }} [opts] * @returns {Array<{ valid: boolean, production: string, input: string, reason?: string, position?: number }>} */ const validateAll = (strings, production, opts = {}) => @@ -53450,12 +53354,10 @@ const validateAll = (strings, production, opts = {}) => * * @param {string} str * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production - * @param {{ replacement?: string, asciiOnly?: boolean }} [opts] - * asciiOnly: also replace any non-ASCII character, not just XML-illegal - * ones (default false). + * @param {{ replacement?: string }} [opts] * @returns {string} */ -const sanitize = (str, production = 'name', { replacement = '_', asciiOnly = false } = {}) => { +const sanitize = (str, production = 'name', { replacement = '_' } = {}) => { if (!str) return replacement; let result = str; @@ -53466,8 +53368,7 @@ const sanitize = (str, production = 'name', { replacement = '_', asciiOnly = fal } // Replace illegal characters - const allowedCharPattern = asciiOnly ? /[^\w\-\.:]/g : /[^\w\-\.:\u00B7\u00C0-\uFFFD]/g; - result = result.replace(allowedCharPattern, replacement); + result = result.replace(/[^\w\-\.:\u00B7\u00C0-\uFFFD]/g, replacement); // Fix invalid start character for Name / NCName / QName if (production !== 'nmToken' && production !== 'nmTokens') { @@ -53517,11 +53418,11 @@ function detectXmlVersionFromArray(jArray, options) { * @param {boolean} isAttribute - true when resolving an attribute name * @param {object} options * @param {Matcher} matcher - current matcher state (readonly from callback perspective) - * @param {function} qNameValidator - function to validate tag names + * @param {string} xmlVersion - '1.0' or '1.1', forwarded to xml-naming */ -function resolveTagName(name, isAttribute, options, matcher, qNameValidator) { +function resolveTagName(name, isAttribute, options, matcher, xmlVersion) { if (!options.sanitizeName) return name; - if (qNameValidator(name)) return name; + if (qName(name, { xmlVersion })) return name; return options.sanitizeName(name, { isAttribute, matcher: matcher.readOnly() }); } @@ -53551,14 +53452,14 @@ function toXml(jArray, options) { // Detect XML version for use in name validation const xmlVersion = detectXmlVersionFromArray(jArray, options); - const qNameValidator = createValidator('qName', { xmlVersion }); + // Initialize matcher for path tracking const matcher = new Matcher(); - return arrToStr(jArray, options, indentation, matcher, stopNodeExpressions, qNameValidator); + return arrToStr(jArray, options, indentation, matcher, stopNodeExpressions, xmlVersion); } -function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qNameValidator) { +function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, xmlVersion) { let xmlStr = ""; let isPreviousElementTag = false; @@ -53569,7 +53470,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName if (!Array.isArray(arr)) { // Non-array values (e.g. string tag values) should be treated as text content if (arr !== undefined && arr !== null) { - let text = valToStr(arr); + let text = arr.toString(); text = replaceEntitiesValue(text, options); return text; } @@ -53591,7 +53492,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName // Resolve tag name (may transform it; may throw for invalid names) const tagName = isSpecialName ? rawTagName - : resolveTagName(rawTagName, false, options, matcher, qNameValidator); + : resolveTagName(rawTagName, false, options, matcher, xmlVersion); // Extract attributes from ":@" property const attrValues = extractAttributeValues(tagObj[":@"], options); @@ -53608,7 +53509,6 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName tagText = options.tagValueProcessor(tagName, tagText); tagText = replaceEntitiesValue(tagText, options); } - tagText = valToStr(tagText); if (isPreviousElementTag) { xmlStr += indentation; } @@ -53634,7 +53534,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName matcher.pop(); continue; } else if (tagName[0] === "?") { - const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, qNameValidator); + const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, xmlVersion); const tempInd = tagName === "?xml" ? "" : indentation; // Text node content on PI/XML declaration tags is intentionally ignored. // Only attributes are valid on these tags per the XML spec. @@ -53650,7 +53550,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName } // Pass isStopNode to attr_to_str so attributes are also not processed for stopNodes - const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, qNameValidator); + const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, xmlVersion); const tagStart = indentation + `<${tagName}${attStr}`; // If this is a stopNode, get raw content without processing @@ -53658,7 +53558,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName if (isStopNode) { tagValue = orderedJs2Xml_getRawContent(tagObj[rawTagName], options); } else { - tagValue = arrToStr(tagObj[rawTagName], options, newIdentation, matcher, stopNodeExpressions, qNameValidator); + tagValue = arrToStr(tagObj[rawTagName], options, newIdentation, matcher, stopNodeExpressions, xmlVersion); } if (options.unpairedTags.indexOf(tagName) !== -1) { @@ -53717,7 +53617,7 @@ function orderedJs2Xml_getRawContent(arr, options) { if (!Array.isArray(arr)) { // Non-array values return as-is if (arr !== undefined && arr !== null) { - return valToStr(arr); + return arr.toString(); } return ""; } @@ -53729,7 +53629,7 @@ function orderedJs2Xml_getRawContent(arr, options) { if (tagName === options.textNodeName) { // Raw text content - NO processing, NO entity replacement - content += valToStr(item[tagName]); + content += item[tagName]; } else if (tagName === options.cdataPropName) { // CDATA content content += item[tagName][0][options.textNodeName]; @@ -53787,7 +53687,7 @@ function propName(obj) { * Build attribute string, resolving attribute names through sanitizeName when configured. * Accepts matcher so the callback has path context. */ -function attr_to_str(attrMap, options, isStopNode, matcher, qNameValidator) { +function attr_to_str(attrMap, options, isStopNode, matcher, xmlVersion) { let attrStr = ""; if (attrMap && !options.ignoreAttributes) { for (let attr in attrMap) { @@ -53797,7 +53697,7 @@ function attr_to_str(attrMap, options, isStopNode, matcher, qNameValidator) { const cleanAttrName = attr.substr(options.attributeNamePrefix.length); const resolvedAttrName = isStopNode ? cleanAttrName // stopNodes are raw — skip sanitizeName for attr names too - : resolveTagName(cleanAttrName, true, options, matcher, qNameValidator); + : resolveTagName(cleanAttrName, true, options, matcher, xmlVersion); let attrVal; if (isStopNode) { @@ -53991,11 +53891,11 @@ function detectXmlVersionFromObj(jObj, options) { * @param {boolean} isAttribute - true when resolving an attribute name * @param {object} options * @param {Matcher} matcher - current matcher state (readonly from callback perspective) - * @param {function} qNameValidator - function to validate tag names + * @param {string} xmlVersion - '1.0' or '1.1', forwarded to xml-naming */ -function fxb_resolveTagName(name, isAttribute, options, matcher, qNameValidator) { +function fxb_resolveTagName(name, isAttribute, options, matcher, xmlVersion) { if (!options.sanitizeName) return name; - if (qNameValidator(name)) return name; + if (qName(name, { xmlVersion })) return name; return options.sanitizeName(name, { isAttribute, matcher: matcher.readOnly() }); } @@ -54011,12 +53911,11 @@ Builder.prototype.build = function (jObj) { // Initialize matcher for path tracking const matcher = new Matcher(); const xmlVersion = detectXmlVersionFromObj(jObj, this.options); - const qNameValidator = createValidator('qName', { xmlVersion }); - return this.j2x(jObj, 0, matcher, qNameValidator).val; + return this.j2x(jObj, 0, matcher, xmlVersion).val; } }; -Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { +Builder.prototype.j2x = function (jObj, level, matcher, xmlVersion) { let attrStr = ''; let val = ''; if (this.options.maxNestedTags && matcher.getDepth() >= this.options.maxNestedTags) { @@ -54044,7 +53943,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { const resolvedKey = isSpecialKey ? key - : fxb_resolveTagName(key, false, this.options, matcher, qNameValidator); + : fxb_resolveTagName(key, false, this.options, matcher, xmlVersion); if (typeof jObj[key] === 'undefined') { // supress undefined node only if it is not an attribute @@ -54069,12 +53968,12 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { const attr = this.isAttribute(key); if (attr && !this.ignoreAttributesFn(attr, jPath)) { // Resolve the attribute name through sanitizeName - const resolvedAttr = fxb_resolveTagName(attr, true, this.options, matcher, qNameValidator); - attrStr += this.buildAttrPairStr(resolvedAttr, valToStr(jObj[key]), isCurrentStopNode); + const resolvedAttr = fxb_resolveTagName(attr, true, this.options, matcher, xmlVersion); + attrStr += this.buildAttrPairStr(resolvedAttr, '' + jObj[key], isCurrentStopNode); } else if (!attr) { //tag value if (key === this.options.textNodeName) { - let newval = this.options.tagValueProcessor(key, valToStr(jObj[key])); + let newval = this.options.tagValueProcessor(key, '' + jObj[key]); val += this.replaceEntitiesValue(newval); } else { // Check if this is a stopNode before building @@ -54084,7 +53983,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { if (isStopNode) { // Build as raw content without encoding - const textValue = valToStr(jObj[key]); + const textValue = '' + jObj[key]; if (textValue === '') { val += this.indentate(level) + '<' + resolvedKey + this.closeTag(resolvedKey) + this.tagEndChar; } else { @@ -54111,7 +54010,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { if (this.options.oneListGroup) { // Push tag to matcher before recursive call matcher.push(resolvedKey); - const result = this.j2x(item, level + 1, matcher, qNameValidator); + const result = this.j2x(item, level + 1, matcher, xmlVersion); // Pop tag from matcher after recursive call matcher.pop(); @@ -54120,13 +54019,12 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { listTagAttr += result.attrStr } } else { - listTagVal += this.processTextOrObjNode(item, resolvedKey, level, matcher, qNameValidator) + listTagVal += this.processTextOrObjNode(item, resolvedKey, level, matcher, xmlVersion) } } else { if (this.options.oneListGroup) { let textValue = this.options.tagValueProcessor(resolvedKey, item); textValue = this.replaceEntitiesValue(textValue); - textValue = valToStr(textValue); listTagVal += textValue; } else { // Check if this is a stopNode before building @@ -54136,7 +54034,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { if (isStopNode) { // Build as raw content without encoding - const textValue = valToStr(item); + const textValue = '' + item; if (textValue === '') { listTagVal += this.indentate(level) + '<' + resolvedKey + this.closeTag(resolvedKey) + this.tagEndChar; } else { @@ -54159,11 +54057,11 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { const L = Ks.length; for (let j = 0; j < L; j++) { // Resolve attribute names inside attributesGroupName - const resolvedAttr = fxb_resolveTagName(Ks[j], true, this.options, matcher, qNameValidator); - attrStr += this.buildAttrPairStr(resolvedAttr, valToStr(jObj[key][Ks[j]]), isCurrentStopNode); + const resolvedAttr = fxb_resolveTagName(Ks[j], true, this.options, matcher, xmlVersion); + attrStr += this.buildAttrPairStr(resolvedAttr, '' + jObj[key][Ks[j]], isCurrentStopNode); } } else { - val += this.processTextOrObjNode(jObj[key], resolvedKey, level, matcher, qNameValidator) + val += this.processTextOrObjNode(jObj[key], resolvedKey, level, matcher, xmlVersion) } } } @@ -54172,7 +54070,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { Builder.prototype.buildAttrPairStr = function (attrName, val, isStopNode) { if (!isStopNode) { - val = this.options.attributeValueProcessor(attrName, valToStr(val)); + val = this.options.attributeValueProcessor(attrName, '' + val); val = this.replaceEntitiesValue(val); } if (this.options.suppressBooleanAttributes && val === "true") { @@ -54180,7 +54078,7 @@ Builder.prototype.buildAttrPairStr = function (attrName, val, isStopNode) { } else return ' ' + attrName + '="' + escapeAttribute(val) + '"'; } -function processTextOrObjNode(object, key, level, matcher, qNameValidator) { +function processTextOrObjNode(object, key, level, matcher, xmlVersion) { // Extract attributes to pass to matcher const attrValues = this.extractAttributes(object); @@ -54198,7 +54096,7 @@ function processTextOrObjNode(object, key, level, matcher, qNameValidator) { return this.buildObjectNode(rawContent, key, attrStr, level); } - const result = this.j2x(object, level + 1, matcher, qNameValidator); + const result = this.j2x(object, level + 1, matcher, xmlVersion); // Pop tag from matcher after recursion matcher.pop(); @@ -54327,9 +54225,7 @@ Builder.prototype.buildAttributesForStopNode = function (obj) { if (val === true && this.options.suppressBooleanAttributes) { attrStr += ' ' + cleanKey; } else { - // stopNode content is raw, but the quote delimiter is always escaped - // so a quote in the value cannot break out of the attribute (see orderedJs2Xml attr_to_str) - attrStr += ' ' + cleanKey + '="' + escapeAttribute(val) + '"'; + attrStr += ' ' + cleanKey + '="' + val + '"'; // No encoding for stopNode } } } else { @@ -54342,9 +54238,7 @@ Builder.prototype.buildAttributesForStopNode = function (obj) { if (val === true && this.options.suppressBooleanAttributes) { attrStr += ' ' + attr; } else { - // stopNode content is raw, but the quote delimiter is always escaped - // so a quote in the value cannot break out of the attribute (see orderedJs2Xml attr_to_str) - attrStr += ' ' + attr + '="' + escapeAttribute(val) + '"'; + attrStr += ' ' + attr + '="' + val + '"'; // No encoding for stopNode } } } @@ -54375,7 +54269,7 @@ Builder.prototype.buildObjectNode = function (val, key, attrStr, level) { if ((attrStr || attrStr === '') && val.indexOf('<') === -1) { return (this.indentate(level) + '<' + key + attrStr + piClosingChar + '>' + val + tagEndExp); } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) { - return this.indentate(level) + `` + this.newLine; + return this.indentate(level) + `` + this.newLine; } else { return ( this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar + @@ -54432,10 +54326,6 @@ Builder.prototype.buildTextValNode = function (val, key, attrStr, level, matcher // Normal processing: apply tagValueProcessor and entity replacement let textValue = this.options.tagValueProcessor(key, val); textValue = this.replaceEntitiesValue(textValue); - // tagValueProcessor may return the raw value unchanged (default is identity), and - // replaceEntitiesValue no-ops on non-strings, so a plain number can still reach here; - // stringify it now, sign-preserving, before it's implicitly ToString'd below. - textValue = valToStr(textValue); if (textValue === '') { return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar; @@ -55170,32 +55060,401 @@ class XmlNode { this.child.push({ [node.tagname]: node.child }); } // if requested, add the startIndex - this.addStartIndex(startIndex); - } - - addStartIndex(startIndex) { if (startIndex !== undefined) { // Note: for now we just overwrite the metadata. If we had more complex metadata, // we might need to do an object append here: metadata = { ...metadata, startIndex } this.child[this.child.length - 1][METADATA_SYMBOL] = { startIndex }; } } - - addEndIndex(endIndex) { - const lastChild = this.child[this.child.length - 1]; - // endIndex is write-once: when updateTag drops a node, the last child is a - // previously completed sibling whose endIndex must not be overwritten - if (lastChild !== undefined && lastChild[METADATA_SYMBOL] !== undefined - && lastChild[METADATA_SYMBOL].endIndex === undefined) { - lastChild[METADATA_SYMBOL].endIndex = endIndex; - } - } /** symbol used for metadata */ static getMetaDataSymbol() { return METADATA_SYMBOL; } } +;// CONCATENATED MODULE: ./node_modules/fast-xml-parser/node_modules/xml-naming/src/index.js +/** + * xml-naming + * Validates XML Name productions as defined in the XML 1.0 and 1.1 specifications. + * Covers: Name, NCName, QName, NMToken, NMTokens + * + * XML 1.0 spec: https://www.w3.org/TR/xml/#NT-Name + * XML 1.1 spec: https://www.w3.org/TR/xml11/#NT-NameStartChar + * XML NS spec: https://www.w3.org/TR/xml-names/#NT-NCName + */ + +// --------------------------------------------------------------------------- +// Character class strings — XML 1.0 +// +// NameStartChar ::= ":" | [A-Z] | "_" | [a-z] +// | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] +// | [#x370-#x37D] | [#x37F-#x1FFF] <- split to exclude #x0487 +// | [#x200C-#x200D] +// | [#x2070-#x218F] | [#x2C00-#x2FEF] +// | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] +// +// NameChar ::= NameStartChar | "-" | "." | [0-9] +// | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] +// +// Note: \u0487 (Combining Cyrillic Millions Sign) was added in Unicode 4.0, +// after XML 1.0 was defined against Unicode 2.0. It falls inside the range +// \u037F-\u1FFF but must be excluded. We split that range into +// \u037F-\u0486 and \u0488-\u1FFF to exclude it explicitly. +// --------------------------------------------------------------------------- + +const src_nameStartChar10 = + ':A-Za-z_' + + '\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF' + + '\u0370-\u037D' + + '\u037F-\u0486\u0488-\u1FFF' + // split to exclude \u0487 + '\u200C-\u200D' + + '\u2070-\u218F' + + '\u2C00-\u2FEF' + + '\u3001-\uD7FF' + + '\uF900-\uFDCF' + + '\uFDF0-\uFFFD'; + +const src_nameChar10 = + src_nameStartChar10 + + '\\-\\.\\d' + + '\u00B7' + + '\u0300-\u036F' + + '\u203F-\u2040'; + +// --------------------------------------------------------------------------- +// Character class strings — XML 1.1 +// +// Differences from XML 1.0: +// +// NameStartChar: +// 1.0 has split ranges: \u00C0-\u00D6, \u00D8-\u00F6, \u00F8-\u02FF +// 1.1 merges them into: \u00C0-\u02FF +// (\u00D7 x and \u00F7 / are division symbols, excluded in both versions) +// +// 1.0 tops out at \uFFFD (BMP only) +// 1.1 adds \u{10000}-\u{EFFFF} (supplementary planes) +// These require the /u flag on the RegExp — see buildRegexes below. +// +// NameChar: +// 1.1 adds \u0487 (Combining Cyrillic Millions Sign, added in Unicode 4.0) +// --------------------------------------------------------------------------- + +const src_nameStartChar11 = + ':A-Za-z_' + + '\u00C0-\u02FF' + // merged — 1.0 had three split ranges here + '\u0370-\u037D' + + '\u037F-\u0486\u0488-\u1FFF' + // split to exclude \u0487 (combining mark, never a NameStartChar) + '\u200C-\u200D' + + '\u2070-\u218F' + + '\u2C00-\u2FEF' + + '\u3001-\uD7FF' + + '\uF900-\uFDCF' + + '\uFDF0-\uFFFD' + + '\u{10000}-\u{EFFFF}'; // supplementary planes — REQUIRES /u flag on RegExp + +const src_nameChar11 = + src_nameStartChar11 + + '\\-\\.\\d' + + '\u00B7' + + '\u0300-\u036F' + + '\u0487' + // Combining Cyrillic Millions Sign — valid in 1.1, not 1.0 + '\u203F-\u2040'; + +// --------------------------------------------------------------------------- +// Regex builders +// +// XML 1.0 regexes: no flags — BMP only, standard JS regex behaviour. +// XML 1.1 regexes: /u flag — required for \u{10000}-\u{EFFFF} to match actual +// supplementary code points rather than lone surrogates (which are illegal XML). +// --------------------------------------------------------------------------- + +const src_buildRegexes = (startChar, char, flags = '') => { + const ncStart = startChar.replace(':', ''); + const ncChar = char.replace(':', ''); + const ncNamePat = `[${ncStart}][${ncChar}]*`; + + return { + name: new RegExp(`^[${startChar}][${char}]*$`, flags), + ncName: new RegExp(`^${ncNamePat}$`, flags), + qName: new RegExp(`^${ncNamePat}(?::${ncNamePat})?$`, flags), + nmToken: new RegExp(`^[${char}]+$`, flags), + nmTokens: new RegExp(`^[${char}]+(?:\\s+[${char}]+)*$`, flags), + }; +}; + +const src_regexes10 = src_buildRegexes(src_nameStartChar10, src_nameChar10); // no /u — BMP only +const src_regexes11 = src_buildRegexes(src_nameStartChar11, src_nameChar11, 'u'); // /u — enables \u{10000}-\u{EFFFF} + +// --------------------------------------------------------------------------- +// ASCII-only fast path (opt-in, off by default) +// +// The XML 1.0 vs 1.1 NameStartChar/NameChar productions differ *only* in +// their non-ASCII ranges (merged vs split Latin-1 ranges, \u0487, and +// supplementary planes). Restricted to ASCII, both versions collapse to the +// same character classes, so a single regex pair covers both xmlVersion +// values — no /u flag needed. +// +// Rationale: unicode-aware regexes (the /u flag, required for XML 1.1's +// supplementary-plane range) are measurably slower in V8 than plain +// non-unicode regexes on the same input, even when the input is pure ASCII. +// For the common case — HTML/SVG ids, XML tags — names are ASCII, so callers +// who know this can opt in to skip the unicode-aware matching path entirely. +// This is a real but *conditional* win: mainly for XML 1.1 input (avoids /u), +// or at scale where the larger unicode character classes add engine +// overhead. It also changes behaviour (rejects legitimate non-ASCII XML +// 1.0/1.1 names), so it must never be silently enabled — hence off by +// default. +// --------------------------------------------------------------------------- + +const nameStartCharAscii = ':A-Za-z_'; +const nameCharAscii = nameStartCharAscii + '\\-\\.\\d'; + +const regexesAscii = src_buildRegexes(nameStartCharAscii, nameCharAscii); // no /u — ASCII only + +const src_getRegexes = (xmlVersion = '1.0', asciiOnly = false) => { + if (asciiOnly) return regexesAscii; + return xmlVersion === '1.1' ? src_regexes11 : src_regexes10; +}; + +// --------------------------------------------------------------------------- +// Boolean validators +// --------------------------------------------------------------------------- + +/** + * Returns true if the string is a valid XML Name. + * Colons are allowed anywhere (Name production). + * Used for: DOCTYPE entity names, notation names, DTD element declarations. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const xml_naming_src_name = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).name.test(str); + +/** + * Returns true if the string is a valid NCName (Non-Colonized Name). + * Colons are not permitted. + * Used for: namespace prefixes, local names, SVG id attributes. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const src_ncName = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).ncName.test(str); + +/** + * Returns true if the string is a valid QName (Qualified Name). + * Allows exactly one colon as a prefix separator: prefix:localName. + * Used for: element and attribute names in namespace-aware XML/SVG. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const src_qName = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).qName.test(str); + +/** + * Returns true if the string is a valid NMToken. + * Like Name but no restriction on the first character. + * Used for: DTD NMTOKEN attribute values. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const src_nmToken = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).nmToken.test(str); + +/** + * Returns true if the string is a valid NMTokens value. + * A whitespace-separated list of NMToken values. + * Used for: DTD NMTOKENS attribute values. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const src_nmTokens = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).nmTokens.test(str); + +// --------------------------------------------------------------------------- +// Memoized validator factory +// +// Real documents reuse a small vocabulary of tag/attribute names across many +// siblings (e.g. `id`, `class`, `href` repeated across hundreds of elements). +// The plain boolean validators above re-run the regex on every call +// regardless of repeats. `createValidator` returns a closure with a private +// string -> boolean cache, so repeated names after the first become O(1) +// lookups instead of regex tests. +// +// - opts (xmlVersion, asciiOnly) are fixed at creation time, so the regex is +// resolved once, not on every call. +// - The cache is private to the returned closure — no shared/global state, +// no cross-caller pollution. +// - `maxCacheSize` bounds memory: once the cache reaches this many entries, +// it stops accepting new ones (existing entries keep serving hits; new +// misses just fall through to the regex, uncached). This avoids unbounded +// growth against adversarial/high-cardinality input (e.g. validating +// attacker-supplied names with no repeats) without the cost/complexity of +// a full LRU, and without the perf cliff of reset-and-refill thrashing. +// - Call `.reset()` on the returned function to clear the cache manually +// (e.g. between unrelated parse calls). +// --------------------------------------------------------------------------- + +const src_PRODUCTIONS = (/* unused pure expression or super */ null && (['name', 'ncName', 'qName', 'nmToken', 'nmTokens'])); + +/** + * Returns a memoized boolean validator function for a single production, + * with opts fixed at creation time. + * + * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean, maxCacheSize?: number }} [opts] + * maxCacheSize: max number of distinct strings to cache (default 2048). + * Once reached, new strings are validated but not cached; existing cached + * entries keep being served. + * @returns {((str: string) => boolean) & { reset: () => void }} + */ +const createValidator = (production, { xmlVersion = '1.0', asciiOnly = false, maxCacheSize = 2048 } = {}) => { + if (!src_PRODUCTIONS.includes(production)) { + throw new TypeError( + `Unknown production "${production}". Must be one of: ${src_PRODUCTIONS.join(', ')}` + ); + } + + const regex = src_getRegexes(xmlVersion, asciiOnly)[production]; + let cache = new Map(); + + const validator = (str) => { + const cached = cache.get(str); + if (cached !== undefined) return cached; + + const result = regex.test(str); + if (cache.size < maxCacheSize) cache.set(str, result); + return result; + }; + + validator.reset = () => { cache = new Map(); }; + + return validator; +}; + +// --------------------------------------------------------------------------- +// Diagnostic validator +// --------------------------------------------------------------------------- + +/** + * Validates a string against a named production and returns a detailed result. + * + * @param {string} str + * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * @returns {{ valid: boolean, production: string, input: string, reason?: string, position?: number }} + */ +const src_validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = {}) => { + if (!src_PRODUCTIONS.includes(production)) { + throw new TypeError( + `Unknown production "${production}". Must be one of: ${src_PRODUCTIONS.join(', ')}` + ); + } + + const validators = { name: xml_naming_src_name, ncName: src_ncName, qName: src_qName, nmToken: src_nmToken, nmTokens: src_nmTokens }; + const isValid = validators[production](str, { xmlVersion, asciiOnly }); + + if (isValid) return { valid: true, production, input: str }; + + let reason = 'Does not match the production rules'; + let position; + + // Diagnostic fallback char checks must mirror the same character set the + // boolean validator above used, or the reported reason/position could + // contradict the `valid: false` result (e.g. flagging a char as illegal + // that the unicode-aware check would have accepted). + const startCharPattern = asciiOnly ? /^[:A-Za-z_]/ : /^[:A-Za-z_\u00C0-\uFFFD]/; + const namePattern = asciiOnly ? /[\w\-\\.:]/ : /[\w\-\\.:\u00B7\u00C0-\uFFFD]/; + + if (str.length === 0) { + reason = 'Input is empty'; + } else if (production === 'ncName' && str.includes(':')) { + position = str.indexOf(':'); + reason = 'Colon is not allowed in NCName'; + } else if (production === 'qName' && str.startsWith(':')) { + reason = 'QName cannot start with a colon'; + position = 0; + } else if (production === 'qName' && str.endsWith(':')) { + reason = 'QName cannot end with a colon'; + position = str.length - 1; + } else if (production === 'qName' && (str.match(/:/g) || []).length > 1) { + reason = 'QName can have at most one colon'; + position = str.lastIndexOf(':'); + } else if ( + ['name', 'ncName', 'qName'].includes(production) && + !startCharPattern.test(str[0]) + ) { + reason = `First character "${str[0]}" is not a valid NameStartChar`; + position = 0; + } else { + for (let i = 0; i < str.length; i++) { + if (!namePattern.test(str[i])) { + reason = `Character "${str[i]}" at position ${i} is not a valid NameChar`; + position = i; + break; + } + } + } + + return { valid: false, production, input: str, reason, position }; +}; + +// --------------------------------------------------------------------------- +// Batch validator +// --------------------------------------------------------------------------- + +/** + * Validates an array of strings against a named production. + * + * @param {string[]} strings + * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * @returns {Array<{ valid: boolean, production: string, input: string, reason?: string, position?: number }>} + */ +const src_validateAll = (strings, production, opts = {}) => + strings.map(str => src_validate(str, production, opts)); + +// --------------------------------------------------------------------------- +// Sanitizer +// --------------------------------------------------------------------------- + +/** + * Transforms an invalid string into the nearest valid XML name for the given production. + * + * @param {string} str + * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production + * @param {{ replacement?: string, asciiOnly?: boolean }} [opts] + * asciiOnly: also replace any non-ASCII character, not just XML-illegal + * ones (default false). + * @returns {string} + */ +const src_sanitize = (str, production = 'name', { replacement = '_', asciiOnly = false } = {}) => { + if (!str) return replacement; + + let result = str; + + // Strip colons for NCName + if (production === 'ncName') { + result = result.replace(/:/g, ''); + } + + // Replace illegal characters + const allowedCharPattern = asciiOnly ? /[^\w\-\.:]/g : /[^\w\-\.:\u00B7\u00C0-\uFFFD]/g; + result = result.replace(allowedCharPattern, replacement); + + // Fix invalid start character for Name / NCName / QName + if (production !== 'nmToken' && production !== 'nmTokens') { + if (/^[\-\.\d]/.test(result)) { + result = replacement + result; + } + } + + return result || replacement; +}; ;// CONCATENATED MODULE: ./node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js @@ -55222,23 +55481,8 @@ class DocTypeReader { i = i + 9; let angleBracketsCount = 1; let hasBody = false, comment = false; - let quoteChar = null; // tracks an open SYSTEM/PUBLIC literal before the '[' body let exp = ""; for (; i < xmlData.length; i++) { - // Inside a quoted external-identifier literal — XML allows '<' - // and '>' as plain data here, so they must not be interpreted - // as DOCTYPE structure until the matching quote closes. - if (quoteChar !== null) { - if (xmlData[i] === quoteChar) quoteChar = null; - exp += xmlData[i]; - continue; - } - if (!hasBody && !comment && (xmlData[i] === '"' || xmlData[i] === "'")) { - quoteChar = xmlData[i]; - exp += xmlData[i]; - continue; - } - if (xmlData[i] === '<' && !comment) { //Determine the tag type if (hasBody && hasSeq(xmlData, "!ENTITY", i)) { i += 7; @@ -55293,7 +55537,7 @@ class DocTypeReader { exp += xmlData[i]; } } - if (quoteChar !== null || angleBracketsCount !== 0) { + if (angleBracketsCount !== 0) { throw new Error(`Unclosed DOCTYPE`); } } else { @@ -55444,7 +55688,7 @@ class DocTypeReader { let elementName = xmlData.substring(startIndex, i); // Validate element name - if (!this.suppressValidationErr && !qName(elementName, { xmlVersion: this.xmlVersion })) { + if (!this.suppressValidationErr && !src_qName(elementName, { xmlVersion: this.xmlVersion })) { throw new Error(`Invalid element name: "${elementName}"`); } @@ -55618,7 +55862,7 @@ function hasSeq(data, seq, i) { } function validateEntityName(name, xmlVersion) { - if (qName(name, { xmlVersion: xmlVersion })) + if (src_qName(name, { xmlVersion: xmlVersion })) return name; else throw new Error(`Invalid entity name ${name}`); @@ -56008,11 +56252,7 @@ function resolveEnotation(str, trimmedStr, options) { */ function trimZeros(numStr) { if (numStr && numStr.indexOf(".") !== -1) {//float - //remove ending zeros without the O(n^2) backtracking that /0+$/ hits - //when the string doesn't end in 0 but has a long internal zero-run - let end = numStr.length; - while (end > 0 && numStr.charCodeAt(end - 1) === 48 /* '0' */) end--; - numStr = numStr.slice(0, end); + numStr = numStr.replace(/0+$/, ""); //remove ending zeros if (numStr === ".") numStr = "0"; else if (numStr[0] === ".") numStr = "0" + numStr; else if (numStr[numStr.length - 1] === ".") numStr = numStr.substring(0, numStr.length - 1); @@ -59488,12 +59728,7 @@ const parseXml = function (xmlData) { this.matcher.pop(); this.isCurrentNodeStopNode = false; // Reset flag when closing tag - //a closing tag with no matching opening tag leaves the stack empty - currentNode = this.tagsNodeStack.pop() || xmlObj;//avoid recursion, set the parent tag scope - - if (options.captureMetaData && currentNode) { - currentNode.addEndIndex(closeIndex + 1); - } + currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope textData = ""; i = closeIndex; } else if (c1 === 63) { //'?' @@ -59519,11 +59754,6 @@ const parseXml = function (xmlData) { childNode[":@"] = attsMap } this.addChild(currentNode, childNode, this.readonlyMatcher, i); - - if (options.captureMetaData) { - // closeIndex points at '?' of the closing '?>' - currentNode.addEndIndex(tagData.closeIndex + 2); - } } @@ -59688,10 +59918,6 @@ const parseXml = function (xmlData) { this.isCurrentNodeStopNode = false; // Reset flag this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex); - - if (options.captureMetaData) { - currentNode.addEndIndex(i + 1); - } } else { //selfClosing tag if (isSelfClosing) { @@ -59702,10 +59928,6 @@ const parseXml = function (xmlData) { childNode[":@"] = prefixedAttrs; } this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex); - - if (options.captureMetaData) { - currentNode.addEndIndex(closeIndex + 1); - } this.matcher.pop(); // Pop self-closing tag this.isCurrentNodeStopNode = false; // Reset flag } @@ -59715,10 +59937,6 @@ const parseXml = function (xmlData) { childNode[":@"] = prefixedAttrs; } this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex); - - if (options.captureMetaData) { - currentNode.addEndIndex(result.closeIndex + 1); - } this.matcher.pop(); // Pop unpaired tag this.isCurrentNodeStopNode = false; // Reset flag i = result.closeIndex; @@ -60353,8 +60571,7 @@ async function parseXML(str, opts = {}) { delete parsedXml["?xml"]; } if (!opts.includeRoot) { - const key = Object.keys(parsedXml)[0]; - if (key !== undefined) { + for (const key of Object.keys(parsedXml)) { const value = parsedXml[key]; return typeof value === "object" ? { ...value } : value; } @@ -60846,12 +61063,43 @@ class BufferScheduler { } } //# sourceMappingURL=BufferScheduler.js.map +;// CONCATENATED MODULE: external "node:module" +const external_node_module_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:module"); +;// CONCATENATED MODULE: external "node:path" +const external_node_path_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:path"); +// EXTERNAL MODULE: external "node:url" +var external_node_url_ = __nccwpck_require__(3136); ;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/crc64.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +// ESM-COMPAT-START (this block is stripped from dist/commonjs by copyJSFiles.cjs) +// In ESM under Node, `require`, `__filename`, and `__dirname` are not defined. +// Synthesize them from `import.meta.url` so the Emscripten Node branch below works as-is. +// Specifiers are held in variables to prevent web bundlers from statically resolving `node:*`. +// The detection check below MUST stay byte-for-byte identical to the Emscripten-generated +// `ENVIRONMENT_IS_NODE` check later in this file; otherwise the polyfill and the Node branch +// can disagree and the ESM `ReferenceError: require is not defined` bug returns. + + + +const __isNode__ = + typeof process === "object" && + typeof process.versions === "object" && + typeof process.versions.node === "string"; +let crc64_require; +let crc64_filename; +let crc64_dirname; +if (__isNode__) { + crc64_require = (0,external_node_module_namespaceObject.createRequire)(import.meta.url); + crc64_filename = (0,external_node_url_.fileURLToPath)(import.meta.url); + crc64_dirname = (0,external_node_path_namespaceObject.dirname)(crc64_filename); +} +// ESM-COMPAT-END + var NativeCRC64 = (() => { var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof crc64_filename !== 'undefined') _scriptDir = _scriptDir || crc64_filename; return ( function(NativeCRC64) { NativeCRC64 = NativeCRC64 || {}; @@ -60957,10 +61205,50 @@ function logExceptionOnExit(e) { if (ENVIRONMENT_IS_NODE) { if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); - // The wasm is base64-embedded (see `binaryInString`) and loaded via `getBinary()`, - // so the Node fs/path read hooks emitted by Emscripten are never exercised and - // have been removed. This keeps the file free of Node built-in imports so it can be - // consumed as-is by web bundlers and by ESM-to-CommonJS bundlers (see issue #39057). + // `require()` is no-op in an ESM module, use `createRequire()` to construct + // the require()` function. This is only necessary for multi-environment + // builds, `-sENVIRONMENT=node` emits a static import declaration instead. + // TODO: Swap all `require()`'s with `import()`'s? + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = crc64_require('fs'); + var nodePath = crc64_require('path'); + + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = nodePath.dirname(scriptDirectory) + '/'; + } else { + scriptDirectory = crc64_dirname + '/'; + } + +// include: node_shell_read.js + + +read_ = (filename, binary) => { + // We need to re-wrap `file://` strings to URLs. Normalizing isn't + // necessary in that case, the path should already be absolute. + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + return fs.readFileSync(filename, binary ? undefined : 'utf8'); +}; + +readBinary = (filename) => { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; +}; + +readAsync = (filename, onload, onerror) => { + // See the comment in the `read_` function. + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + fs.readFile(filename, function(err, data) { + if (err) onerror(err); + else onload(data.buffer); + }); +}; + +// end include: node_shell_read.js if (process['argv'].length > 1) { thisProgram = process['argv'][1].replace(/\\/g, '/'); } @@ -60997,7 +61285,27 @@ if (ENVIRONMENT_IS_NODE) { } else if (ENVIRONMENT_IS_SHELL) { - if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof importScripts == 'function') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + if ((typeof process == 'object' && typeof crc64_require === 'function') || typeof window == 'object' || typeof importScripts == 'function') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + if (typeof read != 'undefined') { + read_ = function shell_read(f) { + return read(f); + }; + } + + readBinary = function readBinary(f) { + let data; + if (typeof readbuffer == 'function') { + return new Uint8Array(readbuffer(f)); + } + data = read(f, 'binary'); + assert(typeof data == 'object'); + return data; + }; + + readAsync = function readAsync(f, onload, onerror) { + setTimeout(() => onload(readBinary(f)), 0); + }; if (typeof scriptArgs != 'undefined') { arguments_ = scriptArgs; @@ -61025,9 +61333,72 @@ if (ENVIRONMENT_IS_SHELL) { // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and // ENVIRONMENT_IS_NODE. if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // When MODULARIZE, this JS may be executed later, after document.currentScript + // is gone, so we saved it, and we use it here instead of any other info. + if (_scriptDir) { + scriptDirectory = _scriptDir; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.indexOf('blob:') !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf('/')+1); + } else { + scriptDirectory = ''; + } + if (!(typeof window == 'object' || typeof importScripts == 'function')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); - // The XHR-based read hooks emitted by Emscripten are unused because the wasm is - // base64-embedded; they have been removed so the file contains no DOM/XHR I/O. + + // Differentiate the Web Worker from the Node Worker case, as reading must + // be done differently. + { +// include: web_or_worker_shell_read.js + + + read_ = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(null); + return xhr.responseText; + } + + if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + } + +// end include: web_or_worker_shell_read.js + } + + setWindowTitle = (title) => document.title = title; } else { throw new Error('environment detection error'); @@ -64320,27 +64691,6 @@ function cache_getCachedDefaultHttpClient() { return _defaultHttpClient; } //# sourceMappingURL=cache.js.map -;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/StorageResponseFormat.js -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * Specifies the format the service should use to return list results. - */ -const StorageResponseFormat = { - /** - * Default. Currently maps to {@link StorageResponseFormat.Xml}, but may be updated in future releases. - */ - Auto: "Auto", - /** - * Use XML to return list results. - */ - Xml: "Xml", - /** - * Use Apache Arrow to return list results. - */ - Arrow: "Arrow", -}; -//# sourceMappingURL=StorageResponseFormat.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/RequestPolicy.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. @@ -64538,7 +64888,7 @@ class AnonymousCredential extends Credential { ;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/utils/constants.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -const utils_constants_SDK_VERSION = "12.5.0"; +const utils_constants_SDK_VERSION = "12.4.0"; const constants_URLConstants = { Parameters: { FORCE_BROWSER_NO_CACHE: "_", @@ -65556,7 +65906,8 @@ class StorageRetryPolicy extends BaseRequestPolicy { */ shouldRetry(isPrimaryRetry, attempt, response, err) { if (attempt >= this.retryOptions.maxTries) { - storage_common_dist_esm_log_logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${this.retryOptions.maxTries}, no further try.`); + storage_common_dist_esm_log_logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${this.retryOptions + .maxTries}, no further try.`); return false; } // Handle network failures, you may need to customize the list when you implement @@ -66037,18 +66388,6 @@ function storageRequestFailureDetailsParserPolicy() { async sendRequest(request, next) { try { const response = await next(request); - if (response.status === 400 && - response.bodyAsText?.includes("InvalidHeaderValue") && - response.bodyAsText.includes("x-ms-version")) { - // replace the error message with a more user-friendly one that includes a link to documentation - /* example response text: - ` - InvalidHeaderValueThe value for one of the HTTP headers is not in the correct format. - RequestId:e5ea566c-101e-001c-1ec4-acf180000000 - Time:2026-03-05T17:24:34.6688015Zx-ms-version3025-01-01` - */ - response.bodyAsText = response.bodyAsText.replace(/.*<\/Message>/s, "The provided service version is not enabled on this storage account. Please see https://learn.microsoft.com/rest/api/storageservices/versioning-for-the-azure-storage-services for additional information."); - } return response; } catch (err) { @@ -66133,8 +66472,6 @@ class UserDelegationKeyCredential { - - @@ -66147,8 +66484,8 @@ class UserDelegationKeyCredential { ;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/constants.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -const esm_utils_constants_SDK_VERSION = "12.33.0"; -const SERVICE_VERSION = "2026-06-06"; +const esm_utils_constants_SDK_VERSION = "12.32.0"; +const SERVICE_VERSION = "2026-04-06"; const BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES = 256 * 1024 * 1024; // 256MB const BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES = 4000 * 1024 * 1024; // 4000MB const BLOCK_BLOB_MAX_BLOCKS = 50000; @@ -68231,7 +68568,6 @@ const BlobPropertiesInternal = { "Cool", "Archive", "Cold", - "Smart", ], }, }, @@ -68251,32 +68587,6 @@ const BlobPropertiesInternal = { "rehydrate-pending-to-hot", "rehydrate-pending-to-cool", "rehydrate-pending-to-cold", - "rehydrate-pending-to-smart", - ], - }, - }, - smartAccessTier: { - serializedName: "SmartAccessTier", - xmlName: "SmartAccessTier", - type: { - name: "Enum", - allowedValues: [ - "P4", - "P6", - "P10", - "P15", - "P20", - "P30", - "P40", - "P50", - "P60", - "P70", - "P80", - "Hot", - "Cool", - "Archive", - "Cold", - "Smart", ], }, }, @@ -71422,13 +71732,6 @@ const BlobGetPropertiesHeaders = { name: "DateTimeRfc1123", }, }, - smartAccessTier: { - serializedName: "x-ms-smart-access-tier", - xmlName: "x-ms-smart-access-tier", - type: { - name: "String", - }, - }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", @@ -75423,7 +75726,7 @@ const timeoutInSeconds = { const version = { parameterPath: "version", mapper: { - defaultValue: "2026-06-06", + defaultValue: "2026-04-06", isConstant: true, serializedName: "x-ms-version", type: { @@ -76330,7 +76633,6 @@ const tier = { "Cool", "Archive", "Cold", - "Smart", ], }, }, @@ -76569,7 +76871,6 @@ const tier1 = { "Cool", "Archive", "Cold", - "Smart", ], }, }, @@ -80278,7 +80579,7 @@ class StorageClient extends ExtendedServiceClient { const defaults = { requestContentType: "application/json; charset=utf-8", }; - const packageDetails = `azsdk-js-azure-storage-blob/12.33.0`; + const packageDetails = `azsdk-js-azure-storage-blob/12.32.0`; const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` : `${packageDetails}`; @@ -80294,7 +80595,7 @@ class StorageClient extends ExtendedServiceClient { // Parameter assignments this.url = url; // Assigning values to Constant parameters - this.version = options.version || "2026-06-06"; + this.version = options.version || "2026-04-06"; this.service = new ServiceImpl(this); this.container = new ContainerImpl(this); this.blob = new BlobImpl(this); @@ -80347,13 +80648,6 @@ class StorageContextClient extends StorageClient { -const accountNameSuffixes = [ - "-secondary-ipv6", - "-secondary-dualstack", - "-ipv6", - "-dualstack", - "-secondary", -]; /** * Reserved URL characters must be properly escaped for Storage services like Blob or File. * @@ -80830,15 +81124,7 @@ function utils_common_getAccountNameFromUrl(url) { try { if (parsedUrl.hostname.split(".")[1] === "blob") { // `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`; - // `${defaultEndpointsProtocol}://${accountName}-suffix.blob.${endpointSuffix}`; accountName = parsedUrl.hostname.split(".")[0]; - for (let i = 0; i < accountNameSuffixes.length; ++i) { - const suffix = accountNameSuffixes[i]; - if (accountName.endsWith(suffix)) { - accountName = accountName.substring(0, accountName.length - suffix.length); - break; - } - } } else if (utils_common_isIpEndpointStyle(parsedUrl)) { // IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/ @@ -81812,10 +82098,6 @@ class SASQueryParameters { * Keys for request query parameters required in the SAS token */ requestQueryParameterKeys; - /** To indicate the depth of the virtual blob directory specified - * in the canonicalizedresource field of the string-to-sign. - */ - directoryDepth; /** * Optional. IP range allowed for this SAS. * @@ -81830,7 +82112,7 @@ class SASQueryParameters { } return undefined; } - constructor(version, signature, permissionsOrOptions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey, preauthorizedAgentObjectId, correlationId, encryptionScope, delegatedUserObjectId, requestHeaderKeys, requestQueryParameterKeys, directoryDepth) { + constructor(version, signature, permissionsOrOptions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey, preauthorizedAgentObjectId, correlationId, encryptionScope, delegatedUserObjectId, requestHeaderKeys, requestQueryParameterKeys) { this.version = version; this.signature = signature; if (permissionsOrOptions !== undefined && typeof permissionsOrOptions !== "string") { @@ -81853,7 +82135,6 @@ class SASQueryParameters { this.contentType = permissionsOrOptions.contentType; this.requestHeaderKeys = permissionsOrOptions.requestHeaderKeys; this.requestQueryParameterKeys = permissionsOrOptions.requestQueryParameterKeys; - this.directoryDepth = permissionsOrOptions.directoryDepth; if (permissionsOrOptions.userDelegationKey) { this.signedOid = permissionsOrOptions.userDelegationKey.signedObjectId; this.signedTenantId = permissionsOrOptions.userDelegationKey.signedTenantId; @@ -81886,7 +82167,6 @@ class SASQueryParameters { this.contentType = contentType; this.requestHeaderKeys = requestHeaderKeys; this.requestQueryParameterKeys = requestQueryParameterKeys; - this.directoryDepth = directoryDepth; if (userDelegationKey) { this.signedOid = userDelegationKey.signedObjectId; this.signedTenantId = userDelegationKey.signedTenantId; @@ -81930,7 +82210,6 @@ class SASQueryParameters { "rsct", "saoid", "scid", - "sdd", "sduoid", // Signed key user delegation object ID "skdutid", // Signed key user delegation tenant ID "srh", // Request Headers @@ -82027,9 +82306,6 @@ class SASQueryParameters { case "srq": // Request headers this.tryAppendQueryParameter(queries, param, this.requestQueryParameterKeys); break; - case "sdd": // Directory depth - this.tryAppendQueryParameter(queries, param, this.directoryDepth !== undefined ? this.directoryDepth.toString() : ""); - break; } } return queries.join("&"); @@ -82101,13 +82377,7 @@ function generateBlobSASQueryParametersInternal(blobSASSignatureValues, sharedKe // https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas#constructing-the-signature-string if (version >= "2018-11-09") { if (sharedKeyCredential !== undefined) { - // Version 2020-02-10 delegation SAS signature construction supports blob name as a virtual directory. - if (version >= "2020-02-10") { - return generateBlobSASQueryParameters20200210(blobSASSignatureValues, sharedKeyCredential); - } - else { - return generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential); - } + return generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential); } else { // Version 2020-02-10 delegation SAS signature construction includes preauthorizedAgentObjectId, agentObjectId, correlationId. @@ -82263,85 +82533,6 @@ function generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKe stringToSign: stringToSign, }; } -/** - * ONLY AVAILABLE IN NODE.JS RUNTIME. - * IMPLEMENTATION FOR API VERSION FROM 2020-02-10. - * - * Creates an instance of SASQueryParameters. - * - * Only accepts required settings needed to create a SAS. For optional settings please - * set corresponding properties directly, such as permissions, startsOn and identifier. - * - * WARNING: When identifier is not provided, permissions and expiresOn are required. - * You MUST assign value to identifier or expiresOn & permissions manually if you initial with - * this constructor. - * - * @param blobSASSignatureValues - - * @param sharedKeyCredential - - */ -function generateBlobSASQueryParameters20200210(blobSASSignatureValues, sharedKeyCredential) { - blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues); - if (!blobSASSignatureValues.identifier && - !(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) { - throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided."); - } - let resource = "c"; - let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; - if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; - } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } - } - } - // Calling parse and toString guarantees the proper ordering and throws on invalid characters. - let verifiedPermissions; - if (blobSASSignatureValues.permissions) { - if (blobSASSignatureValues.blobName) { - verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); - } - else { - verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); - } - } - // Signature is generated on the un-url-encoded values. - const stringToSign = [ - verifiedPermissions ? verifiedPermissions : "", - blobSASSignatureValues.startsOn - ? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false) - : "", - blobSASSignatureValues.expiresOn - ? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) - : "", - getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), - blobSASSignatureValues.identifier, - blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "", - blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "", - blobSASSignatureValues.version, - resource, - timestamp, - blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "", - blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "", - blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "", - blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "", - blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : "", - ].join("\n"); - const signature = sharedKeyCredential.computeHMACSHA256(stringToSign); - return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, undefined, undefined, undefined, undefined, undefined, undefined, undefined, directoryDepth), - stringToSign: stringToSign, - }; -} /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * IMPLEMENTATION FOR API VERSION FROM 2020-12-06. @@ -82366,21 +82557,14 @@ function generateBlobSASQueryParameters20201206(blobSASSignatureValues, sharedKe } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -82418,7 +82602,7 @@ function generateBlobSASQueryParameters20201206(blobSASSignatureValues, sharedKe ].join("\n"); const signature = sharedKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, undefined, undefined, undefined, blobSASSignatureValues.encryptionScope, undefined, undefined, undefined, directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, undefined, undefined, undefined, blobSASSignatureValues.encryptionScope), stringToSign: stringToSign, }; } @@ -82523,21 +82707,14 @@ function generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userD } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -82586,7 +82763,7 @@ function generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userD ].join("\n"); const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, undefined, undefined, undefined, undefined, directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId), stringToSign: stringToSign, }; } @@ -82612,21 +82789,14 @@ function generateBlobSASQueryParametersUDK20201206(blobSASSignatureValues, userD } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -82676,7 +82846,7 @@ function generateBlobSASQueryParametersUDK20201206(blobSASSignatureValues, userD ].join("\n"); const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, undefined, undefined, undefined, directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope), stringToSign: stringToSign, }; } @@ -82702,21 +82872,14 @@ function generateBlobSASQueryParametersUDK20250705(blobSASSignatureValues, userD } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -82768,7 +82931,7 @@ function generateBlobSASQueryParametersUDK20250705(blobSASSignatureValues, userD ].join("\n"); const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId, undefined, undefined, directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId), stringToSign: stringToSign, }; } @@ -82794,21 +82957,14 @@ function generateBlobSASQueryParametersUDK20260406(blobSASSignatureValues, userD } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -82862,7 +83018,7 @@ function generateBlobSASQueryParametersUDK20260406(blobSASSignatureValues, userD ].join("\n"); const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId, getKeysOfRequestHeaders(blobSASSignatureValues.requestHeaders), getKeysOfRequestHeaders(blobSASSignatureValues.requestQueryParameters), directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId, getKeysOfRequestHeaders(blobSASSignatureValues.requestHeaders), getKeysOfRequestHeaders(blobSASSignatureValues.requestQueryParameters)), stringToSign: stringToSign, }; } @@ -82970,16 +83126,6 @@ function SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues) { blobSASSignatureValues.version = version; return blobSASSignatureValues; } -function trimBlobName(blobName) { - let internalName = blobName; - while (internalName.startsWith("/")) { - internalName = internalName.substring(1); - } - while (internalName.endsWith("/")) { - internalName = internalName.substring(0, internalName.length - 1); - } - return internalName; -} //# sourceMappingURL=BlobSASSignatureValues.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BlobLeaseClient.js // Copyright (c) Microsoft Corporation. @@ -86834,7 +86980,6 @@ class BlobClient extends StorageClient_StorageClient { * ```ts snippet:ReadmeSampleDownloadBlob_Node * import { BlobServiceClient } from "@azure/storage-blob"; * import { DefaultAzureCredential } from "@azure/identity"; - * import { buffer } from "node:stream/consumers"; * * const account = ""; * const blobServiceClient = new BlobServiceClient( @@ -86851,10 +86996,22 @@ class BlobClient extends StorageClient_StorageClient { * // In Node.js, get downloaded data by accessing downloadBlockBlobResponse.readableStreamBody * const downloadBlockBlobResponse = await blobClient.download(); * if (downloadBlockBlobResponse.readableStreamBody) { - * // Download the raw bytes of the blob. Use `text` from "node:stream/consumers" - * // instead if you want to read the content as a string directly. - * const downloaded = await buffer(downloadBlockBlobResponse.readableStreamBody); - * console.log(`Downloaded blob content: ${downloaded.toString()}`); + * const downloaded = await streamToString(downloadBlockBlobResponse.readableStreamBody); + * console.log(`Downloaded blob content: ${downloaded}`); + * } + * + * async function streamToString(stream: NodeJS.ReadableStream): Promise { + * const result = await new Promise>((resolve, reject) => { + * const chunks: Buffer[] = []; + * stream.on("data", (data) => { + * chunks.push(Buffer.isBuffer(data) ? data : Buffer.from(data)); + * }); + * stream.on("end", () => { + * resolve(Buffer.concat(chunks)); + * }); + * stream.on("error", reject); + * }); + * return result.toString(); * } * ``` * @@ -88226,7 +88383,6 @@ class Clients_BlockBlobClient extends BlobClient { * ```ts snippet:ClientsQuery * import { BlobServiceClient } from "@azure/storage-blob"; * import { DefaultAzureCredential } from "@azure/identity"; - * import { buffer } from "node:stream/consumers"; * * const account = ""; * const blobServiceClient = new BlobServiceClient( @@ -88242,10 +88398,22 @@ class Clients_BlockBlobClient extends BlobClient { * // Query and convert a blob to a string * const queryBlockBlobResponse = await blockBlobClient.query("select from BlobStorage"); * if (queryBlockBlobResponse.readableStreamBody) { - * // Read the response bytes. Use `text` from "node:stream/consumers" instead - * // if you want the response as a string directly. - * const downloadedBuffer = await buffer(queryBlockBlobResponse.readableStreamBody); - * console.log(`Query blob content: ${downloadedBuffer.toString()}`); + * const downloadedBuffer = await streamToBuffer(queryBlockBlobResponse.readableStreamBody); + * const downloaded = downloadedBuffer.toString(); + * console.log(`Query blob content: ${downloaded}`); + * } + * + * async function streamToBuffer(readableStream: NodeJS.ReadableStream): Promise { + * return new Promise((resolve, reject) => { + * const chunks: Buffer[] = []; + * readableStream.on("data", (data) => { + * chunks.push(data instanceof Buffer ? data : Buffer.from(data)); + * }); + * readableStream.on("end", () => { + * resolve(Buffer.concat(chunks)); + * }); + * readableStream.on("error", reject); + * }); * } * ``` * diff --git a/dist/setup/index.js b/dist/setup/index.js index 61db263..a131a9a 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -39288,7 +39288,7 @@ exports.w = { /***/ }), -/***/ 9437: +/***/ 8914: /***/ ((__unused_webpack_module, exports) => { var __webpack_unused_export__; @@ -39305,7 +39305,7 @@ exports.w = void 0; exports.w = { instrumenterImplementation: undefined, }; -//# sourceMappingURL=state-cjs.js.map +//# sourceMappingURL=state-cjs.cjs.map /***/ }), @@ -45615,7 +45615,7 @@ function httpHeaders_createHttpHeaders(rawHeaders) { * @returns RFC4122 v4 UUID. */ function randomUUID() { - return globalThis.crypto.randomUUID(); + return crypto.randomUUID(); } //# sourceMappingURL=uuidUtils.js.map ;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/pipelineRequest.js @@ -46624,7 +46624,7 @@ function logPolicy_logPolicy(options = {}) { logger(`Request: ${sanitizer.sanitize(request)}`); const response = await next(request); logger(`Response status code: ${response.status}`); - logger(`Headers: ${sanitizer.sanitize({ headers: response.headers })}`); + logger(`Headers: ${sanitizer.sanitize(response.headers)}`); return response; }, }; @@ -46729,7 +46729,7 @@ function userAgentPolicy_userAgentPolicy(options = {}) { * @param min - The smallest integer value allowed. * @param max - The largest integer value allowed. */ -function getRandomIntegerInclusive(min, max) { +function random_getRandomIntegerInclusive(min, max) { // Make sure inputs are integers. min = Math.ceil(min); max = Math.floor(max); @@ -46757,7 +46757,7 @@ function calculateRetryDelay(retryAttempt, config) { const clampedDelay = Math.min(config.maxRetryDelayInMs, exponentialDelay); // Allow the final value to have some "jitter" (within 50% of the delay size) so // that retries across multiple clients don't occur simultaneously. - const retryAfterInMs = clampedDelay / 2 + getRandomIntegerInclusive(0, clampedDelay / 2); + const retryAfterInMs = clampedDelay / 2 + random_getRandomIntegerInclusive(0, clampedDelay / 2); return { retryAfterInMs }; } //# sourceMappingURL=delay.js.map @@ -46962,7 +46962,7 @@ function isSystemError(err) { ;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/constants.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -const constants_SDK_VERSION = "0.3.8"; +const constants_SDK_VERSION = "0.3.6"; const constants_DEFAULT_RETRY_POLICY_COUNT = 3; //# sourceMappingURL=constants.js.map ;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/retryPolicy.js @@ -48210,17 +48210,14 @@ function getContentType(body) { function buildPipelineRequest(method, url, options = {}) { const requestContentType = getRequestContentType(options); const { body, multipartBody } = getRequestBody(options.body, requestContentType); - const accept = options.accept ?? - options.headers?.accept ?? - (options.noDefaultAcceptHeader ? undefined : "application/json"); const headers = createHttpHeaders({ ...(options.headers ? options.headers : {}), - ...(accept !== undefined && { accept }), + accept: options.accept ?? options.headers?.accept ?? "application/json", ...(requestContentType && { "content-type": requestContentType, }), }); - const { allowInsecureConnection, abortSignal, onUploadProgress, onDownloadProgress, timeout, responseAsStream, noDefaultAcceptHeader: _noDefaultAcceptHeader, url: _url, method: _method, body: _body, multipartBody: _multiBody, headers: _headers, ...rest } = options; + const { allowInsecureConnection, abortSignal, onUploadProgress, onDownloadProgress, timeout, responseAsStream, url: _url, method: _method, body: _body, multipartBody: _multiBody, headers: _headers, ...rest } = options; const request = createPipelineRequest({ url, method, @@ -48327,7 +48324,8 @@ function createParseError(response, err) { /** * Creates a client with a default pipeline * @param endpoint - Base endpoint for the client - * @param clientOptions - Client options + * @param credentials - Credentials to authenticate the requests + * @param options - Client options */ function getClient(endpoint, clientOptions = {}) { const pipeline = clientOptions.pipeline ?? createDefaultPipeline(clientOptions); @@ -48341,35 +48339,34 @@ function getClient(endpoint, clientOptions = {}) { }); } } - const noDefaultAcceptHeader = clientOptions.internal?.noDefaultAcceptHeader ?? false; const { allowInsecureConnection, httpClient } = clientOptions; const endpointUrl = clientOptions.endpoint ?? endpoint; const client = (path, ...args) => { const getUrl = (requestOptions) => buildRequestUrl(endpointUrl, path, args, { allowInsecureConnection, ...requestOptions }); return { get: (requestOptions = {}) => { - return buildOperation("GET", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("GET", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, post: (requestOptions = {}) => { - return buildOperation("POST", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("POST", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, put: (requestOptions = {}) => { - return buildOperation("PUT", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("PUT", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, patch: (requestOptions = {}) => { - return buildOperation("PATCH", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("PATCH", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, delete: (requestOptions = {}) => { - return buildOperation("DELETE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("DELETE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, head: (requestOptions = {}) => { - return buildOperation("HEAD", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("HEAD", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, options: (requestOptions = {}) => { - return buildOperation("OPTIONS", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("OPTIONS", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, trace: (requestOptions = {}) => { - return buildOperation("TRACE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient, noDefaultAcceptHeader); + return buildOperation("TRACE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient); }, }; }; @@ -48379,23 +48376,23 @@ function getClient(endpoint, clientOptions = {}) { pipeline, }; } -function buildOperation(method, url, pipeline, options, allowInsecureConnection, httpClient, noDefaultAcceptHeader = false) { +function buildOperation(method, url, pipeline, options, allowInsecureConnection, httpClient) { allowInsecureConnection = options.allowInsecureConnection ?? allowInsecureConnection; return { then: function (onFulfilled, onrejected) { - return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, noDefaultAcceptHeader }, httpClient).then(onFulfilled, onrejected); + return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection }, httpClient).then(onFulfilled, onrejected); }, async asBrowserStream() { if (isNodeLike) { throw new Error("`asBrowserStream` is supported only in the browser environment. Use `asNodeStream` instead to obtain the response body stream. If you require a Web stream of the response in Node, consider using `Readable.toWeb` on the result of `asNodeStream`."); } else { - return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, noDefaultAcceptHeader, responseAsStream: true }, httpClient); + return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, responseAsStream: true }, httpClient); } }, async asNodeStream() { if (isNodeLike) { - return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, noDefaultAcceptHeader, responseAsStream: true }, httpClient); + return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, responseAsStream: true }, httpClient); } else { throw new Error("`isNodeStream` is not supported in the browser environment. Use `asBrowserStream` to obtain the response body stream."); @@ -48756,7 +48753,7 @@ async function util_userAgentPlatform_setPlatformSpecificData(map) { ;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/constants.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -const esm_constants_SDK_VERSION = "1.25.0"; +const esm_constants_SDK_VERSION = "1.24.0"; const esm_constants_DEFAULT_RETRY_POLICY_COUNT = 3; //# sourceMappingURL=constants.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/util/userAgent.js @@ -49081,30 +49078,20 @@ async function computeSha256Hash(content, encoding) { //# sourceMappingURL=internal.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/abort-controller/dist/esm/AbortError.js // Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. +// Licensed under the MIT license. /** * This error is thrown when an asynchronous operation has been aborted. * Check for this error by testing the `name` that the name property of the * error matches `"AbortError"`. * * @example - * ```ts snippet:AbortErrorSample - * import { AbortError } from "@azure/abort-controller"; - * - * async function doAsyncWork(options: { abortSignal: AbortSignal }): Promise { - * if (options.abortSignal.aborted) { - * throw new AbortError(); - * } - * - * // do async work - * } - * + * ```ts * const controller = new AbortController(); * controller.abort(); * try { - * doAsyncWork({ abortSignal: controller.signal }); + * doAsyncWork(controller.signal) * } catch (e) { - * if (e instanceof Error && e.name === "AbortError") { + * if (e.name === 'AbortError') { * // handle abort error here. * } * } @@ -49119,7 +49106,7 @@ class AbortError_AbortError extends Error { //# sourceMappingURL=AbortError.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/abort-controller/dist/esm/index.js // Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. +// Licensed under the MIT license. //# sourceMappingURL=index.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-util/dist/esm/createAbortablePromise.js @@ -49169,6 +49156,7 @@ function createAbortablePromise(buildPromise, options) { // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. + const delay_StandardAbortMessage = "The delay was aborted."; /** * A wrapper for setTimeout that resolves a promise after timeInMs milliseconds. @@ -49187,6 +49175,22 @@ function delay_delay(timeInMs, options) { abortErrorMsg: abortErrorMsg ?? delay_StandardAbortMessage, }); } +/** + * Calculates the delay interval for retry attempts using exponential delay with jitter. + * @param retryAttempt - The current retry attempt number. + * @param config - The exponential retry configuration. + * @returns An object containing the calculated retry delay. + */ +function delay_calculateRetryDelay(retryAttempt, config) { + // Exponentially increase the delay each time + const exponentialDelay = config.retryDelayInMs * Math.pow(2, retryAttempt); + // Don't let the delay exceed the maximum + const clampedDelay = Math.min(config.maxRetryDelayInMs, exponentialDelay); + // Allow the final value to have some "jitter" (within 50% of the delay size) so + // that retries across multiple clients don't occur simultaneously. + const retryAfterInMs = clampedDelay / 2 + getRandomIntegerInclusive(0, clampedDelay / 2); + return { retryAfterInMs }; +} //# sourceMappingURL=delay.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-util/dist/esm/error.js // Copyright (c) Microsoft Corporation. @@ -49484,8 +49488,8 @@ class TracingContextImpl { } } //# sourceMappingURL=tracingContext.js.map -// EXTERNAL MODULE: ./node_modules/@azure/core-tracing/dist/commonjs/state-cjs.js -var state_cjs = __nccwpck_require__(9437); +// EXTERNAL MODULE: ./node_modules/@azure/core-tracing/dist/commonjs/state.js +var commonjs_state = __nccwpck_require__(8914); ;// CONCATENATED MODULE: ./node_modules/@azure/core-tracing/dist/esm/state.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. @@ -49495,7 +49499,7 @@ var state_cjs = __nccwpck_require__(9437); /** * Defines the shared state between CJS and ESM by re-exporting the CJS state. */ -const state_state = state_cjs/* state */.w; +const state_state = commonjs_state/* state */.w; //# sourceMappingURL=state.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-tracing/dist/esm/instrumenter.js // Copyright (c) Microsoft Corporation. @@ -49577,8 +49581,8 @@ function createTracingClient(options) { function startSpan(name, operationOptions, spanOptions) { const startSpanResult = getInstrumenter().startSpan(name, { ...spanOptions, - packageName, - packageVersion, + packageName: packageName, + packageVersion: packageVersion, tracingContext: operationOptions?.tracingOptions?.tracingContext, }); let tracingContext = startSpanResult.tracingContext; @@ -49598,7 +49602,7 @@ function createTracingClient(options) { async function withSpan(name, operationOptions, callback, spanOptions) { const { span, updatedOptions } = startSpan(name, operationOptions, spanOptions); try { - const result = await withContext(updatedOptions.tracingOptions.tracingContext, () => callback(updatedOptions, span)); + const result = await withContext(updatedOptions.tracingOptions.tracingContext, () => Promise.resolve(callback(updatedOptions, span))); span.setStatus({ status: "success" }); return result; } @@ -50675,6 +50679,22 @@ function isSASCredential(credential) { ;// CONCATENATED MODULE: ./node_modules/@azure/core-auth/dist/esm/tokenCredential.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +/** + * @internal + * @param accessToken - Access token + * @returns Whether a token is bearer type or not + */ +function isBearerToken(accessToken) { + return !accessToken.tokenType || accessToken.tokenType === "Bearer"; +} +/** + * @internal + * @param accessToken - Access token + * @returns Whether a token is Pop token or not + */ +function isPopToken(accessToken) { + return accessToken.tokenType === "pop"; +} /** * Tests an object to determine whether it implements TokenCredential. * @@ -50706,7 +50726,7 @@ const disableKeepAlivePolicyName = "DisableKeepAlivePolicy"; function createDisableKeepAlivePolicy() { return { name: disableKeepAlivePolicyName, - sendRequest(request, next) { + async sendRequest(request, next) { request.disableKeepAlive = true; return next(request); }, @@ -51841,7 +51861,7 @@ const MapperTypeNames = { }; //# sourceMappingURL=serializer.js.map // EXTERNAL MODULE: ./node_modules/@azure/core-client/dist/commonjs/state-cjs.js -var commonjs_state_cjs = __nccwpck_require__(30); +var state_cjs = __nccwpck_require__(30); ;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/state.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. @@ -51851,7 +51871,7 @@ var commonjs_state_cjs = __nccwpck_require__(30); /** * Defines the shared state between CJS and ESM by re-exporting the CJS state. */ -const esm_state_state = commonjs_state_cjs/* state */.w; +const esm_state_state = state_cjs/* state */.w; //# sourceMappingURL=state.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/operationHelpers.js // Copyright (c) Microsoft Corporation. @@ -53040,22 +53060,6 @@ const util_originalRequestSymbol = Symbol("Original PipelineRequest"); // cloned but we need to retrieve the OperationSpec and OperationArguments from the // original request. const originalClientRequestSymbol = Symbol.for("@azure/core-client original request"); -const passThroughProps = new Set([ - "url", - "method", - "withCredentials", - "timeout", - "requestId", - "abortSignal", - "body", - "formData", - "onDownloadProgress", - "onUploadProgress", - "proxySettings", - "streamResponseStatusCodes", - "agent", - "requestOverrides", -]); function toPipelineRequest(webResource, options = {}) { const compatWebResource = webResource; const request = compatWebResource[util_originalRequestSymbol]; @@ -53139,7 +53143,23 @@ function toWebResourceLike(request, options) { if (prop === "keepAlive") { request.disableKeepAlive = !value; } - if (typeof prop === "string" && passThroughProps.has(prop)) { + const passThroughProps = [ + "url", + "method", + "withCredentials", + "timeout", + "requestId", + "abortSignal", + "body", + "formData", + "onDownloadProgress", + "onUploadProgress", + "proxySettings", + "streamResponseStatusCodes", + "agent", + "requestOverrides", + ]; + if (typeof prop === "string" && passThroughProps.includes(prop)) { request[prop] = value; } return Reflect.set(target, prop, value, receiver); @@ -54399,26 +54419,19 @@ class Matcher { ;// CONCATENATED MODULE: ./node_modules/fast-xml-builder/src/util.js -// String(val)/val.toString() drop the sign of -0 (e.g. String(-0) === '0'), silently -// corrupting a round-tripped negative-zero value. XML has no separate int/float syntax, -// so this is the single place every raw value gets turned into text. -function valToStr(val) { - return typeof val === 'number' && Object.is(val, -0) ? '-0' : String(val) -} - function safeComment(val) { - return valToStr(val) + return String(val) .replace(/--/g, '- -') // -- is illegal anywhere in comment content .replace(/--/g, '- -') // handle the scenario when 2 consiucative dashes appears .replace(/-$/, '- '); // trailing - would form -- with the closing --> } function safeCdata(val) { - return valToStr(val).replace(/\]\]>/g, ']]]]>') + return String(val).replace(/\]\]>/g, ']]]]>') } function escapeAttribute(val) { - return valToStr(val).replace(/"/g, '"').replace(/'/g, ''') + return String(val).replace(/"/g, '"').replace(/'/g, ''') } ;// CONCATENATED MODULE: ./node_modules/xml-naming/src/index.js /** @@ -54533,36 +54546,8 @@ const buildRegexes = (startChar, char, flags = '') => { const regexes10 = buildRegexes(nameStartChar10, nameChar10); // no /u — BMP only const regexes11 = buildRegexes(nameStartChar11, nameChar11, 'u'); // /u — enables \u{10000}-\u{EFFFF} -// --------------------------------------------------------------------------- -// ASCII-only fast path (opt-in, off by default) -// -// The XML 1.0 vs 1.1 NameStartChar/NameChar productions differ *only* in -// their non-ASCII ranges (merged vs split Latin-1 ranges, \u0487, and -// supplementary planes). Restricted to ASCII, both versions collapse to the -// same character classes, so a single regex pair covers both xmlVersion -// values — no /u flag needed. -// -// Rationale: unicode-aware regexes (the /u flag, required for XML 1.1's -// supplementary-plane range) are measurably slower in V8 than plain -// non-unicode regexes on the same input, even when the input is pure ASCII. -// For the common case — HTML/SVG ids, XML tags — names are ASCII, so callers -// who know this can opt in to skip the unicode-aware matching path entirely. -// This is a real but *conditional* win: mainly for XML 1.1 input (avoids /u), -// or at scale where the larger unicode character classes add engine -// overhead. It also changes behaviour (rejects legitimate non-ASCII XML -// 1.0/1.1 names), so it must never be silently enabled — hence off by -// default. -// --------------------------------------------------------------------------- - -const nameStartCharAscii = ':A-Za-z_'; -const nameCharAscii = nameStartCharAscii + '\\-\\.\\d'; - -const regexesAscii = buildRegexes(nameStartCharAscii, nameCharAscii); // no /u — ASCII only - -const getRegexes = (xmlVersion = '1.0', asciiOnly = false) => { - if (asciiOnly) return regexesAscii; - return xmlVersion === '1.1' ? regexes11 : regexes10; -}; +const getRegexes = (xmlVersion = '1.0') => + xmlVersion === '1.1' ? regexes11 : regexes10; // --------------------------------------------------------------------------- // Boolean validators @@ -54572,131 +54557,57 @@ const getRegexes = (xmlVersion = '1.0', asciiOnly = false) => { * Returns true if the string is a valid XML Name. * Colons are allowed anywhere (Name production). * Used for: DOCTYPE entity names, notation names, DTD element declarations. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const src_name = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).name.test(str); +const src_name = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).name.test(str); /** * Returns true if the string is a valid NCName (Non-Colonized Name). * Colons are not permitted. * Used for: namespace prefixes, local names, SVG id attributes. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const ncName = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).ncName.test(str); +const ncName = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).ncName.test(str); /** * Returns true if the string is a valid QName (Qualified Name). * Allows exactly one colon as a prefix separator: prefix:localName. * Used for: element and attribute names in namespace-aware XML/SVG. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const qName = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).qName.test(str); +const qName = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).qName.test(str); /** * Returns true if the string is a valid NMToken. * Like Name but no restriction on the first character. * Used for: DTD NMTOKEN attribute values. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const nmToken = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).nmToken.test(str); +const nmToken = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).nmToken.test(str); /** * Returns true if the string is a valid NMTokens value. * A whitespace-separated list of NMToken values. * Used for: DTD NMTOKENS attribute values. - * - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] - * asciiOnly: skip unicode-aware matching, ASCII names only (default false). */ -const nmTokens = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => - getRegexes(xmlVersion, asciiOnly).nmTokens.test(str); - -// --------------------------------------------------------------------------- -// Memoized validator factory -// -// Real documents reuse a small vocabulary of tag/attribute names across many -// siblings (e.g. `id`, `class`, `href` repeated across hundreds of elements). -// The plain boolean validators above re-run the regex on every call -// regardless of repeats. `createValidator` returns a closure with a private -// string -> boolean cache, so repeated names after the first become O(1) -// lookups instead of regex tests. -// -// - opts (xmlVersion, asciiOnly) are fixed at creation time, so the regex is -// resolved once, not on every call. -// - The cache is private to the returned closure — no shared/global state, -// no cross-caller pollution. -// - `maxCacheSize` bounds memory: once the cache reaches this many entries, -// it stops accepting new ones (existing entries keep serving hits; new -// misses just fall through to the regex, uncached). This avoids unbounded -// growth against adversarial/high-cardinality input (e.g. validating -// attacker-supplied names with no repeats) without the cost/complexity of -// a full LRU, and without the perf cliff of reset-and-refill thrashing. -// - Call `.reset()` on the returned function to clear the cache manually -// (e.g. between unrelated parse calls). -// --------------------------------------------------------------------------- - -const PRODUCTIONS = ['name', 'ncName', 'qName', 'nmToken', 'nmTokens']; - -/** - * Returns a memoized boolean validator function for a single production, - * with opts fixed at creation time. - * - * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean, maxCacheSize?: number }} [opts] - * maxCacheSize: max number of distinct strings to cache (default 2048). - * Once reached, new strings are validated but not cached; existing cached - * entries keep being served. - * @returns {((str: string) => boolean) & { reset: () => void }} - */ -const createValidator = (production, { xmlVersion = '1.0', asciiOnly = false, maxCacheSize = 2048 } = {}) => { - if (!PRODUCTIONS.includes(production)) { - throw new TypeError( - `Unknown production "${production}". Must be one of: ${PRODUCTIONS.join(', ')}` - ); - } - - const regex = getRegexes(xmlVersion, asciiOnly)[production]; - let cache = new Map(); - - const validator = (str) => { - const cached = cache.get(str); - if (cached !== undefined) return cached; - - const result = regex.test(str); - if (cache.size < maxCacheSize) cache.set(str, result); - return result; - }; - - validator.reset = () => { cache = new Map(); }; - - return validator; -}; +const nmTokens = (str, { xmlVersion = '1.0' } = {}) => + getRegexes(xmlVersion).nmTokens.test(str); // --------------------------------------------------------------------------- // Diagnostic validator // --------------------------------------------------------------------------- +const PRODUCTIONS = (/* unused pure expression or super */ null && (['name', 'ncName', 'qName', 'nmToken', 'nmTokens'])); + /** * Validates a string against a named production and returns a detailed result. * * @param {string} str * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * @param {{ xmlVersion?: '1.0'|'1.1' }} [opts] * @returns {{ valid: boolean, production: string, input: string, reason?: string, position?: number }} */ -const validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = {}) => { +const validate = (str, production, { xmlVersion = '1.0' } = {}) => { if (!PRODUCTIONS.includes(production)) { throw new TypeError( `Unknown production "${production}". Must be one of: ${PRODUCTIONS.join(', ')}` @@ -54704,20 +54615,13 @@ const validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = { } const validators = { name: src_name, ncName, qName, nmToken, nmTokens }; - const isValid = validators[production](str, { xmlVersion, asciiOnly }); + const isValid = validators[production](str, { xmlVersion }); if (isValid) return { valid: true, production, input: str }; let reason = 'Does not match the production rules'; let position; - // Diagnostic fallback char checks must mirror the same character set the - // boolean validator above used, or the reported reason/position could - // contradict the `valid: false` result (e.g. flagging a char as illegal - // that the unicode-aware check would have accepted). - const startCharPattern = asciiOnly ? /^[:A-Za-z_]/ : /^[:A-Za-z_\u00C0-\uFFFD]/; - const namePattern = asciiOnly ? /[\w\-\\.:]/ : /[\w\-\\.:\u00B7\u00C0-\uFFFD]/; - if (str.length === 0) { reason = 'Input is empty'; } else if (production === 'ncName' && str.includes(':')) { @@ -54734,13 +54638,13 @@ const validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = { position = str.lastIndexOf(':'); } else if ( ['name', 'ncName', 'qName'].includes(production) && - !startCharPattern.test(str[0]) + !/^[:A-Za-z_\u00C0-\uFFFD]/.test(str[0]) ) { reason = `First character "${str[0]}" is not a valid NameStartChar`; position = 0; } else { for (let i = 0; i < str.length; i++) { - if (!namePattern.test(str[i])) { + if (!/[\w\-\\.:\u00B7\u00C0-\uFFFD]/.test(str[i])) { reason = `Character "${str[i]}" at position ${i} is not a valid NameChar`; position = i; break; @@ -54760,7 +54664,7 @@ const validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = { * * @param {string[]} strings * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production - * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * @param {{ xmlVersion?: '1.0'|'1.1' }} [opts] * @returns {Array<{ valid: boolean, production: string, input: string, reason?: string, position?: number }>} */ const validateAll = (strings, production, opts = {}) => @@ -54775,12 +54679,10 @@ const validateAll = (strings, production, opts = {}) => * * @param {string} str * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production - * @param {{ replacement?: string, asciiOnly?: boolean }} [opts] - * asciiOnly: also replace any non-ASCII character, not just XML-illegal - * ones (default false). + * @param {{ replacement?: string }} [opts] * @returns {string} */ -const sanitize = (str, production = 'name', { replacement = '_', asciiOnly = false } = {}) => { +const sanitize = (str, production = 'name', { replacement = '_' } = {}) => { if (!str) return replacement; let result = str; @@ -54791,8 +54693,7 @@ const sanitize = (str, production = 'name', { replacement = '_', asciiOnly = fal } // Replace illegal characters - const allowedCharPattern = asciiOnly ? /[^\w\-\.:]/g : /[^\w\-\.:\u00B7\u00C0-\uFFFD]/g; - result = result.replace(allowedCharPattern, replacement); + result = result.replace(/[^\w\-\.:\u00B7\u00C0-\uFFFD]/g, replacement); // Fix invalid start character for Name / NCName / QName if (production !== 'nmToken' && production !== 'nmTokens') { @@ -54842,11 +54743,11 @@ function detectXmlVersionFromArray(jArray, options) { * @param {boolean} isAttribute - true when resolving an attribute name * @param {object} options * @param {Matcher} matcher - current matcher state (readonly from callback perspective) - * @param {function} qNameValidator - function to validate tag names + * @param {string} xmlVersion - '1.0' or '1.1', forwarded to xml-naming */ -function resolveTagName(name, isAttribute, options, matcher, qNameValidator) { +function resolveTagName(name, isAttribute, options, matcher, xmlVersion) { if (!options.sanitizeName) return name; - if (qNameValidator(name)) return name; + if (qName(name, { xmlVersion })) return name; return options.sanitizeName(name, { isAttribute, matcher: matcher.readOnly() }); } @@ -54876,14 +54777,14 @@ function toXml(jArray, options) { // Detect XML version for use in name validation const xmlVersion = detectXmlVersionFromArray(jArray, options); - const qNameValidator = createValidator('qName', { xmlVersion }); + // Initialize matcher for path tracking const matcher = new Matcher(); - return arrToStr(jArray, options, indentation, matcher, stopNodeExpressions, qNameValidator); + return arrToStr(jArray, options, indentation, matcher, stopNodeExpressions, xmlVersion); } -function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qNameValidator) { +function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, xmlVersion) { let xmlStr = ""; let isPreviousElementTag = false; @@ -54894,7 +54795,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName if (!Array.isArray(arr)) { // Non-array values (e.g. string tag values) should be treated as text content if (arr !== undefined && arr !== null) { - let text = valToStr(arr); + let text = arr.toString(); text = replaceEntitiesValue(text, options); return text; } @@ -54916,7 +54817,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName // Resolve tag name (may transform it; may throw for invalid names) const tagName = isSpecialName ? rawTagName - : resolveTagName(rawTagName, false, options, matcher, qNameValidator); + : resolveTagName(rawTagName, false, options, matcher, xmlVersion); // Extract attributes from ":@" property const attrValues = extractAttributeValues(tagObj[":@"], options); @@ -54933,7 +54834,6 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName tagText = options.tagValueProcessor(tagName, tagText); tagText = replaceEntitiesValue(tagText, options); } - tagText = valToStr(tagText); if (isPreviousElementTag) { xmlStr += indentation; } @@ -54959,7 +54859,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName matcher.pop(); continue; } else if (tagName[0] === "?") { - const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, qNameValidator); + const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, xmlVersion); const tempInd = tagName === "?xml" ? "" : indentation; // Text node content on PI/XML declaration tags is intentionally ignored. // Only attributes are valid on these tags per the XML spec. @@ -54975,7 +54875,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName } // Pass isStopNode to attr_to_str so attributes are also not processed for stopNodes - const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, qNameValidator); + const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, xmlVersion); const tagStart = indentation + `<${tagName}${attStr}`; // If this is a stopNode, get raw content without processing @@ -54983,7 +54883,7 @@ function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qName if (isStopNode) { tagValue = orderedJs2Xml_getRawContent(tagObj[rawTagName], options); } else { - tagValue = arrToStr(tagObj[rawTagName], options, newIdentation, matcher, stopNodeExpressions, qNameValidator); + tagValue = arrToStr(tagObj[rawTagName], options, newIdentation, matcher, stopNodeExpressions, xmlVersion); } if (options.unpairedTags.indexOf(tagName) !== -1) { @@ -55042,7 +54942,7 @@ function orderedJs2Xml_getRawContent(arr, options) { if (!Array.isArray(arr)) { // Non-array values return as-is if (arr !== undefined && arr !== null) { - return valToStr(arr); + return arr.toString(); } return ""; } @@ -55054,7 +54954,7 @@ function orderedJs2Xml_getRawContent(arr, options) { if (tagName === options.textNodeName) { // Raw text content - NO processing, NO entity replacement - content += valToStr(item[tagName]); + content += item[tagName]; } else if (tagName === options.cdataPropName) { // CDATA content content += item[tagName][0][options.textNodeName]; @@ -55112,7 +55012,7 @@ function propName(obj) { * Build attribute string, resolving attribute names through sanitizeName when configured. * Accepts matcher so the callback has path context. */ -function attr_to_str(attrMap, options, isStopNode, matcher, qNameValidator) { +function attr_to_str(attrMap, options, isStopNode, matcher, xmlVersion) { let attrStr = ""; if (attrMap && !options.ignoreAttributes) { for (let attr in attrMap) { @@ -55122,7 +55022,7 @@ function attr_to_str(attrMap, options, isStopNode, matcher, qNameValidator) { const cleanAttrName = attr.substr(options.attributeNamePrefix.length); const resolvedAttrName = isStopNode ? cleanAttrName // stopNodes are raw — skip sanitizeName for attr names too - : resolveTagName(cleanAttrName, true, options, matcher, qNameValidator); + : resolveTagName(cleanAttrName, true, options, matcher, xmlVersion); let attrVal; if (isStopNode) { @@ -55316,11 +55216,11 @@ function detectXmlVersionFromObj(jObj, options) { * @param {boolean} isAttribute - true when resolving an attribute name * @param {object} options * @param {Matcher} matcher - current matcher state (readonly from callback perspective) - * @param {function} qNameValidator - function to validate tag names + * @param {string} xmlVersion - '1.0' or '1.1', forwarded to xml-naming */ -function fxb_resolveTagName(name, isAttribute, options, matcher, qNameValidator) { +function fxb_resolveTagName(name, isAttribute, options, matcher, xmlVersion) { if (!options.sanitizeName) return name; - if (qNameValidator(name)) return name; + if (qName(name, { xmlVersion })) return name; return options.sanitizeName(name, { isAttribute, matcher: matcher.readOnly() }); } @@ -55336,12 +55236,11 @@ Builder.prototype.build = function (jObj) { // Initialize matcher for path tracking const matcher = new Matcher(); const xmlVersion = detectXmlVersionFromObj(jObj, this.options); - const qNameValidator = createValidator('qName', { xmlVersion }); - return this.j2x(jObj, 0, matcher, qNameValidator).val; + return this.j2x(jObj, 0, matcher, xmlVersion).val; } }; -Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { +Builder.prototype.j2x = function (jObj, level, matcher, xmlVersion) { let attrStr = ''; let val = ''; if (this.options.maxNestedTags && matcher.getDepth() >= this.options.maxNestedTags) { @@ -55369,7 +55268,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { const resolvedKey = isSpecialKey ? key - : fxb_resolveTagName(key, false, this.options, matcher, qNameValidator); + : fxb_resolveTagName(key, false, this.options, matcher, xmlVersion); if (typeof jObj[key] === 'undefined') { // supress undefined node only if it is not an attribute @@ -55394,12 +55293,12 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { const attr = this.isAttribute(key); if (attr && !this.ignoreAttributesFn(attr, jPath)) { // Resolve the attribute name through sanitizeName - const resolvedAttr = fxb_resolveTagName(attr, true, this.options, matcher, qNameValidator); - attrStr += this.buildAttrPairStr(resolvedAttr, valToStr(jObj[key]), isCurrentStopNode); + const resolvedAttr = fxb_resolveTagName(attr, true, this.options, matcher, xmlVersion); + attrStr += this.buildAttrPairStr(resolvedAttr, '' + jObj[key], isCurrentStopNode); } else if (!attr) { //tag value if (key === this.options.textNodeName) { - let newval = this.options.tagValueProcessor(key, valToStr(jObj[key])); + let newval = this.options.tagValueProcessor(key, '' + jObj[key]); val += this.replaceEntitiesValue(newval); } else { // Check if this is a stopNode before building @@ -55409,7 +55308,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { if (isStopNode) { // Build as raw content without encoding - const textValue = valToStr(jObj[key]); + const textValue = '' + jObj[key]; if (textValue === '') { val += this.indentate(level) + '<' + resolvedKey + this.closeTag(resolvedKey) + this.tagEndChar; } else { @@ -55436,7 +55335,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { if (this.options.oneListGroup) { // Push tag to matcher before recursive call matcher.push(resolvedKey); - const result = this.j2x(item, level + 1, matcher, qNameValidator); + const result = this.j2x(item, level + 1, matcher, xmlVersion); // Pop tag from matcher after recursive call matcher.pop(); @@ -55445,13 +55344,12 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { listTagAttr += result.attrStr } } else { - listTagVal += this.processTextOrObjNode(item, resolvedKey, level, matcher, qNameValidator) + listTagVal += this.processTextOrObjNode(item, resolvedKey, level, matcher, xmlVersion) } } else { if (this.options.oneListGroup) { let textValue = this.options.tagValueProcessor(resolvedKey, item); textValue = this.replaceEntitiesValue(textValue); - textValue = valToStr(textValue); listTagVal += textValue; } else { // Check if this is a stopNode before building @@ -55461,7 +55359,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { if (isStopNode) { // Build as raw content without encoding - const textValue = valToStr(item); + const textValue = '' + item; if (textValue === '') { listTagVal += this.indentate(level) + '<' + resolvedKey + this.closeTag(resolvedKey) + this.tagEndChar; } else { @@ -55484,11 +55382,11 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { const L = Ks.length; for (let j = 0; j < L; j++) { // Resolve attribute names inside attributesGroupName - const resolvedAttr = fxb_resolveTagName(Ks[j], true, this.options, matcher, qNameValidator); - attrStr += this.buildAttrPairStr(resolvedAttr, valToStr(jObj[key][Ks[j]]), isCurrentStopNode); + const resolvedAttr = fxb_resolveTagName(Ks[j], true, this.options, matcher, xmlVersion); + attrStr += this.buildAttrPairStr(resolvedAttr, '' + jObj[key][Ks[j]], isCurrentStopNode); } } else { - val += this.processTextOrObjNode(jObj[key], resolvedKey, level, matcher, qNameValidator) + val += this.processTextOrObjNode(jObj[key], resolvedKey, level, matcher, xmlVersion) } } } @@ -55497,7 +55395,7 @@ Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) { Builder.prototype.buildAttrPairStr = function (attrName, val, isStopNode) { if (!isStopNode) { - val = this.options.attributeValueProcessor(attrName, valToStr(val)); + val = this.options.attributeValueProcessor(attrName, '' + val); val = this.replaceEntitiesValue(val); } if (this.options.suppressBooleanAttributes && val === "true") { @@ -55505,7 +55403,7 @@ Builder.prototype.buildAttrPairStr = function (attrName, val, isStopNode) { } else return ' ' + attrName + '="' + escapeAttribute(val) + '"'; } -function processTextOrObjNode(object, key, level, matcher, qNameValidator) { +function processTextOrObjNode(object, key, level, matcher, xmlVersion) { // Extract attributes to pass to matcher const attrValues = this.extractAttributes(object); @@ -55523,7 +55421,7 @@ function processTextOrObjNode(object, key, level, matcher, qNameValidator) { return this.buildObjectNode(rawContent, key, attrStr, level); } - const result = this.j2x(object, level + 1, matcher, qNameValidator); + const result = this.j2x(object, level + 1, matcher, xmlVersion); // Pop tag from matcher after recursion matcher.pop(); @@ -55652,9 +55550,7 @@ Builder.prototype.buildAttributesForStopNode = function (obj) { if (val === true && this.options.suppressBooleanAttributes) { attrStr += ' ' + cleanKey; } else { - // stopNode content is raw, but the quote delimiter is always escaped - // so a quote in the value cannot break out of the attribute (see orderedJs2Xml attr_to_str) - attrStr += ' ' + cleanKey + '="' + escapeAttribute(val) + '"'; + attrStr += ' ' + cleanKey + '="' + val + '"'; // No encoding for stopNode } } } else { @@ -55667,9 +55563,7 @@ Builder.prototype.buildAttributesForStopNode = function (obj) { if (val === true && this.options.suppressBooleanAttributes) { attrStr += ' ' + attr; } else { - // stopNode content is raw, but the quote delimiter is always escaped - // so a quote in the value cannot break out of the attribute (see orderedJs2Xml attr_to_str) - attrStr += ' ' + attr + '="' + escapeAttribute(val) + '"'; + attrStr += ' ' + attr + '="' + val + '"'; // No encoding for stopNode } } } @@ -55700,7 +55594,7 @@ Builder.prototype.buildObjectNode = function (val, key, attrStr, level) { if ((attrStr || attrStr === '') && val.indexOf('<') === -1) { return (this.indentate(level) + '<' + key + attrStr + piClosingChar + '>' + val + tagEndExp); } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) { - return this.indentate(level) + `` + this.newLine; + return this.indentate(level) + `` + this.newLine; } else { return ( this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar + @@ -55757,10 +55651,6 @@ Builder.prototype.buildTextValNode = function (val, key, attrStr, level, matcher // Normal processing: apply tagValueProcessor and entity replacement let textValue = this.options.tagValueProcessor(key, val); textValue = this.replaceEntitiesValue(textValue); - // tagValueProcessor may return the raw value unchanged (default is identity), and - // replaceEntitiesValue no-ops on non-strings, so a plain number can still reach here; - // stringify it now, sign-preserving, before it's implicitly ToString'd below. - textValue = valToStr(textValue); if (textValue === '') { return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar; @@ -56495,32 +56385,401 @@ class XmlNode { this.child.push({ [node.tagname]: node.child }); } // if requested, add the startIndex - this.addStartIndex(startIndex); - } - - addStartIndex(startIndex) { if (startIndex !== undefined) { // Note: for now we just overwrite the metadata. If we had more complex metadata, // we might need to do an object append here: metadata = { ...metadata, startIndex } this.child[this.child.length - 1][METADATA_SYMBOL] = { startIndex }; } } - - addEndIndex(endIndex) { - const lastChild = this.child[this.child.length - 1]; - // endIndex is write-once: when updateTag drops a node, the last child is a - // previously completed sibling whose endIndex must not be overwritten - if (lastChild !== undefined && lastChild[METADATA_SYMBOL] !== undefined - && lastChild[METADATA_SYMBOL].endIndex === undefined) { - lastChild[METADATA_SYMBOL].endIndex = endIndex; - } - } /** symbol used for metadata */ static getMetaDataSymbol() { return METADATA_SYMBOL; } } +;// CONCATENATED MODULE: ./node_modules/fast-xml-parser/node_modules/xml-naming/src/index.js +/** + * xml-naming + * Validates XML Name productions as defined in the XML 1.0 and 1.1 specifications. + * Covers: Name, NCName, QName, NMToken, NMTokens + * + * XML 1.0 spec: https://www.w3.org/TR/xml/#NT-Name + * XML 1.1 spec: https://www.w3.org/TR/xml11/#NT-NameStartChar + * XML NS spec: https://www.w3.org/TR/xml-names/#NT-NCName + */ + +// --------------------------------------------------------------------------- +// Character class strings — XML 1.0 +// +// NameStartChar ::= ":" | [A-Z] | "_" | [a-z] +// | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] +// | [#x370-#x37D] | [#x37F-#x1FFF] <- split to exclude #x0487 +// | [#x200C-#x200D] +// | [#x2070-#x218F] | [#x2C00-#x2FEF] +// | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] +// +// NameChar ::= NameStartChar | "-" | "." | [0-9] +// | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] +// +// Note: \u0487 (Combining Cyrillic Millions Sign) was added in Unicode 4.0, +// after XML 1.0 was defined against Unicode 2.0. It falls inside the range +// \u037F-\u1FFF but must be excluded. We split that range into +// \u037F-\u0486 and \u0488-\u1FFF to exclude it explicitly. +// --------------------------------------------------------------------------- + +const src_nameStartChar10 = + ':A-Za-z_' + + '\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF' + + '\u0370-\u037D' + + '\u037F-\u0486\u0488-\u1FFF' + // split to exclude \u0487 + '\u200C-\u200D' + + '\u2070-\u218F' + + '\u2C00-\u2FEF' + + '\u3001-\uD7FF' + + '\uF900-\uFDCF' + + '\uFDF0-\uFFFD'; + +const src_nameChar10 = + src_nameStartChar10 + + '\\-\\.\\d' + + '\u00B7' + + '\u0300-\u036F' + + '\u203F-\u2040'; + +// --------------------------------------------------------------------------- +// Character class strings — XML 1.1 +// +// Differences from XML 1.0: +// +// NameStartChar: +// 1.0 has split ranges: \u00C0-\u00D6, \u00D8-\u00F6, \u00F8-\u02FF +// 1.1 merges them into: \u00C0-\u02FF +// (\u00D7 x and \u00F7 / are division symbols, excluded in both versions) +// +// 1.0 tops out at \uFFFD (BMP only) +// 1.1 adds \u{10000}-\u{EFFFF} (supplementary planes) +// These require the /u flag on the RegExp — see buildRegexes below. +// +// NameChar: +// 1.1 adds \u0487 (Combining Cyrillic Millions Sign, added in Unicode 4.0) +// --------------------------------------------------------------------------- + +const src_nameStartChar11 = + ':A-Za-z_' + + '\u00C0-\u02FF' + // merged — 1.0 had three split ranges here + '\u0370-\u037D' + + '\u037F-\u0486\u0488-\u1FFF' + // split to exclude \u0487 (combining mark, never a NameStartChar) + '\u200C-\u200D' + + '\u2070-\u218F' + + '\u2C00-\u2FEF' + + '\u3001-\uD7FF' + + '\uF900-\uFDCF' + + '\uFDF0-\uFFFD' + + '\u{10000}-\u{EFFFF}'; // supplementary planes — REQUIRES /u flag on RegExp + +const src_nameChar11 = + src_nameStartChar11 + + '\\-\\.\\d' + + '\u00B7' + + '\u0300-\u036F' + + '\u0487' + // Combining Cyrillic Millions Sign — valid in 1.1, not 1.0 + '\u203F-\u2040'; + +// --------------------------------------------------------------------------- +// Regex builders +// +// XML 1.0 regexes: no flags — BMP only, standard JS regex behaviour. +// XML 1.1 regexes: /u flag — required for \u{10000}-\u{EFFFF} to match actual +// supplementary code points rather than lone surrogates (which are illegal XML). +// --------------------------------------------------------------------------- + +const src_buildRegexes = (startChar, char, flags = '') => { + const ncStart = startChar.replace(':', ''); + const ncChar = char.replace(':', ''); + const ncNamePat = `[${ncStart}][${ncChar}]*`; + + return { + name: new RegExp(`^[${startChar}][${char}]*$`, flags), + ncName: new RegExp(`^${ncNamePat}$`, flags), + qName: new RegExp(`^${ncNamePat}(?::${ncNamePat})?$`, flags), + nmToken: new RegExp(`^[${char}]+$`, flags), + nmTokens: new RegExp(`^[${char}]+(?:\\s+[${char}]+)*$`, flags), + }; +}; + +const src_regexes10 = src_buildRegexes(src_nameStartChar10, src_nameChar10); // no /u — BMP only +const src_regexes11 = src_buildRegexes(src_nameStartChar11, src_nameChar11, 'u'); // /u — enables \u{10000}-\u{EFFFF} + +// --------------------------------------------------------------------------- +// ASCII-only fast path (opt-in, off by default) +// +// The XML 1.0 vs 1.1 NameStartChar/NameChar productions differ *only* in +// their non-ASCII ranges (merged vs split Latin-1 ranges, \u0487, and +// supplementary planes). Restricted to ASCII, both versions collapse to the +// same character classes, so a single regex pair covers both xmlVersion +// values — no /u flag needed. +// +// Rationale: unicode-aware regexes (the /u flag, required for XML 1.1's +// supplementary-plane range) are measurably slower in V8 than plain +// non-unicode regexes on the same input, even when the input is pure ASCII. +// For the common case — HTML/SVG ids, XML tags — names are ASCII, so callers +// who know this can opt in to skip the unicode-aware matching path entirely. +// This is a real but *conditional* win: mainly for XML 1.1 input (avoids /u), +// or at scale where the larger unicode character classes add engine +// overhead. It also changes behaviour (rejects legitimate non-ASCII XML +// 1.0/1.1 names), so it must never be silently enabled — hence off by +// default. +// --------------------------------------------------------------------------- + +const nameStartCharAscii = ':A-Za-z_'; +const nameCharAscii = nameStartCharAscii + '\\-\\.\\d'; + +const regexesAscii = src_buildRegexes(nameStartCharAscii, nameCharAscii); // no /u — ASCII only + +const src_getRegexes = (xmlVersion = '1.0', asciiOnly = false) => { + if (asciiOnly) return regexesAscii; + return xmlVersion === '1.1' ? src_regexes11 : src_regexes10; +}; + +// --------------------------------------------------------------------------- +// Boolean validators +// --------------------------------------------------------------------------- + +/** + * Returns true if the string is a valid XML Name. + * Colons are allowed anywhere (Name production). + * Used for: DOCTYPE entity names, notation names, DTD element declarations. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const xml_naming_src_name = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).name.test(str); + +/** + * Returns true if the string is a valid NCName (Non-Colonized Name). + * Colons are not permitted. + * Used for: namespace prefixes, local names, SVG id attributes. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const src_ncName = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).ncName.test(str); + +/** + * Returns true if the string is a valid QName (Qualified Name). + * Allows exactly one colon as a prefix separator: prefix:localName. + * Used for: element and attribute names in namespace-aware XML/SVG. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const src_qName = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).qName.test(str); + +/** + * Returns true if the string is a valid NMToken. + * Like Name but no restriction on the first character. + * Used for: DTD NMTOKEN attribute values. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const src_nmToken = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).nmToken.test(str); + +/** + * Returns true if the string is a valid NMTokens value. + * A whitespace-separated list of NMToken values. + * Used for: DTD NMTOKENS attribute values. + * + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * asciiOnly: skip unicode-aware matching, ASCII names only (default false). + */ +const src_nmTokens = (str, { xmlVersion = '1.0', asciiOnly = false } = {}) => + src_getRegexes(xmlVersion, asciiOnly).nmTokens.test(str); + +// --------------------------------------------------------------------------- +// Memoized validator factory +// +// Real documents reuse a small vocabulary of tag/attribute names across many +// siblings (e.g. `id`, `class`, `href` repeated across hundreds of elements). +// The plain boolean validators above re-run the regex on every call +// regardless of repeats. `createValidator` returns a closure with a private +// string -> boolean cache, so repeated names after the first become O(1) +// lookups instead of regex tests. +// +// - opts (xmlVersion, asciiOnly) are fixed at creation time, so the regex is +// resolved once, not on every call. +// - The cache is private to the returned closure — no shared/global state, +// no cross-caller pollution. +// - `maxCacheSize` bounds memory: once the cache reaches this many entries, +// it stops accepting new ones (existing entries keep serving hits; new +// misses just fall through to the regex, uncached). This avoids unbounded +// growth against adversarial/high-cardinality input (e.g. validating +// attacker-supplied names with no repeats) without the cost/complexity of +// a full LRU, and without the perf cliff of reset-and-refill thrashing. +// - Call `.reset()` on the returned function to clear the cache manually +// (e.g. between unrelated parse calls). +// --------------------------------------------------------------------------- + +const src_PRODUCTIONS = (/* unused pure expression or super */ null && (['name', 'ncName', 'qName', 'nmToken', 'nmTokens'])); + +/** + * Returns a memoized boolean validator function for a single production, + * with opts fixed at creation time. + * + * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean, maxCacheSize?: number }} [opts] + * maxCacheSize: max number of distinct strings to cache (default 2048). + * Once reached, new strings are validated but not cached; existing cached + * entries keep being served. + * @returns {((str: string) => boolean) & { reset: () => void }} + */ +const createValidator = (production, { xmlVersion = '1.0', asciiOnly = false, maxCacheSize = 2048 } = {}) => { + if (!src_PRODUCTIONS.includes(production)) { + throw new TypeError( + `Unknown production "${production}". Must be one of: ${src_PRODUCTIONS.join(', ')}` + ); + } + + const regex = src_getRegexes(xmlVersion, asciiOnly)[production]; + let cache = new Map(); + + const validator = (str) => { + const cached = cache.get(str); + if (cached !== undefined) return cached; + + const result = regex.test(str); + if (cache.size < maxCacheSize) cache.set(str, result); + return result; + }; + + validator.reset = () => { cache = new Map(); }; + + return validator; +}; + +// --------------------------------------------------------------------------- +// Diagnostic validator +// --------------------------------------------------------------------------- + +/** + * Validates a string against a named production and returns a detailed result. + * + * @param {string} str + * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * @returns {{ valid: boolean, production: string, input: string, reason?: string, position?: number }} + */ +const src_validate = (str, production, { xmlVersion = '1.0', asciiOnly = false } = {}) => { + if (!src_PRODUCTIONS.includes(production)) { + throw new TypeError( + `Unknown production "${production}". Must be one of: ${src_PRODUCTIONS.join(', ')}` + ); + } + + const validators = { name: xml_naming_src_name, ncName: src_ncName, qName: src_qName, nmToken: src_nmToken, nmTokens: src_nmTokens }; + const isValid = validators[production](str, { xmlVersion, asciiOnly }); + + if (isValid) return { valid: true, production, input: str }; + + let reason = 'Does not match the production rules'; + let position; + + // Diagnostic fallback char checks must mirror the same character set the + // boolean validator above used, or the reported reason/position could + // contradict the `valid: false` result (e.g. flagging a char as illegal + // that the unicode-aware check would have accepted). + const startCharPattern = asciiOnly ? /^[:A-Za-z_]/ : /^[:A-Za-z_\u00C0-\uFFFD]/; + const namePattern = asciiOnly ? /[\w\-\\.:]/ : /[\w\-\\.:\u00B7\u00C0-\uFFFD]/; + + if (str.length === 0) { + reason = 'Input is empty'; + } else if (production === 'ncName' && str.includes(':')) { + position = str.indexOf(':'); + reason = 'Colon is not allowed in NCName'; + } else if (production === 'qName' && str.startsWith(':')) { + reason = 'QName cannot start with a colon'; + position = 0; + } else if (production === 'qName' && str.endsWith(':')) { + reason = 'QName cannot end with a colon'; + position = str.length - 1; + } else if (production === 'qName' && (str.match(/:/g) || []).length > 1) { + reason = 'QName can have at most one colon'; + position = str.lastIndexOf(':'); + } else if ( + ['name', 'ncName', 'qName'].includes(production) && + !startCharPattern.test(str[0]) + ) { + reason = `First character "${str[0]}" is not a valid NameStartChar`; + position = 0; + } else { + for (let i = 0; i < str.length; i++) { + if (!namePattern.test(str[i])) { + reason = `Character "${str[i]}" at position ${i} is not a valid NameChar`; + position = i; + break; + } + } + } + + return { valid: false, production, input: str, reason, position }; +}; + +// --------------------------------------------------------------------------- +// Batch validator +// --------------------------------------------------------------------------- + +/** + * Validates an array of strings against a named production. + * + * @param {string[]} strings + * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production + * @param {{ xmlVersion?: '1.0'|'1.1', asciiOnly?: boolean }} [opts] + * @returns {Array<{ valid: boolean, production: string, input: string, reason?: string, position?: number }>} + */ +const src_validateAll = (strings, production, opts = {}) => + strings.map(str => src_validate(str, production, opts)); + +// --------------------------------------------------------------------------- +// Sanitizer +// --------------------------------------------------------------------------- + +/** + * Transforms an invalid string into the nearest valid XML name for the given production. + * + * @param {string} str + * @param {'name'|'ncName'|'qName'|'nmToken'|'nmTokens'} production + * @param {{ replacement?: string, asciiOnly?: boolean }} [opts] + * asciiOnly: also replace any non-ASCII character, not just XML-illegal + * ones (default false). + * @returns {string} + */ +const src_sanitize = (str, production = 'name', { replacement = '_', asciiOnly = false } = {}) => { + if (!str) return replacement; + + let result = str; + + // Strip colons for NCName + if (production === 'ncName') { + result = result.replace(/:/g, ''); + } + + // Replace illegal characters + const allowedCharPattern = asciiOnly ? /[^\w\-\.:]/g : /[^\w\-\.:\u00B7\u00C0-\uFFFD]/g; + result = result.replace(allowedCharPattern, replacement); + + // Fix invalid start character for Name / NCName / QName + if (production !== 'nmToken' && production !== 'nmTokens') { + if (/^[\-\.\d]/.test(result)) { + result = replacement + result; + } + } + + return result || replacement; +}; ;// CONCATENATED MODULE: ./node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js @@ -56547,23 +56806,8 @@ class DocTypeReader { i = i + 9; let angleBracketsCount = 1; let hasBody = false, comment = false; - let quoteChar = null; // tracks an open SYSTEM/PUBLIC literal before the '[' body let exp = ""; for (; i < xmlData.length; i++) { - // Inside a quoted external-identifier literal — XML allows '<' - // and '>' as plain data here, so they must not be interpreted - // as DOCTYPE structure until the matching quote closes. - if (quoteChar !== null) { - if (xmlData[i] === quoteChar) quoteChar = null; - exp += xmlData[i]; - continue; - } - if (!hasBody && !comment && (xmlData[i] === '"' || xmlData[i] === "'")) { - quoteChar = xmlData[i]; - exp += xmlData[i]; - continue; - } - if (xmlData[i] === '<' && !comment) { //Determine the tag type if (hasBody && hasSeq(xmlData, "!ENTITY", i)) { i += 7; @@ -56618,7 +56862,7 @@ class DocTypeReader { exp += xmlData[i]; } } - if (quoteChar !== null || angleBracketsCount !== 0) { + if (angleBracketsCount !== 0) { throw new Error(`Unclosed DOCTYPE`); } } else { @@ -56769,7 +57013,7 @@ class DocTypeReader { let elementName = xmlData.substring(startIndex, i); // Validate element name - if (!this.suppressValidationErr && !qName(elementName, { xmlVersion: this.xmlVersion })) { + if (!this.suppressValidationErr && !src_qName(elementName, { xmlVersion: this.xmlVersion })) { throw new Error(`Invalid element name: "${elementName}"`); } @@ -56943,7 +57187,7 @@ function hasSeq(data, seq, i) { } function validateEntityName(name, xmlVersion) { - if (qName(name, { xmlVersion: xmlVersion })) + if (src_qName(name, { xmlVersion: xmlVersion })) return name; else throw new Error(`Invalid entity name ${name}`); @@ -57333,11 +57577,7 @@ function resolveEnotation(str, trimmedStr, options) { */ function trimZeros(numStr) { if (numStr && numStr.indexOf(".") !== -1) {//float - //remove ending zeros without the O(n^2) backtracking that /0+$/ hits - //when the string doesn't end in 0 but has a long internal zero-run - let end = numStr.length; - while (end > 0 && numStr.charCodeAt(end - 1) === 48 /* '0' */) end--; - numStr = numStr.slice(0, end); + numStr = numStr.replace(/0+$/, ""); //remove ending zeros if (numStr === ".") numStr = "0"; else if (numStr[0] === ".") numStr = "0" + numStr; else if (numStr[numStr.length - 1] === ".") numStr = numStr.substring(0, numStr.length - 1); @@ -60813,12 +61053,7 @@ const parseXml = function (xmlData) { this.matcher.pop(); this.isCurrentNodeStopNode = false; // Reset flag when closing tag - //a closing tag with no matching opening tag leaves the stack empty - currentNode = this.tagsNodeStack.pop() || xmlObj;//avoid recursion, set the parent tag scope - - if (options.captureMetaData && currentNode) { - currentNode.addEndIndex(closeIndex + 1); - } + currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope textData = ""; i = closeIndex; } else if (c1 === 63) { //'?' @@ -60844,11 +61079,6 @@ const parseXml = function (xmlData) { childNode[":@"] = attsMap } this.addChild(currentNode, childNode, this.readonlyMatcher, i); - - if (options.captureMetaData) { - // closeIndex points at '?' of the closing '?>' - currentNode.addEndIndex(tagData.closeIndex + 2); - } } @@ -61013,10 +61243,6 @@ const parseXml = function (xmlData) { this.isCurrentNodeStopNode = false; // Reset flag this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex); - - if (options.captureMetaData) { - currentNode.addEndIndex(i + 1); - } } else { //selfClosing tag if (isSelfClosing) { @@ -61027,10 +61253,6 @@ const parseXml = function (xmlData) { childNode[":@"] = prefixedAttrs; } this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex); - - if (options.captureMetaData) { - currentNode.addEndIndex(closeIndex + 1); - } this.matcher.pop(); // Pop self-closing tag this.isCurrentNodeStopNode = false; // Reset flag } @@ -61040,10 +61262,6 @@ const parseXml = function (xmlData) { childNode[":@"] = prefixedAttrs; } this.addChild(currentNode, childNode, this.readonlyMatcher, startIndex); - - if (options.captureMetaData) { - currentNode.addEndIndex(result.closeIndex + 1); - } this.matcher.pop(); // Pop unpaired tag this.isCurrentNodeStopNode = false; // Reset flag i = result.closeIndex; @@ -61678,8 +61896,7 @@ async function parseXML(str, opts = {}) { delete parsedXml["?xml"]; } if (!opts.includeRoot) { - const key = Object.keys(parsedXml)[0]; - if (key !== undefined) { + for (const key of Object.keys(parsedXml)) { const value = parsedXml[key]; return typeof value === "object" ? { ...value } : value; } @@ -62171,12 +62388,43 @@ class BufferScheduler { } } //# sourceMappingURL=BufferScheduler.js.map +;// CONCATENATED MODULE: external "node:module" +const external_node_module_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:module"); +;// CONCATENATED MODULE: external "node:path" +const external_node_path_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:path"); +// EXTERNAL MODULE: external "node:url" +var external_node_url_ = __nccwpck_require__(3136); ;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/crc64.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +// ESM-COMPAT-START (this block is stripped from dist/commonjs by copyJSFiles.cjs) +// In ESM under Node, `require`, `__filename`, and `__dirname` are not defined. +// Synthesize them from `import.meta.url` so the Emscripten Node branch below works as-is. +// Specifiers are held in variables to prevent web bundlers from statically resolving `node:*`. +// The detection check below MUST stay byte-for-byte identical to the Emscripten-generated +// `ENVIRONMENT_IS_NODE` check later in this file; otherwise the polyfill and the Node branch +// can disagree and the ESM `ReferenceError: require is not defined` bug returns. + + + +const __isNode__ = + typeof process === "object" && + typeof process.versions === "object" && + typeof process.versions.node === "string"; +let crc64_require; +let crc64_filename; +let crc64_dirname; +if (__isNode__) { + crc64_require = (0,external_node_module_namespaceObject.createRequire)(import.meta.url); + crc64_filename = (0,external_node_url_.fileURLToPath)(import.meta.url); + crc64_dirname = (0,external_node_path_namespaceObject.dirname)(crc64_filename); +} +// ESM-COMPAT-END + var NativeCRC64 = (() => { var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof crc64_filename !== 'undefined') _scriptDir = _scriptDir || crc64_filename; return ( function(NativeCRC64) { NativeCRC64 = NativeCRC64 || {}; @@ -62282,10 +62530,50 @@ function logExceptionOnExit(e) { if (ENVIRONMENT_IS_NODE) { if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); - // The wasm is base64-embedded (see `binaryInString`) and loaded via `getBinary()`, - // so the Node fs/path read hooks emitted by Emscripten are never exercised and - // have been removed. This keeps the file free of Node built-in imports so it can be - // consumed as-is by web bundlers and by ESM-to-CommonJS bundlers (see issue #39057). + // `require()` is no-op in an ESM module, use `createRequire()` to construct + // the require()` function. This is only necessary for multi-environment + // builds, `-sENVIRONMENT=node` emits a static import declaration instead. + // TODO: Swap all `require()`'s with `import()`'s? + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = crc64_require('fs'); + var nodePath = crc64_require('path'); + + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = nodePath.dirname(scriptDirectory) + '/'; + } else { + scriptDirectory = crc64_dirname + '/'; + } + +// include: node_shell_read.js + + +read_ = (filename, binary) => { + // We need to re-wrap `file://` strings to URLs. Normalizing isn't + // necessary in that case, the path should already be absolute. + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + return fs.readFileSync(filename, binary ? undefined : 'utf8'); +}; + +readBinary = (filename) => { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; +}; + +readAsync = (filename, onload, onerror) => { + // See the comment in the `read_` function. + filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename); + fs.readFile(filename, function(err, data) { + if (err) onerror(err); + else onload(data.buffer); + }); +}; + +// end include: node_shell_read.js if (process['argv'].length > 1) { thisProgram = process['argv'][1].replace(/\\/g, '/'); } @@ -62322,7 +62610,27 @@ if (ENVIRONMENT_IS_NODE) { } else if (ENVIRONMENT_IS_SHELL) { - if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof importScripts == 'function') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + if ((typeof process == 'object' && typeof crc64_require === 'function') || typeof window == 'object' || typeof importScripts == 'function') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + if (typeof read != 'undefined') { + read_ = function shell_read(f) { + return read(f); + }; + } + + readBinary = function readBinary(f) { + let data; + if (typeof readbuffer == 'function') { + return new Uint8Array(readbuffer(f)); + } + data = read(f, 'binary'); + assert(typeof data == 'object'); + return data; + }; + + readAsync = function readAsync(f, onload, onerror) { + setTimeout(() => onload(readBinary(f)), 0); + }; if (typeof scriptArgs != 'undefined') { arguments_ = scriptArgs; @@ -62350,9 +62658,72 @@ if (ENVIRONMENT_IS_SHELL) { // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and // ENVIRONMENT_IS_NODE. if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // When MODULARIZE, this JS may be executed later, after document.currentScript + // is gone, so we saved it, and we use it here instead of any other info. + if (_scriptDir) { + scriptDirectory = _scriptDir; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.indexOf('blob:') !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf('/')+1); + } else { + scriptDirectory = ''; + } + if (!(typeof window == 'object' || typeof importScripts == 'function')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); - // The XHR-based read hooks emitted by Emscripten are unused because the wasm is - // base64-embedded; they have been removed so the file contains no DOM/XHR I/O. + + // Differentiate the Web Worker from the Node Worker case, as reading must + // be done differently. + { +// include: web_or_worker_shell_read.js + + + read_ = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(null); + return xhr.responseText; + } + + if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + } + +// end include: web_or_worker_shell_read.js + } + + setWindowTitle = (title) => document.title = title; } else { throw new Error('environment detection error'); @@ -65645,27 +66016,6 @@ function cache_getCachedDefaultHttpClient() { return _defaultHttpClient; } //# sourceMappingURL=cache.js.map -;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/StorageResponseFormat.js -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/** - * Specifies the format the service should use to return list results. - */ -const StorageResponseFormat = { - /** - * Default. Currently maps to {@link StorageResponseFormat.Xml}, but may be updated in future releases. - */ - Auto: "Auto", - /** - * Use XML to return list results. - */ - Xml: "Xml", - /** - * Use Apache Arrow to return list results. - */ - Arrow: "Arrow", -}; -//# sourceMappingURL=StorageResponseFormat.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/RequestPolicy.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. @@ -65863,7 +66213,7 @@ class AnonymousCredential extends Credential { ;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/utils/constants.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -const utils_constants_SDK_VERSION = "12.5.0"; +const utils_constants_SDK_VERSION = "12.4.0"; const constants_URLConstants = { Parameters: { FORCE_BROWSER_NO_CACHE: "_", @@ -66881,7 +67231,8 @@ class StorageRetryPolicy extends BaseRequestPolicy { */ shouldRetry(isPrimaryRetry, attempt, response, err) { if (attempt >= this.retryOptions.maxTries) { - storage_common_dist_esm_log_logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${this.retryOptions.maxTries}, no further try.`); + storage_common_dist_esm_log_logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${this.retryOptions + .maxTries}, no further try.`); return false; } // Handle network failures, you may need to customize the list when you implement @@ -67362,18 +67713,6 @@ function storageRequestFailureDetailsParserPolicy() { async sendRequest(request, next) { try { const response = await next(request); - if (response.status === 400 && - response.bodyAsText?.includes("InvalidHeaderValue") && - response.bodyAsText.includes("x-ms-version")) { - // replace the error message with a more user-friendly one that includes a link to documentation - /* example response text: - ` - InvalidHeaderValueThe value for one of the HTTP headers is not in the correct format. - RequestId:e5ea566c-101e-001c-1ec4-acf180000000 - Time:2026-03-05T17:24:34.6688015Zx-ms-version3025-01-01` - */ - response.bodyAsText = response.bodyAsText.replace(/.*<\/Message>/s, "The provided service version is not enabled on this storage account. Please see https://learn.microsoft.com/rest/api/storageservices/versioning-for-the-azure-storage-services for additional information."); - } return response; } catch (err) { @@ -67458,8 +67797,6 @@ class UserDelegationKeyCredential { - - @@ -67472,8 +67809,8 @@ class UserDelegationKeyCredential { ;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/constants.js // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -const esm_utils_constants_SDK_VERSION = "12.33.0"; -const SERVICE_VERSION = "2026-06-06"; +const esm_utils_constants_SDK_VERSION = "12.32.0"; +const SERVICE_VERSION = "2026-04-06"; const BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES = 256 * 1024 * 1024; // 256MB const BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES = 4000 * 1024 * 1024; // 4000MB const BLOCK_BLOB_MAX_BLOCKS = 50000; @@ -69556,7 +69893,6 @@ const BlobPropertiesInternal = { "Cool", "Archive", "Cold", - "Smart", ], }, }, @@ -69576,32 +69912,6 @@ const BlobPropertiesInternal = { "rehydrate-pending-to-hot", "rehydrate-pending-to-cool", "rehydrate-pending-to-cold", - "rehydrate-pending-to-smart", - ], - }, - }, - smartAccessTier: { - serializedName: "SmartAccessTier", - xmlName: "SmartAccessTier", - type: { - name: "Enum", - allowedValues: [ - "P4", - "P6", - "P10", - "P15", - "P20", - "P30", - "P40", - "P50", - "P60", - "P70", - "P80", - "Hot", - "Cool", - "Archive", - "Cold", - "Smart", ], }, }, @@ -72747,13 +73057,6 @@ const BlobGetPropertiesHeaders = { name: "DateTimeRfc1123", }, }, - smartAccessTier: { - serializedName: "x-ms-smart-access-tier", - xmlName: "x-ms-smart-access-tier", - type: { - name: "String", - }, - }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", @@ -76748,7 +77051,7 @@ const timeoutInSeconds = { const version = { parameterPath: "version", mapper: { - defaultValue: "2026-06-06", + defaultValue: "2026-04-06", isConstant: true, serializedName: "x-ms-version", type: { @@ -77655,7 +77958,6 @@ const tier = { "Cool", "Archive", "Cold", - "Smart", ], }, }, @@ -77894,7 +78196,6 @@ const tier1 = { "Cool", "Archive", "Cold", - "Smart", ], }, }, @@ -81603,7 +81904,7 @@ class StorageClient extends ExtendedServiceClient { const defaults = { requestContentType: "application/json; charset=utf-8", }; - const packageDetails = `azsdk-js-azure-storage-blob/12.33.0`; + const packageDetails = `azsdk-js-azure-storage-blob/12.32.0`; const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` : `${packageDetails}`; @@ -81619,7 +81920,7 @@ class StorageClient extends ExtendedServiceClient { // Parameter assignments this.url = url; // Assigning values to Constant parameters - this.version = options.version || "2026-06-06"; + this.version = options.version || "2026-04-06"; this.service = new ServiceImpl(this); this.container = new ContainerImpl(this); this.blob = new BlobImpl(this); @@ -81672,13 +81973,6 @@ class StorageContextClient extends StorageClient { -const accountNameSuffixes = [ - "-secondary-ipv6", - "-secondary-dualstack", - "-ipv6", - "-dualstack", - "-secondary", -]; /** * Reserved URL characters must be properly escaped for Storage services like Blob or File. * @@ -82155,15 +82449,7 @@ function utils_common_getAccountNameFromUrl(url) { try { if (parsedUrl.hostname.split(".")[1] === "blob") { // `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`; - // `${defaultEndpointsProtocol}://${accountName}-suffix.blob.${endpointSuffix}`; accountName = parsedUrl.hostname.split(".")[0]; - for (let i = 0; i < accountNameSuffixes.length; ++i) { - const suffix = accountNameSuffixes[i]; - if (accountName.endsWith(suffix)) { - accountName = accountName.substring(0, accountName.length - suffix.length); - break; - } - } } else if (utils_common_isIpEndpointStyle(parsedUrl)) { // IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/ @@ -83137,10 +83423,6 @@ class SASQueryParameters { * Keys for request query parameters required in the SAS token */ requestQueryParameterKeys; - /** To indicate the depth of the virtual blob directory specified - * in the canonicalizedresource field of the string-to-sign. - */ - directoryDepth; /** * Optional. IP range allowed for this SAS. * @@ -83155,7 +83437,7 @@ class SASQueryParameters { } return undefined; } - constructor(version, signature, permissionsOrOptions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey, preauthorizedAgentObjectId, correlationId, encryptionScope, delegatedUserObjectId, requestHeaderKeys, requestQueryParameterKeys, directoryDepth) { + constructor(version, signature, permissionsOrOptions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey, preauthorizedAgentObjectId, correlationId, encryptionScope, delegatedUserObjectId, requestHeaderKeys, requestQueryParameterKeys) { this.version = version; this.signature = signature; if (permissionsOrOptions !== undefined && typeof permissionsOrOptions !== "string") { @@ -83178,7 +83460,6 @@ class SASQueryParameters { this.contentType = permissionsOrOptions.contentType; this.requestHeaderKeys = permissionsOrOptions.requestHeaderKeys; this.requestQueryParameterKeys = permissionsOrOptions.requestQueryParameterKeys; - this.directoryDepth = permissionsOrOptions.directoryDepth; if (permissionsOrOptions.userDelegationKey) { this.signedOid = permissionsOrOptions.userDelegationKey.signedObjectId; this.signedTenantId = permissionsOrOptions.userDelegationKey.signedTenantId; @@ -83211,7 +83492,6 @@ class SASQueryParameters { this.contentType = contentType; this.requestHeaderKeys = requestHeaderKeys; this.requestQueryParameterKeys = requestQueryParameterKeys; - this.directoryDepth = directoryDepth; if (userDelegationKey) { this.signedOid = userDelegationKey.signedObjectId; this.signedTenantId = userDelegationKey.signedTenantId; @@ -83255,7 +83535,6 @@ class SASQueryParameters { "rsct", "saoid", "scid", - "sdd", "sduoid", // Signed key user delegation object ID "skdutid", // Signed key user delegation tenant ID "srh", // Request Headers @@ -83352,9 +83631,6 @@ class SASQueryParameters { case "srq": // Request headers this.tryAppendQueryParameter(queries, param, this.requestQueryParameterKeys); break; - case "sdd": // Directory depth - this.tryAppendQueryParameter(queries, param, this.directoryDepth !== undefined ? this.directoryDepth.toString() : ""); - break; } } return queries.join("&"); @@ -83426,13 +83702,7 @@ function generateBlobSASQueryParametersInternal(blobSASSignatureValues, sharedKe // https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas#constructing-the-signature-string if (version >= "2018-11-09") { if (sharedKeyCredential !== undefined) { - // Version 2020-02-10 delegation SAS signature construction supports blob name as a virtual directory. - if (version >= "2020-02-10") { - return generateBlobSASQueryParameters20200210(blobSASSignatureValues, sharedKeyCredential); - } - else { - return generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential); - } + return generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential); } else { // Version 2020-02-10 delegation SAS signature construction includes preauthorizedAgentObjectId, agentObjectId, correlationId. @@ -83588,85 +83858,6 @@ function generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKe stringToSign: stringToSign, }; } -/** - * ONLY AVAILABLE IN NODE.JS RUNTIME. - * IMPLEMENTATION FOR API VERSION FROM 2020-02-10. - * - * Creates an instance of SASQueryParameters. - * - * Only accepts required settings needed to create a SAS. For optional settings please - * set corresponding properties directly, such as permissions, startsOn and identifier. - * - * WARNING: When identifier is not provided, permissions and expiresOn are required. - * You MUST assign value to identifier or expiresOn & permissions manually if you initial with - * this constructor. - * - * @param blobSASSignatureValues - - * @param sharedKeyCredential - - */ -function generateBlobSASQueryParameters20200210(blobSASSignatureValues, sharedKeyCredential) { - blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues); - if (!blobSASSignatureValues.identifier && - !(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) { - throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided."); - } - let resource = "c"; - let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; - if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; - } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } - } - } - // Calling parse and toString guarantees the proper ordering and throws on invalid characters. - let verifiedPermissions; - if (blobSASSignatureValues.permissions) { - if (blobSASSignatureValues.blobName) { - verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); - } - else { - verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); - } - } - // Signature is generated on the un-url-encoded values. - const stringToSign = [ - verifiedPermissions ? verifiedPermissions : "", - blobSASSignatureValues.startsOn - ? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false) - : "", - blobSASSignatureValues.expiresOn - ? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) - : "", - getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), - blobSASSignatureValues.identifier, - blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "", - blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "", - blobSASSignatureValues.version, - resource, - timestamp, - blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "", - blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "", - blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "", - blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "", - blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : "", - ].join("\n"); - const signature = sharedKeyCredential.computeHMACSHA256(stringToSign); - return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, undefined, undefined, undefined, undefined, undefined, undefined, undefined, directoryDepth), - stringToSign: stringToSign, - }; -} /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * IMPLEMENTATION FOR API VERSION FROM 2020-12-06. @@ -83691,21 +83882,14 @@ function generateBlobSASQueryParameters20201206(blobSASSignatureValues, sharedKe } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -83743,7 +83927,7 @@ function generateBlobSASQueryParameters20201206(blobSASSignatureValues, sharedKe ].join("\n"); const signature = sharedKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, undefined, undefined, undefined, blobSASSignatureValues.encryptionScope, undefined, undefined, undefined, directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, undefined, undefined, undefined, blobSASSignatureValues.encryptionScope), stringToSign: stringToSign, }; } @@ -83848,21 +84032,14 @@ function generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userD } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -83911,7 +84088,7 @@ function generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userD ].join("\n"); const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, undefined, undefined, undefined, undefined, directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId), stringToSign: stringToSign, }; } @@ -83937,21 +84114,14 @@ function generateBlobSASQueryParametersUDK20201206(blobSASSignatureValues, userD } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -84001,7 +84171,7 @@ function generateBlobSASQueryParametersUDK20201206(blobSASSignatureValues, userD ].join("\n"); const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, undefined, undefined, undefined, directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope), stringToSign: stringToSign, }; } @@ -84027,21 +84197,14 @@ function generateBlobSASQueryParametersUDK20250705(blobSASSignatureValues, userD } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -84093,7 +84256,7 @@ function generateBlobSASQueryParametersUDK20250705(blobSASSignatureValues, userD ].join("\n"); const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId, undefined, undefined, directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId), stringToSign: stringToSign, }; } @@ -84119,21 +84282,14 @@ function generateBlobSASQueryParametersUDK20260406(blobSASSignatureValues, userD } let resource = "c"; let timestamp = blobSASSignatureValues.snapshotTime; - let directoryDepth = undefined; if (blobSASSignatureValues.blobName) { - if (blobSASSignatureValues.isDirectory === true) { - resource = "d"; - directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length; + resource = "b"; + if (blobSASSignatureValues.snapshotTime) { + resource = "bs"; } - else { - resource = "b"; - if (blobSASSignatureValues.snapshotTime) { - resource = "bs"; - } - else if (blobSASSignatureValues.versionId) { - resource = "bv"; - timestamp = blobSASSignatureValues.versionId; - } + else if (blobSASSignatureValues.versionId) { + resource = "bv"; + timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. @@ -84187,7 +84343,7 @@ function generateBlobSASQueryParametersUDK20260406(blobSASSignatureValues, userD ].join("\n"); const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return { - sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId, getKeysOfRequestHeaders(blobSASSignatureValues.requestHeaders), getKeysOfRequestHeaders(blobSASSignatureValues.requestQueryParameters), directoryDepth), + sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId, getKeysOfRequestHeaders(blobSASSignatureValues.requestHeaders), getKeysOfRequestHeaders(blobSASSignatureValues.requestQueryParameters)), stringToSign: stringToSign, }; } @@ -84295,16 +84451,6 @@ function SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues) { blobSASSignatureValues.version = version; return blobSASSignatureValues; } -function trimBlobName(blobName) { - let internalName = blobName; - while (internalName.startsWith("/")) { - internalName = internalName.substring(1); - } - while (internalName.endsWith("/")) { - internalName = internalName.substring(0, internalName.length - 1); - } - return internalName; -} //# sourceMappingURL=BlobSASSignatureValues.js.map ;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BlobLeaseClient.js // Copyright (c) Microsoft Corporation. @@ -88159,7 +88305,6 @@ class Clients_BlobClient extends StorageClient_StorageClient { * ```ts snippet:ReadmeSampleDownloadBlob_Node * import { BlobServiceClient } from "@azure/storage-blob"; * import { DefaultAzureCredential } from "@azure/identity"; - * import { buffer } from "node:stream/consumers"; * * const account = ""; * const blobServiceClient = new BlobServiceClient( @@ -88176,10 +88321,22 @@ class Clients_BlobClient extends StorageClient_StorageClient { * // In Node.js, get downloaded data by accessing downloadBlockBlobResponse.readableStreamBody * const downloadBlockBlobResponse = await blobClient.download(); * if (downloadBlockBlobResponse.readableStreamBody) { - * // Download the raw bytes of the blob. Use `text` from "node:stream/consumers" - * // instead if you want to read the content as a string directly. - * const downloaded = await buffer(downloadBlockBlobResponse.readableStreamBody); - * console.log(`Downloaded blob content: ${downloaded.toString()}`); + * const downloaded = await streamToString(downloadBlockBlobResponse.readableStreamBody); + * console.log(`Downloaded blob content: ${downloaded}`); + * } + * + * async function streamToString(stream: NodeJS.ReadableStream): Promise { + * const result = await new Promise>((resolve, reject) => { + * const chunks: Buffer[] = []; + * stream.on("data", (data) => { + * chunks.push(Buffer.isBuffer(data) ? data : Buffer.from(data)); + * }); + * stream.on("end", () => { + * resolve(Buffer.concat(chunks)); + * }); + * stream.on("error", reject); + * }); + * return result.toString(); * } * ``` * @@ -89551,7 +89708,6 @@ class BlockBlobClient extends Clients_BlobClient { * ```ts snippet:ClientsQuery * import { BlobServiceClient } from "@azure/storage-blob"; * import { DefaultAzureCredential } from "@azure/identity"; - * import { buffer } from "node:stream/consumers"; * * const account = ""; * const blobServiceClient = new BlobServiceClient( @@ -89567,10 +89723,22 @@ class BlockBlobClient extends Clients_BlobClient { * // Query and convert a blob to a string * const queryBlockBlobResponse = await blockBlobClient.query("select from BlobStorage"); * if (queryBlockBlobResponse.readableStreamBody) { - * // Read the response bytes. Use `text` from "node:stream/consumers" instead - * // if you want the response as a string directly. - * const downloadedBuffer = await buffer(queryBlockBlobResponse.readableStreamBody); - * console.log(`Query blob content: ${downloadedBuffer.toString()}`); + * const downloadedBuffer = await streamToBuffer(queryBlockBlobResponse.readableStreamBody); + * const downloaded = downloadedBuffer.toString(); + * console.log(`Query blob content: ${downloaded}`); + * } + * + * async function streamToBuffer(readableStream: NodeJS.ReadableStream): Promise { + * return new Promise((resolve, reject) => { + * const chunks: Buffer[] = []; + * readableStream.on("data", (data) => { + * chunks.push(data instanceof Buffer ? data : Buffer.from(data)); + * }); + * readableStream.on("end", () => { + * resolve(Buffer.concat(chunks)); + * }); + * readableStream.on("error", reject); + * }); * } * ``` * diff --git a/package-lock.json b/package-lock.json index 18fd034..1a2ebc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -155,21 +155,21 @@ } }, "node_modules/@azure/abort-controller": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.2.0.tgz", - "integrity": "sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=18.0.0" } }, "node_modules/@azure/core-auth": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.11.0.tgz", - "integrity": "sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -177,13 +177,13 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-client": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.11.0.tgz", - "integrity": "sha512-JjQWO6akOck45PH/XBrxzsQGAiKrfFl4m5iggJ0ItMIz5omRufOXWpqCPpdjKN3vKDzlSUvFjaMb7Zwf0gvAdA==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.2.tgz", + "integrity": "sha512-1D2LpsU7y9xrqKjdIbsB7PlrRePw0xsVV8p+AKTlzITrWmscajryfJCdDJB/oGwvDI5HmRo04eMMADB67uwAwQ==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -195,19 +195,19 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-http-compat": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.5.0.tgz", - "integrity": "sha512-BoSmXPx2er1Ai+wKlDvj29jIQespCNBwEmKyZVHO2kEFsWbGjAjwMCGzug3DJM5/QYIV3vej0S1zcU5bq9fa8w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.4.0.tgz", + "integrity": "sha512-f1P96IB399YiN2ARYHP7EpZi3Bf3wH4SN2lGzrw7JVwm7bbsVYtf2iKSBwTywD2P62NOPZGHFSZi+6jjb75JuA==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@azure/core-client": "^1.10.0", @@ -230,21 +230,21 @@ } }, "node_modules/@azure/core-paging": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.7.0.tgz", - "integrity": "sha512-7GEAoIsaoBr6KELNRb8nypowCqvk8dnCHFCYg4XD4lOQGY2GqjQg5IhkRjyBFRO18CGSMq05PaNqSOE9GQro3g==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", + "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=18.0.0" } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.25.0.tgz", - "integrity": "sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.24.0.tgz", + "integrity": "sha512-PpLsoDQ3AMmKZ0VU+0GrmqMxgp/sExjlVm4R+nLWngeoEGAzOIPVifaxKGU5gMv+nWELUoHfvrolWD+ZS/nFJg==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -256,25 +256,25 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-tracing": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.4.0.tgz", - "integrity": "sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-util": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.14.0.tgz", - "integrity": "sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -282,39 +282,39 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-xml": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.6.0.tgz", - "integrity": "sha512-e7lX/dk//F6Qf7BB6PTY4+p2yuOQtyOeHGyapYHNwqSp2OnYpwQt49A/Nin2XmKBQ69pwagR4k/lQBq8lbHQkA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.5.1.tgz", + "integrity": "sha512-xcNRHqCoSp4AunOALEae6A8f3qATb83gSrm31Iqb01OzblvC3/W/bfXozcq78EzIdzZzuH1bZ2NvRR0TdX709w==", "license": "MIT", "dependencies": { "fast-xml-parser": "^5.5.9", "tslib": "^2.8.1" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/logger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.4.0.tgz", - "integrity": "sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", + "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", "license": "MIT", "dependencies": { "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/storage-blob": { - "version": "12.33.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.33.0.tgz", - "integrity": "sha512-2SX8oP8PyblUcAFZSg39c8Ls+tFjavM6sBeV+qpw33mRzRhI/5hrFJmJ/x0H9xx5l6ECPvgSP8uPxqTeVbHNIA==", + "version": "12.32.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.32.0.tgz", + "integrity": "sha512-80LzSNnFQye2LCCBFghAJS6jJQJ7N4bfgZ6qDMgVGRtugZ7TLDKQZ2hczMigmZH3jAcMRdma/IygsC5+0gT7Tw==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -328,24 +328,24 @@ "@azure/core-util": "^1.11.0", "@azure/core-xml": "^1.4.5", "@azure/logger": "^1.1.4", - "@azure/storage-common": "^12.4.1", + "@azure/storage-common": "^12.4.0", "events": "^3.0.0", "tslib": "^2.8.1" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/storage-common": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@azure/storage-common/-/storage-common-12.5.0.tgz", - "integrity": "sha512-bttzuhQiCIwrkzjPDA+AtAR7dg19L/CC6ztcqJ5LfvWpXuys9mHp0UQ0udYnoUvv9SCT9KTR5kqFvFr0e6k0lQ==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/@azure/storage-common/-/storage-common-12.4.0.tgz", + "integrity": "sha512-kNhJKMxQb374KOVt63CZnGIpDcrKNzJeyANLJymxE9mCJSdRGzb+Iv9oSIiCj6tNMLypr530b9ObOiA/5OvwOg==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.9.0", - "@azure/core-http-compat": "^2.4.0", - "@azure/core-rest-pipeline": "^1.24.0", + "@azure/core-http-compat": "^2.2.0", + "@azure/core-rest-pipeline": "^1.19.1", "@azure/core-tracing": "^1.2.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.1.4", @@ -353,7 +353,7 @@ "tslib": "^2.8.1" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@babel/code-frame": { @@ -423,14 +423,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", - "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.8", - "@babel/types": "^7.29.8", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -563,13 +563,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.8" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -833,18 +833,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", - "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.8", + "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.8", + "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", - "@babel/types": "^7.29.8", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -852,9 +852,9 @@ } }, "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, "license": "MIT", "dependencies": { @@ -907,9 +907,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", - "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -951,9 +951,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz", - "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1178,6 +1178,16 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", @@ -1598,25 +1608,22 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.3.tgz", - "integrity": "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@tybys/wasm-util": "^0.10.3" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + "@tybys/wasm-util": "^0.10.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" } }, "node_modules/@nodable/entities": { @@ -1696,9 +1703,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.34.52", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.52.tgz", - "integrity": "sha512-XiMQh7qqVlxZzcVD+kkGMNGMzcTrDMLWI7S4x7z1MkCkbDPrekpZXEUK0eZqZFMuHQg2a2DZOcDIh9o5v3Gonw==", + "version": "0.34.49", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", + "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", "dev": true, "license": "MIT" }, @@ -1723,9 +1730,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", - "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "dev": true, "license": "MIT", "optional": true, @@ -1837,9 +1844,9 @@ } }, "node_modules/@types/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "dev": true, "license": "MIT" }, @@ -1868,17 +1875,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz", - "integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.0.tgz", + "integrity": "sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.67.0", - "@typescript-eslint/type-utils": "8.67.0", - "@typescript-eslint/utils": "8.67.0", - "@typescript-eslint/visitor-keys": "8.67.0", + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/type-utils": "8.62.0", + "@typescript-eslint/utils": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -1891,22 +1898,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.67.0", + "@typescript-eslint/parser": "^8.62.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz", - "integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.0.tgz", + "integrity": "sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.67.0", - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/typescript-estree": "8.67.0", - "@typescript-eslint/visitor-keys": "8.67.0", + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "debug": "^4.4.3" }, "engines": { @@ -1922,14 +1929,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz", - "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.0.tgz", + "integrity": "sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.67.0", - "@typescript-eslint/types": "^8.67.0", + "@typescript-eslint/tsconfig-utils": "^8.62.0", + "@typescript-eslint/types": "^8.62.0", "debug": "^4.4.3" }, "engines": { @@ -1944,14 +1951,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz", - "integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.0.tgz", + "integrity": "sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/visitor-keys": "8.67.0" + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1962,9 +1969,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz", - "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.0.tgz", + "integrity": "sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==", "dev": true, "license": "MIT", "engines": { @@ -1979,15 +1986,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz", - "integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.0.tgz", + "integrity": "sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/typescript-estree": "8.67.0", - "@typescript-eslint/utils": "8.67.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/utils": "8.62.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -2004,9 +2011,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz", - "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz", + "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==", "dev": true, "license": "MIT", "engines": { @@ -2018,16 +2025,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz", - "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.0.tgz", + "integrity": "sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.67.0", - "@typescript-eslint/tsconfig-utils": "8.67.0", - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/visitor-keys": "8.67.0", + "@typescript-eslint/project-service": "8.62.0", + "@typescript-eslint/tsconfig-utils": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -2046,16 +2053,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz", - "integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.0.tgz", + "integrity": "sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.67.0", - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/typescript-estree": "8.67.0" + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2070,13 +2077,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz", - "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.0.tgz", + "integrity": "sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/types": "8.62.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -2101,9 +2108,9 @@ } }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.8.tgz", - "integrity": "sha512-bLMpVcWZNzq6lYOybwFwOAR1IXKcHnhUNqYeHjl1bET/qE3jFPFH+p8Wrh3rU4xwdnifPxmKNESBYnvnmc75aA==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.6.tgz", + "integrity": "sha512-jIXhD0eWQ1JA6ln/5Dltyx22UxWNrw0hZmhy2rlv6m6KgF7kplHx3g0fzi09lNmTJQRR91OlemYp3xFnvDK9og==", "license": "MIT", "dependencies": { "http-proxy-agent": "^7.0.0", @@ -2111,13 +2118,13 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=20.0.0" } }, "node_modules/@ungap/structured-clone": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", - "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", + "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", "dev": true, "license": "ISC" }, @@ -2435,9 +2442,9 @@ ] }, "node_modules/@vercel/ncc": { - "version": "0.44.1", - "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.44.1.tgz", - "integrity": "sha512-cUjIE5P2YY1n+Kt9rFIazMMpGoPn1Fic04rOmTkElMkiDP5oszGfERMpo2shVkFKDL7rVppdM2pqJKC59shQWQ==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.44.0.tgz", + "integrity": "sha512-pHyI+bZokSgIscTKFSmpNk5vZzmOrb9RW0Vu4SRyqUvkJ0kgg3PzaZLLDVTFXhbUiCqg0/Eu8L4fKtgViA92kg==", "dev": true, "license": "MIT", "bin": { @@ -2445,9 +2452,9 @@ } }, "node_modules/acorn": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", - "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", "bin": { @@ -2510,9 +2517,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", - "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -2696,9 +2703,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.11.15", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.15.tgz", - "integrity": "sha512-FwMjJJ7HnyZpWe+oWxegG0fezZyBZUagI5LZEoO3GCbtbKNwRfMH9Ue5d5v01PNePBy1QSfPSDTTeVL0Hb9EzA==", + "version": "2.10.38", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz", + "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -2721,9 +2728,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", - "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -2741,11 +2748,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.11.12", - "caniuse-lite": "^1.0.30001809", - "electron-to-chromium": "^1.5.402", - "node-releases": "^2.0.53", - "update-browserslist-db": "^1.3.0" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -2805,9 +2812,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001809", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", - "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", + "version": "1.0.30001799", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", + "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", "dev": true, "funding": [ { @@ -2869,9 +2876,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.1.tgz", - "integrity": "sha512-Ca8swihM+/4yKecYHY52kgJd300hi2lADU/a1RxNTRe+RJ9jvqQlESpbz9DnG9mowez8qwXHB8qYdIUw9e+F5Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", "dev": true, "license": "MIT" }, @@ -3086,9 +3093,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.408", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.408.tgz", - "integrity": "sha512-SLoprcYpJ/OH2v2ps0+N5biv9H4/KBT3+YmmDew64TwK5y9j2wv7pMOFY7IorVkyMtEyLSCRlXKLsNlakeAlPw==", + "version": "1.5.376", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.376.tgz", + "integrity": "sha512-cUVA7/RvbFTEuw/i3obUwDTRIXojaxkResf+ibByPFxjc6XK3VNtcQXV0NSbAlJ0FMjcJGgftVVB4Qo184EXvA==", "dev": true, "license": "ISC" }, @@ -3113,9 +3120,9 @@ "license": "MIT" }, "node_modules/enhanced-resolve": { - "version": "5.24.5", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", - "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.0.tgz", + "integrity": "sha512-SkE2t82KlkkxQRVMVLAGKxLfORGQfrkx5dkj+vlgXRVNEdPc4eZcR+J/Fvj8C+yKSFH5L0q3NFlyufOVQnCcYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3160,9 +3167,9 @@ } }, "node_modules/eslint": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.1.tgz", - "integrity": "sha512-wqA7W2jbsC/BnV9Iv1UZpKVFkO1AdNoSmYW8NWG4HNOBbkAMvIqDZ27pI2f07dqn583NcIC44ckjAcOXDL1QbQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.5.0.tgz", + "integrity": "sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==", "dev": true, "license": "MIT", "workspaces": [ @@ -3172,7 +3179,7 @@ "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", - "@eslint/config-helpers": "^0.7.0", + "@eslint/config-helpers": "^0.6.0", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.2", "@humanfs/node": "^0.16.6", @@ -3196,7 +3203,7 @@ "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.5", + "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -3273,9 +3280,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "29.16.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.16.1.tgz", - "integrity": "sha512-tfxOIsjzaBud+f74aLbBMRcnrztt5eCIgnAdeoGdnzMAQ4IdAa/s/p8Ls55mk9MC79N3j2jbv4Qetz6Hclbcfw==", + "version": "29.15.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.15.2.tgz", + "integrity": "sha512-kEN4r9RZl1xcsb4arGq89LrcVdOUFII/JSCwtTPJyv16mDwmPrcuEQwpxqZHeINvcsd7oK5O/rhdGlxFRaZwvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3288,7 +3295,7 @@ "@typescript-eslint/eslint-plugin": "^8.0.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "jest": "*", - "typescript": ">=4.8.4 <8.0.0" + "typescript": ">=4.8.4 <7.0.0" }, "peerDependenciesMeta": { "@typescript-eslint/eslint-plugin": { @@ -3303,9 +3310,9 @@ } }, "node_modules/eslint-plugin-n": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-18.3.0.tgz", - "integrity": "sha512-cPVguuDe6DrIPb/qUXHf8P89MaVTUmiYWwpt5gX5AILsvRIiZAxMFXcFR6QHYBksqKJpjfUBlL/RleCJUWcD7w==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-18.1.0.tgz", + "integrity": "sha512-hkUm9EtnFV2h2fE16jNVUfCVUqvPzI7fGLsFdun5lFt/pbmf2kCgDx6ymi9rx+NCUSggBmurJCZOfG20JBs/kg==", "dev": true, "license": "MIT", "dependencies": { @@ -3597,9 +3604,9 @@ "license": "MIT" }, "node_modules/fast-xml-builder": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.3.1.tgz", - "integrity": "sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", + "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", "funding": [ { "type": "github", @@ -3608,14 +3615,14 @@ ], "license": "MIT", "dependencies": { - "path-expression-matcher": "^1.6.2", - "xml-naming": "^0.3.0" + "path-expression-matcher": "^1.5.0", + "xml-naming": "^0.1.0" } }, "node_modules/fast-xml-parser": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.11.0.tgz", - "integrity": "sha512-9IGxMqvqLOnqP+Egi1nqDHKv5k8aZ7r9n558enxcucmyVGEBNPAU+MOg/8jPIS7rO7sSq4gFm1/nHtiaubMruw==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.10.1.tgz", + "integrity": "sha512-IEMIf7298kXuZSRFoGfMYrl7is8LpavODgbNz1cwIudv7KwVFnuU+UsMporfq6PD6aXSlawZlARiA3UywCTfMw==", "funding": [ { "type": "github", @@ -3628,13 +3635,28 @@ "fast-xml-builder": "^1.2.0", "is-unsafe": "^2.0.0", "path-expression-matcher": "^1.6.2", - "strnum": "^2.4.2", + "strnum": "^2.4.1", "xml-naming": "^0.3.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, + "node_modules/fast-xml-parser/node_modules/xml-naming": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.3.0.tgz", + "integrity": "sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -3708,9 +3730,9 @@ } }, "node_modules/flatted": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", - "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, @@ -3797,9 +3819,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz", - "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", "dev": true, "license": "MIT", "dependencies": { @@ -3878,9 +3900,9 @@ } }, "node_modules/globals": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.11.0.tgz", - "integrity": "sha512-Z2I8hM+PbJDXQDq3Icgpzv+mPdwr68iZUU9d5WW4FuXfDUQfkZaZuvjMv42/5crNyw154+9+VWXbYrUgDXbxNw==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz", + "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==", "dev": true, "license": "MIT", "engines": { @@ -3980,9 +4002,9 @@ } }, "node_modules/ignore": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", - "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -5001,12 +5023,12 @@ } }, "node_modules/minimatch": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", - "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.8" + "brace-expansion": "^5.0.5" }, "engines": { "node": "18 || 20 || >=22" @@ -5072,9 +5094,9 @@ "license": "MIT" }, "node_modules/nock": { - "version": "14.0.17", - "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.17.tgz", - "integrity": "sha512-EjRr1weMa4ALQX35AgZTEnP+weJJjlW1KGDiNM2IQC2069YDHas4f4B4UUYR+TTLyKWxJvOz2wObDKQs/LNreA==", + "version": "14.0.15", + "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.15.tgz", + "integrity": "sha512-S0a47C9pLvcYx/Ugf0H30BVBEcUgMMBDk9VJIDlJ8XGrfH2QDUD4Tgdp45qDIiHttokBG+IbsOtsvIjGR/j3bg==", "dev": true, "license": "MIT", "dependencies": { @@ -5094,9 +5116,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.53", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", - "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "version": "2.0.48", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.48.tgz", + "integrity": "sha512-1uz8041X6LoI6ZSdZacM9lVY28vuzDlSKitnpbSNK0RfKoIJkX29NBPVEFXhnuSuEOA9Ww0xnPJ+ILWbGAv8DA==", "dev": true, "license": "MIT", "engines": { @@ -5322,9 +5344,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { @@ -5424,9 +5446,9 @@ } }, "node_modules/prettier": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", - "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.4.tgz", + "integrity": "sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==", "dev": true, "license": "MIT", "bin": { @@ -5515,9 +5537,9 @@ }, "node_modules/react-is-19": { "name": "react-is", - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.8.tgz", - "integrity": "sha512-s5un28nYxKJw5gvUHyW5PCC28CvBqLu9r3cWgzHT4Vo/5fqqkFcdRYsGcKf50WMPpjjFZS5d76fn3YCo2njKwQ==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", "dev": true, "license": "MIT" }, @@ -5544,7 +5566,7 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", @@ -5855,9 +5877,9 @@ } }, "node_modules/strnum": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.4.2.tgz", - "integrity": "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.4.1.tgz", + "integrity": "sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==", "funding": [ { "type": "github", @@ -6018,9 +6040,9 @@ } }, "node_modules/ts-jest": { - "version": "29.4.12", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.12.tgz", - "integrity": "sha512-Ov6ClY53Fflh6BGAnY2DlTq1hYDrTycz2PVTXBWFW2CU+9zrEqAp9fWdGXl42EXO5RLSFAcAZ2JFKbP+zBTFfw==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, "license": "MIT", "dependencies": { @@ -6030,7 +6052,7 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.8.5", + "semver": "^7.8.0", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -6217,9 +6239,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", - "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -6432,9 +6454,9 @@ } }, "node_modules/xml-naming": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.3.0.tgz", - "integrity": "sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", + "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", "funding": [ { "type": "github",