@antelopejs/interface-data-api 0.6.2 → 0.7.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 +28 -7
- package/dist/components.d.ts +6 -6
- package/dist/components.js +1 -1
- package/dist/components.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/internal/deferred-joined-stream.js +11 -5
- package/dist/internal/deferred-joined-stream.js.map +1 -1
- package/dist/internal/field-types.d.ts +12 -5
- package/dist/internal/filters.js +1 -1
- package/dist/internal/filters.js.map +1 -1
- package/dist/internal/guards.d.ts +2 -2
- package/dist/internal/guards.js +5 -0
- package/dist/internal/guards.js.map +1 -1
- package/dist/internal/properties.d.ts +2 -2
- package/dist/internal/properties.js +24 -13
- package/dist/internal/properties.js.map +1 -1
- package/dist/internal/prototypes.d.ts +13 -5
- package/dist/internal/prototypes.js +21 -9
- package/dist/internal/prototypes.js.map +1 -1
- package/dist/internal/read-properties.d.ts +2 -2
- package/dist/internal/read-properties.js +8 -5
- package/dist/internal/read-properties.js.map +1 -1
- package/dist/internal/tables.d.ts +6 -7
- package/dist/internal/tables.js +1 -3
- package/dist/internal/tables.js.map +1 -1
- package/dist/internal/validation.d.ts +3 -3
- package/dist/internal/validation.js +32 -19
- package/dist/internal/validation.js.map +1 -1
- package/dist/metadata.d.ts +1 -1
- package/dist/tests/components/filter_comparisons.test.js +10 -0
- package/dist/tests/components/filter_comparisons.test.js.map +1 -1
- package/dist/tests/components/parse_body.test.js +1 -22
- package/dist/tests/components/parse_body.test.js.map +1 -1
- package/dist/tests/components/parse_body.untyped.spec.d.ts +1 -0
- package/dist/tests/components/parse_body.untyped.spec.js +42 -0
- package/dist/tests/components/parse_body.untyped.spec.js.map +1 -0
- package/dist/tests/components/stored_row.test.d.ts +1 -0
- package/dist/tests/components/stored_row.test.js +117 -0
- package/dist/tests/components/stored_row.test.js.map +1 -0
- package/dist/tests/internal/controller-fields.test.js +8 -6
- package/dist/tests/internal/controller-fields.test.js.map +1 -1
- package/docs/3.routes.md +4 -2
- package/docs/6.listable.md +2 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
<a href="https://github.com/AntelopeJS/antelopejs"><img data-illustration src="./.github/readme/strip.svg" width="100%" alt="INTERFACE · DATA API: part of AntelopeJS, hexagonal architecture beyond your own code. A glowing button reads Star AntelopeJS."></a>
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<a href="https://interfaces.antelopejs.com/docs/data-api"><img data-illustration alt="
|
|
4
|
+
|
|
5
|
+
# `@antelopejs/interface-data-api`
|
|
6
|
+
|
|
7
|
+
<a href="https://www.npmjs.com/package/@antelopejs/interface-data-api"><img data-illustration alt="npm" src="https://img.shields.io/npm/v/@antelopejs/interface-data-api?style=for-the-badge&labelColor=000000&color=000000"></a> <a href="./LICENSE"><img data-illustration alt="License" src="https://img.shields.io/npm/l/@antelopejs/interface-data-api?style=for-the-badge&labelColor=000000&color=000000"></a> <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> <a href="https://interfaces.antelopejs.com/docs/data-api"><img data-illustration alt="Documentation" src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000"></a> <a href="https://github.com/AntelopeJS/antelopejs"><img data-illustration alt="Star AntelopeJS" src="https://img.shields.io/github/stars/AntelopeJS/antelopejs?label=Star%20AntelopeJS&style=for-the-badge&labelColor=000000&color=000000&logo=github"></a>
|
|
8
|
+
|
|
9
|
+
**CRUD REST endpoints generated from a database table for AntelopeJS, with access rules, validation and pagination.**
|
|
10
|
+
|
|
11
|
+
[Documentation](https://interfaces.antelopejs.com/docs/data-api) · [Implementations](#implementations) · [All interfaces and providers](https://github.com/AntelopeJS/antelopejs#ecosystem)
|
|
12
|
+
|
|
8
13
|
</div>
|
|
9
14
|
|
|
10
15
|
The AntelopeJS interface that generates CRUD REST endpoints from a database table. Declare a data controller and its fields, and it serves the `get`, `list`, `new`, `edit` and `delete` routes with access rules, validation and pagination.
|
|
11
16
|
|
|
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.
|
|
13
|
-
|
|
14
17
|
## What it offers
|
|
15
18
|
|
|
16
19
|
- `DataController` and `@RegisterDataController()` turn a table class into a controller with the default routes you pick from `DefaultRoutes`.
|
|
@@ -145,6 +148,24 @@ pnpm lint
|
|
|
145
148
|
pnpm test
|
|
146
149
|
```
|
|
147
150
|
|
|
151
|
+
## Part of AntelopeJS
|
|
152
|
+
|
|
153
|
+
This package belongs to [AntelopeJS](https://github.com/AntelopeJS/antelopejs), the TypeScript framework where modules depend on contracts and the application chooses the provider. The open-source back office [AntelopeJS DMS](https://github.com/AntelopeJS/dms) is built on it.
|
|
154
|
+
|
|
155
|
+
<!-- antelopejs-framework-modules:start -->
|
|
156
|
+
|
|
157
|
+
| Area | Contracts | Providers |
|
|
158
|
+
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
159
|
+
| API | [`interface-api`](https://github.com/AntelopeJS/interface-api) · [`interface-api-util`](https://github.com/AntelopeJS/interface-api-util) · **`interface-data-api`** | [`api`](https://github.com/AntelopeJS/api) |
|
|
160
|
+
| Auth | [`interface-auth`](https://github.com/AntelopeJS/interface-auth) | [`auth-jwt`](https://github.com/AntelopeJS/auth-jwt) |
|
|
161
|
+
| Database | [`interface-database`](https://github.com/AntelopeJS/interface-database) · [`interface-database-decorators`](https://github.com/AntelopeJS/interface-database-decorators) · [`interface-database-catalog`](https://github.com/AntelopeJS/interface-database-catalog) · [`interface-mongodb`](https://github.com/AntelopeJS/interface-mongodb) · [`interface-rethinkdb`](https://github.com/AntelopeJS/interface-rethinkdb) | [`postgres`](https://github.com/AntelopeJS/postgres) · [`mongodb`](https://github.com/AntelopeJS/mongodb) · [`rethinkdb`](https://github.com/AntelopeJS/rethinkdb) |
|
|
162
|
+
| Redis | [`interface-redis`](https://github.com/AntelopeJS/interface-redis) · [`interface-redis-scheduler`](https://github.com/AntelopeJS/interface-redis-scheduler) | [`redis`](https://github.com/AntelopeJS/redis) |
|
|
163
|
+
| Email | [`interface-email`](https://github.com/AntelopeJS/interface-email) | [`nodemailer`](https://github.com/AntelopeJS/nodemailer) · [`brevo`](https://github.com/AntelopeJS/brevo) |
|
|
164
|
+
| File storage | [`interface-file-storage`](https://github.com/AntelopeJS/interface-file-storage) | [`file-storage-local`](https://github.com/AntelopeJS/file-storage-local) · [`file-storage-s3`](https://github.com/AntelopeJS/file-storage-s3) |
|
|
165
|
+
| Payments | [`interface-payment`](https://github.com/AntelopeJS/interface-payment) · [`interface-subscriptions`](https://github.com/AntelopeJS/interface-subscriptions) · [`interface-stripe`](https://github.com/AntelopeJS/interface-stripe) | [`stripe`](https://github.com/AntelopeJS/stripe) · [`mollie`](https://github.com/AntelopeJS/mollie) · [`checkout-com`](https://github.com/AntelopeJS/checkout-com) · [`payment-subscriptions`](https://github.com/AntelopeJS/payment-subscriptions) |
|
|
166
|
+
|
|
167
|
+
<!-- antelopejs-framework-modules:end -->
|
|
168
|
+
|
|
148
169
|
## License
|
|
149
170
|
|
|
150
171
|
[Apache-2.0](./LICENSE)
|
package/dist/components.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type RequestContext } from "@antelopejs/interface-api";
|
|
2
2
|
import type { Datum, SchemaInstance, Stream, Table, ValueProxy } from "@antelopejs/interface-database";
|
|
3
3
|
import "@antelopejs/interface-database";
|
|
4
|
-
import { type DataAPIMeta, type DataControllerCallbackWithOptions, type DataControllerInstance, type FieldFilter, type FieldValues, type
|
|
4
|
+
import { type DataAPIMeta, type DataControllerCallbackWithOptions, type DataControllerInstance, type FieldFilter, type FieldValues, type StoredRow } from "./metadata";
|
|
5
5
|
import * as extractors from "./internal/extractors";
|
|
6
6
|
import * as tables from "./internal/tables";
|
|
7
7
|
export declare namespace Parameters {
|
|
@@ -93,7 +93,7 @@ export declare namespace Query {
|
|
|
93
93
|
function Joined(db: SchemaInstance<any>, meta: DataAPIMeta, query: Datum<any>, only?: Set<string>): Datum<any>;
|
|
94
94
|
function Computed(db: SchemaInstance<any>, meta: DataAPIMeta, query: Stream<any>, only?: Set<string>): Stream<any>;
|
|
95
95
|
function Computed(db: SchemaInstance<any>, meta: DataAPIMeta, query: Datum<any>, only?: Set<string>): Datum<any>;
|
|
96
|
-
function ReadProperties(obj: DataControllerInstance, meta: DataAPIMeta, dbData:
|
|
96
|
+
function ReadProperties(obj: DataControllerInstance, meta: DataAPIMeta, dbData: StoredRow, action?: string, onlyList?: boolean): Promise<StoredRow>;
|
|
97
97
|
/**
|
|
98
98
|
* Writes the writable fields of `bodyData` into a database row.
|
|
99
99
|
*
|
|
@@ -104,7 +104,7 @@ export declare namespace Query {
|
|
|
104
104
|
* row and only their setters run: an absent field keeps its stored value,
|
|
105
105
|
* `null` clears it.
|
|
106
106
|
*/
|
|
107
|
-
function WriteProperties(obj: DataControllerInstance, meta: DataAPIMeta, bodyData: FieldValues, action?: string, existingDBData?:
|
|
107
|
+
function WriteProperties(obj: DataControllerInstance, meta: DataAPIMeta, bodyData: FieldValues, action?: string, existingDBData?: StoredRow): Promise<StoredRow>;
|
|
108
108
|
function Get<T extends object>(table: Table<T>, id: string | ValueProxy<string>, index?: string): import("@antelopejs/interface-database").SingleSelection<T> | Datum<T | null>;
|
|
109
109
|
interface ListOptions {
|
|
110
110
|
/**
|
|
@@ -213,8 +213,8 @@ export declare namespace Validation {
|
|
|
213
213
|
* untouched keeps its stored locked value: read while locked it would be
|
|
214
214
|
* `undefined`, and locking it again would store that over it.
|
|
215
215
|
*/
|
|
216
|
-
function Lock(obj: DataControllerInstance, meta: DataAPIMeta, data:
|
|
217
|
-
function Unlock(obj: DataControllerInstance, meta: DataAPIMeta, dbData:
|
|
216
|
+
function Lock(obj: DataControllerInstance, meta: DataAPIMeta, data: StoredRow): void;
|
|
217
|
+
function Unlock(obj: DataControllerInstance, meta: DataAPIMeta, dbData: StoredRow): void;
|
|
218
218
|
function UnlockRequest<T extends {}, K extends keyof T>(obj: DataControllerInstance, meta: DataAPIMeta, row: ValueProxy<T>, field: K): ValueProxy<T[K]>;
|
|
219
|
-
function ClearInternal(meta: DataAPIMeta, obj:
|
|
219
|
+
function ClearInternal(meta: DataAPIMeta, obj: StoredRow | StoredRow[]): void;
|
|
220
220
|
}
|
package/dist/components.js
CHANGED
|
@@ -158,7 +158,7 @@ var Query;
|
|
|
158
158
|
(function (Query) {
|
|
159
159
|
function GetModel(obj, meta) {
|
|
160
160
|
(0, interface_api_util_1.assert)(meta.modelKey, 500, "Missing model key.");
|
|
161
|
-
const model = (0, prototypes_1.
|
|
161
|
+
const [model] = (0, prototypes_1.controllerField)(obj, meta.modelKey);
|
|
162
162
|
(0, interface_api_util_1.assert)(tables.isModelInstance(model), 500, "The controller holds no model.");
|
|
163
163
|
return model;
|
|
164
164
|
}
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uEAAwD;AACxD,6EAA+E;AAC/E,sEAA0F;AAC1F,6DAKmC;AAQnC,0CAAwC;AACxC,uFAAsG;AAEtG,yCAWoB;AACpB,8DAAgD;AAChD,gDAA6D;AAC7D,4DAA8C;AAC9C,kEAAoD;AACpD,8CAA6C;AAC7C,0DAA4C;AAC5C,sDAAwC;AACxC,kEAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Class, type ClassDecorator } from "@antelopejs/interface-core/decorators";
|
|
2
2
|
import { type ControllerClass, type RequestContext } from "@antelopejs/interface-api";
|
|
3
3
|
import { Parameters, Validation } from "./components";
|
|
4
|
-
import { type DataControllerCallback, type DataControllerCallbackWithOptions, type DataControllerDef, type DataControllerInstance, type ExtractDefCallbacks, type
|
|
4
|
+
import { type DataControllerCallback, type DataControllerCallbackWithOptions, type DataControllerDef, type DataControllerInstance, type ExtractDefCallbacks, type StoredRow } from "./metadata";
|
|
5
5
|
export { type DataControllerCallback, type DataControllerCallbackWithOptions, type DataControllerDef, type DataControllerInstance, type ExtractCallback, type ExtractDefCallbacks, GetDataControllerMeta, } from "./metadata";
|
|
6
6
|
declare abstract class TableHolder<C extends Class> {
|
|
7
7
|
table: InstanceType<C>;
|
|
@@ -10,9 +10,9 @@ export declare function DataController<C extends Class, P extends DataController
|
|
|
10
10
|
export declare const RegisterDataController: () => ClassDecorator<ControllerClass>;
|
|
11
11
|
export declare namespace DefaultRoutes {
|
|
12
12
|
/** Receives the loaded, unlocked model before readable fields are selected. Throw to deny the read. */
|
|
13
|
-
export type GetGuard = (this: DataControllerInstance, ctx: RequestContext, current:
|
|
13
|
+
export type GetGuard = (this: DataControllerInstance, ctx: RequestContext, current: StoredRow, params: Parameters.GetParameters) => void | Promise<void>;
|
|
14
14
|
function listRows(this: DataControllerInstance, reqCtx: RequestContext, params: Parameters.ListParameters): Promise<{
|
|
15
|
-
results:
|
|
15
|
+
results: StoredRow[];
|
|
16
16
|
total: number;
|
|
17
17
|
offset: number;
|
|
18
18
|
limit: number;
|
|
@@ -20,9 +20,9 @@ export declare namespace DefaultRoutes {
|
|
|
20
20
|
function newRow(this: DataControllerInstance, _reqCtx: RequestContext, params: Parameters.NewParameters, body: Validation.WrittenBody): Promise<{
|
|
21
21
|
_id: string;
|
|
22
22
|
}>;
|
|
23
|
-
function editRow(this: DataControllerInstance, _reqCtx: RequestContext, params: Parameters.EditParameters, body: Validation.WrittenBody): Promise<
|
|
23
|
+
function editRow(this: DataControllerInstance, _reqCtx: RequestContext, params: Parameters.EditParameters, body: Validation.WrittenBody): Promise<StoredRow>;
|
|
24
24
|
function deleteRows(this: DataControllerInstance, _reqCtx: RequestContext, params: Parameters.DeleteParameters): Promise<number>;
|
|
25
|
-
export const Get: DataControllerCallback<Parameters.GetParameters,
|
|
25
|
+
export const Get: DataControllerCallback<Parameters.GetParameters, StoredRow, [
|
|
26
26
|
RequestContext,
|
|
27
27
|
Parameters.GetParameters
|
|
28
28
|
]>;
|
|
@@ -33,7 +33,7 @@ export declare namespace DefaultRoutes {
|
|
|
33
33
|
* The guard must treat the model as read-only; it includes non-readable fields
|
|
34
34
|
* and the normal Get joined/computed/foreign data, not the response DTO.
|
|
35
35
|
*/
|
|
36
|
-
export function WithGetGuard(guard: GetGuard): DataControllerCallback<Parameters.GetParameters,
|
|
36
|
+
export function WithGetGuard(guard: GetGuard): DataControllerCallback<Parameters.GetParameters, StoredRow, [
|
|
37
37
|
RequestContext,
|
|
38
38
|
Parameters.GetParameters
|
|
39
39
|
]>;
|
|
@@ -60,9 +60,9 @@ export declare namespace DefaultRoutes {
|
|
|
60
60
|
Parameters.DeleteParameters
|
|
61
61
|
]>;
|
|
62
62
|
export const All: {
|
|
63
|
-
readonly get: DataControllerCallback<Parameters.GetParameters,
|
|
63
|
+
readonly get: DataControllerCallback<Parameters.GetParameters, StoredRow, [RequestContext, Parameters.GetParameters]>;
|
|
64
64
|
readonly list: DataControllerCallback<Parameters.ListParameters, {
|
|
65
|
-
results:
|
|
65
|
+
results: StoredRow[];
|
|
66
66
|
total: number;
|
|
67
67
|
offset: number;
|
|
68
68
|
limit: number;
|
|
@@ -70,7 +70,7 @@ export declare namespace DefaultRoutes {
|
|
|
70
70
|
readonly new: DataControllerCallback<Parameters.NewParameters, {
|
|
71
71
|
_id: string;
|
|
72
72
|
}, [RequestContext, Parameters.NewParameters, Validation.WrittenBody]>;
|
|
73
|
-
readonly edit: DataControllerCallback<Parameters.EditParameters,
|
|
73
|
+
readonly edit: DataControllerCallback<Parameters.EditParameters, StoredRow, [RequestContext, Parameters.EditParameters, Validation.WrittenBody]>;
|
|
74
74
|
readonly delete: DataControllerCallback<Parameters.DeleteParameters, number, [RequestContext, Parameters.DeleteParameters]>;
|
|
75
75
|
};
|
|
76
76
|
export function WithOptions<O, R, A extends unknown[]>(callback: DataControllerCallback<O, R, A> | DataControllerCallbackWithOptions<O, R, A>, options?: Partial<O>, endpoint?: string): DataControllerCallbackWithOptions<O, R, A>;
|
|
@@ -17,6 +17,14 @@ const joined_1 = require("./joined");
|
|
|
17
17
|
*/
|
|
18
18
|
class DeferredJoinedStream extends interface_database_1.Stream {
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* `stream` viewed as its methods by name, read and written only under the
|
|
22
|
+
* names {@link wireDeferredJoinedStream} lists.
|
|
23
|
+
*/
|
|
24
|
+
function operationsOf(stream) {
|
|
25
|
+
// SAFETY: callers index the result only with a name wireDeferredJoinedStream lists (an own method name of Stream.prototype, or run, cursor or build), each a method on the prototype chain of every Stream that returns one of Stream's member return types, and they write only such an operation under such a name.
|
|
26
|
+
return stream;
|
|
27
|
+
}
|
|
20
28
|
function materializeDeferredJoin(stream) {
|
|
21
29
|
const { db, meta, names, raw } = stream.deferredJoin;
|
|
22
30
|
return (0, joined_1.Joined)(db, meta, raw, names);
|
|
@@ -75,9 +83,8 @@ function fieldAggregateDeferredJoinOperation(name, bareCallOnRaw) {
|
|
|
75
83
|
}
|
|
76
84
|
function forwardingDeferredJoinOperation(name) {
|
|
77
85
|
return function (...args) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return materializeDeferredJoin(this)[name](...args);
|
|
86
|
+
const materialized = materializeDeferredJoin(this);
|
|
87
|
+
return operationsOf(materialized)[name].apply(materialized, args);
|
|
81
88
|
};
|
|
82
89
|
}
|
|
83
90
|
/** The operation a {@link DeferredJoinedStream} installs for a stream method. */
|
|
@@ -103,8 +110,7 @@ function wireDeferredJoinedStream() {
|
|
|
103
110
|
for (const name of operationNames) {
|
|
104
111
|
const factory = DEFERRED_JOIN_OPERATION_FACTORIES.get(name) ??
|
|
105
112
|
forwardingDeferredJoinOperation;
|
|
106
|
-
|
|
107
|
-
DeferredJoinedStream.prototype[name] = factory(name);
|
|
113
|
+
operationsOf(DeferredJoinedStream.prototype)[name] = factory(name);
|
|
108
114
|
}
|
|
109
115
|
}
|
|
110
116
|
wireDeferredJoinedStream();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deferred-joined-stream.js","sourceRoot":"","sources":["../../src/internal/deferred-joined-stream.ts"],"names":[],"mappings":";AAAA,sCAAsC;;
|
|
1
|
+
{"version":3,"file":"deferred-joined-stream.js","sourceRoot":"","sources":["../../src/internal/deferred-joined-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import type { RequestContext } from "@antelopejs/interface-api";
|
|
3
3
|
import type { Class } from "@antelopejs/interface-core/decorators";
|
|
4
4
|
import type { Query, SchemaInstance, ValueProxy, ValueProxyOrValue } from "@antelopejs/interface-database";
|
|
5
|
+
import type { WriteValue } from "@antelopejs/interface-database/common";
|
|
5
6
|
import type { Table } from "@antelopejs/interface-database-decorators";
|
|
6
7
|
import type { AccessMode, DataAPIMeta } from "../metadata";
|
|
7
8
|
/**
|
|
@@ -25,12 +26,18 @@ export interface FieldValues {
|
|
|
25
26
|
[field: string]: FieldValue | undefined;
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* what the getter returned. Read a field through a guard.
|
|
29
|
+
* A value a table row holds: one a database stores, or the row instance a
|
|
30
|
+
* relation resolves to.
|
|
31
31
|
*/
|
|
32
|
-
export
|
|
33
|
-
|
|
32
|
+
export type StoredValue = WriteValue | Table | StoredRow | readonly StoredValue[];
|
|
33
|
+
/**
|
|
34
|
+
* The fields of a table row a route holds, by name: the stored values, the
|
|
35
|
+
* relations resolved to row instances, and the results of the getters a read
|
|
36
|
+
* selects. A getter, a controller default or a setter that leaves a `bigint`,
|
|
37
|
+
* a `symbol` or a function in a row is refused with 500.
|
|
38
|
+
*/
|
|
39
|
+
export interface StoredRow {
|
|
40
|
+
[field: string]: StoredValue;
|
|
34
41
|
}
|
|
35
42
|
/** Parse outcome accepting the field value, carrying the value to write. */
|
|
36
43
|
export interface FieldParseSuccess {
|
package/dist/internal/filters.js
CHANGED
|
@@ -12,7 +12,7 @@ function FilterValuesOf(filter) {
|
|
|
12
12
|
return isFilterList(filter) ? filter : [filter];
|
|
13
13
|
}
|
|
14
14
|
function parseFilter(searchVal) {
|
|
15
|
-
const match = searchVal.match(
|
|
15
|
+
const match = searchVal.match(/^:*([^:]+):(.*)/);
|
|
16
16
|
return match ? [match[2], match[1]] : [searchVal, "eq"];
|
|
17
17
|
}
|
|
18
18
|
function copyFilter(filter) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/internal/filters.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AAStC,wCAEC;AAED,kCAGC;AAED,gCAGC;AAjBD,SAAS,YAAY,CAAC,MAAmB;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,2EAA2E;AAC3E,SAAgB,cAAc,CAAC,MAAmB;IAChD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,WAAW,CAAC,SAAiB;IAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/internal/filters.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AAStC,wCAEC;AAED,kCAGC;AAED,gCAGC;AAjBD,SAAS,YAAY,CAAC,MAAmB;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,2EAA2E;AAC3E,SAAgB,cAAc,CAAC,MAAmB;IAChD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,WAAW,CAAC,SAAiB;IAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,UAAU,CAAC,MAAmB;IAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAe,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @internal @packageDocumentation */
|
|
2
2
|
import type { Class } from "@antelopejs/interface-core/decorators";
|
|
3
3
|
import type { WriteDocument, WriteValue } from "@antelopejs/interface-database/common";
|
|
4
|
-
import type { FieldValue, FieldValues,
|
|
4
|
+
import type { FieldValue, FieldValues, StoredRow } from "./field-types";
|
|
5
5
|
/** Whether a value is a string. */
|
|
6
6
|
export declare function isString(value: unknown): value is string;
|
|
7
7
|
/** Whether `typeof` calls a value an object and it is not `null`: arrays qualify, functions do not (the predicate `object` still types a function as one). */
|
|
@@ -36,4 +36,4 @@ export declare function isFieldValues(value: unknown): value is FieldValues;
|
|
|
36
36
|
*/
|
|
37
37
|
export declare function isWriteValue(value: unknown): value is WriteValue;
|
|
38
38
|
/** Whether every own field of a row holds a {@link WriteValue}. */
|
|
39
|
-
export declare function isWriteDocument(row:
|
|
39
|
+
export declare function isWriteDocument(row: StoredRow): row is WriteDocument;
|
package/dist/internal/guards.js
CHANGED
|
@@ -101,6 +101,11 @@ function isWriteValue(value) {
|
|
|
101
101
|
continue;
|
|
102
102
|
if (!isObject(current))
|
|
103
103
|
return false;
|
|
104
|
+
if (current instanceof Date)
|
|
105
|
+
continue;
|
|
106
|
+
const bigintView = current instanceof BigInt64Array || current instanceof BigUint64Array;
|
|
107
|
+
if (ArrayBuffer.isView(current) && !bigintView)
|
|
108
|
+
continue;
|
|
104
109
|
if (seen.has(current))
|
|
105
110
|
continue;
|
|
106
111
|
seen.add(current);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/internal/guards.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AAWtC,4BAEC;AAGD,4BAEC;AAGD,gCAEC;AAQD,0BAEC;AAGD,4BAEC;AAGD,8BAEC;AAaD,oCAyBC;AAGD,sCAOC;AAYD,
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/internal/guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/** @internal @packageDocumentation */
|
|
2
2
|
import type { Query } from "../components";
|
|
3
|
-
import type { DataAPIMeta, DataControllerInstance,
|
|
4
|
-
export declare function WriteProperties(obj: DataControllerInstance, meta: DataAPIMeta, bodyData: Parameters<typeof Query.WriteProperties>[2], action?: string, existingDBData?: Parameters<typeof Query.WriteProperties>[4]):
|
|
3
|
+
import type { DataAPIMeta, DataControllerInstance, StoredRow } from "../metadata";
|
|
4
|
+
export declare function WriteProperties(obj: DataControllerInstance, meta: DataAPIMeta, bodyData: Parameters<typeof Query.WriteProperties>[2], action?: string, existingDBData?: Parameters<typeof Query.WriteProperties>[4]): StoredRow;
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
/** @internal @packageDocumentation */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.WriteProperties = WriteProperties;
|
|
5
|
+
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
6
|
+
const guards_1 = require("./guards");
|
|
5
7
|
const meta_records_1 = require("./meta-records");
|
|
6
8
|
const prototypes_1 = require("./prototypes");
|
|
7
9
|
function writableInBody(writable, bodyData) {
|
|
@@ -10,16 +12,24 @@ function writableInBody(writable, bodyData) {
|
|
|
10
12
|
setters: writable.setters.filter(([key]) => Object.hasOwn(bodyData, key)),
|
|
11
13
|
};
|
|
12
14
|
}
|
|
13
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Writes the defaults the controller class declares for its decorated fields
|
|
17
|
+
* into `fields` and `dbData`.
|
|
18
|
+
*/
|
|
19
|
+
function writeTargetDefaults(fields, meta, dbData) {
|
|
14
20
|
const defaults = Object.entries(new meta.target());
|
|
15
21
|
for (const [key, value] of defaults) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
const field = (0, meta_records_1.ownEntry)(meta.fields, key);
|
|
23
|
+
if (value === undefined || !field)
|
|
24
|
+
continue;
|
|
25
|
+
(0, interface_api_util_1.assert)((0, guards_1.isWriteValue)(value), 500, `The default of field '${key}' is a bigint, a symbol or a function, which no database stores`);
|
|
26
|
+
fields[key] = value;
|
|
27
|
+
dbData[field.dbName || key] = value;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function refuseUnstoredValues(dbData) {
|
|
31
|
+
for (const [key, value] of Object.entries(dbData)) {
|
|
32
|
+
(0, interface_api_util_1.assert)((0, guards_1.isWriteValue)(value), 500, `A setter wrote a bigint, a symbol or a function into field '${key}', which no database stores`);
|
|
23
33
|
}
|
|
24
34
|
}
|
|
25
35
|
function WriteProperties(obj, meta, bodyData, action, existingDBData) {
|
|
@@ -27,22 +37,23 @@ function WriteProperties(obj, meta, bodyData, action, existingDBData) {
|
|
|
27
37
|
const writable = existingDBData
|
|
28
38
|
? writableInBody(actionWritable, bodyData)
|
|
29
39
|
: actionWritable;
|
|
30
|
-
const
|
|
40
|
+
const fields = {};
|
|
31
41
|
const dbData = existingDBData || {};
|
|
32
42
|
Object.setPrototypeOf(dbData, (0, prototypes_1.prototypeOf)(meta.tableClass));
|
|
33
43
|
if (!existingDBData) {
|
|
34
|
-
writeTargetDefaults(
|
|
44
|
+
writeTargetDefaults(fields, meta, dbData);
|
|
35
45
|
}
|
|
36
46
|
for (const [key, field] of writable.props) {
|
|
37
47
|
const value = (0, meta_records_1.ownEntry)(bodyData, key);
|
|
38
|
-
|
|
48
|
+
fields[key] = value;
|
|
39
49
|
dbData[field.dbName || key] = value;
|
|
40
50
|
}
|
|
41
|
-
|
|
42
|
-
|
|
51
|
+
fields.table = dbData;
|
|
52
|
+
const instance = (0, prototypes_1.controllerReceiver)(obj, meta.target, fields);
|
|
43
53
|
for (const [key, field] of writable.setters) {
|
|
44
54
|
field.desc?.set?.apply(instance, [(0, meta_records_1.ownEntry)(bodyData, key)]);
|
|
45
55
|
}
|
|
56
|
+
refuseUnstoredValues(dbData);
|
|
46
57
|
return dbData;
|
|
47
58
|
}
|
|
48
59
|
//# sourceMappingURL=properties.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/internal/properties.ts"],"names":[],"mappings":";AAAA,sCAAsC;;
|
|
1
|
+
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/internal/properties.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
/** @internal @packageDocumentation */
|
|
2
2
|
import type { Class } from "@antelopejs/interface-core/decorators";
|
|
3
3
|
import type { DataControllerInstance } from "./controller-types";
|
|
4
|
-
import type {
|
|
4
|
+
import type { StoredRow } from "./field-types";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* The field `name` of a controller, as `@ModifierKey` and `@ModelReference`
|
|
7
|
+
* name it: read as a property of the controller itself, so an own field, an
|
|
8
|
+
* injected parameter and an inherited accessor all answer, and a field the
|
|
9
|
+
* controller lacks answers `undefined`. It comes as the one argument a keyed
|
|
10
|
+
* modifier takes.
|
|
9
11
|
*/
|
|
10
|
-
export declare function
|
|
12
|
+
export declare function controllerField(controller: DataControllerInstance, name: string): [value: unknown];
|
|
13
|
+
/**
|
|
14
|
+
* Makes `fields` the `this` the getters and setters of `target` run on: it
|
|
15
|
+
* holds the fields a route reads or writes, and inherits a copy of the
|
|
16
|
+
* controller's own fields, which inherits the prototype of `target`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function controllerReceiver(controller: DataControllerInstance, target: Class, fields: StoredRow): StoredRow;
|
|
11
19
|
/** The object the instances of a class inherit from. */
|
|
12
20
|
export declare function prototypeOf(target: Class): object;
|
|
13
21
|
/** The class an instance was built from, read from its prototype. */
|
|
@@ -1,23 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/** @internal @packageDocumentation */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
4
|
+
exports.controllerField = controllerField;
|
|
5
|
+
exports.controllerReceiver = controllerReceiver;
|
|
5
6
|
exports.prototypeOf = prototypeOf;
|
|
6
7
|
exports.classOf = classOf;
|
|
7
8
|
const guards_1 = require("./guards");
|
|
8
9
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* The field `name` of a controller, as `@ModifierKey` and `@ModelReference`
|
|
11
|
+
* name it: read as a property of the controller itself, so an own field, an
|
|
12
|
+
* injected parameter and an inherited accessor all answer, and a field the
|
|
13
|
+
* controller lacks answers `undefined`. It comes as the one argument a keyed
|
|
14
|
+
* modifier takes.
|
|
12
15
|
*/
|
|
13
|
-
function
|
|
14
|
-
if (!
|
|
16
|
+
function controllerField(controller, name) {
|
|
17
|
+
if (!(0, guards_1.isObject)(controller)) {
|
|
15
18
|
throw new TypeError("A data controller must be an object.");
|
|
16
19
|
}
|
|
17
|
-
return
|
|
20
|
+
// SAFETY: the controller is an object (checked above), so reading any string key is an ordinary property read that runs inherited accessors and answers undefined for a missing field; the assertion types the runtime name a decorator recorded as keyof object, which is never, only so TypeScript lets the controller be indexed; the never-typed value is widened to unknown by this function's declared return type, which Query.GetModel parses with isModelInstance and the keyed modifiers take as the [key: unknown] they declare.
|
|
21
|
+
return [controller[name]];
|
|
18
22
|
}
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Makes `fields` the `this` the getters and setters of `target` run on: it
|
|
25
|
+
* holds the fields a route reads or writes, and inherits a copy of the
|
|
26
|
+
* controller's own fields, which inherits the prototype of `target`.
|
|
27
|
+
*/
|
|
28
|
+
function controllerReceiver(controller, target, fields) {
|
|
29
|
+
const controllerFields = { ...controller };
|
|
30
|
+
Object.setPrototypeOf(controllerFields, prototypeOf(target));
|
|
31
|
+
Object.setPrototypeOf(fields, controllerFields);
|
|
32
|
+
return fields;
|
|
21
33
|
}
|
|
22
34
|
/** The object the instances of a class inherit from. */
|
|
23
35
|
function prototypeOf(target) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prototypes.js","sourceRoot":"","sources":["../../src/internal/prototypes.ts"],"names":[],"mappings":";AAAA,sCAAsC;;
|
|
1
|
+
{"version":3,"file":"prototypes.js","sourceRoot":"","sources":["../../src/internal/prototypes.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AAetC,0CASC;AAOD,gDASC;AAGD,kCAMC;AAGD,0BAMC;AApDD,qCAA6C;AAE7C;;;;;;GAMG;AACH,SAAgB,eAAe,CAC7B,UAAkC,EAClC,IAAY;IAEZ,IAAI,CAAC,IAAA,iBAAQ,EAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,4gBAA4gB;IAC5gB,OAAO,CAAC,UAAU,CAAC,IAAoC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAChC,UAAkC,EAClC,MAAa,EACb,MAAiB;IAEjB,MAAM,gBAAgB,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;IAC3C,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wDAAwD;AACxD,SAAgB,WAAW,CAAC,MAAa;IACvC,MAAM,SAAS,GAAY,MAAM,CAAC,SAAS,CAAC;IAC5C,IAAI,CAAC,IAAA,iBAAQ,EAAC,SAAS,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qEAAqE;AACrE,SAAgB,OAAO,CAAC,QAAgC;IACtD,MAAM,SAAS,GAAY,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAA,iBAAQ,EAAC,SAAS,CAAC,IAAI,CAAC,IAAA,gBAAO,EAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,SAAS,CAAC,WAAW,CAAC;AAC/B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** @internal @packageDocumentation */
|
|
2
|
-
import type { DataAPIMeta, DataControllerInstance,
|
|
2
|
+
import type { DataAPIMeta, DataControllerInstance, StoredRow } from "../metadata";
|
|
3
3
|
/** Which fields a read leaves out. */
|
|
4
4
|
interface ReadFilter {
|
|
5
5
|
/** Leaves out the fields that no list mode lists. */
|
|
@@ -7,5 +7,5 @@ interface ReadFilter {
|
|
|
7
7
|
/** Leaves out the getters that this list mode does not list. */
|
|
8
8
|
listMode?: string;
|
|
9
9
|
}
|
|
10
|
-
export declare function ReadProperties(obj: DataControllerInstance, meta: DataAPIMeta, dbData:
|
|
10
|
+
export declare function ReadProperties(obj: DataControllerInstance, meta: DataAPIMeta, dbData: StoredRow, action?: string, { onlyList, listMode }?: ReadFilter): Promise<StoredRow>;
|
|
11
11
|
export {};
|