@antelopejs/interface-database-decorators 0.1.9 → 0.1.11

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 (69) hide show
  1. package/README.md +1 -1
  2. package/dist/antelope.test.js +1 -1
  3. package/dist/common.d.ts +2 -1
  4. package/dist/common.js +5 -1
  5. package/dist/common.js.map +1 -1
  6. package/dist/database.js +1 -0
  7. package/dist/database.js.map +1 -1
  8. package/dist/model.js +29 -26
  9. package/dist/model.js.map +1 -1
  10. package/dist/modifiers/common.d.ts +24 -4
  11. package/dist/modifiers/common.js +92 -114
  12. package/dist/modifiers/common.js.map +1 -1
  13. package/dist/modifiers/encryption.js +14 -9
  14. package/dist/modifiers/encryption.js.map +1 -1
  15. package/dist/modifiers/internal/kinds.d.ts +12 -0
  16. package/dist/modifiers/internal/kinds.js +29 -0
  17. package/dist/modifiers/internal/kinds.js.map +1 -0
  18. package/dist/modifiers/internal/records.d.ts +29 -0
  19. package/dist/modifiers/internal/records.js +42 -0
  20. package/dist/modifiers/internal/records.js.map +1 -0
  21. package/dist/modifiers/localization.d.ts +19 -1
  22. package/dist/modifiers/localization.js +41 -6
  23. package/dist/modifiers/localization.js.map +1 -1
  24. package/dist/schema.js +1 -2
  25. package/dist/schema.js.map +1 -1
  26. package/dist/table.d.ts +8 -0
  27. package/dist/table.js +21 -6
  28. package/dist/table.js.map +1 -1
  29. package/dist/tests/codec_helpers.d.ts +6 -2
  30. package/dist/tests/codec_helpers.js +18 -14
  31. package/dist/tests/codec_helpers.js.map +1 -1
  32. package/dist/tests/common.test.js +38 -46
  33. package/dist/tests/common.test.js.map +1 -1
  34. package/dist/tests/cross_instance.test.js +27 -2
  35. package/dist/tests/cross_instance.test.js.map +1 -1
  36. package/dist/tests/database.test.js +247 -226
  37. package/dist/tests/database.test.js.map +1 -1
  38. package/dist/tests/helpers/other-instance.d.ts +1 -1
  39. package/dist/tests/helpers/other-instance.js +41 -9
  40. package/dist/tests/helpers/other-instance.js.map +1 -1
  41. package/dist/tests/integration.test.js +485 -469
  42. package/dist/tests/integration.test.js.map +1 -1
  43. package/dist/tests/model.test.js +293 -308
  44. package/dist/tests/model.test.js.map +1 -1
  45. package/dist/tests/modifiers/autodate.test.js +80 -86
  46. package/dist/tests/modifiers/autodate.test.js.map +1 -1
  47. package/dist/tests/modifiers/common.test.js +181 -195
  48. package/dist/tests/modifiers/common.test.js.map +1 -1
  49. package/dist/tests/modifiers/encryption.test.js +149 -155
  50. package/dist/tests/modifiers/encryption.test.js.map +1 -1
  51. package/dist/tests/modifiers/hash.test.js +91 -99
  52. package/dist/tests/modifiers/hash.test.js.map +1 -1
  53. package/dist/tests/modifiers/localization.test.js +186 -159
  54. package/dist/tests/modifiers/localization.test.js.map +1 -1
  55. package/dist/tests/relation.test.js +92 -97
  56. package/dist/tests/relation.test.js.map +1 -1
  57. package/dist/tests/schema.test.js +101 -106
  58. package/dist/tests/schema.test.js.map +1 -1
  59. package/dist/tests/table.test.js +124 -132
  60. package/dist/tests/table.test.js.map +1 -1
  61. package/docs/1.introduction.md +56 -2
  62. package/docs/2.table-definitions.md +15 -0
  63. package/docs/3.table-modifiers.md +10 -4
  64. package/docs/4.data-models.md +12 -0
  65. package/docs/5.parameter-decoration.md +4 -0
  66. package/docs/assets/model-conversion.svg +21 -0
  67. package/package.json +16 -5
  68. package/skills/database-decorators-interface/SKILL.md +4 -0
  69. package/skills/database-decorators-interface/cases.json +71 -0
