@antelopejs/interface-data-api 0.0.2
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/LICENSE +190 -0
- package/README.md +45 -0
- package/dist/antelope.test.d.ts +2 -0
- package/dist/antelope.test.js +59 -0
- package/dist/antelope.test.js.map +1 -0
- package/dist/components.d.ts +72 -0
- package/dist/components.js +344 -0
- package/dist/components.js.map +1 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.js +217 -0
- package/dist/index.js.map +1 -0
- package/dist/metadata.d.ts +290 -0
- package/dist/metadata.js +444 -0
- package/dist/metadata.js.map +1 -0
- package/dist/tests/components/access_control.test.d.ts +1 -0
- package/dist/tests/components/access_control.test.js +138 -0
- package/dist/tests/components/access_control.test.js.map +1 -0
- package/dist/tests/components/listable.test.d.ts +1 -0
- package/dist/tests/components/listable.test.js +361 -0
- package/dist/tests/components/listable.test.js.map +1 -0
- package/dist/tests/components/mandatory.test.d.ts +1 -0
- package/dist/tests/components/mandatory.test.js +193 -0
- package/dist/tests/components/mandatory.test.js.map +1 -0
- package/dist/tests/components/per_action_access.test.d.ts +1 -0
- package/dist/tests/components/per_action_access.test.js +115 -0
- package/dist/tests/components/per_action_access.test.js.map +1 -0
- package/dist/tests/components/validator.test.d.ts +1 -0
- package/dist/tests/components/validator.test.js +178 -0
- package/dist/tests/components/validator.test.js.map +1 -0
- package/dist/tests/constants.d.ts +3 -0
- package/dist/tests/constants.js +7 -0
- package/dist/tests/constants.js.map +1 -0
- package/dist/tests/index/routes.test.d.ts +1 -0
- package/dist/tests/index/routes.test.js +210 -0
- package/dist/tests/index/routes.test.js.map +1 -0
- package/dist/tests/integration.test.d.ts +1 -0
- package/dist/tests/integration.test.js +838 -0
- package/dist/tests/integration.test.js.map +1 -0
- package/dist/tests/utils.d.ts +12 -0
- package/dist/tests/utils.js +70 -0
- package/dist/tests/utils.js.map +1 -0
- package/package.json +78 -0
package/dist/metadata.js
ADDED
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModifierKey = exports.ModelReference = exports.Filter = exports.Validator = exports.Foreign = exports.Sortable = exports.Optional = exports.Mandatory = exports.Listable = exports.Access = exports.DataAPIMeta = exports.AccessMode = void 0;
|
|
4
|
+
const interface_core_1 = require("@antelopejs/interface-core");
|
|
5
|
+
const decorators_1 = require("@antelopejs/interface-core/decorators");
|
|
6
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
7
|
+
/**
|
|
8
|
+
* Field access mode enum.
|
|
9
|
+
*/
|
|
10
|
+
var AccessMode;
|
|
11
|
+
(function (AccessMode) {
|
|
12
|
+
AccessMode[AccessMode["ReadOnly"] = 1] = "ReadOnly";
|
|
13
|
+
AccessMode[AccessMode["WriteOnly"] = 2] = "WriteOnly";
|
|
14
|
+
AccessMode[AccessMode["ReadWrite"] = 3] = "ReadWrite";
|
|
15
|
+
})(AccessMode || (exports.AccessMode = AccessMode = {}));
|
|
16
|
+
/**
|
|
17
|
+
* Metadata Class containing the DataAPI information.
|
|
18
|
+
*/
|
|
19
|
+
class DataAPIMeta {
|
|
20
|
+
target;
|
|
21
|
+
/**
|
|
22
|
+
* Key symbol.
|
|
23
|
+
*/
|
|
24
|
+
static key = Symbol();
|
|
25
|
+
filters = {};
|
|
26
|
+
/**
|
|
27
|
+
* Fields information.
|
|
28
|
+
*/
|
|
29
|
+
fields = {};
|
|
30
|
+
/**
|
|
31
|
+
* Fields to pluck in listing endpoints.
|
|
32
|
+
*/
|
|
33
|
+
pluck = {};
|
|
34
|
+
/**
|
|
35
|
+
* Key of the DataAPI class containing a database table instance.
|
|
36
|
+
*/
|
|
37
|
+
modelKey;
|
|
38
|
+
/**
|
|
39
|
+
* Keys of the DataAPI class containing database modifier keys.
|
|
40
|
+
*/
|
|
41
|
+
modifierKeys = new Map();
|
|
42
|
+
/**
|
|
43
|
+
* Schema name where the table is registered.
|
|
44
|
+
*/
|
|
45
|
+
schemaName;
|
|
46
|
+
/**
|
|
47
|
+
* Database Schema class.
|
|
48
|
+
*/
|
|
49
|
+
tableClass;
|
|
50
|
+
/**
|
|
51
|
+
* Database Schema table name.
|
|
52
|
+
*/
|
|
53
|
+
tableName;
|
|
54
|
+
/**
|
|
55
|
+
* Readable fields.
|
|
56
|
+
*/
|
|
57
|
+
readable = {};
|
|
58
|
+
/**
|
|
59
|
+
* Writeable fields.
|
|
60
|
+
*/
|
|
61
|
+
writable = {};
|
|
62
|
+
/**
|
|
63
|
+
* Registered DataAPI endpoints.
|
|
64
|
+
*/
|
|
65
|
+
endpoints = {};
|
|
66
|
+
constructor(target) {
|
|
67
|
+
this.target = target;
|
|
68
|
+
}
|
|
69
|
+
inherit(parent) {
|
|
70
|
+
const merge = (src, dst) => {
|
|
71
|
+
for (const key in src) {
|
|
72
|
+
if (!(key in dst)) {
|
|
73
|
+
dst[key] = src[key];
|
|
74
|
+
}
|
|
75
|
+
else if (Array.isArray(dst[key])) {
|
|
76
|
+
dst[key].push(...src[key]);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
merge(parent.filters, this.filters);
|
|
81
|
+
merge(parent.fields, this.fields);
|
|
82
|
+
for (const [key, list] of Object.entries(parent.pluck)) {
|
|
83
|
+
this.pluck[key] = new Set(list);
|
|
84
|
+
}
|
|
85
|
+
if (!("modelKey" in this)) {
|
|
86
|
+
this.modelKey = parent.modelKey;
|
|
87
|
+
}
|
|
88
|
+
for (const key of parent.modifierKeys.keys()) {
|
|
89
|
+
if (!this.modifierKeys.has(key)) {
|
|
90
|
+
const value = parent.modifierKeys.get(key);
|
|
91
|
+
if (value !== undefined)
|
|
92
|
+
this.modifierKeys.set(key, value);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this.recomputeAccess();
|
|
96
|
+
merge(parent.endpoints, this.endpoints);
|
|
97
|
+
this.tableClass = parent.tableClass;
|
|
98
|
+
this.tableName = parent.tableName;
|
|
99
|
+
this.schemaName = parent.schemaName;
|
|
100
|
+
}
|
|
101
|
+
field(name) {
|
|
102
|
+
if (!(name in this.fields)) {
|
|
103
|
+
this.fields[name] = {};
|
|
104
|
+
}
|
|
105
|
+
return this.fields[name];
|
|
106
|
+
}
|
|
107
|
+
recomputeListable() {
|
|
108
|
+
for (const set of Object.values(this.pluck)) {
|
|
109
|
+
set.clear();
|
|
110
|
+
}
|
|
111
|
+
for (const [_, field] of Object.entries(this.fields)) {
|
|
112
|
+
if (field.listable) {
|
|
113
|
+
for (const [mode, names] of Object.entries(field.listable)) {
|
|
114
|
+
if (!(mode in this.pluck)) {
|
|
115
|
+
this.pluck[mode] = new Set();
|
|
116
|
+
}
|
|
117
|
+
for (const name of names) {
|
|
118
|
+
this.pluck[mode].add(name);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
recomputeAccess() {
|
|
125
|
+
for (const key of Object.keys(this.readable)) {
|
|
126
|
+
delete this.readable[key];
|
|
127
|
+
}
|
|
128
|
+
for (const key of Object.keys(this.writable)) {
|
|
129
|
+
delete this.writable[key];
|
|
130
|
+
}
|
|
131
|
+
const actions = new Set(["_default"]);
|
|
132
|
+
for (const field of Object.values(this.fields)) {
|
|
133
|
+
if (field.modeOverrides) {
|
|
134
|
+
for (const action of Object.keys(field.modeOverrides)) {
|
|
135
|
+
actions.add(action);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
for (const action of actions) {
|
|
140
|
+
this.readable[action] = { getters: [], props: [] };
|
|
141
|
+
this.writable[action] = { setters: [], props: [] };
|
|
142
|
+
}
|
|
143
|
+
for (const [key, field] of Object.entries(this.fields)) {
|
|
144
|
+
for (const action of actions) {
|
|
145
|
+
const effectiveMode = action === "_default"
|
|
146
|
+
? field.mode
|
|
147
|
+
: (field.modeOverrides?.[action] ?? field.mode);
|
|
148
|
+
if (!effectiveMode) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (effectiveMode & AccessMode.ReadOnly) {
|
|
152
|
+
const target = field.desc?.get ? "getters" : "props";
|
|
153
|
+
this.readable[action][target].push([key, field]);
|
|
154
|
+
}
|
|
155
|
+
if (effectiveMode & AccessMode.WriteOnly) {
|
|
156
|
+
const target = field.desc?.set ? "setters" : "props";
|
|
157
|
+
this.writable[action][target].push([key, field]);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Sets the access mode of the given field.
|
|
164
|
+
*
|
|
165
|
+
* @param name Field name
|
|
166
|
+
* @param mode Access mode
|
|
167
|
+
*/
|
|
168
|
+
setMode(name, mode, overrides) {
|
|
169
|
+
const field = this.field(name);
|
|
170
|
+
field.mode = mode;
|
|
171
|
+
field.modeOverrides = overrides;
|
|
172
|
+
this.recomputeAccess();
|
|
173
|
+
return this;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Sets whether a field should be included in list endpoints.
|
|
177
|
+
*
|
|
178
|
+
* @param name Field name
|
|
179
|
+
* @param requiredFields Boolean or table field list
|
|
180
|
+
* @param mode List mode (default: 'list')
|
|
181
|
+
*/
|
|
182
|
+
setListable(name, requiredFields, mode = "list") {
|
|
183
|
+
const field = this.field(name);
|
|
184
|
+
const names = typeof requiredFields === "boolean"
|
|
185
|
+
? requiredFields
|
|
186
|
+
? [name]
|
|
187
|
+
: []
|
|
188
|
+
: requiredFields;
|
|
189
|
+
if (!field.listable) {
|
|
190
|
+
field.listable = {};
|
|
191
|
+
}
|
|
192
|
+
field.listable[mode] = names;
|
|
193
|
+
this.recomputeListable();
|
|
194
|
+
return this;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Sets whether or not this field must be present in requests for the given method.
|
|
198
|
+
*
|
|
199
|
+
* @param name Field name
|
|
200
|
+
* @param modes DataAPI methods
|
|
201
|
+
*/
|
|
202
|
+
setMandatory(name, modes) {
|
|
203
|
+
this.field(name).mandatory = new Set(modes);
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Sets whether or not this field can be used to sort in list endpoints.
|
|
208
|
+
*
|
|
209
|
+
* @param name Field name
|
|
210
|
+
* @param active Sortable
|
|
211
|
+
* @param noIndex Ignore database indexes
|
|
212
|
+
* @returns
|
|
213
|
+
*/
|
|
214
|
+
setSortable(name, active, noIndex) {
|
|
215
|
+
this.field(name).sortable = active ? { indexed: !noIndex } : undefined;
|
|
216
|
+
return this;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Declares a field to be a foreign key.
|
|
220
|
+
*
|
|
221
|
+
* @param name Field name
|
|
222
|
+
* @param table Other table
|
|
223
|
+
* @param index Other table index
|
|
224
|
+
* @param multi Index is a multi index
|
|
225
|
+
*/
|
|
226
|
+
setForeign(name, table, index, multi, pluck) {
|
|
227
|
+
const databaseSchema = (0, interface_database_decorators_1.getTablesForSchema)(this.schemaName);
|
|
228
|
+
if (!databaseSchema)
|
|
229
|
+
throw new Error(`Schema "${this.schemaName}" not found`);
|
|
230
|
+
if (typeof table === "string") {
|
|
231
|
+
this.field(name).foreign = [
|
|
232
|
+
table,
|
|
233
|
+
databaseSchema[table],
|
|
234
|
+
index,
|
|
235
|
+
multi || undefined,
|
|
236
|
+
pluck || undefined,
|
|
237
|
+
];
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
const tableName = Object.entries(databaseSchema).find(([, table_]) => table_ === table)?.[0];
|
|
241
|
+
if (!tableName) {
|
|
242
|
+
throw new Error(`Unable to infer foreign table name for field "${name}"`);
|
|
243
|
+
}
|
|
244
|
+
this.field(name).foreign = [
|
|
245
|
+
tableName,
|
|
246
|
+
table,
|
|
247
|
+
index,
|
|
248
|
+
multi || undefined,
|
|
249
|
+
pluck || undefined,
|
|
250
|
+
];
|
|
251
|
+
}
|
|
252
|
+
return this;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Set the validation function of a field.
|
|
256
|
+
*
|
|
257
|
+
* @param name Field name
|
|
258
|
+
* @param validator Value validator callback
|
|
259
|
+
*/
|
|
260
|
+
setValidator(name, validator) {
|
|
261
|
+
this.field(name).validator = validator;
|
|
262
|
+
return this;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Updates the known field descriptor of this field.
|
|
266
|
+
*
|
|
267
|
+
* @param name Field name
|
|
268
|
+
* @param desc Field descriptor
|
|
269
|
+
*/
|
|
270
|
+
setDescriptor(name, desc) {
|
|
271
|
+
this.field(name).desc = desc;
|
|
272
|
+
return this;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Creates a filter.
|
|
276
|
+
*
|
|
277
|
+
* @param name Filter name
|
|
278
|
+
* @param func Filter callback
|
|
279
|
+
* @param index
|
|
280
|
+
*/
|
|
281
|
+
setFilter(name, func, useIndex) {
|
|
282
|
+
this.filters[name] = func;
|
|
283
|
+
const field = this.field(name);
|
|
284
|
+
if (useIndex) {
|
|
285
|
+
const tableMeta = (0, interface_database_decorators_1.getMetadata)(this.tableClass, interface_database_decorators_1.DatumStaticMetadata);
|
|
286
|
+
const index = tableMeta.indexes[field.dbName ?? name];
|
|
287
|
+
if (index && index.length === 1) {
|
|
288
|
+
field.indexable = true;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
field.indexable = false;
|
|
293
|
+
}
|
|
294
|
+
return this;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Sets the key containing the database table instance.
|
|
298
|
+
*
|
|
299
|
+
* @param name Field name
|
|
300
|
+
*/
|
|
301
|
+
setModelKey(name) {
|
|
302
|
+
this.modelKey = name;
|
|
303
|
+
return this;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Sets the key containing the key for the given database modifier.
|
|
307
|
+
*
|
|
308
|
+
* @param name Field name
|
|
309
|
+
* @param modifierClass Modifier
|
|
310
|
+
*/
|
|
311
|
+
setModifierKey(name, modifierClass) {
|
|
312
|
+
this.modifierKeys.set(modifierClass, name);
|
|
313
|
+
return this;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Adds the given endpoint to the DataAPI
|
|
317
|
+
*
|
|
318
|
+
* @param key field name
|
|
319
|
+
* @param endpoint callback information
|
|
320
|
+
*/
|
|
321
|
+
addEndpoint(key, endpoint) {
|
|
322
|
+
if (!endpoint) {
|
|
323
|
+
delete this.endpoints[key];
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
this.endpoints[key] = endpoint;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
exports.DataAPIMeta = DataAPIMeta;
|
|
331
|
+
/**
|
|
332
|
+
* Sets the access mode of a DataAPI field.
|
|
333
|
+
*
|
|
334
|
+
* @param mode Access mode
|
|
335
|
+
*/
|
|
336
|
+
exports.Access = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, mode, overrides) => {
|
|
337
|
+
(0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
|
|
338
|
+
.setDescriptor(key, desc)
|
|
339
|
+
.setMode(key, mode, overrides);
|
|
340
|
+
});
|
|
341
|
+
/**
|
|
342
|
+
* Sets the listable state of a DataAPI field.
|
|
343
|
+
*
|
|
344
|
+
* Listable fields will be included in list method calls.
|
|
345
|
+
*
|
|
346
|
+
* Listable getters must specificy the list of in-database field names they use.
|
|
347
|
+
*
|
|
348
|
+
* @param requiredFields Boolean or table field list
|
|
349
|
+
*/
|
|
350
|
+
exports.Listable = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, requiredFields, mode) => {
|
|
351
|
+
(0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
|
|
352
|
+
.setDescriptor(key, desc)
|
|
353
|
+
.setListable(key, typeof requiredFields !== "undefined" ? requiredFields : true, mode);
|
|
354
|
+
});
|
|
355
|
+
/**
|
|
356
|
+
* Declares a field to be mandatory in calls to the given methods.
|
|
357
|
+
*
|
|
358
|
+
* @param modes DataAPI methods (ex: `new`, `edit`)
|
|
359
|
+
*/
|
|
360
|
+
exports.Mandatory = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, ...modes) => {
|
|
361
|
+
(0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
|
|
362
|
+
.setDescriptor(key, desc)
|
|
363
|
+
.setMandatory(key, modes);
|
|
364
|
+
});
|
|
365
|
+
/**
|
|
366
|
+
* Declares a field as being optional.
|
|
367
|
+
*
|
|
368
|
+
* This must be used on fields with no other decorators.
|
|
369
|
+
*/
|
|
370
|
+
exports.Optional = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc) => {
|
|
371
|
+
(0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
|
|
372
|
+
.setDescriptor(key, desc)
|
|
373
|
+
.setMandatory(key, []);
|
|
374
|
+
});
|
|
375
|
+
/**
|
|
376
|
+
* Declares a field to be useable as the sorting key.
|
|
377
|
+
*
|
|
378
|
+
* @param options Options
|
|
379
|
+
*/
|
|
380
|
+
exports.Sortable = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, options) => {
|
|
381
|
+
(0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
|
|
382
|
+
.setDescriptor(key, desc)
|
|
383
|
+
.setSortable(key, true, options?.noIndex ?? false);
|
|
384
|
+
});
|
|
385
|
+
/**
|
|
386
|
+
* Declares a field to be a foreign key.
|
|
387
|
+
*
|
|
388
|
+
* @param table Other table
|
|
389
|
+
* @param index Other table index
|
|
390
|
+
* @param multi Index is a multi index
|
|
391
|
+
*/
|
|
392
|
+
exports.Foreign = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, table, index, multi, pluck) => {
|
|
393
|
+
(0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
|
|
394
|
+
.setDescriptor(key, desc)
|
|
395
|
+
.setForeign(key, table, index, multi, pluck);
|
|
396
|
+
});
|
|
397
|
+
/**
|
|
398
|
+
* Set the validation function of a field.
|
|
399
|
+
*
|
|
400
|
+
* @param validator Value validator callback
|
|
401
|
+
*/
|
|
402
|
+
exports.Validator = (0, decorators_1.MakeMethodAndPropertyDecorator)((target, key, desc, validator) => {
|
|
403
|
+
(0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta)
|
|
404
|
+
.setDescriptor(key, desc)
|
|
405
|
+
.setValidator(key, validator);
|
|
406
|
+
});
|
|
407
|
+
const DEFAULT_FILTER_OPERATORS = {
|
|
408
|
+
eq: (proxy, value) => proxy.eq(value),
|
|
409
|
+
ne: (proxy, value) => proxy.ne(value),
|
|
410
|
+
gt: (proxy, value) => proxy.gt(value),
|
|
411
|
+
ge: (proxy, value) => proxy.ge(value),
|
|
412
|
+
lt: (proxy, value) => proxy.lt(value),
|
|
413
|
+
le: (proxy, value) => proxy.le(value),
|
|
414
|
+
};
|
|
415
|
+
function applyDefaultFilterMode(proxy, value, mode) {
|
|
416
|
+
return DEFAULT_FILTER_OPERATORS[mode](proxy, value);
|
|
417
|
+
}
|
|
418
|
+
function createDefaultFilter() {
|
|
419
|
+
return (_context, proxy, _key, value, mode) => applyDefaultFilterMode(proxy, value, mode);
|
|
420
|
+
}
|
|
421
|
+
const FilterDecoratorFactory = (0, decorators_1.MakePropertyDecorator)((target, key, func, useIndex) => {
|
|
422
|
+
(0, interface_core_1.GetMetadata)(key ? target.constructor : target, DataAPIMeta).setFilter(key, func || createDefaultFilter(), useIndex === undefined ? !func : useIndex);
|
|
423
|
+
});
|
|
424
|
+
/**
|
|
425
|
+
* Creates a field filter.
|
|
426
|
+
*
|
|
427
|
+
* @param func Custom filter function
|
|
428
|
+
*/
|
|
429
|
+
exports.Filter = FilterDecoratorFactory;
|
|
430
|
+
/**
|
|
431
|
+
* Sets which field will contain the reference to the database model instance.
|
|
432
|
+
*/
|
|
433
|
+
exports.ModelReference = (0, decorators_1.MakePropertyDecorator)((target, key) => {
|
|
434
|
+
(0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta).setModelKey(key);
|
|
435
|
+
});
|
|
436
|
+
/**
|
|
437
|
+
* Sets which field will contain the key for the given database modifier.
|
|
438
|
+
*
|
|
439
|
+
* @param modifierClass Modifier
|
|
440
|
+
*/
|
|
441
|
+
exports.ModifierKey = (0, decorators_1.MakePropertyDecorator)((target, key, modifierClass) => {
|
|
442
|
+
(0, interface_core_1.GetMetadata)(target.constructor, DataAPIMeta).setModifierKey(key, modifierClass);
|
|
443
|
+
});
|
|
444
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
17
|
+
const interface_data_api_1 = require("@antelopejs/interface-data-api");
|
|
18
|
+
const metadata_1 = require("@antelopejs/interface-data-api/metadata");
|
|
19
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
20
|
+
const chai_1 = require("chai");
|
|
21
|
+
const utils_1 = require("../utils");
|
|
22
|
+
const currentTestName = node_path_1.default
|
|
23
|
+
.basename(__filename)
|
|
24
|
+
.replace(/\.test\.(ts|js)$/, "");
|
|
25
|
+
const userTableName = `users-${currentTestName}`;
|
|
26
|
+
const schemaName = "default";
|
|
27
|
+
let User = class User extends interface_database_decorators_1.Table {
|
|
28
|
+
};
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, interface_database_decorators_1.Index)(),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], User.prototype, "email", void 0);
|
|
33
|
+
User = __decorate([
|
|
34
|
+
(0, interface_database_decorators_1.RegisterTable)(userTableName, schemaName)
|
|
35
|
+
], User);
|
|
36
|
+
class UserModel extends (0, interface_database_decorators_1.BasicDataModel)(User, userTableName) {
|
|
37
|
+
}
|
|
38
|
+
let database;
|
|
39
|
+
const defaultUserDataset = {
|
|
40
|
+
name: "Jean Test",
|
|
41
|
+
email: "jean.test@email.com",
|
|
42
|
+
age: 30,
|
|
43
|
+
password: "very-secure-qwerty123",
|
|
44
|
+
};
|
|
45
|
+
describe("Field Access Control", () => {
|
|
46
|
+
it("read in a read write field", async () => await readInReadWriteField());
|
|
47
|
+
it("write in a read write field", async () => await writeInReadWriteField());
|
|
48
|
+
it("read in a write only field", async () => await readInWriteOnlyField());
|
|
49
|
+
it("write in a read only field", async () => await writeInReadOnlyField());
|
|
50
|
+
it("read in a read only field", async () => await readInReadOnlyField());
|
|
51
|
+
it("write in a write only field", async () => await writeInWriteOnlyField());
|
|
52
|
+
after(async () => { });
|
|
53
|
+
});
|
|
54
|
+
async function _createDataController(testName, user) {
|
|
55
|
+
let _AccessTestAPI = class _AccessTestAPI extends (0, interface_data_api_1.DataController)(User, interface_data_api_1.DefaultRoutes.All, (0, interface_api_1.Controller)(`/${testName}`)) {
|
|
56
|
+
};
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, metadata_1.ModelReference)(),
|
|
59
|
+
(0, interface_database_decorators_1.Model)(UserModel),
|
|
60
|
+
__metadata("design:type", UserModel)
|
|
61
|
+
], _AccessTestAPI.prototype, "userModel", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, metadata_1.Access)(metadata_1.AccessMode.ReadOnly),
|
|
64
|
+
__metadata("design:type", String)
|
|
65
|
+
], _AccessTestAPI.prototype, "_id", void 0);
|
|
66
|
+
__decorate([
|
|
67
|
+
(0, metadata_1.Access)(metadata_1.AccessMode.WriteOnly),
|
|
68
|
+
__metadata("design:type", String)
|
|
69
|
+
], _AccessTestAPI.prototype, "password", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
(0, metadata_1.Access)(metadata_1.AccessMode.ReadWrite),
|
|
72
|
+
__metadata("design:type", String)
|
|
73
|
+
], _AccessTestAPI.prototype, "name", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, metadata_1.Access)(metadata_1.AccessMode.ReadOnly),
|
|
76
|
+
__metadata("design:type", Number)
|
|
77
|
+
], _AccessTestAPI.prototype, "age", void 0);
|
|
78
|
+
__decorate([
|
|
79
|
+
(0, metadata_1.Access)(metadata_1.AccessMode.ReadWrite),
|
|
80
|
+
__metadata("design:type", String)
|
|
81
|
+
], _AccessTestAPI.prototype, "email", void 0);
|
|
82
|
+
_AccessTestAPI = __decorate([
|
|
83
|
+
(0, interface_data_api_1.RegisterDataController)()
|
|
84
|
+
], _AccessTestAPI);
|
|
85
|
+
await (0, interface_database_decorators_1.CreateDatabaseSchemaInstance)(schemaName);
|
|
86
|
+
database = (0, utils_1.getSchemaInstance)(schemaName);
|
|
87
|
+
const userModel = new UserModel(database);
|
|
88
|
+
const insertResult = await userModel.insert(user);
|
|
89
|
+
return { id: insertResult[0], userModel };
|
|
90
|
+
}
|
|
91
|
+
async function readInReadWriteField() {
|
|
92
|
+
const { id } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
|
|
93
|
+
const response = await (0, utils_1.getRequest)((0, utils_1.getFunctionName)(), { id });
|
|
94
|
+
(0, chai_1.expect)(response.status).to.equal(200);
|
|
95
|
+
const data = (await response.json());
|
|
96
|
+
(0, chai_1.expect)(data.name).to.equal(defaultUserDataset.name);
|
|
97
|
+
(0, chai_1.expect)(data.age).to.equal(defaultUserDataset.age);
|
|
98
|
+
(0, chai_1.expect)(data.email).to.equal(defaultUserDataset.email);
|
|
99
|
+
(0, chai_1.expect)(data.password).to.equal(undefined);
|
|
100
|
+
}
|
|
101
|
+
async function writeInReadWriteField() {
|
|
102
|
+
const { id, userModel } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
|
|
103
|
+
const replacementEmail = "bob.test@email.com";
|
|
104
|
+
const response = await (0, utils_1.editRequest)((0, utils_1.getFunctionName)(), { email: replacementEmail }, { id });
|
|
105
|
+
(0, chai_1.expect)(response.status).to.equal(200);
|
|
106
|
+
const user = await userModel.get(id);
|
|
107
|
+
(0, chai_1.expect)(user?.email).to.equal(replacementEmail);
|
|
108
|
+
}
|
|
109
|
+
async function readInWriteOnlyField() {
|
|
110
|
+
const { id } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
|
|
111
|
+
const response = await (0, utils_1.getRequest)((0, utils_1.getFunctionName)(), { id });
|
|
112
|
+
(0, chai_1.expect)(response.status).to.equal(200);
|
|
113
|
+
const data = (await response.json());
|
|
114
|
+
(0, chai_1.expect)(data.password).to.equal(undefined);
|
|
115
|
+
}
|
|
116
|
+
async function writeInReadOnlyField() {
|
|
117
|
+
const { id, userModel } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
|
|
118
|
+
const response = await (0, utils_1.editRequest)((0, utils_1.getFunctionName)(), { age: (defaultUserDataset.age ?? 0) + 5 }, { id });
|
|
119
|
+
(0, chai_1.expect)(response.status).to.equal(200);
|
|
120
|
+
const user = await userModel.get(id);
|
|
121
|
+
(0, chai_1.expect)(user?.age).to.equal(defaultUserDataset.age);
|
|
122
|
+
}
|
|
123
|
+
async function readInReadOnlyField() {
|
|
124
|
+
const { id } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
|
|
125
|
+
const response = await (0, utils_1.getRequest)((0, utils_1.getFunctionName)(), { id });
|
|
126
|
+
(0, chai_1.expect)(response.status).to.equal(200);
|
|
127
|
+
const data = (await response.json());
|
|
128
|
+
(0, chai_1.expect)(data.email).to.equal(defaultUserDataset.email);
|
|
129
|
+
}
|
|
130
|
+
async function writeInWriteOnlyField() {
|
|
131
|
+
const { id, userModel } = await _createDataController((0, utils_1.getFunctionName)(), defaultUserDataset);
|
|
132
|
+
const replacementPassword = "new-password";
|
|
133
|
+
const response = await (0, utils_1.editRequest)((0, utils_1.getFunctionName)(), { password: replacementPassword }, { id });
|
|
134
|
+
(0, chai_1.expect)(response.status).to.equal(200);
|
|
135
|
+
const user = await userModel.get(id);
|
|
136
|
+
(0, chai_1.expect)(user?.password).to.equal(replacementPassword);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=access_control.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access_control.test.js","sourceRoot":"","sources":["../../../src/tests/components/access_control.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|