@t4h.framework/orm 0.0.0-experimental-c0d4325

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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/activities/ORMCreateActivity.d.ts +13 -0
  4. package/dist/activities/ORMCreateActivity.d.ts.map +1 -0
  5. package/dist/activities/ORMCreateActivity.js +16 -0
  6. package/dist/activities/ORMCreateActivity.js.map +1 -0
  7. package/dist/activities/ORMFindActivity.d.ts +13 -0
  8. package/dist/activities/ORMFindActivity.d.ts.map +1 -0
  9. package/dist/activities/ORMFindActivity.js +18 -0
  10. package/dist/activities/ORMFindActivity.js.map +1 -0
  11. package/dist/activities/ORMFindOneActivity.d.ts +15 -0
  12. package/dist/activities/ORMFindOneActivity.d.ts.map +1 -0
  13. package/dist/activities/ORMFindOneActivity.js +26 -0
  14. package/dist/activities/ORMFindOneActivity.js.map +1 -0
  15. package/dist/activities/ORMGetSnapshotActivity.d.ts +13 -0
  16. package/dist/activities/ORMGetSnapshotActivity.d.ts.map +1 -0
  17. package/dist/activities/ORMGetSnapshotActivity.js +18 -0
  18. package/dist/activities/ORMGetSnapshotActivity.js.map +1 -0
  19. package/dist/activities/ORMRemoveActivity.d.ts +13 -0
  20. package/dist/activities/ORMRemoveActivity.d.ts.map +1 -0
  21. package/dist/activities/ORMRemoveActivity.js +16 -0
  22. package/dist/activities/ORMRemoveActivity.js.map +1 -0
  23. package/dist/activities/ORMUpdateActivity.d.ts +13 -0
  24. package/dist/activities/ORMUpdateActivity.d.ts.map +1 -0
  25. package/dist/activities/ORMUpdateActivity.js +16 -0
  26. package/dist/activities/ORMUpdateActivity.js.map +1 -0
  27. package/dist/claims/ORMClaim.d.ts +9 -0
  28. package/dist/claims/ORMClaim.d.ts.map +1 -0
  29. package/dist/claims/ORMClaim.js +3 -0
  30. package/dist/claims/ORMClaim.js.map +1 -0
  31. package/dist/decorators/Entity.d.ts +5 -0
  32. package/dist/decorators/Entity.d.ts.map +1 -0
  33. package/dist/decorators/Entity.js +8 -0
  34. package/dist/decorators/Entity.js.map +1 -0
  35. package/dist/decorators/Property.d.ts +4 -0
  36. package/dist/decorators/Property.d.ts.map +1 -0
  37. package/dist/decorators/Property.js +11 -0
  38. package/dist/decorators/Property.js.map +1 -0
  39. package/dist/decorators/metadata.d.ts +15 -0
  40. package/dist/decorators/metadata.d.ts.map +1 -0
  41. package/dist/decorators/metadata.js +17 -0
  42. package/dist/decorators/metadata.js.map +1 -0
  43. package/dist/models/ORM.d.ts +31 -0
  44. package/dist/models/ORM.d.ts.map +1 -0
  45. package/dist/models/ORM.js +61 -0
  46. package/dist/models/ORM.js.map +1 -0
  47. package/dist/models/Ref.d.ts +12 -0
  48. package/dist/models/Ref.d.ts.map +1 -0
  49. package/dist/models/Ref.js +44 -0
  50. package/dist/models/Ref.js.map +1 -0
  51. package/dist/models/RefCollection.d.ts +15 -0
  52. package/dist/models/RefCollection.d.ts.map +1 -0
  53. package/dist/models/RefCollection.js +29 -0
  54. package/dist/models/RefCollection.js.map +1 -0
  55. package/dist/orm.d.ts +14 -0
  56. package/dist/orm.d.ts.map +1 -0
  57. package/dist/orm.js +14 -0
  58. package/dist/orm.js.map +1 -0
  59. package/dist/typings/FindWhere.d.ts +37 -0
  60. package/dist/typings/FindWhere.d.ts.map +1 -0
  61. package/dist/typings/FindWhere.js +2 -0
  62. package/dist/typings/FindWhere.js.map +1 -0
  63. package/dist/typings/ORM.d.ts +48 -0
  64. package/dist/typings/ORM.d.ts.map +1 -0
  65. package/dist/typings/ORM.js +2 -0
  66. package/dist/typings/ORM.js.map +1 -0
  67. package/package.json +48 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Tech four humans
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,174 @@
1
+ # @t4h.framework/orm
2
+
3
+ ORM activities, claim, and models for database operations within workflows.
4
+
5
+ ## Claim
6
+
7
+ ### ORMClaim
8
+
9
+ Abstract dependency for database operations. The runtime must provide a concrete implementation (e.g. PostgreSQL, SQLite).
10
+
11
+ ```typescript
12
+ import { ORMClaim } from '@t4h.framework/orm'
13
+ ```
14
+
15
+ ### Interface
16
+
17
+ ```typescript
18
+ abstract class ORMClaim<R extends SerializableRowRef> {
19
+ public abstract find(input: SerializableFindInput): R[] | Promise<R[]>
20
+ public abstract create(input: SerializableCreateInput): R[] | Promise<R[]>
21
+ public abstract getSnapshot(input: SerializableGetSnapshotInput<R>): SerializedRow | Promise<SerializedRow>
22
+ public abstract update(input: SerializableUpdateInput<R>): void | Promise<void>
23
+ public abstract remove(input: SerializableRemoveInput<R>): void | Promise<void>
24
+ }
25
+ ```
26
+
27
+ ## Defining Entities
28
+
29
+ Use the `@Entity` and `@Property` decorators to define database entities:
30
+
31
+ ```typescript
32
+ import { Entity, Property } from '@t4h.framework/orm'
33
+
34
+ @Entity({ tableName: 'users' })
35
+ class User {
36
+ @Property({ type: 'uuid' })
37
+ public id!: string
38
+
39
+ @Property({ type: 'string' })
40
+ public name!: string
41
+
42
+ @Property({ type: 'string', unique: true })
43
+ public email!: string
44
+
45
+ @Property({ type: 'boolean', default: true })
46
+ public active!: boolean
47
+ }
48
+ ```
49
+
50
+ ### @Entity options
51
+
52
+ ```typescript
53
+ @Entity({ tableName?: string })
54
+ ```
55
+
56
+ ### @Property options
57
+
58
+ ```typescript
59
+ @Property({
60
+ type?: string,
61
+ nullable?: boolean,
62
+ unique?: boolean,
63
+ default?: any,
64
+ })
65
+ ```
66
+
67
+ ## ORM Model
68
+
69
+ The `ORM` class provides a high-level API for database operations. It wraps the underlying activities (`ORMCreateActivity`, `ORMFindActivity`, `ORMFindOneActivity`).
70
+
71
+ ### Creating records
72
+
73
+ ```typescript
74
+ import { ORM } from '@t4h.framework/orm'
75
+
76
+ const orm = new ORM({
77
+ connectionString: 'postgresql://localhost:5432/mydb',
78
+ entities: [User],
79
+ })
80
+
81
+ const userRef = await orm.create(User, {
82
+ name: 'John',
83
+ email: 'john@example.com',
84
+ active: true,
85
+ })
86
+ ```
87
+
88
+ ### Batch create
89
+
90
+ ```typescript
91
+ const usersRef = await orm.create(User, [
92
+ { name: 'Alice', email: 'alice@example.com', active: true },
93
+ { name: 'Bob', email: 'bob@example.com', active: true },
94
+ ])
95
+ ```
96
+
97
+ ### Finding records
98
+
99
+ ```typescript
100
+ const userRef = await orm.findOne(User, {
101
+ where: { email: 'john@example.com' },
102
+ })
103
+
104
+ const usersRef = await orm.find(User, {
105
+ where: { active: true },
106
+ orderBy: { name: 'asc' },
107
+ limit: 10,
108
+ offset: 0,
109
+ })
110
+ ```
111
+
112
+ ### Checking existence
113
+
114
+ ```typescript
115
+ const exists = await orm.exists(User, {
116
+ where: { email: 'john@example.com' },
117
+ })
118
+ ```
119
+
120
+ ## Ref
121
+
122
+ A `Ref<T>` is a reference to a single entity row. It supports `getSnapshot`, `update`, and `remove`:
123
+
124
+ ```typescript
125
+ const userRef = await orm.findOne(User, { where: { id: '...' } })
126
+
127
+ const user = await userRef.getSnapshot() // returns the full entity
128
+ await userRef.update({ name: 'Jane' }) // partial update
129
+ await userRef.remove() // delete
130
+ ```
131
+
132
+ ## RefCollection
133
+
134
+ A `RefCollection<T>` is a collection of entity references returned by `find` or batch `create`:
135
+
136
+ ```typescript
137
+ const usersRef = await orm.find(User, { where: { active: true } })
138
+
139
+ const users = usersRef.toArray() // Ref<User>[]
140
+ usersRef.forEach(ref => { /* ... */ })
141
+ usersRef.map(ref => ref.getSnapshot())
142
+ usersRef.filter(ref => { /* ... */ })
143
+ usersRef.at(0) // Ref<User> | undefined
144
+ ```
145
+
146
+ ## Query Operators
147
+
148
+ The `where` clause supports the following operators:
149
+
150
+ ```typescript
151
+ await orm.find(User, {
152
+ where: {
153
+ name: 'John', // $eq (implicit)
154
+ active: { $ne: false }, // not equal
155
+ email: { $like: '%@example%' }, // LIKE
156
+ age: { $gte: 18, $lt: 65 }, // range
157
+ },
158
+ })
159
+ ```
160
+
161
+ Available operators: `$eq`, `$ne`, `$in`, `$nin`, `$not`, `$gt`, `$gte`, `$lt`, `$lte`, `$like`, `$ilike`, `$and`, `$or`.
162
+
163
+ ## Activities
164
+
165
+ The package includes the following activities (used internally by `ORM` and `Ref`):
166
+
167
+ - `ORMCreateActivity` -- creates one or more rows
168
+ - `ORMFindActivity` -- finds multiple rows
169
+ - `ORMFindOneActivity` -- finds a single row
170
+ - `ORMGetSnapshotActivity` -- retrieves full entity data from a ref
171
+ - `ORMUpdateActivity` -- updates a row
172
+ - `ORMRemoveActivity` -- removes a row
173
+
174
+ All activities extend `SyncActivity` and use `ORMClaim` internally.
@@ -0,0 +1,13 @@
1
+ import { SyncActivity } from '@t4h.framework/core';
2
+ import type { SerializableCreateInput, SerializableRowRef } from '../typings/ORM.js';
3
+ declare const CLAIMS_KEY: unique symbol;
4
+ export declare class ORMCreateActivity extends SyncActivity<[
5
+ input: SerializableCreateInput
6
+ ], SerializableCreateInput, SerializableRowRef[], SerializableRowRef[]> {
7
+ private readonly [CLAIMS_KEY];
8
+ toInput(input: SerializableCreateInput): SerializableCreateInput;
9
+ run(input: SerializableCreateInput): import("@t4h.framework/core").Serializable[] | Promise<import("@t4h.framework/core").Serializable[]>;
10
+ toOutput(output: SerializableRowRef[]): SerializableRowRef[];
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=ORMCreateActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMCreateActivity.d.ts","sourceRoot":"","sources":["../../src/activities/ORMCreateActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,qBAAqB,CAAA;AAGzD,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,QAAA,MAAM,UAAU,eAAuC,CAAA;AAEvD,qBAAa,iBAAkB,SAAQ,YAAY,CACjD;IAAC,KAAK,EAAE,uBAAuB;CAAC,EAChC,uBAAuB,EACvB,kBAAkB,EAAE,EACpB,kBAAkB,EAAE,CACrB;IACC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAA+B;IAErD,OAAO,CAAC,KAAK,EAAE,uBAAuB,GAAG,uBAAuB;IAIhE,GAAG,CAAC,KAAK,EAAE,uBAAuB;IAIlC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE;CAGpE"}
@@ -0,0 +1,16 @@
1
+ import { SyncActivity, Claim } from '@t4h.framework/core';
2
+ import { ORMClaim } from '../claims/ORMClaim.js';
3
+ const CLAIMS_KEY = Symbol('orm-create-activity-claims');
4
+ export class ORMCreateActivity extends SyncActivity {
5
+ [CLAIMS_KEY] = new Claim({ orm: ORMClaim });
6
+ toInput(input) {
7
+ return input;
8
+ }
9
+ run(input) {
10
+ return this[CLAIMS_KEY].orm.create(input);
11
+ }
12
+ toOutput(output) {
13
+ return output;
14
+ }
15
+ }
16
+ //# sourceMappingURL=ORMCreateActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMCreateActivity.js","sourceRoot":"","sources":["../../src/activities/ORMCreateActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAMhD,MAAM,UAAU,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAA;AAEvD,MAAM,OAAO,iBAAkB,SAAQ,YAKtC;IACkB,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAA;IAErD,OAAO,CAAC,KAA8B;QAC3C,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,GAAG,CAAC,KAA8B;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3C,CAAC;IAEM,QAAQ,CAAC,MAA4B;QAC1C,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { SyncActivity } from '@t4h.framework/core';
2
+ import type { SerializableFindInput, SerializableRowRef } from '../typings/ORM.js';
3
+ declare const CLAIMS_KEY: unique symbol;
4
+ export declare class ORMFindActivity extends SyncActivity<[
5
+ input: SerializableFindInput
6
+ ], SerializableFindInput, SerializableRowRef[], SerializableRowRef[]> {
7
+ private readonly [CLAIMS_KEY];
8
+ toInput(input: SerializableFindInput): SerializableFindInput;
9
+ toOutput(output: SerializableRowRef[]): SerializableRowRef[];
10
+ run(input: SerializableFindInput): import("@t4h.framework/core").Serializable[] | Promise<import("@t4h.framework/core").Serializable[]>;
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=ORMFindActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMFindActivity.d.ts","sourceRoot":"","sources":["../../src/activities/ORMFindActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,qBAAqB,CAAA;AAGzD,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,QAAA,MAAM,UAAU,eAAqC,CAAA;AAErD,qBAAa,eAAgB,SAAQ,YAAY,CAC/C;IAAC,KAAK,EAAE,qBAAqB;CAAC,EAC9B,qBAAqB,EACrB,kBAAkB,EAAE,EACpB,kBAAkB,EAAE,CACrB;IACC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAE3B;IAEK,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB;IAI5D,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,EAAE;IAI5D,GAAG,CAAC,KAAK,EAAE,qBAAqB;CAGxC"}
@@ -0,0 +1,18 @@
1
+ import { SyncActivity, Claim } from '@t4h.framework/core';
2
+ import { ORMClaim } from '../claims/ORMClaim.js';
3
+ const CLAIMS_KEY = Symbol('orm-find-activity-claims');
4
+ export class ORMFindActivity extends SyncActivity {
5
+ [CLAIMS_KEY] = new Claim({
6
+ orm: ORMClaim,
7
+ });
8
+ toInput(input) {
9
+ return input;
10
+ }
11
+ toOutput(output) {
12
+ return output;
13
+ }
14
+ run(input) {
15
+ return this[CLAIMS_KEY].orm.find(input);
16
+ }
17
+ }
18
+ //# sourceMappingURL=ORMFindActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMFindActivity.js","sourceRoot":"","sources":["../../src/activities/ORMFindActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAMhD,MAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAA;AAErD,MAAM,OAAO,eAAgB,SAAQ,YAKpC;IACkB,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC;QACxC,GAAG,EAAE,QAAQ;KACd,CAAC,CAAA;IAEK,OAAO,CAAC,KAA4B;QACzC,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,QAAQ,CAAC,MAA4B;QAC1C,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,GAAG,CAAC,KAA4B;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { SyncActivity } from '@t4h.framework/core';
2
+ import type { SerializableFindInput, SerializableRowRef } from '../typings/ORM.js';
3
+ declare const CLAIMS_KEY: unique symbol;
4
+ export declare class ORMFindOneActivity extends SyncActivity<[
5
+ input: SerializableFindInput
6
+ ], SerializableFindInput, SerializableRowRef | null, SerializableRowRef | null> {
7
+ private readonly [CLAIMS_KEY];
8
+ toInput(input: SerializableFindInput): SerializableFindInput;
9
+ run(input: SerializableFindInput): Promise<string | number | boolean | import("@t4h.framework/core").Binary | import("@t4h.framework/core").SerializableClass | readonly import("@t4h.framework/core").Serializable[] | {
10
+ [x: string]: import("@t4h.framework/core").Serializable;
11
+ } | null>;
12
+ toOutput(output: SerializableRowRef | null): SerializableRowRef | null;
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=ORMFindOneActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMFindOneActivity.d.ts","sourceRoot":"","sources":["../../src/activities/ORMFindOneActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,qBAAqB,CAAA;AAGzD,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,QAAA,MAAM,UAAU,eAAqC,CAAA;AAErD,qBAAa,kBAAmB,SAAQ,YAAY,CAClD;IAAC,KAAK,EAAE,qBAAqB;CAAC,EAC9B,qBAAqB,EACrB,kBAAkB,GAAG,IAAI,EACzB,kBAAkB,GAAG,IAAI,CAC1B;IACC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAE3B;IAEK,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB;IAItD,GAAG,CAAC,KAAK,EAAE,qBAAqB;;;IActC,QAAQ,CACb,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAChC,kBAAkB,GAAG,IAAI;CAG7B"}
@@ -0,0 +1,26 @@
1
+ import { SyncActivity, Claim } from '@t4h.framework/core';
2
+ import { ORMClaim } from '../claims/ORMClaim.js';
3
+ const CLAIMS_KEY = Symbol('orm-find-activity-claims');
4
+ export class ORMFindOneActivity extends SyncActivity {
5
+ [CLAIMS_KEY] = new Claim({
6
+ orm: ORMClaim,
7
+ });
8
+ toInput(input) {
9
+ return input;
10
+ }
11
+ async run(input) {
12
+ const objects = await this[CLAIMS_KEY].orm.find({
13
+ ...input,
14
+ limit: 1,
15
+ offset: 0,
16
+ });
17
+ const object = objects[0];
18
+ if (typeof object === 'undefined')
19
+ return null;
20
+ return object;
21
+ }
22
+ toOutput(output) {
23
+ return output;
24
+ }
25
+ }
26
+ //# sourceMappingURL=ORMFindOneActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMFindOneActivity.js","sourceRoot":"","sources":["../../src/activities/ORMFindOneActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAMhD,MAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAA;AAErD,MAAM,OAAO,kBAAmB,SAAQ,YAKvC;IACkB,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC;QACxC,GAAG,EAAE,QAAQ;KACd,CAAC,CAAA;IAEK,OAAO,CAAC,KAA4B;QACzC,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,KAA4B;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YAC9C,GAAG,KAAK;YACR,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;SACV,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAEzB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,IAAI,CAAA;QAE9C,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,QAAQ,CACb,MAAiC;QAEjC,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { SyncActivity } from '@t4h.framework/core';
2
+ import type { SerializableGetSnapshotInput, SerializableRowRef, SerializedRow } from '../typings/ORM.js';
3
+ declare const CLAIMS_KEY: unique symbol;
4
+ export declare class ORMGetSnapshotActivity extends SyncActivity<[
5
+ input: SerializableGetSnapshotInput<SerializableRowRef>
6
+ ], SerializableGetSnapshotInput<SerializableRowRef>, SerializedRow, SerializedRow> {
7
+ private readonly [CLAIMS_KEY];
8
+ toInput(input: SerializableGetSnapshotInput<SerializableRowRef>): SerializableGetSnapshotInput<SerializableRowRef>;
9
+ run(input: SerializableGetSnapshotInput<SerializableRowRef>): SerializedRow | Promise<SerializedRow>;
10
+ toOutput(output: SerializedRow): SerializedRow;
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=ORMGetSnapshotActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMGetSnapshotActivity.d.ts","sourceRoot":"","sources":["../../src/activities/ORMGetSnapshotActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,qBAAqB,CAAA;AAGzD,OAAO,KAAK,EACV,4BAA4B,EAC5B,kBAAkB,EAClB,aAAa,EACd,MAAM,mBAAmB,CAAA;AAE1B,QAAA,MAAM,UAAU,eAA6C,CAAA;AAE7D,qBAAa,sBAAuB,SAAQ,YAAY,CACtD;IAAC,KAAK,EAAE,4BAA4B,CAAC,kBAAkB,CAAC;CAAC,EACzD,4BAA4B,CAAC,kBAAkB,CAAC,EAChD,aAAa,EACb,aAAa,CACd;IACC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAE3B;IAEK,OAAO,CACZ,KAAK,EAAE,4BAA4B,CAAC,kBAAkB,CAAC,GACtD,4BAA4B,CAAC,kBAAkB,CAAC;IAI5C,GAAG,CAAC,KAAK,EAAE,4BAA4B,CAAC,kBAAkB,CAAC;IAI3D,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;CAGtD"}
@@ -0,0 +1,18 @@
1
+ import { SyncActivity, Claim } from '@t4h.framework/core';
2
+ import { ORMClaim } from '../claims/ORMClaim.js';
3
+ const CLAIMS_KEY = Symbol('orm-get-snapshot-activity-claims');
4
+ export class ORMGetSnapshotActivity extends SyncActivity {
5
+ [CLAIMS_KEY] = new Claim({
6
+ orm: ORMClaim,
7
+ });
8
+ toInput(input) {
9
+ return input;
10
+ }
11
+ run(input) {
12
+ return this[CLAIMS_KEY].orm.getSnapshot(input);
13
+ }
14
+ toOutput(output) {
15
+ return output;
16
+ }
17
+ }
18
+ //# sourceMappingURL=ORMGetSnapshotActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMGetSnapshotActivity.js","sourceRoot":"","sources":["../../src/activities/ORMGetSnapshotActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAOhD,MAAM,UAAU,GAAG,MAAM,CAAC,kCAAkC,CAAC,CAAA;AAE7D,MAAM,OAAO,sBAAuB,SAAQ,YAK3C;IACkB,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC;QACxC,GAAG,EAAE,QAAQ;KACd,CAAC,CAAA;IAEK,OAAO,CACZ,KAAuD;QAEvD,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,GAAG,CAAC,KAAuD;QAChE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAChD,CAAC;IAEM,QAAQ,CAAC,MAAqB;QACnC,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { SyncActivity } from '@t4h.framework/core';
2
+ import type { SerializableRemoveInput, SerializableRowRef } from '../typings/ORM.js';
3
+ declare const CLAIMS_KEY: unique symbol;
4
+ export declare class ORMRemoveActivity extends SyncActivity<[
5
+ input: SerializableRemoveInput<SerializableRowRef>
6
+ ], SerializableRemoveInput<SerializableRowRef>, void, void> {
7
+ private readonly [CLAIMS_KEY];
8
+ toInput(input: SerializableRemoveInput<SerializableRowRef>): SerializableRemoveInput<SerializableRowRef>;
9
+ run(input: SerializableRemoveInput<SerializableRowRef>): Promise<void>;
10
+ toOutput(): void;
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=ORMRemoveActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMRemoveActivity.d.ts","sourceRoot":"","sources":["../../src/activities/ORMRemoveActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,qBAAqB,CAAA;AAGzD,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,QAAA,MAAM,UAAU,eAAuC,CAAA;AAEvD,qBAAa,iBAAkB,SAAQ,YAAY,CACjD;IAAC,KAAK,EAAE,uBAAuB,CAAC,kBAAkB,CAAC;CAAC,EACpD,uBAAuB,CAAC,kBAAkB,CAAC,EAC3C,IAAI,EACJ,IAAI,CACL;IACC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAE3B;IAEK,OAAO,CACZ,KAAK,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,GACjD,uBAAuB,CAAC,kBAAkB,CAAC;IAIjC,GAAG,CAAC,KAAK,EAAE,uBAAuB,CAAC,kBAAkB,CAAC;IAI5D,QAAQ,IAAI,IAAI;CACxB"}
@@ -0,0 +1,16 @@
1
+ import { SyncActivity, Claim } from '@t4h.framework/core';
2
+ import { ORMClaim } from '../claims/ORMClaim.js';
3
+ const CLAIMS_KEY = Symbol('orm-delete-activity-claims');
4
+ export class ORMRemoveActivity extends SyncActivity {
5
+ [CLAIMS_KEY] = new Claim({
6
+ orm: ORMClaim,
7
+ });
8
+ toInput(input) {
9
+ return input;
10
+ }
11
+ async run(input) {
12
+ await this[CLAIMS_KEY].orm.remove(input);
13
+ }
14
+ toOutput() { }
15
+ }
16
+ //# sourceMappingURL=ORMRemoveActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMRemoveActivity.js","sourceRoot":"","sources":["../../src/activities/ORMRemoveActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAMhD,MAAM,UAAU,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAA;AAEvD,MAAM,OAAO,iBAAkB,SAAQ,YAKtC;IACkB,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC;QACxC,GAAG,EAAE,QAAQ;KACd,CAAC,CAAA;IAEK,OAAO,CACZ,KAAkD;QAElD,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,KAAkD;QACjE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;IAEM,QAAQ,KAAU,CAAC;CAC3B"}
@@ -0,0 +1,13 @@
1
+ import { SyncActivity } from '@t4h.framework/core';
2
+ import type { SerializableUpdateInput, SerializableRowRef } from '../typings/ORM.js';
3
+ declare const CLAIMS_KEY: unique symbol;
4
+ export declare class ORMUpdateActivity extends SyncActivity<[
5
+ input: SerializableUpdateInput<SerializableRowRef>
6
+ ], SerializableUpdateInput<SerializableRowRef>, void, void> {
7
+ private readonly [CLAIMS_KEY];
8
+ toInput(input: SerializableUpdateInput<SerializableRowRef>): SerializableUpdateInput<SerializableRowRef>;
9
+ run(input: SerializableUpdateInput<SerializableRowRef>): Promise<void>;
10
+ toOutput(): void;
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=ORMUpdateActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMUpdateActivity.d.ts","sourceRoot":"","sources":["../../src/activities/ORMUpdateActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,qBAAqB,CAAA;AAGzD,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,QAAA,MAAM,UAAU,eAAuC,CAAA;AAEvD,qBAAa,iBAAkB,SAAQ,YAAY,CACjD;IAAC,KAAK,EAAE,uBAAuB,CAAC,kBAAkB,CAAC;CAAC,EACpD,uBAAuB,CAAC,kBAAkB,CAAC,EAC3C,IAAI,EACJ,IAAI,CACL;IACC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAE3B;IAEK,OAAO,CACZ,KAAK,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,GACjD,uBAAuB,CAAC,kBAAkB,CAAC;IAIjC,GAAG,CAAC,KAAK,EAAE,uBAAuB,CAAC,kBAAkB,CAAC;IAI5D,QAAQ,IAAI,IAAI;CACxB"}
@@ -0,0 +1,16 @@
1
+ import { SyncActivity, Claim } from '@t4h.framework/core';
2
+ import { ORMClaim } from '../claims/ORMClaim.js';
3
+ const CLAIMS_KEY = Symbol('orm-update-activity-claims');
4
+ export class ORMUpdateActivity extends SyncActivity {
5
+ [CLAIMS_KEY] = new Claim({
6
+ orm: ORMClaim,
7
+ });
8
+ toInput(input) {
9
+ return input;
10
+ }
11
+ async run(input) {
12
+ await this[CLAIMS_KEY].orm.update(input);
13
+ }
14
+ toOutput() { }
15
+ }
16
+ //# sourceMappingURL=ORMUpdateActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMUpdateActivity.js","sourceRoot":"","sources":["../../src/activities/ORMUpdateActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAMhD,MAAM,UAAU,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAA;AAEvD,MAAM,OAAO,iBAAkB,SAAQ,YAKtC;IACkB,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC;QACxC,GAAG,EAAE,QAAQ;KACd,CAAC,CAAA;IAEK,OAAO,CACZ,KAAkD;QAElD,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,KAAkD;QACjE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;IAEM,QAAQ,KAAU,CAAC;CAC3B"}
@@ -0,0 +1,9 @@
1
+ import type { SerializableCreateInput, SerializableFindInput, SerializableGetSnapshotInput, SerializableRemoveInput, SerializableUpdateInput, SerializableRowRef, SerializedRow } from '../typings/ORM.js';
2
+ export declare abstract class ORMClaim<R extends SerializableRowRef> {
3
+ abstract find(input: SerializableFindInput): R[] | Promise<R[]>;
4
+ abstract create(input: SerializableCreateInput): R[] | Promise<R[]>;
5
+ abstract getSnapshot(input: SerializableGetSnapshotInput<R>): SerializedRow | Promise<SerializedRow>;
6
+ abstract update(input: SerializableUpdateInput<R>): void | Promise<void>;
7
+ abstract remove(input: SerializableRemoveInput<R>): void | Promise<void>;
8
+ }
9
+ //# sourceMappingURL=ORMClaim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMClaim.d.ts","sourceRoot":"","sources":["../../src/claims/ORMClaim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACd,MAAM,mBAAmB,CAAA;AAE1B,8BAAsB,QAAQ,CAAC,CAAC,SAAS,kBAAkB;aACzC,IAAI,CAAC,KAAK,EAAE,qBAAqB,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;aAEtD,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;aAE1D,WAAW,CACzB,KAAK,EAAE,4BAA4B,CAAC,CAAC,CAAC,GACrC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;aAEzB,MAAM,CACpB,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAChC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;aAEP,MAAM,CACpB,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAChC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CACxB"}
@@ -0,0 +1,3 @@
1
+ export class ORMClaim {
2
+ }
3
+ //# sourceMappingURL=ORMClaim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORMClaim.js","sourceRoot":"","sources":["../../src/claims/ORMClaim.ts"],"names":[],"mappings":"AAUA,MAAM,OAAgB,QAAQ;CAgB7B"}
@@ -0,0 +1,5 @@
1
+ export interface EntityOptions {
2
+ tableName?: string;
3
+ }
4
+ export declare function Entity(options?: EntityOptions): ClassDecorator;
5
+ //# sourceMappingURL=Entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../src/decorators/Entity.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAM9D"}
@@ -0,0 +1,8 @@
1
+ import { getEntityMetadata } from './metadata.js';
2
+ export function Entity(options) {
3
+ return target => {
4
+ const metadata = getEntityMetadata(target);
5
+ metadata.tableName = options?.tableName;
6
+ };
7
+ }
8
+ //# sourceMappingURL=Entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../../src/decorators/Entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAMjD,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,OAAO,MAAM,CAAC,EAAE;QACd,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAkC,CAAC,CAAA;QAEtE,QAAQ,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,CAAA;IACzC,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type PropertyMetadata } from './metadata.js';
2
+ export type PropertyOptions = Omit<PropertyMetadata, 'name'>;
3
+ export declare function Property(options?: PropertyOptions): PropertyDecorator;
4
+ //# sourceMappingURL=Property.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,11 @@
1
+ import { getEntityMetadata } from './metadata.js';
2
+ export function Property(options) {
3
+ return (target, propertyKey) => {
4
+ const metadata = getEntityMetadata(target.constructor);
5
+ metadata.properties.set(propertyKey, {
6
+ name: propertyKey,
7
+ ...options,
8
+ });
9
+ };
10
+ }
11
+ //# sourceMappingURL=Property.js.map
@@ -0,0 +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"}
@@ -0,0 +1,15 @@
1
+ export interface EntityMetadata {
2
+ tableName?: string;
3
+ properties: Map<string, PropertyMetadata>;
4
+ }
5
+ export interface PropertyMetadata {
6
+ name: string;
7
+ type?: string;
8
+ nullable?: boolean;
9
+ unique?: boolean;
10
+ default?: unknown;
11
+ }
12
+ export declare function getEntityMetadata(target: new (...args: any[]) => any): EntityMetadata;
13
+ export declare function getEntityTableName(target: new (...args: any[]) => any): string;
14
+ export declare function getEntityProperties(target: new (...args: any[]) => any): Map<string, PropertyMetadata>;
15
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,17 @@
1
+ const entityMetadataMap = new WeakMap();
2
+ export function getEntityMetadata(target) {
3
+ let metadata = entityMetadataMap.get(target.prototype);
4
+ if (!metadata) {
5
+ metadata = { properties: new Map() };
6
+ entityMetadataMap.set(target.prototype, metadata);
7
+ }
8
+ return metadata;
9
+ }
10
+ export function getEntityTableName(target) {
11
+ const metadata = getEntityMetadata(target);
12
+ return metadata.tableName ?? target.name;
13
+ }
14
+ export function getEntityProperties(target) {
15
+ return getEntityMetadata(target).properties;
16
+ }
17
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +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"}
@@ -0,0 +1,31 @@
1
+ import { SerializableClass } from '@t4h.framework/core';
2
+ import { Ref } from './Ref.js';
3
+ import { RefCollection } from './RefCollection.js';
4
+ import type { FindWhere } from '../typings/FindWhere.js';
5
+ import type { EntityConstructor, EntityData, EntityInsertData } from '../typings/ORM.js';
6
+ export interface ORMConfig {
7
+ connectionString: string;
8
+ entities: EntityConstructor[];
9
+ }
10
+ export interface FindOneOptions<T> {
11
+ where: FindWhere<T>;
12
+ orderBy?: {
13
+ [K in keyof EntityData<T>]?: 'asc' | 'desc';
14
+ };
15
+ }
16
+ export interface FindOptions<T> extends FindOneOptions<T> {
17
+ limit?: number;
18
+ offset?: number;
19
+ }
20
+ export declare class ORM extends SerializableClass {
21
+ readonly config: ORMConfig;
22
+ toSerializable(): string;
23
+ protected fromSerializable(connectionString: string): void;
24
+ constructor(config: ORMConfig);
25
+ create<T>(entity: EntityConstructor<T>, data: EntityInsertData<T>): Promise<Ref<T>>;
26
+ create<T>(entity: EntityConstructor<T>, data: EntityInsertData<T>[]): Promise<RefCollection<T>>;
27
+ findOne<T>(entity: EntityConstructor<T>, options: FindOneOptions<T>): Promise<Ref<T> | null>;
28
+ find<T>(entity: EntityConstructor<T>, options?: FindOptions<T>): Promise<RefCollection<T>>;
29
+ exists<T>(entity: EntityConstructor<T>, options: FindOneOptions<T>): Promise<boolean>;
30
+ }
31
+ //# sourceMappingURL=ORM.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,61 @@
1
+ import { History, SerializableClass } from '@t4h.framework/core';
2
+ import { Ref } from './Ref.js';
3
+ import { RefCollection } from './RefCollection.js';
4
+ import { ORMCreateActivity } from '../activities/ORMCreateActivity.js';
5
+ import { ORMFindActivity } from '../activities/ORMFindActivity.js';
6
+ import { ORMFindOneActivity } from '../activities/ORMFindOneActivity.js';
7
+ import { getEntityTableName } from '../decorators/metadata.js';
8
+ const create = History.bind(ORMCreateActivity);
9
+ const find = History.bind(ORMFindActivity);
10
+ const findOne = History.bind(ORMFindOneActivity);
11
+ export class ORM extends SerializableClass {
12
+ config;
13
+ toSerializable() {
14
+ return this.config.connectionString;
15
+ }
16
+ fromSerializable(connectionString) {
17
+ Object.assign(this, { config: { connectionString } });
18
+ }
19
+ constructor(config) {
20
+ super();
21
+ this.config = config;
22
+ }
23
+ async create(entity, data) {
24
+ const isBatch = Array.isArray(data);
25
+ const rows = isBatch ? data : [data];
26
+ const result = await create({
27
+ orm: this,
28
+ table: getEntityTableName(entity),
29
+ data: rows,
30
+ });
31
+ if (isBatch)
32
+ return new RefCollection(this, entity, result);
33
+ return new Ref(this, entity, result[0]);
34
+ }
35
+ async findOne(entity, options) {
36
+ const ref = await findOne({
37
+ orm: this,
38
+ table: getEntityTableName(entity),
39
+ where: options?.where,
40
+ orderBy: options?.orderBy,
41
+ });
42
+ if (!ref)
43
+ return null;
44
+ return new Ref(this, entity, ref);
45
+ }
46
+ async find(entity, options) {
47
+ const refs = await find({
48
+ orm: this,
49
+ table: getEntityTableName(entity),
50
+ where: options?.where,
51
+ orderBy: options?.orderBy,
52
+ limit: options?.limit,
53
+ offset: options?.offset,
54
+ });
55
+ return new RefCollection(this, entity, refs);
56
+ }
57
+ async exists(entity, options) {
58
+ return (await this.findOne(entity, options)) !== null;
59
+ }
60
+ }
61
+ //# sourceMappingURL=ORM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORM.js","sourceRoot":"","sources":["../../src/models/ORM.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ORM } from './ORM.js';
2
+ import type { EntityConstructor, EntityPartialData, SerializableRowRef } from '../typings/ORM.js';
3
+ export declare class Ref<T> {
4
+ private readonly orm;
5
+ private readonly entity;
6
+ private readonly ref;
7
+ constructor(orm: ORM, entity: EntityConstructor<T>, ref: SerializableRowRef);
8
+ getSnapshot(): Promise<T>;
9
+ update(data: EntityPartialData<T>): Promise<void>;
10
+ remove(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=Ref.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,44 @@
1
+ import { History } from '@t4h.framework/core';
2
+ import { ORMGetSnapshotActivity } from '../activities/ORMGetSnapshotActivity.js';
3
+ import { ORMRemoveActivity } from '../activities/ORMRemoveActivity.js';
4
+ import { ORMUpdateActivity } from '../activities/ORMUpdateActivity.js';
5
+ import { getEntityTableName } from '../decorators/metadata.js';
6
+ const getSnapshotOp = History.bind(ORMGetSnapshotActivity);
7
+ const update = History.bind(ORMUpdateActivity);
8
+ const remove = History.bind(ORMRemoveActivity);
9
+ export class Ref {
10
+ orm;
11
+ entity;
12
+ ref;
13
+ constructor(orm, entity, ref) {
14
+ this.orm = orm;
15
+ this.entity = entity;
16
+ this.ref = ref;
17
+ }
18
+ async getSnapshot() {
19
+ const result = await getSnapshotOp({
20
+ orm: this.orm,
21
+ table: getEntityTableName(this.entity),
22
+ ref: this.ref,
23
+ });
24
+ const entity = Reflect.construct(this.entity, []);
25
+ Object.assign(entity, result);
26
+ return entity;
27
+ }
28
+ async update(data) {
29
+ await update({
30
+ orm: this.orm,
31
+ table: getEntityTableName(this.entity),
32
+ ref: this.ref,
33
+ data: data,
34
+ });
35
+ }
36
+ async remove() {
37
+ await remove({
38
+ orm: this.orm,
39
+ table: getEntityTableName(this.entity),
40
+ ref: this.ref,
41
+ });
42
+ }
43
+ }
44
+ //# sourceMappingURL=Ref.js.map
@@ -0,0 +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"}
@@ -0,0 +1,15 @@
1
+ import type { ORM } from './ORM.js';
2
+ import { Ref } from './Ref.js';
3
+ import type { EntityConstructor, SerializableRowRef } from '../typings/ORM.js';
4
+ export declare class RefCollection<T> {
5
+ private readonly refs;
6
+ constructor(orm: ORM, entity: EntityConstructor<T>, refs: SerializableRowRef[]);
7
+ toArray(): Ref<T>[];
8
+ get length(): number;
9
+ at(index: number): Ref<T> | undefined;
10
+ map<U>(fn: (ref: Ref<T>, index: number) => U | Promise<U>): Promise<U[]>;
11
+ forEach(fn: (ref: Ref<T>, index: number) => void | Promise<void>): Promise<void>;
12
+ filter(fn: (ref: Ref<T>, index: number) => boolean | Promise<boolean>): Promise<Ref<T>[]>;
13
+ [Symbol.iterator](): Iterator<Ref<T>>;
14
+ }
15
+ //# sourceMappingURL=RefCollection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RefCollection.d.ts","sourceRoot":"","sources":["../../src/models/RefCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE9E,qBAAa,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;gBAG7B,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC5B,IAAI,EAAE,kBAAkB,EAAE;IAKrB,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;IAI1B,IAAW,MAAM,IAAI,MAAM,CAE1B;IAEM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;IAI/B,GAAG,CAAC,CAAC,EAChB,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACjD,OAAO,CAAC,CAAC,EAAE,CAAC;IAIF,OAAO,CAClB,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC;IAIH,MAAM,CACjB,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAC7D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAIb,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAG7C"}
@@ -0,0 +1,29 @@
1
+ import { Ref } from './Ref.js';
2
+ export class RefCollection {
3
+ refs;
4
+ constructor(orm, entity, refs) {
5
+ this.refs = refs.map(ref => new Ref(orm, entity, ref));
6
+ }
7
+ toArray() {
8
+ return this.refs.slice();
9
+ }
10
+ get length() {
11
+ return this.refs.length;
12
+ }
13
+ at(index) {
14
+ return this.refs[index];
15
+ }
16
+ async map(fn) {
17
+ return Promise.all(this.refs.map(fn));
18
+ }
19
+ async forEach(fn) {
20
+ await Promise.all(this.refs.map(fn));
21
+ }
22
+ async filter(fn) {
23
+ return Promise.all(this.refs.filter(fn));
24
+ }
25
+ [Symbol.iterator]() {
26
+ return this.refs[Symbol.iterator]();
27
+ }
28
+ }
29
+ //# sourceMappingURL=RefCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RefCollection.js","sourceRoot":"","sources":["../../src/models/RefCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG9B,MAAM,OAAO,aAAa;IACP,IAAI,CAAU;IAE/B,YACE,GAAQ,EACR,MAA4B,EAC5B,IAA0B;QAE1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;IACxD,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAEM,EAAE,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAEM,KAAK,CAAC,GAAG,CACd,EAAkD;QAElD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACvC,CAAC;IAEM,KAAK,CAAC,OAAO,CAClB,EAAwD;QAExD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IAEM,KAAK,CAAC,MAAM,CACjB,EAA8D;QAE9D,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1C,CAAC;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IACrC,CAAC;CACF"}
package/dist/orm.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export * from './claims/ORMClaim.js';
2
+ export * from './decorators/Entity.js';
3
+ export * from './decorators/Property.js';
4
+ export * from './decorators/metadata.js';
5
+ export * from './models/ORM.js';
6
+ export * from './models/Ref.js';
7
+ export * from './models/RefCollection.js';
8
+ export * from './activities/ORMCreateActivity.js';
9
+ export * from './activities/ORMRemoveActivity.js';
10
+ export * from './activities/ORMFindActivity.js';
11
+ export * from './activities/ORMGetSnapshotActivity.js';
12
+ export * from './activities/ORMUpdateActivity.js';
13
+ export * from './typings/ORM.js';
14
+ //# sourceMappingURL=orm.d.ts.map
@@ -0,0 +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"}
package/dist/orm.js ADDED
@@ -0,0 +1,14 @@
1
+ export * from './claims/ORMClaim.js';
2
+ export * from './decorators/Entity.js';
3
+ export * from './decorators/Property.js';
4
+ export * from './decorators/metadata.js';
5
+ export * from './models/ORM.js';
6
+ export * from './models/Ref.js';
7
+ export * from './models/RefCollection.js';
8
+ export * from './activities/ORMCreateActivity.js';
9
+ export * from './activities/ORMRemoveActivity.js';
10
+ export * from './activities/ORMFindActivity.js';
11
+ export * from './activities/ORMGetSnapshotActivity.js';
12
+ export * from './activities/ORMUpdateActivity.js';
13
+ export * from './typings/ORM.js';
14
+ //# sourceMappingURL=orm.js.map
@@ -0,0 +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"}
@@ -0,0 +1,37 @@
1
+ export type Scalar = boolean | number | string | bigint | symbol | Date | RegExp | Uint8Array | {
2
+ toHexString(): string;
3
+ };
4
+ export type ExpandScalar<T> = null | (T extends string ? T | RegExp : T extends Date ? Date | string : T extends bigint ? bigint | string | number : T);
5
+ export type OperatorMap<T> = {
6
+ $and?: ExpandQuery<T>[];
7
+ $or?: ExpandQuery<T>[];
8
+ $eq?: ExpandScalar<T> | readonly ExpandScalar<T>[];
9
+ $ne?: ExpandScalar<T>;
10
+ $in?: readonly ExpandScalar<T>[];
11
+ $nin?: readonly ExpandScalar<T>[];
12
+ $not?: ExpandQuery<T>;
13
+ $gt?: ExpandScalar<T>;
14
+ $gte?: ExpandScalar<T>;
15
+ $lt?: ExpandScalar<T>;
16
+ $lte?: ExpandScalar<T>;
17
+ $like?: string;
18
+ $ilike?: string;
19
+ };
20
+ export type FilterItemValue<T> = T | ExpandScalar<T>;
21
+ export type FilterValue<T> = OperatorMap<FilterItemValue<T>> | FilterItemValue<T> | FilterItemValue<T>[] | null;
22
+ export type ExpandQuery<T> = T extends object ? T extends Scalar ? never : FilterQuery<T> : FilterValue<T>;
23
+ export type CleanKeys<T, K extends keyof T, B extends boolean = false> = T[K] & {} extends Function ? never : K extends symbol ? never : B extends true ? T[K] & {} extends Scalar ? never : K : K;
24
+ export type EntityKey<T = unknown, B extends boolean = false> = string & {
25
+ [K in keyof T]-?: CleanKeys<T, K, B> extends never ? never : K;
26
+ }[keyof T];
27
+ export type EntityProps<T> = {
28
+ -readonly [K in EntityKey<T>]?: T[K];
29
+ };
30
+ export type FilterQuery<T> = ObjectQuery<T> | NonNullable<EntityProps<T> & OperatorMap<T>> | FilterQuery<T>[];
31
+ export type ObjectQuery<T> = OperatorMap<T> & FilterObject<T>;
32
+ export type FilterObject<T> = {
33
+ -readonly [K in EntityKey<T>]?: ExpandQuery<ExpandProperty<T[K]>> | FilterValue<ExpandProperty<T[K]>> | null;
34
+ };
35
+ export type ExpandProperty<T> = NonNullable<T>;
36
+ export type FindWhere<T> = FilterQuery<T>;
37
+ //# sourceMappingURL=FindWhere.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FindWhere.d.ts","sourceRoot":"","sources":["../../src/typings/FindWhere.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FindWhere.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FindWhere.js","sourceRoot":"","sources":["../../src/typings/FindWhere.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import type { Serializable } from '@t4h.framework/core';
2
+ import type { ORM } from '../models/ORM.js';
3
+ export type EntityConstructor<T = any> = new () => T;
4
+ type Fn = (...args: any[]) => any;
5
+ export type RequiredEntityData<T> = {
6
+ [K in keyof T as T[K] extends Fn ? never : T[K] extends null ? never : K]: T[K];
7
+ };
8
+ export type EntityData<T> = {
9
+ [K in keyof T as T[K] extends Fn ? never : K]: T[K];
10
+ };
11
+ export type EntityInsertData<T> = {
12
+ [K in keyof T as T[K] extends Fn ? never : K]: T[K];
13
+ };
14
+ export type EntityPartialData<T> = Partial<EntityData<T>>;
15
+ export type SerializedRow = Record<string, Serializable>;
16
+ export type SerializableRowRef = Serializable;
17
+ export type SerializableWhere = Record<string, Serializable>;
18
+ export type SerializableFindInput = {
19
+ orm: ORM;
20
+ table: string;
21
+ where: SerializableWhere;
22
+ orderBy?: Record<string, 'asc' | 'desc'>;
23
+ limit?: number;
24
+ offset?: number;
25
+ };
26
+ export type SerializableCreateInput = {
27
+ orm: ORM;
28
+ table: string;
29
+ data: SerializedRow[];
30
+ };
31
+ export type SerializableGetSnapshotInput<R extends SerializableRowRef> = {
32
+ orm: ORM;
33
+ table: string;
34
+ ref: R;
35
+ };
36
+ export type SerializableUpdateInput<R extends SerializableRowRef> = {
37
+ orm: ORM;
38
+ table: string;
39
+ ref: R;
40
+ data: SerializedRow;
41
+ };
42
+ export type SerializableRemoveInput<R extends SerializableRowRef> = {
43
+ orm: ORM;
44
+ table: string;
45
+ ref: R;
46
+ };
47
+ export {};
48
+ //# sourceMappingURL=ORM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORM.d.ts","sourceRoot":"","sources":["../../src/typings/ORM.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,CAAA;AAEpD,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;AAEjC,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;KACjC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAC5B,KAAK,GACL,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACf,KAAK,GACL,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACf,CAAA;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACpD,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;KAC/B,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACpD,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAExD,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAE7C,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAE5D,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,iBAAiB,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,aAAa,EAAE,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,kBAAkB,IAAI;IACvE,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,CAAC,CAAA;CACP,CAAA;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,kBAAkB,IAAI;IAClE,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,CAAC,CAAA;IACN,IAAI,EAAE,aAAa,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,kBAAkB,IAAI;IAClE,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,CAAC,CAAA;CACP,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ORM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ORM.js","sourceRoot":"","sources":["../../src/typings/ORM.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@t4h.framework/orm",
3
+ "version": "0.0.0-experimental-c0d4325",
4
+ "description": "ORM module for the T4H Framework",
5
+ "homepage": "https://github.com/tech4humans-brasil/framework/tree/main/packages/orm",
6
+ "bugs": "https://github.com/tech4humans-brasil/framework/issues",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/tech4humans-brasil/framework.git",
10
+ "directory": "packages/orm"
11
+ },
12
+ "license": "MIT",
13
+ "author": "Tech4Humans <contact@tech4h.com.br> (https://tech4h.com.br)",
14
+ "type": "module",
15
+ "exports": {
16
+ "types": "./dist/orm.d.ts",
17
+ "import": "./dist/orm.js"
18
+ },
19
+ "module": "./dist/orm.js",
20
+ "types": "./dist/orm.d.ts",
21
+ "files": [
22
+ "dist",
23
+ "LICENSE"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsc --project tsconfig.build.json",
27
+ "check-types": "tsc --noEmit",
28
+ "lint": "eslint .",
29
+ "prepublishOnly": "yarn build",
30
+ "test": "vitest run",
31
+ "test:watch": "vitest"
32
+ },
33
+ "dependencies": {
34
+ "@t4h.framework/core": "workspace:^"
35
+ },
36
+ "devDependencies": {
37
+ "typescript": "^5.9.3",
38
+ "vitest": "^4.0.18"
39
+ },
40
+ "peerDependencies": {
41
+ "@t4h.framework/core": "workspace:^"
42
+ },
43
+ "packageManager": "yarn@4.12.0",
44
+ "engines": {
45
+ "node": ">=22"
46
+ },
47
+ "stableVersion": "0.0.0"
48
+ }