@t4h.framework/orm 0.3.0 → 0.5.0

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 (64) hide show
  1. package/.ai/skills/framework-orm/SKILL.md +339 -0
  2. package/README.md +54 -0
  3. package/dist/activities/ORMGetSnapshotActivity.d.ts +3 -3
  4. package/dist/activities/ORMGetSnapshotActivity.d.ts.map +1 -1
  5. package/dist/activities/ORMGetSnapshotActivity.js.map +1 -1
  6. package/dist/claims/ORMClaim.d.ts +1 -1
  7. package/dist/claims/ORMClaim.d.ts.map +1 -1
  8. package/dist/constraints/__tests__/create-entity-metadata.d.ts +3 -0
  9. package/dist/constraints/__tests__/create-entity-metadata.d.ts.map +1 -0
  10. package/dist/constraints/__tests__/create-entity-metadata.js +10 -0
  11. package/dist/constraints/__tests__/create-entity-metadata.js.map +1 -0
  12. package/dist/constraints/apply-default-properties.d.ts +7 -0
  13. package/dist/constraints/apply-default-properties.d.ts.map +1 -0
  14. package/dist/constraints/apply-default-properties.js +16 -0
  15. package/dist/constraints/apply-default-properties.js.map +1 -0
  16. package/dist/constraints/assert-constraints.d.ts +7 -0
  17. package/dist/constraints/assert-constraints.d.ts.map +1 -0
  18. package/dist/constraints/assert-constraints.js +13 -0
  19. package/dist/constraints/assert-constraints.js.map +1 -0
  20. package/dist/constraints/assert-non-nullable-property-constraint.d.ts +7 -0
  21. package/dist/constraints/assert-non-nullable-property-constraint.d.ts.map +1 -0
  22. package/dist/constraints/assert-non-nullable-property-constraint.js +14 -0
  23. package/dist/constraints/assert-non-nullable-property-constraint.js.map +1 -0
  24. package/dist/constraints/assert-property-type-constraint.d.ts +7 -0
  25. package/dist/constraints/assert-property-type-constraint.d.ts.map +1 -0
  26. package/dist/constraints/assert-property-type-constraint.js +30 -0
  27. package/dist/constraints/assert-property-type-constraint.js.map +1 -0
  28. package/dist/constraints/assert-unique-constraint.d.ts +11 -0
  29. package/dist/constraints/assert-unique-constraint.d.ts.map +1 -0
  30. package/dist/constraints/assert-unique-constraint.js +41 -0
  31. package/dist/constraints/assert-unique-constraint.js.map +1 -0
  32. package/dist/decorators/Index.d.ts +6 -0
  33. package/dist/decorators/Index.d.ts.map +1 -0
  34. package/dist/decorators/Index.js +10 -0
  35. package/dist/decorators/Index.js.map +1 -0
  36. package/dist/decorators/Property.d.ts +1 -0
  37. package/dist/decorators/Property.d.ts.map +1 -1
  38. package/dist/decorators/Property.js +17 -1
  39. package/dist/decorators/Property.js.map +1 -1
  40. package/dist/decorators/metadata.d.ts +5 -2
  41. package/dist/decorators/metadata.d.ts.map +1 -1
  42. package/dist/decorators/metadata.js +1 -1
  43. package/dist/decorators/metadata.js.map +1 -1
  44. package/dist/errors/ConstraintError.d.ts +4 -0
  45. package/dist/errors/ConstraintError.d.ts.map +1 -0
  46. package/dist/errors/ConstraintError.js +7 -0
  47. package/dist/errors/ConstraintError.js.map +1 -0
  48. package/dist/models/ORM.d.ts +25 -5
  49. package/dist/models/ORM.d.ts.map +1 -1
  50. package/dist/models/ORM.js +42 -7
  51. package/dist/models/ORM.js.map +1 -1
  52. package/dist/models/Ref.d.ts +1 -1
  53. package/dist/models/Ref.d.ts.map +1 -1
  54. package/dist/models/Ref.js +11 -2
  55. package/dist/models/Ref.js.map +1 -1
  56. package/dist/orm.d.ts +3 -0
  57. package/dist/orm.d.ts.map +1 -1
  58. package/dist/orm.js +3 -0
  59. package/dist/orm.js.map +1 -1
  60. package/dist/testing/index.d.ts +4 -0
  61. package/dist/testing/index.d.ts.map +1 -0
  62. package/dist/testing/index.js +52 -0
  63. package/dist/testing/index.js.map +1 -0
  64. package/package.json +6 -4
