@atproto/common-web 0.4.2 → 0.4.4

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 CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atproto/common-web
2
2
 
3
+ ## 0.4.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [#4366](https://github.com/bluesky-social/atproto/pull/4366) [`261968fd6`](https://github.com/bluesky-social/atproto/commit/261968fd65014ded613e2bf085d61a7864b8fba7) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Use native base64 encoding/decoding when available
8
+
9
+ - [#4366](https://github.com/bluesky-social/atproto/pull/4366) [`261968fd6`](https://github.com/bluesky-social/atproto/commit/261968fd65014ded613e2bf085d61a7864b8fba7) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Fix computation of grapheme length
10
+
11
+ - [#4366](https://github.com/bluesky-social/atproto/pull/4366) [`261968fd6`](https://github.com/bluesky-social/atproto/commit/261968fd65014ded613e2bf085d61a7864b8fba7) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Deprecate "ipld" functions (use `@atproto/lex-data`, `@atproto/lex-json` and `@atproto/lex-cbor` instead)
12
+
13
+ ## 0.4.3
14
+
15
+ ### Patch Changes
16
+
17
+ - [#4169](https://github.com/bluesky-social/atproto/pull/4169) [`055a413fb`](https://github.com/bluesky-social/atproto/commit/055a413fba4fab510ec899377154f1204ab12099) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Expose `aggregateErrors` utility
18
+
3
19
  ## 0.4.2
4
20
 
5
21
  ### Patch Changes
package/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  Dual MIT/Apache-2.0 License
2
2
 
3
- Copyright (c) 2022-2025 Bluesky PBC, and Contributors
3
+ Copyright (c) 2022-2025 Bluesky Social PBC, and Contributors
4
4
 
5
5
  Except as otherwise noted in individual files, this software is licensed under the MIT license (<http://opensource.org/licenses/MIT>), or the Apache License, Version 2.0 (<http://www.apache.org/licenses/LICENSE-2.0>).
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../src/arrays.ts"],"names":[],"mappings":";;;AAAA,sBAQC;AARD,SAAgB,KAAK,CACnB,GAAiB,EACjB,GAAM;IAEN,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;QACtB,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,IAAI,GAAG,EAAW,CAAC,CAAA;AACxB,CAAC;AAEM,MAAM,UAAU,GAAG,CACxB,GAAQ,EACR,EAA6B,EACxB,EAAE;IACP,MAAM,MAAM,GAAQ,EAAE,CAAA;IACtB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QACpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAZY,QAAA,UAAU,cAYtB"}
1
+ {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../src/arrays.ts"],"names":[],"mappings":";;;AAAA,sBAQC;AARD,SAAgB,KAAK,CACnB,GAAiB,EACjB,GAAM;IAEN,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;QACtB,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,IAAI,GAAG,EAAW,CAAC,CAAA;AACxB,CAAC;AAEM,MAAM,UAAU,GAAG,CACxB,GAAQ,EACR,EAA6B,EACxB,EAAE;IACP,MAAM,MAAM,GAAQ,EAAE,CAAA;IACtB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QACpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAZY,QAAA,UAAU,cAYtB","sourcesContent":["export function keyBy<T, K extends keyof T>(\n arr: readonly T[],\n key: K,\n): Map<T[K], T> {\n return arr.reduce((acc, cur) => {\n acc.set(cur[key], cur)\n return acc\n }, new Map<T[K], T>())\n}\n\nexport const mapDefined = <T, S>(\n arr: T[],\n fn: (obj: T) => S | undefined,\n): S[] => {\n const output: S[] = []\n for (const item of arr) {\n const val = fn(item)\n if (val !== undefined) {\n output.push(val)\n }\n }\n return output\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB,GAAU,CAAC,EACvC,KAAK,cAAc,CAAC,CAAC,CAAC,EACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,EAChD,UAAS,OAAO,CAAC,OAAO,CAAqB,EAC7C,kBAAmC,KAClC,OAAO,CAAC,CAAC,EAAE,CAiCb,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,UAMnC,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,UAAU,EAM3D,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,aAAa,UAAU,EAAE,KAAG,OAAO,CAAC,IAAI,CAEzE,CAAA;AAED,qBAAa,WAAW,CAAC,CAAC;IAOL,OAAO,CAAC,EAAE,MAAM;IANnC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAqB;gBAEjB,OAAO,CAAC,EAAE,MAAM,YAAA;IAOnC,IAAI,IAAI,IAAI,CAAC,EAAE,CAEd;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,YAAY;IAIZ,IAAI,CAAC,IAAI,EAAE,CAAC;IAKZ,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE;IAKZ,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC;IA0BlC,KAAK,CAAC,GAAG,EAAE,OAAO;IAMlB,KAAK;CAIN;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAG5B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE,EAC5D,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,CAAA;AACvD,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,QAAQ,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GACrC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAOxB,wBAAgB,sBAAsB,CACpC,CAAC,SAAS,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAEvD,OAAO,EAAE,CAAC,GACT;IACD,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,oBAAoB,CAAC,MAAM,CAAC,CAAC,GAChE,CAAC,GACD,KAAK;CACV,CAAA;AACD,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,GACjC,CAAC,EAAE,CAAA;AAkBN,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,GACpC,MAAM,IAAI,qBAAqB,CAEjC;AAMD,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC9B,MAAM,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAErC"}
1
+ {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB,GAAU,CAAC,EACvC,KAAK,cAAc,CAAC,CAAC,CAAC,EACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,EAChD,UAAS,OAAO,CAAC,OAAO,CAAqB,EAC7C,kBAAmC,KAClC,OAAO,CAAC,CAAC,EAAE,CAiCb,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,UAMnC,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,UAAU,EAM3D,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,aAAa,UAAU,EAAE,KAAG,OAAO,CAAC,IAAI,CAEzE,CAAA;AAED,qBAAa,WAAW,CAAC,CAAC;IAOL,OAAO,CAAC,EAAE,MAAM;IANnC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAqB;gBAEjB,OAAO,CAAC,EAAE,MAAM,YAAA;IAOnC,IAAI,IAAI,IAAI,CAAC,EAAE,CAEd;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,YAAY;IAIZ,IAAI,CAAC,IAAI,EAAE,CAAC;IAKZ,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE;IAKZ,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC;IA0BlC,KAAK,CAAC,GAAG,EAAE,OAAO;IAMlB,KAAK;CAIN;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAG5B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE,EAC5D,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,CAAA;AACvD,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,QAAQ,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GACrC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAOxB,wBAAgB,sBAAsB,CACpC,CAAC,SAAS,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAEvD,OAAO,EAAE,CAAC,GACT;IACD,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,oBAAoB,CAAC,MAAM,CAAC,CAAC,GAChE,CAAC,GACD,KAAK;CACV,CAAA;AACD,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,GACjC,CAAC,EAAE,CAAA;AAUN,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,GACpC,MAAM,IAAI,qBAAqB,CAEjC;AAMD,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC9B,MAAM,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAErC"}
package/dist/async.js CHANGED
@@ -178,15 +178,10 @@ function allFulfilled(promises) {
178
178
  return Promise.allSettled(promises).then(handleAllSettledErrors);
179
179
  }
180
180
  function handleAllSettledErrors(results) {
181
- const errors = results.filter(isRejectedResult).map(extractReason);
182
- if (errors.length === 0) {
183
- // No need to filter here, it is safe to assume that all promises are fulfilled
181
+ if (results.every(isFulfilledResult))
184
182
  return results.map(extractValue);
185
- }
186
- if (errors.length === 1) {
187
- throw errors[0];
188
- }
189
- throw new AggregateError(errors, `Multiple errors: ${errors.map(stringifyReason).join('\n')}`);
183
+ const errors = results.filter(isRejectedResult).map(extractReason);
184
+ throw (0, util_1.aggregateErrors)(errors);
190
185
  }
191
186
  function isRejectedResult(result) {
192
187
  return result.status === 'rejected';
@@ -200,10 +195,4 @@ function isFulfilledResult(result) {
200
195
  function extractValue(result) {
201
196
  return result.value;
202
197
  }
203
- function stringifyReason(reason) {
204
- if (reason instanceof Error) {
205
- return reason.message;
206
- }
207
- return String(reason);
208
- }
209
198
  //# sourceMappingURL=async.js.map
package/dist/async.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"async.js","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":";;;AAqKA,oCAIC;AAcD,wDAOC;AAED,4CAIC;AAMD,8CAIC;AA9MD,iCAAsD;AAEtD,4CAA4C;AAC5C,4FAA4F;AAC5F,iFAAiF;AAC1E,MAAM,iBAAiB,GAAG,KAAK,EACpC,GAAsB,EACtB,MAAgD,EAChD,UAA4B,OAAO,CAAC,OAAO,EAAE,EAC7C,SAAS,GAAG,MAAM,CAAC,gBAAgB,EACrB,EAAE;IAChB,MAAM,IAAI,GAAQ,EAAE,CAAA;IACpB,IAAI,IAA8B,CAAA;IAClC,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,QAAQ,GAAG,IAAA,mBAAY,EAAC,EAAE,CAAC,CAAA;QACjC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QACrB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;QACpB,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAA;QAC1B,OAAO,MAAM,SAAS,EAAE,CAAA;IAC1B,CAAC,CAAA;IACD,MAAM,OAAO,GAAkB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACrD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;YAC1D,IAAI,CAAC,QAAQ;gBAAE,MAAK;YACpB,MAAM,GAAG,GAAG,QAA6B,CAAA;YACzC,IAAI,GAAG,CAAC,IAAI;gBAAE,MAAK;YACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,QAAQ,GAAG,IAAI,CAAA;QACf,IAAI,IAAI,IAAI,EAAE,CAAA;IAChB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAtCY,QAAA,iBAAiB,qBAsC7B;AAOM,MAAM,gBAAgB,GAAG,GAAe,EAAE;IAC/C,IAAI,OAAO,CAAA;IACX,MAAM,OAAO,GAAkB,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACjD,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAA;IACvB,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;AACvC,CAAC,CAAA;AANY,QAAA,gBAAgB,oBAM5B;AAEM,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAgB,EAAE;IAC/D,MAAM,IAAI,GAAiB,EAAE,CAAA;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAA,wBAAgB,GAAE,CAAC,CAAA;IAC/B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AANY,QAAA,iBAAiB,qBAM7B;AAEM,MAAM,WAAW,GAAG,KAAK,EAAE,WAAyB,EAAiB,EAAE;IAC5E,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;AACvD,CAAC,CAAA;AAFY,QAAA,WAAW,eAEvB;AAED,MAAa,WAAW;IAOtB,YAAmB,OAAgB;QAAvB;;;;mBAAO,OAAO;WAAS;QAN3B;;;;mBAAc,EAAE;WAAA;QAChB;;;;;WAAsB;QACtB;;;;;WAAmB;QACnB;;;;mBAAS,KAAK;WAAA;QACd;;;;;WAA4B;QAGlC,2EAA2E;QAC3E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;QACzB,IAAI,CAAC,YAAY,EAAE,CAAA;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;IAC3B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,YAAY;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,CAAC,IAAO;QACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,QAAQ,CAAC,KAAU;QACjB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACzC,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,CAAC,MAAM;QACX,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,IAAI,CAAC,OAAO,CAAA;gBACpB,CAAC;qBAAM,CAAC;oBACN,OAAM;gBACR,CAAC;YACH,CAAC;YACD,MAAM,IAAI,CAAC,OAAO,CAAA;YAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,IAAI,CAAC,OAAO,CAAA;YACpB,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC7C,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC9C,CAAC;YACD,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;gBAClB,MAAM,KAAK,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,EAAE,CAAA;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAY;QAChB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;CACF;AA5ED,kCA4EC;AAED,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAA;IAC3C,CAAC;CACF;AAJD,oDAIC;AAaD,SAAgB,YAAY,CAC1B,QAAoC;IAEpC,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAClE,CAAC;AAcD,SAAgB,sBAAsB,CACpC,OAAwC;IAExC,IAAI,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAEtE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAClE,MAAM,IAAA,sBAAe,EAAC,MAAM,CAAC,CAAA;AAC/B,CAAC;AAED,SAAgB,gBAAgB,CAC9B,MAAqC;IAErC,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,CAAA;AACrC,CAAC;AAED,SAAS,aAAa,CAAC,MAA6B;IAClD,OAAO,MAAM,CAAC,MAAM,CAAA;AACtB,CAAC;AAED,SAAgB,iBAAiB,CAC/B,MAA+B;IAE/B,OAAO,MAAM,CAAC,MAAM,KAAK,WAAW,CAAA;AACtC,CAAC;AAED,SAAS,YAAY,CAAI,MAAiC;IACxD,OAAO,MAAM,CAAC,KAAK,CAAA;AACrB,CAAC","sourcesContent":["import { aggregateErrors, bailableWait } from './util'\n\n// reads values from a generator into a list\n// breaks when isDone signals `true` AND `waitFor` completes OR when a max length is reached\n// NOTE: does not signal generator to close. it *will* continue to produce values\nexport const readFromGenerator = async <T>(\n gen: AsyncGenerator<T>,\n isDone: (last?: T) => Promise<boolean> | boolean,\n waitFor: Promise<unknown> = Promise.resolve(),\n maxLength = Number.MAX_SAFE_INTEGER,\n): Promise<T[]> => {\n const evts: T[] = []\n let bail: undefined | (() => void)\n let hasBroke = false\n const awaitDone = async () => {\n if (await isDone(evts.at(-1))) {\n return true\n }\n const bailable = bailableWait(20)\n await bailable.wait()\n bail = bailable.bail\n if (hasBroke) return false\n return await awaitDone()\n }\n const breakOn: Promise<void> = new Promise((resolve) => {\n waitFor.then(() => {\n awaitDone().then(() => resolve())\n })\n })\n\n try {\n while (evts.length < maxLength) {\n const maybeEvt = await Promise.race([gen.next(), breakOn])\n if (!maybeEvt) break\n const evt = maybeEvt as IteratorResult<T>\n if (evt.done) break\n evts.push(evt.value)\n }\n } finally {\n hasBroke = true\n bail && bail()\n }\n return evts\n}\n\nexport type Deferrable = {\n resolve: () => void\n complete: Promise<void>\n}\n\nexport const createDeferrable = (): Deferrable => {\n let resolve\n const promise: Promise<void> = new Promise((res) => {\n resolve = () => res()\n })\n return { resolve, complete: promise }\n}\n\nexport const createDeferrables = (count: number): Deferrable[] => {\n const list: Deferrable[] = []\n for (let i = 0; i < count; i++) {\n list.push(createDeferrable())\n }\n return list\n}\n\nexport const allComplete = async (deferrables: Deferrable[]): Promise<void> => {\n await Promise.all(deferrables.map((d) => d.complete))\n}\n\nexport class AsyncBuffer<T> {\n private buffer: T[] = []\n private promise: Promise<void>\n private resolve: () => void\n private closed = false\n private toThrow: unknown | undefined\n\n constructor(public maxSize?: number) {\n // Initializing to satisfy types/build, immediately reset by resetPromise()\n this.promise = Promise.resolve()\n this.resolve = () => null\n this.resetPromise()\n }\n\n get curr(): T[] {\n return this.buffer\n }\n\n get size(): number {\n return this.buffer.length\n }\n\n get isClosed(): boolean {\n return this.closed\n }\n\n resetPromise() {\n this.promise = new Promise<void>((r) => (this.resolve = r))\n }\n\n push(item: T) {\n this.buffer.push(item)\n this.resolve()\n }\n\n pushMany(items: T[]) {\n items.forEach((i) => this.buffer.push(i))\n this.resolve()\n }\n\n async *events(): AsyncGenerator<T> {\n while (true) {\n if (this.closed && this.buffer.length === 0) {\n if (this.toThrow) {\n throw this.toThrow\n } else {\n return\n }\n }\n await this.promise\n if (this.toThrow) {\n throw this.toThrow\n }\n if (this.maxSize && this.size > this.maxSize) {\n throw new AsyncBufferFullError(this.maxSize)\n }\n const [first, ...rest] = this.buffer\n if (first) {\n this.buffer = rest\n yield first\n } else {\n this.resetPromise()\n }\n }\n }\n\n throw(err: unknown) {\n this.toThrow = err\n this.closed = true\n this.resolve()\n }\n\n close() {\n this.closed = true\n this.resolve()\n }\n}\n\nexport class AsyncBufferFullError extends Error {\n constructor(maxSize: number) {\n super(`ReachedMaxBufferSize: ${maxSize}`)\n }\n}\n\n/**\n * Utility function that behaves like {@link Promise.allSettled} but returns the\n * same result as {@link Promise.all} in case every promise is fulfilled, and\n * throws an {@link AggregateError} if there are more than one errors.\n */\nexport function allFulfilled<T extends readonly unknown[] | []>(\n promises: T,\n): Promise<{ -readonly [P in keyof T]: Awaited<T[P]> }>\nexport function allFulfilled<T>(\n promises: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>[]>\nexport function allFulfilled(\n promises: Iterable<Promise<unknown>>,\n): Promise<unknown[]> {\n return Promise.allSettled(promises).then(handleAllSettledErrors)\n}\n\nexport function handleAllSettledErrors<\n T extends readonly PromiseSettledResult<unknown>[] | [],\n>(\n results: T,\n): {\n -readonly [P in keyof T]: T[P] extends PromiseSettledResult<infer U>\n ? U\n : never\n}\nexport function handleAllSettledErrors<T>(\n results: PromiseSettledResult<T>[],\n): T[]\nexport function handleAllSettledErrors(\n results: PromiseSettledResult<unknown>[],\n): unknown[] {\n if (results.every(isFulfilledResult)) return results.map(extractValue)\n\n const errors = results.filter(isRejectedResult).map(extractReason)\n throw aggregateErrors(errors)\n}\n\nexport function isRejectedResult(\n result: PromiseSettledResult<unknown>,\n): result is PromiseRejectedResult {\n return result.status === 'rejected'\n}\n\nfunction extractReason(result: PromiseRejectedResult): unknown {\n return result.reason\n}\n\nexport function isFulfilledResult<T>(\n result: PromiseSettledResult<T>,\n): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nfunction extractValue<T>(result: PromiseFulfilledResult<T>): T {\n return result.value\n}\n"]}
package/dist/check.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,uBAAuB;;;AAchB,MAAM,EAAE,GAAG,CAAI,GAAY,EAAE,GAAiB,EAAY,EAAE;IACjE,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAA;AACnC,CAAC,CAAA;AAFY,QAAA,EAAE,MAEd;AAEM,MAAM,MAAM,GACjB,CAAI,GAAiB,EAAE,EAAE,CACzB,CAAC,CAAU,EAAU,EAAE,CACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;AAHf,QAAA,MAAM,UAGS;AAErB,MAAM,MAAM,GAAG,CAAI,GAAiB,EAAE,GAAY,EAAK,EAAE;IAC9D,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC,CAAA;AAFY,QAAA,MAAM,UAElB;AAEM,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAkC,EAAE;IACvE,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAA;AAChD,CAAC,CAAA;AAFY,QAAA,QAAQ,YAEpB"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,uBAAuB;;;AAchB,MAAM,EAAE,GAAG,CAAI,GAAY,EAAE,GAAiB,EAAY,EAAE;IACjE,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAA;AACnC,CAAC,CAAA;AAFY,QAAA,EAAE,MAEd;AAEM,MAAM,MAAM,GACjB,CAAI,GAAiB,EAAE,EAAE,CACzB,CAAC,CAAU,EAAU,EAAE,CACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;AAHf,QAAA,MAAM,UAGS;AAErB,MAAM,MAAM,GAAG,CAAI,GAAiB,EAAE,GAAY,EAAK,EAAE;IAC9D,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC,CAAA;AAFY,QAAA,MAAM,UAElB;AAEM,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAkC,EAAE;IACvE,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAA;AAChD,CAAC,CAAA;AAFY,QAAA,QAAQ,YAEpB","sourcesContent":["// Explicitly not using \"zod\" types here to avoid mismatching types due to\n// version differences.\n\nexport interface Checkable<T> {\n parse: (obj: unknown) => T\n safeParse: (\n obj: unknown,\n ) => { success: true; data: T } | { success: false; error: Error }\n}\n\nexport interface Def<T> {\n name: string\n schema: Checkable<T>\n}\n\nexport const is = <T>(obj: unknown, def: Checkable<T>): obj is T => {\n return def.safeParse(obj).success\n}\n\nexport const create =\n <T>(def: Checkable<T>) =>\n (v: unknown): v is T =>\n def.safeParse(v).success\n\nexport const assure = <T>(def: Checkable<T>, obj: unknown): T => {\n return def.parse(obj)\n}\n\nexport const isObject = (obj: unknown): obj is Record<string, unknown> => {\n return typeof obj === 'object' && obj !== null\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"did-doc.js","sourceRoot":"","sources":["../src/did-doc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"did-doc.js","sourceRoot":"","sources":["../src/did-doc.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\n\n// Parsing atproto data\n// --------\n\nexport const isValidDidDoc = (doc: unknown): doc is DidDocument => {\n return didDocument.safeParse(doc).success\n}\n\nexport const getDid = (doc: DidDocument): string => {\n const id = doc.id\n if (typeof id !== 'string') {\n throw new Error('No `id` on document')\n }\n return id\n}\n\nexport const getHandle = (doc: DidDocument): string | undefined => {\n const aka = doc.alsoKnownAs\n if (aka) {\n for (let i = 0; i < aka.length; i++) {\n const alias = aka[i]\n if (alias.startsWith('at://')) {\n // strip off \"at://\" prefix\n return alias.slice(5)\n }\n }\n }\n return undefined\n}\n\n// @NOTE we parse to type/publicKeyMultibase to avoid the dependency on @atproto/crypto\nexport const getSigningKey = (\n doc: DidDocument,\n): { type: string; publicKeyMultibase: string } | undefined => {\n return getVerificationMaterial(doc, 'atproto')\n}\n\nexport const getVerificationMaterial = (\n doc: DidDocument,\n keyId: string,\n): { type: string; publicKeyMultibase: string } | undefined => {\n // /!\\ Hot path\n\n const key = findItemById(doc, 'verificationMethod', `#${keyId}`)\n if (!key) {\n return undefined\n }\n\n if (!key.publicKeyMultibase) {\n return undefined\n }\n\n return {\n type: key.type,\n publicKeyMultibase: key.publicKeyMultibase,\n }\n}\n\nexport const getSigningDidKey = (doc: DidDocument): string | undefined => {\n const parsed = getSigningKey(doc)\n if (!parsed) return\n return `did:key:${parsed.publicKeyMultibase}`\n}\n\nexport const getPdsEndpoint = (doc: DidDocument): string | undefined => {\n return getServiceEndpoint(doc, {\n id: '#atproto_pds',\n type: 'AtprotoPersonalDataServer',\n })\n}\n\nexport const getFeedGenEndpoint = (doc: DidDocument): string | undefined => {\n return getServiceEndpoint(doc, {\n id: '#bsky_fg',\n type: 'BskyFeedGenerator',\n })\n}\n\nexport const getNotifEndpoint = (doc: DidDocument): string | undefined => {\n return getServiceEndpoint(doc, {\n id: '#bsky_notif',\n type: 'BskyNotificationService',\n })\n}\n\nexport const getServiceEndpoint = (\n doc: DidDocument,\n opts: { id: string; type?: string },\n) => {\n // /!\\ Hot path\n\n const service = findItemById(doc, 'service', opts.id)\n if (!service) {\n return undefined\n }\n\n if (opts.type && service.type !== opts.type) {\n return undefined\n }\n\n if (typeof service.serviceEndpoint !== 'string') {\n return undefined\n }\n\n return validateUrl(service.serviceEndpoint)\n}\n\nfunction findItemById<\n D extends DidDocument,\n T extends 'verificationMethod' | 'service',\n>(doc: D, type: T, id: string): NonNullable<D[T]>[number] | undefined\nfunction findItemById(\n doc: DidDocument,\n type: 'verificationMethod' | 'service',\n id: string,\n) {\n // /!\\ Hot path\n\n const items = doc[type]\n if (items) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const itemId = item.id\n\n if (\n itemId[0] === '#'\n ? itemId === id\n : // Optimized version of: itemId === `${doc.id}${id}`\n itemId.length === doc.id.length + id.length &&\n itemId[doc.id.length] === '#' &&\n itemId.endsWith(id) &&\n itemId.startsWith(doc.id) // <== We could probably skip this check\n ) {\n return item\n }\n }\n }\n return undefined\n}\n\n// Check protocol and hostname to prevent potential SSRF\nconst validateUrl = (urlStr: string): string | undefined => {\n if (!urlStr.startsWith('http://') && !urlStr.startsWith('https://')) {\n return undefined\n }\n\n if (!canParseUrl(urlStr)) {\n return undefined\n }\n\n return urlStr\n}\n\nconst canParseUrl =\n URL.canParse ??\n // URL.canParse is not available in Node.js < 18.17.0\n ((urlStr: string): boolean => {\n try {\n new URL(urlStr)\n return true\n } catch {\n return false\n }\n })\n\n// Types\n// --------\n\nconst verificationMethod = z.object({\n id: z.string(),\n type: z.string(),\n controller: z.string(),\n publicKeyMultibase: z.string().optional(),\n})\n\nconst service = z.object({\n id: z.string(),\n type: z.string(),\n serviceEndpoint: z.union([z.string(), z.record(z.unknown())]),\n})\n\nexport const didDocument = z.object({\n id: z.string(),\n alsoKnownAs: z.array(z.string()).optional(),\n verificationMethod: z.array(verificationMethod).optional(),\n service: z.array(service).optional(),\n})\n\nexport type DidDocument = z.infer<typeof didDocument>\n"]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAgC;AAChC,+CAA8B;AAE9B,2CAAwB;AACxB,0CAAuB;AACvB,yCAAsB;AACtB,wCAAqB;AACrB,yCAAsB;AACtB,0CAAuB;AACvB,0CAAuB;AACvB,0CAAuB;AACvB,4CAAyB;AACzB,4CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAgC;AAChC,+CAA8B;AAE9B,2CAAwB;AACxB,0CAAuB;AACvB,yCAAsB;AACtB,wCAAqB;AACrB,yCAAsB;AACtB,0CAAuB;AACvB,0CAAuB;AACvB,0CAAuB;AACvB,4CAAyB;AACzB,4CAAyB","sourcesContent":["export * as check from './check'\nexport * as util from './util'\n\nexport * from './arrays'\nexport * from './async'\nexport * from './util'\nexport * from './tid'\nexport * from './ipld'\nexport * from './retry'\nexport * from './types'\nexport * from './times'\nexport * from './strings'\nexport * from './did-doc'\n"]}
package/dist/ipld.d.ts CHANGED
@@ -1,11 +1,25 @@
1
- import { CID } from 'multiformats/cid';
2
- export type JsonValue = boolean | number | string | null | undefined | unknown | Array<JsonValue> | {
3
- [key: string]: JsonValue;
4
- };
5
- export type IpldValue = JsonValue | CID | Uint8Array | Array<IpldValue> | {
6
- [key: string]: IpldValue;
7
- };
8
- export declare const jsonToIpld: (val: JsonValue) => IpldValue;
9
- export declare const ipldToJson: (val: IpldValue) => JsonValue;
1
+ /**
2
+ * @deprecated Use {@link JsonValue} from `@atproto/lex-cbor` instead.
3
+ */
4
+ export type LegacyJsonValue = unknown;
5
+ export type { LegacyJsonValue as JsonValue };
6
+ /**
7
+ * @deprecated Use {@link LexValue} from `@atproto/lex-cbor` instead.
8
+ */
9
+ export type IpldValue = unknown;
10
+ /**
11
+ * Converts a JSON-compatible value to an IPLD-compatible value.
12
+ * @deprecated Use {@link jsonToLex} from `@atproto/lex-cbor` instead.
13
+ */
14
+ export declare const jsonToIpld: (val: LegacyJsonValue) => IpldValue;
15
+ /**
16
+ * Converts an IPLD-compatible value to a JSON-compatible value.
17
+ * @deprecated Use {@link lexToJson} from `@atproto/lex-cbor` instead.
18
+ */
19
+ export declare const ipldToJson: (val: IpldValue) => LegacyJsonValue;
20
+ /**
21
+ * Compares two IPLD-compatible values for deep equality.
22
+ * @deprecated Use {@link lexEquals} from `@atproto/lex-cbor` instead.
23
+ */
10
24
  export declare const ipldEquals: (a: IpldValue, b: IpldValue) => boolean;
11
25
  //# sourceMappingURL=ipld.d.ts.map
@@ -1 +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,GAAI,KAAK,SAAS,KAAG,SAuB3C,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,KAAK,SAAS,KAAG,SA4B3C,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,GAAG,SAAS,EAAE,GAAG,SAAS,KAAG,OA2BvD,CAAA"}
1
+ {"version":3,"file":"ipld.d.ts","sourceRoot":"","sources":["../src/ipld.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,CAAA;AAErC,YAAY,EAAE,eAAe,IAAI,SAAS,EAAE,CAAA;AAE5C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,CAAA;AAE/B;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,eAAe,KAAG,SAEjD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,SAAS,KAAG,eAM3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,GAAG,SAAS,EAAE,GAAG,SAAS,KAAG,OAQvD,CAAA"}
package/dist/ipld.js CHANGED
@@ -1,129 +1,41 @@
1
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 () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.ipldEquals = exports.ipldToJson = exports.jsonToIpld = void 0;
37
- const cid_1 = require("multiformats/cid");
38
- const ui8 = __importStar(require("uint8arrays"));
39
- // @NOTE avoiding use of check.is() here only because it makes
40
- // these implementations slow, and they often live in hot paths.
4
+ const lex_data_1 = require("@atproto/lex-data");
5
+ const lex_json_1 = require("@atproto/lex-json");
6
+ /**
7
+ * Converts a JSON-compatible value to an IPLD-compatible value.
8
+ * @deprecated Use {@link jsonToLex} from `@atproto/lex-cbor` instead.
9
+ */
41
10
  const jsonToIpld = (val) => {
42
- // walk arrays
43
- if (Array.isArray(val)) {
44
- return val.map((item) => (0, exports.jsonToIpld)(item));
45
- }
46
- // objects
47
- if (val && typeof val === 'object') {
48
- // check for dag json values
49
- if (typeof val['$link'] === 'string' && Object.keys(val).length === 1) {
50
- return cid_1.CID.parse(val['$link']);
51
- }
52
- if (typeof val['$bytes'] === 'string' && Object.keys(val).length === 1) {
53
- return ui8.fromString(val['$bytes'], 'base64');
54
- }
55
- // walk plain objects
56
- const toReturn = {};
57
- for (const key of Object.keys(val)) {
58
- toReturn[key] = (0, exports.jsonToIpld)(val[key]);
59
- }
60
- return toReturn;
61
- }
62
- // pass through
63
- return val;
11
+ return (0, lex_json_1.jsonToLex)(val, { strict: false });
64
12
  };
65
13
  exports.jsonToIpld = jsonToIpld;
14
+ /**
15
+ * Converts an IPLD-compatible value to a JSON-compatible value.
16
+ * @deprecated Use {@link lexToJson} from `@atproto/lex-cbor` instead.
17
+ */
66
18
  const ipldToJson = (val) => {
67
- // walk arrays
68
- if (Array.isArray(val)) {
69
- return val.map((item) => (0, exports.ipldToJson)(item));
70
- }
71
- // objects
72
- if (val && typeof val === 'object') {
73
- // convert bytes
74
- if (val instanceof Uint8Array) {
75
- return {
76
- $bytes: ui8.toString(val, 'base64'),
77
- };
78
- }
79
- // convert cids
80
- if (cid_1.CID.asCID(val)) {
81
- return {
82
- $link: val.toString(),
83
- };
84
- }
85
- // walk plain objects
86
- const toReturn = {};
87
- for (const key of Object.keys(val)) {
88
- toReturn[key] = (0, exports.ipldToJson)(val[key]);
89
- }
90
- return toReturn;
91
- }
92
- // pass through
93
- return val;
19
+ // Legacy behavior(s)
20
+ if (val === undefined)
21
+ return val;
22
+ if (Number.isNaN(val))
23
+ return val;
24
+ return (0, lex_json_1.lexToJson)(val);
94
25
  };
95
26
  exports.ipldToJson = ipldToJson;
27
+ /**
28
+ * Compares two IPLD-compatible values for deep equality.
29
+ * @deprecated Use {@link lexEquals} from `@atproto/lex-cbor` instead.
30
+ */
96
31
  const ipldEquals = (a, b) => {
97
- // walk arrays
98
- if (Array.isArray(a) && Array.isArray(b)) {
99
- if (a.length !== b.length)
100
- return false;
101
- for (let i = 0; i < a.length; i++) {
102
- if (!(0, exports.ipldEquals)(a[i], b[i]))
103
- return false;
104
- }
105
- return true;
106
- }
107
- // objects
108
- if (a && b && typeof a === 'object' && typeof b === 'object') {
109
- // check bytes
110
- if (a instanceof Uint8Array && b instanceof Uint8Array) {
111
- return ui8.equals(a, b);
112
- }
113
- // check cids
114
- if (cid_1.CID.asCID(a) && cid_1.CID.asCID(b)) {
115
- return cid_1.CID.asCID(a)?.equals(cid_1.CID.asCID(b));
116
- }
117
- // walk plain objects
118
- if (Object.keys(a).length !== Object.keys(b).length)
119
- return false;
120
- for (const key of Object.keys(a)) {
121
- if (!(0, exports.ipldEquals)(a[key], b[key]))
122
- return false;
123
- }
124
- return true;
125
- }
126
- return a === b;
32
+ if (!(0, lex_data_1.lexEquals)(a, b))
33
+ return false;
34
+ // @NOTE The previous implementation used "===" which treats NaN as unequal to
35
+ // NaN.
36
+ if (Number.isNaN(a))
37
+ return false;
38
+ return true;
127
39
  };
128
40
  exports.ipldEquals = ipldEquals;
129
41
  //# sourceMappingURL=ipld.js.map
package/dist/ipld.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ipld.js","sourceRoot":"","sources":["../src/ipld.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAAsC;AACtC,iDAAkC;AAmBlC,8DAA8D;AAC9D,gEAAgE;AAEzD,MAAM,UAAU,GAAG,CAAC,GAAc,EAAa,EAAE;IACtD,cAAc;IACd,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC,CAAA;IAC5C,CAAC;IACD,UAAU;IACV,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,4BAA4B;QAC5B,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtE,OAAO,SAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;QAChC,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAA;QAChD,CAAC;QACD,qBAAqB;QACrB,MAAM,QAAQ,GAAG,EAAE,CAAA;QACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAA,kBAAU,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACtC,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,eAAe;IACf,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAvBY,QAAA,UAAU,cAuBtB;AAEM,MAAM,UAAU,GAAG,CAAC,GAAc,EAAa,EAAE;IACtD,cAAc;IACd,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC,CAAA;IAC5C,CAAC;IACD,UAAU;IACV,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,gBAAgB;QAChB,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;aACpC,CAAA;QACH,CAAC;QACD,eAAe;QACf,IAAI,SAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO;gBACL,KAAK,EAAG,GAAW,CAAC,QAAQ,EAAE;aAC/B,CAAA;QACH,CAAC;QACD,qBAAqB;QACrB,MAAM,QAAQ,GAAG,EAAE,CAAA;QACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAA,kBAAU,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACtC,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,eAAe;IACf,OAAO,GAAgB,CAAA;AACzB,CAAC,CAAA;AA5BY,QAAA,UAAU,cA4BtB;AAEM,MAAM,UAAU,GAAG,CAAC,CAAY,EAAE,CAAY,EAAW,EAAE;IAChE,cAAc;IACd,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,IAAA,kBAAU,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QAC3C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,UAAU;IACV,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7D,cAAc;QACd,IAAI,CAAC,YAAY,UAAU,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;YACvD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACzB,CAAC;QACD,aAAa;QACb,IAAI,SAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,OAAO,SAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3C,CAAC;QACD,qBAAqB;QACrB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QACjE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,IAAA,kBAAU,EAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QAC/C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAA;AAChB,CAAC,CAAA;AA3BY,QAAA,UAAU,cA2BtB"}
1
+ {"version":3,"file":"ipld.js","sourceRoot":"","sources":["../src/ipld.ts"],"names":[],"mappings":";;;AAAA,gDAAuD;AACvD,gDAAmE;AAcnE;;;GAGG;AACI,MAAM,UAAU,GAAG,CAAC,GAAoB,EAAa,EAAE;IAC5D,OAAO,IAAA,oBAAS,EAAC,GAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;AACvD,CAAC,CAAA;AAFY,QAAA,UAAU,cAEtB;AAED;;;GAGG;AACI,MAAM,UAAU,GAAG,CAAC,GAAc,EAAmB,EAAE;IAC5D,qBAAqB;IACrB,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAA;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAA;IAEjC,OAAO,IAAA,oBAAS,EAAC,GAAe,CAAC,CAAA;AACnC,CAAC,CAAA;AANY,QAAA,UAAU,cAMtB;AAED;;;GAGG;AACI,MAAM,UAAU,GAAG,CAAC,CAAY,EAAE,CAAY,EAAW,EAAE;IAChE,IAAI,CAAC,IAAA,oBAAS,EAAC,CAAa,EAAE,CAAa,CAAC;QAAE,OAAO,KAAK,CAAA;IAE1D,8EAA8E;IAC9E,OAAO;IACP,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAEjC,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AARY,QAAA,UAAU,cAQtB","sourcesContent":["import { LexValue, lexEquals } from '@atproto/lex-data'\nimport { JsonValue, jsonToLex, lexToJson } from '@atproto/lex-json'\n\n/**\n * @deprecated Use {@link JsonValue} from `@atproto/lex-cbor` instead.\n */\nexport type LegacyJsonValue = unknown\n\nexport type { LegacyJsonValue as JsonValue }\n\n/**\n * @deprecated Use {@link LexValue} from `@atproto/lex-cbor` instead.\n */\nexport type IpldValue = unknown\n\n/**\n * Converts a JSON-compatible value to an IPLD-compatible value.\n * @deprecated Use {@link jsonToLex} from `@atproto/lex-cbor` instead.\n */\nexport const jsonToIpld = (val: LegacyJsonValue): IpldValue => {\n return jsonToLex(val as JsonValue, { strict: false })\n}\n\n/**\n * Converts an IPLD-compatible value to a JSON-compatible value.\n * @deprecated Use {@link lexToJson} from `@atproto/lex-cbor` instead.\n */\nexport const ipldToJson = (val: IpldValue): LegacyJsonValue => {\n // Legacy behavior(s)\n if (val === undefined) return val\n if (Number.isNaN(val)) return val\n\n return lexToJson(val as LexValue)\n}\n\n/**\n * Compares two IPLD-compatible values for deep equality.\n * @deprecated Use {@link lexEquals} from `@atproto/lex-cbor` instead.\n */\nexport const ipldEquals = (a: IpldValue, b: IpldValue): boolean => {\n if (!lexEquals(a as LexValue, b as LexValue)) return false\n\n // @NOTE The previous implementation used \"===\" which treats NaN as unequal to\n // NaN.\n if (Number.isNaN(a)) return false\n\n return true\n}\n"]}
package/dist/retry.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":";;AAOA,sBA2BC;AAED,0CAGC;AAGD,8BAIC;AA9CD,iCAA6B;AAOtB,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,OAEI,EAAE;IAEN,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;AAED,SAAgB,eAAe,CAAC,SAAoC;IAClE,OAAO,KAAK,EAAK,EAAoB,EAAE,IAAmB,EAAE,EAAE,CAC5D,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACrC,CAAC;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;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"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":";;AAOA,sBA2BC;AAED,0CAGC;AAGD,8BAIC;AA9CD,iCAA6B;AAOtB,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,OAEI,EAAE;IAEN,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;AAED,SAAgB,eAAe,CAAC,SAAoC;IAClE,OAAO,KAAK,EAAK,EAAoB,EAAE,IAAmB,EAAE,EAAE,CAC5D,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACrC,CAAC;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;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","sourcesContent":["import { wait } from './util'\n\nexport type RetryOptions = {\n maxRetries?: number\n getWaitMs?: (n: number) => number | null\n}\n\nexport async function retry<T>(\n fn: () => Promise<T>,\n opts: RetryOptions & {\n retryable?: (err: unknown) => boolean\n } = {},\n): Promise<T> {\n const { maxRetries = 3, retryable = () => true, getWaitMs = backoffMs } = opts\n let retries = 0\n let doneError: unknown\n while (!doneError) {\n try {\n return await fn()\n } catch (err) {\n const waitMs = getWaitMs(retries)\n const willRetry =\n retries < maxRetries && waitMs !== null && retryable(err)\n if (willRetry) {\n retries += 1\n if (waitMs !== 0) {\n await wait(waitMs)\n }\n } else {\n doneError = err\n }\n }\n }\n throw doneError\n}\n\nexport function createRetryable(retryable: (err: unknown) => boolean) {\n return async <T>(fn: () => Promise<T>, opts?: RetryOptions) =>\n retry(fn, { ...opts, retryable })\n}\n\n// Waits exponential backoff with max and jitter: ~100, ~200, ~400, ~800, ~1000, ~1000, ...\nexport function backoffMs(n: number, multiplier = 100, max = 1000) {\n const exponentialMs = Math.pow(2, n) * multiplier\n const ms = Math.min(exponentialMs, max)\n return jitter(ms)\n}\n\n// Adds randomness +/-15% of value\nfunction jitter(value: number) {\n const delta = value * 0.15\n return value + randomRange(-delta, delta)\n}\n\nfunction randomRange(from: number, to: number) {\n const rand = Math.random() * (to - from)\n return rand + from\n}\n"]}
package/dist/strings.d.ts CHANGED
@@ -1,17 +1,26 @@
1
- export declare const utf8Len: (str: string) => number;
2
- export declare const graphemeLen: (str: string) => number;
3
- export declare const utf8ToB64Url: (utf8: string) => string;
4
- export declare const b64UrlToUtf8: (b64: string) => string;
5
- export declare const parseLanguage: (langTag: string) => LanguageTag | null;
6
- export declare const validateLanguage: (langTag: string) => boolean;
7
- export type LanguageTag = {
8
- grandfathered?: string;
9
- language?: string;
10
- extlang?: string;
11
- script?: string;
12
- region?: string;
13
- variant?: string;
14
- extension?: string;
15
- privateUse?: string;
16
- };
1
+ import { LanguageTag, isLanguage, parseLanguage } from '@atproto/lex-data';
2
+ /**
3
+ * @deprecated Use {@link graphemeLen} from `@atproto/lex-data` instead.
4
+ */
5
+ declare const graphemeLenLegacy: (str: string) => number;
6
+ export { graphemeLenLegacy as graphemeLen };
7
+ /**
8
+ * @deprecated Use {@link utf8Len} from `@atproto/lex-data` instead.
9
+ */
10
+ declare const utf8LenLegacy: (string: string) => number;
11
+ export { utf8LenLegacy as utf8Len };
12
+ /**
13
+ * @deprecated Use {@link LanguageTag} from `@atproto/lex-data` instead.
14
+ */
15
+ type LanguageTagLegacy = LanguageTag;
16
+ export type { LanguageTagLegacy as LanguageTag };
17
+ /**
18
+ * @deprecated Use {@link parseLanguage} from `@atproto/lex-data` instead.
19
+ */
20
+ export declare const parseLanguageLegacy: typeof parseLanguage;
21
+ export { parseLanguageLegacy as parseLanguage };
22
+ /**
23
+ * @deprecated Use {@link isLanguage} from `@atproto/lex-data` instead.
24
+ */
25
+ export declare const validateLanguage: typeof isLanguage;
17
26
  //# sourceMappingURL=strings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,KAAG,MAErC,CAAA;AAGD,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,MAGzC,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAE3C,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAE1C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,WAAW,GAAG,IAc7D,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,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"}
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,UAAU,EACV,aAAa,EAEd,MAAM,mBAAmB,CAAA;AAE1B;;GAEG;AACH,QAAA,MAAM,iBAAiB,yBAAc,CAAA;AACrC,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,CAAA;AAE3C;;GAEG;AACH,QAAA,MAAM,aAAa,4BAAU,CAAA;AAC7B,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AAEnC;;GAEG;AACH,KAAK,iBAAiB,GAAG,WAAW,CAAA;AACpC,YAAY,EAAE,iBAAiB,IAAI,WAAW,EAAE,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,mBAAmB,sBAAgB,CAAA;AAChD,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,gBAAgB,mBAAa,CAAA"}
package/dist/strings.js CHANGED
@@ -1,84 +1,24 @@
1
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 () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.validateLanguage = exports.parseLanguage = exports.b64UrlToUtf8 = exports.utf8ToB64Url = exports.graphemeLen = exports.utf8Len = void 0;
40
- const graphemer_1 = __importDefault(require("graphemer"));
41
- const ui8 = __importStar(require("uint8arrays"));
42
- // counts the number of bytes in a utf8 string
43
- const utf8Len = (str) => {
44
- return new TextEncoder().encode(str).byteLength;
45
- };
46
- exports.utf8Len = utf8Len;
47
- // counts the number of graphemes (user-displayed characters) in a string
48
- const graphemeLen = (str) => {
49
- const splitter = new graphemer_1.default();
50
- return splitter.countGraphemes(str);
51
- };
52
- exports.graphemeLen = graphemeLen;
53
- const utf8ToB64Url = (utf8) => {
54
- return ui8.toString(ui8.fromString(utf8, 'utf8'), 'base64url');
55
- };
56
- exports.utf8ToB64Url = utf8ToB64Url;
57
- const b64UrlToUtf8 = (b64) => {
58
- return ui8.toString(ui8.fromString(b64, 'base64url'), 'utf8');
59
- };
60
- exports.b64UrlToUtf8 = b64UrlToUtf8;
61
- const parseLanguage = (langTag) => {
62
- const parsed = langTag.match(bcp47Regexp);
63
- if (!parsed?.groups)
64
- return null;
65
- const parts = parsed.groups;
66
- return {
67
- grandfathered: parts.grandfathered,
68
- language: parts.language,
69
- extlang: parts.extlang,
70
- script: parts.script,
71
- region: parts.region,
72
- variant: parts.variant,
73
- extension: parts.extension,
74
- privateUse: parts.privateUseA || parts.privateUseB,
75
- };
76
- };
77
- exports.parseLanguage = parseLanguage;
78
- const validateLanguage = (langTag) => {
79
- return bcp47Regexp.test(langTag);
80
- };
81
- exports.validateLanguage = validateLanguage;
82
- // Validates well-formed BCP 47 syntax: https://www.rfc-editor.org/rfc/rfc5646.html#section-2.1
83
- 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})+))$/;
3
+ exports.validateLanguage = exports.parseLanguage = exports.parseLanguageLegacy = exports.utf8Len = exports.graphemeLen = void 0;
4
+ const lex_data_1 = require("@atproto/lex-data");
5
+ /**
6
+ * @deprecated Use {@link graphemeLen} from `@atproto/lex-data` instead.
7
+ */
8
+ const graphemeLenLegacy = lex_data_1.graphemeLen;
9
+ exports.graphemeLen = graphemeLenLegacy;
10
+ /**
11
+ * @deprecated Use {@link utf8Len} from `@atproto/lex-data` instead.
12
+ */
13
+ const utf8LenLegacy = lex_data_1.utf8Len;
14
+ exports.utf8Len = utf8LenLegacy;
15
+ /**
16
+ * @deprecated Use {@link parseLanguage} from `@atproto/lex-data` instead.
17
+ */
18
+ exports.parseLanguageLegacy = lex_data_1.parseLanguage;
19
+ exports.parseLanguage = exports.parseLanguageLegacy;
20
+ /**
21
+ * @deprecated Use {@link isLanguage} from `@atproto/lex-data` instead.
22
+ */
23
+ exports.validateLanguage = lex_data_1.isLanguage;
84
24
  //# sourceMappingURL=strings.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"strings.js","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":";;;AAAA,gDAM0B;AAE1B;;GAEG;AACH,MAAM,iBAAiB,GAAG,sBAAW,CAAA;AACP,wCAAW;AAEzC;;GAEG;AACH,MAAM,aAAa,GAAG,kBAAO,CAAA;AACH,gCAAO;AAQjC;;GAEG;AACU,QAAA,mBAAmB,GAAG,wBAAa,CAAA;AAChB,wBADnB,2BAAmB,CACa;AAE7C;;GAEG;AACU,QAAA,gBAAgB,GAAG,qBAAU,CAAA","sourcesContent":["import {\n LanguageTag,\n graphemeLen,\n isLanguage,\n parseLanguage,\n utf8Len,\n} from '@atproto/lex-data'\n\n/**\n * @deprecated Use {@link graphemeLen} from `@atproto/lex-data` instead.\n */\nconst graphemeLenLegacy = graphemeLen\nexport { graphemeLenLegacy as graphemeLen }\n\n/**\n * @deprecated Use {@link utf8Len} from `@atproto/lex-data` instead.\n */\nconst utf8LenLegacy = utf8Len\nexport { utf8LenLegacy as utf8Len }\n\n/**\n * @deprecated Use {@link LanguageTag} from `@atproto/lex-data` instead.\n */\ntype LanguageTagLegacy = LanguageTag\nexport type { LanguageTagLegacy as LanguageTag }\n\n/**\n * @deprecated Use {@link parseLanguage} from `@atproto/lex-data` instead.\n */\nexport const parseLanguageLegacy = parseLanguage\nexport { parseLanguageLegacy as parseLanguage }\n\n/**\n * @deprecated Use {@link isLanguage} from `@atproto/lex-data` instead.\n */\nexport const validateLanguage = isLanguage\n"]}
package/dist/tid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tid.js","sourceRoot":"","sources":["../src/tid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tid.js","sourceRoot":"","sources":["../src/tid.ts"],"names":[],"mappings":"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","sourcesContent":["import { s32decode, s32encode } from './util'\n\nconst TID_LEN = 13\n\nlet lastTimestamp = 0\nlet timestampCount = 0\nlet clockid: number | null = null\n\nfunction dedash(str: string): string {\n return str.replaceAll('-', '')\n}\n\nexport class TID {\n str: string\n\n constructor(str: string) {\n const noDashes = dedash(str)\n if (noDashes.length !== TID_LEN) {\n throw new Error(`Poorly formatted TID: ${noDashes.length} length`)\n }\n this.str = noDashes\n }\n\n static next(prev?: TID): TID {\n // javascript does not have microsecond precision\n // instead, we append a counter to the timestamp to indicate if multiple timestamps were created within the same millisecond\n // take max of current time & last timestamp to prevent tids moving backwards if system clock drifts backwards\n const time = Math.max(Date.now(), lastTimestamp)\n if (time === lastTimestamp) {\n timestampCount++\n }\n lastTimestamp = time\n const timestamp = time * 1000 + timestampCount\n // the bottom 32 clock ids can be randomized & are not guaranteed to be collision resistant\n // we use the same clockid for all tids coming from this machine\n if (clockid === null) {\n clockid = Math.floor(Math.random() * 32)\n }\n const tid = TID.fromTime(timestamp, clockid)\n if (!prev || tid.newerThan(prev)) {\n return tid\n }\n return TID.fromTime(prev.timestamp() + 1, clockid)\n }\n\n static nextStr(prev?: string): string {\n return TID.next(prev ? new TID(prev) : undefined).toString()\n }\n\n static fromTime(timestamp: number, clockid: number): TID {\n // base32 encode with encoding variant sort (s32)\n const str = `${s32encode(timestamp)}${s32encode(clockid).padStart(2, '2')}`\n return new TID(str)\n }\n\n static fromStr(str: string): TID {\n return new TID(str)\n }\n\n static oldestFirst(a: TID, b: TID): number {\n return a.compareTo(b)\n }\n\n static newestFirst(a: TID, b: TID): number {\n return b.compareTo(a)\n }\n\n static is(str: string): boolean {\n return dedash(str).length === TID_LEN\n }\n\n timestamp(): number {\n return s32decode(this.str.slice(0, 11))\n }\n\n clockid(): number {\n return s32decode(this.str.slice(11, 13))\n }\n\n formatted(): string {\n const str = this.toString()\n return `${str.slice(0, 4)}-${str.slice(4, 7)}-${str.slice(\n 7,\n 11,\n )}-${str.slice(11, 13)}`\n }\n\n toString(): string {\n return this.str\n }\n\n // newer > older\n compareTo(other: TID): number {\n if (this.str > other.str) return 1\n if (this.str < other.str) return -1\n return 0\n }\n\n equals(other: TID): boolean {\n return this.str === other.str\n }\n\n newerThan(other: TID): boolean {\n return this.compareTo(other) > 0\n }\n\n olderThan(other: TID): boolean {\n return this.compareTo(other) < 0\n }\n}\n"]}
package/dist/times.js.map CHANGED
@@ -1 +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"}
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","sourcesContent":["export const SECOND = 1000\nexport const MINUTE = SECOND * 60\nexport const HOUR = MINUTE * 60\nexport const DAY = HOUR * 24\n\nexport const lessThanAgoMs = (time: Date, range: number) => {\n return Date.now() < time.getTime() + range\n}\n\nexport const addHoursToDate = (hours: number, startingDate?: Date): Date => {\n // When date is passed, clone before calling `setHours()` so that we are not mutating the original date\n const currentDate = startingDate ? new Date(startingDate) : new Date()\n currentDate.setHours(currentDate.getHours() + hours)\n return currentDate\n}\n"]}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { CID } from 'multiformats/cid';
2
1
  import { z } from 'zod';
2
+ import { CID } from '@atproto/lex-data';
3
3
  import { Def } from './check';
4
4
  declare const carHeader: z.ZodObject<{
5
5
  version: z.ZodLiteral<1>;
@@ -1 +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;AAgB7B,QAAA,MAAM,SAAS;;;;;;;;;EAGb,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAEjD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;CAQlB,CAAA;AAED,eAAO,MAAM,GAAG;SAIT,GAAG,CAAC,GAAG,CAAC;eAIR,GAAG,CAAC,SAAS,CAAC;WAId,GAAG,CAAC,UAAU,CAAC;YAIf,GAAG,CAAC,MAAM,CAAC;SAIX,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;aAI5B,GAAG,CAAC,OAAO,CAAC;CAClB,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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAgB7B,QAAA,MAAM,SAAS;;;;;;;;;EAGb,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAEjD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;CAQlB,CAAA;AAED,eAAO,MAAM,GAAG;SAIT,GAAG,CAAC,GAAG,CAAC;eAIR,GAAG,CAAC,SAAS,CAAC;WAId,GAAG,CAAC,UAAU,CAAC;YAIf,GAAG,CAAC,MAAM,CAAC;SAIX,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;aAI5B,GAAG,CAAC,OAAO,CAAC;CAClB,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 CHANGED
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.def = exports.schema = void 0;
4
- const cid_1 = require("multiformats/cid");
5
4
  const zod_1 = require("zod");
5
+ const lex_data_1 = require("@atproto/lex-data");
6
6
  const cidSchema = zod_1.z.unknown().transform((obj, ctx) => {
7
- const cid = cid_1.CID.asCID(obj);
7
+ const cid = lex_data_1.CID.asCID(obj);
8
8
  if (cid == null) {
9
9
  ctx.addIssue({
10
10
  code: zod_1.z.ZodIssueCode.custom,
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,0CAAsC;AACtC,6BAAuB;AAGvB,MAAM,SAAS,GAAG,OAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAO,EAAE;IACxD,MAAM,GAAG,GAAG,SAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE1B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAA;QACF,OAAO,OAAC,CAAC,KAAK,CAAA;IAChB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,OAAC,CAAC,MAAM,CAAC;IACzB,OAAO,EAAE,OAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,SAAS,CAAC;CAC1B,CAAC,CAAA;AAGW,QAAA,MAAM,GAAG;IACpB,GAAG,EAAE,SAAS;IACd,SAAS;IACT,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,SAAS,EAAE;QACT,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,cAAM,CAAC,SAAS;KACP;IACnB,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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AACvB,gDAAuC;AAGvC,MAAM,SAAS,GAAG,OAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAO,EAAE;IACxD,MAAM,GAAG,GAAG,cAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE1B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAA;QACF,OAAO,OAAC,CAAC,KAAK,CAAA;IAChB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,OAAC,CAAC,MAAM,CAAC;IACzB,OAAO,EAAE,OAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,SAAS,CAAC;CAC1B,CAAC,CAAA;AAGW,QAAA,MAAM,GAAG;IACpB,GAAG,EAAE,SAAS;IACd,SAAS;IACT,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,SAAS,EAAE;QACT,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,cAAM,CAAC,SAAS;KACP;IACnB,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","sourcesContent":["import { z } from 'zod'\nimport { CID } from '@atproto/lex-data'\nimport { Def } from './check'\n\nconst cidSchema = z.unknown().transform((obj, ctx): CID => {\n const cid = CID.asCID(obj)\n\n if (cid == null) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Not a valid CID',\n })\n return z.NEVER\n }\n\n return cid\n})\n\nconst carHeader = z.object({\n version: z.literal(1),\n roots: z.array(cidSchema),\n})\nexport type CarHeader = z.infer<typeof carHeader>\n\nexport const schema = {\n cid: cidSchema,\n carHeader,\n bytes: z.instanceof(Uint8Array),\n string: z.string(),\n array: z.array(z.unknown()),\n map: z.record(z.string(), z.unknown()),\n unknown: z.unknown(),\n}\n\nexport const def = {\n cid: {\n name: 'cid',\n schema: schema.cid,\n } as Def<CID>,\n carHeader: {\n name: 'CAR header',\n schema: schema.carHeader,\n } as Def<CarHeader>,\n bytes: {\n name: 'bytes',\n schema: schema.bytes,\n } as Def<Uint8Array>,\n string: {\n name: 'string',\n schema: schema.string,\n } as Def<string>,\n map: {\n name: 'map',\n schema: schema.map,\n } as Def<Record<string, unknown>>,\n unknown: {\n name: 'unknown',\n schema: schema.unknown,\n } as Def<unknown>,\n}\n\nexport type ArrayEl<A> = A extends readonly (infer T)[] ? T : never\n\nexport type NotEmptyArray<T> = [T, ...T[]]\n"]}
package/dist/util.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export declare const noUndefinedVals: <T>(obj: Record<string, T | undefined>) => Record<string, T>;
2
+ export declare function aggregateErrors(errors: unknown[], message?: string): Error | AggregateError;
2
3
  /**
3
4
  * Returns a shallow copy of the object without the specified keys. If the input
4
5
  * is nullish, it returns the input.
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,GAAI,CAAC,EAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,KACjC,MAAM,CAAC,MAAM,EAAE,CAAC,CAOlB,CAAA;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAClB,CAAC,SAAS,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,EAE9B,MAAM,EAAE,CAAC,EACT,YAAY,EAAE,SAAS,CAAC,EAAE,GACzB,CAAC,SAAS,SAAS,GAAG,SAAS,GAAG,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAoBvE,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,WAEnC,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,IAAI,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,GAAI,IAAI,MAAM,KAAG,YAUzC,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,UAAU,EAAE,KAAG,UAWvD,CAAA;AAED,eAAO,MAAM,cAAc,GACzB,QAAQ,aAAa,CAAC,UAAU,CAAC,KAChC,OAAO,CAAC,UAAU,CAMpB,CAAA;AAID,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAQrC,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAMrC,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,CAAC,EACjC,KAAK,CAAC,EAAE,EACR,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,iBAI/B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,KAAK,OAAO,KACX,GAAG,IAAI,MAAM,CAAC,cAEhB,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,OAAO,EAAE,KAAK,MAAM,KAAG,OAErD,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,MAAM,KAAG,CAAC,EAAE,EAS9D,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,KAAG,MAAM,EAMzC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,KAAG,MAAM,EAEjD,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,EACpC,OAAO,MAAM,GAAG,SAAS,EACzB,UAAU,CAAC,KACV,MAAM,GAAG,CAGX,CAAA"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,GAAI,CAAC,EAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,KACjC,MAAM,CAAC,MAAM,EAAE,CAAC,CAOlB,CAAA;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,KAAK,GAAG,cAAc,CAWxB;AASD;;;GAGG;AACH,wBAAgB,IAAI,CAClB,CAAC,SAAS,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,CAAC,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,EAE9B,MAAM,EAAE,CAAC,EACT,YAAY,EAAE,SAAS,CAAC,EAAE,GACzB,CAAC,SAAS,SAAS,GAAG,SAAS,GAAG,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAoBvE,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,WAEnC,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,IAAI,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,GAAI,IAAI,MAAM,KAAG,YAUzC,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,UAAU,EAAE,KAAG,UAWvD,CAAA;AAED,eAAO,MAAM,cAAc,GACzB,QAAQ,aAAa,CAAC,UAAU,CAAC,KAChC,OAAO,CAAC,UAAU,CAMpB,CAAA;AAID,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAQrC,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAMrC,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,CAAC,EACjC,KAAK,CAAC,EAAE,EACR,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,iBAI/B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,KAAK,OAAO,KACX,GAAG,IAAI,MAAM,CAAC,cAEhB,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,OAAO,EAAE,KAAK,MAAM,KAAG,OAErD,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,MAAM,KAAG,CAAC,EAAE,EAS9D,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,KAAG,MAAM,EAMzC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,KAAG,MAAM,EAEjD,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,EACpC,OAAO,MAAM,GAAG,SAAS,EACzB,UAAU,CAAC,KACV,MAAM,GAAG,CAGX,CAAA"}
package/dist/util.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseIntWithFallback = exports.dedupeStrs = exports.range = exports.chunkArray = exports.errHasMsg = exports.isErrnoException = exports.asyncFilter = exports.s32decode = exports.s32encode = exports.streamToBuffer = exports.flattenUint8Arrays = exports.bailableWait = exports.wait = exports.jitter = exports.noUndefinedVals = void 0;
4
+ exports.aggregateErrors = aggregateErrors;
4
5
  exports.omit = omit;
5
6
  const noUndefinedVals = (obj) => {
6
7
  Object.keys(obj).forEach((k) => {
@@ -11,6 +12,22 @@ const noUndefinedVals = (obj) => {
11
12
  return obj;
12
13
  };
13
14
  exports.noUndefinedVals = noUndefinedVals;
15
+ function aggregateErrors(errors, message) {
16
+ if (errors.length === 1) {
17
+ return errors[0] instanceof Error
18
+ ? errors[0]
19
+ : new Error(message ?? stringifyError(errors[0]), { cause: errors[0] });
20
+ }
21
+ else {
22
+ return new AggregateError(errors, message ?? `Multiple errors: ${errors.map(stringifyError).join('\n')}`);
23
+ }
24
+ }
25
+ function stringifyError(reason) {
26
+ if (reason instanceof Error) {
27
+ return reason.message;
28
+ }
29
+ return String(reason);
30
+ }
14
31
  function omit(src, rejectedKeys) {
15
32
  // Hot path
16
33
  if (!src)
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["export const noUndefinedVals = <T>(\n obj: Record<string, T | undefined>,\n): Record<string, T> => {\n Object.keys(obj).forEach((k) => {\n if (obj[k] === undefined) {\n delete obj[k]\n }\n })\n return obj as Record<string, T>\n}\n\nexport function aggregateErrors(\n errors: unknown[],\n message?: string,\n): Error | AggregateError {\n if (errors.length === 1) {\n return errors[0] instanceof Error\n ? errors[0]\n : new Error(message ?? stringifyError(errors[0]), { cause: errors[0] })\n } else {\n return new AggregateError(\n errors,\n message ?? `Multiple errors: ${errors.map(stringifyError).join('\\n')}`,\n )\n }\n}\n\nfunction stringifyError(reason: unknown): string {\n if (reason instanceof Error) {\n return reason.message\n }\n return String(reason)\n}\n\n/**\n * Returns a shallow copy of the object without the specified keys. If the input\n * is nullish, it returns the input.\n */\nexport function omit<\n T extends undefined | null | Record<string, unknown>,\n K extends keyof NonNullable<T>,\n>(\n object: T,\n rejectedKeys: readonly K[],\n): T extends undefined ? undefined : T extends null ? null : Omit<T, K>\nexport function omit(\n src: undefined | null | Record<string, unknown>,\n rejectedKeys: readonly string[],\n): undefined | null | Record<string, unknown> {\n // Hot path\n\n if (!src) return src\n\n const dst = {}\n const srcKeys = Object.keys(src)\n for (let i = 0; i < srcKeys.length; i++) {\n const key = srcKeys[i]\n if (!rejectedKeys.includes(key)) {\n dst[key] = src[key]\n }\n }\n return dst\n}\n\nexport const jitter = (maxMs: number) => {\n return Math.round((Math.random() - 0.5) * maxMs * 2)\n}\n\nexport const wait = (ms: number) => {\n return new Promise((res) => setTimeout(res, ms))\n}\n\nexport type BailableWait = {\n bail: () => void\n wait: () => Promise<void>\n}\n\nexport const bailableWait = (ms: number): BailableWait => {\n let bail\n const waitPromise = new Promise<void>((res) => {\n const timeout = setTimeout(res, ms)\n bail = () => {\n clearTimeout(timeout)\n res()\n }\n })\n return { bail, wait: () => waitPromise }\n}\n\nexport const flattenUint8Arrays = (arrs: Uint8Array[]): Uint8Array => {\n const length = arrs.reduce((acc, cur) => {\n return acc + cur.length\n }, 0)\n const flattened = new Uint8Array(length)\n let offset = 0\n arrs.forEach((arr) => {\n flattened.set(arr, offset)\n offset += arr.length\n })\n return flattened\n}\n\nexport const streamToBuffer = async (\n stream: AsyncIterable<Uint8Array>,\n): Promise<Uint8Array> => {\n const arrays: Uint8Array[] = []\n for await (const chunk of stream) {\n arrays.push(chunk)\n }\n return flattenUint8Arrays(arrays)\n}\n\nconst S32_CHAR = '234567abcdefghijklmnopqrstuvwxyz'\n\nexport const s32encode = (i: number): string => {\n let s = ''\n while (i) {\n const c = i % 32\n i = Math.floor(i / 32)\n s = S32_CHAR.charAt(c) + s\n }\n return s\n}\n\nexport const s32decode = (s: string): number => {\n let i = 0\n for (const c of s) {\n i = i * 32 + S32_CHAR.indexOf(c)\n }\n return i\n}\n\nexport const asyncFilter = async <T>(\n arr: T[],\n fn: (t: T) => Promise<boolean>,\n) => {\n const results = await Promise.all(arr.map((t) => fn(t)))\n return arr.filter((_, i) => results[i])\n}\n\nexport const isErrnoException = (\n err: unknown,\n): err is NodeJS.ErrnoException => {\n return !!err && err['code']\n}\n\nexport const errHasMsg = (err: unknown, msg: string): boolean => {\n return !!err && typeof err === 'object' && err['message'] === msg\n}\n\nexport const chunkArray = <T>(arr: T[], chunkSize: number): T[][] => {\n return arr.reduce((acc, cur, i) => {\n const chunkI = Math.floor(i / chunkSize)\n if (!acc[chunkI]) {\n acc[chunkI] = []\n }\n acc[chunkI].push(cur)\n return acc\n }, [] as T[][])\n}\n\nexport const range = (num: number): number[] => {\n const nums: number[] = []\n for (let i = 0; i < num; i++) {\n nums.push(i)\n }\n return nums\n}\n\nexport const dedupeStrs = (strs: string[]): string[] => {\n return [...new Set(strs)]\n}\n\nexport const parseIntWithFallback = <T>(\n value: string | undefined,\n fallback: T,\n): number | T => {\n const parsed = parseInt(value || '', 10)\n return isNaN(parsed) ? fallback : parsed\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/common-web",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "license": "MIT",
5
5
  "description": "Shared web-platform-friendly code for atproto libraries",
6
6
  "keywords": [
@@ -15,10 +15,9 @@
15
15
  "main": "dist/index.js",
16
16
  "types": "dist/index.d.ts",
17
17
  "dependencies": {
18
- "graphemer": "^1.4.0",
19
- "multiformats": "^9.9.0",
20
- "uint8arrays": "3.0.0",
21
- "zod": "^3.23.8"
18
+ "zod": "^3.23.8",
19
+ "@atproto/lex-data": "0.0.0",
20
+ "@atproto/lex-json": "0.0.0"
22
21
  },
23
22
  "devDependencies": {
24
23
  "jest": "^28.1.2",
package/src/async.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { bailableWait } from './util'
1
+ import { aggregateErrors, bailableWait } from './util'
2
2
 
3
3
  // reads values from a generator into a list
4
4
  // breaks when isDone signals `true` AND `waitFor` completes OR when a max length is reached
@@ -184,18 +184,10 @@ export function handleAllSettledErrors<T>(
184
184
  export function handleAllSettledErrors(
185
185
  results: PromiseSettledResult<unknown>[],
186
186
  ): unknown[] {
187
+ if (results.every(isFulfilledResult)) return results.map(extractValue)
188
+
187
189
  const errors = results.filter(isRejectedResult).map(extractReason)
188
- if (errors.length === 0) {
189
- // No need to filter here, it is safe to assume that all promises are fulfilled
190
- return (results as PromiseFulfilledResult<unknown>[]).map(extractValue)
191
- }
192
- if (errors.length === 1) {
193
- throw errors[0]
194
- }
195
- throw new AggregateError(
196
- errors,
197
- `Multiple errors: ${errors.map(stringifyReason).join('\n')}`,
198
- )
190
+ throw aggregateErrors(errors)
199
191
  }
200
192
 
201
193
  export function isRejectedResult(
@@ -217,10 +209,3 @@ export function isFulfilledResult<T>(
217
209
  function extractValue<T>(result: PromiseFulfilledResult<T>): T {
218
210
  return result.value
219
211
  }
220
-
221
- function stringifyReason(reason: unknown): string {
222
- if (reason instanceof Error) {
223
- return reason.message
224
- }
225
- return String(reason)
226
- }
package/src/ipld.ts CHANGED
@@ -1,106 +1,48 @@
1
- import { CID } from 'multiformats/cid'
2
- import * as ui8 from 'uint8arrays'
1
+ import { LexValue, lexEquals } from '@atproto/lex-data'
2
+ import { JsonValue, jsonToLex, lexToJson } from '@atproto/lex-json'
3
3
 
4
- export type JsonValue =
5
- | boolean
6
- | number
7
- | string
8
- | null
9
- | undefined
10
- | unknown
11
- | Array<JsonValue>
12
- | { [key: string]: JsonValue }
4
+ /**
5
+ * @deprecated Use {@link JsonValue} from `@atproto/lex-cbor` instead.
6
+ */
7
+ export type LegacyJsonValue = unknown
13
8
 
14
- export type IpldValue =
15
- | JsonValue
16
- | CID
17
- | Uint8Array
18
- | Array<IpldValue>
19
- | { [key: string]: IpldValue }
9
+ export type { LegacyJsonValue as JsonValue }
20
10
 
21
- // @NOTE avoiding use of check.is() here only because it makes
22
- // these implementations slow, and they often live in hot paths.
11
+ /**
12
+ * @deprecated Use {@link LexValue} from `@atproto/lex-cbor` instead.
13
+ */
14
+ export type IpldValue = unknown
23
15
 
24
- export const jsonToIpld = (val: JsonValue): IpldValue => {
25
- // walk arrays
26
- if (Array.isArray(val)) {
27
- return val.map((item) => jsonToIpld(item))
28
- }
29
- // objects
30
- if (val && typeof val === 'object') {
31
- // check for dag json values
32
- if (typeof val['$link'] === 'string' && Object.keys(val).length === 1) {
33
- return CID.parse(val['$link'])
34
- }
35
- if (typeof val['$bytes'] === 'string' && Object.keys(val).length === 1) {
36
- return ui8.fromString(val['$bytes'], 'base64')
37
- }
38
- // walk plain objects
39
- const toReturn = {}
40
- for (const key of Object.keys(val)) {
41
- toReturn[key] = jsonToIpld(val[key])
42
- }
43
- return toReturn
44
- }
45
- // pass through
46
- return val
16
+ /**
17
+ * Converts a JSON-compatible value to an IPLD-compatible value.
18
+ * @deprecated Use {@link jsonToLex} from `@atproto/lex-cbor` instead.
19
+ */
20
+ export const jsonToIpld = (val: LegacyJsonValue): IpldValue => {
21
+ return jsonToLex(val as JsonValue, { strict: false })
47
22
  }
48
23
 
49
- export const ipldToJson = (val: IpldValue): JsonValue => {
50
- // walk arrays
51
- if (Array.isArray(val)) {
52
- return val.map((item) => ipldToJson(item))
53
- }
54
- // objects
55
- if (val && typeof val === 'object') {
56
- // convert bytes
57
- if (val instanceof Uint8Array) {
58
- return {
59
- $bytes: ui8.toString(val, 'base64'),
60
- }
61
- }
62
- // convert cids
63
- if (CID.asCID(val)) {
64
- return {
65
- $link: (val as CID).toString(),
66
- }
67
- }
68
- // walk plain objects
69
- const toReturn = {}
70
- for (const key of Object.keys(val)) {
71
- toReturn[key] = ipldToJson(val[key])
72
- }
73
- return toReturn
74
- }
75
- // pass through
76
- return val as JsonValue
24
+ /**
25
+ * Converts an IPLD-compatible value to a JSON-compatible value.
26
+ * @deprecated Use {@link lexToJson} from `@atproto/lex-cbor` instead.
27
+ */
28
+ export const ipldToJson = (val: IpldValue): LegacyJsonValue => {
29
+ // Legacy behavior(s)
30
+ if (val === undefined) return val
31
+ if (Number.isNaN(val)) return val
32
+
33
+ return lexToJson(val as LexValue)
77
34
  }
78
35
 
36
+ /**
37
+ * Compares two IPLD-compatible values for deep equality.
38
+ * @deprecated Use {@link lexEquals} from `@atproto/lex-cbor` instead.
39
+ */
79
40
  export const ipldEquals = (a: IpldValue, b: IpldValue): boolean => {
80
- // walk arrays
81
- if (Array.isArray(a) && Array.isArray(b)) {
82
- if (a.length !== b.length) return false
83
- for (let i = 0; i < a.length; i++) {
84
- if (!ipldEquals(a[i], b[i])) return false
85
- }
86
- return true
87
- }
88
- // objects
89
- if (a && b && typeof a === 'object' && typeof b === 'object') {
90
- // check bytes
91
- if (a instanceof Uint8Array && b instanceof Uint8Array) {
92
- return ui8.equals(a, b)
93
- }
94
- // check cids
95
- if (CID.asCID(a) && CID.asCID(b)) {
96
- return CID.asCID(a)?.equals(CID.asCID(b))
97
- }
98
- // walk plain objects
99
- if (Object.keys(a).length !== Object.keys(b).length) return false
100
- for (const key of Object.keys(a)) {
101
- if (!ipldEquals(a[key], b[key])) return false
102
- }
103
- return true
104
- }
105
- return a === b
41
+ if (!lexEquals(a as LexValue, b as LexValue)) return false
42
+
43
+ // @NOTE The previous implementation used "===" which treats NaN as unequal to
44
+ // NaN.
45
+ if (Number.isNaN(a)) return false
46
+
47
+ return true
106
48
  }
package/src/strings.ts CHANGED
@@ -1,56 +1,36 @@
1
- import Graphemer from 'graphemer'
2
- import * as ui8 from 'uint8arrays'
3
-
4
- // counts the number of bytes in a utf8 string
5
- export const utf8Len = (str: string): number => {
6
- return new TextEncoder().encode(str).byteLength
7
- }
8
-
9
- // counts the number of graphemes (user-displayed characters) in a string
10
- export const graphemeLen = (str: string): number => {
11
- const splitter = new Graphemer()
12
- return splitter.countGraphemes(str)
13
- }
14
-
15
- export const utf8ToB64Url = (utf8: string): string => {
16
- return ui8.toString(ui8.fromString(utf8, 'utf8'), 'base64url')
17
- }
18
-
19
- export const b64UrlToUtf8 = (b64: string): string => {
20
- return ui8.toString(ui8.fromString(b64, 'base64url'), 'utf8')
21
- }
22
-
23
- export const parseLanguage = (langTag: string): LanguageTag | null => {
24
- const parsed = langTag.match(bcp47Regexp)
25
- if (!parsed?.groups) return null
26
- const parts = parsed.groups
27
- return {
28
- grandfathered: parts.grandfathered,
29
- language: parts.language,
30
- extlang: parts.extlang,
31
- script: parts.script,
32
- region: parts.region,
33
- variant: parts.variant,
34
- extension: parts.extension,
35
- privateUse: parts.privateUseA || parts.privateUseB,
36
- }
37
- }
38
-
39
- export const validateLanguage = (langTag: string): boolean => {
40
- return bcp47Regexp.test(langTag)
41
- }
42
-
43
- export type LanguageTag = {
44
- grandfathered?: string
45
- language?: string
46
- extlang?: string
47
- script?: string
48
- region?: string
49
- variant?: string
50
- extension?: string
51
- privateUse?: string
52
- }
53
-
54
- // Validates well-formed BCP 47 syntax: https://www.rfc-editor.org/rfc/rfc5646.html#section-2.1
55
- const bcp47Regexp =
56
- /^((?<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})+))$/
1
+ import {
2
+ LanguageTag,
3
+ graphemeLen,
4
+ isLanguage,
5
+ parseLanguage,
6
+ utf8Len,
7
+ } from '@atproto/lex-data'
8
+
9
+ /**
10
+ * @deprecated Use {@link graphemeLen} from `@atproto/lex-data` instead.
11
+ */
12
+ const graphemeLenLegacy = graphemeLen
13
+ export { graphemeLenLegacy as graphemeLen }
14
+
15
+ /**
16
+ * @deprecated Use {@link utf8Len} from `@atproto/lex-data` instead.
17
+ */
18
+ const utf8LenLegacy = utf8Len
19
+ export { utf8LenLegacy as utf8Len }
20
+
21
+ /**
22
+ * @deprecated Use {@link LanguageTag} from `@atproto/lex-data` instead.
23
+ */
24
+ type LanguageTagLegacy = LanguageTag
25
+ export type { LanguageTagLegacy as LanguageTag }
26
+
27
+ /**
28
+ * @deprecated Use {@link parseLanguage} from `@atproto/lex-data` instead.
29
+ */
30
+ export const parseLanguageLegacy = parseLanguage
31
+ export { parseLanguageLegacy as parseLanguage }
32
+
33
+ /**
34
+ * @deprecated Use {@link isLanguage} from `@atproto/lex-data` instead.
35
+ */
36
+ export const validateLanguage = isLanguage
package/src/types.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { CID } from 'multiformats/cid'
2
1
  import { z } from 'zod'
2
+ import { CID } from '@atproto/lex-data'
3
3
  import { Def } from './check'
4
4
 
5
5
  const cidSchema = z.unknown().transform((obj, ctx): CID => {
package/src/util.ts CHANGED
@@ -9,6 +9,29 @@ export const noUndefinedVals = <T>(
9
9
  return obj as Record<string, T>
10
10
  }
11
11
 
12
+ export function aggregateErrors(
13
+ errors: unknown[],
14
+ message?: string,
15
+ ): Error | AggregateError {
16
+ if (errors.length === 1) {
17
+ return errors[0] instanceof Error
18
+ ? errors[0]
19
+ : new Error(message ?? stringifyError(errors[0]), { cause: errors[0] })
20
+ } else {
21
+ return new AggregateError(
22
+ errors,
23
+ message ?? `Multiple errors: ${errors.map(stringifyError).join('\n')}`,
24
+ )
25
+ }
26
+ }
27
+
28
+ function stringifyError(reason: unknown): string {
29
+ if (reason instanceof Error) {
30
+ return reason.message
31
+ }
32
+ return String(reason)
33
+ }
34
+
12
35
  /**
13
36
  * Returns a shallow copy of the object without the specified keys. If the input
14
37
  * is nullish, it returns the input.
@@ -1 +1 @@
1
- {"root":["./tests/check.test.ts","./tests/retry.test.ts","./tests/strings.test.ts","./tests/tid.test.ts","./tests/util.test.ts"],"version":"5.8.2"}
1
+ {"root":["./tests/check.test.ts","./tests/retry.test.ts","./tests/tid.test.ts","./tests/util.test.ts"],"version":"5.8.3"}
@@ -1,114 +0,0 @@
1
- import { graphemeLen, parseLanguage, utf8Len, validateLanguage } from '../src'
2
-
3
- describe('string', () => {
4
- it('calculates utf8 string length', () => {
5
- expect(utf8Len('a')).toBe(1)
6
- expect(utf8Len('~')).toBe(1)
7
- expect(utf8Len('ö')).toBe(2)
8
- expect(utf8Len('ñ')).toBe(2)
9
- expect(utf8Len('©')).toBe(2)
10
- expect(utf8Len('⽘')).toBe(3)
11
- expect(utf8Len('☎')).toBe(3)
12
- expect(utf8Len('𓋓')).toBe(4)
13
- expect(utf8Len('😀')).toBe(4)
14
- expect(utf8Len('👨‍👩‍👧‍👧')).toBe(25)
15
- })
16
-
17
- it('calculates grapheme length', () => {
18
- expect(graphemeLen('a')).toBe(1)
19
- expect(graphemeLen('~')).toBe(1)
20
- expect(graphemeLen('ö')).toBe(1)
21
- expect(graphemeLen('ñ')).toBe(1)
22
- expect(graphemeLen('©')).toBe(1)
23
- expect(graphemeLen('⽘')).toBe(1)
24
- expect(graphemeLen('☎')).toBe(1)
25
- expect(graphemeLen('𓋓')).toBe(1)
26
- expect(graphemeLen('😀')).toBe(1)
27
- expect(graphemeLen('👨‍👩‍👧‍👧')).toBe(1)
28
- expect(graphemeLen('a~öñ©⽘☎𓋓😀👨‍👩‍👧‍👧')).toBe(10)
29
- })
30
-
31
- describe('languages', () => {
32
- it('validates BCP 47', () => {
33
- // valid
34
- expect(validateLanguage('de')).toEqual(true)
35
- expect(validateLanguage('de-CH')).toEqual(true)
36
- expect(validateLanguage('de-DE-1901')).toEqual(true)
37
- expect(validateLanguage('es-419')).toEqual(true)
38
- expect(validateLanguage('sl-IT-nedis')).toEqual(true)
39
- expect(validateLanguage('mn-Cyrl-MN')).toEqual(true)
40
- expect(validateLanguage('x-fr-CH')).toEqual(true)
41
- expect(
42
- validateLanguage('en-GB-boont-r-extended-sequence-x-private'),
43
- ).toEqual(true)
44
- expect(validateLanguage('sr-Cyrl')).toEqual(true)
45
- expect(validateLanguage('hy-Latn-IT-arevela')).toEqual(true)
46
- expect(validateLanguage('i-klingon')).toEqual(true)
47
- // invalid
48
- expect(validateLanguage('')).toEqual(false)
49
- expect(validateLanguage('x')).toEqual(false)
50
- expect(validateLanguage('de-CH-')).toEqual(false)
51
- expect(validateLanguage('i-bad-grandfathered')).toEqual(false)
52
- })
53
-
54
- it('parses BCP 47', () => {
55
- // valid
56
- expect(parseLanguage('de')).toEqual({
57
- language: 'de',
58
- })
59
- expect(parseLanguage('de-CH')).toEqual({
60
- language: 'de',
61
- region: 'CH',
62
- })
63
- expect(parseLanguage('de-DE-1901')).toEqual({
64
- language: 'de',
65
- region: 'DE',
66
- variant: '1901',
67
- })
68
- expect(parseLanguage('es-419')).toEqual({
69
- language: 'es',
70
- region: '419',
71
- })
72
- expect(parseLanguage('sl-IT-nedis')).toEqual({
73
- language: 'sl',
74
- region: 'IT',
75
- variant: 'nedis',
76
- })
77
- expect(parseLanguage('mn-Cyrl-MN')).toEqual({
78
- language: 'mn',
79
- script: 'Cyrl',
80
- region: 'MN',
81
- })
82
- expect(parseLanguage('x-fr-CH')).toEqual({
83
- privateUse: 'x-fr-CH',
84
- })
85
- expect(
86
- parseLanguage('en-GB-boont-r-extended-sequence-x-private'),
87
- ).toEqual({
88
- language: 'en',
89
- region: 'GB',
90
- variant: 'boont',
91
- extension: 'r-extended-sequence',
92
- privateUse: 'x-private',
93
- })
94
- expect(parseLanguage('sr-Cyrl')).toEqual({
95
- language: 'sr',
96
- script: 'Cyrl',
97
- })
98
- expect(parseLanguage('hy-Latn-IT-arevela')).toEqual({
99
- language: 'hy',
100
- script: 'Latn',
101
- region: 'IT',
102
- variant: 'arevela',
103
- })
104
- expect(parseLanguage('i-klingon')).toEqual({
105
- grandfathered: 'i-klingon',
106
- })
107
- // invalid
108
- expect(parseLanguage('')).toEqual(null)
109
- expect(parseLanguage('x')).toEqual(null)
110
- expect(parseLanguage('de-CH-')).toEqual(null)
111
- expect(parseLanguage('i-bad-grandfathered')).toEqual(null)
112
- })
113
- })
114
- })