@antelopejs/interface-database-decorators 0.1.5 → 0.1.7

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 (54) hide show
  1. package/README.md +0 -2
  2. package/dist/antelope.test.js +4 -3
  3. package/dist/antelope.test.js.map +1 -1
  4. package/dist/common.d.ts +2 -1
  5. package/dist/common.js +5 -1
  6. package/dist/common.js.map +1 -1
  7. package/dist/database.js +12 -8
  8. package/dist/database.js.map +1 -1
  9. package/dist/model.d.ts +2 -2
  10. package/dist/model.js +10 -10
  11. package/dist/model.js.map +1 -1
  12. package/dist/modifiers/autodate.js.map +1 -1
  13. package/dist/modifiers/common.js.map +1 -1
  14. package/dist/modifiers/encryption.js +1 -1
  15. package/dist/modifiers/encryption.js.map +1 -1
  16. package/dist/modifiers/hash.js +1 -1
  17. package/dist/modifiers/hash.js.map +1 -1
  18. package/dist/modifiers/localization.js.map +1 -1
  19. package/dist/relation.js.map +1 -1
  20. package/dist/schema.js.map +1 -1
  21. package/dist/table.d.ts +21 -5
  22. package/dist/table.js +8 -8
  23. package/dist/table.js.map +1 -1
  24. package/dist/tests/common.test.js +1 -1
  25. package/dist/tests/common.test.js.map +1 -1
  26. package/dist/tests/database.test.js +80 -2
  27. package/dist/tests/database.test.js.map +1 -1
  28. package/dist/tests/integration.test.js +4 -4
  29. package/dist/tests/integration.test.js.map +1 -1
  30. package/dist/tests/model.test.js +4 -4
  31. package/dist/tests/model.test.js.map +1 -1
  32. package/dist/tests/modifiers/autodate.test.js +3 -3
  33. package/dist/tests/modifiers/autodate.test.js.map +1 -1
  34. package/dist/tests/modifiers/common.test.js +2 -2
  35. package/dist/tests/modifiers/common.test.js.map +1 -1
  36. package/dist/tests/modifiers/encryption.test.js +2 -2
  37. package/dist/tests/modifiers/encryption.test.js.map +1 -1
  38. package/dist/tests/modifiers/hash.test.js +2 -2
  39. package/dist/tests/modifiers/hash.test.js.map +1 -1
  40. package/dist/tests/modifiers/localization.test.js +2 -2
  41. package/dist/tests/modifiers/localization.test.js.map +1 -1
  42. package/dist/tests/relation.test.js +2 -2
  43. package/dist/tests/relation.test.js.map +1 -1
  44. package/dist/tests/schema.test.js +2 -2
  45. package/dist/tests/schema.test.js.map +1 -1
  46. package/dist/tests/table.test.js +11 -11
  47. package/dist/tests/table.test.js.map +1 -1
  48. package/docs/1.introduction.md +22 -0
  49. package/docs/2.table-definitions.md +311 -0
  50. package/docs/3.table-modifiers.md +403 -0
  51. package/docs/4.data-models.md +183 -0
  52. package/docs/5.parameter-decoration.md +166 -0
  53. package/package.json +73 -59
  54. package/skills/database-decorators-interface/SKILL.md +143 -0
@@ -1 +1 @@
1
- {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../src/tests/schema.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../src/tests/schema.test.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const common_1 = require("@antelopejs/interface-database-decorators/common");
13
- const common_2 = require("@antelopejs/interface-database-decorators/modifiers/common");
14
- const table_1 = require("@antelopejs/interface-database-decorators/table");
15
12
  const chai_1 = require("chai");
13
+ const common_1 = require("@antelopejs/interface-database-decorators/modifiers/common");
14
+ const table_1 = require("@antelopejs/interface-database-decorators/table");
15
+ const common_2 = require("@antelopejs/interface-database-decorators/common");
16
16
  const codec_helpers_1 = require("./codec_helpers");
17
17
  describe("Table - decorators", () => {
18
18
  it("creates table with default primary key", async () => CreateTableWithDefaultPrimaryKeyTest());
@@ -29,7 +29,7 @@ async function CreateTableWithDefaultPrimaryKeyTest() {
29
29
  (0, table_1.Index)(),
30
30
  __metadata("design:type", String)
31
31
  ], TestTable.prototype, "name", void 0);
32
- const metadata = (0, common_1.getMetadata)(TestTable, common_1.DatumStaticMetadata);
32
+ const metadata = (0, common_2.getMetadata)(TestTable, common_2.DatumStaticMetadata);
33
33
  (0, chai_1.expect)(metadata.primary).to.equal("_id");
34
34
  (0, chai_1.expect)(metadata.indexes.name).to.deep.equal(["name"]);
35
35
  }
@@ -46,7 +46,7 @@ async function CreateTableWithMultipleIndexesTest() {
46
46
  (0, table_1.Index)(),
47
47
  __metadata("design:type", Number)
48
48
  ], TestTable.prototype, "age", void 0);
