@antelopejs/interface-database-decorators 0.1.6 → 0.1.8

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 (63) hide show
  1. package/README.md +0 -2
  2. package/dist/antelope.test.js +4 -3
  3. package/dist/antelope.test.js.map +1 -1
  4. package/dist/common.d.ts +7 -1
  5. package/dist/common.js +10 -2
  6. package/dist/common.js.map +1 -1
  7. package/dist/database.d.ts +2 -1
  8. package/dist/database.js +20 -9
  9. package/dist/database.js.map +1 -1
  10. package/dist/model.d.ts +7 -2
  11. package/dist/model.js +25 -13
  12. package/dist/model.js.map +1 -1
  13. package/dist/modifiers/autodate.js.map +1 -1
  14. package/dist/modifiers/common.js +2 -2
  15. package/dist/modifiers/common.js.map +1 -1
  16. package/dist/modifiers/encryption.js +1 -1
  17. package/dist/modifiers/encryption.js.map +1 -1
  18. package/dist/modifiers/hash.js +1 -1
  19. package/dist/modifiers/hash.js.map +1 -1
  20. package/dist/modifiers/localization.js.map +1 -1
  21. package/dist/relation.js +1 -1
  22. package/dist/relation.js.map +1 -1
  23. package/dist/schema.js +2 -0
  24. package/dist/schema.js.map +1 -1
  25. package/dist/table.d.ts +39 -5
  26. package/dist/table.js +35 -8
  27. package/dist/table.js.map +1 -1
  28. package/dist/tests/common.test.js +1 -1
  29. package/dist/tests/common.test.js.map +1 -1
  30. package/dist/tests/cross_instance.test.d.ts +1 -0
  31. package/dist/tests/cross_instance.test.js +120 -0
  32. package/dist/tests/cross_instance.test.js.map +1 -0
  33. package/dist/tests/database.test.js +98 -2
  34. package/dist/tests/database.test.js.map +1 -1
  35. package/dist/tests/helpers/other-instance.d.ts +13 -0
  36. package/dist/tests/helpers/other-instance.js +46 -0
  37. package/dist/tests/helpers/other-instance.js.map +1 -0
  38. package/dist/tests/integration.test.js +4 -4
  39. package/dist/tests/integration.test.js.map +1 -1
  40. package/dist/tests/model.test.js +4 -4
  41. package/dist/tests/model.test.js.map +1 -1
  42. package/dist/tests/modifiers/autodate.test.js +3 -3
  43. package/dist/tests/modifiers/autodate.test.js.map +1 -1
  44. package/dist/tests/modifiers/common.test.js +2 -2
  45. package/dist/tests/modifiers/common.test.js.map +1 -1
  46. package/dist/tests/modifiers/encryption.test.js +2 -2
  47. package/dist/tests/modifiers/encryption.test.js.map +1 -1
  48. package/dist/tests/modifiers/hash.test.js +2 -2
  49. package/dist/tests/modifiers/hash.test.js.map +1 -1
  50. package/dist/tests/modifiers/localization.test.js +2 -2
  51. package/dist/tests/modifiers/localization.test.js.map +1 -1
  52. package/dist/tests/relation.test.js +2 -2
  53. package/dist/tests/relation.test.js.map +1 -1
  54. package/dist/tests/schema.test.js +2 -2
  55. package/dist/tests/schema.test.js.map +1 -1
  56. package/dist/tests/table.test.js +11 -11
  57. package/dist/tests/table.test.js.map +1 -1
  58. package/docs/2.table-definitions.md +90 -18
  59. package/docs/3.table-modifiers.md +77 -23
  60. package/docs/4.data-models.md +5 -5
  61. package/docs/5.parameter-decoration.md +14 -3
  62. package/package.json +66 -57
  63. package/skills/database-decorators-interface/SKILL.md +61 -16
package/dist/table.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { type ClassDecorator } from "@antelopejs/interface-core/decorators";
1
+ import type { InstanceId, Table as QueryTable, SchemaInstance } from "@antelopejs/interface-database";
2
2
  import type { FieldType } from "@antelopejs/interface-database/schema";
3
- import { type Constructible } from "./common";
3
+ import { type ClassDecorator } from "@antelopejs/interface-core/decorators";
4
4
  import { MixinSymbol, type MixinType } from "./modifiers/common";
5
+ import { type Constructible } from "./common";
5
6
  type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
6
7
  export declare const TableMetaSymbol: unique symbol;
7
8
  export declare const TableRefSymbol: unique symbol;
@@ -17,12 +18,29 @@ export interface TableClass<Base = object, Args extends any[] = [], Meta extends
17
18
  with<This extends TableClass, T extends Constructible<{
18
19
  [MixinSymbol]: Constructible;
19
20
  }>[] = []>(this: This, ...other: T): TableClass<InstanceType<This> & UnionToIntersection<InstanceType<MixinType<InstanceType<T[number]>>>>, ConstructorParameters<This>, ExtractTableMeta<InstanceType<This>> | ExtractTableMeta<InstanceType<T[number]>>>;
