@atproto/common-web 0.2.2 → 0.2.4-next.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/CHANGELOG.md +12 -0
- package/LICENSE.txt +7 -0
- package/README.md +6 -1
- package/dist/arrays.d.ts +2 -0
- package/dist/arrays.d.ts.map +1 -0
- package/dist/arrays.js +22 -0
- package/dist/arrays.js.map +1 -0
- package/dist/async.d.ts +7 -1
- package/dist/async.d.ts.map +1 -0
- package/dist/async.js +187 -0
- package/dist/async.js.map +1 -0
- package/dist/check.d.ts +1 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +16 -0
- package/dist/check.js.map +1 -0
- package/dist/did-doc.d.ts +3 -1
- package/dist/did-doc.d.ts.map +1 -0
- package/dist/did-doc.js +138 -0
- package/dist/did-doc.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -14188
- package/dist/index.js.map +1 -7
- package/dist/ipld.d.ts +3 -2
- package/dist/ipld.d.ts.map +1 -0
- package/dist/ipld.js +119 -0
- package/dist/ipld.js.map +1 -0
- package/dist/retry.d.ts +8 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +46 -0
- package/dist/retry.js.map +1 -0
- package/dist/strings.d.ts +2 -1
- package/dist/strings.d.ts.map +1 -0
- package/dist/strings.js +74 -0
- package/dist/strings.js.map +1 -0
- package/dist/tid.d.ts +1 -0
- package/dist/tid.d.ts.map +1 -0
- package/dist/tid.js +100 -0
- package/dist/tid.js.map +1 -0
- package/dist/times.d.ts +2 -0
- package/dist/times.d.ts.map +1 -0
- package/dist/times.js +19 -0
- package/dist/times.js.map +1 -0
- package/dist/types.d.ts +3 -2
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +42 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +3 -2
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +114 -0
- package/dist/util.js.map +1 -0
- package/jest.config.js +3 -3
- package/package.json +7 -6
- package/src/arrays.ts +7 -0
- package/src/async.ts +27 -0
- package/src/did-doc.ts +5 -0
- package/src/index.ts +1 -0
- package/src/retry.ts +52 -0
- package/src/times.ts +7 -0
- package/src/util.ts +2 -2
- package/tests/retry.test.ts +93 -0
- package/tsconfig.build.json +6 -2
- package/tsconfig.json +5 -7
- package/tsconfig.tests.json +7 -0
- package/LICENSE +0 -21
- package/babel.config.js +0 -1
- package/build.js +0 -15
package/dist/ipld.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { CID } from 'multiformats/cid';
|
|
2
|
-
export
|
|
2
|
+
export type JsonValue = boolean | number | string | null | undefined | unknown | Array<JsonValue> | {
|
|
3
3
|
[key: string]: JsonValue;
|
|
4
4
|
};
|
|
5
|
-
export
|
|
5
|
+
export type IpldValue = JsonValue | CID | Uint8Array | Array<IpldValue> | {
|
|
6
6
|
[key: string]: IpldValue;
|
|
7
7
|
};
|
|
8
8
|
export declare const jsonToIpld: (val: JsonValue) => IpldValue;
|
|
9
9
|
export declare const ipldToJson: (val: IpldValue) => JsonValue;
|
|
10
10
|
export declare const ipldEquals: (a: IpldValue, b: IpldValue) => boolean;
|
|
11
|
+
//# sourceMappingURL=ipld.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipld.d.ts","sourceRoot":"","sources":["../src/ipld.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,MAAM,MAAM,SAAS,GACjB,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,GACP,KAAK,CAAC,SAAS,CAAC,GAChB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEhC,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,GAAG,GACH,UAAU,GACV,KAAK,CAAC,SAAS,CAAC,GAChB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAKhC,eAAO,MAAM,UAAU,QAAS,SAAS,KAAG,SAuB3C,CAAA;AAED,eAAO,MAAM,UAAU,QAAS,SAAS,KAAG,SA4B3C,CAAA;AAED,eAAO,MAAM,UAAU,MAAO,SAAS,KAAK,SAAS,KAAG,OA2BvD,CAAA"}
|
package/dist/ipld.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.ipldEquals = exports.ipldToJson = exports.jsonToIpld = void 0;
|
|
27
|
+
const cid_1 = require("multiformats/cid");
|
|
28
|
+
const ui8 = __importStar(require("uint8arrays"));
|
|
29
|
+
// @NOTE avoiding use of check.is() here only because it makes
|
|
30
|
+
// these implementations slow, and they often live in hot paths.
|
|
31
|
+
const jsonToIpld = (val) => {
|
|
32
|
+
// walk arrays
|
|
33
|
+
if (Array.isArray(val)) {
|
|
34
|
+
return val.map((item) => (0, exports.jsonToIpld)(item));
|
|
35
|
+
}
|
|
36
|
+
// objects
|
|
37
|
+
if (val && typeof val === 'object') {
|
|
38
|
+
// check for dag json values
|
|
39
|
+
if (typeof val['$link'] === 'string' && Object.keys(val).length === 1) {
|
|
40
|
+
return cid_1.CID.parse(val['$link']);
|
|
41
|
+
}
|
|
42
|
+
if (typeof val['$bytes'] === 'string' && Object.keys(val).length === 1) {
|
|
43
|
+
return ui8.fromString(val['$bytes'], 'base64');
|
|
44
|
+
}
|
|
45
|
+
// walk plain objects
|
|
46
|
+
const toReturn = {};
|
|
47
|
+
for (const key of Object.keys(val)) {
|
|
48
|
+
toReturn[key] = (0, exports.jsonToIpld)(val[key]);
|
|
49
|
+
}
|
|
50
|
+
return toReturn;
|
|
51
|
+
}
|
|
52
|
+
// pass through
|
|
53
|
+
return val;
|
|
54
|
+
};
|
|
55
|
+
exports.jsonToIpld = jsonToIpld;
|
|
56
|
+
const ipldToJson = (val) => {
|
|
57
|
+
// walk arrays
|
|
58
|
+
if (Array.isArray(val)) {
|
|
59
|
+
return val.map((item) => (0, exports.ipldToJson)(item));
|
|
60
|
+
}
|
|
61
|
+
// objects
|
|
62
|
+
if (val && typeof val === 'object') {
|
|
63
|
+
// convert bytes
|
|
64
|
+
if (val instanceof Uint8Array) {
|
|
65
|
+
return {
|
|
66
|
+
$bytes: ui8.toString(val, 'base64'),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// convert cids
|
|
70
|
+
if (cid_1.CID.asCID(val)) {
|
|
71
|
+
return {
|
|
72
|
+
$link: val.toString(),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// walk plain objects
|
|
76
|
+
const toReturn = {};
|
|
77
|
+
for (const key of Object.keys(val)) {
|
|
78
|
+
toReturn[key] = (0, exports.ipldToJson)(val[key]);
|
|
79
|
+
}
|
|
80
|
+
return toReturn;
|
|
81
|
+
}
|
|
82
|
+
// pass through
|
|
83
|
+
return val;
|
|
84
|
+
};
|
|
85
|
+
exports.ipldToJson = ipldToJson;
|
|
86
|
+
const ipldEquals = (a, b) => {
|
|
87
|
+
// walk arrays
|
|
88
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
89
|
+
if (a.length !== b.length)
|
|
90
|
+
return false;
|
|
91
|
+
for (let i = 0; i < a.length; i++) {
|
|
92
|
+
if (!(0, exports.ipldEquals)(a[i], b[i]))
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
// objects
|
|
98
|
+
if (a && b && typeof a === 'object' && typeof b === 'object') {
|
|
99
|
+
// check bytes
|
|
100
|
+
if (a instanceof Uint8Array && b instanceof Uint8Array) {
|
|
101
|
+
return ui8.equals(a, b);
|
|
102
|
+
}
|
|
103
|
+
// check cids
|
|
104
|
+
if (cid_1.CID.asCID(a) && cid_1.CID.asCID(b)) {
|
|
105
|
+
return cid_1.CID.asCID(a)?.equals(cid_1.CID.asCID(b));
|
|
106
|
+
}
|
|
107
|
+
// walk plain objects
|
|
108
|
+
if (Object.keys(a).length !== Object.keys(b).length)
|
|
109
|
+
return false;
|
|
110
|
+
for (const key of Object.keys(a)) {
|
|
111
|
+
if (!(0, exports.ipldEquals)(a[key], b[key]))
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
return a === b;
|
|
117
|
+
};
|
|
118
|
+
exports.ipldEquals = ipldEquals;
|
|
119
|
+
//# sourceMappingURL=ipld.js.map
|
package/dist/ipld.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipld.js","sourceRoot":"","sources":["../src/ipld.ts"],"names":[],"mappings":"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"}
|
package/dist/retry.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type RetryOptions = {
|
|
2
|
+
maxRetries?: number;
|
|
3
|
+
getWaitMs?: (n: number) => number | null;
|
|
4
|
+
retryable?: (err: unknown) => boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare function retry<T>(fn: () => Promise<T>, opts?: RetryOptions): Promise<T>;
|
|
7
|
+
export declare function backoffMs(n: number, multiplier?: number, max?: number): number;
|
|
8
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IACxC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;CACtC,CAAA;AAED,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAGD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,SAAM,EAAE,GAAG,SAAO,UAIhE"}
|
package/dist/retry.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.backoffMs = exports.retry = void 0;
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
async function retry(fn, opts = {}) {
|
|
6
|
+
const { maxRetries = 3, retryable = () => true, getWaitMs = backoffMs } = opts;
|
|
7
|
+
let retries = 0;
|
|
8
|
+
let doneError;
|
|
9
|
+
while (!doneError) {
|
|
10
|
+
try {
|
|
11
|
+
return await fn();
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
const waitMs = getWaitMs(retries);
|
|
15
|
+
const willRetry = retries < maxRetries && waitMs !== null && retryable(err);
|
|
16
|
+
if (willRetry) {
|
|
17
|
+
retries += 1;
|
|
18
|
+
if (waitMs !== 0) {
|
|
19
|
+
await (0, util_1.wait)(waitMs);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
doneError = err;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
throw doneError;
|
|
28
|
+
}
|
|
29
|
+
exports.retry = retry;
|
|
30
|
+
// Waits exponential backoff with max and jitter: ~100, ~200, ~400, ~800, ~1000, ~1000, ...
|
|
31
|
+
function backoffMs(n, multiplier = 100, max = 1000) {
|
|
32
|
+
const exponentialMs = Math.pow(2, n) * multiplier;
|
|
33
|
+
const ms = Math.min(exponentialMs, max);
|
|
34
|
+
return jitter(ms);
|
|
35
|
+
}
|
|
36
|
+
exports.backoffMs = backoffMs;
|
|
37
|
+
// Adds randomness +/-15% of value
|
|
38
|
+
function jitter(value) {
|
|
39
|
+
const delta = value * 0.15;
|
|
40
|
+
return value + randomRange(-delta, delta);
|
|
41
|
+
}
|
|
42
|
+
function randomRange(from, to) {
|
|
43
|
+
const rand = Math.random() * (to - from);
|
|
44
|
+
return rand + from;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":";;;AAAA,iCAA6B;AAQtB,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,OAAqB,EAAE;IAEvB,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,IAAI,CAAA;IAC9E,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,SAAkB,CAAA;IACtB,OAAO,CAAC,SAAS,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;YACjC,MAAM,SAAS,GACb,OAAO,GAAG,UAAU,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,CAAA;YAC3D,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,CAAA;gBACZ,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjB,MAAM,IAAA,WAAI,EAAC,MAAM,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,GAAG,CAAA;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,SAAS,CAAA;AACjB,CAAC;AAzBD,sBAyBC;AAED,2FAA2F;AAC3F,SAAgB,SAAS,CAAC,CAAS,EAAE,UAAU,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI;IAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAA;IACjD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;IACvC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAA;AACnB,CAAC;AAJD,8BAIC;AAED,kCAAkC;AAClC,SAAS,MAAM,CAAC,KAAa;IAC3B,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAA;IAC1B,OAAO,KAAK,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,EAAU;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IACxC,OAAO,IAAI,GAAG,IAAI,CAAA;AACpB,CAAC"}
|
package/dist/strings.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare const utf8ToB64Url: (utf8: string) => string;
|
|
|
4
4
|
export declare const b64UrlToUtf8: (b64: string) => string;
|
|
5
5
|
export declare const parseLanguage: (langTag: string) => LanguageTag | null;
|
|
6
6
|
export declare const validateLanguage: (langTag: string) => boolean;
|
|
7
|
-
export
|
|
7
|
+
export type LanguageTag = {
|
|
8
8
|
grandfathered?: string;
|
|
9
9
|
language?: string;
|
|
10
10
|
extlang?: string;
|
|
@@ -14,3 +14,4 @@ export declare type LanguageTag = {
|
|
|
14
14
|
extension?: string;
|
|
15
15
|
privateUse?: string;
|
|
16
16
|
};
|
|
17
|
+
//# sourceMappingURL=strings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,QAAS,MAAM,KAAG,MAErC,CAAA;AAGD,eAAO,MAAM,WAAW,QAAS,MAAM,KAAG,MAGzC,CAAA;AAED,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,MAE3C,CAAA;AAED,eAAO,MAAM,YAAY,QAAS,MAAM,KAAG,MAE1C,CAAA;AAED,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,WAAW,GAAG,IAc7D,CAAA;AAED,eAAO,MAAM,gBAAgB,YAAa,MAAM,KAAG,OAElD,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA"}
|
package/dist/strings.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
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.validateLanguage = exports.parseLanguage = exports.b64UrlToUtf8 = exports.utf8ToB64Url = exports.graphemeLen = exports.utf8Len = void 0;
|
|
30
|
+
const graphemer_1 = __importDefault(require("graphemer"));
|
|
31
|
+
const ui8 = __importStar(require("uint8arrays"));
|
|
32
|
+
// counts the number of bytes in a utf8 string
|
|
33
|
+
const utf8Len = (str) => {
|
|
34
|
+
return new TextEncoder().encode(str).byteLength;
|
|
35
|
+
};
|
|
36
|
+
exports.utf8Len = utf8Len;
|
|
37
|
+
// counts the number of graphemes (user-displayed characters) in a string
|
|
38
|
+
const graphemeLen = (str) => {
|
|
39
|
+
const splitter = new graphemer_1.default();
|
|
40
|
+
return splitter.countGraphemes(str);
|
|
41
|
+
};
|
|
42
|
+
exports.graphemeLen = graphemeLen;
|
|
43
|
+
const utf8ToB64Url = (utf8) => {
|
|
44
|
+
return ui8.toString(ui8.fromString(utf8, 'utf8'), 'base64url');
|
|
45
|
+
};
|
|
46
|
+
exports.utf8ToB64Url = utf8ToB64Url;
|
|
47
|
+
const b64UrlToUtf8 = (b64) => {
|
|
48
|
+
return ui8.toString(ui8.fromString(b64, 'base64url'), 'utf8');
|
|
49
|
+
};
|
|
50
|
+
exports.b64UrlToUtf8 = b64UrlToUtf8;
|
|
51
|
+
const parseLanguage = (langTag) => {
|
|
52
|
+
const parsed = langTag.match(bcp47Regexp);
|
|
53
|
+
if (!parsed?.groups)
|
|
54
|
+
return null;
|
|
55
|
+
const parts = parsed.groups;
|
|
56
|
+
return {
|
|
57
|
+
grandfathered: parts.grandfathered,
|
|
58
|
+
language: parts.language,
|
|
59
|
+
extlang: parts.extlang,
|
|
60
|
+
script: parts.script,
|
|
61
|
+
region: parts.region,
|
|
62
|
+
variant: parts.variant,
|
|
63
|
+
extension: parts.extension,
|
|
64
|
+
privateUse: parts.privateUseA || parts.privateUseB,
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
exports.parseLanguage = parseLanguage;
|
|
68
|
+
const validateLanguage = (langTag) => {
|
|
69
|
+
return bcp47Regexp.test(langTag);
|
|
70
|
+
};
|
|
71
|
+
exports.validateLanguage = validateLanguage;
|
|
72
|
+
// Validates well-formed BCP 47 syntax: https://www.rfc-editor.org/rfc/rfc5646.html#section-2.1
|
|
73
|
+
const bcp47Regexp = /^((?<grandfathered>(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?<language>([A-Za-z]{2,3}(-(?<extlang>[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(?<script>[A-Za-z]{4}))?(-(?<region>[A-Za-z]{2}|[0-9]{3}))?(-(?<variant>[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-(?<extension>[0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(?<privateUseA>x(-[A-Za-z0-9]{1,8})+))?)|(?<privateUseB>x(-[A-Za-z0-9]{1,8})+))$/;
|
|
74
|
+
//# sourceMappingURL=strings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAiC;AACjC,iDAAkC;AAElC,8CAA8C;AACvC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE;IAC7C,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAA;AACjD,CAAC,CAAA;AAFY,QAAA,OAAO,WAEnB;AAED,yEAAyE;AAClE,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE;IACjD,MAAM,QAAQ,GAAG,IAAI,mBAAS,EAAE,CAAA;IAChC,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;AACrC,CAAC,CAAA;AAHY,QAAA,WAAW,eAGvB;AAEM,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE;IACnD,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,CAAA;AAChE,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB;AAEM,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;IAClD,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAA;AAC/D,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB;AAEM,MAAM,aAAa,GAAG,CAAC,OAAe,EAAsB,EAAE;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,OAAO,IAAI,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;IAC3B,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW;KACnD,CAAA;AACH,CAAC,CAAA;AAdY,QAAA,aAAa,iBAczB;AAEM,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAW,EAAE;IAC3D,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAClC,CAAC,CAAA;AAFY,QAAA,gBAAgB,oBAE5B;AAaD,+FAA+F;AAC/F,MAAM,WAAW,GACf,mlBAAmlB,CAAA"}
|
package/dist/tid.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tid.d.ts","sourceRoot":"","sources":["../src/tid.ts"],"names":[],"mappings":"AAYA,qBAAa,GAAG;IACd,GAAG,EAAE,MAAM,CAAA;gBAEC,GAAG,EAAE,MAAM;IAQvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG;IAsB5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG;IAMxD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAIhC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM;IAI1C,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM;IAI1C,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,SAAS,IAAI,MAAM;IAInB,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,MAAM;IAQnB,QAAQ,IAAI,MAAM;IAKlB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAM7B,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAI3B,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAI9B,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;CAG/B;AAED,eAAe,GAAG,CAAA"}
|
package/dist/tid.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TID = void 0;
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
const TID_LEN = 13;
|
|
6
|
+
let lastTimestamp = 0;
|
|
7
|
+
let timestampCount = 0;
|
|
8
|
+
let clockid = null;
|
|
9
|
+
function dedash(str) {
|
|
10
|
+
return str.replaceAll('-', '');
|
|
11
|
+
}
|
|
12
|
+
class TID {
|
|
13
|
+
constructor(str) {
|
|
14
|
+
Object.defineProperty(this, "str", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: void 0
|
|
19
|
+
});
|
|
20
|
+
const noDashes = dedash(str);
|
|
21
|
+
if (noDashes.length !== TID_LEN) {
|
|
22
|
+
throw new Error(`Poorly formatted TID: ${noDashes.length} length`);
|
|
23
|
+
}
|
|
24
|
+
this.str = noDashes;
|
|
25
|
+
}
|
|
26
|
+
static next(prev) {
|
|
27
|
+
// javascript does not have microsecond precision
|
|
28
|
+
// instead, we append a counter to the timestamp to indicate if multiple timestamps were created within the same millisecond
|
|
29
|
+
// take max of current time & last timestamp to prevent tids moving backwards if system clock drifts backwards
|
|
30
|
+
const time = Math.max(Date.now(), lastTimestamp);
|
|
31
|
+
if (time === lastTimestamp) {
|
|
32
|
+
timestampCount++;
|
|
33
|
+
}
|
|
34
|
+
lastTimestamp = time;
|
|
35
|
+
const timestamp = time * 1000 + timestampCount;
|
|
36
|
+
// the bottom 32 clock ids can be randomized & are not guaranteed to be collision resistant
|
|
37
|
+
// we use the same clockid for all tids coming from this machine
|
|
38
|
+
if (clockid === null) {
|
|
39
|
+
clockid = Math.floor(Math.random() * 32);
|
|
40
|
+
}
|
|
41
|
+
const tid = TID.fromTime(timestamp, clockid);
|
|
42
|
+
if (!prev || tid.newerThan(prev)) {
|
|
43
|
+
return tid;
|
|
44
|
+
}
|
|
45
|
+
return TID.fromTime(prev.timestamp() + 1, clockid);
|
|
46
|
+
}
|
|
47
|
+
static nextStr(prev) {
|
|
48
|
+
return TID.next(prev ? new TID(prev) : undefined).toString();
|
|
49
|
+
}
|
|
50
|
+
static fromTime(timestamp, clockid) {
|
|
51
|
+
// base32 encode with encoding variant sort (s32)
|
|
52
|
+
const str = `${(0, util_1.s32encode)(timestamp)}${(0, util_1.s32encode)(clockid).padStart(2, '2')}`;
|
|
53
|
+
return new TID(str);
|
|
54
|
+
}
|
|
55
|
+
static fromStr(str) {
|
|
56
|
+
return new TID(str);
|
|
57
|
+
}
|
|
58
|
+
static oldestFirst(a, b) {
|
|
59
|
+
return a.compareTo(b);
|
|
60
|
+
}
|
|
61
|
+
static newestFirst(a, b) {
|
|
62
|
+
return b.compareTo(a);
|
|
63
|
+
}
|
|
64
|
+
static is(str) {
|
|
65
|
+
return dedash(str).length === TID_LEN;
|
|
66
|
+
}
|
|
67
|
+
timestamp() {
|
|
68
|
+
return (0, util_1.s32decode)(this.str.slice(0, 11));
|
|
69
|
+
}
|
|
70
|
+
clockid() {
|
|
71
|
+
return (0, util_1.s32decode)(this.str.slice(11, 13));
|
|
72
|
+
}
|
|
73
|
+
formatted() {
|
|
74
|
+
const str = this.toString();
|
|
75
|
+
return `${str.slice(0, 4)}-${str.slice(4, 7)}-${str.slice(7, 11)}-${str.slice(11, 13)}`;
|
|
76
|
+
}
|
|
77
|
+
toString() {
|
|
78
|
+
return this.str;
|
|
79
|
+
}
|
|
80
|
+
// newer > older
|
|
81
|
+
compareTo(other) {
|
|
82
|
+
if (this.str > other.str)
|
|
83
|
+
return 1;
|
|
84
|
+
if (this.str < other.str)
|
|
85
|
+
return -1;
|
|
86
|
+
return 0;
|
|
87
|
+
}
|
|
88
|
+
equals(other) {
|
|
89
|
+
return this.str === other.str;
|
|
90
|
+
}
|
|
91
|
+
newerThan(other) {
|
|
92
|
+
return this.compareTo(other) > 0;
|
|
93
|
+
}
|
|
94
|
+
olderThan(other) {
|
|
95
|
+
return this.compareTo(other) < 0;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.TID = TID;
|
|
99
|
+
exports.default = TID;
|
|
100
|
+
//# sourceMappingURL=tid.js.map
|
package/dist/tid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tid.js","sourceRoot":"","sources":["../src/tid.ts"],"names":[],"mappings":"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"}
|
package/dist/times.d.ts
CHANGED
|
@@ -3,3 +3,5 @@ export declare const MINUTE: number;
|
|
|
3
3
|
export declare const HOUR: number;
|
|
4
4
|
export declare const DAY: number;
|
|
5
5
|
export declare const lessThanAgoMs: (time: Date, range: number) => boolean;
|
|
6
|
+
export declare const addHoursToDate: (hours: number, startingDate?: Date) => Date;
|
|
7
|
+
//# sourceMappingURL=times.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"times.d.ts","sourceRoot":"","sources":["../src/times.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,OAAO,CAAA;AAC1B,eAAO,MAAM,MAAM,QAAc,CAAA;AACjC,eAAO,MAAM,IAAI,QAAc,CAAA;AAC/B,eAAO,MAAM,GAAG,QAAY,CAAA;AAE5B,eAAO,MAAM,aAAa,SAAU,IAAI,SAAS,MAAM,YAEtD,CAAA;AAED,eAAO,MAAM,cAAc,UAAW,MAAM,iBAAiB,IAAI,KAAG,IAKnE,CAAA"}
|
package/dist/times.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addHoursToDate = exports.lessThanAgoMs = exports.DAY = exports.HOUR = exports.MINUTE = exports.SECOND = void 0;
|
|
4
|
+
exports.SECOND = 1000;
|
|
5
|
+
exports.MINUTE = exports.SECOND * 60;
|
|
6
|
+
exports.HOUR = exports.MINUTE * 60;
|
|
7
|
+
exports.DAY = exports.HOUR * 24;
|
|
8
|
+
const lessThanAgoMs = (time, range) => {
|
|
9
|
+
return Date.now() < time.getTime() + range;
|
|
10
|
+
};
|
|
11
|
+
exports.lessThanAgoMs = lessThanAgoMs;
|
|
12
|
+
const addHoursToDate = (hours, startingDate) => {
|
|
13
|
+
// When date is passed, clone before calling `setHours()` so that we are not mutating the original date
|
|
14
|
+
const currentDate = startingDate ? new Date(startingDate) : new Date();
|
|
15
|
+
currentDate.setHours(currentDate.getHours() + hours);
|
|
16
|
+
return currentDate;
|
|
17
|
+
};
|
|
18
|
+
exports.addHoursToDate = addHoursToDate;
|
|
19
|
+
//# sourceMappingURL=times.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"times.js","sourceRoot":"","sources":["../src/times.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,IAAI,CAAA;AACb,QAAA,MAAM,GAAG,cAAM,GAAG,EAAE,CAAA;AACpB,QAAA,IAAI,GAAG,cAAM,GAAG,EAAE,CAAA;AAClB,QAAA,GAAG,GAAG,YAAI,GAAG,EAAE,CAAA;AAErB,MAAM,aAAa,GAAG,CAAC,IAAU,EAAE,KAAa,EAAE,EAAE;IACzD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAA;AAC5C,CAAC,CAAA;AAFY,QAAA,aAAa,iBAEzB;AAEM,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,YAAmB,EAAQ,EAAE;IACzE,uGAAuG;IACvG,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;IACtE,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAA;IACpD,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AALY,QAAA,cAAc,kBAK1B"}
|
package/dist/types.d.ts
CHANGED
|
@@ -16,5 +16,6 @@ export declare const def: {
|
|
|
16
16
|
map: Def<Record<string, unknown>>;
|
|
17
17
|
unknown: Def<unknown>;
|
|
18
18
|
};
|
|
19
|
-
export
|
|
20
|
-
export
|
|
19
|
+
export type ArrayEl<A> = A extends readonly (infer T)[] ? T : never;
|
|
20
|
+
export type NotEmptyArray<T> = [T, ...T[]];
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAS7B,eAAO,MAAM,MAAM;;;;;;;CAOlB,CAAA;AAED,eAAO,MAAM,GAAG;;;;;;CAqBf,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAA;AAEnE,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.def = exports.schema = void 0;
|
|
4
|
+
const cid_1 = require("multiformats/cid");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const cidSchema = zod_1.z
|
|
7
|
+
.any()
|
|
8
|
+
.refine((obj) => cid_1.CID.asCID(obj) !== null, {
|
|
9
|
+
message: 'Not a CID',
|
|
10
|
+
})
|
|
11
|
+
.transform((obj) => cid_1.CID.asCID(obj));
|
|
12
|
+
exports.schema = {
|
|
13
|
+
cid: cidSchema,
|
|
14
|
+
bytes: zod_1.z.instanceof(Uint8Array),
|
|
15
|
+
string: zod_1.z.string(),
|
|
16
|
+
array: zod_1.z.array(zod_1.z.unknown()),
|
|
17
|
+
map: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
|
|
18
|
+
unknown: zod_1.z.unknown(),
|
|
19
|
+
};
|
|
20
|
+
exports.def = {
|
|
21
|
+
cid: {
|
|
22
|
+
name: 'cid',
|
|
23
|
+
schema: exports.schema.cid,
|
|
24
|
+
},
|
|
25
|
+
bytes: {
|
|
26
|
+
name: 'bytes',
|
|
27
|
+
schema: exports.schema.bytes,
|
|
28
|
+
},
|
|
29
|
+
string: {
|
|
30
|
+
name: 'string',
|
|
31
|
+
schema: exports.schema.string,
|
|
32
|
+
},
|
|
33
|
+
map: {
|
|
34
|
+
name: 'map',
|
|
35
|
+
schema: exports.schema.map,
|
|
36
|
+
},
|
|
37
|
+
unknown: {
|
|
38
|
+
name: 'unknown',
|
|
39
|
+
schema: exports.schema.unknown,
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,0CAAsC;AACtC,6BAAuB;AAGvB,MAAM,SAAS,GAAG,OAAC;KAChB,GAAG,EAAE;KACL,MAAM,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,SAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;IACjD,OAAO,EAAE,WAAW;CACrB,CAAC;KACD,SAAS,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,SAAG,CAAC,KAAK,CAAC,GAAG,CAAQ,CAAC,CAAA;AAExC,QAAA,MAAM,GAAG;IACpB,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,OAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IAC/B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC;IAC3B,GAAG,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC;IACtC,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE;CACrB,CAAA;AAEY,QAAA,GAAG,GAAG;IACjB,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,cAAM,CAAC,GAAG;KACP;IACb,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,cAAM,CAAC,KAAK;KACF;IACpB,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,cAAM,CAAC,MAAM;KACP;IAChB,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,cAAM,CAAC,GAAG;KACa;IACjC,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,cAAM,CAAC,OAAO;KACP;CAClB,CAAA"}
|
package/dist/util.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
export declare const noUndefinedVals: <T>(obj: Record<string, T>) => Record<string, T>;
|
|
2
|
+
export declare const noUndefinedVals: <T>(obj: Record<string, T | undefined>) => Record<string, T>;
|
|
3
3
|
export declare const jitter: (maxMs: number) => number;
|
|
4
4
|
export declare const wait: (ms: number) => Promise<unknown>;
|
|
5
|
-
export
|
|
5
|
+
export type BailableWait = {
|
|
6
6
|
bail: () => void;
|
|
7
7
|
wait: () => Promise<void>;
|
|
8
8
|
};
|
|
@@ -18,3 +18,4 @@ export declare const chunkArray: <T>(arr: T[], chunkSize: number) => T[][];
|
|
|
18
18
|
export declare const range: (num: number) => number[];
|
|
19
19
|
export declare const dedupeStrs: (strs: string[]) => string[];
|
|
20
20
|
export declare const parseIntWithFallback: <T>(value: string | undefined, fallback: T) => number | T;
|
|
21
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";AAAA,eAAO,MAAM,eAAe,8DAS3B,CAAA;AAED,eAAO,MAAM,MAAM,UAAW,MAAM,WAEnC,CAAA;AAED,eAAO,MAAM,IAAI,OAAQ,MAAM,qBAE9B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,YAAY,OAAQ,MAAM,KAAG,YAUzC,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAU,UAAU,EAAE,KAAG,UAWvD,CAAA;AAED,eAAO,MAAM,cAAc,WACjB,cAAc,UAAU,CAAC,KAChC,QAAQ,UAAU,CAMpB,CAAA;AAID,eAAO,MAAM,SAAS,MAAO,MAAM,KAAG,MAQrC,CAAA;AAED,eAAO,MAAM,SAAS,MAAO,MAAM,KAAG,MAMrC,CAAA;AAED,eAAO,MAAM,WAAW,8BAER,QAAQ,OAAO,CAAC,iBAI/B,CAAA;AAED,eAAO,MAAM,gBAAgB,QACtB,OAAO,iCAGb,CAAA;AAED,eAAO,MAAM,SAAS,QAAS,OAAO,OAAO,MAAM,KAAG,OAErD,CAAA;AAED,eAAO,MAAM,UAAU,2BAA4B,MAAM,UASxD,CAAA;AAED,eAAO,MAAM,KAAK,QAAS,MAAM,KAAG,MAAM,EAMzC,CAAA;AAED,eAAO,MAAM,UAAU,SAAU,MAAM,EAAE,KAAG,MAAM,EAEjD,CAAA;AAED,eAAO,MAAM,oBAAoB,aACxB,MAAM,GAAG,SAAS,4BAK1B,CAAA"}
|