49
- const metadata = (0, common_1.getMetadata)(TestTable, common_1.DatumStaticMetadata);
49
+ const metadata = (0, common_2.getMetadata)(TestTable, common_2.DatumStaticMetadata);
50
50
  (0, chai_1.expect)(metadata.primary).to.equal("_id");
51
51
  (0, chai_1.expect)(metadata.indexes.email).to.deep.equal(["email"]);
52
52
  (0, chai_1.expect)(metadata.indexes.age).to.deep.equal(["age"]);
@@ -69,7 +69,7 @@ async function CreateTableWithGroupedIndexesTest() {
69
69
  (0, table_1.Index)({ group: "age_range" }),
70
70
  __metadata("design:type", Number)
71
71
  ], TestTable.prototype, "age", void 0);
72
- const metadata = (0, common_1.getMetadata)(TestTable, common_1.DatumStaticMetadata);
72
+ const metadata = (0, common_2.getMetadata)(TestTable, common_2.DatumStaticMetadata);
73
73
  (0, chai_1.expect)(metadata.primary).to.equal("_id");
74
74
  (0, chai_1.expect)(metadata.indexes.user_search).to.deep.equal(["name", "email"]);
75
75
  (0, chai_1.expect)(metadata.indexes.age_range).to.deep.equal(["age"]);
@@ -85,7 +85,7 @@ async function CreateTableWithFixtureDataTest() {
85
85
  TestTable = __decorate([
86
86
  (0, table_1.Fixture)(() => testData)
87
87
  ], TestTable);
88
- const metadata = (0, common_1.getMetadata)(TestTable, common_1.DatumStaticMetadata);
88
+ const metadata = (0, common_2.getMetadata)(TestTable, common_2.DatumStaticMetadata);
89
89
  (0, chai_1.expect)(metadata.generator).to.be.a("function");
90
90
  (0, chai_1.expect)(metadata.primary).to.equal("_id");
91
91
  }
@@ -101,7 +101,7 @@ function StoresStringTokenFieldTest() {
101
101
  (0, table_1.Field)("string"),
102
102
  __metadata("design:type", String)
103
103
  ], _T.prototype, "name", void 0);
104
- const metadata = (0, common_1.getMetadata)(_T, common_1.DatumStaticMetadata);
104
+ const metadata = (0, common_2.getMetadata)(_T, common_2.DatumStaticMetadata);
105
105
  (0, chai_1.expect)(metadata.fields.name).to.equal("string");
106
106
  }
107
107
  function StoresCodecFieldTest() {
@@ -111,7 +111,7 @@ function StoresCodecFieldTest() {
111
111
  (0, table_1.Field)((0, codec_helpers_1.asFieldType)(codec_helpers_1.stringCodec)),
112
112
  __metadata("design:type", String)
113
113
  ], _T.prototype, "name", void 0);
114
- const metadata = (0, common_1.getMetadata)(_T, common_1.DatumStaticMetadata);
114
+ const metadata = (0, common_2.getMetadata)(_T, common_2.DatumStaticMetadata);
115
115
  (0, chai_1.expect)(metadata.fields.name).to.equal(codec_helpers_1.stringCodec);
116
116
  }
117
117
  function StacksWithIndexTest() {
@@ -122,7 +122,7 @@ function StacksWithIndexTest() {
122
122
  (0, table_1.Field)("string"),
123
123
  __metadata("design:type", String)
124
124
  ], _T.prototype, "email", void 0);
125
- const metadata = (0, common_1.getMetadata)(_T, common_1.DatumStaticMetadata);
125
+ const metadata = (0, common_2.getMetadata)(_T, common_2.DatumStaticMetadata);
126
126
  (0, chai_1.expect)(metadata.fields.email).to.equal("string");
