@owlmeans/mongo-resource 0.1.15 → 0.1.16

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.
Files changed (53) hide show
  1. package/README.md +54 -10
  2. package/agent-meta/manifest.json +4 -11
  3. package/agent-meta/skills/mongo-resource/SKILL.md +150 -17
  4. package/build/consts.d.ts +16 -0
  5. package/build/consts.d.ts.map +1 -1
  6. package/build/consts.js +16 -0
  7. package/build/consts.js.map +1 -1
  8. package/build/declarations.d.ts +11 -0
  9. package/build/declarations.d.ts.map +1 -0
  10. package/build/declarations.js +29 -0
  11. package/build/declarations.js.map +1 -0
  12. package/build/index.d.ts +3 -0
  13. package/build/index.d.ts.map +1 -1
  14. package/build/index.js +3 -0
  15. package/build/index.js.map +1 -1
  16. package/build/resource.d.ts.map +1 -1
  17. package/build/resource.js +58 -23
  18. package/build/resource.js.map +1 -1
  19. package/build/types.d.ts +53 -2
  20. package/build/types.d.ts.map +1 -1
  21. package/build/utils/index.d.ts +2 -0
  22. package/build/utils/index.d.ts.map +1 -1
  23. package/build/utils/index.js +2 -0
  24. package/build/utils/index.js.map +1 -1
  25. package/build/utils/life-cycle.d.ts +25 -1
  26. package/build/utils/life-cycle.d.ts.map +1 -1
  27. package/build/utils/life-cycle.js +89 -11
  28. package/build/utils/life-cycle.js.map +1 -1
  29. package/build/utils/migrations.d.ts +24 -0
  30. package/build/utils/migrations.d.ts.map +1 -0
  31. package/build/utils/migrations.js +129 -0
  32. package/build/utils/migrations.js.map +1 -0
  33. package/build/utils/refs.d.ts +74 -0
  34. package/build/utils/refs.d.ts.map +1 -0
  35. package/build/utils/refs.js +197 -0
  36. package/build/utils/refs.js.map +1 -0
  37. package/build/utils/schema.d.ts +8 -0
  38. package/build/utils/schema.d.ts.map +1 -1
  39. package/build/utils/schema.js +25 -0
  40. package/build/utils/schema.js.map +1 -1
  41. package/package.json +5 -5
  42. package/src/consts.ts +20 -0
  43. package/src/declarations.ts +42 -0
  44. package/src/index.ts +4 -1
  45. package/src/resource.ts +76 -28
  46. package/src/types.ts +58 -2
  47. package/src/utils/index.ts +2 -0
  48. package/src/utils/life-cycle.ts +117 -15
  49. package/src/utils/migrations.ts +171 -0
  50. package/src/utils/refs.ts +240 -0
  51. package/src/utils/schema.ts +32 -0
  52. package/tests/refs.spec.ts +95 -0
  53. package/agent-meta/instructions/mongo-resource.instructions.md +0 -30
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
package/build/types.d.ts CHANGED
@@ -1,7 +1,44 @@
1
- import type { Resource, ResourceRecord, ResourceDbService, DbLocker, ResourceLocker } from '@owlmeans/resource';
1
+ import type { Resource, ResourceRecord, ResourceDbService, DbLocker, ResourceLocker, MigratableResource } from '@owlmeans/resource';
2
2
  import type { Collection, CreateIndexesOptions, Db, IndexSpecification, MongoClient } from 'mongodb';
3
3
  import type { AnySchema } from 'ajv';
