@alchemy.run/node-utils 0.0.4 → 2.0.0-beta.72
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/LICENSE +201 -0
- package/NOTICE +5 -0
- package/THIRD_PARTY_LICENSES.md +138 -0
- package/lib/ignore.d.ts +52 -2
- package/lib/ignore.d.ts.map +1 -1
- package/lib/ignore.js +50 -61
- package/lib/ignore.js.map +1 -1
- package/package.json +33 -31
- package/src/ignore.ts +157 -105
- package/lib/adapter.d.ts +0 -14
- package/lib/adapter.d.ts.map +0 -1
- package/lib/adapter.js +0 -65
- package/lib/adapter.js.map +0 -1
- package/lib/exit-hook.d.ts +0 -22
- package/lib/exit-hook.d.ts.map +0 -1
- package/lib/exit-hook.js +0 -86
- package/lib/exit-hook.js.map +0 -1
- package/lib/foreground-child.d.ts +0 -57
- package/lib/foreground-child.d.ts.map +0 -1
- package/lib/foreground-child.js +0 -201
- package/lib/foreground-child.js.map +0 -1
- package/lib/index.d.ts +0 -6
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -6
- package/lib/index.js.map +0 -1
- package/lib/lockfile-async.d.ts +0 -9
- package/lib/lockfile-async.d.ts.map +0 -1
- package/lib/lockfile-async.js +0 -23
- package/lib/lockfile-async.js.map +0 -1
- package/lib/lockfile.d.ts +0 -53
- package/lib/lockfile.d.ts.map +0 -1
- package/lib/lockfile.js +0 -287
- package/lib/lockfile.js.map +0 -1
- package/lib/mtime-precision.d.ts +0 -11
- package/lib/mtime-precision.d.ts.map +0 -1
- package/lib/mtime-precision.js +0 -40
- package/lib/mtime-precision.js.map +0 -1
- package/lib/retry.d.ts +0 -56
- package/lib/retry.d.ts.map +0 -1
- package/lib/retry.js +0 -203
- package/lib/retry.js.map +0 -1
- package/src/adapter.ts +0 -94
- package/src/exit-hook.ts +0 -96
- package/src/foreground-child.ts +0 -243
- package/src/index.ts +0 -5
- package/src/lockfile-async.ts +0 -44
- package/src/lockfile.ts +0 -502
- package/src/mtime-precision.ts +0 -83
- package/src/retry.ts +0 -309
package/lib/lockfile.js
DELETED
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { exitHook } from "./exit-hook.js";
|
|
4
|
-
import * as mtimePrecision from "./mtime-precision.js";
|
|
5
|
-
import * as retry from "./retry.js";
|
|
6
|
-
const locks = {};
|
|
7
|
-
function getLockFile(file, options) {
|
|
8
|
-
return options.lockfilePath || `${file}.lock`;
|
|
9
|
-
}
|
|
10
|
-
function resolveCanonicalPath(file, options, callback) {
|
|
11
|
-
if (!options.realpath) {
|
|
12
|
-
return callback(null, path.resolve(file));
|
|
13
|
-
}
|
|
14
|
-
// Use realpath to resolve symlinks
|
|
15
|
-
// It also resolves relative paths
|
|
16
|
-
options.fs.realpath(file, callback);
|
|
17
|
-
}
|
|
18
|
-
function acquireLock(file, options, callback) {
|
|
19
|
-
const lockfilePath = getLockFile(file, options);
|
|
20
|
-
// Use mkdir to create the lockfile (atomic operation)
|
|
21
|
-
options.fs.mkdir(lockfilePath, (err) => {
|
|
22
|
-
if (!err) {
|
|
23
|
-
// At this point, we acquired the lock!
|
|
24
|
-
// Probe the mtime precision
|
|
25
|
-
return mtimePrecision.probe(lockfilePath, options.fs, (err, mtime, precision) => {
|
|
26
|
-
/* istanbul ignore if */
|
|
27
|
-
if (err) {
|
|
28
|
-
options.fs.rmdir(lockfilePath, () => { });
|
|
29
|
-
return callback(err);
|
|
30
|
-
}
|
|
31
|
-
callback(null, mtime, precision);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
// If error is not EEXIST then some other error occurred while locking
|
|
35
|
-
if (err.code !== "EEXIST") {
|
|
36
|
-
return callback(err);
|
|
37
|
-
}
|
|
38
|
-
// Otherwise, check if lock is stale by analyzing the file mtime
|
|
39
|
-
if (options.stale <= 0) {
|
|
40
|
-
return callback(Object.assign(new Error("Lock file is already being held"), {
|
|
41
|
-
code: "ELOCKED",
|
|
42
|
-
file,
|
|
43
|
-
}));
|
|
44
|
-
}
|
|
45
|
-
options.fs.stat(lockfilePath, (err, stat) => {
|
|
46
|
-
if (err) {
|
|
47
|
-
// Retry if the lockfile has been removed (meanwhile)
|
|
48
|
-
// Skip stale check to avoid recursiveness
|
|
49
|
-
if (err.code === "ENOENT") {
|
|
50
|
-
return acquireLock(file, { ...options, stale: 0 }, callback);
|
|
51
|
-
}
|
|
52
|
-
return callback(err);
|
|
53
|
-
}
|
|
54
|
-
if (!isLockStale(stat, options)) {
|
|
55
|
-
return callback(Object.assign(new Error("Lock file is already being held"), {
|
|
56
|
-
code: "ELOCKED",
|
|
57
|
-
file,
|
|
58
|
-
}));
|
|
59
|
-
}
|
|
60
|
-
// If it's stale, remove it and try again!
|
|
61
|
-
// Skip stale check to avoid recursiveness
|
|
62
|
-
removeLock(file, options, (err) => {
|
|
63
|
-
if (err) {
|
|
64
|
-
return callback(err);
|
|
65
|
-
}
|
|
66
|
-
acquireLock(file, { ...options, stale: 0 }, callback);
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
function isLockStale(stat, options) {
|
|
72
|
-
return stat.mtime.getTime() < Date.now() - options.stale;
|
|
73
|
-
}
|
|
74
|
-
function removeLock(file, options, callback) {
|
|
75
|
-
options.fs.rmdir(getLockFile(file, options), (err) => {
|
|
76
|
-
if (err && err.code !== "ENOENT") {
|
|
77
|
-
return callback(err);
|
|
78
|
-
}
|
|
79
|
-
callback();
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
function updateLock(file, options) {
|
|
83
|
-
const lock = locks[file];
|
|
84
|
-
/* istanbul ignore if */
|
|
85
|
-
if (lock.updateTimeout) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
lock.updateDelay = lock.updateDelay || options.update;
|
|
89
|
-
lock.updateTimeout = setTimeout(() => {
|
|
90
|
-
lock.updateTimeout = null;
|
|
91
|
-
// Stat the file to check if mtime is still ours
|
|
92
|
-
// If it is, we can still recover from a system sleep or a busy event loop
|
|
93
|
-
options.fs.stat(lock.lockfilePath, (err, stat) => {
|
|
94
|
-
const isOverThreshold = lock.lastUpdate + options.stale < Date.now();
|
|
95
|
-
// If it failed to update the lockfile, keep trying unless
|
|
96
|
-
// the lockfile was deleted or we are over the threshold
|
|
97
|
-
if (err) {
|
|
98
|
-
if (err.code === "ENOENT" || isOverThreshold) {
|
|
99
|
-
return setLockAsCompromised(file, lock, Object.assign(err, { code: "ECOMPROMISED" }));
|
|
100
|
-
}
|
|
101
|
-
lock.updateDelay = 1000;
|
|
102
|
-
return updateLock(file, options);
|
|
103
|
-
}
|
|
104
|
-
const isMtimeOurs = lock.mtime.getTime() === stat.mtime.getTime();
|
|
105
|
-
if (!isMtimeOurs) {
|
|
106
|
-
return setLockAsCompromised(file, lock, Object.assign(new Error("Unable to update lock within the stale threshold"), { code: "ECOMPROMISED" }));
|
|
107
|
-
}
|
|
108
|
-
const mtime = mtimePrecision.getMtime(lock.mtimePrecision);
|
|
109
|
-
options.fs.utimes(lock.lockfilePath, mtime, mtime, (err) => {
|
|
110
|
-
const isOverThreshold = lock.lastUpdate + options.stale < Date.now();
|
|
111
|
-
if (lock.released) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
// If it failed to update the lockfile, keep trying unless
|
|
115
|
-
// the lockfile was deleted or we are over the threshold
|
|
116
|
-
if (err) {
|
|
117
|
-
if (err.code === "ENOENT" || isOverThreshold) {
|
|
118
|
-
return setLockAsCompromised(file, lock, Object.assign(err, { code: "ECOMPROMISED" }));
|
|
119
|
-
}
|
|
120
|
-
lock.updateDelay = 1000;
|
|
121
|
-
return updateLock(file, options);
|
|
122
|
-
}
|
|
123
|
-
// All ok, keep updating..
|
|
124
|
-
lock.mtime = mtime;
|
|
125
|
-
lock.lastUpdate = Date.now();
|
|
126
|
-
lock.updateDelay = null;
|
|
127
|
-
updateLock(file, options);
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
}, lock.updateDelay);
|
|
131
|
-
// Unref the timer so that the nodejs process can exit freely
|
|
132
|
-
// This is safe because all acquired locks will be automatically released
|
|
133
|
-
// on process exit
|
|
134
|
-
// We first check that `lock.updateTimeout.unref` exists because some users
|
|
135
|
-
// may be using this module outside of NodeJS (e.g., in an electron app),
|
|
136
|
-
// and in those cases `setTimeout` returns an integer.
|
|
137
|
-
/* istanbul ignore else */
|
|
138
|
-
if (lock.updateTimeout &&
|
|
139
|
-
lock.updateTimeout.unref) {
|
|
140
|
-
lock.updateTimeout.unref();
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
function setLockAsCompromised(file, lock, err) {
|
|
144
|
-
lock.released = true;
|
|
145
|
-
// Cancel lock mtime update
|
|
146
|
-
/* istanbul ignore if */
|
|
147
|
-
if (lock.updateTimeout) {
|
|
148
|
-
clearTimeout(lock.updateTimeout);
|
|
149
|
-
}
|
|
150
|
-
if (locks[file] === lock) {
|
|
151
|
-
delete locks[file];
|
|
152
|
-
}
|
|
153
|
-
lock.options.onCompromised(err);
|
|
154
|
-
}
|
|
155
|
-
// ----------------------------------------------------------
|
|
156
|
-
export function lock(file, options, callback) {
|
|
157
|
-
/* istanbul ignore next */
|
|
158
|
-
const merged = {
|
|
159
|
-
stale: 10000,
|
|
160
|
-
update: null,
|
|
161
|
-
realpath: true,
|
|
162
|
-
retries: 0,
|
|
163
|
-
fs: fs,
|
|
164
|
-
onCompromised: ((err) => {
|
|
165
|
-
throw err;
|
|
166
|
-
}),
|
|
167
|
-
...options,
|
|
168
|
-
};
|
|
169
|
-
const retriesValue = merged.retries || 0;
|
|
170
|
-
const resolved = {
|
|
171
|
-
stale: Math.max(merged.stale || 0, 2000),
|
|
172
|
-
update: 0,
|
|
173
|
-
realpath: merged.realpath,
|
|
174
|
-
retries: typeof retriesValue === "number"
|
|
175
|
-
? { retries: retriesValue }
|
|
176
|
-
: retriesValue,
|
|
177
|
-
fs: merged.fs,
|
|
178
|
-
onCompromised: merged.onCompromised,
|
|
179
|
-
lockfilePath: merged.lockfilePath,
|
|
180
|
-
};
|
|
181
|
-
const updateRaw = merged.update == null ? resolved.stale / 2 : merged.update || 0;
|
|
182
|
-
resolved.update = Math.max(Math.min(updateRaw, resolved.stale / 2), 1000);
|
|
183
|
-
// Resolve to a canonical file path
|
|
184
|
-
resolveCanonicalPath(file, resolved, (err, file) => {
|
|
185
|
-
if (err) {
|
|
186
|
-
return callback(err);
|
|
187
|
-
}
|
|
188
|
-
// Attempt to acquire the lock
|
|
189
|
-
const operation = retry.operation(resolved.retries);
|
|
190
|
-
operation.attempt(() => {
|
|
191
|
-
acquireLock(file, resolved, (err, mtime, precision) => {
|
|
192
|
-
if (operation.retry(err)) {
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
if (err) {
|
|
196
|
-
return callback(operation.mainError());
|
|
197
|
-
}
|
|
198
|
-
// We now own the lock
|
|
199
|
-
const internalLock = (locks[file] = {
|
|
200
|
-
lockfilePath: getLockFile(file, resolved),
|
|
201
|
-
mtime: mtime,
|
|
202
|
-
mtimePrecision: precision,
|
|
203
|
-
options: resolved,
|
|
204
|
-
lastUpdate: Date.now(),
|
|
205
|
-
});
|
|
206
|
-
// We must keep the lock fresh to avoid staleness
|
|
207
|
-
updateLock(file, resolved);
|
|
208
|
-
callback(null, (releasedCallback) => {
|
|
209
|
-
if (internalLock.released) {
|
|
210
|
-
return (releasedCallback &&
|
|
211
|
-
releasedCallback(Object.assign(new Error("Lock is already released"), {
|
|
212
|
-
code: "ERELEASED",
|
|
213
|
-
})));
|
|
214
|
-
}
|
|
215
|
-
// Not necessary to use realpath twice when unlocking
|
|
216
|
-
unlock(file, { ...resolved, realpath: false }, releasedCallback || (() => { }));
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
export function unlock(file, options, callback) {
|
|
223
|
-
const resolved = {
|
|
224
|
-
fs: fs,
|
|
225
|
-
realpath: true,
|
|
226
|
-
...options,
|
|
227
|
-
};
|
|
228
|
-
// Resolve to a canonical file path
|
|
229
|
-
resolveCanonicalPath(file, resolved, (err, file) => {
|
|
230
|
-
if (err) {
|
|
231
|
-
return callback(err);
|
|
232
|
-
}
|
|
233
|
-
const lock = locks[file];
|
|
234
|
-
if (!lock) {
|
|
235
|
-
return callback(Object.assign(new Error("Lock is not acquired/owned by you"), {
|
|
236
|
-
code: "ENOTACQUIRED",
|
|
237
|
-
}));
|
|
238
|
-
}
|
|
239
|
-
if (lock.updateTimeout) {
|
|
240
|
-
clearTimeout(lock.updateTimeout);
|
|
241
|
-
}
|
|
242
|
-
lock.released = true;
|
|
243
|
-
delete locks[file];
|
|
244
|
-
removeLock(file, resolved, callback);
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
export function check(file, options, callback) {
|
|
248
|
-
const resolved = {
|
|
249
|
-
stale: 10000,
|
|
250
|
-
realpath: true,
|
|
251
|
-
fs: fs,
|
|
252
|
-
...options,
|
|
253
|
-
};
|
|
254
|
-
resolved.stale = Math.max(resolved.stale || 0, 2000);
|
|
255
|
-
// Resolve to a canonical file path
|
|
256
|
-
resolveCanonicalPath(file, resolved, (err, file) => {
|
|
257
|
-
if (err) {
|
|
258
|
-
return callback(err);
|
|
259
|
-
}
|
|
260
|
-
// Check if lockfile exists
|
|
261
|
-
resolved.fs.stat(getLockFile(file, resolved), (err, stat) => {
|
|
262
|
-
if (err) {
|
|
263
|
-
// If does not exist, file is not locked. Otherwise, callback with error
|
|
264
|
-
return err.code === "ENOENT" ? callback(null, false) : callback(err);
|
|
265
|
-
}
|
|
266
|
-
// Otherwise, check if lock is stale by analyzing the file mtime
|
|
267
|
-
return callback(null, !isLockStale(stat, resolved));
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
export function getLocks() {
|
|
272
|
-
return locks;
|
|
273
|
-
}
|
|
274
|
-
// Remove acquired locks on exit
|
|
275
|
-
/* istanbul ignore next */
|
|
276
|
-
exitHook(() => {
|
|
277
|
-
for (const file in locks) {
|
|
278
|
-
const options = locks[file].options;
|
|
279
|
-
try {
|
|
280
|
-
options.fs.rmdirSync(getLockFile(file, options));
|
|
281
|
-
}
|
|
282
|
-
catch (e) {
|
|
283
|
-
/* Empty */
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
});
|
|
287
|
-
//# sourceMappingURL=lockfile.js.map
|
package/lib/lockfile.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../src/lockfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAkEpC,MAAM,KAAK,GAAiC,EAAE,CAAC;AAE/C,SAAS,WAAW,CAAC,IAAY,EAAE,OAAkC;IACnE,OAAO,OAAO,CAAC,YAAY,IAAI,GAAG,IAAI,OAAO,CAAC;AAChD,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,OAA0C,EAC1C,QAAmE;IAEnE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,mCAAmC;IACnC,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,WAAW,CAClB,IAAY,EACZ,OAA4B,EAC5B,QAAyB;IAEzB,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhD,sDAAsD;IACtD,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,GAAiC,EAAE,EAAE;QACnE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,uCAAuC;YACvC,4BAA4B;YAC5B,OAAO,cAAc,CAAC,KAAK,CACzB,YAAY,EACZ,OAAO,CAAC,EAAS,EACjB,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;gBACxB,wBAAwB;gBACxB,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBAEzC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;gBAED,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACnC,CAAC,CACF,CAAC;QACJ,CAAC;QAED,sEAAsE;QACtE,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,gEAAgE;QAChE,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,QAAQ,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,EAAE;gBAC1D,IAAI,EAAE,SAAS;gBACf,IAAI;aACL,CAAC,CACH,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,EAAE,CAAC,IAAI,CACb,YAAY,EACZ,CAAC,GAAiC,EAAE,IAA6B,EAAE,EAAE;YACnE,IAAI,GAAG,EAAE,CAAC;gBACR,qDAAqD;gBACrD,0CAA0C;gBAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1B,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC/D,CAAC;gBAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;gBAChC,OAAO,QAAQ,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,EAAE;oBAC1D,IAAI,EAAE,SAAS;oBACf,IAAI;iBACL,CAAC,CACH,CAAC;YACJ,CAAC;YAED,0CAA0C;YAC1C,0CAA0C;YAC1C,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChC,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;gBAED,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAClB,IAA6B,EAC7B,OAA0B;IAE1B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CACjB,IAAY,EACZ,OAA6C,EAC7C,QAAsD;IAEtD,OAAO,CAAC,EAAE,CAAC,KAAK,CACd,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAC1B,CAAC,GAAiC,EAAE,EAAE;QACpC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,QAAQ,EAAE,CAAC;IACb,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,OAA4B;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAEzB,wBAAwB;IACxB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IACtD,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;QACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,gDAAgD;QAChD,0EAA0E;QAC1E,OAAO,CAAC,EAAE,CAAC,IAAI,CACb,IAAI,CAAC,YAAY,EACjB,CAAC,GAAiC,EAAE,IAA6B,EAAE,EAAE;YACnE,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAErE,0DAA0D;YAC1D,wDAAwD;YACxD,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,eAAe,EAAE,CAAC;oBAC7C,OAAO,oBAAoB,CACzB,IAAI,EACJ,IAAI,EACJ,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAC7C,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAExB,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAElE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,oBAAoB,CACzB,IAAI,EACJ,IAAI,EACJ,MAAM,CAAC,MAAM,CACX,IAAI,KAAK,CAAC,kDAAkD,CAAC,EAC7D,EAAE,IAAI,EAAE,cAAc,EAAE,CACzB,CACF,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE3D,OAAO,CAAC,EAAE,CAAC,MAAM,CACf,IAAI,CAAC,YAAY,EACjB,KAAK,EACL,KAAK,EACL,CAAC,GAAiC,EAAE,EAAE;gBACpC,MAAM,eAAe,GACnB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE/C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,OAAO;gBACT,CAAC;gBAED,0DAA0D;gBAC1D,wDAAwD;gBACxD,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,eAAe,EAAE,CAAC;wBAC7C,OAAO,oBAAoB,CACzB,IAAI,EACJ,IAAI,EACJ,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAC7C,CAAC;oBACJ,CAAC;oBAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBAExB,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACnC,CAAC;gBAED,0BAA0B;gBAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5B,CAAC,CACF,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAErB,6DAA6D;IAC7D,yEAAyE;IACzE,kBAAkB;IAElB,2EAA2E;IAC3E,yEAAyE;IACzE,sDAAsD;IACtD,0BAA0B;IAC1B,IACE,IAAI,CAAC,aAAa;QACjB,IAAI,CAAC,aAAwC,CAAC,KAAK,EACpD,CAAC;QACA,IAAI,CAAC,aAAuC,CAAC,KAAK,EAAE,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,IAAkB,EAClB,GAAU;IAEV,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IAErB,2BAA2B;IAC3B,wBAAwB;IACxB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,6DAA6D;AAE7D,MAAM,UAAU,IAAI,CAClB,IAAY,EACZ,OAAgC,EAChC,QAAsB;IAEtB,0BAA0B;IAC1B,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,IAAqB;QAC7B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,CAAoC;QAC7C,EAAE,EAAE,EAAW;QACf,aAAa,EAAE,CAAC,CAAC,GAAU,EAAE,EAAE;YAC7B,MAAM,GAAG,CAAC;QACZ,CAAC,CAAyB;QAC1B,GAAG,OAAO;KACX,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAwB;QACpC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC;QACxC,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EACL,OAAO,YAAY,KAAK,QAAQ;YAC9B,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE;YAC3B,CAAC,CAAC,YAAY;QAClB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC;IAEF,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE1E,mCAAmC;IACnC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACjD,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,8BAA8B;QAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEpD,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;YACrB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;gBACpD,IAAI,SAAS,CAAC,KAAK,CAAC,GAAY,CAAC,EAAE,CAAC;oBAClC,OAAO;gBACT,CAAC;gBAED,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;gBACzC,CAAC;gBAED,sBAAsB;gBACtB,MAAM,YAAY,GAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;oBAChD,YAAY,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;oBACzC,KAAK,EAAE,KAAa;oBACpB,cAAc,EAAE,SAA2B;oBAC3C,OAAO,EAAE,QAAQ;oBACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;iBACvB,CAAC,CAAC;gBAEH,iDAAiD;gBACjD,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAE3B,QAAQ,CAAC,IAAI,EAAE,CAAC,gBAAgB,EAAE,EAAE;oBAClC,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;wBAC1B,OAAO,CACL,gBAAgB;4BAChB,gBAAgB,CACd,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE;gCACnD,IAAI,EAAE,WAAW;6BAClB,CAAC,CACH,CACF,CAAC;oBACJ,CAAC;oBAED,qDAAqD;oBACrD,MAAM,CACJ,IAAI,EACJ,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAChC,gBAAgB,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAC/B,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,IAAY,EACZ,OAAkC,EAClC,QAAwB;IAExB,MAAM,QAAQ,GAAG;QACf,EAAE,EAAE,EAAW;QACf,QAAQ,EAAE,IAAI;QACd,GAAG,OAAO;KACX,CAAC;IAEF,mCAAmC;IACnC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACjD,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,QAAQ,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,EAAE;gBAC5D,IAAI,EAAE,cAAc;aACrB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;QAEnB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,IAAY,EACZ,OAAiC,EACjC,QAAuB;IAEvB,MAAM,QAAQ,GAAG;QACf,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAI;QACd,EAAE,EAAE,EAAW;QACf,GAAG,OAAO;KACX,CAAC;IAEF,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAErD,mCAAmC;IACnC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACjD,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,2BAA2B;QAC3B,QAAQ,CAAC,EAAE,CAAC,IAAI,CACd,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EAC3B,CAAC,GAAiC,EAAE,IAA6B,EAAE,EAAE;YACnE,IAAI,GAAG,EAAE,CAAC;gBACR,wEAAwE;gBACxE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACvE,CAAC;YAED,gEAAgE;YAChE,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACtD,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gCAAgC;AAChC,0BAA0B;AAC1B,QAAQ,CAAC,GAAG,EAAE;IACZ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QAEpC,IAAI,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW;QACb,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/lib/mtime-precision.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Stats } from "node:fs";
|
|
2
|
-
export type MtimePrecision = "s" | "ms";
|
|
3
|
-
export interface MtimePrecisionFs {
|
|
4
|
-
stat(path: string, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
|
|
5
|
-
utimes(path: string, atime: Date, mtime: Date, callback: (err: NodeJS.ErrnoException | null) => void): void;
|
|
6
|
-
}
|
|
7
|
-
type ProbeCallback = (err: NodeJS.ErrnoException | null, mtime?: Date, precision?: MtimePrecision) => void;
|
|
8
|
-
export declare function probe(file: string, fs: MtimePrecisionFs, callback: ProbeCallback): void;
|
|
9
|
-
export declare function getMtime(precision: MtimePrecision): Date;
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=mtime-precision.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mtime-precision.d.ts","sourceRoot":"","sources":["../src/mtime-precision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAClE,IAAI,CAAC;IACR,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,IAAI,EACX,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,KAAK,IAAI,GACpD,IAAI,CAAC;CACT;AAED,KAAK,aAAa,GAAG,CACnB,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EACjC,KAAK,CAAC,EAAE,IAAI,EACZ,SAAS,CAAC,EAAE,cAAc,KACvB,IAAI,CAAC;AAQV,wBAAgB,KAAK,CACnB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,gBAAgB,EACpB,QAAQ,EAAE,aAAa,GACtB,IAAI,CAuCN;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAQxD"}
|
package/lib/mtime-precision.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
const cacheSymbol = Symbol();
|
|
2
|
-
export function probe(file, fs, callback) {
|
|
3
|
-
const cachedFs = fs;
|
|
4
|
-
const cachedPrecision = cachedFs[cacheSymbol];
|
|
5
|
-
if (cachedPrecision) {
|
|
6
|
-
return fs.stat(file, (err, stat) => {
|
|
7
|
-
/* istanbul ignore if */
|
|
8
|
-
if (err) {
|
|
9
|
-
return callback(err);
|
|
10
|
-
}
|
|
11
|
-
callback(null, stat.mtime, cachedPrecision);
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
// Set mtime by ceiling Date.now() to seconds + 5ms so that it's "not on the second"
|
|
15
|
-
const mtime = new Date(Math.ceil(Date.now() / 1000) * 1000 + 5);
|
|
16
|
-
fs.utimes(file, mtime, mtime, (err) => {
|
|
17
|
-
/* istanbul ignore if */
|
|
18
|
-
if (err) {
|
|
19
|
-
return callback(err);
|
|
20
|
-
}
|
|
21
|
-
fs.stat(file, (err, stat) => {
|
|
22
|
-
/* istanbul ignore if */
|
|
23
|
-
if (err) {
|
|
24
|
-
return callback(err);
|
|
25
|
-
}
|
|
26
|
-
const precision = stat.mtime.getTime() % 1000 === 0 ? "s" : "ms";
|
|
27
|
-
// Cache the precision in a non-enumerable way
|
|
28
|
-
Object.defineProperty(fs, cacheSymbol, { value: precision });
|
|
29
|
-
callback(null, stat.mtime, precision);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
export function getMtime(precision) {
|
|
34
|
-
let now = Date.now();
|
|
35
|
-
if (precision === "s") {
|
|
36
|
-
now = Math.ceil(now / 1000) * 1000;
|
|
37
|
-
}
|
|
38
|
-
return new Date(now);
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=mtime-precision.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mtime-precision.js","sourceRoot":"","sources":["../src/mtime-precision.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;AAM7B,MAAM,UAAU,KAAK,CACnB,IAAY,EACZ,EAAoB,EACpB,QAAuB;IAEvB,MAAM,QAAQ,GAAG,EAAc,CAAC;IAChC,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE9C,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACjC,wBAAwB;YACxB,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;YAED,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAEhE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACpC,wBAAwB;QACxB,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC1B,wBAAwB;YACxB,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;YAED,MAAM,SAAS,GACb,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAEjD,8CAA8C;YAC9C,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAE7D,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,SAAyB;IAChD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAErB,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
package/lib/retry.d.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
export interface OperationOptions {
|
|
2
|
-
retries?: number;
|
|
3
|
-
factor?: number;
|
|
4
|
-
minTimeout?: number;
|
|
5
|
-
maxTimeout?: number;
|
|
6
|
-
randomize?: boolean;
|
|
7
|
-
forever?: boolean;
|
|
8
|
-
unref?: boolean;
|
|
9
|
-
maxRetryTime?: number;
|
|
10
|
-
}
|
|
11
|
-
interface RetryOperationOptions {
|
|
12
|
-
forever?: boolean;
|
|
13
|
-
unref?: boolean;
|
|
14
|
-
maxRetryTime?: number;
|
|
15
|
-
}
|
|
16
|
-
interface AttemptTimeoutOptions {
|
|
17
|
-
timeout?: number;
|
|
18
|
-
cb?: (attempt?: number) => void;
|
|
19
|
-
}
|
|
20
|
-
type AttemptFn = (attempt: number) => void;
|
|
21
|
-
export declare function createTimeout(attempt: number, opts: Required<Pick<OperationOptions, "minTimeout" | "maxTimeout" | "factor" | "randomize">>): number;
|
|
22
|
-
export declare function timeouts(options?: OperationOptions | number[]): number[];
|
|
23
|
-
export declare class RetryOperation {
|
|
24
|
-
private readonly originalTimeouts;
|
|
25
|
-
private remainingTimeouts;
|
|
26
|
-
private readonly options;
|
|
27
|
-
private readonly maxRetryTime;
|
|
28
|
-
private readonly cachedTimeouts;
|
|
29
|
-
private fn;
|
|
30
|
-
private readonly errorList;
|
|
31
|
-
private attemptCount;
|
|
32
|
-
private operationTimeout;
|
|
33
|
-
private operationTimeoutCb;
|
|
34
|
-
private operationTimer;
|
|
35
|
-
private retryTimer;
|
|
36
|
-
private operationStart;
|
|
37
|
-
constructor(initialTimeouts: number[], options?: RetryOperationOptions | boolean);
|
|
38
|
-
reset(): void;
|
|
39
|
-
stop(): void;
|
|
40
|
-
retry(err?: Error | null): boolean;
|
|
41
|
-
attempt(fn: AttemptFn, timeoutOps?: AttemptTimeoutOptions): void;
|
|
42
|
-
errors(): Error[];
|
|
43
|
-
attempts(): number;
|
|
44
|
-
mainError(): Error | null;
|
|
45
|
-
}
|
|
46
|
-
export declare function operation(options?: OperationOptions | number[]): RetryOperation;
|
|
47
|
-
export declare function wrap<T extends Record<string, any>>(obj: T, optionsOrMethods?: OperationOptions | string[], methodList?: string[]): void;
|
|
48
|
-
declare const _default: {
|
|
49
|
-
operation: typeof operation;
|
|
50
|
-
timeouts: typeof timeouts;
|
|
51
|
-
createTimeout: typeof createTimeout;
|
|
52
|
-
wrap: typeof wrap;
|
|
53
|
-
RetryOperation: typeof RetryOperation;
|
|
54
|
-
};
|
|
55
|
-
export default _default;
|
|
56
|
-
//# sourceMappingURL=retry.d.ts.map
|
package/lib/retry.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,KAAK,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAY3C,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,CACZ,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC,CAC7E,GACA,MAAM,CAOR;AAED,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CA6BxE;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAW;IAC5C,OAAO,CAAC,iBAAiB,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IAEjD,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,cAAc,CAAK;gBAGzB,eAAe,EAAE,MAAM,EAAE,EACzB,OAAO,GAAE,qBAAqB,GAAG,OAAY;IAa/C,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAWZ,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO;IA0DlC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAsBhE,MAAM,IAAI,KAAK,EAAE;IAIjB,QAAQ,IAAI,MAAM;IAIlB,SAAS,IAAI,KAAK,GAAG,IAAI;CAuB1B;AAED,wBAAgB,SAAS,CACvB,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,GACpC,cAAc,CAShB;AAED,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChD,GAAG,EAAE,CAAC,EACN,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAC9C,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,IAAI,CAkDN;;;;;;;;AAED,wBAA4E"}
|
package/lib/retry.js
DELETED
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
const DEFAULTS = {
|
|
2
|
-
retries: 10,
|
|
3
|
-
factor: 2,
|
|
4
|
-
minTimeout: 1000,
|
|
5
|
-
maxTimeout: Infinity,
|
|
6
|
-
randomize: false,
|
|
7
|
-
};
|
|
8
|
-
export function createTimeout(attempt, opts) {
|
|
9
|
-
const random = opts.randomize ? Math.random() + 1 : 1;
|
|
10
|
-
const timeout = Math.round(random * Math.max(opts.minTimeout, 1) * opts.factor ** attempt);
|
|
11
|
-
return Math.min(timeout, opts.maxTimeout);
|
|
12
|
-
}
|
|
13
|
-
export function timeouts(options) {
|
|
14
|
-
if (Array.isArray(options)) {
|
|
15
|
-
return [...options];
|
|
16
|
-
}
|
|
17
|
-
const opts = { ...DEFAULTS, ...options };
|
|
18
|
-
if (opts.minTimeout > opts.maxTimeout) {
|
|
19
|
-
throw new Error("minTimeout is greater than maxTimeout");
|
|
20
|
-
}
|
|
21
|
-
const result = [];
|
|
22
|
-
for (let i = 0; i < opts.retries; i++) {
|
|
23
|
-
result.push(createTimeout(i, opts));
|
|
24
|
-
}
|
|
25
|
-
if (options &&
|
|
26
|
-
!Array.isArray(options) &&
|
|
27
|
-
options.forever &&
|
|
28
|
-
result.length === 0) {
|
|
29
|
-
result.push(createTimeout(opts.retries, opts));
|
|
30
|
-
}
|
|
31
|
-
result.sort((a, b) => a - b);
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
34
|
-
export class RetryOperation {
|
|
35
|
-
originalTimeouts;
|
|
36
|
-
remainingTimeouts;
|
|
37
|
-
options;
|
|
38
|
-
maxRetryTime;
|
|
39
|
-
cachedTimeouts;
|
|
40
|
-
fn = null;
|
|
41
|
-
errorList = [];
|
|
42
|
-
attemptCount = 1;
|
|
43
|
-
operationTimeout = null;
|
|
44
|
-
operationTimeoutCb = null;
|
|
45
|
-
operationTimer = null;
|
|
46
|
-
retryTimer = null;
|
|
47
|
-
operationStart = 0;
|
|
48
|
-
constructor(initialTimeouts, options = {}) {
|
|
49
|
-
// Compatibility for the old (timeouts, retryForever) signature
|
|
50
|
-
const opts = typeof options === "boolean" ? { forever: options } : options;
|
|
51
|
-
this.originalTimeouts = [...initialTimeouts];
|
|
52
|
-
this.remainingTimeouts = [...initialTimeouts];
|
|
53
|
-
this.options = opts;
|
|
54
|
-
this.maxRetryTime = opts.maxRetryTime ?? Infinity;
|
|
55
|
-
this.cachedTimeouts = opts.forever ? [...initialTimeouts] : null;
|
|
56
|
-
}
|
|
57
|
-
reset() {
|
|
58
|
-
this.attemptCount = 1;
|
|
59
|
-
this.remainingTimeouts = [...this.originalTimeouts];
|
|
60
|
-
}
|
|
61
|
-
stop() {
|
|
62
|
-
if (this.operationTimer) {
|
|
63
|
-
clearTimeout(this.operationTimer);
|
|
64
|
-
}
|
|
65
|
-
if (this.retryTimer) {
|
|
66
|
-
clearTimeout(this.retryTimer);
|
|
67
|
-
}
|
|
68
|
-
this.remainingTimeouts = [];
|
|
69
|
-
}
|
|
70
|
-
retry(err) {
|
|
71
|
-
if (this.operationTimer) {
|
|
72
|
-
clearTimeout(this.operationTimer);
|
|
73
|
-
}
|
|
74
|
-
if (!err) {
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
|
-
const elapsed = Date.now() - this.operationStart;
|
|
78
|
-
if (elapsed >= this.maxRetryTime) {
|
|
79
|
-
this.errorList.push(err);
|
|
80
|
-
this.errorList.unshift(new Error("RetryOperation timeout occurred"));
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
this.errorList.push(err);
|
|
84
|
-
let timeout = this.remainingTimeouts.shift();
|
|
85
|
-
if (timeout === undefined) {
|
|
86
|
-
if (this.cachedTimeouts) {
|
|
87
|
-
// retry forever, only keep last error
|
|
88
|
-
this.errorList.splice(0, this.errorList.length - 1);
|
|
89
|
-
timeout = this.cachedTimeouts[this.cachedTimeouts.length - 1];
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
this.retryTimer = setTimeout(() => {
|
|
96
|
-
this.attemptCount += 1;
|
|
97
|
-
if (this.operationTimeoutCb) {
|
|
98
|
-
this.operationTimer = setTimeout(() => {
|
|
99
|
-
this.operationTimeoutCb?.(this.attemptCount);
|
|
100
|
-
}, this.operationTimeout ?? 0);
|
|
101
|
-
if (this.options.unref &&
|
|
102
|
-
typeof this.operationTimer.unref === "function") {
|
|
103
|
-
this.operationTimer.unref();
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
this.fn?.(this.attemptCount);
|
|
107
|
-
}, timeout);
|
|
108
|
-
if (this.options.unref && typeof this.retryTimer.unref === "function") {
|
|
109
|
-
this.retryTimer.unref();
|
|
110
|
-
}
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
attempt(fn, timeoutOps) {
|
|
114
|
-
this.fn = fn;
|
|
115
|
-
if (timeoutOps) {
|
|
116
|
-
if (timeoutOps.timeout != null) {
|
|
117
|
-
this.operationTimeout = timeoutOps.timeout;
|
|
118
|
-
}
|
|
119
|
-
if (timeoutOps.cb) {
|
|
120
|
-
this.operationTimeoutCb = timeoutOps.cb;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (this.operationTimeoutCb) {
|
|
124
|
-
this.operationTimer = setTimeout(() => {
|
|
125
|
-
this.operationTimeoutCb?.();
|
|
126
|
-
}, this.operationTimeout ?? 0);
|
|
127
|
-
}
|
|
128
|
-
this.operationStart = Date.now();
|
|
129
|
-
this.fn(this.attemptCount);
|
|
130
|
-
}
|
|
131
|
-
errors() {
|
|
132
|
-
return this.errorList;
|
|
133
|
-
}
|
|
134
|
-
attempts() {
|
|
135
|
-
return this.attemptCount;
|
|
136
|
-
}
|
|
137
|
-
mainError() {
|
|
138
|
-
if (this.errorList.length === 0) {
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
const counts = new Map();
|
|
142
|
-
let mainError = null;
|
|
143
|
-
let mainErrorCount = 0;
|
|
144
|
-
for (const error of this.errorList) {
|
|
145
|
-
const message = error.message;
|
|
146
|
-
const count = (counts.get(message) ?? 0) + 1;
|
|
147
|
-
counts.set(message, count);
|
|
148
|
-
if (count >= mainErrorCount) {
|
|
149
|
-
mainError = error;
|
|
150
|
-
mainErrorCount = count;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return mainError;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
export function operation(options) {
|
|
157
|
-
const computedTimeouts = timeouts(options);
|
|
158
|
-
const opts = !Array.isArray(options) ? options : undefined;
|
|
159
|
-
return new RetryOperation(computedTimeouts, {
|
|
160
|
-
forever: opts?.forever || opts?.retries === Infinity,
|
|
161
|
-
unref: opts?.unref,
|
|
162
|
-
maxRetryTime: opts?.maxRetryTime,
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
export function wrap(obj, optionsOrMethods, methodList) {
|
|
166
|
-
let options;
|
|
167
|
-
let methods;
|
|
168
|
-
if (Array.isArray(optionsOrMethods)) {
|
|
169
|
-
methods = optionsOrMethods;
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
options = optionsOrMethods;
|
|
173
|
-
methods = methodList;
|
|
174
|
-
}
|
|
175
|
-
if (!methods) {
|
|
176
|
-
methods = [];
|
|
177
|
-
for (const key in obj) {
|
|
178
|
-
if (typeof obj[key] === "function") {
|
|
179
|
-
methods.push(key);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
for (const method of methods) {
|
|
184
|
-
const original = obj[method];
|
|
185
|
-
obj[method] = function retryWrapper(...args) {
|
|
186
|
-
const op = operation(options);
|
|
187
|
-
const callback = args.pop();
|
|
188
|
-
args.push(function (err, ...rest) {
|
|
189
|
-
if (op.retry(err)) {
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
const finalErr = err ? op.mainError() : err;
|
|
193
|
-
callback.call(this, finalErr, ...rest);
|
|
194
|
-
});
|
|
195
|
-
op.attempt(() => {
|
|
196
|
-
original.apply(obj, args);
|
|
197
|
-
});
|
|
198
|
-
};
|
|
199
|
-
obj[method].options = options;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
export default { operation, timeouts, createTimeout, wrap, RetryOperation };
|
|
203
|
-
//# sourceMappingURL=retry.js.map
|
package/lib/retry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"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"}
|