127
127
  (0, chai_1.expect)(metadata.indexes.email).to.deep.equal(["email"]);
128
128
  }
@@ -131,7 +131,7 @@ async function CombineTableWithMixinsTest() {
131
131
  testMethodUnunvailable() {
132
132
  return "This method should be undefined";
133
133
  }
134
- [common_2.MixinSymbol] = class {
134
+ [common_1.MixinSymbol] = class {
135
135
  testMethod() {
136
136
  return "mixin method ok";
137
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"table.test.js","sourceRoot":"","sources":["../../src/tests/table.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.test.js","sourceRoot":"","sources":["../../src/tests/table.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ # Interface Database Decorators
2
+
3
+ ## Overview
4
+
5
+ The Interface Database Decorators package provides a structured, decorator-based framework for defining database tables, applying field-level modifiers (encryption, hashing, localization), building data models with CRUD operations, and injecting models into API controllers. It builds on top of the `@antelopejs/interface-database` package and integrates with the `@antelopejs/interface-api` package for controller parameter injection.
6
+
7
+ ## Dependencies
8
+
9
+ This package depends on the following:
10
+
11
+ - [**@antelopejs/interface-database**](https://github.com/AntelopeJS/interface-database) - The underlying database query interface (AQL)
12
+ - [**@antelopejs/interface-api**](https://github.com/AntelopeJS/interface-api) - API controller integration for parameter decoration
13
+ - [**@antelopejs/interface-core**](https://github.com/AntelopeJS/interface-core) - Core decorator utilities
14
+ - [**reflect-metadata**](https://www.npmjs.com/package/reflect-metadata) - Metadata reflection for TypeScript decorators
15
+ - [**randomstring**](https://www.npmjs.com/package/randomstring) - Random string generation for hash salts
16
+
17
+ ## Documentation
18
+
19
+ - [Table Definitions](./2.table-definitions.md) - Define database tables with the `Table` class, `Index` decorator, and `Fixture` decorator
20
+ - [Table Modifiers](./3.table-modifiers.md) - Apply encryption, hashing, and localization modifiers to table fields, or create custom modifiers
21
+ - [Data Models](./4.data-models.md) - Create data models with `BasicDataModel` for CRUD operations and data conversion
22
+ - [Parameter Decoration](./5.parameter-decoration.md) - Inject model instances into API controller methods with the `Model` decorator
@@ -0,0 +1,311 @@
1
+ # Table Definitions
2
+
3
+ The Database Decorators package provides a class-based approach to defining database tables. You extend the `Table` base class, declare each field with TypeScript's `declare` keyword and the `@Field` decorator, and use further decorators to configure indexes, relations, and initial data.
4
+
5
+ ## The Table Class
6
+
7
+ The `Table` class serves as the base class for all table definitions. Every table automatically includes an `_id` field as the primary key.
8
+
9
+ ```typescript
10
+ import { Table, Field } from "@antelopejs/interface-database-decorators";
11
+
12
+ class User extends Table {
13
+ @Field("string")
14
+ declare name: string;
15
+
16
+ @Field("string")
17
+ declare email: string;
18
+ }
19
+ ```
20
+
21
+ ### Extend with Modifiers
22
+
23
+ The `Table.with()` static method incorporates modifier mixins into the table class, adding capabilities like encryption, hashing, or localization:
24
+
25
+ ```typescript
26
+ import {
27
+ Table,
28
+ Field,
29
+ EncryptionModifier,
30
+ Encrypted,
31
+ } from "@antelopejs/interface-database-decorators";
32
+
33
+ class SensitiveData extends Table.with(EncryptionModifier) {
34
+ @Field("string")
35
+ declare publicContent: string;
36
+
37
+ @Encrypted({ secretKey: process.env.SECRET_KEY || "default-key" })
38
+ @Field("string")
39
+ declare secureContent: string;
40
+ }
41
+ ```
42
+
43
+ For detailed information about modifiers, see [Table Modifiers](./3.table-modifiers.md).
44
+
45
+ ## The Index Decorator
46
+
47
+ The `Index` decorator marks a field as a database index. Indexed fields enable efficient lookups through `getAll()` and `between()` on the underlying AQL table.
48
+
49
+ ```typescript
50
+ import { Table, Field, Index } from "@antelopejs/interface-database-decorators";
51
+
52
+ class User extends Table {
53
+ @Index()
54
+ @Field("string")
55
+ declare email: string;
56
+
57
+ @Field("string")
58
+ declare name: string;
59
+ }
60
+ ```
61
+
62
+ ### Options
63
+
64
+ | Option | Type | Description |
65
+ | --------------- | --------- | ------------------------------------------------------------------- |
66
+ | `group` | `string` | Assign the field to a named compound index group. |
67
+ | `crossInstance` | `boolean` | Also keep the index fast for queries that run across all instances. |
68
+
69
+ ### Cross-Instance Indexes
70
+
71
+ Every index is scoped to the schema instance, so queries on a single instance always use it. Set `crossInstance: true` when the index is also queried across all instances (queries on the `CROSS_INSTANCE` instance), so the database driver maintains an additional index for those queries.
72
+
73
+ The option never changes query results. Without it, cross-instance queries that name the index still return the same rows but run slower, and the driver logs a warning once per index. Leave it unset for indexes that are only queried within one instance, since each extra index costs storage and write time.
74
+
75
+ ```typescript
76
+ class User extends Table {
77
+ @Index({ crossInstance: true })
78
+ @Field("string")
79
+ declare email: string;
80
+ }
81
+ ```
82
+
83
+ For a compound index, setting `crossInstance: true` on any field of the group applies it to the whole group.
84
+
85
+ ### Compound Indexes
86
+
87
+ Assign multiple fields to the same index group to create a compound index:
88
+
89
+ ```typescript
90
+ import {
91
+ Table,
92
+ Field,
93
+ Index,
94
+ Relation,
95
+ } from "@antelopejs/interface-database-decorators";
96
+
97
+ class User extends Table {
98
+ @Field("string")
99
+ declare name: string;
100
+ }
101
+
102
+ class UserActivity extends Table {
103
+ @Index({ group: "user_action" })
104
+ @Field("string")
105
+ @Relation({ to: () => User })
106
+ declare userId: string;
107
+
108
+ @Index({ group: "user_action" })
109
+ @Field("string")
110
+ declare action: string;
111
+
112
+ @Field("date")
113
+ declare timestamp: Date;
114
+ }
115
+ ```
116
+
117
+ ## The Field Decorator
118
+
119
+ `@Field(type)` declares the field type for a property. The type is forwarded verbatim into the `TableDefinition.fields` map handed to the adapter. It accepts the full `FieldType` union -- primitive tokens (`"string"`, `"number"`, ...), arrays, nested records, or an io-ts codec.
120
+
121
+ ```typescript
122
+ import * as t from "io-ts";
123
+ import {
124
+ Table,
125
+ Field,
126
+ Index,
127
+ RegisterTable,
128
+ } from "@antelopejs/interface-database-decorators";
129
+
130
+ @RegisterTable("orders", "shop")
131
+ class Order extends Table {
132
+ @Field("string")
133
+ declare id: string;
134
+
135
+ @Field(t.union([t.literal("open"), t.literal("closed")]))
136
+ declare status: "open" | "closed";
137
+
138
+ @Index()
139
+ @Field("number")
140
+ declare total: number;
141
+ }
142
+ ```
143
+
144
+ Properties without `@Field` are omitted from `fields`. `@Field` stacks freely with `@Index`.
145
+
146
+ ## The Relation Decorator
147
+
148
+ The `Relation` decorator declares a link from a field to another table. It is **declarative metadata only**: database implementations do not enforce it (no foreign key constraint, no referential validation). Introspection tooling consumes it to expose the links between tables — for example to render schema diagrams or navigate related records.
149
+
150
+ ```typescript
151
+ import {
152
+ Table,
153
+ Field,
154
+ Index,
155
+ Relation,
156
+ } from "@antelopejs/interface-database-decorators";
157
+
158
+ class Comment extends Table {
159
+ @Index()
160
+ @Field("string")
161
+ @Relation({ to: () => Post })
162
+ declare postId: string;
163
+
164
+ @Field("string")
165
+ @Relation({ to: () => Tag, many: true })
166
+ declare tagIds: string[];
167
+ }
168
+ ```
169
+
170
+ ### Options
171
+
172
+ | Option | Type | Description |
173
+ | --------- | -------------------- | -------------------------------------------------------------------------------- |
174
+ | `to` | `() => typeof Table` | Thunk returning the target table class (lazy to allow forward references). |
175
+ | `toField` | `string` | Target field name. Defaults to the target table's primary key. |
176
+ | `many` | `boolean` | The decorated field holds multiple target keys (many targets per source record). |
177
+
178
+ `@Relation` stacks freely with `@Field` and `@Index`.
179
+
180
+ ## The RegisterTable Decorator
181
+
182
+ The `RegisterTable` class decorator associates a table class with a specific table name and schema. This registration is used by `RegisterSchema` to build the schema definition automatically.
183
+
184
+ ```typescript
185
+ import {
186
+ Table,
187
+ Field,
188
+ Index,
189
+ RegisterTable,
190
+ } from "@antelopejs/interface-database-decorators";
191
+
192
+ @RegisterTable("users", "myapp")
193
+ class User extends Table {
194
+ @Index()
195
+ @Field("string")
196
+ declare email: string;
197
+
198
+ @Field("string")
199
+ declare name: string;
200
+ }
201
+ ```
202
+
203
+ The first argument is the table name in the database, and the second is the schema name.
204
+
205
+ ## The Fixture Decorator
206
+
207
+ The `Fixture` decorator defines default data to insert when a table is first created. It receives a generator function that produces initial records.
208
+
209
+ ```typescript
210
+ import {
211
+ Table,
212
+ Field,
213
+ Fixture,
214
+ } from "@antelopejs/interface-database-decorators";
215
+
216
+ @Fixture(() => [
217
+ { _id: "admin", name: "Administrator" },
218
+ { _id: "user", name: "Standard User" },
219
+ { _id: "guest", name: "Guest" },
220
+ ])
221
+ class UserRole extends Table {
222
+ @Field("string")
223
+ declare name: string;
224
+ }
225
+ ```
226
+
227
+ The generator function:
228
+
229
+ - Receives the table class as its parameter.
230
+ - Can return a single object, an array of objects, or a `Promise` resolving to either.
231
+ - Runs only when the table is empty, preventing duplicate inserts on subsequent starts.
232
+
233
+ ### Async Generators
234
+
235
+ ```typescript
236
+ @Fixture(async () => {
237
+ const defaults = await loadDefaultConfig();
238
+ return defaults.map((cfg) => ({
239
+ _id: cfg.key,
240
+ value: cfg.value,
241
+ }));
242
+ })
243
+ class SystemConfig extends Table {
244
+ @Field("string")
245
+ declare value: string;
246
+ }
247
+ ```
248
+
249
+ ## Inheritance
250
+
251
+ Tables support standard class inheritance. Define a base table with common fields and extend it for specific use cases:
252
+
253
+ ```typescript
254
+ import {
255
+ Table,
256
+ Field,
257
+ Index,
258
+ Relation,
259
+ } from "@antelopejs/interface-database-decorators";
260
+
261
+ class BaseEntity extends Table {
262
+ @Field("date")
263
+ declare createdAt: Date;
264
+
265
+ @Field("date")
266
+ declare updatedAt: Date;
267
+ }
268
+
269
+ class User extends BaseEntity {
270
+ @Index()
271
+ @Field("string")
272
+ declare email: string;
273
+
274
+ @Field("string")
275
+ declare firstName: string;
276
+
277
+ @Field("string")
278
+ declare lastName: string;
279
+ }
280
+
281
+ class Post extends BaseEntity {
282
+ @Index()
283
+ @Field("string")
284
+ @Relation({ to: () => User })
285
+ declare authorId: string;
286
+
287
+ @Field("string")
288
+ declare title: string;
289
+
290
+ @Field("string")
291
+ declare content: string;
292
+ }
293
+ ```
294
+
295
+ ## Register a Schema
296
+
297
+ The `RegisterSchema` function builds a `SchemaDefinition` from all tables registered for the given schema id (via `@RegisterTable`), constructs the `Schema` (which the adapter provisions), then inserts any fixture data for tables that are empty.
298
+
299
+ ```typescript
300
+ import { RegisterSchema } from "@antelopejs/interface-database-decorators";
301
+
302
+ await RegisterSchema("myapp");
303
+ ```
304
+
305
+ ### Parameters
306
+
307
+ | Parameter | Type | Description |
308
+ | ---------- | -------- | ------------------------------------------------------------------ |
309
+ | `schemaId` | `string` | Schema id matching the `@RegisterTable(_, schemaId)` declarations. |
310
+
311
+ `RegisterSchema` returns `Promise<void>`.