@agoric/internal 0.3.3-dev-abe0c45.0.abe0c45 → 0.3.3-dev-3dd4164.0.3dd4164

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/internal",
3
- "version": "0.3.3-dev-abe0c45.0.abe0c45",
3
+ "version": "0.3.3-dev-3dd4164.0.3dd4164",
4
4
  "description": "Externally unsupported utilities internal to agoric-sdk",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -20,7 +20,7 @@
20
20
  "lint:types": "yarn run -T tsc"
21
21
  },
22
22
  "dependencies": {
23
- "@agoric/base-zone": "0.1.1-dev-abe0c45.0.abe0c45",
23
+ "@agoric/base-zone": "0.1.1-dev-3dd4164.0.3dd4164",
24
24
  "@endo/common": "^1.2.13",
25
25
  "@endo/compartment-mapper": "^1.6.3",
26
26
  "@endo/errors": "^1.2.13",
@@ -37,7 +37,7 @@
37
37
  "jessie.js": "^0.3.4"
38
38
  },
39
39
  "devDependencies": {
40
- "@agoric/cosmic-proto": "0.4.1-dev-abe0c45.0.abe0c45",
40
+ "@agoric/cosmic-proto": "0.4.1-dev-3dd4164.0.3dd4164",
41
41
  "@endo/exo": "^1.5.12",
42
42
  "@endo/init": "^1.1.12",
43
43
  "@endo/ses-ava": "^1.3.2",
@@ -65,5 +65,5 @@
65
65
  "typeCoverage": {
66
66
  "atLeast": 93.02
67
67
  },
68
- "gitHead": "abe0c45f483e5166dcf22cf2360557014303b582"
68
+ "gitHead": "3dd416469e808e8dfaace7dc598c7251f6ef3ad4"
69
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"natural-sort.d.ts","sourceRoot":"","sources":["natural-sort.js"],"names":[],"mappings":"AAqCO,kCAJI,MAAM,KACN,MAAM,GACJ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAWtB"}
1
+ {"version":3,"file":"natural-sort.d.ts","sourceRoot":"","sources":["natural-sort.js"],"names":[],"mappings":"AAgDO,kCAJI,MAAM,KACN,MAAM,GACJ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAmCtB"}
@@ -1,3 +1,5 @@
1
+ import { provideLazyMap } from './js-utils.js';
2
+
1
3
  /**
2
4
  * @param {string} a
3
5
  * @param {string} b
@@ -22,27 +24,60 @@ const compareNats = (a, b) => {
22
24
  // eslint-disable-next-line no-nested-ternary
23
25
  const compareStrings = (a, b) => (a > b ? 1 : a < b ? -1 : 0);
24
26
 
25
- const rPrefixedDigits = /^(\D*)(\d+)(\D.*|)/s;
27
+ const rCaptureDigits = /([0-9]+)/;
28
+
29
+ /**
30
+ * Splitting by regular expression can be expensive; we don't want to repeat
31
+ * that for every comparison against the same string.
32
+ *
33
+ * @type {Map<string, string[]>}
34
+ */
35
+ const partsCache = new Map();
26
36
 
27
37
  /**
28
- * Perform a single-level natural-sort comparison, finding the first decimal
29
- * digit sequence in each operand and comparing first by the (possibly empty)
30
- * preceding prefix as strings, then by the digits as integers, then by any
31
- * following suffix (e.g., sorting 'ko42' before 'ko100' as ['ko', 42] vs.
32
- * ['ko', 100]).
38
+ * Perform a multi-level natural-sort comparison, finding the decimal digit
39
+ * sequences in each operand and comparing first by each ([possibly empty]
40
+ * string prefix, integer) pair in turn, with a final comparision by string
41
+ * suffix as necessary (e.g., sorting 'ko42' before 'ko100' as ['ko', 42] vs.
42
+ * ['ko', 100] and 'parent1.child8' before 'parent1.child10' as ['parent', 1,
43
+ * 'child', 8] vs. ['parent', 1, 'child', 10]).
33
44
  *
34
45
  * @param {string} a
35
46
  * @param {string} b
36
47
  * @returns {-1 | 0 | 1}
37
48
  */
