@antelopejs/interface-database-decorators 0.1.10 → 0.1.11
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/dist/common.js.map +1 -1
- package/dist/database.js.map +1 -1
- package/dist/model.js +29 -26
- package/dist/model.js.map +1 -1
- package/dist/modifiers/common.d.ts +24 -4
- package/dist/modifiers/common.js +92 -114
- package/dist/modifiers/common.js.map +1 -1
- package/dist/modifiers/encryption.js +14 -9
- package/dist/modifiers/encryption.js.map +1 -1
- package/dist/modifiers/internal/kinds.d.ts +12 -0
- package/dist/modifiers/internal/kinds.js +29 -0
- package/dist/modifiers/internal/kinds.js.map +1 -0
- package/dist/modifiers/internal/records.d.ts +29 -0
- package/dist/modifiers/internal/records.js +42 -0
- package/dist/modifiers/internal/records.js.map +1 -0
- package/dist/modifiers/localization.js +5 -1
- package/dist/modifiers/localization.js.map +1 -1
- package/dist/schema.js +1 -2
- package/dist/schema.js.map +1 -1
- package/dist/table.js +19 -5
- package/dist/table.js.map +1 -1
- package/dist/tests/codec_helpers.d.ts +6 -2
- package/dist/tests/codec_helpers.js +18 -14
- package/dist/tests/codec_helpers.js.map +1 -1
- package/dist/tests/common.test.js +38 -46
- package/dist/tests/common.test.js.map +1 -1
- package/dist/tests/cross_instance.test.js +27 -2
- package/dist/tests/cross_instance.test.js.map +1 -1
- package/dist/tests/database.test.js +246 -256
- package/dist/tests/database.test.js.map +1 -1
- package/dist/tests/helpers/other-instance.d.ts +1 -1
- package/dist/tests/helpers/other-instance.js +41 -9
- package/dist/tests/helpers/other-instance.js.map +1 -1
- package/dist/tests/integration.test.js +485 -485
- package/dist/tests/integration.test.js.map +1 -1
- package/dist/tests/model.test.js +293 -308
- package/dist/tests/model.test.js.map +1 -1
- package/dist/tests/modifiers/autodate.test.js +80 -86
- package/dist/tests/modifiers/autodate.test.js.map +1 -1
- package/dist/tests/modifiers/common.test.js +181 -195
- package/dist/tests/modifiers/common.test.js.map +1 -1
- package/dist/tests/modifiers/encryption.test.js +149 -155
- package/dist/tests/modifiers/encryption.test.js.map +1 -1
- package/dist/tests/modifiers/hash.test.js +91 -99
- package/dist/tests/modifiers/hash.test.js.map +1 -1
- package/dist/tests/modifiers/localization.test.js +186 -196
- package/dist/tests/modifiers/localization.test.js.map +1 -1
- package/dist/tests/relation.test.js +92 -97
- package/dist/tests/relation.test.js.map +1 -1
- package/dist/tests/schema.test.js +101 -106
- package/dist/tests/schema.test.js.map +1 -1
- package/dist/tests/table.test.js +124 -132
- package/dist/tests/table.test.js.map +1 -1
- package/package.json +14 -3
- package/skills/database-decorators-interface/cases.json +71 -0
package/dist/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":";;;AAqEA,kCAsBC;AA9DD;;GAEG;AACH,MAAa,mBAAmB;IACvB,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAC5B,iEAAiE,CAClE,CAAC;IAEK,SAAS,CAAU;IACnB,UAAU,CAAU;IACX,OAAO,GAAkC,EAAE,CAAC;IAC5C,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,GAA8B,EAAE,CAAC;IAChD,OAAO,GAAW,KAAK,CAAC;IACxB,SAAS,CAAkB;IAClC;;OAEG;IACI,MAAM,CAAe;IAE5B,QAAQ,CACN,GAAW,EACX,KAAa,EACb,kBAA2B,KAAK,EAChC,WAAoB,KAAK;QAEzB,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;;AAlCH,kDAmCC;AAED,SAAgB,WAAW,CACzB,MAAe,EACf,aAAuC,EACvC,UAAmB,IAAI;IAEvB,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAE5D,CAAC;IACd,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":";;;AAqEA,kCAsBC;AA9DD;;GAEG;AACH,MAAa,mBAAmB;IACvB,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAC5B,iEAAiE,CAClE,CAAC;IAEK,SAAS,CAAU;IACnB,UAAU,CAAU;IACX,OAAO,GAAkC,EAAE,CAAC;IAC5C,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,GAA8B,EAAE,CAAC;IAChD,OAAO,GAAW,KAAK,CAAC;IACxB,SAAS,CAAkB;IAClC;;OAEG;IACI,MAAM,CAAe;IAE5B,QAAQ,CACN,GAAW,EACX,KAAa,EACb,kBAA2B,KAAK,EAChC,WAAoB,KAAK;QAEzB,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;;AAlCH,kDAmCC;AAED,SAAgB,WAAW,CACzB,MAAe,EACf,aAAuC,EACvC,UAAmB,IAAI;IAEvB,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAE5D,CAAC;IACd,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,SAAS,GAAkB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,iBAAiB,GACrB,OAAO,IAAI,SAAS;QAClB,CAAC,CAAE,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAEtC;QAChB,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,QAAQ,GAAG,iBAAiB,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":";;;;;AAwBA,wCASC;AAjCD,8DAAiC;AAGjC,uEAA+E;AAG/E,qCAA8C;AAE9C,qCAA4D;AAC5D,+CAA6E;AAK7E;;;;;;;;;GASG;AACI,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,MAAM,GAAG,IAAA,2BAAkB,EAAC,QAAQ,CAAC,CAAC;IAC5C,IAAA,qBAAM,EAAC,MAAM,EAAE,oCAAoC,QAAQ,GAAG,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,2BAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAChD,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3B,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB,EAAE,MAAwB;IAC/D,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,IAAA,oBAAW,EAAC,UAAU,EAAE,4BAAmB,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAwB;IACrD,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,UAAU,EAAE,4BAAmB,CAAC,CAAC;QAC9D,UAAU,CAAC,SAAS,CAAC,GAAG;YACtB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC;SACzC,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,qBAAqB,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/model.js
CHANGED
|
@@ -16,8 +16,15 @@ function isCodec(type) {
|
|
|
16
16
|
return (typeof type === "object" &&
|
|
17
17
|
type !== null &&
|
|
18
18
|
!Array.isArray(type) &&
|
|
19
|
+
"decode" in type &&
|
|
19
20
|
typeof type.decode === "function");
|
|
20
21
|
}
|
|
22
|
+
function isRecord(value) {
|
|
23
|
+
return typeof value === "object" && value !== null;
|
|
24
|
+
}
|
|
25
|
+
function isInstanceIdProvider(value) {
|
|
26
|
+
return typeof value === "function";
|
|
27
|
+
}
|
|
21
28
|
function decodeFieldError(field, result) {
|
|
22
29
|
const message = result.left.map((e) => e.message).find(Boolean) ?? `invalid ${field}`;
|
|
23
30
|
return { field, message };
|
|
@@ -78,9 +85,7 @@ function BasicDataModel(dataType, tableName) {
|
|
|
78
85
|
const fields = metadata.fields;
|
|
79
86
|
const errors = [];
|
|
80
87
|
const partial = options?.partial === true;
|
|
81
|
-
const record =
|
|
82
|
-
? obj
|
|
83
|
-
: undefined;
|
|
88
|
+
const record = isRecord(obj) ? obj : undefined;
|
|
84
89
|
for (const [field, type] of Object.entries(fields)) {
|
|
85
90
|
if (!isCodec(type))
|
|
86
91
|
continue;
|
|
@@ -108,7 +113,7 @@ function BasicDataModel(dataType, tableName) {
|
|
|
108
113
|
* @returns Table class instance
|
|
109
114
|
*/
|
|
110
115
|
get(id) {
|
|
111
|
-
return this.table.get(id).then(Model.fromDatabase);
|
|
116
|
+
return this.table.get(id).then((row) => Model.fromDatabase(row));
|
|
112
117
|
}
|
|
113
118
|
/**
|
|
114
119
|
* Get multiple elements from the table using a given index.
|
|
@@ -120,7 +125,7 @@ function BasicDataModel(dataType, tableName) {
|
|
|
120
125
|
getBy(index, ...keys) {
|
|
121
126
|
return this.table
|
|
122
127
|
.getAll(keys.length === 1 ? keys[0] : keys, index)
|
|
123
|
-
.then((dataR) => dataR.map(Model.fromDatabase));
|
|
128
|
+
.then((dataR) => dataR.map((row) => Model.fromDatabase(row)));
|
|
124
129
|
}
|
|
125
130
|
/**
|
|
126
131
|
* Get all the elements from the table.
|
|
@@ -128,7 +133,8 @@ function BasicDataModel(dataType, tableName) {
|
|
|
128
133
|
* @returns Array of Table class instances.
|
|
129
134
|
*/
|
|
130
135
|
getAll() {
|
|
131
|
-
|
|
136
|
+
// SAFETY: Model.fromDatabase returns undefined only for a falsy row, and the rows of a table read are stored records, never null or undefined; the cast removes that undefined from the element type.
|
|
137
|
+
return this.table.then((dataR) => dataR.map((row) => Model.fromDatabase(row)));
|
|
132
138
|
}
|
|
133
139
|
/**
|
|
134
140
|
* Insert some data into the table.
|
|
@@ -158,8 +164,8 @@ function BasicDataModel(dataType, tableName) {
|
|
|
158
164
|
.insert(Array.isArray(obj) ? obj.map(converter) : converter(obj))
|
|
159
165
|
.run();
|
|
160
166
|
}
|
|
161
|
-
async update(
|
|
162
|
-
const parsed = parseUpdateArgs(
|
|
167
|
+
async update(...args) {
|
|
168
|
+
const parsed = parseUpdateArgs(args);
|
|
163
169
|
if (parsed.options?.validate) {
|
|
164
170
|
const result = Model.validate(parsed.data, { partial: true });
|
|
165
171
|
if (!result.ok)
|
|
@@ -175,6 +181,7 @@ function BasicDataModel(dataType, tableName) {
|
|
|
175
181
|
}
|
|
176
182
|
const instance = Model.fromPlainData(parsed.data);
|
|
177
183
|
(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.
|
|
178
185
|
const id = parsed.data[primaryKey];
|
|
179
186
|
(0, node_assert_1.default)(id !== undefined, "Missing primary key in object update.");
|
|
180
187
|
return this.table.get(id).update(Model.toDatabase(instance)).run();
|
|
@@ -195,28 +202,22 @@ const UNDEFINED_INSTANCE_KEY = Symbol("undefined-instance");
|
|
|
195
202
|
function cacheKeyOf(instanceId) {
|
|
196
203
|
if (instanceId === undefined)
|
|
197
204
|
return UNDEFINED_INSTANCE_KEY;
|
|
198
|
-
if (typeof instanceId === "symbol")
|
|
199
|
-
return instanceId;
|
|
200
205
|
return instanceId;
|
|
201
206
|
}
|
|
202
207
|
function makeValidationError(errors) {
|
|
203
208
|
const summary = errors.map((e) => `${e.field} (${e.message})`).join(", ");
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
209
|
+
return Object.assign(new Error(`validation failed: ${summary}`), { errors });
|
|
210
|
+
}
|
|
211
|
+
function isIdUpdate(args) {
|
|
212
|
+
return typeof args[0] === "string";
|
|
207
213
|
}
|
|
208
|
-
function parseUpdateArgs(
|
|
209
|
-
if (
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
data: objOrOptions,
|
|
213
|
-
options,
|
|
214
|
-
};
|
|
214
|
+
function parseUpdateArgs(args) {
|
|
215
|
+
if (isIdUpdate(args)) {
|
|
216
|
+
const [id, data, options] = args;
|
|
217
|
+
return { id, data, options };
|
|
215
218
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
options: objOrOptions,
|
|
219
|
-
};
|
|
219
|
+
const [data, options] = args;
|
|
220
|
+
return { data, options };
|
|
220
221
|
}
|
|
221
222
|
function schemaOf(cl) {
|
|
222
223
|
if (!cl.tableClass) {
|
|
@@ -236,14 +237,16 @@ function GetModel(cl, instanceId) {
|
|
|
236
237
|
(0, node_assert_1.default)(cache);
|
|
237
238
|
const key = cacheKeyOf(instanceId);
|
|
238
239
|
const cached = cache.get(key);
|
|
239
|
-
if (cached)
|
|
240
|
+
if (cached) {
|
|
241
|
+
// SAFETY: modelCache is private to this module, keyed by the class, and only this function fills it, with the `new cl(...)` result below, which is an M for that same cl.
|
|
240
242
|
return cached;
|
|
243
|
+
}
|
|
241
244
|
const model = new cl(schemaOf(cl).instance(instanceId));
|
|
242
245
|
cache.set(key, model);
|
|
243
246
|
return model;
|
|
244
247
|
}
|
|
245
248
|
exports.Model = (0, decorators_1.MakeParameterAndPropertyDecorator)((target, key, index, cl, instanceIdOrCallback) => {
|
|
246
|
-
if (
|
|
249
|
+
if (isInstanceIdProvider(instanceIdOrCallback)) {
|
|
247
250
|
(0, interface_api_1.SetParameterProvider)(target, key, index, (ctx) => {
|
|
248
251
|
return GetModel(cl, instanceIdOrCallback(ctx));
|
|
249
252
|
});
|
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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"}
|
|
@@ -45,19 +45,39 @@ export declare class ModifiersStaticMetadata {
|
|
|
45
45
|
export declare class ModifiersDynamicMetadata {
|
|
46
46
|
static key: symbol;
|
|
47
47
|
staticMeta: ModifiersStaticMetadata;
|
|
48
|
+
/**
|
|
49
|
+
* Values assigned to a field before its modifiers could lock them, by field
|
|
50
|
+
* name. Reads return them; `unlock` and `lock` assign them again.
|
|
51
|
+
*/
|
|
48
52
|
floating: Record<string, any>;
|
|
49
53
|
fields: Record<string, Record<string, any[]>>;
|
|
50
54
|
constructor(target: any);
|
|
51
|
-
canGet(field:
|
|
52
|
-
get(field:
|
|
53
|
-
canSet(field:
|
|
54
|
-
set(field:
|
|
55
|
+
canGet(field: PropertyKey): boolean;
|
|
56
|
+
get(field: PropertyKey, internal: InternalType): any;
|
|
57
|
+
canSet(field: PropertyKey): boolean;
|
|
58
|
+
set(field: PropertyKey, internal: InternalType, value: unknown): void;
|
|
55
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Builds a table instance from unlocked plain data: each key is assigned, so
|
|
62
|
+
* modifiers lock the fields they can. Then runs the `fromPlainData` event.
|
|
63
|
+
*/
|
|
56
64
|
export declare function fromPlainData<T extends Constructible>(rawObject: Record<string, any>, TableClass: T): InstanceType<T>;
|
|
65
|
+
/**
|
|
66
|
+
* Converts a table instance to unlocked plain data, without `_internal`. A
|
|
67
|
+
* field still locked comes out `undefined`. Then runs the `toPlainData` event.
|
|
68
|
+
*/
|
|
57
69
|
export declare function toPlainData<T extends {
|
|
58
70
|
constructor: any;
|
|
59
71
|
}>(object: T): Record<string, any>;
|
|
72
|
+
/**
|
|
73
|
+
* Builds a table instance from a stored record, its modified fields still
|
|
74
|
+
* locked in `_internal`. Then runs the `fromDatabase` event.
|
|
75
|
+
*/
|
|
60
76
|
export declare function fromDatabase<T extends Constructible>(rawObject: any, TableClass: T): InstanceType<T>;
|
|
77
|
+
/**
|
|
78
|
+
* Converts a table instance to the locked record to store, `_internal`
|
|
79
|
+
* included and floating values left out. Then runs the `toDatabase` event.
|
|
80
|
+
*/
|
|
61
81
|
export declare function toDatabase<T extends {
|
|
62
82
|
constructor: any;
|
|
63
83
|
}>(object: T): Record<string, any>;
|
package/dist/modifiers/common.js
CHANGED
|
@@ -13,6 +13,8 @@ exports.lock = lock;
|
|
|
13
13
|
exports.testValue = testValue;
|
|
14
14
|
exports.triggerEvent = triggerEvent;
|
|
15
15
|
const common_1 = require("../common");
|
|
16
|
+
const kinds_1 = require("./internal/kinds");
|
|
17
|
+
const records_1 = require("./internal/records");
|
|
16
18
|
exports.MixinSymbol = Symbol();
|
|
17
19
|
class Modifier {
|
|
18
20
|
meta;
|
|
@@ -57,30 +59,20 @@ class ContainerModifier extends TwoWayModifier {
|
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
exports.ContainerModifier = ContainerModifier;
|
|
60
|
-
function isWriteOnly(modifier) {
|
|
61
|
-
return "lock" in modifier && !("unlock" in modifier);
|
|
62
|
-
}
|
|
63
|
-
function isOnlyEvents(modifier) {
|
|
64
|
-
return !("lock" in modifier);
|
|
65
|
-
}
|
|
66
62
|
class ModifiersStaticMetadata {
|
|
67
63
|
static key = Symbol.for("@antelopejs/interface-database-decorators/ModifiersStaticMetadata@1");
|
|
68
64
|
fields = {};
|
|
69
65
|
events = new Map();
|
|
70
66
|
}
|
|
71
67
|
exports.ModifiersStaticMetadata = ModifiersStaticMetadata;
|
|
72
|
-
function withRef(internal, id, modifier, metaRef, callback) {
|
|
73
|
-
metaRef._ref = internal.meta[id];
|
|
74
|
-
const ret = callback(modifier);
|
|
75
|
-
if (metaRef._ref !== internal.meta[id]) {
|
|
76
|
-
internal.meta[id] = metaRef._ref;
|
|
77
|
-
}
|
|
78
|
-
return ret;
|
|
79
|
-
}
|
|
80
68
|
class ModifiersDynamicMetadata {
|
|
81
69
|
static key = Symbol.for("@antelopejs/interface-database-decorators/ModifiersDynamicMetadata@1");
|
|
82
70
|
staticMeta;
|
|
83
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Values assigned to a field before its modifiers could lock them, by field
|
|
73
|
+
* name. Reads return them; `unlock` and `lock` assign them again.
|
|
74
|
+
*/
|
|
75
|
+
floating = {};
|
|
84
76
|
fields = {};
|
|
85
77
|
constructor(target) {
|
|
86
78
|
this.staticMeta = (0, common_1.getMetadata)(target.constructor, ModifiersStaticMetadata);
|
|
@@ -89,58 +81,57 @@ class ModifiersDynamicMetadata {
|
|
|
89
81
|
}
|
|
90
82
|
}
|
|
91
83
|
canGet(field) {
|
|
92
|
-
const list = this.staticMeta
|
|
84
|
+
const list = (0, records_1.fieldsByKey)(this.staticMeta)[field];
|
|
93
85
|
const lastModifier = list[list.length - 1].modifier;
|
|
94
|
-
if (lastModifier.autolock) {
|
|
86
|
+
if ("autolock" in lastModifier && lastModifier.autolock) {
|
|
95
87
|
return true;
|
|
96
88
|
}
|
|
97
|
-
return (!isWriteOnly(lastModifier) &&
|
|
98
|
-
!list.some(({ id, modifier }) => !modifier.autounlock &&
|
|
89
|
+
return (!(0, kinds_1.isWriteOnly)(lastModifier) &&
|
|
90
|
+
!list.some(({ id, modifier }) => !("autounlock" in modifier && modifier.autounlock) &&
|
|
99
91
|
"unlock" in modifier &&
|
|
100
|
-
!(id in this
|
|
92
|
+
!(id in (0, records_1.unlockArgsOf)(this, field))));
|
|
101
93
|
}
|
|
102
94
|
get(field, internal) {
|
|
103
95
|
if (field in this.floating) {
|
|
104
|
-
return this
|
|
96
|
+
return (0, records_1.floatingByKey)(this)[field];
|
|
105
97
|
}
|
|
106
98
|
if (!this.canGet(field)) {
|
|
107
99
|
return;
|
|
108
100
|
}
|
|
109
|
-
const list = this.staticMeta
|
|
110
|
-
let value = internal
|
|
101
|
+
const list = (0, records_1.fieldsByKey)(this.staticMeta)[field];
|
|
102
|
+
let value = (0, records_1.dataByKey)(internal)[field];
|
|
111
103
|
for (const { id, modifier, metaRef } of list) {
|
|
112
|
-
if (
|
|
113
|
-
if (this
|
|
114
|
-
value = withRef(internal, id, modifier, metaRef, (modifier) => modifier.unlock(value, ...this
|
|
104
|
+
if ((0, kinds_1.isTwoWay)(modifier) && value !== undefined) {
|
|
105
|
+
if ((0, records_1.unlockArgsOf)(this, field)[id]) {
|
|
106
|
+
value = (0, records_1.withRef)(internal, id, modifier, metaRef, (modifier) => modifier.unlock(value, ...(0, records_1.unlockArgsOf)(this, field)[id]));
|
|
115
107
|
}
|
|
116
|
-
else if (modifier.autounlock) {
|
|
117
|
-
value = withRef(internal, id, modifier, metaRef, (modifier) => modifier.unlock(value));
|
|
108
|
+
else if ("autounlock" in modifier && modifier.autounlock) {
|
|
109
|
+
value = (0, records_1.withRef)(internal, id, modifier, metaRef, (modifier) => modifier.unlock(value));
|
|
118
110
|
}
|
|
119
111
|
}
|
|
120
112
|
}
|
|
121
113
|
return value;
|
|
122
114
|
}
|
|
123
115
|
canSet(field) {
|
|
124
|
-
const list = this.staticMeta
|
|
125
|
-
return !list.some(({ id, modifier }) => !modifier.autolock &&
|
|
116
|
+
const list = (0, records_1.fieldsByKey)(this.staticMeta)[field];
|
|
117
|
+
return !list.some(({ id, modifier }) => !("autolock" in modifier && modifier.autolock) &&
|
|
126
118
|
"lock" in modifier &&
|
|
127
|
-
!(id in this
|
|
119
|
+
!(id in (0, records_1.unlockArgsOf)(this, field)));
|
|
128
120
|
}
|
|
129
121
|
set(field, internal, value) {
|
|
130
122
|
if (!this.canSet(field)) {
|
|
131
|
-
this
|
|
123
|
+
(0, records_1.floatingByKey)(this)[field] = value;
|
|
132
124
|
return;
|
|
133
125
|
}
|
|
134
|
-
const list = this.staticMeta
|
|
135
|
-
// TODO: should maybe cache this
|
|
126
|
+
const list = (0, records_1.fieldsByKey)(this.staticMeta)[field];
|
|
136
127
|
const prevlist = [];
|
|
137
|
-
let prev = internal
|
|
128
|
+
let prev = (0, records_1.dataByKey)(internal)[field];
|
|
138
129
|
for (let i = 0; i < list.length - 1; ++i) {
|
|
139
130
|
const { id, modifier, metaRef } = list[i];
|
|
140
131
|
prevlist[i] = { id, modifier, metaRef, prev };
|
|
141
|
-
if (
|
|
142
|
-
if (this
|
|
143
|
-
prev = modifier.unlock(prev, ...this
|
|
132
|
+
if ((0, kinds_1.isTwoWay)(modifier)) {
|
|
133
|
+
if ((0, records_1.unlockArgsOf)(this, field)[id]) {
|
|
134
|
+
prev = modifier.unlock(prev, ...(0, records_1.unlockArgsOf)(this, field)[id]);
|
|
144
135
|
}
|
|
145
136
|
else {
|
|
146
137
|
prev = undefined;
|
|
@@ -153,12 +144,12 @@ class ModifiersDynamicMetadata {
|
|
|
153
144
|
});
|
|
154
145
|
for (let i = prevlist.length - 1; i >= 0; --i) {
|
|
155
146
|
const { id, modifier, metaRef, prev } = prevlist[i];
|
|
156
|
-
if (
|
|
157
|
-
value = withRef(internal, id, modifier, metaRef, (modifier) => modifier.lock(prev, value, ...(this
|
|
147
|
+
if ((0, kinds_1.isLocking)(modifier)) {
|
|
148
|
+
value = (0, records_1.withRef)(internal, id, modifier, metaRef, (modifier) => modifier.lock(prev, value, ...((0, records_1.unlockArgsOf)(this, field)[id] || [])));
|
|
158
149
|
}
|
|
159
150
|
}
|
|
160
|
-
internal
|
|
161
|
-
delete this
|
|
151
|
+
(0, records_1.dataByKey)(internal)[field] = value;
|
|
152
|
+
delete (0, records_1.floatingByKey)(this)[field];
|
|
162
153
|
}
|
|
163
154
|
}
|
|
164
155
|
exports.ModifiersDynamicMetadata = ModifiersDynamicMetadata;
|
|
@@ -171,21 +162,12 @@ function getInternal(object) {
|
|
|
171
162
|
}
|
|
172
163
|
return object._internal;
|
|
173
164
|
}
|
|
174
|
-
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
* - Complete data with encoded _internal field
|
|
178
|
-
* - ex: `{ plain: 'value', _internal: { [..] } }`
|
|
179
|
-
* - `Instance`: class instance
|
|
180
|
-
* - Complete data with prototype attached and accessors
|
|
181
|
-
* - ex: `Table { plain: 'value', special: (accessor) }`
|
|
182
|
-
* - `Plaindata`: unlocked plain object
|
|
183
|
-
* - Subset of existing data from locked object
|
|
184
|
-
* - ex: `{ plain: 'value', special: 'data' }`
|
|
165
|
+
/**
|
|
166
|
+
* Builds a table instance from unlocked plain data: each key is assigned, so
|
|
167
|
+
* modifiers lock the fields they can. Then runs the `fromPlainData` event.
|
|
185
168
|
*/
|
|
186
169
|
function fromPlainData(rawObject, TableClass) {
|
|
187
170
|
const shallowCopy = {};
|
|
188
|
-
// Attach prototype
|
|
189
171
|
Object.setPrototypeOf(shallowCopy, TableClass.prototype);
|
|
190
172
|
for (const [key, val] of Object.entries(rawObject)) {
|
|
191
173
|
shallowCopy[key] = val;
|
|
@@ -193,66 +175,72 @@ function fromPlainData(rawObject, TableClass) {
|
|
|
193
175
|
triggerEvent(shallowCopy, "fromPlainData", rawObject);
|
|
194
176
|
return shallowCopy;
|
|
195
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Converts a table instance to unlocked plain data, without `_internal`. A
|
|
180
|
+
* field still locked comes out `undefined`. Then runs the `toPlainData` event.
|
|
181
|
+
*/
|
|
196
182
|
function toPlainData(object) {
|
|
197
183
|
const metaTable = (0, common_1.getMetadata)(object.constructor, ModifiersStaticMetadata);
|
|
198
184
|
const result = { ...object };
|
|
199
|
-
|
|
185
|
+
if ("_internal" in result)
|
|
186
|
+
delete result._internal;
|
|
200
187
|
for (const field of Object.keys(metaTable.fields)) {
|
|
201
|
-
result[field] = object[field];
|
|
188
|
+
result[field] = object[field];
|
|
202
189
|
}
|
|
203
190
|
triggerEvent(object, "toPlainData", result);
|
|
204
191
|
return result;
|
|
205
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Builds a table instance from a stored record, its modified fields still
|
|
195
|
+
* locked in `_internal`. Then runs the `fromDatabase` event.
|
|
196
|
+
*/
|
|
206
197
|
function fromDatabase(rawObject, TableClass) {
|
|
207
|
-
// Generate Meta
|
|
208
198
|
const shallowCopy = { ...rawObject };
|
|
209
|
-
// Attach prototype
|
|
210
199
|
Object.setPrototypeOf(shallowCopy, TableClass.prototype);
|
|
211
200
|
triggerEvent(shallowCopy, "fromDatabase", rawObject);
|
|
212
201
|
return shallowCopy;
|
|
213
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Converts a table instance to the locked record to store, `_internal`
|
|
205
|
+
* included and floating values left out. Then runs the `toDatabase` event.
|
|
206
|
+
*/
|
|
214
207
|
function toDatabase(object) {
|
|
215
208
|
const result = { ...object };
|
|
216
209
|
triggerEvent(object, "toDatabase", result);
|
|
217
210
|
return result;
|
|
218
211
|
}
|
|
219
|
-
const ignoredEventNames = {
|
|
220
|
-
constructor: true,
|
|
221
|
-
lock: true,
|
|
222
|
-
unlock: true,
|
|
223
|
-
};
|
|
224
212
|
function attachModifier(TableClass, Modifier, field, options) {
|
|
225
213
|
const entry = {
|
|
226
214
|
id: Modifier.name,
|
|
227
215
|
modifier: new Modifier(),
|
|
228
216
|
metaRef: { _ref: {} },
|
|
229
217
|
};
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
self._ref
|
|
239
|
-
|
|
240
|
-
|
|
218
|
+
Object.assign(entry.modifier, {
|
|
219
|
+
meta: new Proxy(entry.metaRef, {
|
|
220
|
+
get: (self, p) => {
|
|
221
|
+
if (!self._ref)
|
|
222
|
+
return undefined;
|
|
223
|
+
return self._ref[p];
|
|
224
|
+
},
|
|
225
|
+
set: (self, p, v) => {
|
|
226
|
+
if (!self._ref)
|
|
227
|
+
self._ref = {};
|
|
228
|
+
return Reflect.set(self._ref, p, v, self._ref);
|
|
229
|
+
},
|
|
230
|
+
}),
|
|
241
231
|
});
|
|
242
|
-
entry.modifier
|
|
243
|
-
// Mark TableClass as special
|
|
232
|
+
Object.assign(entry.modifier, { options });
|
|
244
233
|
const metaTable = (0, common_1.getMetadata)(TableClass, ModifiersStaticMetadata);
|
|
245
|
-
if (!isOnlyEvents(entry.modifier)) {
|
|
246
|
-
// Add Modifier to TableClass[field] with options
|
|
234
|
+
if (!(0, kinds_1.isOnlyEvents)(entry.modifier)) {
|
|
247
235
|
if (field in metaTable.fields) {
|
|
248
|
-
const list = metaTable
|
|
236
|
+
const list = (0, records_1.fieldsByKey)(metaTable)[field];
|
|
249
237
|
const last = list[list.length - 1];
|
|
250
|
-
if (isWriteOnly(last.modifier)) {
|
|
251
|
-
if (isWriteOnly(entry.modifier)) {
|
|
252
|
-
throw new Error(`Attempted adding Modifier ${entry.id} on ${TableClass.name}.${field} but it already has a One-Way Modifier`);
|
|
238
|
+
if ((0, kinds_1.isWriteOnly)(last.modifier)) {
|
|
239
|
+
if ((0, kinds_1.isWriteOnly)(entry.modifier)) {
|
|
240
|
+
throw new Error(`Attempted adding Modifier ${entry.id} on ${TableClass.name}.${String(field)} but it already has a One-Way Modifier`);
|
|
253
241
|
}
|
|
254
242
|
else {
|
|
255
|
-
throw new Error(`Adding Modifier ${entry.id} on ${TableClass.name}.${field} after a One-Way Modifier, please review your ordering.`);
|
|
243
|
+
throw new Error(`Adding Modifier ${entry.id} on ${TableClass.name}.${String(field)} after a One-Way Modifier, please review your ordering.`);
|
|
256
244
|
}
|
|
257
245
|
}
|
|
258
246
|
else {
|
|
@@ -260,7 +248,7 @@ function attachModifier(TableClass, Modifier, field, options) {
|
|
|
260
248
|
}
|
|
261
249
|
}
|
|
262
250
|
else {
|
|
263
|
-
metaTable
|
|
251
|
+
(0, records_1.fieldsByKey)(metaTable)[field] = [entry];
|
|
264
252
|
Object.defineProperty(TableClass.prototype, field, {
|
|
265
253
|
get: function () {
|
|
266
254
|
return (0, common_1.getMetadata)(this, ModifiersDynamicMetadata).get(field, getInternal(this));
|
|
@@ -279,12 +267,12 @@ function attachModifier(TableClass, Modifier, field, options) {
|
|
|
279
267
|
});
|
|
280
268
|
}
|
|
281
269
|
for (const event of Object.getOwnPropertyNames(Modifier.prototype)) {
|
|
282
|
-
if (!(event in ignoredEventNames) &&
|
|
283
|
-
|
|
270
|
+
if (!(event in kinds_1.ignoredEventNames) &&
|
|
271
|
+
(0, kinds_1.isCallable)(Modifier.prototype[event])) {
|
|
284
272
|
if (!metaTable.events.has(event)) {
|
|
285
273
|
metaTable.events.set(event, []);
|
|
286
274
|
}
|
|
287
|
-
metaTable.
|
|
275
|
+
(0, records_1.eventsByKey)(metaTable).get(event)?.push([field, entry]);
|
|
288
276
|
}
|
|
289
277
|
}
|
|
290
278
|
}
|
|
@@ -294,27 +282,21 @@ function getModifiedFields(object, Modifier) {
|
|
|
294
282
|
}
|
|
295
283
|
function unlock(object, Modifier, fields, ...args) {
|
|
296
284
|
const metaTable = (0, common_1.getMetadata)(object.constructor, ModifiersStaticMetadata);
|
|
297
|
-
const usedFields = (fields ?? Object.keys(metaTable.fields)).filter((field) => metaTable
|
|
298
|
-
// Get metadata
|
|
285
|
+
const usedFields = (fields ?? Object.keys(metaTable.fields)).filter((field) => (0, records_1.fieldsByKey)(metaTable)[field]?.find(({ id }) => id === Modifier.name));
|
|
299
286
|
const meta = (0, common_1.getMetadata)(object, ModifiersDynamicMetadata);
|
|
300
|
-
// for each field set metadata[field][Modifier] to args
|
|
301
287
|
for (const field of usedFields) {
|
|
302
|
-
meta
|
|
288
|
+
(0, records_1.unlockArgsOf)(meta, field)[Modifier.name] = args;
|
|
303
289
|
if (field in meta.floating) {
|
|
304
|
-
|
|
305
|
-
object[field] = meta.floating[field];
|
|
290
|
+
object[field] = (0, records_1.floatingOf)(meta, field);
|
|
306
291
|
}
|
|
307
292
|
}
|
|
308
293
|
}
|
|
309
294
|
function unlockrequest(table, object, field, modifiers) {
|
|
310
|
-
const args = {};
|
|
311
|
-
for (const { modifier, args: modArgs } of modifiers) {
|
|
312
|
-
args[modifier.name] = modArgs;
|
|
313
|
-
}
|
|
295
|
+
const args = Object.fromEntries(modifiers.map(({ modifier, args: modArgs }) => [modifier.name, modArgs]));
|
|
314
296
|
const meta = object.key("_internal").key("meta");
|
|
315
297
|
const metaTable = (0, common_1.getMetadata)(table, ModifiersStaticMetadata);
|
|
316
|
-
return (metaTable
|
|
317
|
-
if (isWriteOnly(modifier)) {
|
|
298
|
+
return ((0, records_1.fieldsByKey)(metaTable)[field]?.reduce((data, { id, modifier }) => {
|
|
299
|
+
if ((0, kinds_1.isWriteOnly)(modifier) || !(0, kinds_1.isTwoWay)(modifier)) {
|
|
318
300
|
return data;
|
|
319
301
|
}
|
|
320
302
|
data = modifier.unlockrequest(data, meta.key(id), ...args[id]);
|
|
@@ -323,33 +305,29 @@ function unlockrequest(table, object, field, modifiers) {
|
|
|
323
305
|
}
|
|
324
306
|
function lock(object, Modifier, fields, ...args) {
|
|
325
307
|
const metaTable = (0, common_1.getMetadata)(object.constructor, ModifiersStaticMetadata);
|
|
326
|
-
const usedFields = (fields ?? Object.keys(metaTable.fields)).filter((field) => metaTable
|
|
327
|
-
// Get metadata
|
|
308
|
+
const usedFields = (fields ?? Object.keys(metaTable.fields)).filter((field) => (0, records_1.fieldsByKey)(metaTable)[field]?.find(({ id }) => id === Modifier.name));
|
|
328
309
|
const meta = (0, common_1.getMetadata)(object, ModifiersDynamicMetadata);
|
|
329
|
-
// for each field set metadata[field][Modifier] to args
|
|
330
310
|
for (const field of usedFields) {
|
|
331
311
|
const val = object[field];
|
|
332
|
-
meta
|
|
312
|
+
(0, records_1.unlockArgsOf)(meta, field)[Modifier.name] = args;
|
|
333
313
|
object[field] = val;
|
|
334
314
|
}
|
|
335
315
|
}
|
|
336
316
|
function testValue(object, field, value) {
|
|
337
317
|
const metaTable = (0, common_1.getMetadata)(object.constructor, ModifiersStaticMetadata);
|
|
338
|
-
// Get metadata
|
|
339
318
|
const meta = (0, common_1.getMetadata)(object, ModifiersDynamicMetadata);
|
|
340
319
|
const internal = getInternal(object);
|
|
341
|
-
const val = internal
|
|
342
|
-
for (const { id, modifier, metaRef } of metaTable
|
|
343
|
-
const args = meta
|
|
320
|
+
const val = (0, records_1.dataByKey)(internal)[field];
|
|
321
|
+
for (const { id, modifier, metaRef } of (0, records_1.fieldsByKey)(metaTable)[field]) {
|
|
322
|
+
const args = (0, records_1.unlockArgsOf)(meta, field)[id] ||
|
|
323
|
+
("autolock" in modifier && modifier.autolock ? [] : undefined);
|
|
344
324
|
if (!args)
|
|
345
325
|
return false;
|
|
346
|
-
if (isWriteOnly(modifier)) {
|
|
347
|
-
|
|
348
|
-
return withRef(internal, id, modifier, metaRef, (modifier) => modifier.test(val, value, ...args));
|
|
326
|
+
if ((0, kinds_1.isWriteOnly)(modifier)) {
|
|
327
|
+
return (0, records_1.withRef)(internal, id, modifier, metaRef, (modifier) => modifier.test(val, value, ...args));
|
|
349
328
|
}
|
|
350
|
-
if (
|
|
351
|
-
|
|
352
|
-
return withRef(internal, id, modifier, metaRef, (modifier) => modifier.unlock(val, ...args));
|
|
329
|
+
if ((0, kinds_1.isTwoWay)(modifier) && val !== undefined) {
|
|
330
|
+
return (0, records_1.withRef)(internal, id, modifier, metaRef, (modifier) => modifier.unlock(val, ...args));
|
|
353
331
|
}
|
|
354
332
|
}
|
|
355
333
|
return val === value;
|
|
@@ -364,7 +342,7 @@ function triggerEvent(object, event, ...args) {
|
|
|
364
342
|
if (!eventEntries)
|
|
365
343
|
return;
|
|
366
344
|
for (const [field, { id, modifier, metaRef }] of eventEntries) {
|
|
367
|
-
withRef(internal, id, modifier, metaRef, (modifier) => modifier[event](object, field, ...args));
|
|
345
|
+
(0, records_1.withRef)(internal, id, modifier, metaRef, (modifier) => modifier[event](object, field, ...args));
|
|
368
346
|
}
|
|
369
347
|
}
|
|
370
348
|
//# sourceMappingURL=common.js.map
|