@@ -0,0 +1,41 @@
1
+ import { ConstraintError } from '../errors/ConstraintError.js';
2
+ function assertUniqueWithinBatch(rows, entity, keys) {
3
+ entity.properties.entries().forEach(([name, meta]) => {
4
+ if (keys && !keys.includes(name))
5
+ return;
6
+ if (!meta.unique)
7
+ return;
8
+ const seen = new Set();
9
+ rows.forEach(row => {
10
+ const value = row[name];
11
+ if (value === undefined || value === null)
12
+ return;
13
+ if (seen.has(value))
14
+ throw new ConstraintError(`Unique constraint violation for property "${name}" with value "${value}" (duplicate in batch)`);
15
+ seen.add(value);
16
+ });
17
+ });
18
+ }
19
+ export async function assertUniqueConstraint(rows, entity, options) {
20
+ assertUniqueWithinBatch(rows, entity, options?.keys);
21
+ await Promise.all(rows.map(async (row) => {
22
+ for (const [name, meta] of entity.properties.entries()) {
23
+ if (options?.keys && !options.keys.includes(name))
24
+ continue;
25
+ if (!meta.unique)
26
+ continue;
27
+ const value = row[name];
28
+ if (value === undefined || value === null)
29
+ continue;
30
+ if (options.isUnchanged?.(name, value))
31
+ continue;
32
+ const result = await options.validator({
33
+ [name]: value,
34
+ });
35
+ if (result === undefined || result === null)
36
+ continue;
37
+ throw new ConstraintError(`Unique constraint violation for property "${name}" with value "${value}"`);
38
+ }
39
+ }));
40
+ }
41
+ //# sourceMappingURL=assert-unique-constraint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-unique-constraint.js","sourceRoot":"","sources":["../../src/constraints/assert-unique-constraint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAU9D,SAAS,uBAAuB,CAC9B,IAAqB,EACrB,MAAsB,EACtB,IAAe;IAEf,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACnD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAM;QAExC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAM;QAExB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAgB,CAAA;QAEpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACjB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;YAEvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAM;YAEjD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBACjB,MAAM,IAAI,eAAe,CACvB,6CAA6C,IAAI,iBAAiB,KAAK,wBAAwB,CAChG,CAAA;YAEH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAqB,EACrB,MAAsB,EACtB,OAAyC;IAEzC,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAEpD,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;QACnB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAQ;YAE3D,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,SAAQ;YAE1B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;YAEvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAQ;YAEnD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;gBAAE,SAAQ;YAEhD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC;gBACrC,CAAC,IAAI,CAAC,EAAE,KAAK;aACE,CAAC,CAAA;YAElB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;gBAAE,SAAQ;YAErD,MAAM,IAAI,eAAe,CACvB,6CAA6C,IAAI,iBAAiB,KAAK,GAAG,CAC3E,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface IndexMetadata {
2
+ properties: string[];
3
+ name?: string;
4
+ }
5
+ export declare function Index(options: IndexMetadata): ClassDecorator;
6
+ //# sourceMappingURL=Index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Index.d.ts","sourceRoot":"","sources":["../../src/decorators/Index.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CAS5D"}
@@ -0,0 +1,10 @@
1
+ import { getEntityMetadata } from './metadata.js';
2
+ export function Index(options) {
3
+ return target => {
4
+ if (!options.properties.length)
5
+ throw new Error('Index properties cannot be empty');
6
+ const metadata = getEntityMetadata(target);
7
+ metadata.indexes.push(options);
8
+ };
9
+ }
10
+ //# sourceMappingURL=Index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Index.js","sourceRoot":"","sources":["../../src/decorators/Index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAOjD,MAAM,UAAU,KAAK,CAAC,OAAsB;IAC1C,OAAO,MAAM,CAAC,EAAE;QACd,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM;YAC5B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QAErD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAkC,CAAC,CAAA;QAEtE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC,CAAA;AACH,CAAC"}
@@ -1,3 +1,4 @@
1
+ import 'reflect-metadata';
1
2
  import { type PropertyMetadata } from './metadata.js';
