@metriport/shared 0.9.7 → 0.9.8-alpha.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/common/__tests__/retry.test.js +190 -19
- package/dist/common/__tests__/retry.test.js.map +1 -1
- package/dist/common/array.d.ts +1 -1
- package/dist/common/array.d.ts.map +1 -1
- package/dist/common/array.js +3 -0
- package/dist/common/array.js.map +1 -1
- package/dist/common/file-downloader.d.ts +14 -0
- package/dist/common/file-downloader.d.ts.map +1 -0
- package/dist/common/file-downloader.js +63 -0
- package/dist/common/file-downloader.js.map +1 -0
- package/dist/common/http.d.ts +42 -0
- package/dist/common/http.d.ts.map +1 -0
- package/dist/common/http.js +83 -0
- package/dist/common/http.js.map +1 -0
- package/dist/common/retry-with-backoff.d.ts +27 -0
- package/dist/common/retry-with-backoff.d.ts.map +1 -0
- package/dist/common/retry-with-backoff.js +47 -0
- package/dist/common/retry-with-backoff.js.map +1 -0
- package/dist/common/retry.d.ts +49 -26
- package/dist/common/retry.d.ts.map +1 -1
- package/dist/common/retry.js +85 -34
- package/dist/common/retry.js.map +1 -1
- package/dist/common/stream.d.ts +6 -0
- package/dist/common/stream.d.ts.map +1 -0
- package/dist/common/stream.js +18 -0
- package/dist/common/stream.js.map +1 -0
- package/dist/common/uuid.d.ts +2 -0
- package/dist/common/uuid.d.ts.map +1 -0
- package/dist/common/uuid.js +5 -0
- package/dist/common/uuid.js.map +1 -0
- package/dist/error/shared.d.ts +1 -1
- package/dist/error/shared.d.ts.map +1 -1
- package/dist/error/shared.js +7 -2
- package/dist/error/shared.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/net/__tests__/another.d.ts +1 -0
- package/dist/net/__tests__/another.d.ts.map +1 -0
- package/dist/net/__tests__/another.js +2 -0
- package/dist/net/__tests__/another.js.map +1 -0
- package/dist/net/__tests__/http.test.d.ts +2 -0
- package/dist/net/__tests__/http.test.d.ts.map +1 -0
- package/dist/net/__tests__/http.test.js +102 -0
- package/dist/net/__tests__/http.test.js.map +1 -0
- package/dist/net/__tests__/retry.test.d.ts +2 -0
- package/dist/net/__tests__/retry.test.d.ts.map +1 -0
- package/dist/net/__tests__/retry.test.js +158 -0
- package/dist/net/__tests__/retry.test.js.map +1 -0
- package/dist/net/error.d.ts +17 -0
- package/dist/net/error.d.ts.map +1 -0
- package/dist/net/error.js +50 -0
- package/dist/net/error.js.map +1 -0
- package/dist/net/net.d.ts +2 -0
- package/dist/net/net.d.ts.map +1 -0
- package/dist/net/net.js +16 -0
- package/dist/net/net.js.map +1 -0
- package/dist/net/retry-with-backoff.d.ts +42 -0
- package/dist/net/retry-with-backoff.d.ts.map +1 -0
- package/dist/net/retry-with-backoff.js +83 -0
- package/dist/net/retry-with-backoff.js.map +1 -0
- package/dist/net/retry.d.ts +28 -0
- package/dist/net/retry.d.ts.map +1 -0
- package/dist/net/retry.js +57 -0
- package/dist/net/retry.js.map +1 -0
- package/dist/net/stream.d.ts +6 -0
- package/dist/net/stream.d.ts.map +1 -0
- package/dist/net/stream.js +18 -0
- package/dist/net/stream.js.map +1 -0
- package/package.json +2 -2
|
@@ -2,30 +2,201 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const faker_1 = require("@faker-js/faker");
|
|
4
4
|
const retry_1 = require("../retry");
|
|
5
|
-
describe("
|
|
6
|
-
|
|
5
|
+
describe("retry", () => {
|
|
6
|
+
describe("executeWithRetries", () => {
|
|
7
7
|
const fn = jest.fn();
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
fn.mockImplementation(() => {
|
|
10
|
+
throw new Error("error");
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
afterEach(() => {
|
|
14
|
+
jest.resetAllMocks();
|
|
15
|
+
});
|
|
16
|
+
it("returns the first successful execution", async () => {
|
|
17
|
+
const expectedResult = faker_1.faker.lorem.word();
|
|
18
|
+
fn.mockImplementationOnce(() => expectedResult);
|
|
19
|
+
const resp = await (0, retry_1.executeWithRetries)(fn, {
|
|
20
|
+
initialDelay: 1,
|
|
21
|
+
maxAttempts: 2,
|
|
22
|
+
});
|
|
23
|
+
expect(resp).toEqual(expectedResult);
|
|
24
|
+
expect(fn).toHaveBeenCalledTimes(1);
|
|
25
|
+
});
|
|
26
|
+
it("keeps trying on error and returns the first successful execution", async () => {
|
|
27
|
+
const expectedResult = faker_1.faker.lorem.sentence();
|
|
28
|
+
fn.mockImplementationOnce(() => {
|
|
29
|
+
throw new Error("test error");
|
|
30
|
+
});
|
|
31
|
+
fn.mockImplementationOnce(() => expectedResult);
|
|
32
|
+
const resp = await (0, retry_1.executeWithRetries)(fn, {
|
|
33
|
+
initialDelay: 1,
|
|
34
|
+
maxAttempts: 3,
|
|
35
|
+
});
|
|
36
|
+
expect(resp).toBeTruthy();
|
|
37
|
+
expect(resp).toEqual(expectedResult);
|
|
38
|
+
expect(fn).toHaveBeenCalledTimes(2);
|
|
39
|
+
});
|
|
40
|
+
it("throws after maxxed out attempts", async () => {
|
|
41
|
+
await expect(async () => (0, retry_1.executeWithRetries)(fn, {
|
|
42
|
+
initialDelay: 1,
|
|
43
|
+
maxAttempts: 3,
|
|
44
|
+
})).rejects.toThrow();
|
|
45
|
+
expect(fn).toHaveBeenCalledTimes(3);
|
|
46
|
+
});
|
|
47
|
+
it("uses custom shouldRetry when provided", async () => {
|
|
48
|
+
const shouldRetry = (_r, _e, attempt) => {
|
|
49
|
+
return attempt !== 2;
|
|
50
|
+
};
|
|
51
|
+
await expect(async () => (0, retry_1.executeWithRetries)(fn, {
|
|
52
|
+
initialDelay: 1,
|
|
53
|
+
maxAttempts: 3,
|
|
54
|
+
shouldRetry,
|
|
55
|
+
})).rejects.toThrow();
|
|
56
|
+
expect(fn).toHaveBeenCalledTimes(2);
|
|
57
|
+
});
|
|
58
|
+
test("initial values to getTimeToWait", async () => {
|
|
59
|
+
const getTimeToWait = jest.fn(() => 1);
|
|
60
|
+
await expect(async () => (0, retry_1.executeWithRetries)(fn, {
|
|
61
|
+
maxAttempts: 2,
|
|
62
|
+
getTimeToWait,
|
|
63
|
+
})).rejects.toThrow();
|
|
64
|
+
expect(getTimeToWait).toHaveBeenCalledWith({
|
|
65
|
+
initialDelay: 10,
|
|
66
|
+
backoffMultiplier: 2,
|
|
67
|
+
attempt: 1,
|
|
68
|
+
maxDelay: Infinity,
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
test("uses provided initialDelay", async () => {
|
|
72
|
+
const initialDelay = faker_1.faker.number.int({ min: 10, max: 30 });
|
|
73
|
+
const getTimeToWait = jest.fn(() => 1);
|
|
74
|
+
await expect(async () => (0, retry_1.executeWithRetries)(fn, {
|
|
75
|
+
maxAttempts: 2,
|
|
76
|
+
initialDelay,
|
|
77
|
+
getTimeToWait,
|
|
78
|
+
})).rejects.toThrow();
|
|
79
|
+
expect(getTimeToWait).toHaveBeenCalledWith(expect.objectContaining({
|
|
80
|
+
initialDelay,
|
|
81
|
+
}));
|
|
82
|
+
});
|
|
83
|
+
test("uses provided maxDelay", async () => {
|
|
84
|
+
const maxDelay = faker_1.faker.number.int({ min: 10, max: 30 });
|
|
85
|
+
const getTimeToWait = jest.fn(() => 1);
|
|
86
|
+
await expect(async () => (0, retry_1.executeWithRetries)(fn, {
|
|
87
|
+
maxAttempts: 2,
|
|
88
|
+
initialDelay: 1,
|
|
89
|
+
maxDelay,
|
|
90
|
+
getTimeToWait,
|
|
91
|
+
})).rejects.toThrow();
|
|
92
|
+
expect(getTimeToWait).toHaveBeenCalledWith(expect.objectContaining({
|
|
93
|
+
maxDelay,
|
|
94
|
+
}));
|
|
95
|
+
});
|
|
10
96
|
});
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
97
|
+
describe("executeWithRetriesOnResult", () => {
|
|
98
|
+
const fn = jest.fn();
|
|
99
|
+
beforeEach(() => {
|
|
100
|
+
fn.mockImplementation(() => {
|
|
101
|
+
throw new Error("error");
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
afterEach(() => {
|
|
105
|
+
jest.resetAllMocks();
|
|
106
|
+
});
|
|
107
|
+
it("returns the first successful execution", async () => {
|
|
108
|
+
const expectedResult = faker_1.faker.lorem.word();
|
|
109
|
+
fn.mockImplementationOnce(() => expectedResult);
|
|
110
|
+
const resp = await (0, retry_1.executeWithRetries)(fn, {
|
|
111
|
+
initialDelay: 1,
|
|
112
|
+
maxAttempts: 2,
|
|
113
|
+
});
|
|
114
|
+
expect(resp).toEqual(expectedResult);
|
|
115
|
+
expect(fn).toHaveBeenCalledTimes(1);
|
|
116
|
+
});
|
|
117
|
+
it("keeps trying on retryable result and returns the first non-retryable result", async () => {
|
|
118
|
+
const retryableResult = faker_1.faker.lorem.word();
|
|
119
|
+
const expectedResult = faker_1.faker.lorem.sentence();
|
|
120
|
+
fn.mockImplementationOnce(() => retryableResult);
|
|
121
|
+
fn.mockImplementationOnce(() => expectedResult);
|
|
122
|
+
const resp = await (0, retry_1.executeWithRetries)(fn, {
|
|
123
|
+
initialDelay: 1,
|
|
124
|
+
maxAttempts: 3,
|
|
125
|
+
shouldRetry: result => result === retryableResult,
|
|
126
|
+
});
|
|
127
|
+
expect(resp).toEqual(expectedResult);
|
|
128
|
+
expect(fn).toHaveBeenCalledTimes(2);
|
|
129
|
+
});
|
|
130
|
+
it("returns the last retryable result after max attempts", async () => {
|
|
131
|
+
const retryableResult = faker_1.faker.lorem.word();
|
|
132
|
+
fn.mockImplementation(() => retryableResult);
|
|
133
|
+
const resp = await (0, retry_1.executeWithRetries)(fn, {
|
|
134
|
+
initialDelay: 1,
|
|
135
|
+
maxAttempts: 3,
|
|
136
|
+
shouldRetry: result => result === retryableResult,
|
|
137
|
+
});
|
|
138
|
+
expect(resp).toEqual(retryableResult);
|
|
139
|
+
expect(fn).toHaveBeenCalledTimes(3);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe("defaultGetTimeToWait", () => {
|
|
143
|
+
it("returns initialDelay when backoffMultiplier is lower than 1", async () => {
|
|
144
|
+
const initialDelay = faker_1.faker.number.int({ min: 10, max: 30 });
|
|
145
|
+
const resp = (0, retry_1.defaultGetTimeToWait)({
|
|
146
|
+
initialDelay,
|
|
147
|
+
backoffMultiplier: 0,
|
|
148
|
+
attempt: 5,
|
|
149
|
+
maxDelay: 5,
|
|
150
|
+
});
|
|
151
|
+
expect(resp).toEqual(initialDelay);
|
|
152
|
+
});
|
|
153
|
+
it("does not return lower than initialDelay", async () => {
|
|
154
|
+
const initialDelayArray = new Array(20)
|
|
155
|
+
.fill(1)
|
|
156
|
+
.map(() => faker_1.faker.number.int({ min: 10, max: 30 }));
|
|
157
|
+
for (const initialDelay of initialDelayArray) {
|
|
158
|
+
const resp = (0, retry_1.defaultGetTimeToWait)({
|
|
159
|
+
initialDelay,
|
|
160
|
+
backoffMultiplier: 2,
|
|
161
|
+
attempt: 1,
|
|
162
|
+
maxDelay: 100,
|
|
163
|
+
});
|
|
164
|
+
expect(resp).toBeGreaterThanOrEqual(initialDelay);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
it("does not return higher than 2x initialDelay", async () => {
|
|
168
|
+
const initialDelayArray = new Array(20)
|
|
169
|
+
.fill(1)
|
|
170
|
+
.map(() => faker_1.faker.number.int({ min: 10, max: 30 }));
|
|
171
|
+
for (const initialDelay of initialDelayArray) {
|
|
172
|
+
const resp = (0, retry_1.defaultGetTimeToWait)({
|
|
173
|
+
initialDelay,
|
|
174
|
+
backoffMultiplier: 2,
|
|
175
|
+
attempt: 1,
|
|
176
|
+
maxDelay: 100,
|
|
177
|
+
});
|
|
178
|
+
expect(resp).toBeLessThanOrEqual(initialDelay * 2);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
21
181
|
});
|
|
22
|
-
|
|
182
|
+
describe("executeWithRetriesSafe", () => {
|
|
23
183
|
const fn = jest.fn();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
184
|
+
beforeEach(() => {
|
|
185
|
+
fn.mockImplementation(() => {
|
|
186
|
+
throw new Error("error");
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
afterEach(() => {
|
|
190
|
+
jest.resetAllMocks();
|
|
191
|
+
});
|
|
192
|
+
it("returns undefined when it fails", async () => {
|
|
193
|
+
const resp = await (0, retry_1.executeWithRetriesSafe)(fn, {
|
|
194
|
+
initialDelay: 1,
|
|
195
|
+
maxAttempts: 2,
|
|
196
|
+
});
|
|
197
|
+
expect(fn).toHaveBeenCalledTimes(2);
|
|
198
|
+
expect(resp).toBeUndefined();
|
|
27
199
|
});
|
|
28
|
-
await expect((0, retry_1.executeWithRetriesOrFail)(fn, undefined, 1)).rejects.toThrow(errorMsg);
|
|
29
200
|
});
|
|
30
201
|
});
|
|
31
202
|
//# sourceMappingURL=retry.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.test.js","sourceRoot":"","sources":["../../../src/common/__tests__/retry.test.ts"],"names":[],"mappings":";;AAAA,2CAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"retry.test.js","sourceRoot":"","sources":["../../../src/common/__tests__/retry.test.ts"],"names":[],"mappings":"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"}
|
package/dist/common/array.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function toArray<T>(input: T | T[]): T[];
|
|
1
|
+
export declare function toArray<T>(input: T | T[] | "" | undefined): T[];
|
|
2
2
|
//# sourceMappingURL=array.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/common/array.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/common/array.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,CAAC,EAAE,CAK/D"}
|
package/dist/common/array.js
CHANGED
package/dist/common/array.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/common/array.ts"],"names":[],"mappings":";;;AAAA,SAAgB,OAAO,CAAI,
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/common/array.ts"],"names":[],"mappings":";;;AAAA,SAAgB,OAAO,CAAI,KAA+B;IACxD,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;QACtC,OAAO,EAAE,CAAC;KACX;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AALD,0BAKC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import * as stream from "stream";
|
|
4
|
+
export type DownloadFileParams = {
|
|
5
|
+
url: string;
|
|
6
|
+
outputStream: stream.Writable;
|
|
7
|
+
headers?: {
|
|
8
|
+
[index: string]: string;
|
|
9
|
+
};
|
|
10
|
+
timeout?: number;
|
|
11
|
+
};
|
|
12
|
+
export declare function downloadFileToMemory(params: Omit<DownloadFileParams, "outputStream">): Promise<Buffer>;
|
|
13
|
+
export declare function downloadFileToStream({ url, outputStream, headers, timeout, }: DownloadFileParams): Promise<boolean>;
|
|
14
|
+
//# sourceMappingURL=file-downloader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-downloader.d.ts","sourceRoot":"","sources":["../../src/common/file-downloader.ts"],"names":[],"mappings":";;AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAKjC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC9B,OAAO,CAAC,EAAE;QACR,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,GAC/C,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,oBAAoB,CAAC,EACzC,GAAG,EACH,YAAY,EACZ,OAAO,EACP,OAAO,GACR,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAYvC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.downloadFileToStream = exports.downloadFileToMemory = void 0;
|
|
30
|
+
const axios_1 = __importDefault(require("axios"));
|
|
31
|
+
const stream = __importStar(require("stream"));
|
|
32
|
+
const util = __importStar(require("util"));
|
|
33
|
+
const pipeline = util.promisify(stream.pipeline);
|
|
34
|
+
async function downloadFileToMemory(params) {
|
|
35
|
+
const buffers = Array();
|
|
36
|
+
const writableStream = new stream.Writable();
|
|
37
|
+
const buffer = streamToBuffer(writableStream);
|
|
38
|
+
writableStream.on("data", (chunk) => buffers.push(Buffer.from(chunk)));
|
|
39
|
+
writableStream.on("error", (err) => {
|
|
40
|
+
throw err;
|
|
41
|
+
});
|
|
42
|
+
writableStream.on("end", () => {
|
|
43
|
+
return Buffer.concat(buffers);
|
|
44
|
+
});
|
|
45
|
+
await downloadFileToStream({ ...params, outputStream: writableStream });
|
|
46
|
+
return Buffer.concat(buffers);
|
|
47
|
+
}
|
|
48
|
+
exports.downloadFileToMemory = downloadFileToMemory;
|
|
49
|
+
async function downloadFileToStream({ url, outputStream, headers, timeout, }) {
|
|
50
|
+
const requestConfig = {
|
|
51
|
+
responseType: "stream",
|
|
52
|
+
...(timeout ? { timeout } : undefined),
|
|
53
|
+
transitional: {
|
|
54
|
+
clarifyTimeoutError: true,
|
|
55
|
+
},
|
|
56
|
+
...(headers && { headers }),
|
|
57
|
+
};
|
|
58
|
+
const response = await axios_1.default.get(url, requestConfig);
|
|
59
|
+
await pipeline(response.data, outputStream);
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
exports.downloadFileToStream = downloadFileToStream;
|
|
63
|
+
//# sourceMappingURL=file-downloader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-downloader.js","sourceRoot":"","sources":["../../src/common/file-downloader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAkD;AAClD,+CAAiC;AACjC,2CAA6B;AAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAW1C,KAAK,UAAU,oBAAoB,CACxC,MAAgD;IAEhD,MAAM,OAAO,GAAG,KAAK,EAAO,CAAC;IAC7B,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACjC,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;QAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,MAAM,oBAAoB,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAfD,oDAeC;AAEM,KAAK,UAAU,oBAAoB,CAAC,EACzC,GAAG,EACH,YAAY,EACZ,OAAO,EACP,OAAO,GACY;IACnB,MAAM,aAAa,GAAuB;QACxC,YAAY,EAAE,QAAQ;QACtB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACtC,YAAY,EAAE;YACZ,mBAAmB,EAAE,IAAI;SAC1B;QACD,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;KAC5B,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACrD,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAjBD,oDAiBC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type ExecuteWithRetriesOptions = {
|
|
2
|
+
/** The intitial delay in milliseconds. Defaults to 100ms. */
|
|
3
|
+
initialDelay: number;
|
|
4
|
+
/** The maximum delay in milliseconds, optional. Defaults to Infinity. */
|
|
5
|
+
maxDelay: number;
|
|
6
|
+
/**
|
|
7
|
+
* Determines how the backoff is determined.
|
|
8
|
+
* It's unlikely that you would change that.
|
|
9
|
+
* Defaults to 2 (each retry waits double of what the previous one did).
|
|
10
|
+
*/
|
|
11
|
+
backoffMultiplier: number;
|
|
12
|
+
/** The maximum number of retries. Defaults to 10. */
|
|
13
|
+
maxAttempts: number;
|
|
14
|
+
shouldRetry: (error: unknown, attempt: number) => boolean | Promise<boolean>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* TODO WIP
|
|
18
|
+
* TODO WIP
|
|
19
|
+
* TODO WIP
|
|
20
|
+
* TODO WIP
|
|
21
|
+
*
|
|
22
|
+
* @param fn
|
|
23
|
+
* @param options
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
export declare function executeWithRetries<T>(fn: () => Promise<T>, options?: Partial<ExecuteWithRetriesOptions>): Promise<T>;
|
|
27
|
+
export type ExecuteWithHttpRetriesOptions = ExecuteWithRetriesOptions & {
|
|
28
|
+
/** The HTTP status codes to retry. See `defaultOptions` for defaults. */
|
|
29
|
+
httpStatusToRetry: number[];
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* TODO WIP
|
|
33
|
+
* TODO WIP
|
|
34
|
+
* TODO WIP
|
|
35
|
+
* TODO WIP
|
|
36
|
+
*
|
|
37
|
+
* @param fn
|
|
38
|
+
* @param options
|
|
39
|
+
* @returns
|
|
40
|
+
*/
|
|
41
|
+
export declare function executeWithHttpRetries<T>(fn: () => Promise<T>, options?: Partial<ExecuteWithHttpRetriesOptions>): Promise<T>;
|
|
42
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/common/http.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,yBAAyB,GAAG;IACtC,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9E,CAAC;AAUF;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,OAAO,CAAC,yBAAyB,CAAkB,GAC3D,OAAO,CAAC,CAAC,CAAC,CA2BZ;AAED,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,GAAG;IACtE,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAYF;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,OAAO,CAAC,6BAA6B,CAAkB,GAC/D,OAAO,CAAC,CAAC,CAAC,CAWZ"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.executeWithHttpRetries = exports.executeWithRetries = void 0;
|
|
7
|
+
const shared_1 = require("@metriport/shared");
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
|
+
const http_status_1 = __importDefault(require("http-status"));
|
|
10
|
+
const lodash_1 = require("lodash");
|
|
11
|
+
const defaultOptions = {
|
|
12
|
+
initialDelay: 100,
|
|
13
|
+
maxDelay: Infinity,
|
|
14
|
+
backoffMultiplier: 2,
|
|
15
|
+
maxAttempts: 10,
|
|
16
|
+
shouldRetry: (_error, _attempt) => true,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* TODO WIP
|
|
20
|
+
* TODO WIP
|
|
21
|
+
* TODO WIP
|
|
22
|
+
* TODO WIP
|
|
23
|
+
*
|
|
24
|
+
* @param fn
|
|
25
|
+
* @param options
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
async function executeWithRetries(fn, options = defaultOptions) {
|
|
29
|
+
const actualOptions = { ...defaultOptions, ...options };
|
|
30
|
+
const { initialDelay, maxDelay, backoffMultiplier, maxAttempts: _maxAttempts, shouldRetry, } = actualOptions;
|
|
31
|
+
const maxAttempts = Math.max(_maxAttempts, 1);
|
|
32
|
+
let attempt = 0;
|
|
33
|
+
while (++attempt <= maxAttempts + 1) {
|
|
34
|
+
try {
|
|
35
|
+
return await fn();
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (attempt >= maxAttempts) {
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
if (!(await shouldRetry(error, attempt))) {
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
const temp = Math.min(initialDelay * backoffMultiplier * attempt, maxDelay);
|
|
45
|
+
const timeToWait = temp / 2 + (0, lodash_1.random)(0, temp / 2);
|
|
46
|
+
await (0, shared_1.sleep)(timeToWait);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw new shared_1.MetriportError("Unreachable code", undefined, { attempt, maxRetries: maxAttempts });
|
|
50
|
+
}
|
|
51
|
+
exports.executeWithRetries = executeWithRetries;
|
|
52
|
+
const defaultHttpRetryOptions = {
|
|
53
|
+
...defaultOptions,
|
|
54
|
+
httpStatusToRetry: [
|
|
55
|
+
http_status_1.default.INTERNAL_SERVER_ERROR,
|
|
56
|
+
http_status_1.default.BAD_GATEWAY,
|
|
57
|
+
http_status_1.default.SERVICE_UNAVAILABLE,
|
|
58
|
+
http_status_1.default.GATEWAY_TIMEOUT,
|
|
59
|
+
],
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* TODO WIP
|
|
63
|
+
* TODO WIP
|
|
64
|
+
* TODO WIP
|
|
65
|
+
* TODO WIP
|
|
66
|
+
*
|
|
67
|
+
* @param fn
|
|
68
|
+
* @param options
|
|
69
|
+
* @returns
|
|
70
|
+
*/
|
|
71
|
+
async function executeWithHttpRetries(fn, options = defaultOptions) {
|
|
72
|
+
const actualOptions = { ...defaultHttpRetryOptions, ...options };
|
|
73
|
+
const { httpStatusToRetry } = actualOptions;
|
|
74
|
+
return executeWithRetries(fn, {
|
|
75
|
+
...actualOptions,
|
|
76
|
+
shouldRetry: (error, _attempt) => {
|
|
77
|
+
const responseStatus = axios_1.default.isAxiosError(error) && error.response?.status ? error.response.status : 500;
|
|
78
|
+
return httpStatusToRetry.includes(responseStatus);
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
exports.executeWithHttpRetries = executeWithHttpRetries;
|
|
83
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/common/http.ts"],"names":[],"mappings":";;;;;;AAAA,8CAA0D;AAC1D,kDAA0B;AAC1B,8DAAqC;AACrC,mCAAgC;AAkBhC,MAAM,cAAc,GAA8B;IAChD,YAAY,EAAE,GAAG;IACjB,QAAQ,EAAE,QAAQ;IAClB,iBAAiB,EAAE,CAAC;IACpB,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI;CACxC,CAAC;AAEF;;;;;;;;;GASG;AACI,KAAK,UAAU,kBAAkB,CACtC,EAAoB,EACpB,UAA8C,cAAc;IAE5D,MAAM,aAAa,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;IACxD,MAAM,EACJ,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,WAAW,EAAE,YAAY,EACzB,WAAW,GACZ,GAAG,aAAa,CAAC;IAClB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,IAAI,WAAW,GAAG,CAAC,EAAE;QACnC,IAAI;YACF,OAAO,MAAM,EAAE,EAAE,CAAC;SACnB;QAAC,OAAO,KAAU,EAAE;YACnB,IAAI,OAAO,IAAI,WAAW,EAAE;gBAC1B,MAAM,KAAK,CAAC;aACb;YACD,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE;gBACxC,MAAM,KAAK,CAAC;aACb;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,iBAAiB,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,IAAA,eAAM,EAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YAClD,MAAM,IAAA,cAAK,EAAC,UAAU,CAAC,CAAC;SACzB;KACF;IACD,MAAM,IAAI,uBAAc,CAAC,kBAAkB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;AAChG,CAAC;AA9BD,gDA8BC;AAOD,MAAM,uBAAuB,GAAkC;IAC7D,GAAG,cAAc;IACjB,iBAAiB,EAAE;QACjB,qBAAU,CAAC,qBAAqB;QAChC,qBAAU,CAAC,WAAW;QACtB,qBAAU,CAAC,mBAAmB;QAC9B,qBAAU,CAAC,eAAe;KAC3B;CACF,CAAC;AAEF;;;;;;;;;GASG;AACI,KAAK,UAAU,sBAAsB,CAC1C,EAAoB,EACpB,UAAkD,cAAc;IAEhE,MAAM,aAAa,GAAG,EAAE,GAAG,uBAAuB,EAAE,GAAG,OAAO,EAAE,CAAC;IACjE,MAAM,EAAE,iBAAiB,EAAE,GAAG,aAAa,CAAC;IAC5C,OAAO,kBAAkB,CAAC,EAAE,EAAE;QAC5B,GAAG,aAAa;QAChB,WAAW,EAAE,CAAC,KAAc,EAAE,QAAgB,EAAE,EAAE;YAChD,MAAM,cAAc,GAClB,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;YACpF,OAAO,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAdD,wDAcC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type ExecuteWithRetriesOptions = {
|
|
2
|
+
/** The intitial delay in milliseconds. Defaults to 100ms. */
|
|
3
|
+
initialDelay: number;
|
|
4
|
+
/** The maximum delay in milliseconds, optional. Defaults to Infinity. */
|
|
5
|
+
maxDelay: number;
|
|
6
|
+
/**
|
|
7
|
+
* Determines how the backoff is determined.
|
|
8
|
+
* It's unlikely that you would change that.
|
|
9
|
+
* Defaults to 2 (each retry waits double of what the previous one did).
|
|
10
|
+
*/
|
|
11
|
+
backoffMultiplier: number;
|
|
12
|
+
/** The maximum number of retries. Defaults to 10. */
|
|
13
|
+
maxAttempts: number;
|
|
14
|
+
shouldRetry: (error: unknown, attempt: number) => boolean | Promise<boolean>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* TODO WIP
|
|
18
|
+
* TODO WIP
|
|
19
|
+
* TODO WIP
|
|
20
|
+
* TODO WIP
|
|
21
|
+
*
|
|
22
|
+
* @param fn
|
|
23
|
+
* @param options
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
export declare function executeWithRetries<T>(fn: () => Promise<T>, options?: Partial<ExecuteWithRetriesOptions>): Promise<T>;
|
|
27
|
+
//# sourceMappingURL=retry-with-backoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-with-backoff.d.ts","sourceRoot":"","sources":["../../src/common/retry-with-backoff.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,yBAAyB,GAAG;IACtC,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9E,CAAC;AAUF;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,OAAO,CAAC,yBAAyB,CAAkB,GAC3D,OAAO,CAAC,CAAC,CAAC,CA2BZ"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeWithRetries = void 0;
|
|
4
|
+
const shared_1 = require("@metriport/shared");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
6
|
+
const defaultOptions = {
|
|
7
|
+
initialDelay: 100,
|
|
8
|
+
maxDelay: Infinity,
|
|
9
|
+
backoffMultiplier: 2,
|
|
10
|
+
maxAttempts: 10,
|
|
11
|
+
shouldRetry: (_error, _attempt) => true,
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* TODO WIP
|
|
15
|
+
* TODO WIP
|
|
16
|
+
* TODO WIP
|
|
17
|
+
* TODO WIP
|
|
18
|
+
*
|
|
19
|
+
* @param fn
|
|
20
|
+
* @param options
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
async function executeWithRetries(fn, options = defaultOptions) {
|
|
24
|
+
const actualOptions = { ...defaultOptions, ...options };
|
|
25
|
+
const { initialDelay, maxDelay, backoffMultiplier, maxAttempts: _maxAttempts, shouldRetry, } = actualOptions;
|
|
26
|
+
const maxAttempts = Math.max(_maxAttempts, 1);
|
|
27
|
+
let attempt = 0;
|
|
28
|
+
while (++attempt <= maxAttempts + 1) {
|
|
29
|
+
try {
|
|
30
|
+
return await fn();
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (attempt >= maxAttempts) {
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
if (!(await shouldRetry(error, attempt))) {
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
const temp = Math.min(initialDelay * backoffMultiplier * attempt, maxDelay);
|
|
40
|
+
const timeToWait = temp / 2 + (0, lodash_1.random)(0, temp / 2);
|
|
41
|
+
await (0, shared_1.sleep)(timeToWait);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
throw new shared_1.MetriportError("Unreachable code", undefined, { attempt, maxRetries: maxAttempts });
|
|
45
|
+
}
|
|
46
|
+
exports.executeWithRetries = executeWithRetries;
|
|
47
|
+
//# sourceMappingURL=retry-with-backoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-with-backoff.js","sourceRoot":"","sources":["../../src/common/retry-with-backoff.ts"],"names":[],"mappings":";;;AAAA,8CAA0D;AAC1D,mCAAgC;AAkBhC,MAAM,cAAc,GAA8B;IAChD,YAAY,EAAE,GAAG;IACjB,QAAQ,EAAE,QAAQ;IAClB,iBAAiB,EAAE,CAAC;IACpB,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI;CACxC,CAAC;AAEF;;;;;;;;;GASG;AACI,KAAK,UAAU,kBAAkB,CACtC,EAAoB,EACpB,UAA8C,cAAc;IAE5D,MAAM,aAAa,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;IACxD,MAAM,EACJ,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,WAAW,EAAE,YAAY,EACzB,WAAW,GACZ,GAAG,aAAa,CAAC;IAClB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,EAAE,OAAO,IAAI,WAAW,GAAG,CAAC,EAAE;QACnC,IAAI;YACF,OAAO,MAAM,EAAE,EAAE,CAAC;SACnB;QAAC,OAAO,KAAU,EAAE;YACnB,IAAI,OAAO,IAAI,WAAW,EAAE;gBAC1B,MAAM,KAAK,CAAC;aACb;YACD,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE;gBACxC,MAAM,KAAK,CAAC;aACb;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,iBAAiB,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,IAAA,eAAM,EAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YAClD,MAAM,IAAA,cAAK,EAAC,UAAU,CAAC,CAAC;SACzB;KACF;IACD,MAAM,IAAI,uBAAc,CAAC,kBAAkB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;AAChG,CAAC;AA9BD,gDA8BC"}
|