21
+ table<This extends TableClass>(this: This, target?: TableTarget): QueryTable<InstanceType<This>>;
20
22
  }
23
+ /**
24
+ * Where {@link Table.table} opens the table: an instance id of the schema
25
+ * the class is bound to, or a schema instance to take the table from.
26
+ */
27
+ export type TableTarget = InstanceId | SchemaInstance<any>;
21
28
  /**
22
29
  * Database Table superclass
23
30
  */
24
31
  export declare class Table {
25
32
  _id: string;
33
+ /**
34
+ * Gets the AQL table this class describes.
35
+ *
36
+ * The class must be decorated with `@RegisterTable` and bound to its schema
37
+ * by `RegisterSchema`, which the declaring module calls.
38
+ *
39
+ * @param target Instance id of the bound schema (default instance when
40
+ * omitted), or a schema instance to take the table from
41
+ * @returns AQL Table
42
+ */
43
+ static table<This extends typeof Table>(this: This, target?: TableTarget): QueryTable<InstanceType<This>>;
26
44
  /**
27
45
  * Supplement the superclass with Modifier mixins.
28
46
  *
@@ -33,17 +51,33 @@ export declare class Table {
33
51
  [MixinSymbol]: Constructible;
34
52
  }>[] = []>(this: This, ...others: T): TableClass<InstanceType<This> & UnionToIntersection<InstanceType<MixinType<InstanceType<T[number]>>>>, ConstructorParameters<This>, ExtractTableMeta<InstanceType<This>> | ExtractTableMeta<InstanceType<T[number]>>>;
35
53
  }
54
+ /**
55
+ * Options of the {@link Index} decorator.
56
+ */
57
+ export interface IndexOptions {
58
+ /**
59
+ * Index name for multi-field indexes.
60
+ */
61
+ group?: string;
62
+ /**
63
+ * Also keep this index fast for queries that run across all instances.
64
+ *
65
+ * Every index is always scoped to the instance; set this when the index is
66
+ * also queried across instances. It never changes query results.
67
+ * For a group, setting it on any field applies it to the whole group.
68
+ */
69
+ crossInstance?: boolean;
70
+ }
36
71
  /**
37
72
  * Database Table Index decorator.
38
73
  *
39
74
  * Available options:
40
75
  * - `group`: Index name for multi-field indexes.
76
+ * - `crossInstance`: Also keep the index fast for cross-instance queries.
41
77
  *
42
78
  * @param options Options
43
79
  */
44
- export declare const Index: (options?: {
45
- group?: string;
46
- } | undefined) => import("@antelopejs/interface-core/decorators").PropertyDecorator;
80
+ export declare const Index: (options?: IndexOptions | undefined) => import("@antelopejs/interface-core/decorators").PropertyDecorator;
47
81
  /**
48
82
  * Database Table Field type decorator.
49
83
  */
package/dist/table.js CHANGED
@@ -1,15 +1,42 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Fixture = exports.Field = exports.Index = exports.Table = exports.TableRefSymbol = exports.TableMetaSymbol = void 0;
7
+ const node_assert_1 = __importDefault(require("node:assert"));
4
8
  const decorators_1 = require("@antelopejs/interface-core/decorators");
5
- const common_1 = require("./common");
6
- const common_2 = require("./modifiers/common");
9
+ const common_1 = require("./modifiers/common");
10
+ const common_2 = require("./common");
7
11
  exports.TableMetaSymbol = Symbol();
8
12
  exports.TableRefSymbol = Symbol();
13
+ function isSchemaInstance(target) {
14
+ return typeof target === "object" && target !== null;
15
+ }
9
16
  /**
10
17
  * Database Table superclass
11
18
  */
12
19
  class Table {
20
+ /**
21
+ * Gets the AQL table this class describes.
22
+ *
23
+ * The class must be decorated with `@RegisterTable` and bound to its schema
24
+ * by `RegisterSchema`, which the declaring module calls.
25
+ *
26
+ * @param target Instance id of the bound schema (default instance when
27
+ * omitted), or a schema instance to take the table from
28
+ * @returns AQL Table
29
+ */
30
+ static table(target) {
31
+ const metadata = (0, common_2.getMetadata)(this, common_2.DatumStaticMetadata);
32
+ const tableName = metadata.tableName;
33
+ (0, node_assert_1.default)(tableName, `${this.name} has no table name: decorate it with @RegisterTable`);
34
+ if (isSchemaInstance(target)) {
35
+ return target.table(tableName);
36
+ }
37
+ (0, node_assert_1.default)(metadata.schema, `${this.name} is not bound to a schema: call RegisterSchema("${metadata.schemaName}") in the module that declares it`);
38
+ return metadata.schema.instance(target).table(tableName);
39
+ }
13
40
  /**
14
41
  * Supplement the superclass with Modifier mixins.
15
42
  *
@@ -17,12 +44,11 @@ class Table {
17
44
  * @returns New superclass
18
45
  */
19
46
  static with(...others) {
20
- // biome-ignore lint/complexity/noThisInStatic: intentional mixin pattern — this refers to the calling class
21
47
  const c = class _internal_table extends this {
22
48
  };
23
49
  for (const mixin of others
24
50
  .map((otherClass) => otherClass.prototype && new otherClass())
25
- .map((other) => other?.[common_2.MixinSymbol])
51
+ .map((other) => other?.[common_1.MixinSymbol])
26
52
  .filter((mixin) => mixin?.prototype)) {
27
53
  for (const key of Object.getOwnPropertyNames(mixin.prototype)) {
28
54
  if (key !== "constructor" && !(key in c.prototype)) {
@@ -44,18 +70,19 @@ exports.Table = Table;
44
70
  *
45
71
  * Available options:
46
72
  * - `group`: Index name for multi-field indexes.
73
+ * - `crossInstance`: Also keep the index fast for cross-instance queries.
47
74
  *
48
75
  * @param options Options
49
76
  */
50
77
  exports.Index = (0, decorators_1.MakePropertyDecorator)((target, propertyKey, options) => {
51
- const metadata = (0, common_1.getMetadata)(target.constructor, common_1.DatumStaticMetadata);
52
- metadata.addIndex(propertyKey, options?.group || propertyKey);
78
+ const metadata = (0, common_2.getMetadata)(target.constructor, common_2.DatumStaticMetadata);
79
+ metadata.addIndex(propertyKey, options?.group || propertyKey, options?.crossInstance);
53
80
  });
54
81
  /**
55
82
  * Database Table Field type decorator.
56
83
  */
57
84
  exports.Field = (0, decorators_1.MakePropertyDecorator)((target, propertyKey, type) => {
58
- const metadata = (0, common_1.getMetadata)(target.constructor, common_1.DatumStaticMetadata);
85
+ const metadata = (0, common_2.getMetadata)(target.constructor, common_2.DatumStaticMetadata);
59
86
  metadata.fields[propertyKey] = type;
60
87
  });
61
88
  /**
@@ -64,7 +91,7 @@ exports.Field = (0, decorators_1.MakePropertyDecorator)((target, propertyKey, ty
64
91
  * @param generator Data generator
65
92
  */
66
93
  exports.Fixture = (0, decorators_1.MakeClassDecorator)((target, generator) => {
67
- const metadata = (0, common_1.getMetadata)(target, common_1.DatumStaticMetadata);
94
+ const metadata = (0, common_2.getMetadata)(target, common_2.DatumStaticMetadata);
68
95
  metadata.generator = generator;
69
96
  });
70
97
  //# sourceMappingURL=table.js.map
package/dist/table.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":";;;AAAA,sEAI+C;AAE/C,qCAAgF;AAChF,+CAAiE;AAQpD,QAAA,eAAe,GAAG,MAAM,EAAE,CAAC;AAC3B,QAAA,cAAc,GAAG,MAAM,EAAE,CAAC;AAgCvC;;GAEG;AACH,MAAa,KAAK;IAGhB;;;;;OAKG;IACI,MAAM,CAAC,IAAI,CAKhB,GAAG,MAAS;QAQZ,4GAA4G;QAC5G,MAAM,CAAC,GAAG,MAAM,eAAgB,SAAS,IAAY;SAAG,CAAC;QACzD,KAAK,MAAM,KAAK,IAAI,MAAM;aACvB,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,IAAI,IAAI,UAAU,EAAE,CAAC;aAC7D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,oBAAW,CAAC,CAAC;aACpC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9D,IAAI,GAAG,KAAK,aAAa,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC7C,CAAC,CAAC,SAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;oBACpB,CAAC,CAAC,SAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAY,CAAC,CAAC;IAChB,CAAC;CACF;AAzCD,sBAyCC;AAED;;;;;;;GAOG;AACU,QAAA,KAAK,GAAG,IAAA,kCAAqB,EACxC,CAAC,MAAM,EAAE,WAAW,EAAE,OAA4B,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,4BAAmB,CAAC,CAAC;IACtE,QAAQ,CAAC,QAAQ,CACP,WAAW,EACnB,OAAO,EAAE,KAAK,IAAY,WAAW,CACtC,CAAC;AACJ,CAAC,CACF,CAAC;AAEF;;GAEG;AACU,QAAA,KAAK,GAAG,IAAA,kCAAqB,EACxC,CAAC,MAAM,EAAE,WAAW,EAAE,IAAe,EAAE,EAAE;IACvC,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,4BAAmB,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,CAAC,WAAqB,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC,CACF,CAAC;AAGF;;;;GAIG;AACU,QAAA,OAAO,GAEK,IAAA,+BAAkB,EAAC,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;IAChE,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,MAAM,EAAE,4BAAmB,CAAC,CAAC;IAC1D,QAAQ,CAAC,SAAS,GAAG,SAAwD,CAAC;AAChF,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAiC;AAOjC,sEAI+C;AAE/C,+CAAiE;AACjE,qCAAgF;AAQnE,QAAA,eAAe,GAAG,MAAM,EAAE,CAAC;AAC3B,QAAA,cAAc,GAAG,MAAM,EAAE,CAAC;AA2CvC,SAAS,gBAAgB,CACvB,MAA+B;IAE/B,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAa,KAAK;IAGhB;;;;;;;;;OASG;IACI,MAAM,CAAC,KAAK,CAEjB,MAAoB;QAEpB,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,IAAI,EAAE,4BAAmB,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACrC,IAAA,qBAAM,EACJ,SAAS,EACT,GAAG,IAAI,CAAC,IAAI,qDAAqD,CAClE,CAAC;QACF,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,IAAA,qBAAM,EACJ,QAAQ,CAAC,MAAM,EACf,GAAG,IAAI,CAAC,IAAI,mDAAmD,QAAQ,CAAC,UAAU,mCAAmC,CACtH,CAAC;QACF,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,IAAI,CAKhB,GAAG,MAAS;QAQZ,MAAM,CAAC,GAAG,MAAM,eAAgB,SAAS,IAAY;SAAG,CAAC;QACzD,KAAK,MAAM,KAAK,IAAI,MAAM;aACvB,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,IAAI,IAAI,UAAU,EAAE,CAAC;aAC7D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,oBAAW,CAAC,CAAC;aACpC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9D,IAAI,GAAG,KAAK,aAAa,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC7C,CAAC,CAAC,SAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;oBACpB,CAAC,CAAC,SAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAY,CAAC,CAAC;IAChB,CAAC;CACF;AAtED,sBAsEC;AAoBD;;;;;;;;GAQG;AACU,QAAA,KAAK,GAAG,IAAA,kCAAqB,EACxC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAsB,EAAE,EAAE;IAC9C,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,4BAAmB,CAAC,CAAC;IACtE,QAAQ,CAAC,QAAQ,CACP,WAAW,EACnB,OAAO,EAAE,KAAK,IAAY,WAAW,EACrC,OAAO,EAAE,aAAa,CACvB,CAAC;AACJ,CAAC,CACF,CAAC;AAEF;;GAEG;AACU,QAAA,KAAK,GAAG,IAAA,kCAAqB,EACxC,CAAC,MAAM,EAAE,WAAW,EAAE,IAAe,EAAE,EAAE;IACvC,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,4BAAmB,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,CAAC,WAAqB,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC,CACF,CAAC;AAGF;;;;GAIG;AACU,QAAA,OAAO,GAEK,IAAA,+BAAkB,EAAC,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;IAChE,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,MAAM,EAAE,4BAAmB,CAAC,CAAC;IAC1D,QAAQ,CAAC,SAAS,GAAG,SAAwD,CAAC;AAChF,CAAC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const common_1 = require("@antelopejs/interface-database-decorators/common");
4
3
  const chai_1 = require("chai");
4
+ const common_1 = require("@antelopejs/interface-database-decorators/common");
5
5
  describe("Common - metadata", () => {
6
6
  it("creates metadata with default values", async () => CreateMetadataWithDefaultValuesTest());
7
7
  it("adds index to metadata", async () => AddIndexToMetadataTest());
@@ -1 +1 @@
1
- {"version":3,"file":"common.test.js","sourceRoot":"","sources":["../../src/tests/common.test.ts"],"names":[],"mappings":";;AAAA,6EAI0D;AAC1D,+BAA8B;AAE9B,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE,CACpD,mCAAmC,EAAE,CAAC,CAAC;IACzC,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACnE,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE,CACpD,kCAAkC,EAAE,CAAC,CAAC;IACxC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE,CAAC,4BAA4B,EAAE,CAAC,CAAC;IAC9E,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE,CACpD,mCAAmC,EAAE,CAAC,CAAC;IACzC,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE,CACnD,gCAAgC,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,mCAAmC;IAChD,MAAM,QAAQ,GAAG,IAAI,4BAAmB,EAAE,CAAC;IAE3C,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,QAAQ,GAAG,IAAI,4BAAmB,EAAE,CAAC;IAE3C,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEzC,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,kCAAkC;IAC/C,MAAM,SAAS;KAAG;IAClB,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,SAAS,EAAE,4BAAmB,CAAC,CAAC;IAE7D,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,4BAAmB,CAAC,CAAC;IACvD,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,4BAA4B;IACzC,MAAM,SAAS;KAAG;IAClB,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,SAAS,EAAE,4BAAmB,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,SAAS,EAAE,4BAAmB,CAAC,CAAC;IAE9D,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,mCAAmC;IAWhD,MAAM,QAAQ,GAA0B;QACtC,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP,MAAM,EAAE,SAAS;SAClB;QACD,OAAO,EAAE,CAAC,SAAS,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gCAAgC;IAC7C,MAAM,QAAQ,GAAG,IAAI,4BAAmB,EAAE,CAAC;IAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"common.test.js","sourceRoot":"","sources":["../../src/tests/common.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,6EAI0D;AAE1D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE,CACpD,mCAAmC,EAAE,CAAC,CAAC;IACzC,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACnE,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE,CACpD,kCAAkC,EAAE,CAAC,CAAC;IACxC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE,CAAC,4BAA4B,EAAE,CAAC,CAAC;IAC9E,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE,CACpD,mCAAmC,EAAE,CAAC,CAAC;IACzC,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE,CACnD,gCAAgC,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,mCAAmC;IAChD,MAAM,QAAQ,GAAG,IAAI,4BAAmB,EAAE,CAAC;IAE3C,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,QAAQ,GAAG,IAAI,4BAAmB,EAAE,CAAC;IAE3C,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEzC,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,kCAAkC;IAC/C,MAAM,SAAS;KAAG;IAClB,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,SAAS,EAAE,4BAAmB,CAAC,CAAC;IAE7D,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,4BAAmB,CAAC,CAAC;IACvD,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,4BAA4B;IACzC,MAAM,SAAS;KAAG;IAClB,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,SAAS,EAAE,4BAAmB,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,SAAS,EAAE,4BAAmB,CAAC,CAAC;IAE9D,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,mCAAmC;IAWhD,MAAM,QAAQ,GAA0B;QACtC,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP,MAAM,EAAE,SAAS;SAClB;QACD,OAAO,EAAE,CAAC,SAAS,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gCAAgC;IAC7C,MAAM,QAAQ,GAAG,IAAI,4BAAmB,EAAE,CAAC;IAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const node_path_1 = __importDefault(require("node:path"));
40
+ const chai_1 = require("chai");
41
+ const Database = __importStar(require("@antelopejs/interface-database"));
42
+ const Decorators = __importStar(require("../index"));
43
+ const other_instance_1 = require("./helpers/other-instance");
44
+ const buildFolder = node_path_1.default.resolve(__dirname, "..");
45
+ const databaseFolder = node_path_1.default.join(node_path_1.default.dirname(require.resolve("@antelopejs/interface-database/package.json")), "dist");
46
+ const otherInstance = (0, other_instance_1.CreateOtherInstance)([buildFolder, databaseFolder]);
47
+ const Other = otherInstance(node_path_1.default.join(buildFolder, "index.js"));
48
+ const OtherStagedSchema = otherInstance(node_path_1.default.join(databaseFolder, "staged-query", "schema.js"));
49
+ const boundSchemaId = "cross-instance-bound";
50
+ class Item extends Decorators.Table {
51
+ }
52
+ Decorators.RegisterTable("items", boundSchemaId)(Item);
53
+ class Orphan extends Decorators.Table {
54
+ }
55
+ Decorators.RegisterTable("orphans", "cross-instance-never-registered")(Orphan);
56
+ class Prefix extends Decorators.TwoWayModifier {
57
+ lock(_, value, prefix) {
58
+ return `${prefix}_${String(value)}`;
59
+ }
60
+ unlock(lockedValue, prefix) {
61
+ return lockedValue.replace(`${prefix}_`, "");
62
+ }
63
+ }
64
+ class Labelled extends Decorators.Table {
65
+ }
66
+ Decorators.attachModifier(Labelled, Prefix, "label", {});
67
+ describe("Tables and models across interface instances", () => {
68
+ before(async () => {
69
+ await Decorators.RegisterSchema(boundSchemaId);
70
+ new OtherStagedSchema.Schema(boundSchemaId, {});
71
+ });
72
+ it("BasicDataModel reads a table class decorated through another instance (the DMS builds models of generated modules' tables)", BasicDataModelReadsOtherInstanceTest);
73
+ it("Table.table() returns the class's table in the schema RegisterSchema bound it to: default instance, an instance id, a given SchemaInstance (data-api and modules open tables with it)", TableOpensBoundSchemaTest);
74
+ it("Table.table() on a class no RegisterSchema bound throws, naming the class (no silent lookup by id)", UnboundTableThrowsTest);
75
+ it("GetModel from another instance builds the model on the table class's schema, even when that instance holds a schema with the same id (interface-dms TenantScopedModel)", GetModelFromOtherInstanceTest);
76
+ it("lock from another instance acts on the object's modifier state (data-api Validation.Lock)", LockFromOtherInstanceTest);
77
+ });
78
+ function stagesOf(query) {
79
+ return query
80
+ .build()
81
+ .map(({ stage, options }) => [stage, options?.id]);
82
+ }
83
+ function BasicDataModelReadsOtherInstanceTest() {
84
+ class Remote extends Other.Table {
85
+ }
86
+ Other.RegisterTable("remotes", "cross-instance-remote")(Remote);
87
+ const RemoteModel = Decorators.BasicDataModel(Remote);
88
+ (0, chai_1.expect)(RemoteModel.schemaName).to.equal("cross-instance-remote");
89
+ }
90
+ function TableOpensBoundSchemaTest() {
91
+ const bound = Database.Schema.get(boundSchemaId);
92
+ (0, chai_1.expect)(bound).to.not.equal(undefined);
93
+ (0, chai_1.expect)(Item.table()).to.be.instanceOf(Database.Table);
94
+ (0, chai_1.expect)(stagesOf(Item.table())).to.deep.equal([
95
+ ["schema", boundSchemaId],
96
+ ["instance", undefined],
97
+ ["table", "items"],
98
+ ]);
99
+ (0, chai_1.expect)(stagesOf(Item.table("t1"))[1]).to.deep.equal(["instance", "t1"]);
100
+ (0, chai_1.expect)(stagesOf(Item.table(bound.instance("t2")))[1]).to.deep.equal([
101
+ "instance",
102
+ "t2",
103
+ ]);
104
+ }
105
+ function UnboundTableThrowsTest() {
106
+ (0, chai_1.expect)(() => Orphan.table()).to.throw(/Orphan is not bound to a schema/);
107
+ }
108
+ function GetModelFromOtherInstanceTest() {
109
+ const ItemModel = Decorators.BasicDataModel(Item);
110
+ const model = Other.GetModel(ItemModel, "t3");
111
+ (0, chai_1.expect)(model.database).to.be.instanceOf(Database.SchemaInstance);
112
+ (0, chai_1.expect)(model.database.build()[0].options.id).to.equal(boundSchemaId);
113
+ }
114
+ function LockFromOtherInstanceTest() {
115
+ const row = new Labelled();
116
+ Other.lock(row, Prefix, undefined, "p");
117
+ row.label = "v";
118
+ (0, chai_1.expect)(Decorators.toDatabase(row)).to.have.nested.property("_internal.data.label", "p_v");
119
+ }
120
+ //# sourceMappingURL=cross_instance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross_instance.test.js","sourceRoot":"","sources":["../../src/tests/cross_instance.test.ts"],"names":[],"mappings":"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"}
@@ -9,19 +9,24 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ const chai_1 = require("chai");
12
13
  const interface_database_1 = require("@antelopejs/interface-database");
13
- const database_1 = require("@antelopejs/interface-database-decorators/database");
14
14
  const schema_1 = require("@antelopejs/interface-database-decorators/schema");
15
+ const database_1 = require("@antelopejs/interface-database-decorators/database");
16
+ const model_1 = require("@antelopejs/interface-database-decorators/model");
15
17
  const table_1 = require("@antelopejs/interface-database-decorators/table");
16
- const chai_1 = require("chai");
17
18
  const codec_helpers_1 = require("./codec_helpers");
18
19
  describe("Database - initialization", () => {
19
20
  it("creates a schema", async () => CreateSchemaTest());
20
21
  it("creates tables with default primary key", async () => CreateTablesWithDefaultPrimaryKeyTest());
21
22
  it("creates tables with indexes", async () => CreateTablesWithIndexesTest());
22
23
  it("creates tables with grouped indexes", async () => CreateTablesWithGroupedIndexesTest());
24
+ it("marks a single-field index as cross-instance", async () => MarksSingleFieldIndexCrossInstanceTest());
25
+ it("marks a group index as cross-instance when one member sets it", async () => MarksGroupIndexCrossInstanceTest());
26
+ it("leaves index definitions unchanged without crossInstance", async () => LeavesIndexDefinitionsUnchangedTest());
23
27
  it("creates tables with fixture data", async () => CreateTablesWithFixtureDataTest());
24
28
  it("handles multiple tables", async () => HandleMultipleTablesTest());
29
+ it("binds a table class registered after RegisterSchema ran to that schema (module hot reload)", async () => BindsLateRegisteredTableTest());
25
30
  it("populates TableDefinition.fields from @Field declarations", () => PopulatesTableDefinitionFieldsTest());
26
31
  });
27
32
  async function CreateSchemaTest() {
@@ -84,6 +89,81 @@ async function CreateTablesWithGroupedIndexesTest() {
84
89
  const schema = interface_database_1.Schema.get("test-grp-schema");
85
90
  (0, chai_1.expect)(schema).to.not.equal(undefined);
86
91
  }
92
+ async function MarksSingleFieldIndexCrossInstanceTest() {
93
+ let _TestTable = class _TestTable extends table_1.Table {
94
+ };
95
+ __decorate([
96
+ (0, table_1.Index)({ crossInstance: true }),
97
+ __metadata("design:type", String)
98
+ ], _TestTable.prototype, "email", void 0);
99
+ __decorate([
100
+ (0, table_1.Index)(),
101
+ __metadata("design:type", String)
102
+ ], _TestTable.prototype, "name", void 0);
103
+ _TestTable = __decorate([
104
+ (0, schema_1.RegisterTable)("cross_single", "test-cross-single-schema")
105
+ ], _TestTable);
106
+ await (0, database_1.RegisterSchema)("test-cross-single-schema");
107
+ const indexes = getIndexDefinitions("test-cross-single-schema", "cross_single");
108
+ (0, chai_1.expect)(indexes).to.deep.equal({
109
+ email: { fields: undefined, crossInstance: true },
110
+ name: { fields: undefined },
111
+ });
112
+ }
113
+ async function MarksGroupIndexCrossInstanceTest() {
114
+ let _TestTable = class _TestTable extends table_1.Table {
115
+ };
116
+ __decorate([
117
+ (0, table_1.Index)({ group: "user_search" }),
118
+ __metadata("design:type", String)
119
+ ], _TestTable.prototype, "name", void 0);
120
+ __decorate([
121
+ (0, table_1.Index)({ group: "user_search", crossInstance: true }),
122
+ __metadata("design:type", String)
123
+ ], _TestTable.prototype, "email", void 0);
124
+ __decorate([
125
+ (0, table_1.Index)({ group: "age_range" }),
126
+ __metadata("design:type", Number)
127
+ ], _TestTable.prototype, "age", void 0);
128
+ _TestTable = __decorate([
129
+ (0, schema_1.RegisterTable)("cross_group", "test-cross-group-schema")
130
+ ], _TestTable);
131
+ await (0, database_1.RegisterSchema)("test-cross-group-schema");
132
+ const indexes = getIndexDefinitions("test-cross-group-schema", "cross_group");
133
+ (0, chai_1.expect)(indexes).to.deep.equal({
134
+ user_search: { fields: ["name", "email"], crossInstance: true },
135
+ age_range: { fields: ["age"] },
136
+ });
137
+ }
138
+ async function LeavesIndexDefinitionsUnchangedTest() {
139
+ let _TestTable = class _TestTable extends table_1.Table {
140
+ };
141
+ __decorate([
142
+ (0, table_1.Index)(),
143
+ __metadata("design:type", String)
144
+ ], _TestTable.prototype, "name", void 0);
145
+ __decorate([
146
+ (0, table_1.Index)({ group: "user_search" }),
147
+ __metadata("design:type", String)
148
+ ], _TestTable.prototype, "email", void 0);
149
+ _TestTable = __decorate([
150
+ (0, schema_1.RegisterTable)("cross_none", "test-cross-none-schema")
151
+ ], _TestTable);
152
+ await (0, database_1.RegisterSchema)("test-cross-none-schema");
153
+ const indexes = getIndexDefinitions("test-cross-none-schema", "cross_none");
154
+ (0, chai_1.expect)(indexes).to.deep.equal({
155
+ name: { fields: undefined },
156
+ user_search: { fields: ["email"] },
157
+ });
158
+ const hasCrossInstanceKey = Object.values(indexes).some((index) => "crossInstance" in index);
159
+ (0, chai_1.expect)(hasCrossInstanceKey).to.equal(false);
160
+ }
161
+ function getIndexDefinitions(schemaId, tableName) {
162
+ const schema = interface_database_1.Schema.get(schemaId);
163
+ if (!schema)
164
+ throw new Error("Schema not found");
165
+ return schema.definition[tableName].indexes;
166
+ }
87
167
  async function CreateTablesWithFixtureDataTest() {
88
168
  const testData = [
89
169
  { id: "1", name: "Test User 1" },
@@ -153,4 +233,20 @@ async function HandleMultipleTablesTest() {
153
233
  const schema = interface_database_1.Schema.get("test-multi-table-schema");
154
234
  (0, chai_1.expect)(schema).to.not.equal(undefined);
155
235
  }
236
+ async function BindsLateRegisteredTableTest() {
237
+ let _Declared = class _Declared extends table_1.Table {
238
+ };
239
+ _Declared = __decorate([
240
+ (0, schema_1.RegisterTable)("late_items", "test-late-schema")
241
+ ], _Declared);
242
+ await (0, database_1.RegisterSchema)("test-late-schema");
243
+ let Reloaded = class Reloaded extends table_1.Table {
244
+ };
245
+ Reloaded = __decorate([
246
+ (0, schema_1.RegisterTable)("late_items", "test-late-schema")
247
+ ], Reloaded);
248
+ const model = (0, model_1.GetModel)((0, model_1.BasicDataModel)(Reloaded), "late-instance");
249
+ (0, chai_1.expect)(model.database.build()[0].options.id).to.equal("test-late-schema");
250
+ (0, chai_1.expect)(Reloaded.table().build()[0].options.id).to.equal("test-late-schema");
251
+ }
156
252
  //# sourceMappingURL=database.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.test.js","sourceRoot":"","sources":["../../src/tests/database.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.test.js","sourceRoot":"","sources":["../../src/tests/database.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ type ModuleRequire = (request: string) => unknown;
2
+ /**
3
+ * Evaluates built packages a second time, the way the core gives each
4
+ * provider binding its own copy of an interface: every file under `folders`
5
+ * is loaded again, with its own classes, symbols and registries, while
6
+ * anything else (interface-core, third-party dependencies) stays the copy
7
+ * already loaded.
8
+ *
9
+ * @param folders Build output folders to evaluate again
10
+ * @returns A `require` resolving into the second copy
11
+ */
12
+ export declare function CreateOtherInstance(folders: string[]): ModuleRequire;
13
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CreateOtherInstance = CreateOtherInstance;
7
+ const node_module_1 = __importDefault(require("node:module"));
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const internals = node_module_1.default;
11
+ /**
12
+ * Evaluates built packages a second time, the way the core gives each
13
+ * provider binding its own copy of an interface: every file under `folders`
14
+ * is loaded again, with its own classes, symbols and registries, while
15
+ * anything else (interface-core, third-party dependencies) stays the copy
16
+ * already loaded.
17
+ *
18
+ * @param folders Build output folders to evaluate again
19
+ * @returns A `require` resolving into the second copy
20
+ */
21
+ function CreateOtherInstance(folders) {
22
+ const owned = folders.map((folder) => (0, node_fs_1.realpathSync)(folder) + node_path_1.default.sep);
23
+ const modules = new Map();
24
+ const load = (filename, parent) => {
25
+ const cached = modules.get(filename);
26
+ if (cached) {
27
+ return cached.exports;
28
+ }
29
+ const loaded = new node_module_1.default(filename, parent);
30
+ loaded.filename = filename;
31
+ loaded.paths = internals._nodeModulePaths(node_path_1.default.dirname(filename));
32
+ loaded.require = ((request) => requireFrom(loaded, request));
33
+ modules.set(filename, loaded);
34
+ loaded.load(filename);
35
+ return loaded.exports;
36
+ };
37
+ const requireFrom = (parent, request) => {
38
+ const filename = internals._resolveFilename(request, parent);
39
+ const isOwned = owned.some((root) => filename.startsWith(root));
40
+ return isOwned
41
+ ? load(filename, parent)
42
+ : node_module_1.default.prototype.require.call(parent, request);
43
+ };
44
+ return (request) => requireFrom(module, request);
45
+ }
46
+ //# sourceMappingURL=other-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"other-instance.js","sourceRoot":"","sources":["../../../src/tests/helpers/other-instance.ts"],"names":[],"mappings":";;;;;AA2BA,kDA4BC;AAvDD,8DAAiC;AACjC,qCAAuC;AACvC,0DAA6B;AAa7B,MAAM,SAAS,GAAG,qBAAoC,CAAC;AAEvD;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CAAC,OAAiB;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,sBAAY,EAAC,MAAM,CAAC,GAAG,mBAAI,CAAC,GAAG,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAE,MAAc,EAAW,EAAE;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,qBAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,gBAAgB,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CACpC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAsB,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAoC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,OAAe,EAAW,EAAE;QAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,OAAO,OAAO;YACZ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;YACxB,CAAC,CAAC,qBAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,OAAO,CAAC,OAAe,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC"}
@@ -9,15 +9,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ const chai_1 = require("chai");
12
13
  const interface_database_1 = require("@antelopejs/interface-database");
14
+ const schema_1 = require("@antelopejs/interface-database-decorators/schema");
13
15
  const database_1 = require("@antelopejs/interface-database-decorators/database");
14
16
  const model_1 = require("@antelopejs/interface-database-decorators/model");
15
- const encryption_1 = require("@antelopejs/interface-database-decorators/modifiers/encryption");
16
17
  const hash_1 = require("@antelopejs/interface-database-decorators/modifiers/hash");
17
- const localization_1 = require("@antelopejs/interface-database-decorators/modifiers/localization");
18
- const schema_1 = require("@antelopejs/interface-database-decorators/schema");
19
18
  const table_1 = require("@antelopejs/interface-database-decorators/table");
20
- const chai_1 = require("chai");
19
+ const encryption_1 = require("@antelopejs/interface-database-decorators/modifiers/encryption");
20
+ const localization_1 = require("@antelopejs/interface-database-decorators/modifiers/localization");
21
21
  const codec_helpers_1 = require("./codec_helpers");
22
22
  function getDatabase(schemaId) {
23
23
  const instance = interface_database_1.Schema.get(schemaId)?.instance();