38
49
  export const naturalCompare = (a, b) => {
39
- const [_a, aPrefix, aDigits, aSuffix] = rPrefixedDigits.exec(a) || [];
40
- if (aPrefix !== undefined) {
41
- const [_b, bPrefix, bDigits, bSuffix] = rPrefixedDigits.exec(b) || [];
42
- if (bPrefix === aPrefix) {
43
- return compareNats(aDigits, bDigits) || compareStrings(aSuffix, bSuffix);
50
+ // We want to maintain a cache only for the duration of each call to
51
+ // array.sort, and leverage the synchronous nature of that method in the first
52
+ // invocation of each turn (indicated by an empty cache) to schedule cache
53
+ // clearing in the *next* turn.
54
+ if (!partsCache.size) void Promise.resolve().then(() => partsCache.clear());
55
+
56
+ const aParts = provideLazyMap(partsCache, a, () => a.split(rCaptureDigits));
57
+ const bParts = provideLazyMap(partsCache, b, () => b.split(rCaptureDigits));
58
+
59
+ // An even index corresponds with a string part; an odd one with a digit part.
60
+ let i = 0;
61
+ for (; i + 1 < aParts.length; i += 2) {
62
+ if (i + 1 < bParts.length) {
63
+ // Both `a` and `b` have a digit part here, but we compare the preceding
64
+ // string part first in case those are unequal.
65
+ const result =
66
+ compareStrings(aParts[i], bParts[i]) ||
67
+ compareNats(aParts[i + 1], bParts[i + 1]);
68
+ if (result) return result;
69
+ } else {
70
+ // After a (possibly empty) common prefix, `a` has digits where `b` does
71
+ // not, so we use string comparison of `${aString}${aDigits}` vs.
72
+ // `${bString}`.
73
+ return compareStrings(`${aParts[i]}${aParts[i + 1]}`, bParts[i]);
44
74
  }
45
75
  }
46
- return compareStrings(a, b);
76
+ if (bParts.length > aParts.length) {
77
+ // `b` has digits where `a` does not.
78
+ return compareStrings(aParts[i], `${bParts[i]}${bParts[i + 1]}`);
79
+ }
80
+ // If `a` and `b` differ, it's only in the final string suffix.
81
+ return compareStrings(aParts[i], bParts[i]);
47
82
  };
48
83
  harden(naturalCompare);
@@ -30,6 +30,7 @@ export function makeLimitedConsole(makeLogger: (level: string) => (...args: unkn
30
30
  * @type {<T extends {}>(unfulfilledTerms: T) => Promise<DeeplyAwaited<T>>}
31
31
  */
32
32
  export const deeplyFulfilledObject: <T extends {}>(unfulfilledTerms: T) => Promise<DeeplyAwaited<T>>;
33
+ export function stripPrefix(prefix: string, str: string): string;
33
34
  export function throwErrorCode<Code extends string>(details: Parameters<typeof makeError>[0], code: Code, opts?: Parameters<typeof makeError>[2] & {
34
35
  constructor?: Parameters<typeof makeError>[1];
35
36
  }): never;
@@ -1 +1 @@
1
- {"version":3,"file":"ses-utils.d.ts","sourceRoot":"","sources":["ses-utils.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ses-utils.d.ts","sourceRoot":"","sources":["ses-utils.js"],"names":[],"mappings":"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"}
package/src/ses-utils.js CHANGED
@@ -90,6 +90,18 @@ const makeAggregateError =
90
90
  });
91
91
  };
92
92
 
93
+ /**
94
+ * Assert that a string has a prefix, and return the part that follows it.
95
+ *
96
+ * @param {string} prefix
97
+ * @param {string} str
98
+ * @returns {string}
99
+ */
100
+ export const stripPrefix = (prefix, str) => {
101
+ str.startsWith(prefix) || Fail`${str} is missing prefix ${q(prefix)}`;
102
+ return str.slice(prefix.length);
103
+ };
104
+
93
105
  /**
94
106
  * Throw an error with an own "code" data property, supporting identification
95
107
  * without parsing `message`. Note that such errors are not Passable and thus