@azure/core-lro 2.3.0-beta.1 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +720 -391
- package/dist/index.js.map +1 -1
- package/dist-esm/src/{lroEngine → http}/models.js +0 -0
- package/dist-esm/src/http/models.js.map +1 -0
- package/dist-esm/src/http/operation.js +228 -0
- package/dist-esm/src/http/operation.js.map +1 -0
- package/dist-esm/src/http/poller.js +47 -0
- package/dist-esm/src/http/poller.js.map +1 -0
- package/dist-esm/src/index.js +16 -3
- package/dist-esm/src/index.js.map +1 -1
- package/dist-esm/src/{lroEngine → legacy/lroEngine}/index.js +0 -0
- package/dist-esm/src/legacy/lroEngine/index.js.map +1 -0
- package/dist-esm/src/{lroEngine → legacy/lroEngine}/lroEngine.js +4 -10
- package/dist-esm/src/legacy/lroEngine/lroEngine.js.map +1 -0
- package/dist-esm/src/legacy/lroEngine/models.js +4 -0
- package/dist-esm/src/legacy/lroEngine/models.js.map +1 -0
- package/dist-esm/src/legacy/lroEngine/operation.js +81 -0
- package/dist-esm/src/legacy/lroEngine/operation.js.map +1 -0
- package/dist-esm/src/legacy/models.js +4 -0
- package/dist-esm/src/legacy/models.js.map +1 -0
- package/dist-esm/src/{pollOperation.js → legacy/pollOperation.js} +0 -0
- package/dist-esm/src/legacy/pollOperation.js.map +1 -0
- package/dist-esm/src/{poller.js → legacy/poller.js} +36 -30
- package/dist-esm/src/legacy/poller.js.map +1 -0
- package/dist-esm/src/{lroEngine/logger.js → logger.js} +0 -0
- package/dist-esm/src/logger.js.map +1 -0
- package/dist-esm/src/poller/constants.js +11 -0
- package/dist-esm/src/poller/constants.js.map +1 -0
- package/dist-esm/src/poller/models.js +4 -0
- package/dist-esm/src/poller/models.js.map +1 -0
- package/dist-esm/src/poller/operation.js +131 -0
- package/dist-esm/src/poller/operation.js.map +1 -0
- package/dist-esm/src/poller/poller.js +140 -0
- package/dist-esm/src/poller/poller.js.map +1 -0
- package/dist-esm/src/poller/util/delayMs.js +52 -0
- package/dist-esm/src/poller/util/delayMs.js.map +1 -0
- package/package.json +3 -8
- package/types/core-lro.d.ts +145 -21
- package/dist-esm/src/lroEngine/bodyPolling.js +0 -21
- package/dist-esm/src/lroEngine/bodyPolling.js.map +0 -1
- package/dist-esm/src/lroEngine/index.js.map +0 -1
- package/dist-esm/src/lroEngine/locationPolling.js +0 -50
- package/dist-esm/src/lroEngine/locationPolling.js.map +0 -1
- package/dist-esm/src/lroEngine/logger.js.map +0 -1
- package/dist-esm/src/lroEngine/lroEngine.js.map +0 -1
- package/dist-esm/src/lroEngine/models.js.map +0 -1
- package/dist-esm/src/lroEngine/operation.js +0 -101
- package/dist-esm/src/lroEngine/operation.js.map +0 -1
- package/dist-esm/src/lroEngine/passthrough.js +0 -6
- package/dist-esm/src/lroEngine/passthrough.js.map +0 -1
- package/dist-esm/src/lroEngine/requestUtils.js +0 -102
- package/dist-esm/src/lroEngine/requestUtils.js.map +0 -1
- package/dist-esm/src/lroEngine/stateMachine.js +0 -78
- package/dist-esm/src/lroEngine/stateMachine.js.map +0 -1
- package/dist-esm/src/pollOperation.js.map +0 -1
- package/dist-esm/src/poller.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/poller.ts","../src/lroEngine/requestUtils.ts","../src/lroEngine/logger.ts","../src/lroEngine/bodyPolling.ts","../src/lroEngine/locationPolling.ts","../src/lroEngine/passthrough.ts","../src/lroEngine/stateMachine.ts","../src/lroEngine/operation.ts","../src/lroEngine/lroEngine.ts"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { PollOperation, PollOperationState } from \"./pollOperation\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\n\n/**\n * CancelOnProgress is used as the return value of a Poller's onProgress method.\n * When a user invokes onProgress, they're required to pass in a function that will be\n * called as a callback with the new data received each time the poll operation is updated.\n * onProgress returns a function that will prevent any further update to reach the original callback.\n */\nexport type CancelOnProgress = () => void;\n\n/**\n * PollProgressCallback<TState> is the type of the callback functions sent to onProgress.\n * These functions will receive a TState that is defined by your implementation of\n * the Poller class.\n */\nexport type PollProgressCallback<TState> = (state: TState) => void;\n\n/**\n * When a poller is manually stopped through the `stopPolling` method,\n * the poller will be rejected with an instance of the PollerStoppedError.\n */\nexport class PollerStoppedError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"PollerStoppedError\";\n Object.setPrototypeOf(this, PollerStoppedError.prototype);\n }\n}\n\n/**\n * When a poller is cancelled through the `cancelOperation` method,\n * the poller will be rejected with an instance of the PollerCancelledError.\n */\nexport class PollerCancelledError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"PollerCancelledError\";\n Object.setPrototypeOf(this, PollerCancelledError.prototype);\n }\n}\n\n/**\n * Abstract representation of a poller, intended to expose just the minimal API that the user needs to work with.\n */\n// eslint-disable-next-line no-use-before-define\nexport interface PollerLike<TState extends PollOperationState<TResult>, TResult> {\n /**\n * Returns a promise that will resolve once a single polling request finishes.\n * It does this by calling the update method of the Poller's operation.\n */\n poll(options?: { abortSignal?: AbortSignalLike }): Promise<void>;\n /**\n * Returns a promise that will resolve once the underlying operation is completed.\n */\n pollUntilDone(): Promise<TResult>;\n /**\n * Invokes the provided callback after each polling is completed,\n * sending the current state of the poller's operation.\n *\n * It returns a method that can be used to stop receiving updates on the given callback function.\n */\n onProgress(callback: (state: TState) => void): CancelOnProgress;\n /**\n * Returns true if the poller has finished polling.\n */\n isDone(): boolean;\n /**\n * Stops the poller. After this, no manual or automated requests can be sent.\n */\n stopPolling(): void;\n /**\n * Returns true if the poller is stopped.\n */\n isStopped(): boolean;\n /**\n * Attempts to cancel the underlying operation.\n */\n cancelOperation(options?: { abortSignal?: AbortSignalLike }): Promise<void>;\n /**\n * Returns the state of the operation.\n * The TState defined in PollerLike can be a subset of the TState defined in\n * the Poller implementation.\n */\n getOperationState(): TState;\n /**\n * Returns the result value of the operation,\n * regardless of the state of the poller.\n * It can return undefined or an incomplete form of the final TResult value\n * depending on the implementation.\n */\n getResult(): TResult | undefined;\n /**\n * Returns a serialized version of the poller's operation\n * by invoking the operation's toString method.\n */\n toString(): string;\n}\n\n/**\n * A class that represents the definition of a program that polls through consecutive requests\n * until it reaches a state of completion.\n *\n * A poller can be executed manually, by polling request by request by calling to the `poll()` method repeatedly, until its operation is completed.\n * It also provides a way to wait until the operation completes, by calling `pollUntilDone()` and waiting until the operation finishes.\n * Pollers can also request the cancellation of the ongoing process to whom is providing the underlying long running operation.\n *\n * ```ts\n * const poller = new MyPoller();\n *\n * // Polling just once:\n * await poller.poll();\n *\n * // We can try to cancel the request here, by calling:\n * //\n * // await poller.cancelOperation();\n * //\n *\n * // Getting the final result:\n * const result = await poller.pollUntilDone();\n * ```\n *\n * The Poller is defined by two types, a type representing the state of the poller, which\n * must include a basic set of properties from `PollOperationState<TResult>`,\n * and a return type defined by `TResult`, which can be anything.\n *\n * The Poller class implements the `PollerLike` interface, which allows poller implementations to avoid having\n * to export the Poller's class directly, and instead only export the already instantiated poller with the PollerLike type.\n *\n * ```ts\n * class Client {\n * public async makePoller: PollerLike<MyOperationState, MyResult> {\n * const poller = new MyPoller({});\n * // It might be preferred to return the poller after the first request is made,\n * // so that some information can be obtained right away.\n * await poller.poll();\n * return poller;\n * }\n * }\n *\n * const poller: PollerLike<MyOperationState, MyResult> = myClient.makePoller();\n * ```\n *\n * A poller can be created through its constructor, then it can be polled until it's completed.\n * At any point in time, the state of the poller can be obtained without delay through the getOperationState method.\n * At any point in time, the intermediate forms of the result type can be requested without delay.\n * Once the underlying operation is marked as completed, the poller will stop and the final value will be returned.\n *\n * ```ts\n * const poller = myClient.makePoller();\n * const state: MyOperationState = poller.getOperationState();\n *\n * // The intermediate result can be obtained at any time.\n * const result: MyResult | undefined = poller.getResult();\n *\n * // The final result can only be obtained after the poller finishes.\n * const result: MyResult = await poller.pollUntilDone();\n * ```\n *\n */\n// eslint-disable-next-line no-use-before-define\nexport abstract class Poller<TState extends PollOperationState<TResult>, TResult>\n implements PollerLike<TState, TResult>\n{\n private stopped: boolean = true;\n private resolve?: (value: TResult) => void;\n private reject?: (error: PollerStoppedError | PollerCancelledError | Error) => void;\n private pollOncePromise?: Promise<void>;\n private cancelPromise?: Promise<void>;\n private promise: Promise<TResult>;\n private pollProgressCallbacks: PollProgressCallback<TState>[] = [];\n\n /**\n * The poller's operation is available in full to any of the methods of the Poller class\n * and any class extending the Poller class.\n */\n protected operation: PollOperation<TState, TResult>;\n\n /**\n * A poller needs to be initialized by passing in at least the basic properties of the `PollOperation<TState, TResult>`.\n *\n * When writing an implementation of a Poller, this implementation needs to deal with the initialization\n * of any custom state beyond the basic definition of the poller. The basic poller assumes that the poller's\n * operation has already been defined, at least its basic properties. The code below shows how to approach\n * the definition of the constructor of a new custom poller.\n *\n * ```ts\n * export class MyPoller extends Poller<MyOperationState, string> {\n * constructor({\n * // Anything you might need outside of the basics\n * }) {\n * let state: MyOperationState = {\n * privateProperty: private,\n * publicProperty: public,\n * };\n *\n * const operation = {\n * state,\n * update,\n * cancel,\n * toString\n * }\n *\n * // Sending the operation to the parent's constructor.\n * super(operation);\n *\n * // You can assign more local properties here.\n * }\n * }\n * ```\n *\n * Inside of this constructor, a new promise is created. This will be used to\n * tell the user when the poller finishes (see `pollUntilDone()`). The promise's\n * resolve and reject methods are also used internally to control when to resolve\n * or reject anyone waiting for the poller to finish.\n *\n * The constructor of a custom implementation of a poller is where any serialized version of\n * a previous poller's operation should be deserialized into the operation sent to the\n * base constructor. For example:\n *\n * ```ts\n * export class MyPoller extends Poller<MyOperationState, string> {\n * constructor(\n * baseOperation: string | undefined\n * ) {\n * let state: MyOperationState = {};\n * if (baseOperation) {\n * state = {\n * ...JSON.parse(baseOperation).state,\n * ...state\n * };\n * }\n * const operation = {\n * state,\n * // ...\n * }\n * super(operation);\n * }\n * }\n * ```\n *\n * @param operation - Must contain the basic properties of `PollOperation<State, TResult>`.\n */\n constructor(operation: PollOperation<TState, TResult>) {\n this.operation = operation;\n this.promise = new Promise<TResult>(\n (\n resolve: (result: TResult) => void,\n reject: (error: PollerStoppedError | PollerCancelledError | Error) => void\n ) => {\n this.resolve = resolve;\n this.reject = reject;\n }\n );\n // This prevents the UnhandledPromiseRejectionWarning in node.js from being thrown.\n // The above warning would get thrown if `poller.poll` is called, it returns an error,\n // and pullUntilDone did not have a .catch or await try/catch on it's return value.\n this.promise.catch(() => {\n /* intentionally blank */\n });\n }\n\n /**\n * Defines how much to wait between each poll request.\n * This has to be implemented by your custom poller.\n *\n * \\@azure/core-http has a simple implementation of a delay function that waits as many milliseconds as specified.\n * This can be used as follows:\n *\n * ```ts\n * import { delay } from \"@azure/core-http\";\n *\n * export class MyPoller extends Poller<MyOperationState, string> {\n * // The other necessary definitions.\n *\n * async delay(): Promise<void> {\n * const milliseconds = 1000;\n * return delay(milliseconds);\n * }\n * }\n * ```\n *\n */\n protected abstract delay(): Promise<void>;\n\n /**\n * Starts a loop that will break only if the poller is done\n * or if the poller is stopped.\n */\n private async startPolling(): Promise<void> {\n if (this.stopped) {\n this.stopped = false;\n }\n while (!this.isStopped() && !this.isDone()) {\n await this.poll();\n await this.delay();\n }\n }\n\n /**\n * pollOnce does one polling, by calling to the update method of the underlying\n * poll operation to make any relevant change effective.\n *\n * It only optionally receives an object with an abortSignal property, from \\@azure/abort-controller's AbortSignalLike.\n *\n * @param options - Optional properties passed to the operation's update method.\n */\n private async pollOnce(options: { abortSignal?: AbortSignalLike } = {}): Promise<void> {\n try {\n if (!this.isDone()) {\n this.operation = await this.operation.update({\n abortSignal: options.abortSignal,\n fireProgress: this.fireProgress.bind(this),\n });\n if (this.isDone() && this.resolve) {\n // If the poller has finished polling, this means we now have a result.\n // However, it can be the case that TResult is instantiated to void, so\n // we are not expecting a result anyway. To assert that we might not\n // have a result eventually after finishing polling, we cast the result\n // to TResult.\n this.resolve(this.operation.state.result as TResult);\n }\n }\n } catch (e: any) {\n this.operation.state.error = e;\n if (this.reject) {\n this.reject(e);\n }\n throw e;\n }\n }\n\n /**\n * fireProgress calls the functions passed in via onProgress the method of the poller.\n *\n * It loops over all of the callbacks received from onProgress, and executes them, sending them\n * the current operation state.\n *\n * @param state - The current operation state.\n */\n private fireProgress(state: TState): void {\n for (const callback of this.pollProgressCallbacks) {\n callback(state);\n }\n }\n\n /**\n * Invokes the underlying operation's cancel method, and rejects the\n * pollUntilDone promise.\n */\n private async cancelOnce(options: { abortSignal?: AbortSignalLike } = {}): Promise<void> {\n this.operation = await this.operation.cancel(options);\n if (this.reject) {\n this.reject(new PollerCancelledError(\"Poller cancelled\"));\n }\n }\n\n /**\n * Returns a promise that will resolve once a single polling request finishes.\n * It does this by calling the update method of the Poller's operation.\n *\n * It only optionally receives an object with an abortSignal property, from \\@azure/abort-controller's AbortSignalLike.\n *\n * @param options - Optional properties passed to the operation's update method.\n */\n public poll(options: { abortSignal?: AbortSignalLike } = {}): Promise<void> {\n if (!this.pollOncePromise) {\n this.pollOncePromise = this.pollOnce(options);\n const clearPollOncePromise = (): void => {\n this.pollOncePromise = undefined;\n };\n this.pollOncePromise.then(clearPollOncePromise, clearPollOncePromise).catch(this.reject);\n }\n return this.pollOncePromise;\n }\n\n /**\n * Returns a promise that will resolve once the underlying operation is completed.\n */\n public async pollUntilDone(): Promise<TResult> {\n if (this.stopped) {\n this.startPolling().catch(this.reject);\n }\n return this.promise;\n }\n\n /**\n * Invokes the provided callback after each polling is completed,\n * sending the current state of the poller's operation.\n *\n * It returns a method that can be used to stop receiving updates on the given callback function.\n */\n public onProgress(callback: (state: TState) => void): CancelOnProgress {\n this.pollProgressCallbacks.push(callback);\n return (): void => {\n this.pollProgressCallbacks = this.pollProgressCallbacks.filter((c) => c !== callback);\n };\n }\n\n /**\n * Returns true if the poller has finished polling.\n */\n public isDone(): boolean {\n const state: PollOperationState<TResult> = this.operation.state;\n return Boolean(state.isCompleted || state.isCancelled || state.error);\n }\n\n /**\n * Stops the poller from continuing to poll.\n */\n public stopPolling(): void {\n if (!this.stopped) {\n this.stopped = true;\n if (this.reject) {\n this.reject(new PollerStoppedError(\"This poller is already stopped\"));\n }\n }\n }\n\n /**\n * Returns true if the poller is stopped.\n */\n public isStopped(): boolean {\n return this.stopped;\n }\n\n /**\n * Attempts to cancel the underlying operation.\n *\n * It only optionally receives an object with an abortSignal property, from \\@azure/abort-controller's AbortSignalLike.\n *\n * If it's called again before it finishes, it will throw an error.\n *\n * @param options - Optional properties passed to the operation's update method.\n */\n public cancelOperation(options: { abortSignal?: AbortSignalLike } = {}): Promise<void> {\n if (!this.stopped) {\n this.stopped = true;\n }\n if (!this.cancelPromise) {\n this.cancelPromise = this.cancelOnce(options);\n } else if (options.abortSignal) {\n throw new Error(\"A cancel request is currently pending\");\n }\n return this.cancelPromise;\n }\n\n /**\n * Returns the state of the operation.\n *\n * Even though TState will be the same type inside any of the methods of any extension of the Poller class,\n * implementations of the pollers can customize what's shared with the public by writing their own\n * version of the `getOperationState` method, and by defining two types, one representing the internal state of the poller\n * and a public type representing a safe to share subset of the properties of the internal state.\n * Their definition of getOperationState can then return their public type.\n *\n * Example:\n *\n * ```ts\n * // Let's say we have our poller's operation state defined as:\n * interface MyOperationState extends PollOperationState<ResultType> {\n * privateProperty?: string;\n * publicProperty?: string;\n * }\n *\n * // To allow us to have a true separation of public and private state, we have to define another interface:\n * interface PublicState extends PollOperationState<ResultType> {\n * publicProperty?: string;\n * }\n *\n * // Then, we define our Poller as follows:\n * export class MyPoller extends Poller<MyOperationState, ResultType> {\n * // ... More content is needed here ...\n *\n * public getOperationState(): PublicState {\n * const state: PublicState = this.operation.state;\n * return {\n * // Properties from PollOperationState<TResult>\n * isStarted: state.isStarted,\n * isCompleted: state.isCompleted,\n * isCancelled: state.isCancelled,\n * error: state.error,\n * result: state.result,\n *\n * // The only other property needed by PublicState.\n * publicProperty: state.publicProperty\n * }\n * }\n * }\n * ```\n *\n * You can see this in the tests of this repository, go to the file:\n * `../test/utils/testPoller.ts`\n * and look for the getOperationState implementation.\n */\n public getOperationState(): TState {\n return this.operation.state;\n }\n\n /**\n * Returns the result value of the operation,\n * regardless of the state of the poller.\n * It can return undefined or an incomplete form of the final TResult value\n * depending on the implementation.\n */\n public getResult(): TResult | undefined {\n const state: PollOperationState<TResult> = this.operation.state;\n return state.result;\n }\n\n /**\n * Returns a serialized version of the poller's operation\n * by invoking the operation's toString method.\n */\n public toString(): string {\n return this.operation.toString();\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { LroBody, LroConfig, RawResponse } from \"./models\";\nimport { PollOperationState } from \"../pollOperation\";\n\n/**\n * Detects where the continuation token is and returns it. Notice that azure-asyncoperation\n * must be checked first before the other location headers because there are scenarios\n * where both azure-asyncoperation and location could be present in the same response but\n * azure-asyncoperation should be the one to use for polling.\n */\nexport function getPollingUrl(rawResponse: RawResponse, defaultPath: string): string {\n return (\n getAzureAsyncOperation(rawResponse) ??\n getOperationLocation(rawResponse) ??\n getLocation(rawResponse) ??\n defaultPath\n );\n}\n\nfunction getLocation(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"location\"];\n}\n\nfunction getOperationLocation(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"operation-location\"];\n}\n\nfunction getAzureAsyncOperation(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"azure-asyncoperation\"];\n}\n\nfunction findResourceLocation(\n requestMethod: string,\n rawResponse: RawResponse,\n requestPath: string\n): string | undefined {\n switch (requestMethod) {\n case \"PUT\": {\n return requestPath;\n }\n case \"POST\":\n case \"PATCH\": {\n return getLocation(rawResponse);\n }\n default: {\n return undefined;\n }\n }\n}\n\nexport function inferLroMode(\n requestPath: string,\n requestMethod: string,\n rawResponse: RawResponse\n): LroConfig {\n if (\n getAzureAsyncOperation(rawResponse) !== undefined ||\n getOperationLocation(rawResponse) !== undefined\n ) {\n return {\n mode: \"Location\",\n resourceLocation: findResourceLocation(requestMethod, rawResponse, requestPath),\n };\n } else if (getLocation(rawResponse) !== undefined) {\n return {\n mode: \"Location\",\n };\n } else if ([\"PUT\", \"PATCH\"].includes(requestMethod)) {\n return {\n mode: \"Body\",\n };\n }\n return {};\n}\n\nclass SimpleRestError extends Error {\n public statusCode?: number;\n constructor(message: string, statusCode: number) {\n super(message);\n this.name = \"RestError\";\n this.statusCode = statusCode;\n\n Object.setPrototypeOf(this, SimpleRestError.prototype);\n }\n}\n\nexport function isUnexpectedInitialResponse(rawResponse: RawResponse): boolean {\n const code = rawResponse.statusCode;\n if (![203, 204, 202, 201, 200, 500].includes(code)) {\n throw new SimpleRestError(\n `Received unexpected HTTP status code ${code} in the initial response. This may indicate a server issue.`,\n code\n );\n }\n return false;\n}\n\nexport function isUnexpectedPollingResponse(rawResponse: RawResponse): boolean {\n const code = rawResponse.statusCode;\n if (![202, 201, 200, 500].includes(code)) {\n throw new SimpleRestError(\n `Received unexpected HTTP status code ${code} while polling. This may indicate a server issue.`,\n code\n );\n }\n return false;\n}\n\nexport function isCanceled<TResult, TState extends PollOperationState<TResult>>(operation: {\n state: TState;\n status: string;\n}): boolean {\n const { state, status } = operation;\n if ([\"canceled\", \"cancelled\"].includes(status)) {\n state.isCancelled = true;\n throw new Error(`The long-running operation has been canceled.`);\n }\n return false;\n}\n\nexport function isSucceededStatus(status: string): boolean {\n return status === \"succeeded\";\n}\n\nexport function isPollingDone(result: { rawResponse: RawResponse; status: string }): boolean {\n const { rawResponse, status } = result;\n if (isUnexpectedPollingResponse(rawResponse) || status === \"failed\") {\n throw new Error(`The long-running operation has failed.`);\n }\n return isSucceededStatus(status);\n}\n\nexport function getProvisioningState(rawResponse: RawResponse): string {\n const { properties, provisioningState } = (rawResponse.body as LroBody) ?? {};\n const state: string | undefined = properties?.provisioningState ?? provisioningState;\n return typeof state === \"string\" ? state.toLowerCase() : \"succeeded\";\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createClientLogger } from \"@azure/logger\";\n\n/**\n * The `@azure/logger` configuration for this package.\n * @internal\n */\nexport const logger = createClientLogger(\"core-lro\");\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { LroResponse, LroStatus } from \"./models\";\nimport { getProvisioningState, isCanceled, isPollingDone } from \"./requestUtils\";\nimport { PollOperationState } from \"../pollOperation\";\n\n/**\n * Creates a polling strategy based on BodyPolling which uses the provisioning state\n * from the result to determine the current operation state\n */\nexport function processBodyPollingOperationResult<\n TResult,\n TState extends PollOperationState<TResult>\n>(state: TState): (response: LroResponse<TResult>) => LroStatus<TResult> {\n return (response: LroResponse<TResult>): LroStatus<TResult> => {\n const status = getProvisioningState(response.rawResponse);\n return {\n ...response,\n done:\n isCanceled({\n state,\n status,\n }) ||\n isPollingDone({\n rawResponse: response.rawResponse,\n status,\n }),\n };\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n LongRunningOperation,\n LroBody,\n LroResourceLocationConfig,\n LroResponse,\n LroStatus,\n RawResponse,\n} from \"./models\";\nimport { isCanceled, isPollingDone } from \"./requestUtils\";\nimport { PollOperationState } from \"../pollOperation\";\n\nfunction getStatus(rawResponse: RawResponse): string {\n const { status } = (rawResponse.body as LroBody) ?? {};\n return typeof status === \"string\" ? status.toLowerCase() : \"succeeded\";\n}\n\nfunction isLocationPollingDone(rawResponse: RawResponse, status: string): boolean {\n if (rawResponse.statusCode === 202) {\n return false;\n }\n return isPollingDone({ rawResponse, status });\n}\n\n/**\n * Sends a request to the URI of the provisioned resource if needed.\n */\nasync function sendFinalRequest<TResult>(\n lro: LongRunningOperation<TResult>,\n resourceLocation: string,\n lroResourceLocationConfig?: LroResourceLocationConfig\n): Promise<LroResponse<TResult> | undefined> {\n switch (lroResourceLocationConfig) {\n case \"original-uri\":\n return lro.sendPollRequest(lro.requestPath);\n case \"azure-async-operation\":\n return undefined;\n case \"location\":\n default:\n return lro.sendPollRequest(resourceLocation ?? lro.requestPath);\n }\n}\n\nexport function processLocationPollingOperationResult<\n TResult,\n TState extends PollOperationState<TResult>\n>(\n lro: LongRunningOperation<TResult>,\n state: TState,\n resourceLocation?: string,\n lroResourceLocationConfig?: LroResourceLocationConfig\n): (response: LroResponse<TResult>) => LroStatus<TResult> {\n return (response: LroResponse<TResult>): LroStatus<TResult> => {\n const status = getStatus(response.rawResponse);\n if (\n isCanceled({\n state,\n status,\n }) ||\n isLocationPollingDone(response.rawResponse, status)\n ) {\n if (resourceLocation === undefined) {\n return { ...response, done: true };\n } else {\n return {\n ...response,\n done: false,\n next: async () => {\n const finalResponse = await sendFinalRequest(\n lro,\n resourceLocation,\n lroResourceLocationConfig\n );\n return {\n ...(finalResponse ?? response),\n done: true,\n };\n },\n };\n }\n }\n return {\n ...response,\n done: false,\n };\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { LroResponse, LroStatus } from \"./models\";\n\nexport function processPassthroughOperationResult<TResult>(\n response: LroResponse<TResult>\n): LroStatus<TResult> {\n return {\n ...response,\n done: true,\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n GetLroStatusFromResponse,\n LongRunningOperation,\n LroConfig,\n LroResourceLocationConfig,\n LroResponse,\n LroStatus,\n PollerConfig,\n ResumablePollOperationState,\n} from \"./models\";\nimport {\n getPollingUrl,\n getProvisioningState,\n inferLroMode,\n isPollingDone,\n isUnexpectedInitialResponse,\n} from \"./requestUtils\";\nimport { PollOperationState } from \"../pollOperation\";\nimport { logger } from \"./logger\";\nimport { processBodyPollingOperationResult } from \"./bodyPolling\";\nimport { processLocationPollingOperationResult } from \"./locationPolling\";\nimport { processPassthroughOperationResult } from \"./passthrough\";\n\n/**\n * creates a stepping function that maps an LRO state to another.\n */\nexport function createGetLroStatusFromResponse<TResult, TState extends PollOperationState<TResult>>(\n lroPrimitives: LongRunningOperation<TResult>,\n config: LroConfig,\n state: TState,\n lroResourceLocationConfig?: LroResourceLocationConfig\n): GetLroStatusFromResponse<TResult> {\n switch (config.mode) {\n case \"Location\": {\n return processLocationPollingOperationResult(\n lroPrimitives,\n state,\n config.resourceLocation,\n lroResourceLocationConfig\n );\n }\n case \"Body\": {\n return processBodyPollingOperationResult(state);\n }\n default: {\n return processPassthroughOperationResult;\n }\n }\n}\n\n/**\n * Creates a polling operation.\n */\nexport function createPoll<TResult>(\n lroPrimitives: LongRunningOperation<TResult>\n): (\n pollingURL: string,\n pollerConfig: PollerConfig,\n getLroStatusFromResponse: GetLroStatusFromResponse<TResult>\n) => Promise<LroStatus<TResult>> {\n return async (\n path: string,\n pollerConfig: PollerConfig,\n getLroStatusFromResponse: GetLroStatusFromResponse<TResult>\n ): Promise<LroStatus<TResult>> => {\n const response = await lroPrimitives.sendPollRequest(path);\n const retryAfter: string | undefined = response.rawResponse.headers[\"retry-after\"];\n if (retryAfter !== undefined) {\n // Retry-After header value is either in HTTP date format, or in seconds\n const retryAfterInSeconds = parseInt(retryAfter);\n pollerConfig.intervalInMs = isNaN(retryAfterInSeconds)\n ? calculatePollingIntervalFromDate(new Date(retryAfter), pollerConfig.intervalInMs)\n : retryAfterInSeconds * 1000;\n }\n return getLroStatusFromResponse(response);\n };\n}\n\nfunction calculatePollingIntervalFromDate(\n retryAfterDate: Date,\n defaultIntervalInMs: number\n): number {\n const timeNow = Math.floor(new Date().getTime());\n const retryAfterTime = retryAfterDate.getTime();\n if (timeNow < retryAfterTime) {\n return retryAfterTime - timeNow;\n }\n return defaultIntervalInMs;\n}\n\n/**\n * Creates a callback to be used to initialize the polling operation state.\n * @param state - of the polling operation\n * @param operationSpec - of the LRO\n * @param callback - callback to be called when the operation is done\n * @returns callback that initializes the state of the polling operation\n */\nexport function createInitializeState<TResult>(\n state: ResumablePollOperationState<TResult>,\n requestPath: string,\n requestMethod: string\n): (response: LroResponse<TResult>) => boolean {\n return (response: LroResponse<TResult>): boolean => {\n if (isUnexpectedInitialResponse(response.rawResponse)) return true;\n state.initialRawResponse = response.rawResponse;\n state.isStarted = true;\n state.pollingURL = getPollingUrl(state.initialRawResponse, requestPath);\n state.config = inferLroMode(requestPath, requestMethod, state.initialRawResponse);\n /** short circuit polling if body polling is done in the initial request */\n if (\n state.config.mode === undefined ||\n (state.config.mode === \"Body\" &&\n isPollingDone({\n rawResponse: state.initialRawResponse,\n status: getProvisioningState(state.initialRawResponse),\n }))\n ) {\n state.result = response.flatResponse as TResult;\n state.isCompleted = true;\n }\n logger.verbose(`LRO: initial state: ${JSON.stringify(state)}`);\n return Boolean(state.isCompleted);\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n GetLroStatusFromResponse,\n LongRunningOperation,\n LroResourceLocationConfig,\n LroResponse,\n LroStatus,\n PollerConfig,\n RawResponse,\n ResumablePollOperationState,\n} from \"./models\";\nimport { PollOperation, PollOperationState } from \"../pollOperation\";\nimport { createGetLroStatusFromResponse, createInitializeState, createPoll } from \"./stateMachine\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { getPollingUrl } from \"./requestUtils\";\nimport { logger } from \"./logger\";\n\nexport class GenericPollOperation<TResult, TState extends PollOperationState<TResult>>\n implements PollOperation<TState, TResult>\n{\n private poll?: (\n pollingURL: string,\n pollerConfig: PollerConfig,\n getLroStatusFromResponse: GetLroStatusFromResponse<TResult>\n ) => Promise<LroStatus<TResult>>;\n private pollerConfig?: PollerConfig;\n private getLroStatusFromResponse?: GetLroStatusFromResponse<TResult>;\n\n constructor(\n public state: TState & ResumablePollOperationState<TResult>,\n private lro: LongRunningOperation<TResult>,\n private lroResourceLocationConfig?: LroResourceLocationConfig,\n private processResult?: (result: unknown, state: TState) => TResult,\n private updateState?: (state: TState, lastResponse: RawResponse) => void,\n private isDone?: (lastResponse: TResult, state: TState) => boolean,\n private cancelOp?: (state: TState) => Promise<void>\n ) {}\n\n public setPollerConfig(pollerConfig: PollerConfig): void {\n this.pollerConfig = pollerConfig;\n }\n\n /**\n * General update function for LROPoller, the general process is as follows\n * 1. Check initial operation result to determine the strategy to use\n * - Strategies: Location, Azure-AsyncOperation, Original Uri\n * 2. Check if the operation result has a terminal state\n * - Terminal state will be determined by each strategy\n * 2.1 If it is terminal state Check if a final GET request is required, if so\n * send final GET request and return result from operation. If no final GET\n * is required, just return the result from operation.\n * - Determining what to call for final request is responsibility of each strategy\n * 2.2 If it is not terminal state, call the polling operation and go to step 1\n * - Determining what to call for polling is responsibility of each strategy\n * - Strategies will always use the latest URI for polling if provided otherwise\n * the last known one\n */\n async update(options?: {\n abortSignal?: AbortSignalLike;\n fireProgress?: (state: TState) => void;\n }): Promise<PollOperation<TState, TResult>> {\n const state = this.state;\n let lastResponse: LroResponse<TResult> | undefined = undefined;\n if (!state.isStarted) {\n const initializeState = createInitializeState(\n state,\n this.lro.requestPath,\n this.lro.requestMethod\n );\n lastResponse = await this.lro.sendInitialRequest();\n initializeState(lastResponse);\n }\n\n if (!state.isCompleted) {\n if (!this.poll || !this.getLroStatusFromResponse) {\n if (!state.config) {\n throw new Error(\n \"Bad state: LRO mode is undefined. Please check if the serialized state is well-formed.\"\n );\n }\n const isDone = this.isDone;\n this.getLroStatusFromResponse = isDone\n ? (response: LroResponse<TResult>) => ({\n ...response,\n done: isDone(response.flatResponse, this.state),\n })\n : createGetLroStatusFromResponse(\n this.lro,\n state.config,\n this.state,\n this.lroResourceLocationConfig\n );\n this.poll = createPoll(this.lro);\n }\n if (!state.pollingURL) {\n throw new Error(\n \"Bad state: polling URL is undefined. Please check if the serialized state is well-formed.\"\n );\n }\n const currentState = await this.poll(\n state.pollingURL,\n this.pollerConfig!,\n this.getLroStatusFromResponse\n );\n logger.verbose(`LRO: polling response: ${JSON.stringify(currentState.rawResponse)}`);\n if (currentState.done) {\n state.result = this.processResult\n ? this.processResult(currentState.flatResponse, state)\n : currentState.flatResponse;\n state.isCompleted = true;\n } else {\n this.poll = currentState.next ?? this.poll;\n state.pollingURL = getPollingUrl(currentState.rawResponse, state.pollingURL);\n }\n lastResponse = currentState;\n }\n logger.verbose(`LRO: current state: ${JSON.stringify(state)}`);\n if (lastResponse) {\n this.updateState?.(state, lastResponse?.rawResponse);\n } else {\n logger.error(`LRO: no response was received`);\n }\n options?.fireProgress?.(state);\n return this;\n }\n\n async cancel(): Promise<PollOperation<TState, TResult>> {\n await this.cancelOp?.(this.state);\n /**\n * When `cancelOperation` is called, polling stops so it is important that\n * `isCancelled` is set now because the polling logic will not be able to\n * set it itself because it will not fire.\n */\n this.state.isCancelled = true;\n return this;\n }\n\n /**\n * Serializes the Poller operation.\n */\n public toString(): string {\n return JSON.stringify({\n state: this.state,\n });\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n LongRunningOperation,\n LroEngineOptions,\n PollerConfig,\n ResumablePollOperationState,\n} from \"./models\";\nimport { GenericPollOperation } from \"./operation\";\nimport { PollOperationState } from \"../pollOperation\";\nimport { Poller } from \"../poller\";\n\nfunction deserializeState<TResult, TState>(\n serializedState: string\n): TState & ResumablePollOperationState<TResult> {\n try {\n return JSON.parse(serializedState).state;\n } catch (e) {\n throw new Error(`LroEngine: Unable to deserialize state: ${serializedState}`);\n }\n}\n\n/**\n * The LRO Engine, a class that performs polling.\n */\nexport class LroEngine<TResult, TState extends PollOperationState<TResult>> extends Poller<\n TState,\n TResult\n> {\n private config: PollerConfig;\n\n constructor(lro: LongRunningOperation<TResult>, options?: LroEngineOptions<TResult, TState>) {\n const { intervalInMs = 2000, resumeFrom } = options || {};\n const state: TState & ResumablePollOperationState<TResult> = resumeFrom\n ? deserializeState(resumeFrom)\n : ({} as TState & ResumablePollOperationState<TResult>);\n\n const operation = new GenericPollOperation(\n state,\n lro,\n options?.lroResourceLocationConfig,\n options?.processResult,\n options?.updateState,\n options?.isDone,\n options?.cancel\n );\n super(operation);\n\n this.config = { intervalInMs: intervalInMs };\n operation.setPollerConfig(this.config);\n }\n\n /**\n * The method used by the poller to wait before attempting to update its operation.\n */\n delay(): Promise<void> {\n return new Promise((resolve) => setTimeout(() => resolve(), this.config.intervalInMs));\n }\n}\n"],"names":["createClientLogger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/logger.ts","../src/poller/constants.ts","../src/poller/operation.ts","../src/http/operation.ts","../src/poller/util/delayMs.ts","../src/poller/poller.ts","../src/http/poller.ts","../src/legacy/lroEngine/operation.ts","../src/legacy/poller.ts","../src/legacy/lroEngine/lroEngine.ts"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createClientLogger } from \"@azure/logger\";\n\n/**\n * The `@azure/logger` configuration for this package.\n * @internal\n */\nexport const logger = createClientLogger(\"core-lro\");\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * The default time interval to wait before sending the next polling request.\n */\nexport const POLL_INTERVAL_IN_MS = 2000;\n/**\n * The closed set of terminal states.\n */\nexport const terminalStates = [\"succeeded\", \"canceled\", \"failed\"];\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { Operation, OperationStatus, RestorableOperationState, StateProxy } from \"./models\";\nimport { logger } from \"../logger\";\nimport { terminalStates } from \"./constants\";\n\n/**\n * Deserializes the state\n */\nexport function deserializeState<TState>(\n serializedState: string\n): RestorableOperationState<TState> {\n try {\n return JSON.parse(serializedState).state;\n } catch (e) {\n throw new Error(`Unable to deserialize input state: ${serializedState}`);\n }\n}\n\nfunction setStateError<TState, TResult>(inputs: {\n state: TState;\n stateProxy: StateProxy<TState, TResult>;\n}): (error: Error) => never {\n const { state, stateProxy } = inputs;\n return (error: Error) => {\n stateProxy.setError(state, error);\n stateProxy.setFailed(state);\n throw error;\n };\n}\n\nfunction processOperationStatus<TState, TResult>(result: {\n status: OperationStatus;\n state: RestorableOperationState<TState>;\n stateProxy: StateProxy<TState, TResult>;\n}): void {\n const { state, stateProxy, status } = result;\n logger.verbose(\n `LRO: Status:\\n\\tPolling from: ${\n state.config.operationLocation\n }\\n\\tOperation status: ${status}\\n\\tPolling status: ${\n terminalStates.includes(status) ? \"Stopped\" : \"Running\"\n }`\n );\n switch (status) {\n case \"succeeded\": {\n stateProxy.setSucceeded(state);\n break;\n }\n case \"failed\": {\n stateProxy.setError(state, new Error(`The long-running operation has failed`));\n stateProxy.setFailed(state);\n break;\n }\n case \"canceled\": {\n stateProxy.setCanceled(state);\n break;\n }\n }\n}\n\nfunction buildResult<TResponse, TResult, TState>(inputs: {\n response: TResponse;\n state: TState;\n processResult?: (result: TResponse, state: TState) => TResult;\n}): TResult {\n const { processResult, response, state } = inputs;\n return processResult ? processResult(response, state) : (response as unknown as TResult);\n}\n\n/**\n * Initiates the long-running operation.\n */\nexport async function initOperation<TResponse, TResult, TState>(inputs: {\n init: Operation<TResponse, unknown>[\"init\"];\n stateProxy: StateProxy<TState, TResult>;\n getOperationStatus: (\n response: TResponse,\n state: RestorableOperationState<TState>\n ) => OperationStatus;\n processResult?: (result: TResponse, state: TState) => TResult;\n withOperationLocation?: (operationLocation: string, isUpdated: boolean) => void;\n}): Promise<RestorableOperationState<TState>> {\n const { init, stateProxy, processResult, getOperationStatus, withOperationLocation } = inputs;\n const { operationLocation, resourceLocation, metadata, response } = await init();\n if (operationLocation) withOperationLocation?.(operationLocation, false);\n const config = {\n metadata,\n operationLocation,\n resourceLocation,\n };\n logger.verbose(`LRO: Operation description:`, config);\n const state = stateProxy.initState(config);\n const status = getOperationStatus(response, state);\n if (status === \"succeeded\" || operationLocation === undefined) {\n stateProxy.setSucceeded(state);\n stateProxy.setResult(\n state,\n buildResult({\n response,\n state,\n processResult,\n })\n );\n }\n return state;\n}\n\nasync function pollOperationHelper<TResponse, TState, TResult, TOptions>(inputs: {\n poll: Operation<TResponse, TOptions>[\"poll\"];\n stateProxy: StateProxy<TState, TResult>;\n state: RestorableOperationState<TState>;\n operationLocation: string;\n resourceLocation?: string;\n getOperationStatus: (\n response: TResponse,\n state: RestorableOperationState<TState>\n ) => OperationStatus;\n options?: TOptions;\n}): Promise<{\n status: OperationStatus;\n response: TResponse;\n}> {\n const {\n poll,\n state,\n stateProxy,\n operationLocation,\n resourceLocation,\n getOperationStatus,\n options,\n } = inputs;\n const response = await poll(operationLocation, options).catch(\n setStateError({\n state,\n stateProxy,\n })\n );\n const status = getOperationStatus(response, state);\n processOperationStatus({\n status,\n state,\n stateProxy,\n });\n if (status === \"succeeded\" && resourceLocation !== undefined) {\n return {\n response: await poll(resourceLocation).catch(setStateError({ state, stateProxy })),\n status,\n };\n }\n return { response, status };\n}\n\n/** Polls the long-running operation. */\nexport async function pollOperation<TResponse, TState, TResult, TOptions>(inputs: {\n poll: Operation<TResponse, TOptions>[\"poll\"];\n stateProxy: StateProxy<TState, TResult>;\n state: RestorableOperationState<TState>;\n getOperationStatus: (\n response: TResponse,\n state: RestorableOperationState<TState>\n ) => OperationStatus;\n getPollingInterval?: (response: TResponse) => number | undefined;\n setDelay: (intervalInMs: number) => void;\n getOperationLocation?: (\n response: TResponse,\n state: RestorableOperationState<TState>\n ) => string | undefined;\n withOperationLocation?: (operationLocation: string, isUpdated: boolean) => void;\n processResult?: (result: TResponse, state: TState) => TResult;\n updateState?: (state: TState, lastResponse: TResponse) => void;\n isDone?: (lastResponse: TResponse, state: TState) => boolean;\n options?: TOptions;\n}): Promise<void> {\n const {\n poll,\n state,\n stateProxy,\n options,\n getOperationStatus,\n getOperationLocation,\n withOperationLocation,\n getPollingInterval,\n processResult,\n updateState,\n setDelay,\n isDone,\n } = inputs;\n const { operationLocation, resourceLocation } = state.config;\n if (operationLocation !== undefined) {\n const { response, status } = await pollOperationHelper({\n poll,\n getOperationStatus,\n state,\n stateProxy,\n operationLocation,\n resourceLocation,\n options,\n });\n if (\n isDone?.(response, state) ||\n (isDone === undefined && [\"succeeded\", \"canceled\"].includes(status))\n ) {\n stateProxy.setResult(\n state,\n buildResult({\n response,\n state,\n processResult,\n })\n );\n } else {\n const intervalInMs = getPollingInterval?.(response);\n if (intervalInMs) setDelay(intervalInMs);\n const location = getOperationLocation?.(response, state);\n if (location !== undefined) {\n const isUpdated = operationLocation !== location;\n state.config.operationLocation = location;\n withOperationLocation?.(location, isUpdated);\n } else withOperationLocation?.(operationLocation, false);\n }\n updateState?.(state, response);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n HttpOperationMode,\n LongRunningOperation,\n LroResourceLocationConfig,\n LroResponse,\n RawResponse,\n ResponseBody,\n} from \"./models\";\nimport {\n OperationConfig,\n OperationStatus,\n RestorableOperationState,\n StateProxy,\n} from \"../poller/models\";\nimport { initOperation, pollOperation } from \"../poller/operation\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { logger } from \"../logger\";\n\nfunction getOperationLocationPollingUrl(inputs: {\n operationLocation?: string;\n azureAsyncOperation?: string;\n}): string | undefined {\n const { azureAsyncOperation, operationLocation } = inputs;\n return operationLocation ?? azureAsyncOperation;\n}\n\nfunction getLocationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"location\"];\n}\n\nfunction getOperationLocationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"operation-location\"];\n}\n\nfunction getAzureAsyncOperationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"azure-asyncoperation\"];\n}\n\nfunction findResourceLocation(inputs: {\n requestMethod?: string;\n location?: string;\n requestPath?: string;\n resourceLocationConfig?: LroResourceLocationConfig;\n}): string | undefined {\n const { location, requestMethod, requestPath, resourceLocationConfig } = inputs;\n switch (requestMethod) {\n case \"PUT\": {\n return requestPath;\n }\n case \"DELETE\": {\n return undefined;\n }\n default: {\n switch (resourceLocationConfig) {\n case \"azure-async-operation\": {\n return undefined;\n }\n case \"original-uri\": {\n return requestPath;\n }\n case \"location\":\n default: {\n return location;\n }\n }\n }\n }\n}\n\nexport function inferLroMode(inputs: {\n rawResponse: RawResponse;\n requestPath?: string;\n requestMethod?: string;\n resourceLocationConfig?: LroResourceLocationConfig;\n}): (OperationConfig & { mode: HttpOperationMode }) | undefined {\n const { rawResponse, requestMethod, requestPath, resourceLocationConfig } = inputs;\n const operationLocation = getOperationLocationHeader(rawResponse);\n const azureAsyncOperation = getAzureAsyncOperationHeader(rawResponse);\n const pollingUrl = getOperationLocationPollingUrl({ operationLocation, azureAsyncOperation });\n const location = getLocationHeader(rawResponse);\n const normalizedRequestMethod = requestMethod?.toLocaleUpperCase();\n if (pollingUrl !== undefined) {\n return {\n mode: \"OperationLocation\",\n operationLocation: pollingUrl,\n resourceLocation: findResourceLocation({\n requestMethod: normalizedRequestMethod,\n location,\n requestPath,\n resourceLocationConfig,\n }),\n };\n } else if (location !== undefined) {\n return {\n mode: \"ResourceLocation\",\n operationLocation: location,\n };\n } else if (normalizedRequestMethod === \"PUT\" && requestPath) {\n return {\n mode: \"Body\",\n operationLocation: requestPath,\n };\n } else {\n return undefined;\n }\n}\n\nfunction transformStatus(status: string | undefined): OperationStatus {\n switch (status?.toLowerCase()) {\n case undefined:\n case \"succeeded\":\n return \"succeeded\";\n case \"failed\":\n return \"failed\";\n case \"running\":\n case \"accepted\":\n case \"canceling\":\n case \"cancelling\":\n return \"running\";\n case \"canceled\":\n case \"cancelled\":\n return \"canceled\";\n default: {\n logger.warning(`LRO: unrecognized operation status: ${status}`);\n return status as OperationStatus;\n }\n }\n}\n\nfunction getStatus(rawResponse: RawResponse): OperationStatus {\n const { status } = (rawResponse.body as ResponseBody) ?? {};\n return transformStatus(status);\n}\n\nfunction getProvisioningState(rawResponse: RawResponse): OperationStatus {\n const { properties, provisioningState } = (rawResponse.body as ResponseBody) ?? {};\n const state = properties?.provisioningState ?? provisioningState;\n return transformStatus(state);\n}\n\nfunction toOperationStatus(statusCode: number): OperationStatus {\n if (statusCode === 202) {\n return \"running\";\n } else if (statusCode < 300) {\n return \"succeeded\";\n } else {\n return \"failed\";\n }\n}\n\nexport function parseRetryAfter<T>({ rawResponse }: LroResponse<T>): number | undefined {\n const retryAfter: string | undefined = rawResponse.headers[\"retry-after\"];\n if (retryAfter !== undefined) {\n // Retry-After header value is either in HTTP date format, or in seconds\n const retryAfterInSeconds = parseInt(retryAfter);\n return isNaN(retryAfterInSeconds)\n ? calculatePollingIntervalFromDate(new Date(retryAfter))\n : retryAfterInSeconds * 1000;\n }\n return undefined;\n}\n\nfunction calculatePollingIntervalFromDate(retryAfterDate: Date): number | undefined {\n const timeNow = Math.floor(new Date().getTime());\n const retryAfterTime = retryAfterDate.getTime();\n if (timeNow < retryAfterTime) {\n return retryAfterTime - timeNow;\n }\n return undefined;\n}\n\n/**\n * Initiates the long-running operation.\n */\nexport async function initHttpOperation<TResult, TState>(inputs: {\n stateProxy: StateProxy<TState, TResult>;\n resourceLocationConfig?: LroResourceLocationConfig;\n processResult?: (result: unknown, state: TState) => TResult;\n lro: LongRunningOperation;\n}): Promise<RestorableOperationState<TState>> {\n const { stateProxy, resourceLocationConfig, processResult, lro } = inputs;\n return initOperation({\n init: async () => {\n const response = await lro.sendInitialRequest();\n const config = inferLroMode({\n rawResponse: response.rawResponse,\n requestPath: lro.requestPath,\n requestMethod: lro.requestMethod,\n resourceLocationConfig,\n });\n return {\n response,\n operationLocation: config?.operationLocation,\n resourceLocation: config?.resourceLocation,\n ...(config?.mode ? { metadata: { mode: config.mode } } : {}),\n };\n },\n stateProxy,\n processResult: processResult\n ? ({ flatResponse }, state) => processResult(flatResponse, state)\n : ({ flatResponse }) => flatResponse as TResult,\n getOperationStatus: (response, state) => {\n const mode = state.config.metadata?.[\"mode\"];\n return mode === undefined ||\n (mode === \"Body\" && getOperationStatus(response, state) === \"succeeded\")\n ? \"succeeded\"\n : \"running\";\n },\n });\n}\n\nexport function getOperationLocation<TState>(\n { rawResponse }: LroResponse,\n state: RestorableOperationState<TState>\n): string | undefined {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case \"OperationLocation\": {\n return getOperationLocationPollingUrl({\n operationLocation: getOperationLocationHeader(rawResponse),\n azureAsyncOperation: getAzureAsyncOperationHeader(rawResponse),\n });\n }\n case \"ResourceLocation\": {\n return getLocationHeader(rawResponse);\n }\n case \"Body\":\n default: {\n return undefined;\n }\n }\n}\n\nexport function getOperationStatus<TState>(\n { rawResponse }: LroResponse,\n state: RestorableOperationState<TState>\n): OperationStatus {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case \"OperationLocation\": {\n return getStatus(rawResponse);\n }\n case \"ResourceLocation\": {\n return toOperationStatus(rawResponse.statusCode);\n }\n case \"Body\": {\n return getProvisioningState(rawResponse);\n }\n default:\n throw new Error(`Unexpected operation mode: ${mode}`);\n }\n}\n\n/** Polls the long-running operation. */\nexport async function pollHttpOperation<TState, TResult>(inputs: {\n lro: LongRunningOperation;\n stateProxy: StateProxy<TState, TResult>;\n processResult?: (result: unknown, state: TState) => TResult;\n updateState?: (state: TState, lastResponse: LroResponse) => void;\n isDone?: (lastResponse: LroResponse, state: TState) => boolean;\n setDelay: (intervalInMs: number) => void;\n options?: { abortSignal?: AbortSignalLike };\n state: RestorableOperationState<TState>;\n}): Promise<void> {\n const { lro, stateProxy, options, processResult, updateState, setDelay, state } = inputs;\n return pollOperation({\n state,\n stateProxy,\n setDelay,\n processResult: processResult\n ? ({ flatResponse }, inputState) => processResult(flatResponse, inputState)\n : ({ flatResponse }) => flatResponse as TResult,\n updateState,\n getPollingInterval: parseRetryAfter,\n getOperationLocation,\n getOperationStatus,\n options,\n /**\n * The expansion here is intentional because `lro` could be an object that\n * references an inner this, so we need to preserve a reference to it.\n */\n poll: async (location, inputOptions) => lro.sendPollRequest(location, inputOptions),\n });\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * Map an optional value through a function\n * @internal\n */\nconst maybemap = <T1, T2>(value: T1 | undefined, f: (v: T1) => T2): T2 | undefined =>\n value === undefined ? undefined : f(value);\n\ntype CancellationToken = Parameters<typeof clearTimeout>[0];\n\nconst INTERRUPTED = new Error(\"The poller is already stopped\");\n\n/**\n * A PromiseLike object that supports cancellation.\n * @internal\n */\ninterface CancelablePromiseLike<T> extends PromiseLike<T> {\n /**\n * Cancel the promise (cause it to reject).\n */\n cancel(): void;\n}\n\n/**\n * A promise that delays resolution until a certain amount of time (in milliseconds) has passed, with facilities for\n * robust cancellation.\n *\n * ### Example:\n *\n * ```javascript\n * let toCancel;\n *\n * // Wait 20 seconds, and optionally allow the function to be cancelled.\n * await delayMs(20000, (cancel) => { toCancel = cancel });\n *\n * // ... if `toCancel` is called before the 20 second timer expires, then the delayMs promise will reject.\n * ```\n *\n * @internal\n * @param ms - the number of milliseconds to wait before resolving\n * @param cb - a callback that can provide the caller with a cancellation function\n */\nexport function delayMs(ms: number): CancelablePromiseLike<void> {\n let aborted = false;\n let toReject: (() => void) | undefined;\n\n return Object.assign(\n new Promise<void>((resolve, reject) => {\n let token: CancellationToken | undefined;\n toReject = () => {\n maybemap(token, clearTimeout);\n reject(INTERRUPTED);\n };\n\n // In the rare case that the operation is _already_ aborted, we will reject instantly. This could happen, for\n // example, if the user calls the cancellation function immediately without yielding execution.\n if (aborted) {\n toReject();\n } else {\n token = setTimeout(resolve, ms);\n }\n }),\n {\n cancel: () => {\n aborted = true;\n toReject?.();\n },\n }\n );\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AbortController, AbortSignalLike } from \"@azure/abort-controller\";\nimport {\n BuildCreatePollerOptions,\n CreatePollerOptions,\n Operation,\n OperationState,\n RestorableOperationState,\n SimplePollerLike,\n StateProxy,\n} from \"./models\";\nimport { deserializeState, initOperation, pollOperation } from \"./operation\";\nimport { POLL_INTERVAL_IN_MS } from \"./constants\";\nimport { delayMs } from \"./util/delayMs\";\n\nconst createStateProxy: <TResult, TState extends OperationState<TResult>>() => StateProxy<\n TState,\n TResult\n> = () => ({\n /**\n * The state at this point is created to be of type OperationState<TResult>.\n * It will be updated later to be of type TState when the\n * customer-provided callback, `updateState`, is called during polling.\n */\n initState: (config) => ({ status: \"running\", config } as any),\n setCanceled: (state) => (state.status = \"canceled\"),\n setError: (state, error) => (state.error = error),\n setResult: (state, result) => (state.result = result),\n setRunning: (state) => (state.status = \"running\"),\n setSucceeded: (state) => (state.status = \"succeeded\"),\n setFailed: (state) => (state.status = \"failed\"),\n\n getError: (state) => state.error,\n getResult: (state) => state.result,\n isCanceled: (state) => state.status === \"canceled\",\n isFailed: (state) => state.status === \"failed\",\n isRunning: (state) => state.status === \"running\",\n isSucceeded: (state) => state.status === \"succeeded\",\n});\n\n/**\n * Returns a poller factory.\n */\nexport function buildCreatePoller<TResponse, TResult, TState extends OperationState<TResult>>(\n inputs: BuildCreatePollerOptions<TResponse, TState>\n): (\n lro: Operation<TResponse, { abortSignal?: AbortSignalLike }>,\n options?: CreatePollerOptions<TResponse, TResult, TState>\n) => Promise<SimplePollerLike<TState, TResult>> {\n const {\n getOperationLocation,\n getStatusFromInitialResponse,\n getStatusFromPollResponse,\n getPollingInterval,\n } = inputs;\n return async (\n { init, poll }: Operation<TResponse, { abortSignal?: AbortSignalLike }>,\n options?: CreatePollerOptions<TResponse, TResult, TState>\n ) => {\n const {\n processResult,\n updateState,\n withOperationLocation: withOperationLocationCallback,\n intervalInMs = POLL_INTERVAL_IN_MS,\n restoreFrom,\n } = options || {};\n const stateProxy = createStateProxy<TResult, TState>();\n const withOperationLocation = withOperationLocationCallback\n ? (() => {\n let called = false;\n return (operationLocation: string, isUpdated: boolean) => {\n if (isUpdated) withOperationLocationCallback(operationLocation);\n else if (!called) withOperationLocationCallback(operationLocation);\n called = true;\n };\n })()\n : undefined;\n const state: RestorableOperationState<TState> = restoreFrom\n ? deserializeState(restoreFrom)\n : await initOperation({\n init,\n stateProxy,\n processResult,\n getOperationStatus: getStatusFromInitialResponse,\n withOperationLocation,\n });\n let resultPromise: Promise<TResult> | undefined;\n let cancelJob: (() => void) | undefined;\n const abortController = new AbortController();\n // Progress handlers\n type Handler = (state: TState) => void;\n const handlers = new Map<symbol, Handler>();\n const handleProgressEvents = async (): Promise<void> => handlers.forEach((h) => h(state));\n\n let currentPollIntervalInMs = intervalInMs;\n\n const poller: SimplePollerLike<TState, TResult> = {\n getOperationState: () => state,\n getResult: () => state.result,\n isDone: () => [\"succeeded\", \"failed\", \"canceled\"].includes(state.status),\n isStopped: () => resultPromise === undefined,\n stopPolling: () => {\n abortController.abort();\n cancelJob?.();\n },\n toString: () =>\n JSON.stringify({\n state,\n }),\n onProgress: (callback: (state: TState) => void) => {\n const s = Symbol();\n handlers.set(s, callback);\n return () => handlers.delete(s);\n },\n pollUntilDone: (pollOptions?: { abortSignal?: AbortSignalLike }) =>\n (resultPromise ??= (async () => {\n const { abortSignal: inputAbortSignal } = pollOptions || {};\n const { signal: abortSignal } = inputAbortSignal\n ? new AbortController([inputAbortSignal, abortController.signal])\n : abortController;\n if (!poller.isDone()) {\n await poller.poll({ abortSignal });\n while (!poller.isDone()) {\n const delay = delayMs(currentPollIntervalInMs);\n cancelJob = delay.cancel;\n await delay;\n await poller.poll({ abortSignal });\n }\n }\n switch (state.status) {\n case \"succeeded\": {\n return poller.getResult() as TResult;\n }\n case \"canceled\": {\n throw new Error(\"Operation was canceled\");\n }\n case \"failed\": {\n throw state.error;\n }\n case \"notStarted\":\n case \"running\": {\n // Unreachable\n throw new Error(`polling completed without succeeding or failing`);\n }\n }\n })().finally(() => {\n resultPromise = undefined;\n })),\n async poll(pollOptions?: { abortSignal?: AbortSignalLike }): Promise<void> {\n await pollOperation({\n poll,\n state,\n stateProxy,\n getOperationLocation,\n withOperationLocation,\n getPollingInterval,\n getOperationStatus: getStatusFromPollResponse,\n processResult,\n updateState,\n options: pollOptions,\n setDelay: (pollIntervalInMs) => {\n currentPollIntervalInMs = pollIntervalInMs;\n },\n });\n await handleProgressEvents();\n if (state.status === \"canceled\") {\n throw new Error(\"Operation was canceled\");\n }\n if (state.status === \"failed\") {\n throw state.error;\n }\n },\n };\n return poller;\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { LongRunningOperation, LroResponse } from \"./models\";\nimport { OperationState, SimplePollerLike } from \"../poller/models\";\nimport {\n getOperationLocation,\n getOperationStatus,\n inferLroMode,\n parseRetryAfter,\n} from \"./operation\";\nimport { CreateHttpPollerOptions } from \"./models\";\nimport { buildCreatePoller } from \"../poller/poller\";\n\n/**\n * Creates a poller that can be used to poll a long-running operation.\n * @param lro - Description of the long-running operation\n * @param options - options to configure the poller\n * @returns an initialized poller\n */\nexport async function createHttpPoller<TResult, TState extends OperationState<TResult>>(\n lro: LongRunningOperation,\n options?: CreateHttpPollerOptions<TResult, TState>\n): Promise<SimplePollerLike<TState, TResult>> {\n const {\n resourceLocationConfig,\n intervalInMs,\n processResult,\n restoreFrom,\n updateState,\n withOperationLocation,\n } = options || {};\n return buildCreatePoller<LroResponse, TResult, TState>({\n getStatusFromInitialResponse: (response, state) => {\n const mode = state.config.metadata?.[\"mode\"];\n return mode === undefined ||\n (mode === \"Body\" && getOperationStatus(response, state) === \"succeeded\")\n ? \"succeeded\"\n : \"running\";\n },\n getStatusFromPollResponse: getOperationStatus,\n getOperationLocation,\n getPollingInterval: parseRetryAfter,\n })(\n {\n init: async () => {\n const response = await lro.sendInitialRequest();\n const config = inferLroMode({\n rawResponse: response.rawResponse,\n requestPath: lro.requestPath,\n requestMethod: lro.requestMethod,\n resourceLocationConfig,\n });\n return {\n response,\n operationLocation: config?.operationLocation,\n resourceLocation: config?.resourceLocation,\n ...(config?.mode ? { metadata: { mode: config.mode } } : {}),\n };\n },\n poll: lro.sendPollRequest,\n },\n {\n intervalInMs,\n withOperationLocation,\n restoreFrom,\n updateState,\n processResult: processResult\n ? ({ flatResponse }, state) => processResult(flatResponse, state)\n : ({ flatResponse }) => flatResponse as TResult,\n }\n );\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { LongRunningOperation, LroResourceLocationConfig, RawResponse } from \"../../http/models\";\nimport { PollOperation, PollOperationState } from \"../pollOperation\";\nimport { RestorableOperationState, StateProxy } from \"../../poller/models\";\nimport { initHttpOperation, pollHttpOperation } from \"../../http/operation\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { PollerConfig } from \"./models\";\nimport { logger } from \"../../logger\";\n\nconst createStateProxy: <TResult, TState extends PollOperationState<TResult>>() => StateProxy<\n TState,\n TResult\n> = () => ({\n initState: (config) => ({ config, isStarted: true } as any),\n setCanceled: (state) => (state.isCancelled = true),\n setError: (state, error) => (state.error = error),\n setResult: (state, result) => (state.result = result),\n setRunning: (state) => (state.isStarted = true),\n setSucceeded: (state) => (state.isCompleted = true),\n setFailed: () => {\n /** empty body */\n },\n\n getError: (state) => state.error,\n getResult: (state) => state.result,\n isCanceled: (state) => !!state.isCancelled,\n isFailed: (state) => !!state.error,\n isRunning: (state) => !!state.isStarted,\n isSucceeded: (state) => Boolean(state.isCompleted && !state.isCancelled && !state.error),\n});\n\nexport class GenericPollOperation<TResult, TState extends PollOperationState<TResult>>\n implements PollOperation<TState, TResult>\n{\n private pollerConfig?: PollerConfig;\n\n constructor(\n public state: RestorableOperationState<TState>,\n private lro: LongRunningOperation,\n private lroResourceLocationConfig?: LroResourceLocationConfig,\n private processResult?: (result: unknown, state: TState) => TResult,\n private updateState?: (state: TState, lastResponse: RawResponse) => void,\n private isDone?: (lastResponse: TResult, state: TState) => boolean\n ) {}\n\n public setPollerConfig(pollerConfig: PollerConfig): void {\n this.pollerConfig = pollerConfig;\n }\n\n async update(options?: {\n abortSignal?: AbortSignalLike;\n fireProgress?: (state: TState) => void;\n }): Promise<PollOperation<TState, TResult>> {\n const stateProxy = createStateProxy<TResult, TState>();\n if (!this.state.isStarted) {\n this.state = {\n ...this.state,\n ...(await initHttpOperation({\n lro: this.lro,\n stateProxy,\n resourceLocationConfig: this.lroResourceLocationConfig,\n processResult: this.processResult,\n })),\n };\n }\n const updateState = this.updateState;\n const isDone = this.isDone;\n\n if (!this.state.isCompleted) {\n await pollHttpOperation({\n lro: this.lro,\n state: this.state,\n stateProxy,\n processResult: this.processResult,\n updateState: updateState\n ? (state, { rawResponse }) => updateState(state, rawResponse)\n : undefined,\n isDone: isDone\n ? ({ flatResponse }, state) => isDone(flatResponse as TResult, state)\n : undefined,\n options,\n setDelay: (intervalInMs) => {\n this.pollerConfig!.intervalInMs = intervalInMs;\n },\n });\n }\n options?.fireProgress?.(this.state);\n return this;\n }\n\n async cancel(): Promise<PollOperation<TState, TResult>> {\n logger.error(\"`cancelOperation` is deprecated because it wasn't implemented\");\n return this;\n }\n\n /**\n * Serializes the Poller operation.\n */\n public toString(): string {\n return JSON.stringify({\n state: this.state,\n });\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { PollOperation, PollOperationState } from \"./pollOperation\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { CancelOnProgress } from \"../poller/models\";\nimport { PollerLike } from \"./models\";\n\n/**\n * PollProgressCallback<TState> is the type of the callback functions sent to onProgress.\n * These functions will receive a TState that is defined by your implementation of\n * the Poller class.\n */\nexport type PollProgressCallback<TState> = (state: TState) => void;\n\n/**\n * When a poller is manually stopped through the `stopPolling` method,\n * the poller will be rejected with an instance of the PollerStoppedError.\n */\nexport class PollerStoppedError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"PollerStoppedError\";\n Object.setPrototypeOf(this, PollerStoppedError.prototype);\n }\n}\n\n/**\n * When the operation is cancelled, the poller will be rejected with an instance\n * of the PollerCancelledError.\n */\nexport class PollerCancelledError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"PollerCancelledError\";\n Object.setPrototypeOf(this, PollerCancelledError.prototype);\n }\n}\n\n/**\n * A class that represents the definition of a program that polls through consecutive requests\n * until it reaches a state of completion.\n *\n * A poller can be executed manually, by polling request by request by calling to the `poll()` method repeatedly, until its operation is completed.\n * It also provides a way to wait until the operation completes, by calling `pollUntilDone()` and waiting until the operation finishes.\n * Pollers can also request the cancellation of the ongoing process to whom is providing the underlying long running operation.\n *\n * ```ts\n * const poller = new MyPoller();\n *\n * // Polling just once:\n * await poller.poll();\n *\n * // We can try to cancel the request here, by calling:\n * //\n * // await poller.cancelOperation();\n * //\n *\n * // Getting the final result:\n * const result = await poller.pollUntilDone();\n * ```\n *\n * The Poller is defined by two types, a type representing the state of the poller, which\n * must include a basic set of properties from `PollOperationState<TResult>`,\n * and a return type defined by `TResult`, which can be anything.\n *\n * The Poller class implements the `PollerLike` interface, which allows poller implementations to avoid having\n * to export the Poller's class directly, and instead only export the already instantiated poller with the PollerLike type.\n *\n * ```ts\n * class Client {\n * public async makePoller: PollerLike<MyOperationState, MyResult> {\n * const poller = new MyPoller({});\n * // It might be preferred to return the poller after the first request is made,\n * // so that some information can be obtained right away.\n * await poller.poll();\n * return poller;\n * }\n * }\n *\n * const poller: PollerLike<MyOperationState, MyResult> = myClient.makePoller();\n * ```\n *\n * A poller can be created through its constructor, then it can be polled until it's completed.\n * At any point in time, the state of the poller can be obtained without delay through the getOperationState method.\n * At any point in time, the intermediate forms of the result type can be requested without delay.\n * Once the underlying operation is marked as completed, the poller will stop and the final value will be returned.\n *\n * ```ts\n * const poller = myClient.makePoller();\n * const state: MyOperationState = poller.getOperationState();\n *\n * // The intermediate result can be obtained at any time.\n * const result: MyResult | undefined = poller.getResult();\n *\n * // The final result can only be obtained after the poller finishes.\n * const result: MyResult = await poller.pollUntilDone();\n * ```\n *\n */\n// eslint-disable-next-line no-use-before-define\nexport abstract class Poller<TState extends PollOperationState<TResult>, TResult>\n implements PollerLike<TState, TResult>\n{\n private stopped: boolean = true;\n private resolve?: (value: TResult) => void;\n private reject?: (error: PollerStoppedError | PollerCancelledError | Error) => void;\n private pollOncePromise?: Promise<void>;\n private cancelPromise?: Promise<void>;\n private promise: Promise<TResult>;\n private pollProgressCallbacks: PollProgressCallback<TState>[] = [];\n\n /**\n * The poller's operation is available in full to any of the methods of the Poller class\n * and any class extending the Poller class.\n */\n protected operation: PollOperation<TState, TResult>;\n\n /**\n * A poller needs to be initialized by passing in at least the basic properties of the `PollOperation<TState, TResult>`.\n *\n * When writing an implementation of a Poller, this implementation needs to deal with the initialization\n * of any custom state beyond the basic definition of the poller. The basic poller assumes that the poller's\n * operation has already been defined, at least its basic properties. The code below shows how to approach\n * the definition of the constructor of a new custom poller.\n *\n * ```ts\n * export class MyPoller extends Poller<MyOperationState, string> {\n * constructor({\n * // Anything you might need outside of the basics\n * }) {\n * let state: MyOperationState = {\n * privateProperty: private,\n * publicProperty: public,\n * };\n *\n * const operation = {\n * state,\n * update,\n * cancel,\n * toString\n * }\n *\n * // Sending the operation to the parent's constructor.\n * super(operation);\n *\n * // You can assign more local properties here.\n * }\n * }\n * ```\n *\n * Inside of this constructor, a new promise is created. This will be used to\n * tell the user when the poller finishes (see `pollUntilDone()`). The promise's\n * resolve and reject methods are also used internally to control when to resolve\n * or reject anyone waiting for the poller to finish.\n *\n * The constructor of a custom implementation of a poller is where any serialized version of\n * a previous poller's operation should be deserialized into the operation sent to the\n * base constructor. For example:\n *\n * ```ts\n * export class MyPoller extends Poller<MyOperationState, string> {\n * constructor(\n * baseOperation: string | undefined\n * ) {\n * let state: MyOperationState = {};\n * if (baseOperation) {\n * state = {\n * ...JSON.parse(baseOperation).state,\n * ...state\n * };\n * }\n * const operation = {\n * state,\n * // ...\n * }\n * super(operation);\n * }\n * }\n * ```\n *\n * @param operation - Must contain the basic properties of `PollOperation<State, TResult>`.\n */\n constructor(operation: PollOperation<TState, TResult>) {\n this.operation = operation;\n this.promise = new Promise<TResult>(\n (\n resolve: (result: TResult) => void,\n reject: (error: PollerStoppedError | PollerCancelledError | Error) => void\n ) => {\n this.resolve = resolve;\n this.reject = reject;\n }\n );\n // This prevents the UnhandledPromiseRejectionWarning in node.js from being thrown.\n // The above warning would get thrown if `poller.poll` is called, it returns an error,\n // and pullUntilDone did not have a .catch or await try/catch on it's return value.\n this.promise.catch(() => {\n /* intentionally blank */\n });\n }\n\n /**\n * Defines how much to wait between each poll request.\n * This has to be implemented by your custom poller.\n *\n * \\@azure/core-util has a simple implementation of a delay function that waits as many milliseconds as specified.\n * This can be used as follows:\n *\n * ```ts\n * import { delay } from \"@azure/core-util\";\n *\n * export class MyPoller extends Poller<MyOperationState, string> {\n * // The other necessary definitions.\n *\n * async delay(): Promise<void> {\n * const milliseconds = 1000;\n * return delay(milliseconds);\n * }\n * }\n * ```\n *\n */\n protected abstract delay(): Promise<void>;\n\n /**\n * Starts a loop that will break only if the poller is done\n * or if the poller is stopped.\n */\n private async startPolling(pollOptions: { abortSignal?: AbortSignalLike } = {}): Promise<void> {\n if (this.stopped) {\n this.stopped = false;\n }\n while (!this.isStopped() && !this.isDone()) {\n await this.poll(pollOptions);\n await this.delay();\n }\n }\n\n /**\n * pollOnce does one polling, by calling to the update method of the underlying\n * poll operation to make any relevant change effective.\n *\n * It only optionally receives an object with an abortSignal property, from \\@azure/abort-controller's AbortSignalLike.\n *\n * @param options - Optional properties passed to the operation's update method.\n */\n private async pollOnce(options: { abortSignal?: AbortSignalLike } = {}): Promise<void> {\n if (!this.isDone()) {\n try {\n this.operation = await this.operation.update({\n abortSignal: options.abortSignal,\n fireProgress: this.fireProgress.bind(this),\n });\n } catch (e: any) {\n this.operation.state.error = e;\n }\n }\n this.processUpdatedState();\n }\n\n /**\n * fireProgress calls the functions passed in via onProgress the method of the poller.\n *\n * It loops over all of the callbacks received from onProgress, and executes them, sending them\n * the current operation state.\n *\n * @param state - The current operation state.\n */\n private fireProgress(state: TState): void {\n for (const callback of this.pollProgressCallbacks) {\n callback(state);\n }\n }\n\n /**\n * Invokes the underlying operation's cancel method.\n */\n private async cancelOnce(options: { abortSignal?: AbortSignalLike } = {}): Promise<void> {\n this.operation = await this.operation.cancel(options);\n }\n\n /**\n * Returns a promise that will resolve once a single polling request finishes.\n * It does this by calling the update method of the Poller's operation.\n *\n * It only optionally receives an object with an abortSignal property, from \\@azure/abort-controller's AbortSignalLike.\n *\n * @param options - Optional properties passed to the operation's update method.\n */\n public poll(options: { abortSignal?: AbortSignalLike } = {}): Promise<void> {\n if (!this.pollOncePromise) {\n this.pollOncePromise = this.pollOnce(options);\n const clearPollOncePromise = (): void => {\n this.pollOncePromise = undefined;\n };\n this.pollOncePromise.then(clearPollOncePromise, clearPollOncePromise).catch(this.reject);\n }\n return this.pollOncePromise;\n }\n\n private processUpdatedState(): void {\n if (this.operation.state.error) {\n this.stopped = true;\n this.reject!(this.operation.state.error);\n throw this.operation.state.error;\n }\n if (this.operation.state.isCancelled) {\n this.stopped = true;\n const error = new PollerCancelledError(\"Operation was canceled\");\n this.reject!(error);\n throw error;\n } else if (this.isDone() && this.resolve) {\n // If the poller has finished polling, this means we now have a result.\n // However, it can be the case that TResult is instantiated to void, so\n // we are not expecting a result anyway. To assert that we might not\n // have a result eventually after finishing polling, we cast the result\n // to TResult.\n this.resolve(this.operation.state.result as TResult);\n }\n }\n\n /**\n * Returns a promise that will resolve once the underlying operation is completed.\n */\n public async pollUntilDone(\n pollOptions: { abortSignal?: AbortSignalLike } = {}\n ): Promise<TResult> {\n if (this.stopped) {\n this.startPolling(pollOptions).catch(this.reject);\n }\n // This is needed because the state could have been updated by\n // `cancelOperation`, e.g. the operation is canceled or an error occurred.\n this.processUpdatedState();\n return this.promise;\n }\n\n /**\n * Invokes the provided callback after each polling is completed,\n * sending the current state of the poller's operation.\n *\n * It returns a method that can be used to stop receiving updates on the given callback function.\n */\n public onProgress(callback: (state: TState) => void): CancelOnProgress {\n this.pollProgressCallbacks.push(callback);\n return (): void => {\n this.pollProgressCallbacks = this.pollProgressCallbacks.filter((c) => c !== callback);\n };\n }\n\n /**\n * Returns true if the poller has finished polling.\n */\n public isDone(): boolean {\n const state: PollOperationState<TResult> = this.operation.state;\n return Boolean(state.isCompleted || state.isCancelled || state.error);\n }\n\n /**\n * Stops the poller from continuing to poll.\n */\n public stopPolling(): void {\n if (!this.stopped) {\n this.stopped = true;\n if (this.reject) {\n this.reject(new PollerStoppedError(\"This poller is already stopped\"));\n }\n }\n }\n\n /**\n * Returns true if the poller is stopped.\n */\n public isStopped(): boolean {\n return this.stopped;\n }\n\n /**\n * Attempts to cancel the underlying operation.\n *\n * It only optionally receives an object with an abortSignal property, from \\@azure/abort-controller's AbortSignalLike.\n *\n * If it's called again before it finishes, it will throw an error.\n *\n * @param options - Optional properties passed to the operation's update method.\n */\n public cancelOperation(options: { abortSignal?: AbortSignalLike } = {}): Promise<void> {\n if (!this.cancelPromise) {\n this.cancelPromise = this.cancelOnce(options);\n } else if (options.abortSignal) {\n throw new Error(\"A cancel request is currently pending\");\n }\n return this.cancelPromise;\n }\n\n /**\n * Returns the state of the operation.\n *\n * Even though TState will be the same type inside any of the methods of any extension of the Poller class,\n * implementations of the pollers can customize what's shared with the public by writing their own\n * version of the `getOperationState` method, and by defining two types, one representing the internal state of the poller\n * and a public type representing a safe to share subset of the properties of the internal state.\n * Their definition of getOperationState can then return their public type.\n *\n * Example:\n *\n * ```ts\n * // Let's say we have our poller's operation state defined as:\n * interface MyOperationState extends PollOperationState<ResultType> {\n * privateProperty?: string;\n * publicProperty?: string;\n * }\n *\n * // To allow us to have a true separation of public and private state, we have to define another interface:\n * interface PublicState extends PollOperationState<ResultType> {\n * publicProperty?: string;\n * }\n *\n * // Then, we define our Poller as follows:\n * export class MyPoller extends Poller<MyOperationState, ResultType> {\n * // ... More content is needed here ...\n *\n * public getOperationState(): PublicState {\n * const state: PublicState = this.operation.state;\n * return {\n * // Properties from PollOperationState<TResult>\n * isStarted: state.isStarted,\n * isCompleted: state.isCompleted,\n * isCancelled: state.isCancelled,\n * error: state.error,\n * result: state.result,\n *\n * // The only other property needed by PublicState.\n * publicProperty: state.publicProperty\n * }\n * }\n * }\n * ```\n *\n * You can see this in the tests of this repository, go to the file:\n * `../test/utils/testPoller.ts`\n * and look for the getOperationState implementation.\n */\n public getOperationState(): TState {\n return this.operation.state;\n }\n\n /**\n * Returns the result value of the operation,\n * regardless of the state of the poller.\n * It can return undefined or an incomplete form of the final TResult value\n * depending on the implementation.\n */\n public getResult(): TResult | undefined {\n const state: PollOperationState<TResult> = this.operation.state;\n return state.result;\n }\n\n /**\n * Returns a serialized version of the poller's operation\n * by invoking the operation's toString method.\n */\n public toString(): string {\n return this.operation.toString();\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { LroEngineOptions, PollerConfig } from \"./models\";\nimport { GenericPollOperation } from \"./operation\";\nimport { LongRunningOperation } from \"../../http/models\";\nimport { POLL_INTERVAL_IN_MS } from \"../../poller/constants\";\nimport { PollOperationState } from \"../pollOperation\";\nimport { Poller } from \"../poller\";\nimport { RestorableOperationState } from \"../../poller/models\";\nimport { deserializeState } from \"../../poller/operation\";\n\n/**\n * The LRO Engine, a class that performs polling.\n */\nexport class LroEngine<TResult, TState extends PollOperationState<TResult>> extends Poller<\n TState,\n TResult\n> {\n private config: PollerConfig;\n\n constructor(lro: LongRunningOperation<TResult>, options?: LroEngineOptions<TResult, TState>) {\n const { intervalInMs = POLL_INTERVAL_IN_MS, resumeFrom } = options || {};\n const state: RestorableOperationState<TState> = resumeFrom\n ? deserializeState(resumeFrom)\n : ({} as RestorableOperationState<TState>);\n\n const operation = new GenericPollOperation(\n state,\n lro,\n options?.lroResourceLocationConfig,\n options?.processResult,\n options?.updateState,\n options?.isDone\n );\n super(operation);\n\n this.config = { intervalInMs: intervalInMs };\n operation.setPollerConfig(this.config);\n }\n\n /**\n * The method used by the poller to wait before attempting to update its operation.\n */\n delay(): Promise<void> {\n return new Promise((resolve) => setTimeout(() => resolve(), this.config.intervalInMs));\n }\n}\n"],"names":["createClientLogger","createStateProxy","abortController","AbortController"],"mappings":";;;;;;;AAAA;AAKA;;;AAGG;AACI,MAAM,MAAM,GAAGA,2BAAkB,CAAC,UAAU,CAAC;;ACTpD;AACA;AAEA;;AAEG;AACI,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC;;AAEG;AACI,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC;;ACVjE;AAOA;;AAEG;AACG,SAAU,gBAAgB,CAC9B,eAAuB,EAAA;IAEvB,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC;AAC1C,KAAA;AAAC,IAAA,OAAO,CAAC,EAAE;AACV,QAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,eAAe,CAAA,CAAE,CAAC,CAAC;AAC1E,KAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAkB,MAGvC,EAAA;AACC,IAAA,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACrC,OAAO,CAAC,KAAY,KAAI;AACtB,QAAA,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,QAAA,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAA,MAAM,KAAK,CAAC;AACd,KAAC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAkB,MAIhD,EAAA;IACC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;AAC7C,IAAA,MAAM,CAAC,OAAO,CACZ,CAAA,8BAAA,EACE,KAAK,CAAC,MAAM,CAAC,iBACf,CAAA,sBAAA,EAAyB,MAAM,CAAA,oBAAA,EAC7B,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,SAChD,CAAE,CAAA,CACH,CAAC;AACF,IAAA,QAAQ,MAAM;QACZ,KAAK,WAAW,EAAE;AAChB,YAAA,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM;AACP,SAAA;QACD,KAAK,QAAQ,EAAE;YACb,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,CAAA,qCAAA,CAAuC,CAAC,CAAC,CAAC;AAC/E,YAAA,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM;AACP,SAAA;QACD,KAAK,UAAU,EAAE;AACf,YAAA,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM;AACP,SAAA;AACF,KAAA;AACH,CAAC;AAED,SAAS,WAAW,CAA6B,MAIhD,EAAA;IACC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AAClD,IAAA,OAAO,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAI,QAA+B,CAAC;AAC3F,CAAC;AAED;;AAEG;AACI,eAAe,aAAa,CAA6B,MAS/D,EAAA;AACC,IAAA,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAC;AAC9F,IAAA,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;AACjF,IAAA,IAAI,iBAAiB;QAAE,qBAAqB,KAAA,IAAA,IAArB,qBAAqB,KAArB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAqB,CAAG,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACzE,IAAA,MAAM,MAAM,GAAG;QACb,QAAQ;QACR,iBAAiB;QACjB,gBAAgB;KACjB,CAAC;AACF,IAAA,MAAM,CAAC,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACnD,IAAA,IAAI,MAAM,KAAK,WAAW,IAAI,iBAAiB,KAAK,SAAS,EAAE;AAC7D,QAAA,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,UAAU,CAAC,SAAS,CAClB,KAAK,EACL,WAAW,CAAC;YACV,QAAQ;YACR,KAAK;YACL,aAAa;AACd,SAAA,CAAC,CACH,CAAC;AACH,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe,mBAAmB,CAAuC,MAWxE,EAAA;AAIC,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,OAAO,GACR,GAAG,MAAM,CAAC;AACX,IAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,KAAK,CAC3D,aAAa,CAAC;QACZ,KAAK;QACL,UAAU;AACX,KAAA,CAAC,CACH,CAAC;IACF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACnD,IAAA,sBAAsB,CAAC;QACrB,MAAM;QACN,KAAK;QACL,UAAU;AACX,KAAA,CAAC,CAAC;AACH,IAAA,IAAI,MAAM,KAAK,WAAW,IAAI,gBAAgB,KAAK,SAAS,EAAE;QAC5D,OAAO;AACL,YAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAClF,MAAM;SACP,CAAC;AACH,KAAA;AACD,IAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED;AACO,eAAe,aAAa,CAAuC,MAmBzE,EAAA;IACC,MAAM,EACJ,IAAI,EACJ,KAAK,EACL,UAAU,EACV,OAAO,EACP,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,QAAQ,EACR,MAAM,GACP,GAAG,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7D,IAAI,iBAAiB,KAAK,SAAS,EAAE;QACnC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC;YACrD,IAAI;YACJ,kBAAkB;YAClB,KAAK;YACL,UAAU;YACV,iBAAiB;YACjB,gBAAgB;YAChB,OAAO;AACR,SAAA,CAAC,CAAC;QACH,IACE,CAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAG,QAAQ,EAAE,KAAK,CAAC;AACzB,aAAC,MAAM,KAAK,SAAS,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EACpE;AACA,YAAA,UAAU,CAAC,SAAS,CAClB,KAAK,EACL,WAAW,CAAC;gBACV,QAAQ;gBACR,KAAK;gBACL,aAAa;AACd,aAAA,CAAC,CACH,CAAC;AACH,SAAA;AAAM,aAAA;YACL,MAAM,YAAY,GAAG,kBAAkB,KAAlB,IAAA,IAAA,kBAAkB,uBAAlB,kBAAkB,CAAG,QAAQ,CAAC,CAAC;AACpD,YAAA,IAAI,YAAY;gBAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;AACzC,YAAA,MAAM,QAAQ,GAAG,oBAAoB,KAAA,IAAA,IAApB,oBAAoB,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAApB,oBAAoB,CAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;YACzD,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,gBAAA,MAAM,SAAS,GAAG,iBAAiB,KAAK,QAAQ,CAAC;AACjD,gBAAA,KAAK,CAAC,MAAM,CAAC,iBAAiB,GAAG,QAAQ,CAAC;gBAC1C,qBAAqB,KAAA,IAAA,IAArB,qBAAqB,KAArB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAqB,CAAG,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC9C,aAAA;;gBAAM,qBAAqB,KAAA,IAAA,IAArB,qBAAqB,KAArB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAqB,CAAG,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAC1D,SAAA;QACD,WAAW,KAAA,IAAA,IAAX,WAAW,KAAX,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,WAAW,CAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;AAChC,KAAA;AACH;;AChOA;AAqBA,SAAS,8BAA8B,CAAC,MAGvC,EAAA;AACC,IAAA,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAC1D,IAAA,OAAO,iBAAiB,KAAjB,IAAA,IAAA,iBAAiB,cAAjB,iBAAiB,GAAI,mBAAmB,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAwB,EAAA;AACjD,IAAA,OAAO,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,0BAA0B,CAAC,WAAwB,EAAA;AAC1D,IAAA,OAAO,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,4BAA4B,CAAC,WAAwB,EAAA;AAC5D,IAAA,OAAO,WAAW,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,oBAAoB,CAAC,MAK7B,EAAA;IACC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC;AAChF,IAAA,QAAQ,aAAa;QACnB,KAAK,KAAK,EAAE;AACV,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;QACD,KAAK,QAAQ,EAAE;AACb,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AACD,QAAA,SAAS;AACP,YAAA,QAAQ,sBAAsB;gBAC5B,KAAK,uBAAuB,EAAE;AAC5B,oBAAA,OAAO,SAAS,CAAC;AAClB,iBAAA;gBACD,KAAK,cAAc,EAAE;AACnB,oBAAA,OAAO,WAAW,CAAC;AACpB,iBAAA;AACD,gBAAA,KAAK,UAAU,CAAC;AAChB,gBAAA,SAAS;AACP,oBAAA,OAAO,QAAQ,CAAC;AACjB,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA;AACH,CAAC;AAEK,SAAU,YAAY,CAAC,MAK5B,EAAA;IACC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC;AACnF,IAAA,MAAM,iBAAiB,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;AAClE,IAAA,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,8BAA8B,CAAC,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAC9F,IAAA,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,uBAAuB,GAAG,aAAa,KAAb,IAAA,IAAA,aAAa,uBAAb,aAAa,CAAE,iBAAiB,EAAE,CAAC;IACnE,IAAI,UAAU,KAAK,SAAS,EAAE;QAC5B,OAAO;AACL,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,iBAAiB,EAAE,UAAU;YAC7B,gBAAgB,EAAE,oBAAoB,CAAC;AACrC,gBAAA,aAAa,EAAE,uBAAuB;gBACtC,QAAQ;gBACR,WAAW;gBACX,sBAAsB;aACvB,CAAC;SACH,CAAC;AACH,KAAA;SAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;QACjC,OAAO;AACL,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,iBAAiB,EAAE,QAAQ;SAC5B,CAAC;AACH,KAAA;AAAM,SAAA,IAAI,uBAAuB,KAAK,KAAK,IAAI,WAAW,EAAE;QAC3D,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,iBAAiB,EAAE,WAAW;SAC/B,CAAC;AACH,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAA0B,EAAA;IACjD,QAAQ,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,WAAW,EAAE;AAC3B,QAAA,KAAK,SAAS,CAAC;AACf,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,WAAW,CAAC;AACrB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,QAAQ,CAAC;AAClB,QAAA,KAAK,SAAS,CAAC;AACf,QAAA,KAAK,UAAU,CAAC;AAChB,QAAA,KAAK,WAAW,CAAC;AACjB,QAAA,KAAK,YAAY;AACf,YAAA,OAAO,SAAS,CAAC;AACnB,QAAA,KAAK,UAAU,CAAC;AAChB,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,UAAU,CAAC;AACpB,QAAA,SAAS;AACP,YAAA,MAAM,CAAC,OAAO,CAAC,uCAAuC,MAAM,CAAA,CAAE,CAAC,CAAC;AAChE,YAAA,OAAO,MAAyB,CAAC;AAClC,SAAA;AACF,KAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,WAAwB,EAAA;;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAA,EAAA,GAAC,WAAW,CAAC,IAAqB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;AAC5D,IAAA,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAwB,EAAA;;AACpD,IAAA,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,CAAC,EAAA,GAAA,WAAW,CAAC,IAAqB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;AACnF,IAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,UAAU,KAAV,IAAA,IAAA,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,iBAAiB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,iBAAiB,CAAC;AACjE,IAAA,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAkB,EAAA;IAC3C,IAAI,UAAU,KAAK,GAAG,EAAE;AACtB,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;SAAM,IAAI,UAAU,GAAG,GAAG,EAAE;AAC3B,QAAA,OAAO,WAAW,CAAC;AACpB,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,QAAQ,CAAC;AACjB,KAAA;AACH,CAAC;AAEe,SAAA,eAAe,CAAI,EAAE,WAAW,EAAkB,EAAA;IAChE,MAAM,UAAU,GAAuB,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1E,IAAI,UAAU,KAAK,SAAS,EAAE;;AAE5B,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC,mBAAmB,CAAC;cAC7B,gCAAgC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;AACxD,cAAE,mBAAmB,GAAG,IAAI,CAAC;AAChC,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gCAAgC,CAAC,cAAoB,EAAA;AAC5D,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AACjD,IAAA,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;IAChD,IAAI,OAAO,GAAG,cAAc,EAAE;QAC5B,OAAO,cAAc,GAAG,OAAO,CAAC;AACjC,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;AAEG;AACI,eAAe,iBAAiB,CAAkB,MAKxD,EAAA;IACC,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;AAC1E,IAAA,OAAO,aAAa,CAAC;QACnB,IAAI,EAAE,YAAW;AACf,YAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,YAAY,CAAC;gBAC1B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,sBAAsB;AACvB,aAAA,CAAC,CAAC;YACH,OACE,MAAA,CAAA,MAAA,CAAA,EAAA,QAAQ,EACR,iBAAiB,EAAE,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,iBAAiB,EAC5C,gBAAgB,EAAE,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,gBAAgB,EACvC,GAAC,CAAA,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,IAAI,IAAG,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAC3D,CAAA;SACH;QACD,UAAU;AACV,QAAA,aAAa,EAAE,aAAa;AAC1B,cAAE,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,KAAK,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC;cAC/D,CAAC,EAAE,YAAY,EAAE,KAAK,YAAuB;AACjD,QAAA,kBAAkB,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAI;;YACtC,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,MAAM,CAAC,CAAC;YAC7C,OAAO,IAAI,KAAK,SAAS;AACvB,iBAAC,IAAI,KAAK,MAAM,IAAI,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,WAAW,CAAC;AACxE,kBAAE,WAAW;kBACX,SAAS,CAAC;SACf;AACF,KAAA,CAAC,CAAC;AACL,CAAC;SAEe,oBAAoB,CAClC,EAAE,WAAW,EAAe,EAC5B,KAAuC,EAAA;;IAEvC,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,MAAM,CAAC,CAAC;AAC7C,IAAA,QAAQ,IAAI;QACV,KAAK,mBAAmB,EAAE;AACxB,YAAA,OAAO,8BAA8B,CAAC;AACpC,gBAAA,iBAAiB,EAAE,0BAA0B,CAAC,WAAW,CAAC;AAC1D,gBAAA,mBAAmB,EAAE,4BAA4B,CAAC,WAAW,CAAC;AAC/D,aAAA,CAAC,CAAC;AACJ,SAAA;QACD,KAAK,kBAAkB,EAAE;AACvB,YAAA,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,KAAK,MAAM,CAAC;AACZ,QAAA,SAAS;AACP,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AACF,KAAA;AACH,CAAC;SAEe,kBAAkB,CAChC,EAAE,WAAW,EAAe,EAC5B,KAAuC,EAAA;;IAEvC,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,MAAM,CAAC,CAAC;AAC7C,IAAA,QAAQ,IAAI;QACV,KAAK,mBAAmB,EAAE;AACxB,YAAA,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;AAC/B,SAAA;QACD,KAAK,kBAAkB,EAAE;AACvB,YAAA,OAAO,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAClD,SAAA;QACD,KAAK,MAAM,EAAE;AACX,YAAA,OAAO,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAC1C,SAAA;AACD,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAA,CAAE,CAAC,CAAC;AACzD,KAAA;AACH,CAAC;AAED;AACO,eAAe,iBAAiB,CAAkB,MASxD,EAAA;AACC,IAAA,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AACzF,IAAA,OAAO,aAAa,CAAC;QACnB,KAAK;QACL,UAAU;QACV,QAAQ;AACR,QAAA,aAAa,EAAE,aAAa;AAC1B,cAAE,CAAC,EAAE,YAAY,EAAE,EAAE,UAAU,KAAK,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC;cACzE,CAAC,EAAE,YAAY,EAAE,KAAK,YAAuB;QACjD,WAAW;AACX,QAAA,kBAAkB,EAAE,eAAe;QACnC,oBAAoB;QACpB,kBAAkB;QAClB,OAAO;AACP;;;AAGG;AACH,QAAA,IAAI,EAAE,OAAO,QAAQ,EAAE,YAAY,KAAK,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC;AACpF,KAAA,CAAC,CAAC;AACL;;AC9RA;AACA;AAEA;;;AAGG;AACH,MAAM,QAAQ,GAAG,CAAS,KAAqB,EAAE,CAAgB,KAC/D,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAI7C,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AAa/D;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,OAAO,CAAC,EAAU,EAAA;IAChC,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,IAAA,IAAI,QAAkC,CAAC;AAEvC,IAAA,OAAO,MAAM,CAAC,MAAM,CAClB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AACpC,QAAA,IAAI,KAAoC,CAAC;QACzC,QAAQ,GAAG,MAAK;AACd,YAAA,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC9B,MAAM,CAAC,WAAW,CAAC,CAAC;AACtB,SAAC,CAAC;;;AAIF,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,QAAQ,EAAE,CAAC;AACZ,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjC,SAAA;AACH,KAAC,CAAC,EACF;QACE,MAAM,EAAE,MAAK;YACX,OAAO,GAAG,IAAI,CAAC;AACf,YAAA,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,EAAI,CAAC;SACd;AACF,KAAA,CACF,CAAC;AACJ;;ACvEA;AAiBA,MAAMC,kBAAgB,GAGlB,OAAO;AACT;;;;AAIG;AACH,IAAA,SAAS,EAAE,CAAC,MAAM,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAU,CAAA;AAC7D,IAAA,WAAW,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;AACnD,IAAA,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,MAAM,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AACjD,IAAA,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,MAAM,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACrD,IAAA,UAAU,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;AACjD,IAAA,YAAY,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;AACrD,IAAA,SAAS,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;IAE/C,QAAQ,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;IAChC,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM;IAClC,UAAU,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,UAAU;IAClD,QAAQ,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,QAAQ;IAC9C,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,SAAS;IAChD,WAAW,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,WAAW;AACrD,CAAA,CAAC,CAAC;AAEH;;AAEG;AACG,SAAU,iBAAiB,CAC/B,MAAmD,EAAA;IAKnD,MAAM,EACJ,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,kBAAkB,GACnB,GAAG,MAAM,CAAC;IACX,OAAO,OACL,EAAE,IAAI,EAAE,IAAI,EAA2D,EACvE,OAAyD,KACvD;AACF,QAAA,MAAM,EACJ,aAAa,EACb,WAAW,EACX,qBAAqB,EAAE,6BAA6B,EACpD,YAAY,GAAG,mBAAmB,EAClC,WAAW,GACZ,GAAG,OAAO,IAAI,EAAE,CAAC;AAClB,QAAA,MAAM,UAAU,GAAGA,kBAAgB,EAAmB,CAAC;QACvD,MAAM,qBAAqB,GAAG,6BAA6B;cACvD,CAAC,MAAK;gBACJ,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,gBAAA,OAAO,CAAC,iBAAyB,EAAE,SAAkB,KAAI;AACvD,oBAAA,IAAI,SAAS;wBAAE,6BAA6B,CAAC,iBAAiB,CAAC,CAAC;AAC3D,yBAAA,IAAI,CAAC,MAAM;wBAAE,6BAA6B,CAAC,iBAAiB,CAAC,CAAC;oBACnE,MAAM,GAAG,IAAI,CAAC;AAChB,iBAAC,CAAC;AACJ,aAAC,GAAG;cACJ,SAAS,CAAC;QACd,MAAM,KAAK,GAAqC,WAAW;AACzD,cAAE,gBAAgB,CAAC,WAAW,CAAC;cAC7B,MAAM,aAAa,CAAC;gBAClB,IAAI;gBACJ,UAAU;gBACV,aAAa;AACb,gBAAA,kBAAkB,EAAE,4BAA4B;gBAChD,qBAAqB;AACtB,aAAA,CAAC,CAAC;AACP,QAAA,IAAI,aAA2C,CAAC;AAChD,QAAA,IAAI,SAAmC,CAAC;AACxC,QAAA,MAAMC,iBAAe,GAAG,IAAIC,+BAAe,EAAE,CAAC;AAG9C,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC5C,MAAM,oBAAoB,GAAG,YAA2B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAE1F,IAAI,uBAAuB,GAAG,YAAY,CAAC;AAE3C,QAAA,MAAM,MAAM,GAAsC;AAChD,YAAA,iBAAiB,EAAE,MAAM,KAAK;AAC9B,YAAA,SAAS,EAAE,MAAM,KAAK,CAAC,MAAM;AAC7B,YAAA,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AACxE,YAAA,SAAS,EAAE,MAAM,aAAa,KAAK,SAAS;YAC5C,WAAW,EAAE,MAAK;gBAChBD,iBAAe,CAAC,KAAK,EAAE,CAAC;AACxB,gBAAA,SAAS,KAAT,IAAA,IAAA,SAAS,KAAT,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,SAAS,EAAI,CAAC;aACf;AACD,YAAA,QAAQ,EAAE,MACR,IAAI,CAAC,SAAS,CAAC;gBACb,KAAK;aACN,CAAC;AACJ,YAAA,UAAU,EAAE,CAAC,QAAiC,KAAI;AAChD,gBAAA,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;AACnB,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC1B,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACjC;AACD,YAAA,aAAa,EAAE,CAAC,WAA+C,MAC5D,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,KAAA,CAAA,GAAb,aAAa,IAAb,aAAa,GAAK,CAAC,YAAW;gBAC7B,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,WAAW,IAAI,EAAE,CAAC;AAC5D,gBAAA,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB;sBAC5C,IAAIC,+BAAe,CAAC,CAAC,gBAAgB,EAAED,iBAAe,CAAC,MAAM,CAAC,CAAC;sBAC/DA,iBAAe,CAAC;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;oBACpB,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AACnC,oBAAA,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACvB,wBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAC/C,wBAAA,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;AACzB,wBAAA,MAAM,KAAK,CAAC;wBACZ,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AACpC,qBAAA;AACF,iBAAA;gBACD,QAAQ,KAAK,CAAC,MAAM;oBAClB,KAAK,WAAW,EAAE;AAChB,wBAAA,OAAO,MAAM,CAAC,SAAS,EAAa,CAAC;AACtC,qBAAA;oBACD,KAAK,UAAU,EAAE;AACf,wBAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC3C,qBAAA;oBACD,KAAK,QAAQ,EAAE;wBACb,MAAM,KAAK,CAAC,KAAK,CAAC;AACnB,qBAAA;AACD,oBAAA,KAAK,YAAY,CAAC;oBAClB,KAAK,SAAS,EAAE;;AAEd,wBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,+CAAA,CAAiD,CAAC,CAAC;AACpE,qBAAA;AACF,iBAAA;AACH,aAAC,GAAG,CAAC,OAAO,CAAC,MAAK;gBAChB,aAAa,GAAG,SAAS,CAAC;AAC5B,aAAC,CAAC,CAAC,CAAA;YACL,MAAM,IAAI,CAAC,WAA+C,EAAA;AACxD,gBAAA,MAAM,aAAa,CAAC;oBAClB,IAAI;oBACJ,KAAK;oBACL,UAAU;oBACV,oBAAoB;oBACpB,qBAAqB;oBACrB,kBAAkB;AAClB,oBAAA,kBAAkB,EAAE,yBAAyB;oBAC7C,aAAa;oBACb,WAAW;AACX,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,QAAQ,EAAE,CAAC,gBAAgB,KAAI;wBAC7B,uBAAuB,GAAG,gBAAgB,CAAC;qBAC5C;AACF,iBAAA,CAAC,CAAC;gBACH,MAAM,oBAAoB,EAAE,CAAC;AAC7B,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE;AAC/B,oBAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC3C,iBAAA;AACD,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;oBAC7B,MAAM,KAAK,CAAC,KAAK,CAAC;AACnB,iBAAA;aACF;SACF,CAAC;AACF,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC;AACJ;;ACjLA;AAcA;;;;;AAKG;AACI,eAAe,gBAAgB,CACpC,GAAyB,EACzB,OAAkD,EAAA;AAElD,IAAA,MAAM,EACJ,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,EACX,qBAAqB,GACtB,GAAG,OAAO,IAAI,EAAE,CAAC;AAClB,IAAA,OAAO,iBAAiB,CAA+B;AACrD,QAAA,4BAA4B,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAI;;YAChD,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,MAAM,CAAC,CAAC;YAC7C,OAAO,IAAI,KAAK,SAAS;AACvB,iBAAC,IAAI,KAAK,MAAM,IAAI,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,WAAW,CAAC;AACxE,kBAAE,WAAW;kBACX,SAAS,CAAC;SACf;AACD,QAAA,yBAAyB,EAAE,kBAAkB;QAC7C,oBAAoB;AACpB,QAAA,kBAAkB,EAAE,eAAe;AACpC,KAAA,CAAC,CACA;QACE,IAAI,EAAE,YAAW;AACf,YAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,YAAY,CAAC;gBAC1B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,sBAAsB;AACvB,aAAA,CAAC,CAAC;YACH,OACE,MAAA,CAAA,MAAA,CAAA,EAAA,QAAQ,EACR,iBAAiB,EAAE,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,iBAAiB,EAC5C,gBAAgB,EAAE,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,gBAAgB,EACvC,GAAC,CAAA,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,IAAI,IAAG,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAC3D,CAAA;SACH;QACD,IAAI,EAAE,GAAG,CAAC,eAAe;KAC1B,EACD;QACE,YAAY;QACZ,qBAAqB;QACrB,WAAW;QACX,WAAW;AACX,QAAA,aAAa,EAAE,aAAa;AAC1B,cAAE,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,KAAK,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC;cAC/D,CAAC,EAAE,YAAY,EAAE,KAAK,YAAuB;AAClD,KAAA,CACF,CAAC;AACJ;;ACxEA;AAWA,MAAM,gBAAgB,GAGlB,OAAO;AACT,IAAA,SAAS,EAAE,CAAC,MAAM,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAU,CAAA;AAC3D,IAAA,WAAW,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AAClD,IAAA,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,MAAM,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AACjD,IAAA,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,MAAM,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACrD,IAAA,UAAU,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AAC/C,IAAA,YAAY,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACnD,SAAS,EAAE,MAAK;;KAEf;IAED,QAAQ,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;IAChC,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM;IAClC,UAAU,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW;IAC1C,QAAQ,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK;IAClC,SAAS,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS;IACvC,WAAW,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACzF,CAAA,CAAC,CAAC;MAEU,oBAAoB,CAAA;IAK/B,WACS,CAAA,KAAuC,EACtC,GAAyB,EACzB,yBAAqD,EACrD,aAA2D,EAC3D,WAAgE,EAChE,MAA0D,EAAA;QAL3D,IAAK,CAAA,KAAA,GAAL,KAAK,CAAkC;QACtC,IAAG,CAAA,GAAA,GAAH,GAAG,CAAsB;QACzB,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA4B;QACrD,IAAa,CAAA,aAAA,GAAb,aAAa,CAA8C;QAC3D,IAAW,CAAA,WAAA,GAAX,WAAW,CAAqD;QAChE,IAAM,CAAA,MAAA,GAAN,MAAM,CAAoD;KAChE;AAEG,IAAA,eAAe,CAAC,YAA0B,EAAA;AAC/C,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;KAClC;IAED,MAAM,MAAM,CAAC,OAGZ,EAAA;;AACC,QAAA,MAAM,UAAU,GAAG,gBAAgB,EAAmB,CAAC;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACzB,IAAI,CAAC,KAAK,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACL,IAAI,CAAC,KAAK,CACV,GAAC,MAAM,iBAAiB,CAAC;gBAC1B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,UAAU;gBACV,sBAAsB,EAAE,IAAI,CAAC,yBAAyB;gBACtD,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,EACH,CAAC;AACH,SAAA;AACD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAC3B,YAAA,MAAM,iBAAiB,CAAC;gBACtB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU;gBACV,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,gBAAA,WAAW,EAAE,WAAW;AACtB,sBAAE,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC;AAC7D,sBAAE,SAAS;AACb,gBAAA,MAAM,EAAE,MAAM;AACZ,sBAAE,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,KAAK,MAAM,CAAC,YAAuB,EAAE,KAAK,CAAC;AACrE,sBAAE,SAAS;gBACb,OAAO;AACP,gBAAA,QAAQ,EAAE,CAAC,YAAY,KAAI;AACzB,oBAAA,IAAI,CAAC,YAAa,CAAC,YAAY,GAAG,YAAY,CAAC;iBAChD;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;AAC9E,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;IACI,QAAQ,GAAA;QACb,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CAAC,CAAC;KACJ;AACF;;ACzGD;AACA;AAcA;;;AAGG;AACG,MAAO,kBAAmB,SAAQ,KAAK,CAAA;AAC3C,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;KAC3D;AACF,CAAA;AAED;;;AAGG;AACG,MAAO,oBAAqB,SAAQ,KAAK,CAAA;AAC7C,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;KAC7D;AACF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DG;AACH;MACsB,MAAM,CAAA;AAiB1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEG;AACH,IAAA,WAAA,CAAY,SAAyC,EAAA;QA/E7C,IAAO,CAAA,OAAA,GAAY,IAAI,CAAC;QAMxB,IAAqB,CAAA,qBAAA,GAAmC,EAAE,CAAC;AA0EjE,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CACxB,CACE,OAAkC,EAClC,MAA0E,KACxE;AACF,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,SAAC,CACF,CAAC;;;;AAIF,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAK;;AAExB,SAAC,CAAC,CAAC;KACJ;AAyBD;;;AAGG;AACK,IAAA,MAAM,YAAY,CAAC,WAAA,GAAiD,EAAE,EAAA;QAC5E,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACtB,SAAA;QACD,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAC1C,YAAA,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7B,YAAA,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AACpB,SAAA;KACF;AAED;;;;;;;AAOG;AACK,IAAA,MAAM,QAAQ,CAAC,OAAA,GAA6C,EAAE,EAAA;AACpE,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,IAAI;gBACF,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBAC3C,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,iBAAA,CAAC,CAAC;AACJ,aAAA;AAAC,YAAA,OAAO,CAAM,EAAE;gBACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAChC,aAAA;AACF,SAAA;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED;;;;;;;AAOG;AACK,IAAA,YAAY,CAAC,KAAa,EAAA;AAChC,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE;YACjD,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjB,SAAA;KACF;AAED;;AAEG;AACK,IAAA,MAAM,UAAU,CAAC,OAAA,GAA6C,EAAE,EAAA;AACtE,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACvD;AAED;;;;;;;AAOG;IACI,IAAI,CAAC,UAA6C,EAAE,EAAA;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,oBAAoB,GAAG,MAAW;AACtC,gBAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;AACnC,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1F,SAAA;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzC,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;AAClC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,YAAA,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,MAAO,CAAC,KAAK,CAAC,CAAC;AACpB,YAAA,MAAM,KAAK,CAAC;AACb,SAAA;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;;;;;;YAMxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAiB,CAAC,CAAC;AACtD,SAAA;KACF;AAED;;AAEG;AACI,IAAA,MAAM,aAAa,CACxB,WAAA,GAAiD,EAAE,EAAA;QAEnD,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnD,SAAA;;;QAGD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED;;;;;AAKG;AACI,IAAA,UAAU,CAAC,QAAiC,EAAA;AACjD,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1C,QAAA,OAAO,MAAW;AAChB,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;AACxF,SAAC,CAAC;KACH;AAED;;AAEG;IACI,MAAM,GAAA;AACX,QAAA,MAAM,KAAK,GAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAChE,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;KACvE;AAED;;AAEG;IACI,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,gCAAgC,CAAC,CAAC,CAAC;AACvE,aAAA;AACF,SAAA;KACF;AAED;;AAEG;IACI,SAAS,GAAA;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED;;;;;;;;AAQG;IACI,eAAe,CAAC,UAA6C,EAAE,EAAA;AACpE,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC/C,SAAA;aAAM,IAAI,OAAO,CAAC,WAAW,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC1D,SAAA;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;IACI,iBAAiB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC7B;AAED;;;;;AAKG;IACI,SAAS,GAAA;AACd,QAAA,MAAM,KAAK,GAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAChE,OAAO,KAAK,CAAC,MAAM,CAAC;KACrB;AAED;;;AAGG;IACI,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAClC;AACF;;ACjdD;AAYA;;AAEG;AACG,MAAO,SAA+D,SAAQ,MAGnF,CAAA;IAGC,WAAY,CAAA,GAAkC,EAAE,OAA2C,EAAA;QACzF,MAAM,EAAE,YAAY,GAAG,mBAAmB,EAAE,UAAU,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QACzE,MAAM,KAAK,GAAqC,UAAU;AACxD,cAAE,gBAAgB,CAAC,UAAU,CAAC;cAC3B,EAAuC,CAAC;AAE7C,QAAA,MAAM,SAAS,GAAG,IAAI,oBAAoB,CACxC,KAAK,EACL,GAAG,EACH,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,yBAAyB,EAClC,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,aAAa,EACtB,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,WAAW,EACpB,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,CAChB,CAAC;QACF,KAAK,CAAC,SAAS,CAAC,CAAC;QAEjB,IAAI,CAAC,MAAM,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7C,QAAA,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACxC;AAED;;AAEG;IACH,KAAK,GAAA;QACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,MAAM,OAAO,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;KACxF;AACF;;;;;;;;"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/http/models.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AbortSignalLike } from \"@azure/abort-controller\";\n\n// TODO: rename to ResourceLocationConfig\n/**\n * The potential location of the result of the LRO if specified by the LRO extension in the swagger.\n */\nexport type LroResourceLocationConfig = \"azure-async-operation\" | \"location\" | \"original-uri\";\n\n/**\n * The type of a LRO response body. This is just a convenience type for checking the status of the operation.\n */\n\nexport interface ResponseBody extends Record<string, unknown> {\n /** The status of the operation. */\n status?: string;\n /** The state of the provisioning process */\n provisioningState?: string;\n /** The properties of the provisioning process */\n properties?: { provisioningState?: string } & Record<string, unknown>;\n}\n\n/**\n * Simple type of the raw response.\n */\nexport interface RawResponse {\n /** The HTTP status code */\n statusCode: number;\n /** A HttpHeaders collection in the response represented as a simple JSON object where all header names have been normalized to be lower-case. */\n headers: {\n [headerName: string]: string;\n };\n /** The parsed response body */\n body?: unknown;\n}\n\n// TODO: rename to OperationResponse\n/**\n * The type of the response of a LRO.\n */\nexport interface LroResponse<T = unknown> {\n /** The flattened response */\n flatResponse: T;\n /** The raw response */\n rawResponse: RawResponse;\n}\n\n/**\n * Description of a long running operation.\n */\nexport interface LongRunningOperation<T = unknown> {\n /**\n * The request path. This should be set if the operation is a PUT and needs\n * to poll from the same request path.\n */\n requestPath?: string;\n /**\n * The HTTP request method. This should be set if the operation is a PUT or a\n * DELETE.\n */\n requestMethod?: string;\n /**\n * A function that can be used to send initial request to the service.\n */\n sendInitialRequest: () => Promise<LroResponse<unknown>>;\n /**\n * A function that can be used to poll for the current status of a long running operation.\n */\n sendPollRequest: (\n path: string,\n options?: { abortSignal?: AbortSignalLike }\n ) => Promise<LroResponse<T>>;\n}\n\nexport type HttpOperationMode = \"OperationLocation\" | \"ResourceLocation\" | \"Body\";\n\n/**\n * Options for `createPoller`.\n */\nexport interface CreateHttpPollerOptions<TResult, TState> {\n /**\n * Defines how much time the poller is going to wait before making a new request to the service.\n */\n intervalInMs?: number;\n /**\n * A serialized poller which can be used to resume an existing paused Long-Running-Operation.\n */\n restoreFrom?: string;\n /**\n * The potential location of the result of the LRO if specified by the LRO extension in the swagger.\n */\n resourceLocationConfig?: LroResourceLocationConfig;\n /**\n * A function to process the result of the LRO.\n */\n processResult?: (result: unknown, state: TState) => TResult;\n /**\n * A function to process the state of the LRO.\n */\n updateState?: (state: TState, response: LroResponse) => void;\n /**\n * A function to be called each time the operation location is updated by the\n * service.\n */\n withOperationLocation?: (operationLocation: string) => void;\n}\n"]}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT license.
|
|
3
|
+
import { initOperation, pollOperation } from "../poller/operation";
|
|
4
|
+
import { logger } from "../logger";
|
|
5
|
+
function getOperationLocationPollingUrl(inputs) {
|
|
6
|
+
const { azureAsyncOperation, operationLocation } = inputs;
|
|
7
|
+
return operationLocation !== null && operationLocation !== void 0 ? operationLocation : azureAsyncOperation;
|
|
8
|
+
}
|
|
9
|
+
function getLocationHeader(rawResponse) {
|
|
10
|
+
return rawResponse.headers["location"];
|
|
11
|
+
}
|
|
12
|
+
function getOperationLocationHeader(rawResponse) {
|
|
13
|
+
return rawResponse.headers["operation-location"];
|
|
14
|
+
}
|
|
15
|
+
function getAzureAsyncOperationHeader(rawResponse) {
|
|
16
|
+
return rawResponse.headers["azure-asyncoperation"];
|
|
17
|
+
}
|
|
18
|
+
function findResourceLocation(inputs) {
|
|
19
|
+
const { location, requestMethod, requestPath, resourceLocationConfig } = inputs;
|
|
20
|
+
switch (requestMethod) {
|
|
21
|
+
case "PUT": {
|
|
22
|
+
return requestPath;
|
|
23
|
+
}
|
|
24
|
+
case "DELETE": {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
default: {
|
|
28
|
+
switch (resourceLocationConfig) {
|
|
29
|
+
case "azure-async-operation": {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
case "original-uri": {
|
|
33
|
+
return requestPath;
|
|
34
|
+
}
|
|
35
|
+
case "location":
|
|
36
|
+
default: {
|
|
37
|
+
return location;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function inferLroMode(inputs) {
|
|
44
|
+
const { rawResponse, requestMethod, requestPath, resourceLocationConfig } = inputs;
|
|
45
|
+
const operationLocation = getOperationLocationHeader(rawResponse);
|
|
46
|
+
const azureAsyncOperation = getAzureAsyncOperationHeader(rawResponse);
|
|
47
|
+
const pollingUrl = getOperationLocationPollingUrl({ operationLocation, azureAsyncOperation });
|
|
48
|
+
const location = getLocationHeader(rawResponse);
|
|
49
|
+
const normalizedRequestMethod = requestMethod === null || requestMethod === void 0 ? void 0 : requestMethod.toLocaleUpperCase();
|
|
50
|
+
if (pollingUrl !== undefined) {
|
|
51
|
+
return {
|
|
52
|
+
mode: "OperationLocation",
|
|
53
|
+
operationLocation: pollingUrl,
|
|
54
|
+
resourceLocation: findResourceLocation({
|
|
55
|
+
requestMethod: normalizedRequestMethod,
|
|
56
|
+
location,
|
|
57
|
+
requestPath,
|
|
58
|
+
resourceLocationConfig,
|
|
59
|
+
}),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
else if (location !== undefined) {
|
|
63
|
+
return {
|
|
64
|
+
mode: "ResourceLocation",
|
|
65
|
+
operationLocation: location,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
else if (normalizedRequestMethod === "PUT" && requestPath) {
|
|
69
|
+
return {
|
|
70
|
+
mode: "Body",
|
|
71
|
+
operationLocation: requestPath,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function transformStatus(status) {
|
|
79
|
+
switch (status === null || status === void 0 ? void 0 : status.toLowerCase()) {
|
|
80
|
+
case undefined:
|
|
81
|
+
case "succeeded":
|
|
82
|
+
return "succeeded";
|
|
83
|
+
case "failed":
|
|
84
|
+
return "failed";
|
|
85
|
+
case "running":
|
|
86
|
+
case "accepted":
|
|
87
|
+
case "canceling":
|
|
88
|
+
case "cancelling":
|
|
89
|
+
return "running";
|
|
90
|
+
case "canceled":
|
|
91
|
+
case "cancelled":
|
|
92
|
+
return "canceled";
|
|
93
|
+
default: {
|
|
94
|
+
logger.warning(`LRO: unrecognized operation status: ${status}`);
|
|
95
|
+
return status;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function getStatus(rawResponse) {
|
|
100
|
+
var _a;
|
|
101
|
+
const { status } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
|
|
102
|
+
return transformStatus(status);
|
|
103
|
+
}
|
|
104
|
+
function getProvisioningState(rawResponse) {
|
|
105
|
+
var _a, _b;
|
|
106
|
+
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
|
|
107
|
+
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
|
|
108
|
+
return transformStatus(state);
|
|
109
|
+
}
|
|
110
|
+
function toOperationStatus(statusCode) {
|
|
111
|
+
if (statusCode === 202) {
|
|
112
|
+
return "running";
|
|
113
|
+
}
|
|
114
|
+
else if (statusCode < 300) {
|
|
115
|
+
return "succeeded";
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return "failed";
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export function parseRetryAfter({ rawResponse }) {
|
|
122
|
+
const retryAfter = rawResponse.headers["retry-after"];
|
|
123
|
+
if (retryAfter !== undefined) {
|
|
124
|
+
// Retry-After header value is either in HTTP date format, or in seconds
|
|
125
|
+
const retryAfterInSeconds = parseInt(retryAfter);
|
|
126
|
+
return isNaN(retryAfterInSeconds)
|
|
127
|
+
? calculatePollingIntervalFromDate(new Date(retryAfter))
|
|
128
|
+
: retryAfterInSeconds * 1000;
|
|
129
|
+
}
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
function calculatePollingIntervalFromDate(retryAfterDate) {
|
|
133
|
+
const timeNow = Math.floor(new Date().getTime());
|
|
134
|
+
const retryAfterTime = retryAfterDate.getTime();
|
|
135
|
+
if (timeNow < retryAfterTime) {
|
|
136
|
+
return retryAfterTime - timeNow;
|
|
137
|
+
}
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Initiates the long-running operation.
|
|
142
|
+
*/
|
|
143
|
+
export async function initHttpOperation(inputs) {
|
|
144
|
+
const { stateProxy, resourceLocationConfig, processResult, lro } = inputs;
|
|
145
|
+
return initOperation({
|
|
146
|
+
init: async () => {
|
|
147
|
+
const response = await lro.sendInitialRequest();
|
|
148
|
+
const config = inferLroMode({
|
|
149
|
+
rawResponse: response.rawResponse,
|
|
150
|
+
requestPath: lro.requestPath,
|
|
151
|
+
requestMethod: lro.requestMethod,
|
|
152
|
+
resourceLocationConfig,
|
|
153
|
+
});
|
|
154
|
+
return Object.assign({ response, operationLocation: config === null || config === void 0 ? void 0 : config.operationLocation, resourceLocation: config === null || config === void 0 ? void 0 : config.resourceLocation }, ((config === null || config === void 0 ? void 0 : config.mode) ? { metadata: { mode: config.mode } } : {}));
|
|
155
|
+
},
|
|
156
|
+
stateProxy,
|
|
157
|
+
processResult: processResult
|
|
158
|
+
? ({ flatResponse }, state) => processResult(flatResponse, state)
|
|
159
|
+
: ({ flatResponse }) => flatResponse,
|
|
160
|
+
getOperationStatus: (response, state) => {
|
|
161
|
+
var _a;
|
|
162
|
+
const mode = (_a = state.config.metadata) === null || _a === void 0 ? void 0 : _a["mode"];
|
|
163
|
+
return mode === undefined ||
|
|
164
|
+
(mode === "Body" && getOperationStatus(response, state) === "succeeded")
|
|
165
|
+
? "succeeded"
|
|
166
|
+
: "running";
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
export function getOperationLocation({ rawResponse }, state) {
|
|
171
|
+
var _a;
|
|
172
|
+
const mode = (_a = state.config.metadata) === null || _a === void 0 ? void 0 : _a["mode"];
|
|
173
|
+
switch (mode) {
|
|
174
|
+
case "OperationLocation": {
|
|
175
|
+
return getOperationLocationPollingUrl({
|
|
176
|
+
operationLocation: getOperationLocationHeader(rawResponse),
|
|
177
|
+
azureAsyncOperation: getAzureAsyncOperationHeader(rawResponse),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
case "ResourceLocation": {
|
|
181
|
+
return getLocationHeader(rawResponse);
|
|
182
|
+
}
|
|
183
|
+
case "Body":
|
|
184
|
+
default: {
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export function getOperationStatus({ rawResponse }, state) {
|
|
190
|
+
var _a;
|
|
191
|
+
const mode = (_a = state.config.metadata) === null || _a === void 0 ? void 0 : _a["mode"];
|
|
192
|
+
switch (mode) {
|
|
193
|
+
case "OperationLocation": {
|
|
194
|
+
return getStatus(rawResponse);
|
|
195
|
+
}
|
|
196
|
+
case "ResourceLocation": {
|
|
197
|
+
return toOperationStatus(rawResponse.statusCode);
|
|
198
|
+
}
|
|
199
|
+
case "Body": {
|
|
200
|
+
return getProvisioningState(rawResponse);
|
|
201
|
+
}
|
|
202
|
+
default:
|
|
203
|
+
throw new Error(`Unexpected operation mode: ${mode}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/** Polls the long-running operation. */
|
|
207
|
+
export async function pollHttpOperation(inputs) {
|
|
208
|
+
const { lro, stateProxy, options, processResult, updateState, setDelay, state } = inputs;
|
|
209
|
+
return pollOperation({
|
|
210
|
+
state,
|
|
211
|
+
stateProxy,
|
|
212
|
+
setDelay,
|
|
213
|
+
processResult: processResult
|
|
214
|
+
? ({ flatResponse }, inputState) => processResult(flatResponse, inputState)
|
|
215
|
+
: ({ flatResponse }) => flatResponse,
|
|
216
|
+
updateState,
|
|
217
|
+
getPollingInterval: parseRetryAfter,
|
|
218
|
+
getOperationLocation,
|
|
219
|
+
getOperationStatus,
|
|
220
|
+
options,
|
|
221
|
+
/**
|
|
222
|
+
* The expansion here is intentional because `lro` could be an object that
|
|
223
|
+
* references an inner this, so we need to preserve a reference to it.
|
|
224
|
+
*/
|
|
225
|
+
poll: async (location, inputOptions) => lro.sendPollRequest(location, inputOptions),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../../../src/http/operation.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n HttpOperationMode,\n LongRunningOperation,\n LroResourceLocationConfig,\n LroResponse,\n RawResponse,\n ResponseBody,\n} from \"./models\";\nimport {\n OperationConfig,\n OperationStatus,\n RestorableOperationState,\n StateProxy,\n} from \"../poller/models\";\nimport { initOperation, pollOperation } from \"../poller/operation\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { logger } from \"../logger\";\n\nfunction getOperationLocationPollingUrl(inputs: {\n operationLocation?: string;\n azureAsyncOperation?: string;\n}): string | undefined {\n const { azureAsyncOperation, operationLocation } = inputs;\n return operationLocation ?? azureAsyncOperation;\n}\n\nfunction getLocationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"location\"];\n}\n\nfunction getOperationLocationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"operation-location\"];\n}\n\nfunction getAzureAsyncOperationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"azure-asyncoperation\"];\n}\n\nfunction findResourceLocation(inputs: {\n requestMethod?: string;\n location?: string;\n requestPath?: string;\n resourceLocationConfig?: LroResourceLocationConfig;\n}): string | undefined {\n const { location, requestMethod, requestPath, resourceLocationConfig } = inputs;\n switch (requestMethod) {\n case \"PUT\": {\n return requestPath;\n }\n case \"DELETE\": {\n return undefined;\n }\n default: {\n switch (resourceLocationConfig) {\n case \"azure-async-operation\": {\n return undefined;\n }\n case \"original-uri\": {\n return requestPath;\n }\n case \"location\":\n default: {\n return location;\n }\n }\n }\n }\n}\n\nexport function inferLroMode(inputs: {\n rawResponse: RawResponse;\n requestPath?: string;\n requestMethod?: string;\n resourceLocationConfig?: LroResourceLocationConfig;\n}): (OperationConfig & { mode: HttpOperationMode }) | undefined {\n const { rawResponse, requestMethod, requestPath, resourceLocationConfig } = inputs;\n const operationLocation = getOperationLocationHeader(rawResponse);\n const azureAsyncOperation = getAzureAsyncOperationHeader(rawResponse);\n const pollingUrl = getOperationLocationPollingUrl({ operationLocation, azureAsyncOperation });\n const location = getLocationHeader(rawResponse);\n const normalizedRequestMethod = requestMethod?.toLocaleUpperCase();\n if (pollingUrl !== undefined) {\n return {\n mode: \"OperationLocation\",\n operationLocation: pollingUrl,\n resourceLocation: findResourceLocation({\n requestMethod: normalizedRequestMethod,\n location,\n requestPath,\n resourceLocationConfig,\n }),\n };\n } else if (location !== undefined) {\n return {\n mode: \"ResourceLocation\",\n operationLocation: location,\n };\n } else if (normalizedRequestMethod === \"PUT\" && requestPath) {\n return {\n mode: \"Body\",\n operationLocation: requestPath,\n };\n } else {\n return undefined;\n }\n}\n\nfunction transformStatus(status: string | undefined): OperationStatus {\n switch (status?.toLowerCase()) {\n case undefined:\n case \"succeeded\":\n return \"succeeded\";\n case \"failed\":\n return \"failed\";\n case \"running\":\n case \"accepted\":\n case \"canceling\":\n case \"cancelling\":\n return \"running\";\n case \"canceled\":\n case \"cancelled\":\n return \"canceled\";\n default: {\n logger.warning(`LRO: unrecognized operation status: ${status}`);\n return status as OperationStatus;\n }\n }\n}\n\nfunction getStatus(rawResponse: RawResponse): OperationStatus {\n const { status } = (rawResponse.body as ResponseBody) ?? {};\n return transformStatus(status);\n}\n\nfunction getProvisioningState(rawResponse: RawResponse): OperationStatus {\n const { properties, provisioningState } = (rawResponse.body as ResponseBody) ?? {};\n const state = properties?.provisioningState ?? provisioningState;\n return transformStatus(state);\n}\n\nfunction toOperationStatus(statusCode: number): OperationStatus {\n if (statusCode === 202) {\n return \"running\";\n } else if (statusCode < 300) {\n return \"succeeded\";\n } else {\n return \"failed\";\n }\n}\n\nexport function parseRetryAfter<T>({ rawResponse }: LroResponse<T>): number | undefined {\n const retryAfter: string | undefined = rawResponse.headers[\"retry-after\"];\n if (retryAfter !== undefined) {\n // Retry-After header value is either in HTTP date format, or in seconds\n const retryAfterInSeconds = parseInt(retryAfter);\n return isNaN(retryAfterInSeconds)\n ? calculatePollingIntervalFromDate(new Date(retryAfter))\n : retryAfterInSeconds * 1000;\n }\n return undefined;\n}\n\nfunction calculatePollingIntervalFromDate(retryAfterDate: Date): number | undefined {\n const timeNow = Math.floor(new Date().getTime());\n const retryAfterTime = retryAfterDate.getTime();\n if (timeNow < retryAfterTime) {\n return retryAfterTime - timeNow;\n }\n return undefined;\n}\n\n/**\n * Initiates the long-running operation.\n */\nexport async function initHttpOperation<TResult, TState>(inputs: {\n stateProxy: StateProxy<TState, TResult>;\n resourceLocationConfig?: LroResourceLocationConfig;\n processResult?: (result: unknown, state: TState) => TResult;\n lro: LongRunningOperation;\n}): Promise<RestorableOperationState<TState>> {\n const { stateProxy, resourceLocationConfig, processResult, lro } = inputs;\n return initOperation({\n init: async () => {\n const response = await lro.sendInitialRequest();\n const config = inferLroMode({\n rawResponse: response.rawResponse,\n requestPath: lro.requestPath,\n requestMethod: lro.requestMethod,\n resourceLocationConfig,\n });\n return {\n response,\n operationLocation: config?.operationLocation,\n resourceLocation: config?.resourceLocation,\n ...(config?.mode ? { metadata: { mode: config.mode } } : {}),\n };\n },\n stateProxy,\n processResult: processResult\n ? ({ flatResponse }, state) => processResult(flatResponse, state)\n : ({ flatResponse }) => flatResponse as TResult,\n getOperationStatus: (response, state) => {\n const mode = state.config.metadata?.[\"mode\"];\n return mode === undefined ||\n (mode === \"Body\" && getOperationStatus(response, state) === \"succeeded\")\n ? \"succeeded\"\n : \"running\";\n },\n });\n}\n\nexport function getOperationLocation<TState>(\n { rawResponse }: LroResponse,\n state: RestorableOperationState<TState>\n): string | undefined {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case \"OperationLocation\": {\n return getOperationLocationPollingUrl({\n operationLocation: getOperationLocationHeader(rawResponse),\n azureAsyncOperation: getAzureAsyncOperationHeader(rawResponse),\n });\n }\n case \"ResourceLocation\": {\n return getLocationHeader(rawResponse);\n }\n case \"Body\":\n default: {\n return undefined;\n }\n }\n}\n\nexport function getOperationStatus<TState>(\n { rawResponse }: LroResponse,\n state: RestorableOperationState<TState>\n): OperationStatus {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case \"OperationLocation\": {\n return getStatus(rawResponse);\n }\n case \"ResourceLocation\": {\n return toOperationStatus(rawResponse.statusCode);\n }\n case \"Body\": {\n return getProvisioningState(rawResponse);\n }\n default:\n throw new Error(`Unexpected operation mode: ${mode}`);\n }\n}\n\n/** Polls the long-running operation. */\nexport async function pollHttpOperation<TState, TResult>(inputs: {\n lro: LongRunningOperation;\n stateProxy: StateProxy<TState, TResult>;\n processResult?: (result: unknown, state: TState) => TResult;\n updateState?: (state: TState, lastResponse: LroResponse) => void;\n isDone?: (lastResponse: LroResponse, state: TState) => boolean;\n setDelay: (intervalInMs: number) => void;\n options?: { abortSignal?: AbortSignalLike };\n state: RestorableOperationState<TState>;\n}): Promise<void> {\n const { lro, stateProxy, options, processResult, updateState, setDelay, state } = inputs;\n return pollOperation({\n state,\n stateProxy,\n setDelay,\n processResult: processResult\n ? ({ flatResponse }, inputState) => processResult(flatResponse, inputState)\n : ({ flatResponse }) => flatResponse as TResult,\n updateState,\n getPollingInterval: parseRetryAfter,\n getOperationLocation,\n getOperationStatus,\n options,\n /**\n * The expansion here is intentional because `lro` could be an object that\n * references an inner this, so we need to preserve a reference to it.\n */\n poll: async (location, inputOptions) => lro.sendPollRequest(location, inputOptions),\n });\n}\n"]}
|