@antelopejs/interface-database-decorators 0.1.11 → 0.2.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/README.md +17 -13
- package/dist/antelope.test.js +1 -1
- package/dist/common.d.ts +48 -2
- package/dist/common.js +51 -5
- package/dist/common.js.map +1 -1
- package/dist/database.js +18 -3
- package/dist/database.js.map +1 -1
- package/dist/internal/bound-schema.d.ts +8 -0
- package/dist/internal/bound-schema.js +14 -0
- package/dist/internal/bound-schema.js.map +1 -0
- package/dist/model.d.ts +21 -8
- package/dist/model.js +34 -15
- package/dist/model.js.map +1 -1
- package/dist/modifiers/autodate.d.ts +2 -2
- package/dist/modifiers/autodate.js.map +1 -1
- package/dist/modifiers/common.d.ts +37 -20
- package/dist/modifiers/common.js +81 -68
- package/dist/modifiers/common.js.map +1 -1
- package/dist/modifiers/encryption.js +26 -14
- package/dist/modifiers/encryption.js.map +1 -1
- package/dist/modifiers/hash.d.ts +46 -4
- package/dist/modifiers/hash.js +175 -14
- package/dist/modifiers/hash.js.map +1 -1
- package/dist/modifiers/internal/kinds.d.ts +15 -1
- package/dist/modifiers/internal/kinds.js +35 -0
- package/dist/modifiers/internal/kinds.js.map +1 -1
- package/dist/modifiers/internal/records.d.ts +40 -5
- package/dist/modifiers/internal/records.js +70 -1
- package/dist/modifiers/internal/records.js.map +1 -1
- package/dist/modifiers/localization.js +12 -7
- package/dist/modifiers/localization.js.map +1 -1
- package/dist/relation.d.ts +5 -0
- package/dist/relation.js +11 -0
- package/dist/relation.js.map +1 -1
- package/dist/schema.js +5 -6
- package/dist/schema.js.map +1 -1
- package/dist/table.d.ts +3 -2
- package/dist/table.js +29 -13
- package/dist/table.js.map +1 -1
- package/dist/tests/cross_instance.test.js +5 -2
- package/dist/tests/cross_instance.test.js.map +1 -1
- package/dist/tests/database.test.js +42 -2
- package/dist/tests/database.test.js.map +1 -1
- package/dist/tests/hash_upgrade.test.d.ts +1 -0
- package/dist/tests/hash_upgrade.test.js +132 -0
- package/dist/tests/hash_upgrade.test.js.map +1 -0
- package/dist/tests/helpers/hash-rows.d.ts +40 -0
- package/dist/tests/helpers/hash-rows.js +41 -0
- package/dist/tests/helpers/hash-rows.js.map +1 -0
- package/dist/tests/helpers/other-instance.js.map +1 -1
- package/dist/tests/integration.test.js +15 -4
- package/dist/tests/integration.test.js.map +1 -1
- package/dist/tests/metadata_inheritance.test.d.ts +1 -0
- package/dist/tests/metadata_inheritance.test.js +212 -0
- package/dist/tests/metadata_inheritance.test.js.map +1 -0
- package/dist/tests/modifiers/encryption_date_marker.test.d.ts +1 -0
- package/dist/tests/modifiers/encryption_date_marker.test.js +78 -0
- package/dist/tests/modifiers/encryption_date_marker.test.js.map +1 -0
- package/dist/tests/modifiers/hash.test.js +295 -0
- package/dist/tests/modifiers/hash.test.js.map +1 -1
- package/dist/tests/modifiers/inherited_names.test.d.ts +1 -0
- package/dist/tests/modifiers/inherited_names.test.js +96 -0
- package/dist/tests/modifiers/inherited_names.test.js.map +1 -0
- package/dist/tests/own_key_lookups.test.d.ts +1 -0
- package/dist/tests/own_key_lookups.test.js +49 -0
- package/dist/tests/own_key_lookups.test.js.map +1 -0
- package/dist/tests/partial_update.test.d.ts +1 -0
- package/dist/tests/partial_update.test.js +55 -0
- package/dist/tests/partial_update.test.js.map +1 -0
- package/dist/tests/row_forms.test.d.ts +1 -0
- package/dist/tests/row_forms.test.js +59 -0
- package/dist/tests/row_forms.test.js.map +1 -0
- package/dist/tests/stored_metadata.test.d.ts +1 -0
- package/dist/tests/stored_metadata.test.js +91 -0
- package/dist/tests/stored_metadata.test.js.map +1 -0
- package/dist/tests/subclass_schema_binding.test.d.ts +1 -0
- package/dist/tests/subclass_schema_binding.test.js +115 -0
- package/dist/tests/subclass_schema_binding.test.js.map +1 -0
- package/dist/tests/table.test.js +16 -0
- package/dist/tests/table.test.js.map +1 -1
- package/docs/1.introduction.md +24 -20
- package/docs/2.table-definitions.md +63 -41
- package/docs/3.table-modifiers.md +128 -98
- package/docs/4.data-models.md +63 -52
- package/docs/5.parameter-decoration.md +28 -24
- package/docs/tsconfig.json +3 -0
- package/package.json +10 -9
- package/skills/database-decorators-interface/SKILL.md +6 -3
package/README.md
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `@antelopejs/interface-database-decorators`
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
|
-
<a href="https://www.npmjs.com/package/@antelopejs/interface-database-decorators"><img alt="npm" src="https://img.shields.io/npm/v/@antelopejs/interface-database-decorators?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
5
|
-
<a href="./LICENSE"><img alt="License" src="https://img.shields.io/npm/l/@antelopejs/interface-database-decorators?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
6
|
-
<a href="https://discord.gg/
|
|
7
|
-
<a href="https://interfaces.antelopejs.com/docs/database-decorators"><img alt="Docs" src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000"></a>
|
|
4
|
+
<a href="https://www.npmjs.com/package/@antelopejs/interface-database-decorators"><img data-illustration alt="npm" src="https://img.shields.io/npm/v/@antelopejs/interface-database-decorators?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
5
|
+
<a href="./LICENSE"><img data-illustration alt="License" src="https://img.shields.io/npm/l/@antelopejs/interface-database-decorators?style=for-the-badge&labelColor=000000&color=000000"></a>
|
|
6
|
+
<a href="https://discord.gg/g4pFt6eXqu"><img data-illustration alt="Discord" src="https://img.shields.io/badge/Discord-18181B?logo=discord&style=for-the-badge&color=000000"></a>
|
|
7
|
+
<a href="https://interfaces.antelopejs.com/docs/database-decorators"><img data-illustration alt="Docs" src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000"></a>
|
|
8
8
|
</div>
|
|
9
9
|
|
|
10
|
-
Database tables and data models as TypeScript classes, on top of [`@antelopejs/interface-database`](https://github.com/AntelopeJS/interface-database)
|
|
10
|
+
Database tables and data models as TypeScript classes, on top of [`@antelopejs/interface-database`](https://github.com/AntelopeJS/interface-database). Declare fields and indexes with decorators, then read and write rows through a typed model.
|
|
11
|
+
|
|
12
|
+
Part of [AntelopeJS](https://github.com/AntelopeJS/antelopejs). Used by [AntelopeJS DMS](https://github.com/AntelopeJS/dms), the open-source back office for your PostgreSQL, MongoDB or RethinkDB database.
|
|
11
13
|
|
|
12
14
|
## What it offers
|
|
13
15
|
|
|
@@ -88,15 +90,17 @@ export async function start() {
|
|
|
88
90
|
|
|
89
91
|
## Compatibility
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
The package declares these `@antelopejs/*` peer dependencies:
|
|
94
|
+
|
|
95
|
+
<!-- antelopejs-docs-compat:start -->
|
|
92
96
|
|
|
93
|
-
|
|
97
|
+
| Package | Supported | Tested with |
|
|
98
|
+
| -------------------------------- | ----------------- | ----------- |
|
|
99
|
+
| `@antelopejs/interface-api` | `>=0.0.15 <1.0.0` | `0.0.15` |
|
|
100
|
+
| `@antelopejs/interface-core` | `>=0.2.4 <1.0.0` | `0.4.0` |
|
|
101
|
+
| `@antelopejs/interface-database` | `>=0.1.11 <1.0.0` | `0.3.0` |
|
|
94
102
|
|
|
95
|
-
|
|
96
|
-
| -------------------------------- | ----------------- |
|
|
97
|
-
| `@antelopejs/interface-api` | `>=0.0.15 <1.0.0` |
|
|
98
|
-
| `@antelopejs/interface-core` | `>=0.2.4 <1.0.0` |
|
|
99
|
-
| `@antelopejs/interface-database` | `>=0.1.11 <1.0.0` |
|
|
103
|
+
<!-- antelopejs-docs-compat:end -->
|
|
100
104
|
|
|
101
105
|
## Contributing
|
|
102
106
|
|
package/dist/antelope.test.js
CHANGED
package/dist/common.d.ts
CHANGED
|
@@ -4,23 +4,69 @@ export type Constructible<T = object, A extends unknown[] = unknown[]> = new (..
|
|
|
4
4
|
export type DeepPartial<T> = {
|
|
5
5
|
[K in keyof T]?: T[K] extends Array<infer U1> ? Array<DeepPartial<U1>> : T[K] extends ReadonlyArray<infer U2> ? ReadonlyArray<DeepPartial<U2>> : T[K] extends object ? DeepPartial<T[K]> : T[K];
|
|
6
6
|
};
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* A table row as `toPlainData` gives it: the fields of `T` that are set, by
|
|
9
|
+
* name, without the row's prototype.
|
|
10
|
+
*/
|
|
11
|
+
export type PlainRow<T> = {
|
|
12
|
+
[K in Extract<keyof T, string>]?: T[K];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* A table row as `fromPlainData` reads it: every field is optional and may be
|
|
16
|
+
* partial, and a field under a container modifier, such as a localized one, may
|
|
17
|
+
* hold its value per key.
|
|
18
|
+
*/
|
|
19
|
+
export type PlainData<T> = {
|
|
20
|
+
[K in Extract<keyof T, string>]?: T[K] | DeepPartial<T>[K] | Record<string, DeepPartial<T>[K]>;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The rows a fixture generator gives for its table: one, several or none.
|
|
24
|
+
*/
|
|
25
|
+
export type DatumGeneratorOutput<Row extends object = object> = Row | Row[] | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* A fixture generator of a table class, called with the class registered into
|
|
28
|
+
* the schema: the decorated class or a subclass of it.
|
|
29
|
+
*/
|
|
8
30
|
export type DatumGenerator = (tableClass: Constructible) => DatumGeneratorOutput | Promise<DatumGeneratorOutput>;
|
|
9
31
|
export interface MetadataClass<TMetadata> extends Constructible<TMetadata> {
|
|
10
32
|
key: symbol;
|
|
33
|
+
/**
|
|
34
|
+
* Builds the metadata a subclass starts from out of its parent's, copying
|
|
35
|
+
* whatever a decorator on the subclass would write to. Without it, the
|
|
36
|
+
* subclass shares its parent's metadata object.
|
|
37
|
+
*/
|
|
38
|
+
inherit?: (parent: TMetadata) => TMetadata;
|
|
39
|
+
/**
|
|
40
|
+
* Brings metadata stored under the shared key by an older copy of the
|
|
41
|
+
* package to this copy's shape. Returns `stored` itself when it is already
|
|
42
|
+
* current.
|
|
43
|
+
*/
|
|
44
|
+
upgrade?: (stored: TMetadata) => TMetadata;
|
|
11
45
|
}
|
|
12
46
|
/**
|
|
13
47
|
* Table class Metadata.
|
|
14
48
|
*/
|
|
15
49
|
export declare class DatumStaticMetadata {
|
|
16
50
|
static key: symbol;
|
|
51
|
+
/**
|
|
52
|
+
* The metadata of a subclass of a table: a copy of its parent's, so that
|
|
53
|
+
* decorators on the subclass never write into the parent or its siblings.
|
|
54
|
+
* The bound schema is not copied: `RegisterSchema` binds the parent after a
|
|
55
|
+
* subclass may have been read, so the subclass looks the schema up by name.
|
|
56
|
+
*/
|
|
57
|
+
static inherit(parent: DatumStaticMetadata): DatumStaticMetadata;
|
|
58
|
+
/**
|
|
59
|
+
* Copies 0.1.8 and 0.1.9 of the package store the metadata without
|
|
60
|
+
* `uniqueIndexes`, under the same key and class shape as this copy.
|
|
61
|
+
*/
|
|
62
|
+
static upgrade(stored: DatumStaticMetadata): DatumStaticMetadata;
|
|
17
63
|
tableName?: string;
|
|
18
64
|
schemaName?: string;
|
|
19
65
|
readonly indexes: Record<string, Array<string>>;
|
|
20
66
|
readonly crossInstanceIndexes: Set<string>;
|
|
21
67
|
readonly uniqueIndexes: Set<string>;
|
|
22
68
|
readonly fields: Record<string, FieldType>;
|
|
23
|
-
primary:
|
|
69
|
+
primary: "_id";
|
|
24
70
|
generator?: DatumGenerator;
|
|
25
71
|
/**
|
|
26
72
|
* Schema the table was registered into by `RegisterSchema`.
|
package/dist/common.js
CHANGED
|
@@ -2,11 +2,47 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DatumStaticMetadata = void 0;
|
|
4
4
|
exports.getMetadata = getMetadata;
|
|
5
|
+
const kinds_1 = require("./modifiers/internal/kinds");
|
|
5
6
|
/**
|
|
6
7
|
* Table class Metadata.
|
|
7
8
|
*/
|
|
8
9
|
class DatumStaticMetadata {
|
|
9
10
|
static key = Symbol.for("@antelopejs/interface-database-decorators/DatumStaticMetadata@1");
|
|
11
|
+
/**
|
|
12
|
+
* The metadata of a subclass of a table: a copy of its parent's, so that
|
|
13
|
+
* decorators on the subclass never write into the parent or its siblings.
|
|
14
|
+
* The bound schema is not copied: `RegisterSchema` binds the parent after a
|
|
15
|
+
* subclass may have been read, so the subclass looks the schema up by name.
|
|
16
|
+
*/
|
|
17
|
+
static inherit(parent) {
|
|
18
|
+
const copy = new DatumStaticMetadata();
|
|
19
|
+
copy.tableName = parent.tableName;
|
|
20
|
+
copy.schemaName = parent.schemaName;
|
|
21
|
+
for (const [group, keys] of Object.entries(parent.indexes)) {
|
|
22
|
+
copy.indexes[group] = [...keys];
|
|
23
|
+
}
|
|
24
|
+
for (const group of parent.crossInstanceIndexes) {
|
|
25
|
+
copy.crossInstanceIndexes.add(group);
|
|
26
|
+
}
|
|
27
|
+
for (const group of parent.uniqueIndexes) {
|
|
28
|
+
copy.uniqueIndexes.add(group);
|
|
29
|
+
}
|
|
30
|
+
for (const [name, type] of Object.entries(parent.fields)) {
|
|
31
|
+
copy.fields[name] = type;
|
|
32
|
+
}
|
|
33
|
+
copy.primary = parent.primary;
|
|
34
|
+
copy.generator = parent.generator;
|
|
35
|
+
return copy;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Copies 0.1.8 and 0.1.9 of the package store the metadata without
|
|
39
|
+
* `uniqueIndexes`, under the same key and class shape as this copy.
|
|
40
|
+
*/
|
|
41
|
+
static upgrade(stored) {
|
|
42
|
+
return Object.hasOwn(stored, "uniqueIndexes")
|
|
43
|
+
? stored
|
|
44
|
+
: Object.assign(new DatumStaticMetadata(), stored);
|
|
45
|
+
}
|
|
10
46
|
tableName;
|
|
11
47
|
schemaName;
|
|
12
48
|
indexes = {};
|
|
@@ -20,7 +56,7 @@ class DatumStaticMetadata {
|
|
|
20
56
|
*/
|
|
21
57
|
schema;
|
|
22
58
|
addIndex(key, group, isCrossInstance = false, isUnique = false) {
|
|
23
|
-
if (!(
|
|
59
|
+
if (!Object.hasOwn(this.indexes, group)) {
|
|
24
60
|
this.indexes[group] = [];
|
|
25
61
|
}
|
|
26
62
|
this.indexes[group].push(key);
|
|
@@ -33,16 +69,26 @@ class DatumStaticMetadata {
|
|
|
33
69
|
}
|
|
34
70
|
}
|
|
35
71
|
exports.DatumStaticMetadata = DatumStaticMetadata;
|
|
72
|
+
// oxlint-disable-next-line typescript/no-unnecessary-type-parameters -- exported; replacing TTarget with `object` clears this row and adds 6 (1 no-object-parameters, 5 no-unsafe-argument for the any-typed constructor callers pass)
|
|
36
73
|
function getMetadata(target, metadataClass, inherit = true) {
|
|
74
|
+
// SAFETY: getMetadata alone defines metadata under metadataClass.key, always a TMetadata (new metadataClass, its inherit or its upgrade), so the read is a TMetadata or undefined; reflect-metadata types it any.
|
|
37
75
|
const existingMetadata = Reflect.getOwnMetadata(metadataClass.key, target);
|
|
38
76
|
if (existingMetadata) {
|
|
39
|
-
|
|
77
|
+
const upgraded = metadataClass.upgrade?.(existingMetadata);
|
|
78
|
+
if (upgraded && upgraded !== existingMetadata) {
|
|
79
|
+
Reflect.defineMetadata(metadataClass.key, upgraded, target);
|
|
80
|
+
}
|
|
81
|
+
return upgraded ?? existingMetadata;
|
|
40
82
|
}
|
|
41
83
|
const prototype = Object.getPrototypeOf(target);
|
|
42
|
-
const inheritedMetadata = inherit &&
|
|
43
|
-
|
|
84
|
+
const inheritedMetadata = inherit &&
|
|
85
|
+
(0, kinds_1.isObjectLike)(prototype) &&
|
|
86
|
+
Reflect.hasOwnMetadata(metadataClass.key, prototype)
|
|
87
|
+
? getMetadata(prototype, metadataClass, false)
|
|
44
88
|
: undefined;
|
|
45
|
-
const metadata = inheritedMetadata
|
|
89
|
+
const metadata = inheritedMetadata && metadataClass.inherit
|
|
90
|
+
? metadataClass.inherit(inheritedMetadata)
|
|
91
|
+
: (inheritedMetadata ?? new metadataClass(target));
|
|
46
92
|
Reflect.defineMetadata(metadataClass.key, metadata, target);
|
|
47
93
|
return metadata;
|
|
48
94
|
}
|
package/dist/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
|
package/dist/database.js
CHANGED
|
@@ -69,12 +69,27 @@ async function insertFixtureData(schema, tableName, tableClass, generator) {
|
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
71
|
const fixtureData = await generator(tableClass);
|
|
72
|
-
const rows = toFixtureRows(fixtureData, tableClass);
|
|
72
|
+
const rows = toFixtureRows(fixtureData, tableClass).map((row, position) => withStableId(row, tableName, position));
|
|
73
73
|
if (rows.length === 0) {
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
76
|
-
const
|
|
77
|
-
|
|
76
|
+
const table = schema.instance().table(tableName);
|
|
77
|
+
try {
|
|
78
|
+
await table.insert(rows.length === 1 ? rows[0] : rows);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if ((await table.count()) === 0)
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Keys a fixture row that declares no id by its table and position, so two
|
|
87
|
+
* processes starting on an empty table write one row between them.
|
|
88
|
+
*/
|
|
89
|
+
function withStableId(row, tableName, position) {
|
|
90
|
+
return row._id === undefined
|
|
91
|
+
? { ...row, _id: `${tableName}:fixture:${position}` }
|
|
92
|
+
: row;
|
|
78
93
|
}
|
|
79
94
|
function toFixtureRows(fixtureData, tableClass) {
|
|
80
95
|
const entries = fixtureData
|
package/dist/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** @internal @packageDocumentation */
|
|
2
|
+
import type { DatumStaticMetadata } from "../common";
|
|
3
|
+
/**
|
|
4
|
+
* The schema a table is bound to: the one `RegisterSchema` bound it to, else
|
|
5
|
+
* the one registered under its schema name. A subclass starts without a bound
|
|
6
|
+
* schema, so it follows its parent's schema whenever `RegisterSchema` binds it.
|
|
7
|
+
*/
|
|
8
|
+
export declare function boundSchema({ schema, schemaName }: DatumStaticMetadata): import("@antelopejs/interface-database/dist/staged-query/schema").Schema<any, import("@antelopejs/interface-database").SchemaDefinition> | undefined;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** @internal @packageDocumentation */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.boundSchema = boundSchema;
|
|
5
|
+
const interface_database_1 = require("@antelopejs/interface-database");
|
|
6
|
+
/**
|
|
7
|
+
* The schema a table is bound to: the one `RegisterSchema` bound it to, else
|
|
8
|
+
* the one registered under its schema name. A subclass starts without a bound
|
|
9
|
+
* schema, so it follows its parent's schema whenever `RegisterSchema` binds it.
|
|
10
|
+
*/
|
|
11
|
+
function boundSchema({ schema, schemaName }) {
|
|
12
|
+
return (schema ?? (schemaName === undefined ? undefined : interface_database_1.Schema.get(schemaName)));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=bound-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bound-schema.js","sourceRoot":"","sources":["../../src/internal/bound-schema.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AAWtC,kCAIC;AAbD,uEAAwD;AAIxD;;;;GAIG;AACH,SAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,EAAuB;IACrE,OAAO,CACL,MAAM,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2BAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAC1E,CAAC;AACJ,CAAC"}
|
package/dist/model.d.ts
CHANGED
|
@@ -2,16 +2,21 @@ import type * as DatabaseDev from "@antelopejs/interface-database";
|
|
|
2
2
|
import { type InstanceId } from "@antelopejs/interface-database";
|
|
3
3
|
import { type RequestContext } from "@antelopejs/interface-api";
|
|
4
4
|
import { type Class } from "@antelopejs/interface-core/decorators";
|
|
5
|
-
import { type
|
|
5
|
+
import { type StoredRow } from "./modifiers/common";
|
|
6
|
+
import { type Constructible, DatumStaticMetadata, type DeepPartial, type PlainData } from "./common";
|
|
6
7
|
export type DataModel<T = any> = {
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Schema the table class registers into with `@RegisterTable`; `undefined`
|
|
10
|
+
* for a table class that does not.
|
|
11
|
+
*/
|
|
12
|
+
readonly schemaName: string | undefined;
|
|
8
13
|
readonly tableClass?: Constructible;
|
|
9
14
|
new (database: DatabaseDev.SchemaInstance<any>): {
|
|
10
15
|
readonly database: DatabaseDev.SchemaInstance<any>;
|
|
11
16
|
readonly table: DatabaseDev.Table<T>;
|
|
12
17
|
};
|
|
13
18
|
fromDatabase(obj: any): T | undefined;
|
|
14
|
-
fromPlainData(obj:
|
|
19
|
+
fromPlainData(obj: PlainData<T> | T): T;
|
|
15
20
|
};
|
|
16
21
|
export type FieldError = {
|
|
17
22
|
field: string;
|
|
@@ -26,6 +31,11 @@ export type ValidationResult = {
|
|
|
26
31
|
export type ValidateInputOptions = {
|
|
27
32
|
partial?: boolean;
|
|
28
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* One key {@link BasicDataModel}'s `getBy` matches against an index: a value,
|
|
36
|
+
* or a value proxy, as `Table.getAll` takes it.
|
|
37
|
+
*/
|
|
38
|
+
export type IndexKey = Exclude<Parameters<DatabaseDev.Table<object>["getAll"]>[0], unknown[]>;
|
|
29
39
|
/**
|
|
30
40
|
* Utility Class factory to create a basic Data Model with 1 table.
|
|
31
41
|
*
|
|
@@ -53,7 +63,7 @@ export declare function BasicDataModel<T extends object>(dataType: Constructible
|
|
|
53
63
|
* @param keys Index value(s)
|
|
54
64
|
* @returns Array of Table class instances.
|
|
55
65
|
*/
|
|
56
|
-
getBy(index: keyof T, ...keys:
|
|
66
|
+
getBy(index: Extract<keyof T, string>, ...keys: IndexKey[]): PromiseLike<T[]>;
|
|
57
67
|
/**
|
|
58
68
|
* Get all the elements from the table.
|
|
59
69
|
*
|
|
@@ -77,7 +87,7 @@ export declare function BasicDataModel<T extends object>(dataType: Constructible
|
|
|
77
87
|
* @returns Update result
|
|
78
88
|
*/
|
|
79
89
|
update(id: string, obj: DeepPartial<T>, options?: ValidateOptions): Promise<number>;
|
|
80
|
-
update(obj: DeepPartial<T
|
|
90
|
+
update(obj: DeepPartial<T> & KeyedRow, options?: ValidateOptions): Promise<number>;
|
|
81
91
|
/**
|
|
82
92
|
* Delete an element from the table.
|
|
83
93
|
*
|
|
@@ -86,7 +96,7 @@ export declare function BasicDataModel<T extends object>(dataType: Constructible
|
|
|
86
96
|
*/
|
|
87
97
|
delete(id: string): Promise<number>;
|
|
88
98
|
};
|
|
89
|
-
readonly schemaName: string;
|
|
99
|
+
readonly schemaName: string | undefined;
|
|
90
100
|
/**
|
|
91
101
|
* Table class this model was built from.
|
|
92
102
|
*/
|
|
@@ -97,7 +107,7 @@ export declare function BasicDataModel<T extends object>(dataType: Constructible
|
|
|
97
107
|
* @param obj Plain data object containing the table fields
|
|
98
108
|
* @returns Table class instance
|
|
99
109
|
*/
|
|
100
|
-
fromPlainData(obj:
|
|
110
|
+
fromPlainData(obj: PlainData<T> | T): T;
|
|
101
111
|
/**
|
|
102
112
|
* Converts an object acquired from the database into a Table class instance.
|
|
103
113
|
*
|
|
@@ -111,7 +121,7 @@ export declare function BasicDataModel<T extends object>(dataType: Constructible
|
|
|
111
121
|
* @param obj Table class instance
|
|
112
122
|
* @returns Database-ready data
|
|
113
123
|
*/
|
|
114
|
-
toDatabase(obj:
|
|
124
|
+
toDatabase(obj: PlainData<T> | T): StoredRow<T>;
|
|
115
125
|
/**
|
|
116
126
|
* Validates a plain object against every io-ts codec attached via `@Field`.
|
|
117
127
|
* Pass `{ partial: true }` to skip fields not present on `obj` (patch semantics).
|
|
@@ -121,8 +131,11 @@ export declare function BasicDataModel<T extends object>(dataType: Constructible
|
|
|
121
131
|
export type ValidateOptions = {
|
|
122
132
|
validate?: boolean;
|
|
123
133
|
};
|
|
134
|
+
/** The part of a row an update without an id finds the row by. */
|
|
135
|
+
type KeyedRow = Record<DatumStaticMetadata["primary"], string>;
|
|
124
136
|
export declare function GetModel<M extends InstanceType<DataModel>>(cl: DataModel & Class<M>, instanceId?: InstanceId): M;
|
|
125
137
|
export declare const Model: (cl: DataModel<any> & Class<{
|
|
126
138
|
readonly database: DatabaseDev.SchemaInstance<any>;
|
|
127
139
|
readonly table: DatabaseDev.Table<any>;
|
|
128
140
|
}>, instanceIdOrCallback?: DatabaseDev.InstanceId | ((ctx: RequestContext) => InstanceId | undefined) | undefined) => import("@antelopejs/interface-core/decorators").PropertyDecorator & import("@antelopejs/interface-core/decorators").ParameterDecorator;
|
|
141
|
+
export {};
|
package/dist/model.js
CHANGED
|
@@ -11,6 +11,9 @@ const interface_database_1 = require("@antelopejs/interface-database");
|
|
|
11
11
|
const interface_api_1 = require("@antelopejs/interface-api");
|
|
12
12
|
const decorators_1 = require("@antelopejs/interface-core/decorators");
|
|
13
13
|
const common_1 = require("./modifiers/common");
|
|
14
|
+
const kinds_1 = require("./modifiers/internal/kinds");
|
|
15
|
+
const bound_schema_1 = require("./internal/bound-schema");
|
|
16
|
+
const records_1 = require("./modifiers/internal/records");
|
|
14
17
|
const common_2 = require("./common");
|
|
15
18
|
function isCodec(type) {
|
|
16
19
|
return (typeof type === "object" &&
|
|
@@ -19,9 +22,6 @@ function isCodec(type) {
|
|
|
19
22
|
"decode" in type &&
|
|
20
23
|
typeof type.decode === "function");
|
|
21
24
|
}
|
|
22
|
-
function isRecord(value) {
|
|
23
|
-
return typeof value === "object" && value !== null;
|
|
24
|
-
}
|
|
25
25
|
function isInstanceIdProvider(value) {
|
|
26
26
|
return typeof value === "function";
|
|
27
27
|
}
|
|
@@ -42,7 +42,10 @@ function BasicDataModel(dataType, tableName) {
|
|
|
42
42
|
const name = resolvedName;
|
|
43
43
|
const schemaName = metadata.schemaName;
|
|
44
44
|
const primaryKey = metadata.primary;
|
|
45
|
-
|
|
45
|
+
const toInstances = (dataR) =>
|
|
46
|
+
// SAFETY: Model.fromDatabase returns undefined only for a falsy row, and the rows a table read or an index lookup returns are stored records, never null or undefined; the cast removes that undefined from the element type.
|
|
47
|
+
dataR.map((row) => Model.fromDatabase(row));
|
|
48
|
+
const Model = class Model {
|
|
46
49
|
database;
|
|
47
50
|
static schemaName = schemaName;
|
|
48
51
|
/**
|
|
@@ -81,11 +84,13 @@ function BasicDataModel(dataType, tableName) {
|
|
|
81
84
|
* Validates a plain object against every io-ts codec attached via `@Field`.
|
|
82
85
|
* Pass `{ partial: true }` to skip fields not present on `obj` (patch semantics).
|
|
83
86
|
*/
|
|
84
|
-
static validate(
|
|
87
|
+
static validate(
|
|
88
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters -- validate is the parser: it narrows obj with isRecord and decodes every field with its codec before reading it
|
|
89
|
+
obj, options) {
|
|
85
90
|
const fields = metadata.fields;
|
|
86
91
|
const errors = [];
|
|
87
92
|
const partial = options?.partial === true;
|
|
88
|
-
const record = isRecord(obj) ? obj : undefined;
|
|
93
|
+
const record = (0, kinds_1.isRecord)(obj) ? obj : undefined;
|
|
89
94
|
for (const [field, type] of Object.entries(fields)) {
|
|
90
95
|
if (!isCodec(type))
|
|
91
96
|
continue;
|
|
@@ -104,6 +109,7 @@ function BasicDataModel(dataType, tableName) {
|
|
|
104
109
|
table;
|
|
105
110
|
constructor(database) {
|
|
106
111
|
this.database = database;
|
|
112
|
+
// oxlint-disable-next-line typescript/no-unsafe-assignment -- database is a SchemaInstance<any>, so its table is a Table<any>; a schema instance covers every table of its schema, so no type parameter of it states that this class's table holds this class's rows
|
|
107
113
|
this.table = database.table(name);
|
|
108
114
|
}
|
|
109
115
|
/**
|
|
@@ -125,7 +131,7 @@ function BasicDataModel(dataType, tableName) {
|
|
|
125
131
|
getBy(index, ...keys) {
|
|
126
132
|
return this.table
|
|
127
133
|
.getAll(keys.length === 1 ? keys[0] : keys, index)
|
|
128
|
-
.then((dataR) => dataR
|
|
134
|
+
.then((dataR) => toInstances(dataR));
|
|
129
135
|
}
|
|
130
136
|
/**
|
|
131
137
|
* Get all the elements from the table.
|
|
@@ -133,8 +139,7 @@ function BasicDataModel(dataType, tableName) {
|
|
|
133
139
|
* @returns Array of Table class instances.
|
|
134
140
|
*/
|
|
135
141
|
getAll() {
|
|
136
|
-
|
|
137
|
-
return this.table.then((dataR) => dataR.map((row) => Model.fromDatabase(row)));
|
|
142
|
+
return this.table.then((dataR) => toInstances(dataR));
|
|
138
143
|
}
|
|
139
144
|
/**
|
|
140
145
|
* Insert some data into the table.
|
|
@@ -158,7 +163,7 @@ function BasicDataModel(dataType, tableName) {
|
|
|
158
163
|
const converter = (entry) => {
|
|
159
164
|
const instance = Model.fromPlainData(entry);
|
|
160
165
|
(0, common_1.triggerEvent)(instance, "insert");
|
|
161
|
-
return
|
|
166
|
+
return (0, common_1.toDatabase)(instance);
|
|
162
167
|
};
|
|
163
168
|
return this.table
|
|
164
169
|
.insert(Array.isArray(obj) ? obj.map(converter) : converter(obj))
|
|
@@ -176,15 +181,17 @@ function BasicDataModel(dataType, tableName) {
|
|
|
176
181
|
(0, common_1.triggerEvent)(instance, "update");
|
|
177
182
|
return this.table
|
|
178
183
|
.get(parsed.id)
|
|
179
|
-
.update(
|
|
184
|
+
.update(withoutEmptyInternal((0, common_1.toDatabase)(instance)))
|
|
180
185
|
.run();
|
|
181
186
|
}
|
|
182
187
|
const instance = Model.fromPlainData(parsed.data);
|
|
183
188
|
(0, common_1.triggerEvent)(instance, "update");
|
|
184
|
-
// SAFETY: parsed.data is the DeepPartial<T> object the caller passed as the first argument (the id form was handled above), so reading the property named by the table's primary key is defined and gives undefined when absent; the next line asserts it is present.
|
|
185
189
|
const id = parsed.data[primaryKey];
|
|
186
190
|
(0, node_assert_1.default)(id !== undefined, "Missing primary key in object update.");
|
|
187
|
-
return this.table
|
|
191
|
+
return this.table
|
|
192
|
+
.get(id)
|
|
193
|
+
.update(withoutEmptyInternal((0, common_1.toDatabase)(instance)))
|
|
194
|
+
.run();
|
|
188
195
|
}
|
|
189
196
|
/**
|
|
190
197
|
* Delete an element from the table.
|
|
@@ -196,6 +203,7 @@ function BasicDataModel(dataType, tableName) {
|
|
|
196
203
|
return this.table.get(id).delete().run();
|
|
197
204
|
}
|
|
198
205
|
};
|
|
206
|
+
return Model;
|
|
199
207
|
}
|
|
200
208
|
const modelCache = new Map();
|
|
201
209
|
const UNDEFINED_INSTANCE_KEY = Symbol("undefined-instance");
|
|
@@ -204,6 +212,17 @@ function cacheKeyOf(instanceId) {
|
|
|
204
212
|
return UNDEFINED_INSTANCE_KEY;
|
|
205
213
|
return instanceId;
|
|
206
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Leaves out an `_internal` with nothing in it. The update writes that key as
|
|
217
|
+
* one value, and a modifier event creates it empty: writing it would erase what
|
|
218
|
+
* the row stores there.
|
|
219
|
+
*/
|
|
220
|
+
function withoutEmptyInternal(record) {
|
|
221
|
+
if (record._internal && (0, records_1.isEmptyInternal)(record._internal)) {
|
|
222
|
+
delete record._internal;
|
|
223
|
+
}
|
|
224
|
+
return record;
|
|
225
|
+
}
|
|
207
226
|
function makeValidationError(errors) {
|
|
208
227
|
const summary = errors.map((e) => `${e.field} (${e.message})`).join(", ");
|
|
209
228
|
return Object.assign(new Error(`validation failed: ${summary}`), { errors });
|
|
@@ -221,11 +240,11 @@ function parseUpdateArgs(args) {
|
|
|
221
240
|
}
|
|
222
241
|
function schemaOf(cl) {
|
|
223
242
|
if (!cl.tableClass) {
|
|
224
|
-
const schema = interface_database_1.Schema.get(cl.schemaName);
|
|
243
|
+
const schema = cl.schemaName === undefined ? undefined : interface_database_1.Schema.get(cl.schemaName);
|
|
225
244
|
(0, node_assert_1.default)(schema, `Schema not found for '${cl.schemaName}'`);
|
|
226
245
|
return schema;
|
|
227
246
|
}
|
|
228
|
-
const schema = (0, common_2.getMetadata)(cl.tableClass, common_2.DatumStaticMetadata)
|
|
247
|
+
const schema = (0, bound_schema_1.boundSchema)((0, common_2.getMetadata)(cl.tableClass, common_2.DatumStaticMetadata));
|
|
229
248
|
(0, node_assert_1.default)(schema, `${cl.tableClass.name} is not bound to a schema: call RegisterSchema("${cl.schemaName}") in the module that declares it`);
|
|
230
249
|
return schema;
|
|
231
250
|
}
|
package/dist/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,8 +12,8 @@ type Options = {
|
|
|
12
12
|
* does not require the Table class to incorporate a mixin.
|
|
13
13
|
*/
|
|
14
14
|
export declare class AutoDateModifier extends Modifier<object, Options> {
|
|
15
|
-
insert(object: Record<
|
|
16
|
-
update(object: Record<
|
|
15
|
+
insert<F extends string>(object: Partial<Record<F, Date>>, field: F): void;
|
|
16
|
+
update<F extends string>(object: Partial<Record<F, Date>>, field: F): void;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Mark a Database Table class field as an automatic creation timestamp.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autodate.js","sourceRoot":"","sources":["../../src/modifiers/autodate.ts"],"names":[],"mappings":";;;AAAA,sEAA8E;AAE9E,qCAAoD;AASpD;;;;;;GAMG;AACH,MAAa,gBAAiB,SAAQ,iBAAyB;IACtD,MAAM,
|
|
1
|
+
{"version":3,"file":"autodate.js","sourceRoot":"","sources":["../../src/modifiers/autodate.ts"],"names":[],"mappings":";;;AAAA,sEAA8E;AAE9E,qCAAoD;AASpD;;;;;;GAMG;AACH,MAAa,gBAAiB,SAAQ,iBAAyB;IACtD,MAAM,CAAmB,MAAgC,EAAE,KAAQ;QACxE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAmB,MAAgC,EAAE,KAAQ;QACxE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;CACF;AAZD,4CAYC;AAED;;;;;GAKG;AACU,QAAA,YAAY,GAAG,IAAA,kCAAqB,EAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;IACxE,IAAA,uBAAc,EAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE;QAChE,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACU,QAAA,UAAU,GAAG,IAAA,kCAAqB,EAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;IACtE,IAAA,uBAAc,EAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE;QAChE,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|