@azure/core-lro 3.0.0-beta.1 → 3.0.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/browser/http/models.d.ts +2 -2
- package/dist/browser/http/models.d.ts.map +1 -1
- package/dist/browser/http/models.js.map +1 -1
- package/dist/browser/http/operation.d.ts +11 -12
- package/dist/browser/http/operation.d.ts.map +1 -1
- package/dist/browser/http/operation.js +22 -16
- package/dist/browser/http/operation.js.map +1 -1
- package/dist/browser/http/poller.d.ts +2 -2
- package/dist/browser/http/poller.d.ts.map +1 -1
- package/dist/browser/http/poller.js +1 -15
- package/dist/browser/http/poller.js.map +1 -1
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/poller/models.d.ts +15 -39
- package/dist/browser/poller/models.d.ts.map +1 -1
- package/dist/browser/poller/models.js.map +1 -1
- package/dist/browser/poller/operation.d.ts +12 -14
- package/dist/browser/poller/operation.d.ts.map +1 -1
- package/dist/browser/poller/operation.js +25 -29
- package/dist/browser/poller/operation.js.map +1 -1
- package/dist/browser/poller/poller.d.ts +1 -1
- package/dist/browser/poller/poller.d.ts.map +1 -1
- package/dist/browser/poller/poller.js +9 -34
- package/dist/browser/poller/poller.js.map +1 -1
- package/dist/commonjs/http/models.d.ts +2 -2
- package/dist/commonjs/http/models.d.ts.map +1 -1
- package/dist/commonjs/http/models.js.map +1 -1
- package/dist/commonjs/http/operation.d.ts +11 -12
- package/dist/commonjs/http/operation.d.ts.map +1 -1
- package/dist/commonjs/http/operation.js +22 -16
- package/dist/commonjs/http/operation.js.map +1 -1
- package/dist/commonjs/http/poller.d.ts +2 -2
- package/dist/commonjs/http/poller.d.ts.map +1 -1
- package/dist/commonjs/http/poller.js +1 -15
- package/dist/commonjs/http/poller.js.map +1 -1
- package/dist/commonjs/index.d.ts +1 -1
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/poller/models.d.ts +15 -39
- package/dist/commonjs/poller/models.d.ts.map +1 -1
- package/dist/commonjs/poller/models.js.map +1 -1
- package/dist/commonjs/poller/operation.d.ts +12 -14
- package/dist/commonjs/poller/operation.d.ts.map +1 -1
- package/dist/commonjs/poller/operation.js +25 -29
- package/dist/commonjs/poller/operation.js.map +1 -1
- package/dist/commonjs/poller/poller.d.ts +1 -1
- package/dist/commonjs/poller/poller.d.ts.map +1 -1
- package/dist/commonjs/poller/poller.js +9 -34
- package/dist/commonjs/poller/poller.js.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +1 -1
- package/dist/core-lro.d.ts +28 -32
- package/dist/esm/http/models.d.ts +2 -2
- package/dist/esm/http/models.d.ts.map +1 -1
- package/dist/esm/http/models.js.map +1 -1
- package/dist/esm/http/operation.d.ts +11 -12
- package/dist/esm/http/operation.d.ts.map +1 -1
- package/dist/esm/http/operation.js +22 -16
- package/dist/esm/http/operation.js.map +1 -1
- package/dist/esm/http/poller.d.ts +2 -2
- package/dist/esm/http/poller.d.ts.map +1 -1
- package/dist/esm/http/poller.js +1 -15
- package/dist/esm/http/poller.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/poller/models.d.ts +15 -39
- package/dist/esm/poller/models.d.ts.map +1 -1
- package/dist/esm/poller/models.js.map +1 -1
- package/dist/esm/poller/operation.d.ts +12 -14
- package/dist/esm/poller/operation.d.ts.map +1 -1
- package/dist/esm/poller/operation.js +25 -29
- package/dist/esm/poller/operation.js.map +1 -1
- package/dist/esm/poller/poller.d.ts +1 -1
- package/dist/esm/poller/poller.d.ts.map +1 -1
- package/dist/esm/poller/poller.js +9 -34
- package/dist/esm/poller/poller.js.map +1 -1
- package/dist/react-native/http/models.d.ts +2 -2
- package/dist/react-native/http/models.d.ts.map +1 -1
- package/dist/react-native/http/models.js.map +1 -1
- package/dist/react-native/http/operation.d.ts +11 -12
- package/dist/react-native/http/operation.d.ts.map +1 -1
- package/dist/react-native/http/operation.js +22 -16
- package/dist/react-native/http/operation.js.map +1 -1
- package/dist/react-native/http/poller.d.ts +2 -2
- package/dist/react-native/http/poller.d.ts.map +1 -1
- package/dist/react-native/http/poller.js +1 -15
- package/dist/react-native/http/poller.js.map +1 -1
- package/dist/react-native/index.d.ts +1 -1
- package/dist/react-native/index.d.ts.map +1 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/react-native/poller/models.d.ts +15 -39
- package/dist/react-native/poller/models.d.ts.map +1 -1
- package/dist/react-native/poller/models.js.map +1 -1
- package/dist/react-native/poller/operation.d.ts +12 -14
- package/dist/react-native/poller/operation.d.ts.map +1 -1
- package/dist/react-native/poller/operation.js +25 -29
- package/dist/react-native/poller/operation.js.map +1 -1
- package/dist/react-native/poller/poller.d.ts +1 -1
- package/dist/react-native/poller/poller.d.ts.map +1 -1
- package/dist/react-native/poller/poller.js +9 -34
- package/dist/react-native/poller/poller.js.map +1 -1
- package/package.json +26 -20
- package/.rush/temp/operation/build/state.json +0 -3
- package/.rush/temp/operation/build_samples/all.log +0 -2
- package/.rush/temp/operation/build_samples/state.json +0 -3
- package/.rush/temp/shrinkwrap-deps.json +0 -510
- package/.tshy/browser.json +0 -12
- package/.tshy/build.json +0 -9
- package/.tshy/commonjs.json +0 -14
- package/.tshy/esm.json +0 -12
- package/.tshy/react-native.json +0 -12
- package/CHANGELOG.md +0 -179
- package/api-extractor.json +0 -31
- package/config/rush-project.json +0 -3
- package/core-lro.build.cache.error.log +0 -1
- package/core-lro.build_samples.cache.log +0 -1
- package/core-lro.build_samples.log +0 -2
- package/core-lro.pack.cache.log +0 -1
- package/core-lro.pack.log +0 -1
- package/docs/LROEngine.md +0 -158
- package/review/core-lro.api.md +0 -106
- package/samples/README.md +0 -284
- package/samples/typescript/samplesClient.ts +0 -254
- package/src/http/models.ts +0 -119
- package/src/http/operation.ts +0 -343
- package/src/http/poller.ts +0 -83
- package/src/index.ts +0 -21
- package/src/logger.ts +0 -10
- package/src/poller/constants.ts +0 -11
- package/src/poller/models.ts +0 -251
- package/src/poller/operation.ts +0 -315
- package/src/poller/poller.ts +0 -250
- package/temp/core-lro.api.json +0 -1892
- package/temp/core-lro.api.md +0 -106
- package/test/getYieldedValue.ts +0 -16
- package/test/lro.spec.ts +0 -3141
- package/test/matrix.ts +0 -46
- package/test/utils/coreRestPipelineLro.ts +0 -25
- package/test/utils/router.ts +0 -231
- package/test/utils/utils.ts +0 -144
- package/tsconfig.browser.config.json +0 -10
- package/tsconfig.json +0 -13
- package/tsdoc.json +0 -4
- package/tslint.json +0 -47
- package/vitest.browser.config.ts +0 -34
- package/vitest.config.ts +0 -31
package/src/poller/poller.ts
DELETED
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Microsoft Corporation.
|
|
2
|
-
// Licensed under the MIT license.
|
|
3
|
-
|
|
4
|
-
import { AbortSignalLike } from "@azure/abort-controller";
|
|
5
|
-
import {
|
|
6
|
-
BuildCreatePollerOptions,
|
|
7
|
-
CreatePollerOptions,
|
|
8
|
-
Operation,
|
|
9
|
-
OperationState,
|
|
10
|
-
RestorableOperationState,
|
|
11
|
-
PollerLike,
|
|
12
|
-
StateProxy,
|
|
13
|
-
} from "./models.js";
|
|
14
|
-
import { deserializeState, initOperation, pollOperation } from "./operation.js";
|
|
15
|
-
import { POLL_INTERVAL_IN_MS } from "./constants.js";
|
|
16
|
-
import { delay } from "@azure/core-util";
|
|
17
|
-
|
|
18
|
-
const createStateProxy: <TResult, TState extends OperationState<TResult>>() => StateProxy<
|
|
19
|
-
TState,
|
|
20
|
-
TResult
|
|
21
|
-
> = () => ({
|
|
22
|
-
/**
|
|
23
|
-
* The state at this point is created to be of type OperationState<TResult>.
|
|
24
|
-
* It will be updated later to be of type TState when the
|
|
25
|
-
* customer-provided callback, `updateState`, is called during polling.
|
|
26
|
-
*/
|
|
27
|
-
initState: (config) => ({ status: "running", config }) as any,
|
|
28
|
-
setCanceled: (state) => (state.status = "canceled"),
|
|
29
|
-
setError: (state, error) => (state.error = error),
|
|
30
|
-
setResult: (state, result) => (state.result = result),
|
|
31
|
-
setRunning: (state) => (state.status = "running"),
|
|
32
|
-
setSucceeded: (state) => (state.status = "succeeded"),
|
|
33
|
-
setFailed: (state) => (state.status = "failed"),
|
|
34
|
-
|
|
35
|
-
getError: (state) => state.error,
|
|
36
|
-
getResult: (state) => state.result,
|
|
37
|
-
isCanceled: (state) => state.status === "canceled",
|
|
38
|
-
isFailed: (state) => state.status === "failed",
|
|
39
|
-
isRunning: (state) => state.status === "running",
|
|
40
|
-
isSucceeded: (state) => state.status === "succeeded",
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Returns a poller factory.
|
|
45
|
-
*/
|
|
46
|
-
export function buildCreatePoller<TResponse, TResult, TState extends OperationState<TResult>>(
|
|
47
|
-
inputs: BuildCreatePollerOptions<TResponse, TState>,
|
|
48
|
-
): (
|
|
49
|
-
lro: Operation<TResponse, { abortSignal?: AbortSignalLike }>,
|
|
50
|
-
options?: CreatePollerOptions<TResponse, TResult, TState>,
|
|
51
|
-
) => PollerLike<TState, TResult> {
|
|
52
|
-
const {
|
|
53
|
-
getOperationLocation,
|
|
54
|
-
getStatusFromInitialResponse,
|
|
55
|
-
getStatusFromPollResponse,
|
|
56
|
-
isOperationError,
|
|
57
|
-
getResourceLocation,
|
|
58
|
-
getPollingInterval,
|
|
59
|
-
getError,
|
|
60
|
-
resolveOnUnsuccessful,
|
|
61
|
-
} = inputs;
|
|
62
|
-
return (
|
|
63
|
-
{ init, poll }: Operation<TResponse, { abortSignal?: AbortSignalLike }>,
|
|
64
|
-
options?: CreatePollerOptions<TResponse, TResult, TState>,
|
|
65
|
-
) => {
|
|
66
|
-
const {
|
|
67
|
-
processResult,
|
|
68
|
-
updateState,
|
|
69
|
-
withOperationLocation: withOperationLocationCallback,
|
|
70
|
-
intervalInMs = POLL_INTERVAL_IN_MS,
|
|
71
|
-
restoreFrom,
|
|
72
|
-
} = options || {};
|
|
73
|
-
const stateProxy = createStateProxy<TResult, TState>();
|
|
74
|
-
const withOperationLocation = withOperationLocationCallback
|
|
75
|
-
? (() => {
|
|
76
|
-
let called = false;
|
|
77
|
-
return (operationLocation: string, isUpdated: boolean) => {
|
|
78
|
-
if (isUpdated) withOperationLocationCallback(operationLocation);
|
|
79
|
-
else if (!called) withOperationLocationCallback(operationLocation);
|
|
80
|
-
called = true;
|
|
81
|
-
};
|
|
82
|
-
})()
|
|
83
|
-
: undefined;
|
|
84
|
-
let statePromise: Promise<TState>;
|
|
85
|
-
let state: RestorableOperationState<TState>;
|
|
86
|
-
if (restoreFrom) {
|
|
87
|
-
state = deserializeState(restoreFrom);
|
|
88
|
-
statePromise = Promise.resolve(state);
|
|
89
|
-
} else {
|
|
90
|
-
statePromise = initOperation({
|
|
91
|
-
init,
|
|
92
|
-
stateProxy,
|
|
93
|
-
processResult,
|
|
94
|
-
getOperationStatus: getStatusFromInitialResponse,
|
|
95
|
-
withOperationLocation,
|
|
96
|
-
setErrorAsResult: !resolveOnUnsuccessful,
|
|
97
|
-
}).then((s) => (state = s));
|
|
98
|
-
}
|
|
99
|
-
let resultPromise: Promise<TResult> | undefined;
|
|
100
|
-
const abortController = new AbortController();
|
|
101
|
-
// Progress handlers
|
|
102
|
-
type Handler = (state: TState) => void;
|
|
103
|
-
const handlers = new Map<symbol, Handler>();
|
|
104
|
-
const handleProgressEvents = async (): Promise<void> => handlers.forEach((h) => h(state));
|
|
105
|
-
const cancelErrMsg = "Operation was canceled";
|
|
106
|
-
let currentPollIntervalInMs = intervalInMs;
|
|
107
|
-
|
|
108
|
-
const poller: PollerLike<TState, TResult> = {
|
|
109
|
-
get operationState(): TState | undefined {
|
|
110
|
-
return state;
|
|
111
|
-
},
|
|
112
|
-
get result(): TResult | undefined {
|
|
113
|
-
return state?.result;
|
|
114
|
-
},
|
|
115
|
-
get isDone(): boolean {
|
|
116
|
-
return ["succeeded", "failed", "canceled"].includes(state?.status ?? "");
|
|
117
|
-
},
|
|
118
|
-
get isStopped(): boolean {
|
|
119
|
-
return resultPromise === undefined;
|
|
120
|
-
},
|
|
121
|
-
onProgress: (callback: (state: TState) => void) => {
|
|
122
|
-
const s = Symbol();
|
|
123
|
-
handlers.set(s, callback);
|
|
124
|
-
return () => handlers.delete(s);
|
|
125
|
-
},
|
|
126
|
-
serialize: async () => {
|
|
127
|
-
await statePromise;
|
|
128
|
-
return JSON.stringify({
|
|
129
|
-
state,
|
|
130
|
-
});
|
|
131
|
-
},
|
|
132
|
-
submitted: async () => {
|
|
133
|
-
await statePromise;
|
|
134
|
-
},
|
|
135
|
-
pollUntilDone: async (pollOptions?: { abortSignal?: AbortSignalLike }) => {
|
|
136
|
-
resultPromise ??= (async () => {
|
|
137
|
-
await statePromise;
|
|
138
|
-
if (!state) {
|
|
139
|
-
throw new Error("Poller should be initialized but it is not!");
|
|
140
|
-
}
|
|
141
|
-
const { abortSignal: inputAbortSignal } = pollOptions || {};
|
|
142
|
-
// In the future we can use AbortSignal.any() instead
|
|
143
|
-
function abortListener(): void {
|
|
144
|
-
abortController.abort();
|
|
145
|
-
}
|
|
146
|
-
const abortSignal = abortController.signal;
|
|
147
|
-
if (inputAbortSignal?.aborted) {
|
|
148
|
-
abortController.abort();
|
|
149
|
-
} else if (!abortSignal.aborted) {
|
|
150
|
-
inputAbortSignal?.addEventListener("abort", abortListener, { once: true });
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
try {
|
|
154
|
-
if (!poller.isDone) {
|
|
155
|
-
await poller.poll({ abortSignal });
|
|
156
|
-
while (!poller.isDone) {
|
|
157
|
-
await delay(currentPollIntervalInMs, { abortSignal });
|
|
158
|
-
await poller.poll({ abortSignal });
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
} finally {
|
|
162
|
-
inputAbortSignal?.removeEventListener("abort", abortListener);
|
|
163
|
-
}
|
|
164
|
-
if (resolveOnUnsuccessful) {
|
|
165
|
-
return poller.result as TResult;
|
|
166
|
-
} else {
|
|
167
|
-
switch (state.status) {
|
|
168
|
-
case "succeeded":
|
|
169
|
-
return poller.result as TResult;
|
|
170
|
-
case "canceled":
|
|
171
|
-
throw new Error(cancelErrMsg);
|
|
172
|
-
case "failed":
|
|
173
|
-
throw state.error;
|
|
174
|
-
case "notStarted":
|
|
175
|
-
case "running":
|
|
176
|
-
throw new Error(`Polling completed without succeeding or failing`);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
})().finally(() => {
|
|
180
|
-
resultPromise = undefined;
|
|
181
|
-
});
|
|
182
|
-
return resultPromise;
|
|
183
|
-
},
|
|
184
|
-
async poll(pollOptions?: { abortSignal?: AbortSignalLike }): Promise<TState> {
|
|
185
|
-
await statePromise;
|
|
186
|
-
if (!state) {
|
|
187
|
-
throw new Error("Poller should be initialized but it is not!");
|
|
188
|
-
}
|
|
189
|
-
if (resolveOnUnsuccessful) {
|
|
190
|
-
if (poller.isDone) return state;
|
|
191
|
-
} else {
|
|
192
|
-
switch (state.status) {
|
|
193
|
-
case "succeeded":
|
|
194
|
-
return state;
|
|
195
|
-
case "canceled":
|
|
196
|
-
throw new Error(cancelErrMsg);
|
|
197
|
-
case "failed":
|
|
198
|
-
throw state.error;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
await pollOperation({
|
|
202
|
-
poll,
|
|
203
|
-
state: state,
|
|
204
|
-
stateProxy,
|
|
205
|
-
getOperationLocation,
|
|
206
|
-
isOperationError,
|
|
207
|
-
withOperationLocation,
|
|
208
|
-
getPollingInterval,
|
|
209
|
-
getOperationStatus: getStatusFromPollResponse,
|
|
210
|
-
getResourceLocation,
|
|
211
|
-
processResult,
|
|
212
|
-
getError,
|
|
213
|
-
updateState,
|
|
214
|
-
options: pollOptions,
|
|
215
|
-
setDelay: (pollIntervalInMs) => {
|
|
216
|
-
currentPollIntervalInMs = pollIntervalInMs;
|
|
217
|
-
},
|
|
218
|
-
setErrorAsResult: !resolveOnUnsuccessful,
|
|
219
|
-
});
|
|
220
|
-
await handleProgressEvents();
|
|
221
|
-
if (!resolveOnUnsuccessful) {
|
|
222
|
-
switch (state.status) {
|
|
223
|
-
case "canceled":
|
|
224
|
-
throw new Error(cancelErrMsg);
|
|
225
|
-
case "failed":
|
|
226
|
-
throw state.error;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
return state;
|
|
231
|
-
},
|
|
232
|
-
then<TResult1 = TResult, TResult2 = never>(
|
|
233
|
-
onfulfilled?: ((value: TResult) => TResult1 | PromiseLike<TResult1>) | undefined | null,
|
|
234
|
-
onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,
|
|
235
|
-
): Promise<TResult1 | TResult2> {
|
|
236
|
-
return poller.pollUntilDone().then(onfulfilled, onrejected);
|
|
237
|
-
},
|
|
238
|
-
catch<TResult2 = never>(
|
|
239
|
-
onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,
|
|
240
|
-
): Promise<TResult | TResult2> {
|
|
241
|
-
return poller.pollUntilDone().catch(onrejected);
|
|
242
|
-
},
|
|
243
|
-
finally(onfinally?: (() => void) | undefined | null): Promise<TResult> {
|
|
244
|
-
return poller.pollUntilDone().finally(onfinally);
|
|
245
|
-
},
|
|
246
|
-
[Symbol.toStringTag]: "Poller",
|
|
247
|
-
};
|
|
248
|
-
return poller;
|
|
249
|
-
};
|
|
250
|
-
}
|