4
- export interface MongoResource<T extends ResourceRecord> extends Resource<T>, ResourceLocker<T> {
4
+ /**
5
+ * What a mongo migration is handed.
6
+ *
7
+ * Deliberately not a session or transaction: multi-document transactions require a replica
8
+ * set, and a standalone `mongod` — the usual development and CI target — rejects them
9
+ * outright. A migration therefore has to be written to tolerate being interrupted partway,
10
+ * which in practice means idempotent updates rather than read-then-write.
11
+ */
12
+ export interface MongoTx {
13
+ db: Db;
14
+ /** The owning resource's collection. */
15
+ collection: Collection;
16
+ /** Another registered mongo resource's collection; omit the alias for the owning one. */
17
+ use: (alias?: string) => Collection;
18
+ /** A collection *name*, for `$lookup.from` and other stages that take one rather than a handle. */
19
+ ref: (alias?: string) => string;
20
+ }
21
+ /**
22
+ * A declared ObjectId reference — a record field that stores another record's id.
23
+ *
24
+ * The resource converts the field between the string ids records carry and the `ObjectId`
25
+ * the collection stores, exactly the way it already does for `_id`: strings in records and
26
+ * criteria, `ObjectId` on the wire. Declaring a reference also gives the field a mongo
27
+ * level index and registers the system migration that converts pre-existing string values.
28
+ */
29
+ export interface MongoReference {
30
+ /** Top level record property holding the reference (a single id or an array of ids). */
31
+ field: string;
32
+ /** Alias of the referenced resource. Informational — conversion never resolves it. */
33
+ resource?: string;
34
+ /** Skip the automatic `{ [field]: 1 }` index. */
35
+ noIndex?: boolean;
36
+ }
37
+ export interface MongoRefOptions {
38
+ resource?: string;
39
+ noIndex?: boolean;
40
+ }
41
+ export interface MongoResource<T extends ResourceRecord> extends Resource<T>, ResourceLocker<T>, MigratableResource<MongoTx> {
5
42
  name?: string;
6
43
  schema?: AnySchema;
7
44
  indexes?: Array<{
@@ -13,6 +50,20 @@ export interface MongoResource<T extends ResourceRecord> extends Resource<T>, Re
13
50
  db: () => Promise<Db>;
14
51
  client: () => Promise<MongoClient>;
15
52
  index: <Type extends MongoResource<T>>(name: string, index: IndexSpecification, options?: CreateIndexesOptions) => Type;
53
+ /**
54
+ * Declare that a field stores another record's id.
55
+ *
56
+ * Chainable and idempotent like {@link MigratableResource.migration}, and stored the same
57
+ * way — per alias at module scope — because losing the declaration to a context rebuild
58
+ * would silently stop the string/ObjectId conversion for the field.
59
+ *
60
+ * Declare only fields whose values really are mongo ids (assigned from another record's
61
+ * `id`). Composite keys, external provider ids, DIDs and business slugs must stay
62
+ * strings — converting them corrupts the collection.
63
+ */
64
+ reference: (field: string, opts?: string | MongoRefOptions) => this;
65
+ /** The declared references of this alias. */
66
+ references: () => MongoReference[];
16
67
  getDefaults: () => Partial<T>;
17
68
  }
18
69
  export interface MongoDbService extends ResourceDbService<Db, MongoClient>, DbLocker<ResourceRecord> {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAC/G,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAEpC,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,kBAAkB,CAAC;QAAC,OAAO,CAAC,EAAE,oBAAoB,CAAA;KAAE,CAAC,CAAA;IAC5F,UAAU,EAAE,UAAU,CAAA;IACtB,EAAE,EAAE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAA;IACrB,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IAClC,KAAK,EAAE,CAAC,IAAI,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,IAAI,CAAA;IACvH,WAAW,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,cAAe,SAAQ,iBAAiB,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC;CACnG"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,kBAAkB,EAC1F,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAEpC;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,EAAE,CAAA;IACN,wCAAwC;IACxC,UAAU,EAAE,UAAU,CAAA;IACtB,yFAAyF;IACzF,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,UAAU,CAAA;IACnC,mGAAmG;IACnG,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAChC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAA;IACb,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC;IAC1H,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,kBAAkB,CAAC;QAAC,OAAO,CAAC,EAAE,oBAAoB,CAAA;KAAE,CAAC,CAAA;IAC5F,UAAU,EAAE,UAAU,CAAA;IACtB,EAAE,EAAE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAA;IACrB,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IAClC,KAAK,EAAE,CAAC,IAAI,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,IAAI,CAAA;IACvH;;;;;;;;;;OAUG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,KAAK,IAAI,CAAA;IACnE,6CAA6C;IAC7C,UAAU,EAAE,MAAM,cAAc,EAAE,CAAA;IAClC,WAAW,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,cAAe,SAAQ,iBAAiB,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC;CACnG"}
@@ -2,4 +2,6 @@ export * from './indexes.js';
2
2
  export * from './schema.js';
3
3
  export * from './name.js';
4
4
  export * from './life-cycle.js';
5
+ export * from './migrations.js';
6
+ export * from './refs.js';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA"}
@@ -2,4 +2,6 @@ export * from './indexes.js';
2
2
  export * from './schema.js';
3
3
  export * from './name.js';
4
4
  export * from './life-cycle.js';
5
+ export * from './migrations.js';
6
+ export * from './refs.js';
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA"}
@@ -1,7 +1,31 @@
1
1
  import type { DbConfig, ResourceRecord } from '@owlmeans/resource';
2
+ import type { BasicContext } from '@owlmeans/context';
2
3
  import type { MongoResource } from '../types.js';
3
4
  import type { Db, Collection } from 'mongodb';
4
- export declare const initializeCollection: (db: Db, config: DbConfig, resource: MongoResource<ResourceRecord>) => Promise<Collection>;
5
+ /**
6
+ * Bring a resource's collection to the shape its schema declares.
7
+ *
8
+ * Order is deliberate, and matches the Postgres counterpart:
9
+ *
10
+ * 1. probe for the collection
11
+ * 2. absent → *baseline* every registered migration; present → run the `pre` ones
12
+ * (including the system `$ref:` migrations that convert declared references)
13
+ * 3. create the collection, or update its validator and indexes
14
+ * 4. present → run the `post` migrations
15
+ * 5. reconcile declared references — the second half of their double check: the ledger
16
+ * said whether the `$ref:` migration ran, this probes the collection itself and
17
+ * converts whatever strings still slipped through
18
+ *
19
+ * Step 2 is what stops the two mechanisms colliding. A `pre` migration runs before the
20
+ * validator is tightened, so it can reshape documents the new validator would reject. On a
21
+ * collection this call just created there is nothing to reshape — replaying a historical
22
+ * migration against a collection born in its final shape would at best scan for nothing —
23
+ * so the migrations are recorded as satisfied instead of run.
24
+ *
25
+ * `context` is optional so the existing three-argument call keeps working; without it a
26
+ * migration's `use`/`ref` can only address the owning resource.
27
+ */
28
+ export declare const initializeCollection: (db: Db, config: DbConfig, resource: MongoResource<ResourceRecord>, context?: BasicContext<any>) => Promise<Collection>;
5
29
  export declare const createCollection: (db: Db, name: string, resource: MongoResource<ResourceRecord>) => Promise<Collection>;
6
30
  export declare const updateCollection: (db: Db, name: string, resource: MongoResource<ResourceRecord>) => Promise<Collection>;
7
31
  //# sourceMappingURL=life-cycle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"life-cycle.d.ts","sourceRoot":"","sources":["../../src/utils/life-cycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,EAAE,EAAE,UAAU,EAAY,MAAM,SAAS,CAAA;AAKvD,eAAO,MAAM,oBAAoB,GAC/B,IAAI,EAAE,EAAE,QAAQ,QAAQ,EAAE,UAAU,aAAa,CAAC,cAAc,CAAC,KAChE,OAAO,CAAC,UAAU,CAYpB,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,IAAI,EAAE,EAAE,MAAM,MAAM,EAAE,UAAU,aAAa,CAAC,cAAc,CAAC,KAAG,OAAO,CAAC,UAAU,CAkBxH,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,IAAI,EAAE,EAAE,MAAM,MAAM,EAAE,UAAU,aAAa,CAAC,cAAc,CAAC,KAAG,OAAO,CAAC,UAAU,CAWxH,CAAA"}
1
+ {"version":3,"file":"life-cycle.d.ts","sourceRoot":"","sources":["../../src/utils/life-cycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAmB,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,EAAE,EAAE,UAAU,EAAgC,MAAM,SAAS,CAAA;AAS3E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,oBAAoB,GAC/B,IAAI,EAAE,EAAE,QAAQ,QAAQ,EAAE,UAAU,aAAa,CAAC,cAAc,CAAC,EACjE,UAAU,YAAY,CAAC,GAAG,CAAC,KAC1B,OAAO,CAAC,UAAU,CAmBpB,CAAA;AA+DD,eAAO,MAAM,gBAAgB,GAAU,IAAI,EAAE,EAAE,MAAM,MAAM,EAAE,UAAU,aAAa,CAAC,cAAc,CAAC,KAAG,OAAO,CAAC,UAAU,CAoBxH,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,IAAI,EAAE,EAAE,MAAM,MAAM,EAAE,UAAU,aAAa,CAAC,cAAc,CAAC,KAAG,OAAO,CAAC,UAAU,CAaxH,CAAA"}
@@ -1,23 +1,101 @@
1
+ import { MigrationStage, runMigrations } from '@owlmeans/resource';
2
+ import { DEF_MIGRATIONS_COLLECTION } from '../consts.js';
3
+ import { getDeclaration } from '../declarations.js';
1
4
  import { mongoCollectionName } from './name.js';
2
- import { schemaToMongoSchema } from './schema.js';
5
+ import { applyReferenceTypes, schemaToMongoSchema } from './schema.js';
3
6
  import { updateIndexes } from './indexes.js';
4
- export const initializeCollection = async (db, config, resource) => {
5
- let _collection;
7
+ import { makeMongoMigrationStore, makeMongoTx } from './migrations.js';
8
+ import { reconcileReferences } from './refs.js';
9
+ /**
10
+ * Bring a resource's collection to the shape its schema declares.
11
+ *
12
+ * Order is deliberate, and matches the Postgres counterpart:
13
+ *
14
+ * 1. probe for the collection
15
+ * 2. absent → *baseline* every registered migration; present → run the `pre` ones
16
+ * (including the system `$ref:` migrations that convert declared references)
17
+ * 3. create the collection, or update its validator and indexes
18
+ * 4. present → run the `post` migrations
19
+ * 5. reconcile declared references — the second half of their double check: the ledger
20
+ * said whether the `$ref:` migration ran, this probes the collection itself and
21
+ * converts whatever strings still slipped through
22
+ *
23
+ * Step 2 is what stops the two mechanisms colliding. A `pre` migration runs before the
24
+ * validator is tightened, so it can reshape documents the new validator would reject. On a
25
+ * collection this call just created there is nothing to reshape — replaying a historical
26
+ * migration against a collection born in its final shape would at best scan for nothing —
27
+ * so the migrations are recorded as satisfied instead of run.
28
+ *
29
+ * `context` is optional so the existing three-argument call keeps working; without it a
30
+ * migration's `use`/`ref` can only address the owning resource.
31
+ */
32
+ export const initializeCollection = async (db, config, resource, context) => {
6
33
  const name = mongoCollectionName(config, resource);
7
- const cursor = db.listCollections({ name });
8
- if (!await cursor.hasNext()) {
9
- _collection = await createCollection(db, name, resource);
34
+ const fresh = !await db.listCollections({ name }).hasNext();
35
+ appendReferenceIndexes(resource);
36
+ const migrate = prepareMigrations(db, config, resource, name, context);
37
+ await migrate(fresh ? { baseline: true } : { stage: MigrationStage.Pre });
38
+ const collection = fresh
39
+ ? await createCollection(db, name, resource)
40
+ : await updateCollection(db, name, resource);
41
+ if (!fresh) {
42
+ await migrate({ stage: MigrationStage.Post });
43
+ await reconcileReferences(collection, referencesOf(resource), resource.alias);
10
44
  }
11
- else {
12
- _collection = await updateCollection(db, name, resource);
45
+ return collection;
46
+ };
47
+ /** Tolerates hand-built resource objects that predate the reference capability. */
48
+ const referencesOf = (resource) => resource.references?.() ?? [];
49
+ /**
50
+ * A declared reference is indexed at the mongo level — that's part of its contract. The
51
+ * index is appended unless the resource already declares one with the same key pattern
52
+ * (mongo refuses two indexes over identical keys, and the existing one — possibly
53
+ * unique — wins).
54
+ */
55
+ const appendReferenceIndexes = (resource) => {
56
+ for (const ref of referencesOf(resource)) {
57
+ if (ref.noIndex === true) {
58
+ continue;
59
+ }
60
+ resource.indexes = resource.indexes ?? [];
61
+ const spec = JSON.stringify({ [ref.field]: 1 });
62
+ const present = resource.indexes.some(index => JSON.stringify(index.index) === spec || index.name === `ref_${ref.field}`);
63
+ if (!present) {
64
+ resource.indexes.push({ name: `ref_${ref.field}`, index: { [ref.field]: 1 } });
65
+ }
13
66
  }
14
- return _collection;
67
+ };
68
+ /**
69
+ * Bind the migration runner to this resource's database, or hand back a no-op when nothing
70
+ * is registered — the overwhelmingly common case, and one that shouldn't pay for a ledger.
71
+ */
72
+ const prepareMigrations = (db, config, resource, name, context) => {
73
+ const registry = getDeclaration(resource.alias).migrations;
74
+ if (registry.list().length < 1) {
75
+ return async () => null;
76
+ }
77
+ const ledgerName = config.meta?.migrationsCollection
78
+ ?? DEF_MIGRATIONS_COLLECTION;
79
+ /**
80
+ * `db.collection()` never round-trips, so taking the handle before the collection exists
81
+ * is safe — and on the fresh path the transaction is only ever baselined, never used.
82
+ */
83
+ const tx = makeMongoTx(db, db.collection(name), config, context, resource.alias);
84
+ const store = makeMongoMigrationStore(db, tx, ledgerName);
85
+ return async (opts) => {
86
+ const report = await runMigrations(resource.alias, registry, store, opts);
87
+ if (report.applied.length > 0) {
88
+ console.log(`@owlmeans/mongo-resource: ${name} applied ${report.stage} migrations —`
89
+ + ` ${report.applied.join(', ')}`);
90
+ }
91
+ return report;
92
+ };
15
93
  };
16
94
  export const createCollection = async (db, name, resource) => {
17
95
  const collection = await db.createCollection(name, {
18
96
  ...(resource.schema != null ? {
19
97
  validator: {
20
- $jsonSchema: patchJsonSchema(schemaToMongoSchema(resource.schema))
98
+ $jsonSchema: patchJsonSchema(applyReferenceTypes(schemaToMongoSchema(resource.schema), resource.schema, resource.references()))
21
99
  }
22
100
  } : {})
23
101
  });
@@ -30,7 +108,7 @@ export const createCollection = async (db, name, resource) => {
30
108
  };
31
109
  export const updateCollection = async (db, name, resource) => {
32
110
  if (resource.schema != null) {
33
- const $jsonSchema = patchJsonSchema(schemaToMongoSchema(resource.schema));
111
+ const $jsonSchema = patchJsonSchema(applyReferenceTypes(schemaToMongoSchema(resource.schema), resource.schema, resource.references()));
34
112
  await db.command({ collMod: name, validator: { $jsonSchema } });
35
113
  }
36
114
  const collection = db.collection(name);
@@ -1 +1 @@
1
- {"version":3,"file":"life-cycle.js","sourceRoot":"","sources":["../../src/utils/life-cycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"life-cycle.js","sourceRoot":"","sources":["../../src/utils/life-cycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { BasicContext } from '@owlmeans/context';
2
+ import type { DbConfig, MigrationStore } from '@owlmeans/resource';
3
+ import type { Collection, Db } from 'mongodb';
4
+ import type { MongoTx } from '../types.js';
5
+ /**
6
+ * A transaction façade over the database. Alias resolution is injected so migrations can
7
+ * address other resources without importing the context.
8
+ *
9
+ * Names are resolved through {@link mongoCollectionName}, not through the other resource's
10
+ * live `collection` handle, because at migration time that resource may not have
11
+ * initialized yet — registration order is not dependency order. The name is a pure
12
+ * function of the config and the alias, so it's knowable either way.
13
+ */
14
+ export declare const makeMongoTx: (db: Db, collection: Collection, config: DbConfig, context: BasicContext<any>, self: string) => MongoTx;
15
+ /**
16
+ * Migration ledger, one collection per database.
17
+ *
18
+ * Where the Postgres store commits the ledger row inside the migration's own transaction,
19
+ * this one can't — see {@link MongoTx}. It uses claim-then-complete instead: the unique
20
+ * index on `(alias, name)` is the mutual exclusion primitive, so a replica that loses the
21
+ * race to insert waits for the winner rather than running the same migration twice.
22
+ */
23
+ export declare const makeMongoMigrationStore: (db: Db, tx: MongoTx, name?: string) => MigrationStore<MongoTx>;
24
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/utils/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAA6B,cAAc,EAAkB,MAAM,oBAAoB,CAAA;AAC7G,OAAO,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAK7C,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,aAAa,CAAA;AAkBzD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GACtB,IAAI,EAAE,EAAE,YAAY,UAAU,EAAE,QAAQ,QAAQ,EAAE,SAAS,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,KACzF,OAeF,CAAA;AAqBD;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,IAAI,EAAE,EAAE,IAAI,OAAO,EAAE,OAAM,MAAkC,KAC5D,cAAc,CAAC,OAAO,CAwFxB,CAAA"}
@@ -0,0 +1,129 @@
1
+ import { DEF_MIGRATION_POLL, DEF_MIGRATION_WAIT, DEF_MIGRATIONS_COLLECTION, MONGO_DUPLICATE_KEY } from '../consts.js';
2
+ import { mongoCollectionName } from './name.js';
3
+ const isDuplicateKey = (error) => error?.code === MONGO_DUPLICATE_KEY;
4
+ /**
5
+ * A transaction façade over the database. Alias resolution is injected so migrations can
6
+ * address other resources without importing the context.
7
+ *
8
+ * Names are resolved through {@link mongoCollectionName}, not through the other resource's
9
+ * live `collection` handle, because at migration time that resource may not have
10
+ * initialized yet — registration order is not dependency order. The name is a pure
11
+ * function of the config and the alias, so it's knowable either way.
12
+ */
13
+ export const makeMongoTx = (db, collection, config, context, self) => {
14
+ const ref = (alias) => {
15
+ if (alias == null || alias === self) {
16
+ return collection.collectionName;
17
+ }
18
+ return mongoCollectionName(config, context.resource(alias));
19
+ };
20
+ return {
21
+ db,
22
+ collection,
23
+ ref,
24
+ use: alias => alias == null || alias === self ? collection : db.collection(ref(alias))
25
+ };
26
+ };
27
+ const waitForClaim = async (ledger, alias, name) => {
28
+ const deadline = Date.now() + DEF_MIGRATION_WAIT;
29
+ while (Date.now() < deadline) {
30
+ const row = await ledger.findOne({ alias, name });
31
+ if (row == null) {
32
+ /** The claim was withdrawn — the other replica's migration failed, and so must this boot. */
33
+ throw new Error(`${alias}/${name}: abandoned by the replica that claimed it`);
34
+ }
35
+ if (row.completedAt != null) {
36
+ return;
37
+ }
38
+ await new Promise(resolve => setTimeout(resolve, DEF_MIGRATION_POLL));
39
+ }
40
+ throw new Error(`${alias}/${name}: still running elsewhere after ${DEF_MIGRATION_WAIT}ms`);
41
+ };
42
+ /**
43
+ * Migration ledger, one collection per database.
44
+ *
45
+ * Where the Postgres store commits the ledger row inside the migration's own transaction,
46
+ * this one can't — see {@link MongoTx}. It uses claim-then-complete instead: the unique
47
+ * index on `(alias, name)` is the mutual exclusion primitive, so a replica that loses the
48
+ * race to insert waits for the winner rather than running the same migration twice.
49
+ */
50
+ export const makeMongoMigrationStore = (db, tx, name = DEF_MIGRATIONS_COLLECTION) => {
51
+ const ledger = () => db.collection(name);
52
+ return {
53
+ ensure: async () => {
54
+ await ledger().createIndex({ alias: 1, name: 1 }, { name: 'alias_name_unique', unique: true });
55
+ },
56
+ applied: async (alias) => {
57
+ /**
58
+ * Completed rows only. A claim still holding a null `completedAt` belongs to a replica
59
+ * running right now, and treating it as applied would let this process carry on against
60
+ * a half-migrated database.
61
+ */
62
+ const rows = await ledger().find({ alias, completedAt: { $ne: null } }).toArray();
63
+ return rows.reduce((applied, row) => {
64
+ applied[row.name] = row.checksum;
65
+ return applied;
66
+ }, {});
67
+ },
68
+ baseline: async (alias, migrations) => {
69
+ const now = new Date();
70
+ /**
71
+ * `$setOnInsert` upserts rather than plain inserts: two replicas creating the same
72
+ * collection at once both baseline, and the second must be a no-op, not a crash.
73
+ */
74
+ await ledger().bulkWrite(migrations.map(migration => ({
75
+ updateOne: {
76
+ filter: { alias, name: migration.name },
77
+ update: {
78
+ $setOnInsert: {
79
+ alias,
80
+ name: migration.name,
81
+ stage: migration.stage,
82
+ checksum: migration.checksum,
83
+ baseline: true,
84
+ startedAt: now,
85
+ completedAt: now,
86
+ durationMs: 0
87
+ }
88
+ },
89
+ upsert: true
90
+ }
91
+ })), { ordered: false });
92
+ },
93
+ run: async (alias, migration) => {
94
+ const started = Date.now();
95
+ try {
96
+ await ledger().insertOne({
97
+ alias,
98
+ name: migration.name,
99
+ stage: migration.stage,
100
+ checksum: migration.checksum,
101
+ baseline: false,
102
+ startedAt: new Date(started),
103
+ completedAt: null,
104
+ durationMs: null
105
+ });
106
+ }
107
+ catch (error) {
108
+ if (!isDuplicateKey(error)) {
109
+ throw error;
110
+ }
111
+ return await waitForClaim(ledger(), alias, migration.name);
112
+ }
113
+ try {
114
+ await migration.apply(tx);
115
+ }
116
+ catch (error) {
117
+ /**
118
+ * Withdraw the claim so the next boot retries. Postgres rolls its ledger row back
119
+ * with the migration itself; without a transaction the claim has to be released by
120
+ * hand, and leaving it would wedge every future boot on a migration that never ran.
121
+ */
122
+ await ledger().deleteOne({ alias, name: migration.name }).catch(() => undefined);
123
+ throw error;
124
+ }
125
+ await ledger().updateOne({ alias, name: migration.name }, { $set: { completedAt: new Date(), durationMs: Date.now() - started } });
126
+ }
127
+ };
128
+ };
129
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/utils/migrations.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,kBAAkB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,mBAAmB,EACvF,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAc/C,MAAM,cAAc,GAAG,CAAC,KAAc,EAAW,EAAE,CAChD,KAAkC,EAAE,IAAI,KAAK,mBAAmB,CAAA;AAEnE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,EAAM,EAAE,UAAsB,EAAE,MAAgB,EAAE,OAA0B,EAAE,IAAY,EACjF,EAAE;IACX,MAAM,GAAG,GAAG,CAAC,KAAc,EAAU,EAAE;QACrC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO,UAAU,CAAC,cAAc,CAAA;QAClC,CAAC;QAED,OAAO,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAgC,KAAK,CAAC,CAAC,CAAA;IAC5F,CAAC,CAAA;IAED,OAAO;QACL,EAAE;QACF,UAAU;QACV,GAAG;QACH,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACvF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,KAAK,EACxB,MAAgC,EAAE,KAAa,EAAE,IAAY,EAC9C,EAAE;IACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAA;IAChD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,6FAA6F;YAC7F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,4CAA4C,CAAC,CAAA;QAC/E,CAAC;QACD,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAA;IACvE,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,mCAAmC,kBAAkB,IAAI,CAAC,CAAA;AAC5F,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,EAAM,EAAE,EAAW,EAAE,OAAe,yBAAyB,EACpC,EAAE;IAC3B,MAAM,MAAM,GAAG,GAA6B,EAAE,CAAC,EAAE,CAAC,UAAU,CAAe,IAAI,CAAC,CAAA;IAEhF,OAAO;QACL,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QAChG,CAAC;QAED,OAAO,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YACrB;;;;eAIG;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;YAEjF,OAAO,IAAI,CAAC,MAAM,CAAgC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBACjE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAA;gBAEhC,OAAO,OAAO,CAAA;YAChB,CAAC,EAAE,EAAE,CAAC,CAAA;QACR,CAAC;QAED,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;YACtB;;;eAGG;YACH,MAAM,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACpD,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;oBACvC,MAAM,EAAE;wBACN,YAAY,EAAE;4BACZ,KAAK;4BACL,IAAI,EAAE,SAAS,CAAC,IAAI;4BACpB,KAAK,EAAE,SAAS,CAAC,KAAK;4BACtB,QAAQ,EAAE,SAAS,CAAC,QAAQ;4BAC5B,QAAQ,EAAE,IAAI;4BACd,SAAS,EAAE,GAAG;4BACd,WAAW,EAAE,GAAG;4BAChB,UAAU,EAAE,CAAC;yBACd;qBACF;oBACD,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1B,CAAC;QAED,GAAG,EAAE,KAAK,EAAE,KAAa,EAAE,SAA6B,EAAE,EAAE;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC1B,IAAI,CAAC;gBACH,MAAM,MAAM,EAAE,CAAC,SAAS,CAAC;oBACvB,KAAK;oBACL,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,QAAQ,EAAE,KAAK;oBACf,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC;oBAC5B,WAAW,EAAE,IAAI;oBACjB,UAAU,EAAE,IAAI;iBACjB,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3B,MAAM,KAAK,CAAA;gBACb,CAAC;gBAED,OAAO,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;YAC5D,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf;;;;mBAIG;gBACH,MAAM,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;gBAChF,MAAM,KAAK,CAAA;YACb,CAAC;YAED,MAAM,MAAM,EAAE,CAAC,SAAS,CACtB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,EAC/B,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,CACxE,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,74 @@
1
+ import type { ListCriteria } from '@owlmeans/resource';
2
+ import type { Collection, Document } from 'mongodb';
3
+ import type { MongoReference, MongoTx } from '../types.js';
4
+ export declare const isObjectIdHex: (value: unknown) => value is string;
5
+ /**
6
+ * Write side of a declared reference: the string id a record carries becomes the
7
+ * `ObjectId` the collection stores. Arrays convert elementwise.
8
+ *
9
+ * Strict on purpose — a declared reference holding something that is not a mongo id is
10
+ * either a mis-declared field (should never have been a reference) or a bug at the call
11
+ * site, and storing it as a string would silently reintroduce the mixed type state this
12
+ * mechanism exists to remove.
13
+ *
14
+ * @throws {MisshapedRecord}
15
+ */
16
+ export declare const marshalReference: (field: string, value: unknown) => unknown;
17
+ /** Read side: `ObjectId` back to the string records carry. Tolerates not yet migrated strings. */
18
+ export declare const demarshalReference: (value: unknown) => unknown;
19
+ /** Convert every declared reference of a fetched document back to string ids, in place. */
20
+ export declare const demarshalRefs: <T extends {}>(record: T, refs: Map<string, MongoReference>) => T;
21
+ /**
22
+ * Convert list criteria the way records are converted: values addressed at `_id` or at a
23
+ * declared reference become `ObjectId`s, and the `id` alias records actually carry is
24
+ * mapped onto `_id` — documents never store `id`, so before this mapping such criteria
25
+ * silently matched nothing.
26
+ *
27
+ * Tolerant by design: a value that is not 24 hex passes through unconverted. Criteria are
28
+ * matched against the collection, and against an `ObjectId` typed field a stray string
29
+ * matches nothing — which is exactly what it matched before the field was converted.
30
+ */
31
+ export declare const marshalCriteria: (criteria: ListCriteria | undefined, refs: Map<string, MongoReference>) => ListCriteria | undefined;
32
+ /**
33
+ * Criteria for addressing a single record by a field — `get`/`load`/`update`/`delete`.
34
+ *
35
+ * `_id` keeps its historical strictness (an invalid id throws through the driver). The
36
+ * `id` alias and declared references convert tolerantly, so a caller probing a reference
37
+ * with a value that is not a mongo id gets "not found" rather than a throw.
38
+ */
39
+ export declare const identityCriteria: (field: string, id: string, refs: Map<string, MongoReference>) => Document;
40
+ /**
41
+ * Name of the system migration that converts a reference field's stored strings.
42
+ *
43
+ * The `@1` is the body's version: the shared body below fingerprints identically for
44
+ * every field, so an edit to it would raise `MigrationConflict` against every ledger on
45
+ * the next boot. Any semantic change to {@link convertReferenceField} must bump this
46
+ * suffix instead — the old name stays applied, the new one runs (idempotently) once.
47
+ */
48
+ export declare const refMigrationName: (field: string) => string;
49
+ /** Ledger registered body of the system reference migration. */
50
+ export declare const makeRefMigration: (field: string) => (tx: MongoTx) => Promise<void>;
51
+ /**
52
+ * Convert one reference field's stored string ids to `ObjectId`s — the body of the
53
+ * system migration and of the boot time reconciliation probe alike.
54
+ *
55
+ * Idempotent and interrupt safe: it matches only documents where the field (or one of
56
+ * its elements) is still a string, converts only values that are actually 24 hex, and
57
+ * leaves everything else exactly as it was. Safe to run concurrently from several
58
+ * replicas — a document converts once, the loser's filter no longer matches it.
59
+ *
60
+ * Validation is bypassed deliberately: at `Pre` stage the collection still carries the
61
+ * validator that declares the field a *string*, and after the switch a legacy document
62
+ * may violate the schema in unrelated ways — either would wedge the boot on a write
63
+ * that only makes the data more correct. (Bypassing requires the connection's user to
64
+ * hold the `bypassDocumentValidation` privilege — `dbOwner`/`root` do.)
65
+ */
66
+ export declare const convertReferenceField: (collection: Collection, field: string) => Promise<number>;
67
+ /**
68
+ * The second half of the double check the reference migration promises: the ledger says
69
+ * whether the migration ran; this probes whether the collection actually holds no
70
+ * convertible strings — and repairs it when the two disagree (a restored backup, a
71
+ * write from a legacy process, a ledger created by hand).
72
+ */
73
+ export declare const reconcileReferences: (collection: Collection, refs: MongoReference[], alias: string) => Promise<void>;
74
+ //# sourceMappingURL=refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/utils/refs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAS1D,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MACR,CAAA;AAEhD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,EAAE,OAAO,OAAO,KAAG,OAehE,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,OASnD,CAAA;AAED,2FAA2F;AAC3F,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,KAAG,CAY1F,CAAA;AA4BD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,YAAY,GAAG,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,KACpE,YAAY,GAAG,SAkBjB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,EAAE,IAAI,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,KAC3D,QAYF,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,KAAG,MAA2B,CAAA;AAE5E,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,MAAY,IAAI,OAAO,KAAG,OAAO,CAAC,IAAI,CAEnF,CAAA;AAeD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,GAAU,YAAY,UAAU,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,CAmBjG,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,UAAU,EAAE,MAAM,cAAc,EAAE,EAAE,OAAO,MAAM,KAC5D,OAAO,CAAC,IAAI,CAcd,CAAA"}