@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.
- package/.ai/skills/framework-orm/SKILL.md +339 -0
- package/README.md +54 -0
- package/dist/activities/ORMGetSnapshotActivity.d.ts +3 -3
- package/dist/activities/ORMGetSnapshotActivity.d.ts.map +1 -1
- package/dist/activities/ORMGetSnapshotActivity.js.map +1 -1
- package/dist/claims/ORMClaim.d.ts +1 -1
- package/dist/claims/ORMClaim.d.ts.map +1 -1
- package/dist/constraints/__tests__/create-entity-metadata.d.ts +3 -0
- package/dist/constraints/__tests__/create-entity-metadata.d.ts.map +1 -0
- package/dist/constraints/__tests__/create-entity-metadata.js +10 -0
- package/dist/constraints/__tests__/create-entity-metadata.js.map +1 -0
- package/dist/constraints/apply-default-properties.d.ts +7 -0
- package/dist/constraints/apply-default-properties.d.ts.map +1 -0
- package/dist/constraints/apply-default-properties.js +16 -0
- package/dist/constraints/apply-default-properties.js.map +1 -0
- package/dist/constraints/assert-constraints.d.ts +7 -0
- package/dist/constraints/assert-constraints.d.ts.map +1 -0
- package/dist/constraints/assert-constraints.js +13 -0
- package/dist/constraints/assert-constraints.js.map +1 -0
- package/dist/constraints/assert-non-nullable-property-constraint.d.ts +7 -0
- package/dist/constraints/assert-non-nullable-property-constraint.d.ts.map +1 -0
- package/dist/constraints/assert-non-nullable-property-constraint.js +14 -0
- package/dist/constraints/assert-non-nullable-property-constraint.js.map +1 -0
- package/dist/constraints/assert-property-type-constraint.d.ts +7 -0
- package/dist/constraints/assert-property-type-constraint.d.ts.map +1 -0
- package/dist/constraints/assert-property-type-constraint.js +30 -0
- package/dist/constraints/assert-property-type-constraint.js.map +1 -0
- package/dist/constraints/assert-unique-constraint.d.ts +11 -0
- package/dist/constraints/assert-unique-constraint.d.ts.map +1 -0
- package/dist/constraints/assert-unique-constraint.js +41 -0
- package/dist/constraints/assert-unique-constraint.js.map +1 -0
- package/dist/decorators/Index.d.ts +6 -0
- package/dist/decorators/Index.d.ts.map +1 -0
- package/dist/decorators/Index.js +10 -0
- package/dist/decorators/Index.js.map +1 -0
- package/dist/decorators/Property.d.ts +1 -0
- package/dist/decorators/Property.d.ts.map +1 -1
- package/dist/decorators/Property.js +17 -1
- package/dist/decorators/Property.js.map +1 -1
- package/dist/decorators/metadata.d.ts +5 -2
- package/dist/decorators/metadata.d.ts.map +1 -1
- package/dist/decorators/metadata.js +1 -1
- package/dist/decorators/metadata.js.map +1 -1
- package/dist/errors/ConstraintError.d.ts +4 -0
- package/dist/errors/ConstraintError.d.ts.map +1 -0
- package/dist/errors/ConstraintError.js +7 -0
- package/dist/errors/ConstraintError.js.map +1 -0
- package/dist/models/ORM.d.ts +25 -5
- package/dist/models/ORM.d.ts.map +1 -1
- package/dist/models/ORM.js +42 -7
- package/dist/models/ORM.js.map +1 -1
- package/dist/models/Ref.d.ts +1 -1
- package/dist/models/Ref.d.ts.map +1 -1
- package/dist/models/Ref.js +11 -2
- package/dist/models/Ref.js.map +1 -1
- package/dist/orm.d.ts +3 -0
- package/dist/orm.d.ts.map +1 -1
- package/dist/orm.js +3 -0
- package/dist/orm.js.map +1 -1
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +52 -0
- package/dist/testing/index.js.map +1 -0
- 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 @@
|
|
|
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 +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;
|
|
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
|
-
...
|
|
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,
|
|
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
|
-
|
|
10
|
-
|
|
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;
|
|
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":"
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/models/ORM.d.ts
CHANGED
|
@@ -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:
|
|
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():
|
|
23
|
-
|
|
24
|
-
|
|
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>;
|
package/dist/models/ORM.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ORM.d.ts","sourceRoot":"","sources":["../../src/models/ORM.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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"}
|
package/dist/models/ORM.js
CHANGED
|
@@ -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 {
|
|
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
|
|
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(
|
|
17
|
-
Object.assign(this, {
|
|
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
|
-
|
|
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),
|
package/dist/models/ORM.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ORM.js","sourceRoot":"","sources":["../../src/models/ORM.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ORM.js","sourceRoot":"","sources":["../../src/models/ORM.ts"],"names":[],"mappings":"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"}
|
package/dist/models/Ref.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/models/Ref.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/models/Ref.js
CHANGED
|
@@ -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 {
|
|
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:
|
|
42
|
+
data: row,
|
|
34
43
|
});
|
|
35
44
|
}
|
|
36
45
|
async remove() {
|
package/dist/models/Ref.js.map
CHANGED
|
@@ -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,
|
|
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 @@
|
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAUhD,MAAM,UAAU,sBAAsB;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsC,CAAA;IAE5D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAE3B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,GAAG,EAAE,CAAA;YAChB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,MAAM,KAAK,GAA8B;QACvC,IAAI,CAAC,KAA4B;YAC/B,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;YAE7C,OAAO,IAAI;iBACR,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC7C,KAAK,CACJ,KAAK,CAAC,MAAM,IAAI,CAAC,EACjB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC5D;iBACA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAY,CAAC,CAAA;QACjC,CAAC;QAED,MAAM,CAAC,KAA8B;YACnC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAE/B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC,CAAA;gBACzC,MAAM,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAmB,CAAA;gBAEhD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;gBAEtB,OAAO,EAAE,CAAA;YACX,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,WAAW,CAAC,KAA2C;YACrD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;QAClD,CAAC;QAED,MAAM,CAAC,KAAsC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEnC,IAAI,CAAC,OAAO;gBAAE,OAAM;YAEpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACpD,CAAC;QAED,MAAM,CAAC,KAAsC;YAC3C,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtC,CAAC;KACF,CAAA;IAED,OAAO,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAoC,CAAA;AACtE,CAAC;AAED,SAAS,YAAY,CACnB,GAAkB,EAClB,KAAqC;IAErC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAA;AAChF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@t4h.framework/orm",
|
|
3
|
-
"version": "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
|
-
"
|
|
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.
|
|
43
|
+
"@t4h.framework/core": "^0.8.0"
|
|
42
44
|
},
|
|
43
45
|
"packageManager": "yarn@4.12.0",
|
|
44
46
|
"engines": {
|