@@ -1,7 +1,11 @@
1
1
  import type * as DatabaseDev from "@antelopejs/interface-database";
2
+ import { type Constructible } from "../common";
2
3
  import { ContainerModifier, MixinSymbol } from "./common";
3
4
  type Options = {
4
- /** Fallback locale to use when no value exists for the selected locale. */
5
+ /**
6
+ * Fallback locale to use when the selected locale has no value, or an
7
+ * empty one.
8
+ */
5
9
  fallbackLocale?: string;
6
10
  };
7
11
  /**
@@ -14,6 +18,20 @@ type Options = {
14
18
  * See {@link ContainerModifier} for the generic modifier.
15
19
  */
16
20
  export declare class LocalizationModifier extends ContainerModifier<Record<string, never>, Options> {
21
+ /**
22
+ * The fallback locale of a localized field of a table class.
23
+ *
24
+ * @param TableClass Table class declaring the field
25
+ * @param field Field name
26
+ * @returns The field's `fallbackLocale`, or `undefined` when the field is
27
+ * not localized or declares none
28
+ */
29
+ static fallbackLocaleOf(TableClass: Constructible, field: string): string | undefined;
30
+ /**
31
+ * Stores an empty text as no text, so that the fallback locale answers for
32
+ * it in queries too (`unlockrequest`).
33
+ */
34
+ lock(locked_value: Record<string, unknown> | undefined, value: unknown, key: string): Record<string, unknown>;
17
35
  unlock(locked_value: Record<string, unknown>, key: string): unknown;
18
36
  unlockrequest(data: DatabaseDev.ValueProxy<Record<string, unknown>>, _meta: DatabaseDev.ValueProxy<Record<string, never>>, key: DatabaseDev.ValueProxyOrValue<string>): DatabaseDev.ValueProxy<unknown>;
19
37
  [MixinSymbol]: {
@@ -2,7 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Localized = exports.LocalizationModifier = void 0;
4
4
  const decorators_1 = require("@antelopejs/interface-core/decorators");
5
- const common_1 = require("./common");
5
+ const common_1 = require("../common");
6
+ const common_2 = require("./common");
7
+ /** A text left empty in one language counts as no text in that language. */
8
+ const EMPTY_TEXT = "";
9
+ function isObject(value) {
10
+ return typeof value === "object" && value !== null;
11
+ }
12
+ function withoutEmptyTexts(values) {
13
+ return Object.fromEntries(Object.entries(values).filter(([, value]) => value !== EMPTY_TEXT));
14
+ }
6
15
  /**
7
16
  * Localization modifier. enables the use of {@link Localized} on table fields.
8
17
  *
@@ -12,10 +21,36 @@ const common_1 = require("./common");
12
21
  *
13
22
  * See {@link ContainerModifier} for the generic modifier.
14
23
  */
15
- class LocalizationModifier extends common_1.ContainerModifier {
24
+ class LocalizationModifier extends common_2.ContainerModifier {
25
+ /**
26
+ * The fallback locale of a localized field of a table class.
27
+ *
28
+ * @param TableClass Table class declaring the field
29
+ * @param field Field name
30
+ * @returns The field's `fallbackLocale`, or `undefined` when the field is
31
+ * not localized or declares none
32
+ */
33
+ static fallbackLocaleOf(TableClass, field) {
34
+ const modified = (0, common_1.getMetadata)(TableClass, common_2.ModifiersStaticMetadata).fields[field]?.find(({ id }) => id === LocalizationModifier.name);
35
+ // SAFETY: attachModifier stores id = Modifier.name together with `new Modifier()`, so the entry found by id === LocalizationModifier.name holds an instance of the class of that name, as in every id lookup of the modifier machinery (unlock, lock, getModifiedFields).
36
+ return modified?.modifier?.options
37
+ .fallbackLocale;
38
+ }
39
+ /**
40
+ * Stores an empty text as no text, so that the fallback locale answers for
41
+ * it in queries too (`unlockrequest`).
42
+ */
43
+ lock(locked_value, value, key) {
44
+ if (key === "*") {
45
+ return isObject(value)
46
+ ? withoutEmptyTexts(value)
47
+ : value;
48
+ }
49
+ return withoutEmptyTexts(super.lock(locked_value, value, key));
50
+ }
16
51
  unlock(locked_value, key) {
17
52
  const unlocked = super.unlock(locked_value, key);
18
- if (unlocked !== undefined) {
53
+ if (unlocked !== undefined && unlocked !== EMPTY_TEXT) {
19
54
  return unlocked;
20
55
  }
21
56
  if (this.options.fallbackLocale) {
@@ -28,7 +63,7 @@ class LocalizationModifier extends common_1.ContainerModifier {
28
63
  }
29
64
  return data.key(key);
30
65
  }
31
- [common_1.MixinSymbol] = class {
66
+ [common_2.MixinSymbol] = class {
32
67
  /**
33
68
  * Specify which locale to use for accessing some or all localized fields.
34
69
  *
@@ -38,7 +73,7 @@ class LocalizationModifier extends common_1.ContainerModifier {
38
73
  * @returns `this`
39
74
  */
40
75
  localize(locale, fields) {
41
- (0, common_1.unlock)(this, LocalizationModifier, fields, locale);
76
+ (0, common_2.unlock)(this, LocalizationModifier, fields, locale);
42
77
  return this;
43
78
  }
44
79
  };
@@ -52,6 +87,6 @@ exports.LocalizationModifier = LocalizationModifier;
52
87
  * @param options Localization options.
53
88
  */
54
89
  exports.Localized = (0, decorators_1.MakePropertyDecorator)((target, propertyKey, options) => {
55
- (0, common_1.attachModifier)(target.constructor, LocalizationModifier, propertyKey, options || {});
90
+ (0, common_2.attachModifier)(target.constructor, LocalizationModifier, propertyKey, options || {});
56
91
  });
57
92
  //# sourceMappingURL=localization.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"localization.js","sourceRoot":"","sources":["../../src/modifiers/localization.ts"],"names":[],"mappings":";;;AACA,sEAA8E;AAE9E,qCAKkB;AAOlB;;;;;;;;GAQG;AACH,MAAa,oBAAqB,SAAQ,0BAGzC;IACiB,MAAM,CAAC,YAAqC,EAAE,GAAW;QACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACjD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAEe,aAAa,CAC3B,IAAqD,EACrD,KAAoD,EACpD,GAA0C;QAE1C,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,CAAC,oBAAW,CAAC,GAAG;QACd;;;;;;;WAOG;QACH,QAAQ,CAEN,MAAc,EACd,MAA0B;YAE1B,IAAA,eAAM,EAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;CACH;AA3CD,oDA2CC;AAED;;;;;;GAMG;AACU,QAAA,SAAS,GAAG,IAAA,kCAAqB,EAC5C,CAAC,MAAM,EAAE,WAAW,EAAE,OAAiB,EAAE,EAAE;IACzC,IAAA,uBAAc,EACZ,MAAM,CAAC,WAAW,EAClB,oBAAoB,EACpB,WAAW,EACX,OAAO,IAAI,EAAE,CACd,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"localization.js","sourceRoot":"","sources":["../../src/modifiers/localization.ts"],"names":[],"mappings":"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"}
package/dist/schema.js CHANGED
@@ -14,8 +14,7 @@ exports.RegisterTable = (0, decorators_1.MakeClassDecorator)((target, tableName,
14
14
  if (!(schemaName in schemaTableRegistry)) {
15
15
  schemaTableRegistry[schemaName] = {};
16
16
  }
17
- schemaTableRegistry[schemaName][tableName] =
18
- target;
17
+ schemaTableRegistry[schemaName][tableName] = target;
19
18
  });
20
19
  function getTablesForSchema(schemaName) {
21
20
  return schemaTableRegistry[schemaName];
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;;AA8BA,gDAIC;AAlCD,sEAI+C;AAC/C,uEAAwD;AAGxD,qCAA4D;AAE5D,MAAM,mBAAmB,GAAiD,EAAE,CAAC;AAEhE,QAAA,aAAa,GAGU,IAAA,+BAAkB,EACpD,CAAC,MAAM,EAAE,SAAiB,EAAE,UAAkB,EAAE,EAAE;IAChD,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,MAAM,EAAE,4BAAmB,CAAC,CAAC;IAC1D,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,QAAQ,CAAC,MAAM,GAAG,2BAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,CAAC,CAAC,UAAU,IAAI,mBAAmB,CAAC,EAAE,CAAC;QACzC,mBAAmB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC;IACD,mBAAmB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;QACxC,MAAiC,CAAC;AACtC,CAAC,CACF,CAAC;AAEF,SAAgB,kBAAkB,CAChC,UAAkB;IAElB,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;;AA6BA,gDAIC;AAjCD,sEAI+C;AAC/C,uEAAwD;AAGxD,qCAA4D;AAE5D,MAAM,mBAAmB,GAAiD,EAAE,CAAC;AAEhE,QAAA,aAAa,GAGU,IAAA,+BAAkB,EACpD,CAAC,MAAM,EAAE,SAAiB,EAAE,UAAkB,EAAE,EAAE;IAChD,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,MAAM,EAAE,4BAAmB,CAAC,CAAC;IAC1D,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,QAAQ,CAAC,MAAM,GAAG,2BAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,CAAC,CAAC,UAAU,IAAI,mBAAmB,CAAC,EAAE,CAAC;QACzC,mBAAmB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC;IACD,mBAAmB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;AACtD,CAAC,CACF,CAAC;AAEF,SAAgB,kBAAkB,CAChC,UAAkB;IAElB,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC"}
package/dist/table.d.ts CHANGED
@@ -67,6 +67,13 @@ export interface IndexOptions {
67
67
  * For a group, setting it on any field applies it to the whole group.
68
68
  */
69
69
  crossInstance?: boolean;
70
+ /**
71
+ * Refuse a second row of the instance with the same key: the write throws
72
+ * `DuplicateKeyError` from `@antelopejs/interface-database`.
73
+ *
74
+ * For a group, setting it on any field makes the whole group's key unique.
75
+ */
76
+ unique?: boolean;
70
77
  }
71
78
  /**
72
79
  * Database Table Index decorator.
@@ -74,6 +81,7 @@ export interface IndexOptions {
74
81
  * Available options:
75
82
  * - `group`: Index name for multi-field indexes.
76
83
  * - `crossInstance`: Also keep the index fast for cross-instance queries.
84
+ * - `unique`: Refuse two rows of the instance with the same key.
77
85
  *
78
86
  * @param options Options
79
87
  */
package/dist/table.js CHANGED
@@ -7,12 +7,17 @@ exports.Fixture = exports.Field = exports.Index = exports.Table = exports.TableR
7
7
  const node_assert_1 = __importDefault(require("node:assert"));
8
8
  const decorators_1 = require("@antelopejs/interface-core/decorators");
9
9
  const common_1 = require("./modifiers/common");
10
+ const records_1 = require("./modifiers/internal/records");
10
11
  const common_2 = require("./common");
11
12
  exports.TableMetaSymbol = Symbol();
12
13
  exports.TableRefSymbol = Symbol();
13
14
  function isSchemaInstance(target) {
14
15
  return typeof target === "object" && target !== null;
15
16
  }
17
+ function extendTable(Base) {
18
+ return class _internal_table extends Base {
19
+ };
20
+ }
16
21
  /**
17
22
  * Database Table superclass
18
23
  */
@@ -44,20 +49,29 @@ class Table {
44
49
  * @returns New superclass
45
50
  */
46
51
  static with(...others) {
47
- const c = class _internal_table extends this {
48
- };
52
+ const c = extendTable(this);
49
53
  for (const mixin of others
50
54
  .map((otherClass) => otherClass.prototype && new otherClass())
51
55
  .map((other) => other?.[common_1.MixinSymbol])
52
56
  .filter((mixin) => mixin?.prototype)) {
53
57
  for (const key of Object.getOwnPropertyNames(mixin.prototype)) {
54
58
  if (key !== "constructor" && !(key in c.prototype)) {
55
- c.prototype[key] = mixin.prototype[key];
59
+ Object.defineProperty(c.prototype, key, {
60
+ value: mixin.prototype[key],
61
+ writable: true,
62
+ enumerable: true,
63
+ configurable: true,
64
+ });
56
65
  }
57
66
  }
58
67
  for (const key of Object.getOwnPropertySymbols(mixin.prototype)) {
59
68
  if (!(key in c.prototype)) {
60
- c.prototype[key] = mixin.prototype[key];
69
+ Object.defineProperty(c.prototype, key, {
70
+ value: mixin.prototype[key],
71
+ writable: true,
72
+ enumerable: true,
73
+ configurable: true,
74
+ });
61
75
  }
62
76
  }
63
77
  }
@@ -71,19 +85,20 @@ exports.Table = Table;
71
85
  * Available options:
72
86
  * - `group`: Index name for multi-field indexes.
73
87
  * - `crossInstance`: Also keep the index fast for cross-instance queries.
88
+ * - `unique`: Refuse two rows of the instance with the same key.
74
89
  *
75
90
  * @param options Options
76
91
  */
77
92
  exports.Index = (0, decorators_1.MakePropertyDecorator)((target, propertyKey, options) => {
78
93
  const metadata = (0, common_2.getMetadata)(target.constructor, common_2.DatumStaticMetadata);
79
- metadata.addIndex(propertyKey, options?.group || propertyKey, options?.crossInstance);
94
+ metadata.addIndex(propertyKey, options?.group || propertyKey, options?.crossInstance, options?.unique);
80
95
  });
81
96
  /**
82
97
  * Database Table Field type decorator.
83
98
  */
84
99
  exports.Field = (0, decorators_1.MakePropertyDecorator)((target, propertyKey, type) => {
85
100
  const metadata = (0, common_2.getMetadata)(target.constructor, common_2.DatumStaticMetadata);
86
- metadata.fields[propertyKey] = type;
101
+ (0, records_1.fieldTypesByKey)(metadata)[propertyKey] = type;
87
102
  });
88
103
  /**
89
104
  * Database Table class decorator to create default data on table creation.
package/dist/table.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
@@ -12,16 +12,20 @@ export type DecodeRight<T> = {
12
12
  right: T;
13
13
  };
14
14
  export type DecodeResult<T> = DecodeLeft | DecodeRight<T>;
15
+ type FieldCodec = Extract<FieldType, {
16
+ decode: unknown;
17
+ }>;
15
18
  export type TestCodec<T> = {
16
19
  readonly _A: T;
17
20
  readonly _O: T;
18
21
  readonly _I: unknown;
19
22
  readonly name: string;
20
23
  is(u: unknown): u is T;
21
- encode(a: T): unknown;
22
- decode(u: unknown): DecodeResult<T>;
24
+ encode(a: T): ReturnType<FieldCodec["encode"]>;
25
+ decode(u: Parameters<FieldCodec["decode"]>[0]): DecodeResult<T>;
23
26
  };
24
27
  export declare function makeCodec<T>(name: string, guard: (u: unknown) => u is T): TestCodec<T>;
25
28
  export declare const stringCodec: TestCodec<string>;
26
29
  export declare const numberCodec: TestCodec<number>;
27
30
  export declare function asFieldType(codec: TestCodec<unknown>): FieldType;
31
+ export {};
@@ -3,21 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.numberCodec = exports.stringCodec = void 0;
4
4
  exports.makeCodec = makeCodec;
5
5
  exports.asFieldType = asFieldType;
6
+ class GuardCodec {
7
+ name;
8
+ guard;
9
+ _I = undefined;
10
+ constructor(name, guard) {
11
+ this.name = name;
12
+ this.guard = guard;
13
+ }
14
+ is = (u) => this.guard(u);
15
+ encode = (a) => a;
16
+ decode = (u) => this.guard(u)
17
+ ? { _tag: "Right", right: u }
18
+ : {
19
+ _tag: "Left",
20
+ left: [{ value: u, context: [], message: `not ${this.name}` }],
21
+ };
22
+ }
6
23
  function makeCodec(name, guard) {
7
- return {
8
- _A: undefined,
9
- _O: undefined,
10
- _I: undefined,
11
- name,
12
- is: guard,
13
- encode: (a) => a,
14
- decode: (u) => guard(u)
15
- ? { _tag: "Right", right: u }
16
- : {
17
- _tag: "Left",
18
- left: [{ value: u, context: [], message: `not ${name}` }],
19
- },
20
- };
24
+ return new GuardCodec(name, guard);
21
25
  }
22
26
  exports.stringCodec = makeCodec("string", (u) => typeof u === "string");
23
27
  exports.numberCodec = makeCodec("number", (u) => typeof u === "number");
@@ -1 +1 @@
1
- {"version":3,"file":"codec_helpers.js","sourceRoot":"","sources":["../../src/tests/codec_helpers.ts"],"names":[],"mappings":";;;AAmBA,8BAmBC;AAWD,kCAEC;AAhCD,SAAgB,SAAS,CACvB,IAAY,EACZ,KAA6B;IAE7B,OAAO;QACL,EAAE,EAAE,SAAyB;QAC7B,EAAE,EAAE,SAAyB;QAC7B,EAAE,EAAE,SAAoB;QACxB,IAAI;QACJ,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,KAAK,CAAC,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;YAC7B,CAAC,CAAC;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;aAC1D;KACR,CAAC;AACJ,CAAC;AAEY,QAAA,WAAW,GAAsB,SAAS,CACrD,QAAQ,EACR,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAC;AACW,QAAA,WAAW,GAAsB,SAAS,CACrD,QAAQ,EACR,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAC;AAEF,SAAgB,WAAW,CAAC,KAAyB;IACnD,OAAO,KAA6B,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"codec_helpers.js","sourceRoot":"","sources":["../../src/tests/codec_helpers.ts"],"names":[],"mappings":";;;AA8CA,8BAKC;AAWD,kCAEC;AA3CD,MAAM,UAAU;IAMH;IACQ;IAJV,EAAE,GAAY,SAAS,CAAC;IAEjC,YACW,IAAY,EACJ,KAA6B;QADrC,SAAI,GAAJ,IAAI,CAAQ;QACJ,UAAK,GAAL,KAAK,CAAwB;IAC7C,CAAC;IAEK,EAAE,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3C,MAAM,GAAG,CAAC,CAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAErB,MAAM,GAAG,CAChB,CAAsC,EACrB,EAAE,CACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACX,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;QAC7B,CAAC,CAAC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;SAC/D,CAAC;CACT;AAED,SAAgB,SAAS,CACvB,IAAY,EACZ,KAA6B;IAE7B,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAEY,QAAA,WAAW,GAAsB,SAAS,CACrD,QAAQ,EACR,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAC;AACW,QAAA,WAAW,GAAsB,SAAS,CACrD,QAAQ,EACR,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAC;AAEF,SAAgB,WAAW,CAAC,KAAyB;IACnD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,52 +1,44 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const chai_1 = require("chai");
4
- const common_1 = require("@antelopejs/interface-database-decorators/common");
4
+ const common_1 = require("../common");
5
+ const _partial = {
6
+ name: "John",
7
+ address: {
8
+ street: "Main St",
9
+ },
10
+ hobbies: ["reading"],
11
+ };
5
12
  describe("Common - metadata", () => {
6
- it("creates metadata with default values", async () => CreateMetadataWithDefaultValuesTest());
7
- it("adds index to metadata", async () => AddIndexToMetadataTest());
8
- it("creates new metadata when not exists", async () => CreateNewMetadataWhenNotExistsTest());
9
- it("retrieves existing metadata", async () => RetrieveExistingMetadataTest());
10
- it("handles deep partial types correctly", async () => HandleDeepPartialTypesCorrectlyTest());
11
- it("has schemaName undefined by default", async () => SchemaNameUndefinedByDefaultTest());
13
+ it("creates metadata with default values", async () => {
14
+ const metadata = new common_1.DatumStaticMetadata();
15
+ (0, chai_1.expect)(metadata.primary).to.equal("_id");
16
+ (0, chai_1.expect)(metadata.indexes).to.deep.equal({});
17
+ (0, chai_1.expect)(metadata.generator).to.equal(undefined);
18
+ });
19
+ it("adds index to metadata", async () => {
20
+ const metadata = new common_1.DatumStaticMetadata();
21
+ metadata.addIndex("email", "user_search");
22
+ metadata.addIndex("name", "user_search");
23
+ (0, chai_1.expect)(metadata.indexes.user_search).to.deep.equal(["email", "name"]);
24
+ });
25
+ it("creates new metadata when not exists", async () => {
26
+ class TestClass {
27
+ }
28
+ const metadata = (0, common_1.getMetadata)(TestClass, common_1.DatumStaticMetadata);
29
+ (0, chai_1.expect)(metadata).to.be.instanceOf(common_1.DatumStaticMetadata);
30
+ (0, chai_1.expect)(metadata.primary).to.equal("_id");
31
+ });
32
+ it("retrieves existing metadata", async () => {
33
+ class TestClass {
34
+ }
35
+ const metadata1 = (0, common_1.getMetadata)(TestClass, common_1.DatumStaticMetadata);
36
+ const metadata2 = (0, common_1.getMetadata)(TestClass, common_1.DatumStaticMetadata);
37
+ (0, chai_1.expect)(metadata1).to.equal(metadata2);
38
+ });
39
+ it("has schemaName undefined by default", async () => {
40
+ const metadata = new common_1.DatumStaticMetadata();
41
+ (0, chai_1.expect)(metadata.schemaName).to.equal(undefined);
42
+ });
12
43
  });
13
- async function CreateMetadataWithDefaultValuesTest() {
14
- const metadata = new common_1.DatumStaticMetadata();
15
- (0, chai_1.expect)(metadata.primary).to.equal("_id");
16
- (0, chai_1.expect)(metadata.indexes).to.deep.equal({});
17
- (0, chai_1.expect)(metadata.generator).to.equal(undefined);
18
- }
19
- async function AddIndexToMetadataTest() {
20
- const metadata = new common_1.DatumStaticMetadata();
21
- metadata.addIndex("email", "user_search");
22
- metadata.addIndex("name", "user_search");
23
- (0, chai_1.expect)(metadata.indexes.user_search).to.deep.equal(["email", "name"]);
24
- }
25
- async function CreateNewMetadataWhenNotExistsTest() {
26
- class TestClass {
27
- }
28
- const metadata = (0, common_1.getMetadata)(TestClass, common_1.DatumStaticMetadata);
29
- (0, chai_1.expect)(metadata).to.be.instanceOf(common_1.DatumStaticMetadata);
30
- (0, chai_1.expect)(metadata.primary).to.equal("_id");
31
- }
32
- async function RetrieveExistingMetadataTest() {
33
- class TestClass {
34
- }
35
- const metadata1 = (0, common_1.getMetadata)(TestClass, common_1.DatumStaticMetadata);
36
- const metadata2 = (0, common_1.getMetadata)(TestClass, common_1.DatumStaticMetadata);
37
- (0, chai_1.expect)(metadata1).to.equal(metadata2);
38
- }
39
- async function HandleDeepPartialTypesCorrectlyTest() {
40
- const _partial = {
41
- name: "John",
42
- address: {
43
- street: "Main St",
44
- },
45
- hobbies: ["reading"],
46
- };
47
- }
48
- async function SchemaNameUndefinedByDefaultTest() {
49
- const metadata = new common_1.DatumStaticMetadata();
50
- (0, chai_1.expect)(metadata.schemaName).to.equal(undefined);
51
- }
52
44
  //# sourceMappingURL=common.test.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"common.test.js","sourceRoot":"","sources":["../../src/tests/common.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,sCAA+E;AAY/E,MAAM,QAAQ,GAA0B;IACtC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE;QACP,MAAM,EAAE,SAAS;KAClB;IACD,OAAO,EAAE,CAAC,SAAS,CAAC;CACrB,CAAC;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,QAAQ,GAAG,IAAI,4BAAmB,EAAE,CAAC;QAE3C,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,QAAQ,GAAG,IAAI,4BAAmB,EAAE,CAAC;QAE3C,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC1C,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEzC,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,SAAS;SAAG;QAClB,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,SAAS,EAAE,4BAAmB,CAAC,CAAC;QAE7D,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,4BAAmB,CAAC,CAAC;QACvD,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,SAAS;SAAG;QAClB,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,SAAS,EAAE,4BAAmB,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,SAAS,EAAE,4BAAmB,CAAC,CAAC;QAE9D,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,QAAQ,GAAG,IAAI,4BAAmB,EAAE,CAAC;QAC3C,IAAA,aAAM,EAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -44,8 +44,33 @@ const other_instance_1 = require("./helpers/other-instance");
44
44
  const buildFolder = node_path_1.default.resolve(__dirname, "..");
45
45
  const databaseFolder = node_path_1.default.join(node_path_1.default.dirname(require.resolve("@antelopejs/interface-database/package.json")), "dist");
46
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"));
47
+ function isFunction(value) {
48
+ return typeof value === "function";
49
+ }
50
+ function isDecoratorsModule(candidate) {
51
+ const present = new Map(Object.entries(candidate));
52
+ return Object.entries(Decorators).every(([name, member]) => present.has(name) &&
53
+ (!isFunction(member) || isFunction(present.get(name))));
54
+ }
55
+ function isStagedSchemaModule(candidate) {
56
+ return "Schema" in candidate && typeof candidate.Schema === "function";
57
+ }
58
+ function loadDecorators() {
59
+ const loaded = otherInstance(node_path_1.default.join(buildFolder, "index.js"));
60
+ if (!isDecoratorsModule(loaded)) {
61
+ throw new Error("The other instance does not expose the decorators");
62
+ }
63
+ return loaded;
64
+ }
65
+ function loadStagedSchema() {
66
+ const loaded = otherInstance(node_path_1.default.join(databaseFolder, "staged-query", "schema.js"));
67
+ if (!isStagedSchemaModule(loaded)) {
68
+ throw new Error("The other instance does not expose the schema exports");
69
+ }
70
+ return loaded;
71
+ }
72
+ const Other = loadDecorators();
73
+ const OtherStagedSchema = loadStagedSchema();
49
74
  const boundSchemaId = "cross-instance-bound";
50
75
  class Item extends Decorators.Table {
51
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cross_instance.test.js","sourceRoot":"","sources":["../../src/tests/cross_instance.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross_instance.test.js","sourceRoot":"","sources":["../../src/tests/cross_instance.test.ts"],"names":[],"mappings":"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"}