@adobe/data 0.9.60 → 0.9.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ecs/archetype/archetype.d.ts +9 -2
- package/dist/ecs/archetype/archetype.js.map +1 -1
- package/dist/ecs/archetype/create-archetype.js +5 -2
- package/dist/ecs/archetype/create-archetype.js.map +1 -1
- package/dist/ecs/database/combine-plugins.d.ts +5 -1
- package/dist/ecs/database/combine-plugins.js +3 -3
- package/dist/ecs/database/combine-plugins.js.map +1 -1
- package/dist/ecs/database/concurrency/concurrency-strategy.d.ts +86 -0
- package/dist/ecs/database/concurrency/concurrency-strategy.js +3 -0
- package/dist/ecs/database/concurrency/concurrency-strategy.js.map +1 -0
- package/dist/ecs/database/concurrency/immediate-concurrency.d.ts +22 -0
- package/dist/ecs/database/concurrency/immediate-concurrency.js +74 -0
- package/dist/ecs/database/concurrency/immediate-concurrency.js.map +1 -0
- package/dist/ecs/database/concurrency/index.d.ts +4 -0
- package/dist/ecs/database/concurrency/index.js +5 -0
- package/dist/ecs/database/concurrency/index.js.map +1 -0
- package/dist/ecs/database/concurrency/rebase-replay-concurrency.d.ts +20 -0
- package/dist/ecs/database/concurrency/rebase-replay-concurrency.js +34 -0
- package/dist/ecs/database/concurrency/rebase-replay-concurrency.js.map +1 -0
- package/dist/ecs/database/concurrency/roll-forward-concurrency.d.ts +33 -0
- package/dist/ecs/database/concurrency/roll-forward-concurrency.js +115 -0
- package/dist/ecs/database/concurrency/roll-forward-concurrency.js.map +1 -0
- package/dist/ecs/database/concurrency/roll-forward-concurrency.test.d.ts +1 -0
- package/dist/ecs/database/concurrency/roll-forward-concurrency.test.js +136 -0
- package/dist/ecs/database/concurrency/roll-forward-concurrency.test.js.map +1 -0
- package/dist/ecs/database/create-plugin.d.ts +17 -14
- package/dist/ecs/database/create-plugin.js +2 -1
- package/dist/ecs/database/create-plugin.js.map +1 -1
- package/dist/ecs/database/database.d.ts +61 -11
- package/dist/ecs/database/database.index.performance.test.d.ts +1 -0
- package/dist/ecs/database/database.index.performance.test.js +417 -0
- package/dist/ecs/database/database.index.performance.test.js.map +1 -0
- package/dist/ecs/database/database.index.test.d.ts +1 -0
- package/dist/ecs/database/database.index.test.js +1142 -0
- package/dist/ecs/database/database.index.test.js.map +1 -0
- package/dist/ecs/database/database.index.type-test.d.ts +1 -0
- package/dist/ecs/database/database.index.type-test.js +275 -0
- package/dist/ecs/database/database.index.type-test.js.map +1 -0
- package/dist/ecs/database/database.js.map +1 -1
- package/dist/ecs/database/database.reset.test.js +2 -1
- package/dist/ecs/database/database.reset.test.js.map +1 -1
- package/dist/ecs/database/deep-extends-chain.type-test.d.ts +256 -256
- package/dist/ecs/database/index-api-proof.type-test.d.ts +1 -0
- package/dist/ecs/database/index-api-proof.type-test.js +88 -0
- package/dist/ecs/database/index-api-proof.type-test.js.map +1 -0
- package/dist/ecs/database/index-registry/create-index-registry.d.ts +53 -0
- package/dist/ecs/database/index-registry/create-index-registry.js +174 -0
- package/dist/ecs/database/index-registry/create-index-registry.js.map +1 -0
- package/dist/ecs/database/index-registry/create-index.d.ts +60 -0
- package/dist/ecs/database/index-registry/create-index.js +539 -0
- package/dist/ecs/database/index-registry/create-index.js.map +1 -0
- package/dist/ecs/database/index-registry/index.d.ts +4 -0
- package/dist/ecs/database/index-registry/index.js +4 -0
- package/dist/ecs/database/index-registry/index.js.map +1 -0
- package/dist/ecs/database/index.d.ts +1 -0
- package/dist/ecs/database/index.js +1 -0
- package/dist/ecs/database/index.js.map +1 -1
- package/dist/ecs/database/observe-index-entities.d.ts +26 -0
- package/dist/ecs/database/observe-index-entities.js +66 -0
- package/dist/ecs/database/observe-index-entities.js.map +1 -0
- package/dist/ecs/database/observed/create-observed-database.js +1 -1
- package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
- package/dist/ecs/database/observed/observed-database.d.ts +1 -1
- package/dist/ecs/database/public/create-database.d.ts +12 -27
- package/dist/ecs/database/public/create-database.js +252 -10
- package/dist/ecs/database/public/create-database.js.map +1 -1
- package/dist/ecs/database/public/create-database.test.js +8 -7
- package/dist/ecs/database/public/create-database.test.js.map +1 -1
- package/dist/ecs/database/public/create-transaction-dispatcher.d.ts +4 -2
- package/dist/ecs/database/public/create-transaction-dispatcher.js +2 -8
- package/dist/ecs/database/public/create-transaction-dispatcher.js.map +1 -1
- package/dist/ecs/database/reconciling/create-rebase-replay-applier.d.ts +26 -0
- package/dist/ecs/database/reconciling/create-rebase-replay-applier.js +121 -0
- package/dist/ecs/database/reconciling/create-rebase-replay-applier.js.map +1 -0
- package/dist/ecs/database/reconciling/create-reconciling-database.d.ts +11 -0
- package/dist/ecs/database/reconciling/create-reconciling-database.js +28 -137
- package/dist/ecs/database/reconciling/create-reconciling-database.js.map +1 -1
- package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
- package/dist/ecs/database/transactional-store/transactional-store.d.ts +4 -3
- package/dist/ecs/entity-location-table/create-entity-location-table.js +2 -2
- package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
- package/dist/ecs/entity-location-table/entity-location-table.d.ts +7 -1
- package/dist/ecs/plugins/scheduler/scheduler.d.ts +1 -0
- package/dist/ecs/store/core/core.d.ts +7 -1
- package/dist/ecs/store/core/create-core.js +3 -3
- package/dist/ecs/store/core/create-core.js.map +1 -1
- package/dist/ecs/store/index-types.d.ts +142 -0
- package/dist/ecs/store/index-types.js +3 -0
- package/dist/ecs/store/index-types.js.map +1 -0
- package/dist/ecs/store/public/create-store.js +206 -4
- package/dist/ecs/store/public/create-store.js.map +1 -1
- package/dist/ecs/store/public/create-store.test.js +25 -0
- package/dist/ecs/store/public/create-store.test.js.map +1 -1
- package/dist/ecs/store/store.d.ts +38 -14
- package/dist/ecs/store/store.js +5 -4
- package/dist/ecs/store/store.js.map +1 -1
- package/dist/ecs/store/transaction-functions.d.ts +4 -3
- package/dist/schema/fractional-index/between-n.d.ts +2 -0
- package/dist/schema/fractional-index/between-n.js +34 -0
- package/dist/schema/fractional-index/between-n.js.map +1 -0
- package/dist/schema/fractional-index/between-n.test.d.ts +1 -0
- package/dist/schema/fractional-index/between-n.test.js +36 -0
- package/dist/schema/fractional-index/between-n.test.js.map +1 -0
- package/dist/schema/fractional-index/between.d.ts +2 -0
- package/dist/schema/fractional-index/between.js +3 -0
- package/dist/schema/fractional-index/between.js.map +1 -0
- package/dist/schema/fractional-index/between.test.d.ts +1 -0
- package/dist/schema/fractional-index/between.test.js +68 -0
- package/dist/schema/fractional-index/between.test.js.map +1 -0
- package/dist/schema/fractional-index/decrement-integer.d.ts +1 -0
- package/dist/schema/fractional-index/decrement-integer.js +32 -0
- package/dist/schema/fractional-index/decrement-integer.js.map +1 -0
- package/dist/schema/fractional-index/decrement-integer.test.d.ts +1 -0
- package/dist/schema/fractional-index/decrement-integer.test.js +31 -0
- package/dist/schema/fractional-index/decrement-integer.test.js.map +1 -0
- package/dist/schema/fractional-index/digits.d.ts +1 -0
- package/dist/schema/fractional-index/digits.js +3 -0
- package/dist/schema/fractional-index/digits.js.map +1 -0
- package/dist/schema/fractional-index/fractional-index.d.ts +4 -0
- package/dist/schema/fractional-index/fractional-index.js +2 -0
- package/dist/schema/fractional-index/fractional-index.js.map +1 -0
- package/dist/schema/fractional-index/increment-integer.d.ts +1 -0
- package/dist/schema/fractional-index/increment-integer.js +32 -0
- package/dist/schema/fractional-index/increment-integer.js.map +1 -0
- package/dist/schema/fractional-index/increment-integer.test.d.ts +1 -0
- package/dist/schema/fractional-index/increment-integer.test.js +34 -0
- package/dist/schema/fractional-index/increment-integer.test.js.map +1 -0
- package/dist/schema/fractional-index/initial.d.ts +2 -0
- package/dist/schema/fractional-index/initial.js +2 -0
- package/dist/schema/fractional-index/initial.js.map +1 -0
- package/dist/schema/fractional-index/integer-length.d.ts +1 -0
- package/dist/schema/fractional-index/integer-length.js +9 -0
- package/dist/schema/fractional-index/integer-length.js.map +1 -0
- package/dist/schema/fractional-index/integer-part.d.ts +1 -0
- package/dist/schema/fractional-index/integer-part.js +9 -0
- package/dist/schema/fractional-index/integer-part.js.map +1 -0
- package/dist/schema/fractional-index/key-between.d.ts +2 -0
- package/dist/schema/fractional-index/key-between.js +39 -0
- package/dist/schema/fractional-index/key-between.js.map +1 -0
- package/dist/schema/fractional-index/midpoint.d.ts +1 -0
- package/dist/schema/fractional-index/midpoint.js +23 -0
- package/dist/schema/fractional-index/midpoint.js.map +1 -0
- package/dist/schema/fractional-index/midpoint.test.d.ts +1 -0
- package/dist/schema/fractional-index/midpoint.test.js +83 -0
- package/dist/schema/fractional-index/midpoint.test.js.map +1 -0
- package/dist/schema/fractional-index/public.d.ts +4 -0
- package/dist/schema/fractional-index/public.js +6 -0
- package/dist/schema/fractional-index/public.js.map +1 -0
- package/dist/schema/fractional-index/schema.d.ts +4 -0
- package/dist/schema/fractional-index/schema.js +5 -0
- package/dist/schema/fractional-index/schema.js.map +1 -0
- package/dist/schema/fractional-index/smallest-integer.d.ts +1 -0
- package/dist/schema/fractional-index/smallest-integer.js +3 -0
- package/dist/schema/fractional-index/smallest-integer.js.map +1 -0
- package/dist/schema/fractional-index/validate-integer.d.ts +1 -0
- package/dist/schema/fractional-index/validate-integer.js +7 -0
- package/dist/schema/fractional-index/validate-integer.js.map +1 -0
- package/dist/schema/fractional-index/validate-order-key.d.ts +1 -0
- package/dist/schema/fractional-index/validate-order-key.js +11 -0
- package/dist/schema/fractional-index/validate-order-key.js.map +1 -0
- package/dist/schema/guid/create.d.ts +2 -0
- package/dist/schema/guid/create.js +10 -0
- package/dist/schema/guid/create.js.map +1 -0
- package/dist/schema/guid/create.test.d.ts +1 -0
- package/dist/schema/guid/create.test.js +39 -0
- package/dist/schema/guid/create.test.js.map +1 -0
- package/dist/schema/guid/equals.d.ts +2 -0
- package/dist/schema/guid/equals.js +3 -0
- package/dist/schema/guid/equals.js.map +1 -0
- package/dist/schema/guid/equals.test.d.ts +1 -0
- package/dist/schema/guid/equals.test.js +30 -0
- package/dist/schema/guid/equals.test.js.map +1 -0
- package/dist/schema/guid/from-uuid.d.ts +2 -0
- package/dist/schema/guid/from-uuid.js +15 -0
- package/dist/schema/guid/from-uuid.js.map +1 -0
- package/dist/schema/guid/from-uuid.test.d.ts +1 -0
- package/dist/schema/guid/from-uuid.test.js +39 -0
- package/dist/schema/guid/from-uuid.test.js.map +1 -0
- package/dist/schema/guid/guid.performance.test.d.ts +1 -0
- package/dist/schema/guid/guid.performance.test.js +297 -0
- package/dist/schema/guid/guid.performance.test.js.map +1 -0
- package/dist/schema/guid/index.d.ts +4 -0
- package/dist/schema/guid/index.js +3 -0
- package/dist/schema/guid/index.js.map +1 -0
- package/dist/schema/guid/layout.d.ts +1 -0
- package/dist/schema/guid/layout.js +5 -0
- package/dist/schema/guid/layout.js.map +1 -0
- package/dist/schema/guid/nil.d.ts +2 -0
- package/dist/schema/guid/nil.js +3 -0
- package/dist/schema/guid/nil.js.map +1 -0
- package/dist/schema/guid/public.d.ts +8 -0
- package/dist/schema/guid/public.js +10 -0
- package/dist/schema/guid/public.js.map +1 -0
- package/dist/schema/guid/schema.d.ts +12 -0
- package/dist/schema/guid/schema.js +10 -0
- package/dist/schema/guid/schema.js.map +1 -0
- package/dist/schema/guid/schema.test.d.ts +1 -0
- package/dist/schema/guid/schema.test.js +35 -0
- package/dist/schema/guid/schema.test.js.map +1 -0
- package/dist/schema/guid/to-unserializable-key.d.ts +2 -0
- package/dist/schema/guid/to-unserializable-key.js +10 -0
- package/dist/schema/guid/to-unserializable-key.js.map +1 -0
- package/dist/schema/guid/to-uuid.d.ts +2 -0
- package/dist/schema/guid/to-uuid.js +15 -0
- package/dist/schema/guid/to-uuid.js.map +1 -0
- package/dist/schema/guid/to-uuid.test.d.ts +1 -0
- package/dist/schema/guid/to-uuid.test.js +31 -0
- package/dist/schema/guid/to-uuid.test.js.map +1 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/table/select-rows.d.ts +7 -4
- package/dist/table/select-rows.js.map +1 -1
- package/dist/test-setup.js +2 -2
- package/dist/test-setup.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/references/data-lit/package.json +1 -1
- package/references/data-lit-tictactoe/package.json +1 -1
- package/references/data-react/package.json +1 -1
- package/references/data-react-hello/package.json +1 -1
- package/references/data-react-pixie/package.json +1 -1
package/dist/ecs/store/store.js
CHANGED
|
@@ -6,8 +6,8 @@ export var Store;
|
|
|
6
6
|
(function (Schema) {
|
|
7
7
|
/**
|
|
8
8
|
* Creates a Store schema with optional properties. All schema properties
|
|
9
|
-
* (components, resources, archetypes) are optional and default
|
|
10
|
-
* objects when not provided.
|
|
9
|
+
* (components, resources, archetypes, indexes) are optional and default
|
|
10
|
+
* to empty objects when not provided.
|
|
11
11
|
*
|
|
12
12
|
* @param schema - Partial store schema. Omit any properties you don't need.
|
|
13
13
|
* @param dependencies - Optional array of schemas to merge with. Properties from
|
|
@@ -31,14 +31,15 @@ export var Store;
|
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
33
|
function create(schema, dependencies) {
|
|
34
|
-
const { components = {}, resources = {}, archetypes = {} } = schema;
|
|
34
|
+
const { components = {}, resources = {}, archetypes = {}, indexes = {} } = schema;
|
|
35
35
|
return (dependencies ?? []).reduce((acc, curr) => {
|
|
36
36
|
return {
|
|
37
37
|
components: { ...acc.components, ...curr.components },
|
|
38
38
|
resources: { ...acc.resources, ...curr.resources },
|
|
39
39
|
archetypes: { ...acc.archetypes, ...curr.archetypes },
|
|
40
|
+
indexes: { ...acc.indexes, ...curr.indexes },
|
|
40
41
|
};
|
|
41
|
-
}, { components, resources, archetypes });
|
|
42
|
+
}, { components, resources, archetypes, indexes });
|
|
42
43
|
}
|
|
43
44
|
Schema.create = create;
|
|
44
45
|
})(Schema = Store.Schema || (Store.Schema = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/ecs/store/store.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/ecs/store/store.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AA+DvD,2DAA2D;AAC3D,MAAM,KAAW,KAAK,CAsHrB;AAtHD,WAAiB,KAAK;IAuBlB,IAAiB,MAAM,CA4FtB;IA5FD,WAAiB,MAAM;QAsCnB;;;;;;;;;;;;;;;;;;;;;;;;;WAyBG;QACH,SAAgB,MAAM,CAOlB,MAKE,EACF,YAAgB;YAEhB,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;YAClF,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC7C,OAAO;oBACH,UAAU,EAAE,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;oBACrD,SAAS,EAAE,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;oBAClD,UAAU,EAAE,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;oBACrD,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;iBAC/C,CAAA;YACL,CAAC,EACG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAS,CACxD,CAAC;QACN,CAAC;QA1Be,aAAM,SA0BrB,CAAA;IAEL,CAAC,EA5FgB,MAAM,GAAN,YAAM,KAAN,YAAM,QA4FtB;IAEY,YAAM,GAAG,WAAW,CAAC;AACtC,CAAC,EAtHgB,KAAK,KAAL,KAAK,QAsHrB"}
|
|
@@ -3,11 +3,12 @@ import { Components } from "./components.js";
|
|
|
3
3
|
import { ResourceComponents } from "./resource-components.js";
|
|
4
4
|
import { ArchetypeComponents } from "./archetype-components.js";
|
|
5
5
|
import { StringKeyof } from "../../types/types.js";
|
|
6
|
+
import { IndexDeclarations } from "./index-types.js";
|
|
6
7
|
import type { TransactionContext } from "../database/transactional-store/transactional-store.js";
|
|
7
|
-
export type TransactionDeclaration<C extends Components, R extends ResourceComponents, A extends ArchetypeComponents<StringKeyof<C>>, Input extends any | void = any> = (t: TransactionContext<C, R, A>, input: Input) => void | Entity;
|
|
8
|
+
export type TransactionDeclaration<C extends Components, R extends ResourceComponents, A extends ArchetypeComponents<StringKeyof<C>>, IX extends IndexDeclarations<C> = {}, Input extends any | void = any> = (t: TransactionContext<C, R, A, IX>, input: Input) => void | Entity;
|
|
8
9
|
export type AsyncArgsProvider<T> = () => Promise<T> | AsyncGenerator<T>;
|
|
9
|
-
export type TransactionDeclarations<C extends Components, R extends ResourceComponents, A extends ArchetypeComponents<StringKeyof<C
|
|
10
|
-
readonly [Q: string]: TransactionDeclaration<C, R, A>;
|
|
10
|
+
export type TransactionDeclarations<C extends Components, R extends ResourceComponents, A extends ArchetypeComponents<StringKeyof<C>>, IX extends IndexDeclarations<C> = {}> = {
|
|
11
|
+
readonly [Q: string]: TransactionDeclaration<C, R, A, IX>;
|
|
11
12
|
};
|
|
12
13
|
/**
|
|
13
14
|
* Converts from TransactionDeclarations to TransactionFunctions by removing
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { keyBetween } from "./key-between.js";
|
|
2
|
+
export const betweenN = (a, b, n) => {
|
|
3
|
+
if (n === 0)
|
|
4
|
+
return [];
|
|
5
|
+
if (n === 1)
|
|
6
|
+
return [keyBetween(a, b)];
|
|
7
|
+
if (b === undefined) {
|
|
8
|
+
let c = keyBetween(a, b);
|
|
9
|
+
const result = [c];
|
|
10
|
+
for (let i = 0; i < n - 1; i++) {
|
|
11
|
+
c = keyBetween(c, b);
|
|
12
|
+
result.push(c);
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
if (a === undefined) {
|
|
17
|
+
let c = keyBetween(a, b);
|
|
18
|
+
const result = [c];
|
|
19
|
+
for (let i = 0; i < n - 1; i++) {
|
|
20
|
+
c = keyBetween(a, c);
|
|
21
|
+
result.push(c);
|
|
22
|
+
}
|
|
23
|
+
result.reverse();
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
const mid = Math.floor(n / 2);
|
|
27
|
+
const c = keyBetween(a, b);
|
|
28
|
+
return [
|
|
29
|
+
...betweenN(a, c, mid),
|
|
30
|
+
c,
|
|
31
|
+
...betweenN(c, b, n - mid - 1),
|
|
32
|
+
];
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=between-n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"between-n.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/between-n.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,QAAQ,GAAG,CACpB,CAA8B,EAC9B,CAA8B,EAC9B,CAAS,EACQ,EAAE;IACnB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO;QACH,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;QACtB,CAAC;QACD,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;KACjC,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { betweenN } from "./between-n.js";
|
|
4
|
+
const fi = (s) => s;
|
|
5
|
+
describe("betweenN", () => {
|
|
6
|
+
it("returns empty array for n = 0", () => {
|
|
7
|
+
expect(betweenN(undefined, undefined, 0)).toEqual([]);
|
|
8
|
+
});
|
|
9
|
+
it("generates n keys between undefined bounds", () => {
|
|
10
|
+
expect(betweenN(undefined, undefined, 5).join(" ")).toBe("a0 a1 a2 a3 a4");
|
|
11
|
+
});
|
|
12
|
+
it("generates n keys after a lower bound", () => {
|
|
13
|
+
expect(betweenN(fi("a4"), undefined, 10).join(" ")).toBe("a5 a6 a7 a8 a9 aA aB aC aD aE");
|
|
14
|
+
});
|
|
15
|
+
it("generates n keys before an upper bound", () => {
|
|
16
|
+
expect(betweenN(undefined, fi("a0"), 5).join(" ")).toBe("Zv Zw Zx Zy Zz");
|
|
17
|
+
});
|
|
18
|
+
it("generates n keys between two bounds (shared integer part)", () => {
|
|
19
|
+
expect(betweenN(fi("a0"), fi("a2"), 20).join(" ")).toBe("a04 a08 a0G a0K a0O a0V a0Z a0d a0l a0t a1 a14 a18 a1G a1O a1V a1Z a1d a1l a1t");
|
|
20
|
+
});
|
|
21
|
+
it("keys are in strictly ascending order", () => {
|
|
22
|
+
const keys = betweenN(fi("a0"), fi("b00"), 50);
|
|
23
|
+
for (let i = 1; i < keys.length; i++) {
|
|
24
|
+
expect(keys[i] > keys[i - 1]).toBe(true);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
it("bulk insert of 500 keys grows length by at most 2 chars", () => {
|
|
28
|
+
const start = fi("a0");
|
|
29
|
+
const end = betweenN(start, undefined, 1)[0];
|
|
30
|
+
const keys = betweenN(start, end, 500);
|
|
31
|
+
const baseline = Math.max(start.length, end.length);
|
|
32
|
+
const maxLen = keys.reduce((m, k) => Math.max(m, k.length), 0);
|
|
33
|
+
expect(maxLen).toBe(baseline + 2);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=between-n.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"between-n.test.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/between-n.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"between.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/between.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG,CACnB,CAA8B,EAC9B,CAA8B,EACf,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { between } from "./between.js";
|
|
4
|
+
const fi = (s) => s;
|
|
5
|
+
describe("between", () => {
|
|
6
|
+
it("returns initial when both bounds are undefined", () => {
|
|
7
|
+
expect(between(undefined, undefined)).toBe("a0");
|
|
8
|
+
});
|
|
9
|
+
it("generates keys before an existing key", () => {
|
|
10
|
+
expect(between(undefined, fi("a0"))).toBe("Zz");
|
|
11
|
+
expect(between(undefined, fi("Y00"))).toBe("Xzzz");
|
|
12
|
+
expect(between(undefined, fi("a0V"))).toBe("a0");
|
|
13
|
+
expect(between(undefined, fi("b999"))).toBe("b99");
|
|
14
|
+
expect(between(undefined, fi("A000000000000000000000000001"))).toBe("A000000000000000000000000000V");
|
|
15
|
+
});
|
|
16
|
+
it("generates keys after an existing key", () => {
|
|
17
|
+
expect(between(fi("a0"), undefined)).toBe("a1");
|
|
18
|
+
expect(between(fi("bzz"), undefined)).toBe("c000");
|
|
19
|
+
expect(between(fi("zzzzzzzzzzzzzzzzzzzzzzzzzzy"), undefined)).toBe("zzzzzzzzzzzzzzzzzzzzzzzzzzz");
|
|
20
|
+
expect(between(fi("zzzzzzzzzzzzzzzzzzzzzzzzzzz"), undefined)).toBe("zzzzzzzzzzzzzzzzzzzzzzzzzzzV");
|
|
21
|
+
});
|
|
22
|
+
it("generates keys between two existing keys", () => {
|
|
23
|
+
expect(between(fi("a0"), fi("a1"))).toBe("a0V");
|
|
24
|
+
expect(between(fi("a0V"), fi("a1"))).toBe("a0l");
|
|
25
|
+
expect(between(fi("Zz"), fi("a0"))).toBe("ZzV");
|
|
26
|
+
expect(between(fi("Zz"), fi("a1"))).toBe("a0");
|
|
27
|
+
expect(between(fi("a0"), fi("a0V"))).toBe("a0G");
|
|
28
|
+
expect(between(fi("a0"), fi("a0G"))).toBe("a08");
|
|
29
|
+
expect(between(fi("b125"), fi("b129"))).toBe("b127");
|
|
30
|
+
expect(between(fi("a0"), fi("a1V"))).toBe("a1");
|
|
31
|
+
expect(between(fi("Zz"), fi("a01"))).toBe("a0");
|
|
32
|
+
});
|
|
33
|
+
it("throws for invalid key (smallest integer)", () => {
|
|
34
|
+
expect(() => between(undefined, fi("A00000000000000000000000000"))).toThrow("invalid order key");
|
|
35
|
+
});
|
|
36
|
+
it("throws for trailing zero in fractional part", () => {
|
|
37
|
+
expect(() => between(undefined, fi("b0"))).toThrow("invalid order key");
|
|
38
|
+
expect(() => between(fi("a00"), undefined)).toThrow("invalid order key");
|
|
39
|
+
expect(() => between(fi("a00"), fi("a1"))).toThrow("invalid order key");
|
|
40
|
+
});
|
|
41
|
+
it("throws when head is a digit instead of a letter", () => {
|
|
42
|
+
expect(() => between(fi("0"), fi("1"))).toThrow("Invalid order key head");
|
|
43
|
+
});
|
|
44
|
+
it("throws when a >= b", () => {
|
|
45
|
+
expect(() => between(fi("a1"), fi("a0"))).toThrow("Invalid key order: a >= b");
|
|
46
|
+
});
|
|
47
|
+
it("max length for 100k consecutive appends is 4 chars", () => {
|
|
48
|
+
let current = fi("a0");
|
|
49
|
+
let maxLen = current.length;
|
|
50
|
+
for (let i = 0; i < 100_000; i++) {
|
|
51
|
+
current = between(current, undefined);
|
|
52
|
+
if (current.length > maxLen)
|
|
53
|
+
maxLen = current.length;
|
|
54
|
+
}
|
|
55
|
+
expect(maxLen).toBe(4);
|
|
56
|
+
});
|
|
57
|
+
it("max length for 500 consecutive head-inserts is 86 chars", () => {
|
|
58
|
+
let next;
|
|
59
|
+
let maxLen = 0;
|
|
60
|
+
for (let i = 0; i < 500; i++) {
|
|
61
|
+
next = between(fi("a0"), next);
|
|
62
|
+
if (next.length > maxLen)
|
|
63
|
+
maxLen = next.length;
|
|
64
|
+
}
|
|
65
|
+
expect(maxLen).toBe(86);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=between.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"between.test.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/between.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const decrementInteger: (x: string) => string | undefined;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { digits } from "./digits.js";
|
|
3
|
+
import { validateInteger } from "./validate-integer.js";
|
|
4
|
+
export const decrementInteger = (x) => {
|
|
5
|
+
validateInteger(x);
|
|
6
|
+
const [head, ...digs] = x.split("");
|
|
7
|
+
let borrow = true;
|
|
8
|
+
for (let i = digs.length - 1; borrow && i >= 0; i--) {
|
|
9
|
+
const d = digits.indexOf(digs[i]) - 1;
|
|
10
|
+
if (d === -1) {
|
|
11
|
+
digs[i] = digits.slice(-1);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
digs[i] = digits.charAt(d);
|
|
15
|
+
borrow = false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (borrow) {
|
|
19
|
+
if (head === "a")
|
|
20
|
+
return "Z" + digits.slice(-1);
|
|
21
|
+
if (head === "A")
|
|
22
|
+
return undefined;
|
|
23
|
+
const h = String.fromCharCode(head.charCodeAt(0) - 1);
|
|
24
|
+
if (h < "Z")
|
|
25
|
+
digs.push(digits.slice(-1));
|
|
26
|
+
else
|
|
27
|
+
digs.pop();
|
|
28
|
+
return h + digs.join("");
|
|
29
|
+
}
|
|
30
|
+
return head + digs.join("");
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=decrement-integer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decrement-integer.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/decrement-integer.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAsB,EAAE;IAC9D,eAAe,CAAC,CAAC,CAAC,CAAC;IACnB,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,GAAG,KAAK,CAAC;QACnB,CAAC;IACL,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACT,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,SAAS,CAAC;QACnC,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { decrementInteger } from "./decrement-integer.js";
|
|
4
|
+
describe("decrementInteger", () => {
|
|
5
|
+
it("decrements simple keys", () => {
|
|
6
|
+
expect(decrementInteger("a1")).toBe("a0");
|
|
7
|
+
expect(decrementInteger("a2")).toBe("a1");
|
|
8
|
+
});
|
|
9
|
+
it("borrows across digit positions", () => {
|
|
10
|
+
expect(decrementInteger("b00")).toBe("az");
|
|
11
|
+
expect(decrementInteger("b10")).toBe("b0z");
|
|
12
|
+
expect(decrementInteger("b20")).toBe("b1z");
|
|
13
|
+
expect(decrementInteger("c000")).toBe("bzz");
|
|
14
|
+
expect(decrementInteger("dAC00")).toBe("dABzz");
|
|
15
|
+
});
|
|
16
|
+
it("crosses the positive/negative boundary", () => {
|
|
17
|
+
expect(decrementInteger("Zz")).toBe("Zy");
|
|
18
|
+
expect(decrementInteger("a0")).toBe("Zz");
|
|
19
|
+
});
|
|
20
|
+
it("handles transitions that lengthen the integer part (negative side)", () => {
|
|
21
|
+
expect(decrementInteger("Yzz")).toBe("Yzy");
|
|
22
|
+
expect(decrementInteger("Z0")).toBe("Yzz");
|
|
23
|
+
expect(decrementInteger("Xz00")).toBe("Xyzz");
|
|
24
|
+
expect(decrementInteger("Xz01")).toBe("Xz00");
|
|
25
|
+
expect(decrementInteger("Y00")).toBe("Xzzz");
|
|
26
|
+
});
|
|
27
|
+
it("returns undefined at the bottom of range", () => {
|
|
28
|
+
expect(decrementInteger("A00000000000000000000000000")).toBeUndefined();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=decrement-integer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decrement-integer.test.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/decrement-integer.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"digits.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/digits.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,CAAC,MAAM,MAAM,GAAG,gEAAgE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fractional-index.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/fractional-index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,eAAe,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const incrementInteger: (x: string) => string | undefined;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { digits } from "./digits.js";
|
|
3
|
+
import { validateInteger } from "./validate-integer.js";
|
|
4
|
+
export const incrementInteger = (x) => {
|
|
5
|
+
validateInteger(x);
|
|
6
|
+
const [head, ...digs] = x.split("");
|
|
7
|
+
let carry = true;
|
|
8
|
+
for (let i = digs.length - 1; carry && i >= 0; i--) {
|
|
9
|
+
const d = digits.indexOf(digs[i]) + 1;
|
|
10
|
+
if (d === digits.length) {
|
|
11
|
+
digs[i] = "0";
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
digs[i] = digits.charAt(d);
|
|
15
|
+
carry = false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (carry) {
|
|
19
|
+
if (head === "Z")
|
|
20
|
+
return "a0";
|
|
21
|
+
if (head === "z")
|
|
22
|
+
return undefined;
|
|
23
|
+
const h = String.fromCharCode(head.charCodeAt(0) + 1);
|
|
24
|
+
if (h > "a")
|
|
25
|
+
digs.push("0");
|
|
26
|
+
else
|
|
27
|
+
digs.pop();
|
|
28
|
+
return h + digs.join("");
|
|
29
|
+
}
|
|
30
|
+
return head + digs.join("");
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=increment-integer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"increment-integer.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/increment-integer.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAsB,EAAE;IAC9D,eAAe,CAAC,CAAC,CAAC,CAAC;IACnB,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAClB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,KAAK,GAAG,KAAK,CAAC;QAClB,CAAC;IACL,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACR,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,SAAS,CAAC;QACnC,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { incrementInteger } from "./increment-integer.js";
|
|
4
|
+
describe("incrementInteger", () => {
|
|
5
|
+
it("increments simple keys", () => {
|
|
6
|
+
expect(incrementInteger("a0")).toBe("a1");
|
|
7
|
+
expect(incrementInteger("a1")).toBe("a2");
|
|
8
|
+
});
|
|
9
|
+
it("carries across digit positions", () => {
|
|
10
|
+
expect(incrementInteger("az")).toBe("b00");
|
|
11
|
+
expect(incrementInteger("b0z")).toBe("b10");
|
|
12
|
+
expect(incrementInteger("b1z")).toBe("b20");
|
|
13
|
+
expect(incrementInteger("bzz")).toBe("c000");
|
|
14
|
+
expect(incrementInteger("dABzz")).toBe("dAC00");
|
|
15
|
+
});
|
|
16
|
+
it("crosses the negative/positive boundary", () => {
|
|
17
|
+
expect(incrementInteger("Zy")).toBe("Zz");
|
|
18
|
+
expect(incrementInteger("Zz")).toBe("a0");
|
|
19
|
+
});
|
|
20
|
+
it("handles transitions that shorten the integer part (negative side)", () => {
|
|
21
|
+
expect(incrementInteger("Yzy")).toBe("Yzz");
|
|
22
|
+
expect(incrementInteger("Yzz")).toBe("Z0");
|
|
23
|
+
expect(incrementInteger("Xyzz")).toBe("Xz00");
|
|
24
|
+
expect(incrementInteger("Xz00")).toBe("Xz01");
|
|
25
|
+
expect(incrementInteger("Xzzz")).toBe("Y00");
|
|
26
|
+
});
|
|
27
|
+
it("returns undefined at the top of range", () => {
|
|
28
|
+
expect(incrementInteger("zzzzzzzzzzzzzzzzzzzzzzzzzzz")).toBeUndefined();
|
|
29
|
+
});
|
|
30
|
+
it("throws on invalid integer length", () => {
|
|
31
|
+
expect(() => incrementInteger("b0")).toThrow("invalid integer part of order key");
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=increment-integer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"increment-integer.test.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/increment-integer.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initial.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/initial.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,OAAO,GAAoB,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const integerLength: (head: string) => number;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
export const integerLength = (head) => {
|
|
3
|
+
if (head >= "a" && head <= "z")
|
|
4
|
+
return head.charCodeAt(0) - "a".charCodeAt(0) + 2;
|
|
5
|
+
if (head >= "A" && head <= "Z")
|
|
6
|
+
return "Z".charCodeAt(0) - head.charCodeAt(0) + 2;
|
|
7
|
+
throw new Error(`Invalid order key head: ${head}`);
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=integer-length.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integer-length.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/integer-length.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE;IAClD,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClF,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClF,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const integerPart: (key: string) => string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { integerLength } from "./integer-length.js";
|
|
3
|
+
export const integerPart = (key) => {
|
|
4
|
+
const len = integerLength(key.charAt(0));
|
|
5
|
+
if (len > key.length)
|
|
6
|
+
throw new Error("invalid order key");
|
|
7
|
+
return key.slice(0, len);
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=integer-part.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integer-part.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/integer-part.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAU,EAAE;IAC/C,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { decrementInteger } from "./decrement-integer.js";
|
|
2
|
+
import { incrementInteger } from "./increment-integer.js";
|
|
3
|
+
import { integerPart } from "./integer-part.js";
|
|
4
|
+
import { midpoint } from "./midpoint.js";
|
|
5
|
+
import { smallestInteger } from "./smallest-integer.js";
|
|
6
|
+
import { validateOrderKey } from "./validate-order-key.js";
|
|
7
|
+
export const keyBetween = (a, b) => {
|
|
8
|
+
if (a !== undefined)
|
|
9
|
+
validateOrderKey(a);
|
|
10
|
+
if (b !== undefined)
|
|
11
|
+
validateOrderKey(b);
|
|
12
|
+
if (a !== undefined && b !== undefined && a >= b) {
|
|
13
|
+
throw new Error("Invalid key order: a >= b");
|
|
14
|
+
}
|
|
15
|
+
if (a === undefined && b === undefined)
|
|
16
|
+
return "a0";
|
|
17
|
+
if (a === undefined) {
|
|
18
|
+
const ib = integerPart(b);
|
|
19
|
+
const fb = b.slice(ib.length);
|
|
20
|
+
if (ib === smallestInteger)
|
|
21
|
+
return ib + midpoint("", fb);
|
|
22
|
+
return ib < b ? ib : decrementInteger(ib);
|
|
23
|
+
}
|
|
24
|
+
if (b === undefined) {
|
|
25
|
+
const ia = integerPart(a);
|
|
26
|
+
const fa = a.slice(ia.length);
|
|
27
|
+
const i = incrementInteger(ia);
|
|
28
|
+
return i === undefined ? ia + midpoint(fa, undefined) : i;
|
|
29
|
+
}
|
|
30
|
+
const ia = integerPart(a);
|
|
31
|
+
const fa = a.slice(ia.length);
|
|
32
|
+
const ib = integerPart(b);
|
|
33
|
+
const fb = b.slice(ib.length);
|
|
34
|
+
if (ia === ib)
|
|
35
|
+
return ia + midpoint(fa, fb);
|
|
36
|
+
const i = incrementInteger(ia);
|
|
37
|
+
return i < b ? i : ia + midpoint(fa, undefined);
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=key-between.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-between.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/key-between.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,CAAC,MAAM,UAAU,GAAG,CACtB,CAA8B,EAC9B,CAA8B,EACf,EAAE;IACjB,IAAI,CAAC,KAAK,SAAS;QAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,SAAS;QAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEpD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QAClB,MAAM,EAAE,GAAG,WAAW,CAAC,CAAE,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,EAAE,KAAK,eAAe;YAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,GAAG,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAE,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QAClB,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const midpoint: (a: string, b: string | undefined, d?: string) => string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { digits as BASE_DIGITS } from "./digits.js";
|
|
3
|
+
export const midpoint = (a, b, d = BASE_DIGITS) => {
|
|
4
|
+
if (b !== undefined && a >= b)
|
|
5
|
+
throw new Error("Invalid midpoint args: a >= b");
|
|
6
|
+
if (a.slice(-1) === "0" || (b && b.slice(-1) === "0"))
|
|
7
|
+
throw new Error("trailing zero");
|
|
8
|
+
if (b) {
|
|
9
|
+
let n = 0;
|
|
10
|
+
while ((a.charAt(n) || "0") === b.charAt(n))
|
|
11
|
+
n++;
|
|
12
|
+
if (n > 0)
|
|
13
|
+
return b.slice(0, n) + midpoint(a.slice(n), b.slice(n), d);
|
|
14
|
+
}
|
|
15
|
+
const digitA = a ? d.indexOf(a.charAt(0)) : 0;
|
|
16
|
+
const digitB = b !== undefined ? d.indexOf(b.charAt(0)) : d.length;
|
|
17
|
+
if (digitB - digitA > 1)
|
|
18
|
+
return d.charAt(Math.round(0.5 * (digitA + digitB)));
|
|
19
|
+
if (b && b.length > 1)
|
|
20
|
+
return b.slice(0, 1);
|
|
21
|
+
return d.charAt(digitA) + midpoint(a.slice(1), undefined, d);
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=midpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"midpoint.js","sourceRoot":"","sources":["../../../src/schema/fractional-index/midpoint.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,CAAqB,EAAE,CAAC,GAAG,WAAW,EAAU,EAAE;IAClF,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAChF,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IAExF,IAAI,CAAC,EAAE,CAAC;QACJ,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnE,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|