2
3
  export type PropertyOptions = Omit<PropertyMetadata, 'name'>;
3
4
  export declare function Property(options?: PropertyOptions): PropertyDecorator;
@@ -1 +1 @@
1
- {"version":3,"file":"Property.d.ts","sourceRoot":"","sources":["../../src/decorators/Property.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAExE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;AAE5D,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,iBAAiB,CASrE"}
1
+ {"version":3,"file":"Property.d.ts","sourceRoot":"","sources":["../../src/decorators/Property.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAEzB,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAExE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;AAW5D,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAoBrE"}
@@ -1,10 +1,26 @@
1
+ import 'reflect-metadata';
1
2
  import { getEntityMetadata } from './metadata.js';
3
+ const DESIGN_TYPE = new Map([
4
+ [String, 'string'],
5
+ [Number, 'number'],
6
+ [Boolean, 'boolean'],
7
+ [Array, 'array'],
8
+ [Date, 'date'],
9
+ [Object, 'object'],
10
+ ]);
2
11
  export function Property(options) {
3
12
  return (target, propertyKey) => {
4
13
  const metadata = getEntityMetadata(target.constructor);
14
+ const resolved = { ...options };
15
+ if (!resolved.type) {
16
+ const designType = Reflect.getMetadata('design:type', target, propertyKey);
17
+ resolved.type = DESIGN_TYPE.get(designType);
18
+ }
19
+ if (resolved.index)
20
+ metadata.indexes.push({ properties: [propertyKey] });
5
21
  metadata.properties.set(propertyKey, {
6
22
  name: propertyKey,
7
- ...options,
23
+ ...resolved,
8
24
  });
9
25
  };
10
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Property.js","sourceRoot":"","sources":["../../src/decorators/Property.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyB,MAAM,eAAe,CAAA;AAIxE,MAAM,UAAU,QAAQ,CAAC,OAAyB;IAChD,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAA4B,CAAC,CAAA;QAEvE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,WAAqB,EAAE;YAC7C,IAAI,EAAE,WAAqB;YAC3B,GAAG,OAAO;SACX,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Property.js","sourceRoot":"","sources":["../../src/decorators/Property.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAEzB,OAAO,EAAE,iBAAiB,EAAyB,MAAM,eAAe,CAAA;AAIxE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAkB;IAC3C,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,OAAO,EAAE,SAAS,CAAC;IACpB,CAAC,KAAK,EAAE,OAAO,CAAC;IAChB,CAAC,IAAI,EAAE,MAAM,CAAC;IACd,CAAC,MAAM,EAAE,QAAQ,CAAC;CACnB,CAAC,CAAA;AAEF,MAAM,UAAU,QAAQ,CAAC,OAAyB;IAChD,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAA4B,CAAC,CAAA;QAEvE,MAAM,QAAQ,GAAoB,EAAE,GAAG,OAAO,EAAE,CAAA;QAEhD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;YAE1E,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,QAAQ,CAAC,KAAK;YAChB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,WAAqB,CAAC,EAAE,CAAC,CAAA;QAEhE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,WAAqB,EAAE;YAC7C,IAAI,EAAE,WAAqB;YAC3B,GAAG,QAAQ;SACZ,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC"}
@@ -1,13 +1,16 @@
1
+ import type { Serializable } from '@t4h.framework/core';
2
+ import type { IndexMetadata } from './Index.js';
1
3
  export interface EntityMetadata {
2
4
  tableName?: string;
3
5
  properties: Map<string, PropertyMetadata>;
6
+ indexes: Array<IndexMetadata>;
4
7
  }
5
8
  export interface PropertyMetadata {
6
9
  name: string;
7
10
  type?: string;
8
11
  nullable?: boolean;
9
- unique?: boolean;
10
- default?: unknown;
12
+ default?: Serializable;
13
+ index?: boolean;
11
14
  }
12
15
  export declare function getEntityMetadata(target: new (...args: any[]) => any): EntityMetadata;
13
16
  export declare function getEntityTableName(target: new (...args: any[]) => any): string;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/decorators/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAID,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAClC,cAAc,CAShB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAClC,MAAM,CAIR;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAClC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAE/B"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/decorators/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACzC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAID,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAClC,cAAc,CAShB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAClC,MAAM,CAIR;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAClC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAE/B"}
@@ -2,7 +2,7 @@ const entityMetadataMap = new WeakMap();
2
2
  export function getEntityMetadata(target) {
3
3
  let metadata = entityMetadataMap.get(target.prototype);
4
4
  if (!metadata) {
5
- metadata = { properties: new Map() };
5
+ metadata = { properties: new Map(), indexes: [] };
6
6
  entityMetadataMap.set(target.prototype, metadata);
7
7
  }
8
8
  return metadata;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/decorators/metadata.ts"],"names":[],"mappings":"AAaA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAA0B,CAAA;AAE/D,MAAM,UAAU,iBAAiB,CAC/B,MAAmC;IAEnC,IAAI,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAEtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAE,CAAA;QACpC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAmC;IAEnC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAE1C,OAAO,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAmC;IAEnC,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,UAAU,CAAA;AAC7C,CAAC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/decorators/metadata.ts"],"names":[],"mappings":"AAkBA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAA0B,CAAA;AAE/D,MAAM,UAAU,iBAAiB,CAC/B,MAAmC;IAEnC,IAAI,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAEtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QACjD,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAmC;IAEnC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAE1C,OAAO,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAmC;IAEnC,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,UAAU,CAAA;AAC7C,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare class ConstraintError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ //# sourceMappingURL=ConstraintError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConstraintError.d.ts","sourceRoot":"","sources":["../../src/errors/ConstraintError.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAInC"}
@@ -0,0 +1,7 @@
1
+ export class ConstraintError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = 'ConstraintError';
5
+ }
6
+ }
7
+ //# sourceMappingURL=ConstraintError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConstraintError.js","sourceRoot":"","sources":["../../src/errors/ConstraintError.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IAC/B,CAAC;CACF"}
@@ -1,11 +1,12 @@
1
- import { SerializableClass } from '@t4h.framework/core';
1
+ import { SerializableClass, type PromiseLikeType } from '@t4h.framework/core';
2
2
  import { Ref } from './Ref.js';
3
3
  import { RefCollection } from './RefCollection.js';
4
+ import { type EntityMetadata } from '../decorators/metadata.js';
4
5
  import type { FindWhere } from '../typings/FindWhere.js';
5
6
  import type { EntityConstructor, EntityData, EntityInsertData } from '../typings/ORM.js';
6
7
  export interface ORMConfig {
7
8
  connectionString: string;
8
- entities: EntityConstructor[];
9
+ entities: EntityMetadata[];
9
10
  }
10
11
  export interface FindOneOptions<T> {
11
12
  where: FindWhere<T>;
@@ -19,9 +20,28 @@ export interface FindOptions<T> extends FindOneOptions<T> {
19
20
  }
20
21
  export declare class ORM extends SerializableClass {
21
22
  readonly config: ORMConfig;
22
- toSerializable(): string;
23
- protected fromSerializable(connectionString: string): void;
24
- constructor(config: ORMConfig);
23
+ toSerializable(): {
24
+ connectionString: string;
25
+ entities: {
26
+ tableName: string | undefined;
27
+ indexes: {
28
+ properties: string[];
29
+ name: string | undefined;
30
+ }[];
31
+ properties: {
32
+ name: string;
33
+ type: string | undefined;
34
+ nullable: boolean | undefined;
35
+ default: import("@t4h.framework/core").Serializable;
36
+ index: boolean | undefined;
37
+ }[];
38
+ }[];
39
+ };
40
+ protected fromSerializable(serializable: PromiseLikeType<ReturnType<this['toSerializable']>>): void;
41
+ constructor(config: {
42
+ connectionString: string;
43
+ entities: EntityConstructor[];
44
+ });
25
45
  create<T>(entity: EntityConstructor<T>, data: EntityInsertData<T>): Promise<Ref<T>>;
26
46
  create<T>(entity: EntityConstructor<T>, data: EntityInsertData<T>[]): Promise<RefCollection<T>>;
27
47
  findOne<T>(entity: EntityConstructor<T>, options: FindOneOptions<T>): Promise<Ref<T> | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"ORM.d.ts","sourceRoot":"","sources":["../../src/models/ORM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAKlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAGjB,MAAM,mBAAmB,CAAA;AAM1B,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACnB,OAAO,CAAC,EAAE;SAAG,CAAC,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM;KAAE,CAAA;CAC1D;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,GAAI,SAAQ,iBAAiB;aASZ,MAAM,EAAE,SAAS;IARtC,cAAc;IAIrB,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;gBAI9B,MAAM,EAAE,SAAS;IAIhC,MAAM,CAAC,CAAC,EACnB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEL,MAAM,CAAC,CAAC,EACnB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAoBf,OAAO,CAAC,CAAC,EACpB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAaZ,IAAI,CAAC,CAAC,EACjB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAaf,MAAM,CAAC,CAAC,EACnB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,OAAO,CAAC;CAGpB"}
1
+ {"version":3,"file":"ORM.d.ts","sourceRoot":"","sources":["../../src/models/ORM.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAMlD,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAGjB,MAAM,mBAAmB,CAAA;AAM1B,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,cAAc,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACnB,OAAO,CAAC,EAAE;SAAG,CAAC,IAAI,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM;KAAE,CAAA;CAC1D;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,GAAI,SAAQ,iBAAiB;IACxC,SAAgB,MAAM,EAAG,SAAS,CAAA;IAE3B,cAAc;;;;;;;;;;;;;;;;;IAsBrB,SAAS,CAAC,gBAAgB,CACxB,YAAY,EAAE,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAChE,IAAI;gBAeK,MAAM,EAAE;QAClB,gBAAgB,EAAE,MAAM,CAAA;QACxB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;KAC9B;IAaY,MAAM,CAAC,CAAC,EACnB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEL,MAAM,CAAC,CAAC,EACnB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IA0Bf,OAAO,CAAC,CAAC,EACpB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAaZ,IAAI,CAAC,CAAC,EACjB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAaf,MAAM,CAAC,CAAC,EACnB,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,OAAO,CAAC;CAGpB"}
@@ -1,28 +1,63 @@
1
- import { History, SerializableClass } from '@t4h.framework/core';
1
+ import { History, SerializableClass, } from '@t4h.framework/core';
2
2
  import { Ref } from './Ref.js';
3
3
  import { RefCollection } from './RefCollection.js';
4
4
  import { ORMCreateActivity } from '../activities/ORMCreateActivity.js';
5
5
  import { ORMFindActivity } from '../activities/ORMFindActivity.js';
6
6
  import { ORMFindOneActivity } from '../activities/ORMFindOneActivity.js';
7
- import { getEntityTableName } from '../decorators/metadata.js';
7
+ import { applyDefaultProperties } from '../constraints/apply-default-properties.js';
8
+ import { assertConstraints } from '../constraints/assert-constraints.js';
9
+ import { getEntityMetadata, getEntityTableName, } from '../decorators/metadata.js';
8
10
  const create = History.bind(ORMCreateActivity);
9
11
  const find = History.bind(ORMFindActivity);
10
12
  const findOne = History.bind(ORMFindOneActivity);
11
13
  export class ORM extends SerializableClass {
12
14
  config;
13
15
  toSerializable() {
14
- return this.config.connectionString;
16
+ return {
17
+ connectionString: this.config.connectionString,
18
+ entities: this.config.entities.map(entity => ({
19
+ tableName: entity.tableName,
20
+ indexes: entity.indexes.map(index => ({
21
+ properties: index.properties,
22
+ name: index.name,
23
+ })),
24
+ properties: Array.from(entity.properties.entries()).map(([name, property]) => ({
25
+ name,
26
+ type: property.type,
27
+ nullable: property.nullable,
28
+ default: property.default,
29
+ index: property.index,
30
+ })),
31
+ })),
32
+ };
15
33
  }
16
- fromSerializable(connectionString) {
17
- Object.assign(this, { config: { connectionString } });
34
+ fromSerializable(serializable) {
35
+ Object.assign(this, {
36
+ config: {
37
+ connectionString: serializable.connectionString,
38
+ entities: serializable.entities.map(entity => ({
39
+ tableName: entity.tableName,
40
+ indexes: entity.indexes,
41
+ properties: new Map(entity.properties.map(property => [property.name, property])),
42
+ })),
43
+ },
44
+ });
18
45
  }
19
46
  constructor(config) {
20
47
  super();
21
- this.config = config;
48
+ if (!config)
49
+ return;
50
+ Object.assign(this, {
51
+ config: {
52
+ connectionString: config.connectionString,
53
+ entities: config.entities.map(entity => getEntityMetadata(entity)),
54
+ },
55
+ });
22
56
  }
23
57
  async create(entity, data) {
24
58
  const isBatch = Array.isArray(data);
25
- const rows = isBatch ? data : [data];
59
+ const rows = applyDefaultProperties(isBatch ? data : [data], getEntityMetadata(entity));
60
+ await assertConstraints(entity, rows);
26
61
  const result = await create({
27
62
  orm: this,
28
63
  table: getEntityTableName(entity),
@@ -1 +1 @@
1
- {"version":3,"file":"ORM.js","sourceRoot":"","sources":["../../src/models/ORM.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ORM.js","sourceRoot":"","sources":["../../src/models/ORM.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export declare class Ref<T> {
5
5
  private readonly entity;
6
6
  private readonly ref;
7
7
  constructor(orm: ORM, entity: EntityConstructor<T>, ref: SerializableRowRef);
8
- getSnapshot(): Promise<T>;
8
+ getSnapshot(): Promise<T | null>;
9
9
  update(data: EntityPartialData<T>): Promise<void>;
10
10
  remove(): Promise<void>;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Ref.d.ts","sourceRoot":"","sources":["../../src/models/Ref.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAKnC,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,mBAAmB,CAAA;AAM1B,qBAAa,GAAG,CAAC,CAAC;IAEd,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAFH,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,GAAG,EAAE,kBAAkB;IAG7B,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC;IAczB,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAOrC"}
1
+ {"version":3,"file":"Ref.d.ts","sourceRoot":"","sources":["../../src/models/Ref.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAUnC,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,mBAAmB,CAAA;AAM1B,qBAAa,GAAG,CAAC,CAAC;IAEd,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAFH,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,GAAG,EAAE,kBAAkB;IAG7B,WAAW,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAgBhC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBjD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAOrC"}
@@ -2,7 +2,9 @@ import { History } from '@t4h.framework/core';
2
2
  import { ORMGetSnapshotActivity } from '../activities/ORMGetSnapshotActivity.js';
3
3
  import { ORMRemoveActivity } from '../activities/ORMRemoveActivity.js';
4
4
  import { ORMUpdateActivity } from '../activities/ORMUpdateActivity.js';
5
- import { getEntityTableName } from '../decorators/metadata.js';
5
+ import { applyDefaultProperties } from '../constraints/apply-default-properties.js';
6
+ import { assertConstraints } from '../constraints/assert-constraints.js';
7
+ import { getEntityMetadata, getEntityTableName, } from '../decorators/metadata.js';
6
8
  const getSnapshotOp = History.bind(ORMGetSnapshotActivity);
7
9
  const update = History.bind(ORMUpdateActivity);
8
10
  const remove = History.bind(ORMRemoveActivity);
@@ -21,16 +23,23 @@ export class Ref {
21
23
  table: getEntityTableName(this.entity),
22
24
  ref: this.ref,
23
25
  });
26
+ if (result === null)
27
+ return null;
24
28
  const entity = Reflect.construct(this.entity, []);
25
29
  Object.assign(entity, result);
26
30
  return entity;
27
31
  }
28
32
  async update(data) {
33
+ const keys = Object.keys(data);
34
+ const row = applyDefaultProperties(data, getEntityMetadata(this.entity), keys);
35
+ await assertConstraints(this.entity, [row], {
36
+ keys,
37
+ });
29
38
  await update({
30
39
  orm: this.orm,
31
40
  table: getEntityTableName(this.entity),
32
41
  ref: this.ref,
33
- data: data,
42
+ data: row,
34
43
  });
35
44
  }
36
45
  async remove() {
@@ -1 +1 @@
1
- {"version":3,"file":"Ref.js","sourceRoot":"","sources":["../../src/models/Ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAG7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAQ9D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAE9C,MAAM,OAAO,GAAG;IAEK;IACA;IACA;IAHnB,YACmB,GAAQ,EACR,MAA4B,EAC5B,GAAuB;QAFvB,QAAG,GAAH,GAAG,CAAK;QACR,WAAM,GAAN,MAAM,CAAsB;QAC5B,QAAG,GAAH,GAAG,CAAoB;IACvC,CAAC;IAEG,KAAK,CAAC,WAAW;QACtB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAW,CAAA;QAE3D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAE7B,OAAO,MAAW,CAAA;IACpB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,IAA0B;QAC5C,MAAM,MAAM,CAAC;YACX,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAqB;SAC5B,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,MAAM,CAAC;YACX,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAA;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"Ref.js","sourceRoot":"","sources":["../../src/models/Ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAG7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAA;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AACxE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,2BAA2B,CAAA;AAQlC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAE9C,MAAM,OAAO,GAAG;IAEK;IACA;IACA;IAHnB,YACmB,GAAQ,EACR,MAA4B,EAC5B,GAAuB;QAFvB,QAAG,GAAH,GAAG,CAAK;QACR,WAAM,GAAN,MAAM,CAAsB;QAC5B,QAAG,GAAH,GAAG,CAAoB;IACvC,CAAC;IAEG,KAAK,CAAC,WAAW;QACtB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAA;QAEF,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAEhC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAW,CAAA;QAE3D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAE7B,OAAO,MAAW,CAAA;IACpB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,IAA0B;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE9B,MAAM,GAAG,GAAG,sBAAsB,CAChC,IAAqB,EACrB,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAC9B,IAAI,CACY,CAAA;QAElB,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE;YAC1C,IAAI;SACL,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC;YACX,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,GAAG;SACV,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,MAAM,CAAC;YACX,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAA;IACJ,CAAC;CACF"}
package/dist/orm.d.ts CHANGED
@@ -1,11 +1,14 @@
1
1
  export * from './claims/ORMClaim.js';
2
+ export * from './errors/ConstraintError.js';
2
3
  export * from './decorators/Entity.js';
4
+ export * from './decorators/Index.js';
3
5
  export * from './decorators/Property.js';
4
6
  export * from './decorators/metadata.js';
5
7
  export * from './models/ORM.js';
6
8
  export * from './models/Ref.js';
7
9
  export * from './models/RefCollection.js';
8
10
  export * from './activities/ORMCreateActivity.js';
11
+ export * from './activities/ORMFindOneActivity.js';
9
12
  export * from './activities/ORMRemoveActivity.js';
10
13
  export * from './activities/ORMFindActivity.js';
11
14
  export * from './activities/ORMGetSnapshotActivity.js';
package/dist/orm.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"orm.d.ts","sourceRoot":"","sources":["../src/orm.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AAEpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AAExC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AAEzC,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,mCAAmC,CAAA;AAEjD,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"orm.d.ts","sourceRoot":"","sources":["../src/orm.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AAEpC,cAAc,6BAA6B,CAAA;AAE3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AAExC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AAEzC,cAAc,mCAAmC,CAAA;AACjD,cAAc,oCAAoC,CAAA;AAClD,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,mCAAmC,CAAA;AAEjD,cAAc,kBAAkB,CAAA"}
package/dist/orm.js CHANGED
@@ -1,11 +1,14 @@
1
1
  export * from './claims/ORMClaim.js';
2
+ export * from './errors/ConstraintError.js';
2
3
  export * from './decorators/Entity.js';
4
+ export * from './decorators/Index.js';
3
5
  export * from './decorators/Property.js';
4
6
  export * from './decorators/metadata.js';
5
7
  export * from './models/ORM.js';
6
8
  export * from './models/Ref.js';
7
9
  export * from './models/RefCollection.js';
8
10
  export * from './activities/ORMCreateActivity.js';
11
+ export * from './activities/ORMFindOneActivity.js';
9
12
  export * from './activities/ORMRemoveActivity.js';
10
13
  export * from './activities/ORMFindActivity.js';
11
14
  export * from './activities/ORMGetSnapshotActivity.js';
package/dist/orm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"orm.js","sourceRoot":"","sources":["../src/orm.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AAEpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AAExC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AAEzC,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,mCAAmC,CAAA;AAEjD,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"orm.js","sourceRoot":"","sources":["../src/orm.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AAEpC,cAAc,6BAA6B,CAAA;AAE3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AAExC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AAEzC,cAAc,mCAAmC,CAAA;AACjD,cAAc,oCAAoC,CAAA;AAClD,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,mCAAmC,CAAA;AAEjD,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { ClaimProvider } from '@t4h.framework/core';
2
+ import { ORMClaim } from '../claims/ORMClaim.js';
3
+ export declare function createInMemoryORMClaim(): ClaimProvider<ORMClaim<string>>;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGxD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAUhD,wBAAgB,sBAAsB,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CA2DxE"}
@@ -0,0 +1,52 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mockClaim } from '@t4h.framework/core/testing';
3
+ import { ORMClaim } from '../claims/ORMClaim.js';
4
+ export function createInMemoryORMClaim() {
5
+ const tables = new Map();
6
+ const table = (name) => {
7
+ let rows = tables.get(name);
8
+ if (!rows) {
9
+ rows = new Map();
10
+ tables.set(name, rows);
11
+ }
12
+ return rows;
13
+ };
14
+ const claim = {
15
+ find(input) {
16
+ const rows = [...table(input.table).values()];
17
+ return rows
18
+ .filter(row => matchesWhere(row, input.where))
19
+ .slice(input.offset ?? 0, input.limit ? (input.offset ?? 0) + input.limit : undefined)
20
+ .map(row => row.id);
21
+ },
22
+ create(input) {
23
+ const rows = table(input.table);
24
+ return input.data.map(row => {
25
+ const id = String(row.id ?? randomUUID());
26
+ const snapshot = { ...row, id };
27
+ rows.set(id, snapshot);
28
+ return id;
29
+ });
30
+ },
31
+ getSnapshot(input) {
32
+ return table(input.table).get(input.ref) ?? null;
33
+ },
34
+ update(input) {
35
+ const rows = table(input.table);
36
+ const current = rows.get(input.ref);
37
+ if (!current)
38
+ return;
39
+ rows.set(input.ref, { ...current, ...input.data });
40
+ },
41
+ remove(input) {
42
+ table(input.table).delete(input.ref);
43
+ },
44
+ };
45
+ return mockClaim(ORMClaim, claim);
46
+ }
47
+ function matchesWhere(row, where) {
48
+ if (!where)
49
+ return true;
50
+ return Object.entries(where).every(([key, expected]) => row[key] === expected);
51
+ }
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t4h.framework/orm",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "ORM module for the T4H Framework",
5
5
  "homepage": "https://github.com/tech4humans-brasil/framework/tree/main/packages/orm",
6
6
  "bugs": "https://github.com/tech4humans-brasil/framework/issues",
@@ -20,7 +20,8 @@
20
20
  "types": "./dist/orm.d.ts",
21
21
  "files": [
22
22
  "dist",
23
- "LICENSE"
23
+ "LICENSE",
24
+ ".ai"
24
25
  ],
25
26
  "scripts": {
26
27
  "build": "tsc --project tsconfig.build.json",
@@ -31,14 +32,15 @@
31
32
  "test:watch": "vitest"
32
33
  },
33
34
  "dependencies": {
34
- "@t4h.framework/core": "^0.3.0"
35
+ "reflect-metadata": "^0.2.2"
35
36
  },
36
37
  "devDependencies": {
38
+ "@t4h.framework/core": "^0.8.0",
37
39
  "typescript": "^5.9.3",
38
40
  "vitest": "^4.0.18"
39
41
  },
40
42
  "peerDependencies": {
41
- "@t4h.framework/core": "^0.3.0"
43
+ "@t4h.framework/core": "^0.8.0"
42
44
  },
43
45
  "packageManager": "yarn@4.12.0",
44
46
  "engines": {