@antelopejs/interface-data-api 0.6.3 → 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.
Files changed (40) hide show
  1. package/README.md +28 -7
  2. package/dist/components.d.ts +6 -6
  3. package/dist/components.js +1 -1
  4. package/dist/components.js.map +1 -1
  5. package/dist/index.d.ts +9 -9
  6. package/dist/internal/deferred-joined-stream.js +11 -5
  7. package/dist/internal/deferred-joined-stream.js.map +1 -1
  8. package/dist/internal/field-types.d.ts +12 -5
  9. package/dist/internal/guards.d.ts +2 -2
  10. package/dist/internal/guards.js +5 -0
  11. package/dist/internal/guards.js.map +1 -1
  12. package/dist/internal/properties.d.ts +2 -2
  13. package/dist/internal/properties.js +24 -13
  14. package/dist/internal/properties.js.map +1 -1
  15. package/dist/internal/prototypes.d.ts +13 -5
  16. package/dist/internal/prototypes.js +21 -9
  17. package/dist/internal/prototypes.js.map +1 -1
  18. package/dist/internal/read-properties.d.ts +2 -2
  19. package/dist/internal/read-properties.js +8 -5
  20. package/dist/internal/read-properties.js.map +1 -1
  21. package/dist/internal/tables.d.ts +6 -7
  22. package/dist/internal/tables.js +1 -3
  23. package/dist/internal/tables.js.map +1 -1
  24. package/dist/internal/validation.d.ts +3 -3
  25. package/dist/internal/validation.js +32 -19
  26. package/dist/internal/validation.js.map +1 -1
  27. package/dist/metadata.d.ts +1 -1
  28. package/dist/tests/components/parse_body.test.js +1 -22
  29. package/dist/tests/components/parse_body.test.js.map +1 -1
  30. package/dist/tests/components/parse_body.untyped.spec.d.ts +1 -0
  31. package/dist/tests/components/parse_body.untyped.spec.js +42 -0
  32. package/dist/tests/components/parse_body.untyped.spec.js.map +1 -0
  33. package/dist/tests/components/stored_row.test.d.ts +1 -0
  34. package/dist/tests/components/stored_row.test.js +117 -0
  35. package/dist/tests/components/stored_row.test.js.map +1 -0
  36. package/dist/tests/internal/controller-fields.test.js +8 -6
  37. package/dist/tests/internal/controller-fields.test.js.map +1 -1
  38. package/docs/3.routes.md +4 -2
  39. package/docs/6.listable.md +2 -0
  40. package/package.json +2 -2
package/README.md CHANGED
@@ -1,16 +1,19 @@
1
- # `@antelopejs/interface-data-api`
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
- <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>
5
- <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>
6
- <a href="https://discord.gg/g4pFt6eXqu"><img data-illustration alt="Discord" src="https://img.shields.io/badge/Discord-18181B?logo=discord&style=for-the-badge&color=000000"></a>
7
- <a href="https://interfaces.antelopejs.com/docs/data-api"><img data-illustration alt="Docs" src="https://img.shields.io/badge/Docs-18181B?style=for-the-badge&color=000000"></a>
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)
@@ -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 RowFields } from "./metadata";
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: RowFields, action?: string, onlyList?: boolean): Promise<RowFields>;
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?: RowFields): Promise<RowFields>;
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: RowFields): void;
217
- function Unlock(obj: DataControllerInstance, meta: DataAPIMeta, dbData: RowFields): void;
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: RowFields | RowFields[]): void;
219
+ function ClearInternal(meta: DataAPIMeta, obj: StoredRow | StoredRow[]): void;
220
220
  }
@@ -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.fieldsOf)(obj)[meta.modelKey];
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
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 RowFields } from "./metadata";
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: RowFields, params: Parameters.GetParameters) => void | Promise<void>;
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: RowFields[];
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<RowFields>;
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, RowFields, [
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, RowFields, [
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, RowFields, [RequestContext, Parameters.GetParameters]>;
63
+ readonly get: DataControllerCallback<Parameters.GetParameters, StoredRow, [RequestContext, Parameters.GetParameters]>;
64
64
  readonly list: DataControllerCallback<Parameters.ListParameters, {
65
- results: RowFields[];
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, RowFields, [RequestContext, Parameters.EditParameters, Validation.WrittenBody]>;
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
- // SAFETY: name comes from wireDeferredJoinedStream, which lists the own method names of Stream.prototype plus run, cursor and build, all present on any Stream, and Joined returns a Stream for the raw Stream it is given.
79
- // oxlint-disable-next-line typescript/no-unsafe-return -- the method is looked up by a runtime name on a Stream, which TypeScript cannot relate to a signature; Reflect.apply and a typed lookup were tried and moved the finding to no-reflect-get, no-reflect-apply and no-unknown-returns
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
- // SAFETY: name is a method name of Stream.prototype (or run, cursor, build), so the key is a writable data property on DeferredJoinedStream's prototype chain and assigning a function to it cannot throw; each installed operation takes the arguments of the Stream method it replaces.
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":"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"}
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
- * The fields of a table row a route holds, by name. The table class decides
29
- * what they hold: a relation holds a row instance, and a getter's result is
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 interface RowFields {
33
- [field: string]: unknown;
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 {
@@ -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, RowFields } from "./field-types";
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: RowFields): row is WriteDocument;
39
+ export declare function isWriteDocument(row: StoredRow): row is WriteDocument;
@@ -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":"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"}
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, RowFields } 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]): RowFields;
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
- function writeTargetDefaults(instance, meta, dbData) {
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
- if (value !== undefined) {
17
- instance[key] = value;
18
- const field = (0, meta_records_1.ownEntry)(meta.fields, key);
19
- if (field) {
20
- dbData[field.dbName || key] = value;
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 instance = (0, prototypes_1.fieldsOf)({ ...obj });
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(instance, meta, dbData);
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
- instance[key] = value;
48
+ fields[key] = value;
39
49
  dbData[field.dbName || key] = value;
40
50
  }
41
- instance.table = dbData;
42
- Object.setPrototypeOf(instance, (0, prototypes_1.prototypeOf)(meta.target));
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;;AAuCtC,0CA6BC;AA3DD,iDAA0C;AAC1C,6CAAqD;AAErD,SAAS,cAAc,CACrB,QAA8B,EAC9B,QAAqD;IAErD,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACrE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAmB,EACnB,IAAiB,EACjB,MAAiB;IAEjB,MAAM,QAAQ,GAAwB,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,MAAM,KAAK,GAAG,IAAA,uBAAQ,EAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAC7B,GAA2B,EAC3B,IAAiB,EACjB,QAAqD,EACrD,MAAe,EACf,cAA4D;IAE5D,MAAM,cAAc,GAClB,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAChE,MAAM,QAAQ,GAAG,cAAc;QAC7B,CAAC,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC1C,CAAC,CAAC,cAAc,CAAC;IACnB,MAAM,QAAQ,GAAG,IAAA,qBAAQ,EAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,MAAM,GAAc,cAAc,IAAI,EAAE,CAAC;IAC/C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAA,wBAAW,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAA,uBAAQ,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;IACtC,CAAC;IACD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAA,wBAAW,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAA,uBAAQ,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
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 { RowFields } from "./field-types";
4
+ import type { StoredRow } from "./field-types";
5
5
  /**
6
- * A controller instance read by field name: an object answers every string key,
7
- * with `undefined` for a field it lacks, and inherited accessors run on the
8
- * instance, because this is the instance itself.
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 fieldsOf(instance: DataControllerInstance): RowFields;
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.fieldsOf = fieldsOf;
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
- * A controller instance read by field name: an object answers every string key,
10
- * with `undefined` for a field it lacks, and inherited accessors run on the
11
- * instance, because this is the instance itself.
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 fieldsOf(instance) {
14
- if (!holdsFields(instance)) {
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 instance;
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
- function holdsFields(instance) {
20
- return (0, guards_1.isObject)(instance);
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;;AAatC,4BAKC;AAOD,kCAMC;AAGD,0BAMC;AAlCD,qCAA6C;AAE7C;;;;GAIG;AACH,SAAgB,QAAQ,CAAC,QAAgC;IACvD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,QAAgC;IACnD,OAAO,IAAA,iBAAQ,EAAC,QAAQ,CAAC,CAAC;AAC5B,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
+ {"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, RowFields } from "../metadata";
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: RowFields, action?: string, { onlyList, listMode }?: ReadFilter): Promise<RowFields>;
10
+ export declare function ReadProperties(obj: DataControllerInstance, meta: DataAPIMeta, dbData: StoredRow, action?: string, { onlyList, listMode }?: ReadFilter): Promise<StoredRow>;
11
11
  export {};
@@ -2,6 +2,7 @@
2
2
  /** @internal @packageDocumentation */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.ReadProperties = ReadProperties;
5
+ const interface_api_util_1 = require("@antelopejs/interface-api-util");
5
6
  const guards_1 = require("./guards");
6
7
  const meta_records_1 = require("./meta-records");
7
8
  const prototypes_1 = require("./prototypes");
@@ -10,17 +11,17 @@ function listedIn(field, mode) {
10
11
  }
11
12
  async function ReadProperties(obj, meta, dbData, action, { onlyList, listMode } = {}) {
12
13
  const readable = meta.readable[action ?? "_default"] ?? meta.readable._default;
13
- const instance = (0, prototypes_1.fieldsOf)({ ...obj });
14
+ const fields = {};
14
15
  const res = {};
15
16
  for (const [key, field] of readable.props) {
16
17
  if (onlyList && !field.listable) {
17
18
  continue;
18
19
  }
19
- instance[key] = dbData[field.dbName || key];
20
+ fields[key] = dbData[field.dbName || key];
20
21
  res[key] = dbData[field.dbName || key];
21
22
  }
22
- instance.table = dbData;
23
- Object.setPrototypeOf(instance, (0, prototypes_1.prototypeOf)(meta.target));
23
+ fields.table = dbData;
24
+ const instance = (0, prototypes_1.controllerReceiver)(obj, meta.target, fields);
24
25
  for (const [key, field] of readable.getters) {
25
26
  if (onlyList && !field.listable) {
26
27
  continue;
@@ -29,7 +30,9 @@ async function ReadProperties(obj, meta, dbData, action, { onlyList, listMode }
29
30
  continue;
30
31
  }
31
32
  const val = field.desc?.get?.apply(instance);
32
- res[key] = await ((0, guards_1.isFunction)(val) ? val() : val);
33
+ const result = await ((0, guards_1.isFunction)(val) ? val() : val);
34
+ (0, interface_api_util_1.assert)((0, guards_1.isWriteValue)(result), 500, `Getter '${key}' returned a bigint, a symbol or a function, which a response cannot hold`);
35
+ res[key] = result;
33
36
  }
34
37
  return res;
35
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"read-properties.js","sourceRoot":"","sources":["../../src/internal/read-properties.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AA0BtC,wCA+BC;AAjDD,qCAAsC;AACtC,iDAA0C;AAC1C,6CAAqD;AAUrD,SAAS,QAAQ,CAAC,KAAgB,EAAE,IAAY;IAC9C,OAAO,CACL,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAA,uBAAQ,EAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,SAAS,CAC7E,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,GAA2B,EAC3B,IAAiB,EACjB,MAAiB,EACjB,MAAe,EACf,EAAE,QAAQ,EAAE,QAAQ,KAAiB,EAAE;IAEvC,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAA,qBAAQ,EAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;QAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAA,wBAAW,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YACzD,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAY,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtD,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAA,mBAAU,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"read-properties.js","sourceRoot":"","sources":["../../src/internal/read-properties.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AA4BtC,wCAqCC;AA/DD,uEAAwD;AAQxD,qCAAoD;AACpD,iDAA0C;AAC1C,6CAAkD;AAUlD,SAAS,QAAQ,CAAC,KAAgB,EAAE,IAAY;IAC9C,OAAO,CACL,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAA,uBAAQ,EAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,SAAS,CAC7E,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,GAA2B,EAC3B,IAAiB,EACjB,MAAiB,EACjB,MAAe,EACf,EAAE,QAAQ,EAAE,QAAQ,KAAiB,EAAE;IAEvC,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAChE,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;QAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;IACtB,MAAM,QAAQ,GAAG,IAAA,+BAAkB,EAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YACzD,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAY,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,MAAM,GAAY,MAAM,CAAC,IAAA,mBAAU,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAA,2BAAM,EACJ,IAAA,qBAAY,EAAC,MAAM,CAAC,EACpB,GAAG,EACH,WAAW,GAAG,2EAA2E,CAC1F,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,15 +1,15 @@
1
1
  /** @internal @packageDocumentation */
2
2
  import type { Constructible } from "@antelopejs/interface-database-decorators/common";
3
3
  import type { DataModel } from "@antelopejs/interface-database-decorators/model";
4
- import type { SchemaInstance, Table, ValueProxy } from "@antelopejs/interface-database";
5
- import type { ComputedFieldData, RowFields } from "../metadata";
4
+ import type { SchemaInstance, Stream, Table, ValueProxy } from "@antelopejs/interface-database";
5
+ import type { ComputedFieldData, StoredRow } from "../metadata";
6
6
  export type TableRow = Parameters<ComputedFieldData["expr"]>[0];
7
7
  /**
8
8
  * The database model a controller holds under its `@ModelReference` field,
9
9
  * typed by the table rows it reads.
10
10
  */
11
- export type ModelInstance = InstanceType<DataModel<RowFields>> & {
12
- constructor: DataModel<RowFields>;
11
+ export type ModelInstance = InstanceType<DataModel<StoredRow>> & {
12
+ constructor: DataModel<StoredRow>;
13
13
  };
14
14
  /** Whether a value is a database model: its table, and its row conversion. */
15
15
  export declare function isModelInstance(value: unknown): value is ModelInstance;
@@ -21,8 +21,7 @@ export interface TableTargetReference {
21
21
  export declare function targetTable(sourceDb: SchemaInstance<any>, target: TableTargetReference): Table<any>;
22
22
  /**
23
23
  * The lookup side of a relation: `table` reduced to `fields`, with the
24
- * internal fields the modifiers keep. A plucked table is a staged selection
25
- * the database accepts wherever it takes a table, but its type is a stream.
24
+ * internal fields the modifiers keep, as the stream `lookup` takes.
26
25
  */
27
- export declare function pluckedTable(table: Table<any>, ...fields: string[]): Table<any>;
26
+ export declare function pluckedTable(table: Table<any>, ...fields: string[]): Stream<any>;
28
27
  export declare function Get<T extends object>(table: Table<T>, id: string | ValueProxy<string>, index?: string): import("@antelopejs/interface-database").SingleSelection<T> | import("@antelopejs/interface-database").Datum<T | null>;
@@ -32,11 +32,9 @@ function targetTable(sourceDb, target) {
32
32
  }
33
33
  /**
34
34
  * The lookup side of a relation: `table` reduced to `fields`, with the
35
- * internal fields the modifiers keep. A plucked table is a staged selection
36
- * the database accepts wherever it takes a table, but its type is a stream.
35
+ * internal fields the modifiers keep, as the stream `lookup` takes.
37
36
  */
38
37
  function pluckedTable(table, ...fields) {
39
- // SAFETY: pluck returns a Stream, which has none of Table's own methods; pluckedTable is only called in joined.ts and foreign.ts to build the right-hand side of lookup, and lookup reads that argument only through its stage list (build()), which the pluck stage extends.
40
38
  return table.pluck("_internal", ...fields);
41
39
  }
42
40
  function Get(table, id, index) {
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/internal/tables.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AA0BtC,0CAUC;AAoBD,kCAWC;AAOD,oCAMC;AAED,kBAQC;AAxFD,uEAAwD;AAWxD,qCAA0D;AAY1D,8EAA8E;AAC9E,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,CACL,IAAA,iBAAQ,EAAC,KAAK,CAAC;QACf,OAAO,IAAI,KAAK;QAChB,IAAA,iBAAQ,EAAC,KAAK,CAAC,KAAK,CAAC;QACrB,UAAU,IAAI,KAAK;QACnB,IAAA,iBAAQ,EAAC,KAAK,CAAC,QAAQ,CAAC;QACxB,cAAc,IAAI,KAAK,CAAC,WAAW;QACnC,IAAA,mBAAU,EAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAC3C,CAAC;AACJ,CAAC;AAQD,SAAS,YAAY,CACnB,KAAgC;IAEhC,OAAO,CACL,IAAA,mBAAU,EAAC,KAAK,CAAC;QACjB,OAAO,IAAI,KAAK;QAChB,IAAA,mBAAU,EAAC,KAAK,CAAC,KAAK,CAAC;QACvB,MAAM,IAAI,KAAK;QACf,IAAA,mBAAU,EAAC,KAAK,CAAC,IAAI,CAAC,CACvB,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CACzB,QAA6B,EAC7B,MAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAA,2BAAM,EACJ,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EAC/B,GAAG,EACH,UAAU,MAAM,CAAC,KAAK,gBAAgB,MAAM,CAAC,UAAU,iCAAiC,CACzF,CAAC;IACF,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAC1B,KAAiB,EACjB,GAAG,MAAgB;IAEnB,8QAA8Q;IAC9Q,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,CAAe,CAAC;AAC3D,CAAC;AAED,SAAgB,GAAG,CACjB,KAAe,EACf,EAA+B,EAC/B,KAAc;IAEd,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,IAAA,iBAAQ,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAA6B,CAAC;IACrE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/internal/tables.ts"],"names":[],"mappings":";AAAA,sCAAsC;;AA2BtC,0CAUC;AAoBD,kCAWC;AAMD,oCAKC;AAED,kBAQC;AAvFD,uEAAwD;AAYxD,qCAA0D;AAY1D,8EAA8E;AAC9E,SAAgB,eAAe,CAAC,KAAc;IAC5C,OAAO,CACL,IAAA,iBAAQ,EAAC,KAAK,CAAC;QACf,OAAO,IAAI,KAAK;QAChB,IAAA,iBAAQ,EAAC,KAAK,CAAC,KAAK,CAAC;QACrB,UAAU,IAAI,KAAK;QACnB,IAAA,iBAAQ,EAAC,KAAK,CAAC,QAAQ,CAAC;QACxB,cAAc,IAAI,KAAK,CAAC,WAAW;QACnC,IAAA,mBAAU,EAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAC3C,CAAC;AACJ,CAAC;AAQD,SAAS,YAAY,CACnB,KAAgC;IAEhC,OAAO,CACL,IAAA,mBAAU,EAAC,KAAK,CAAC;QACjB,OAAO,IAAI,KAAK;QAChB,IAAA,mBAAU,EAAC,KAAK,CAAC,KAAK,CAAC;QACvB,MAAM,IAAI,KAAK;QACf,IAAA,mBAAU,EAAC,KAAK,CAAC,IAAI,CAAC,CACvB,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CACzB,QAA6B,EAC7B,MAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAA,2BAAM,EACJ,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EAC/B,GAAG,EACH,UAAU,MAAM,CAAC,KAAK,gBAAgB,MAAM,CAAC,UAAU,iCAAiC,CACzF,CAAC;IACF,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAC1B,KAAiB,EACjB,GAAG,MAAgB;IAEnB,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,GAAG,CACjB,KAAe,EACf,EAA+B,EAC/B,KAAc;IAEd,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,IAAA,iBAAQ,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAA6B,CAAC;IACrE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -1,12 +1,12 @@
1
1
  /** @internal @packageDocumentation */
2
2
  import type { ValueProxy } from "@antelopejs/interface-database";
3
3
  import type { Validation } from "../components";
4
- import type { DataAPIMeta, DataControllerInstance, RowFields } from "../metadata";
4
+ import type { DataAPIMeta, DataControllerInstance, StoredRow } from "../metadata";
5
5
  type RequestBody = Validation.RequestBody;
6
6
  type WrittenBody = Validation.WrittenBody;
7
7
  export declare function ParseBody(body: WrittenBody): RequestBody;
8
- export declare function Lock(obj: DataControllerInstance, meta: DataAPIMeta, data: RowFields, written: string[]): void;
9
- export declare function Unlock(obj: DataControllerInstance, meta: DataAPIMeta, dbData: RowFields): void;
8
+ export declare function Lock(obj: DataControllerInstance, meta: DataAPIMeta, data: StoredRow, written: string[]): void;
9
+ export declare function Unlock(obj: DataControllerInstance, meta: DataAPIMeta, dbData: StoredRow): void;
10
10
  export declare function UnlockRequest<T extends {}, K extends keyof T>(obj: DataControllerInstance, meta: DataAPIMeta, row: ValueProxy<T>, field: K): ValueProxy<T[K]>;
11
11
  export declare function ClearInternal(meta: DataAPIMeta, obj: Parameters<typeof Validation.ClearInternal>[1]): void;
12
12
  export {};
@@ -10,6 +10,23 @@ const interface_api_util_1 = require("@antelopejs/interface-api-util");
10
10
  const common_1 = require("@antelopejs/interface-database-decorators/modifiers/common");
11
11
  const prototypes_1 = require("./prototypes");
12
12
  const guards_1 = require("./guards");
13
+ /**
14
+ * The fields `keys` of a related row, refused with 500 when one holds a value
15
+ * no response can.
16
+ */
17
+ function relatedRow(plain, keys) {
18
+ const row = {};
19
+ for (const key of keys) {
20
+ const value = plain[key];
21
+ (0, interface_api_util_1.assert)((0, guards_1.isWriteValue)(value), 500, `Field '${key}' of a related row holds a bigint, a symbol or a function, which a response cannot hold`);
22
+ row[key] = value;
23
+ }
24
+ return row;
25
+ }
26
+ /** Whether a row value is a list, whose items are row values too. */
27
+ function isStoredList(value) {
28
+ return Array.isArray(value);
29
+ }
13
30
  function ParseBody(body) {
14
31
  let data = body;
15
32
  if (Buffer.isBuffer(body)) {
@@ -26,27 +43,27 @@ function ParseBody(body) {
26
43
  function Lock(obj, meta, data, written) {
27
44
  for (const [modifier, field] of meta.modifierKeys.entries()) {
28
45
  const keyed = modifier;
29
- const key = (0, prototypes_1.fieldsOf)(obj)[field];
30
- (0, common_1.lock)(data, keyed, written, key);
46
+ (0, common_1.lock)(data, keyed, written, ...(0, prototypes_1.controllerField)(obj, field));
31
47
  }
32
48
  }
33
49
  function Unlock(obj, meta, dbData) {
34
50
  for (const [name, field] of Object.entries(meta.fields)) {
35
51
  if (field.foreign && (0, guards_1.isObject)(dbData[name]) && field.foreign[1]) {
36
52
  const foreignSchema = field.foreign[1];
37
- dbData[name] = Array.isArray(dbData[name])
38
- ? dbData[name].map((entry) => (0, guards_1.isObject)(entry) ? (0, common_1.fromDatabase)(entry, foreignSchema) : entry)
39
- : (0, common_1.fromDatabase)(dbData[name], field.foreign[1]);
53
+ const related = dbData[name];
54
+ dbData[name] = isStoredList(related)
55
+ ? related.map((entry) => (0, guards_1.isObject)(entry) ? (0, common_1.fromDatabase)(entry, foreignSchema) : entry)
56
+ : (0, common_1.fromDatabase)(related, foreignSchema);
40
57
  }
41
58
  }
42
59
  for (const [modifier, field] of meta.modifierKeys.entries()) {
43
60
  const keyed = modifier;
44
- const key = (0, prototypes_1.fieldsOf)(obj)[field];
45
- (0, common_1.unlock)(dbData, keyed, undefined, key);
61
+ const key = (0, prototypes_1.controllerField)(obj, field);
62
+ (0, common_1.unlock)(dbData, keyed, undefined, ...key);
46
63
  for (const [foreign, fieldData] of Object.entries(meta.fields)) {
47
64
  const related = dbData[foreign];
48
65
  if (fieldData.foreign && (0, guards_1.isObject)(related)) {
49
- (0, common_1.unlock)(related, keyed, undefined, key);
66
+ (0, common_1.unlock)(related, keyed, undefined, ...key);
50
67
  }
51
68
  }
52
69
  }
@@ -54,7 +71,7 @@ function Unlock(obj, meta, dbData) {
54
71
  function UnlockRequest(obj, meta, row, field) {
55
72
  const modifiers = Array.from(meta.modifierKeys.entries()).map(([modifier, field]) => ({
56
73
  modifier,
57
- args: [(0, prototypes_1.fieldsOf)(obj)[field]],
74
+ args: (0, prototypes_1.controllerField)(obj, field),
58
75
  }));
59
76
  return (0, common_1.unlockrequest)(meta.tableClass, row, field, modifiers);
60
77
  }
@@ -72,7 +89,7 @@ function ClearInternal(meta, obj) {
72
89
  const processForeign = (data) => {
73
90
  const plain = (0, common_1.toPlainData)(data);
74
91
  if (!foreign?.[4]) {
75
- return plain;
92
+ return relatedRow(plain, Object.keys(plain));
76
93
  }
77
94
  const targetJoined = foreign[6];
78
95
  if (targetJoined?.length) {
@@ -83,16 +100,12 @@ function ClearInternal(meta, obj) {
83
100
  return null;
84
101
  }
85
102
  }
86
- const plainPlucked = {};
87
- for (const key of foreign[4]) {
88
- const value = plain[key];
89
- plainPlucked[key] = value;
90
- }
91
- return plainPlucked;
103
+ return relatedRow(plain, foreign[4]);
92
104
  };
93
- entry[name] = Array.isArray(entry[name])
94
- ? entry[name].map((item) => (0, guards_1.isObject)(item) ? processForeign(item) : item)
95
- : processForeign(entry[name]);
105
+ const related = entry[name];
106
+ entry[name] = isStoredList(related)
107
+ ? related.map((item) => (0, guards_1.isObject)(item) ? processForeign(item) : item)
108
+ : processForeign(related);
96
109
  }
97
110
  }
98
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/internal/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/internal/validation.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import type { DataControllerCallbackWithOptions, DataControllerInstance } from "
5
5
  import type { FieldValidator, FieldData, ComputedExpression, ComputedOptions, FilterFunction, ForeignOptions, ReadableAccessFields, WritableAccessFields } from "./internal/field-types";
6
6
  export { FilterValuesOf } from "./internal/filters";
7
7
  export type { DataControllerCallback, DataControllerCallbackWithOptions, DataControllerInstance, ExtractCallback, DataControllerDef, ExtractDefCallbacks, } from "./internal/controller-types";
8
- export type { ForeignJoinedRef, FieldParseSuccess, FieldParseFailure, FieldParseResult, FieldValidationResult, FieldValue, FieldValues, RowFields, ForeignOptions, FieldValidator, FieldData, ComputedExpression, ComputedOptions, ComputedFieldData, FilterValue, FieldFilter, FilterFunction, ReadableAccessFields, WritableAccessFields, } from "./internal/field-types";
8
+ export type { ForeignJoinedRef, FieldParseSuccess, FieldParseFailure, FieldParseResult, FieldValidationResult, FieldValue, FieldValues, StoredRow, ForeignOptions, FieldValidator, FieldData, ComputedExpression, ComputedOptions, ComputedFieldData, FilterValue, FieldFilter, FilterFunction, ReadableAccessFields, WritableAccessFields, } from "./internal/field-types";
9
9
  /**
10
10
  * Field access mode enum.
11
11
  */
@@ -15,9 +15,6 @@ function statusOfRefusal(body) {
15
15
  function body(fields) {
16
16
  return Buffer.from(JSON.stringify(fields));
17
17
  }
18
- class Money {
19
- amount = 1;
20
- }
21
18
  describe("Validation.ParseBody", () => {
22
19
  it("parses a JSON object", () => (0, chai_1.expect)(components_1.Validation.ParseBody(body({ name: "a", tags: [1, null] }))).to.eql({
23
20
  name: "a",
@@ -45,31 +42,13 @@ describe("Validation.ParseBody", () => {
45
42
  "a",
46
43
  ]);
47
44
  });
48
- it("refuses a body nested deeper than the call stack allows that ends in a function", () => {
49
- const deepest = { __proto__: null, run: () => 1 };
50
- const nested = Array.from({ length: 50000 }).reduce((inner) => ({ next: inner }), deepest);
51
- // @ts-expect-error a function deep in the body is off-contract input, and the body is refused with 400
52
- (0, chai_1.expect)(statusOfRefusal(nested)).to.equal(400);
53
- });
54
45
  it("accepts a body without a prototype", () => {
55
46
  const bare = { __proto__: null, name: "a" };
56
47
  (0, chai_1.expect)(components_1.Validation.ParseBody(bare)).to.equal(bare);
57
48
  });
58
- it("refuses a parsed body holding what JSON cannot", () => {
59
- const withFunction = { __proto__: null, run: () => 1 };
60
- const withInstance = { __proto__: null, price: new Money() };
61
- const withBigInt = { __proto__: null, count: 1n };
62
- const withUndefined = { __proto__: null, list: [1, undefined] };
49
+ it("refuses a cyclic parsed body", () => {
63
50
  const cyclic = {};
64
51
  cyclic.self = cyclic;
65
- // @ts-expect-error a function value is off-contract input, and the body is refused with 400
66
- (0, chai_1.expect)(statusOfRefusal(withFunction)).to.equal(400);
67
- // @ts-expect-error a class instance value is off-contract input, and the body is refused with 400
68
- (0, chai_1.expect)(statusOfRefusal(withInstance)).to.equal(400);
69
- // @ts-expect-error a bigint value is off-contract input, and the body is refused with 400
70
- (0, chai_1.expect)(statusOfRefusal(withBigInt)).to.equal(400);
71
- // @ts-expect-error an undefined array item is off-contract input, and the body is refused with 400
72
- (0, chai_1.expect)(statusOfRefusal(withUndefined)).to.equal(400);
73
52
  (0, chai_1.expect)(statusOfRefusal(cyclic)).to.equal(400);
74
53
  });
75
54
  });
@@ -1 +1 @@
1
- {"version":3,"file":"parse_body.test.js","sourceRoot":"","sources":["../../../src/tests/components/parse_body.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse_body.test.js","sourceRoot":"","sources":["../../../src/tests/components/parse_body.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const interface_api_1 = require("@antelopejs/interface-api");
5
+ const components_1 = require("../../components");
6
+ /**
7
+ * The HTTP status `Validation.ParseBody` refuses `body` with, or 200 when it
8
+ * accepts it.
9
+ *
10
+ * @param {unknown} body A value outside the body types the route declares.
11
+ */
12
+ function statusOfRefusal(body) {
13
+ try {
14
+ components_1.Validation.ParseBody(body);
15
+ }
16
+ catch (error) {
17
+ return error instanceof interface_api_1.HTTPResult ? error.getStatus() : undefined;
18
+ }
19
+ return 200;
20
+ }
21
+ class Money {
22
+ amount = 1;
23
+ }
24
+ describe("Validation.ParseBody on a parsed body its types forbid", () => {
25
+ it("refuses a body nested deeper than the call stack allows that ends in a function", () => {
26
+ const deepest = { __proto__: null, run: () => 1 };
27
+ let nested = { next: deepest };
28
+ for (let depth = 1; depth < 50000; depth += 1) {
29
+ nested = { next: nested };
30
+ }
31
+ (0, chai_1.expect)(statusOfRefusal(nested)).to.equal(400);
32
+ });
33
+ it("refuses a parsed body holding what JSON cannot", () => {
34
+ (0, chai_1.expect)([
35
+ statusOfRefusal({ __proto__: null, run: () => 1 }),
36
+ statusOfRefusal({ __proto__: null, price: new Money() }),
37
+ statusOfRefusal({ __proto__: null, count: 1n }),
38
+ statusOfRefusal({ __proto__: null, list: [1, undefined] }),
39
+ ]).to.eql([400, 400, 400, 400]);
40
+ });
41
+ });
42
+ //# sourceMappingURL=parse_body.untyped.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse_body.untyped.spec.js","sourceRoot":"","sources":["../../../src/tests/components/parse_body.untyped.spec.js"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,6DAAuD;AAEvD,iDAA8C;AAE9C;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAI;IAC3B,IAAI,CAAC;QACH,uBAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,YAAY,0BAAU,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,KAAK;IACT,MAAM,GAAG,CAAC,CAAC;CACZ;AAED,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACtE,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;QAClD,IAAI,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC5B,CAAC;QACD,IAAA,aAAM,EAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,IAAA,aAAM,EAAC;YACL,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;YAClD,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC;YACxD,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC/C,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;SAC3D,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,117 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const chai_1 = require("chai");
10
+ const interface_api_1 = require("@antelopejs/interface-api");
11
+ const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
12
+ const components_1 = require("../../components");
13
+ const metadata_1 = require("../../metadata");
14
+ async function statusOf(run) {
15
+ try {
16
+ await run();
17
+ }
18
+ catch (error) {
19
+ if (!(error instanceof interface_api_1.HTTPResult))
20
+ throw error;
21
+ return error.getStatus();
22
+ }
23
+ return 200;
24
+ }
25
+ function metaOf(target) {
26
+ const meta = new metadata_1.DataAPIMeta(target);
27
+ meta.tableClass = class TableRow {
28
+ };
29
+ meta.schemaName = "default";
30
+ return meta;
31
+ }
32
+ class Tally {
33
+ get total() {
34
+ return 1n;
35
+ }
36
+ get label() {
37
+ return "tally";
38
+ }
39
+ }
40
+ class Stamped {
41
+ stamp = () => "now";
42
+ }
43
+ class Hooked {
44
+ onSave = () => "saved";
45
+ title = "draft";
46
+ }
47
+ class Counted {
48
+ set count(value) {
49
+ this.table.count = BigInt(value);
50
+ }
51
+ }
52
+ let Owner = class Owner extends interface_database_decorators_1.Table {
53
+ name = "ada";
54
+ count = 1n;
55
+ };
56
+ Owner = __decorate([
57
+ (0, interface_database_decorators_1.RegisterTable)("stored-row-owners", "default")
58
+ ], Owner);
59
+ describe("A row value no database stores", () => {
60
+ before(() => (0, interface_database_decorators_1.RegisterSchema)("default"));
61
+ it("refuses a getter that returns a bigint on read", async () => {
62
+ const meta = metaOf(Tally);
63
+ meta
64
+ .setDescriptor("total", Object.getOwnPropertyDescriptor(Tally.prototype, "total"))
65
+ .setMode("total", metadata_1.AccessMode.ReadOnly);
66
+ (0, chai_1.expect)(await statusOf(() => components_1.Query.ReadProperties(new Tally(), meta, {}))).to.equal(500);
67
+ });
68
+ it("reads a getter that returns text", async () => {
69
+ const meta = metaOf(Tally);
70
+ meta
71
+ .setDescriptor("label", Object.getOwnPropertyDescriptor(Tally.prototype, "label"))
72
+ .setMode("label", metadata_1.AccessMode.ReadOnly);
73
+ (0, chai_1.expect)(await components_1.Query.ReadProperties(new Tally(), meta, {})).to.eql({
74
+ label: "tally",
75
+ });
76
+ });
77
+ it("refuses a field default that is a function on write", async () => {
78
+ const meta = metaOf(Stamped);
79
+ meta.setMode("stamp", metadata_1.AccessMode.ReadOnly);
80
+ (0, chai_1.expect)(await statusOf(() => components_1.Query.WriteProperties(new Stamped(), meta, {}))).to.equal(500);
81
+ });
82
+ it("writes a field default beside a member default that is a function", async () => {
83
+ const meta = metaOf(Hooked);
84
+ meta.setMode("title", metadata_1.AccessMode.ReadOnly);
85
+ (0, chai_1.expect)(await components_1.Query.WriteProperties(new Hooked(), meta, {})).to.eql({
86
+ title: "draft",
87
+ });
88
+ });
89
+ it("refuses a setter that writes a bigint into the row", async () => {
90
+ const meta = metaOf(Counted);
91
+ meta
92
+ .setDescriptor("count", Object.getOwnPropertyDescriptor(Counted.prototype, "count"))
93
+ .setMode("count", metadata_1.AccessMode.WriteOnly);
94
+ (0, chai_1.expect)(await statusOf(() => components_1.Query.WriteProperties(new Counted(), meta, { count: 2 }))).to.equal(500);
95
+ });
96
+ it("refuses a related row that holds a bigint", async () => {
97
+ const meta = metaOf(Stamped);
98
+ meta.setForeign("owner", "stored-row-owners");
99
+ (0, chai_1.expect)(await statusOf(() => components_1.Validation.ClearInternal(meta, { owner: new Owner() }))).to.equal(500);
100
+ });
101
+ it("refuses a plucked related row that holds a bigint", async () => {
102
+ const meta = metaOf(Stamped);
103
+ meta.setForeign("owner", "stored-row-owners", undefined, undefined, [
104
+ "name",
105
+ "count",
106
+ ]);
107
+ (0, chai_1.expect)(await statusOf(() => components_1.Validation.ClearInternal(meta, { owner: new Owner() }))).to.equal(500);
108
+ });
109
+ it("keeps a related row that holds stored values", () => {
110
+ const meta = metaOf(Stamped);
111
+ meta.setForeign("owner", "stored-row-owners");
112
+ const row = { owner: { name: "ada" } };
113
+ components_1.Validation.ClearInternal(meta, row);
114
+ (0, chai_1.expect)(row).to.eql({ owner: { name: "ada" } });
115
+ });
116
+ });
117
+ //# sourceMappingURL=stored_row.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stored_row.test.js","sourceRoot":"","sources":["../../../src/tests/components/stored_row.test.ts"],"names":[],"mappings":"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"}
@@ -11,15 +11,17 @@ class Holder {
11
11
  return `read from ${this.own}`;
12
12
  }
13
13
  }
14
- describe("fieldsOf", () => {
14
+ describe("controllerField", () => {
15
15
  it("answers own fields and inherited accessors by name", () => {
16
- const fields = (0, prototypes_1.fieldsOf)(new Holder());
17
- node_assert_1.default.strictEqual(fields.own, "own value");
18
- node_assert_1.default.strictEqual(fields.inherited, "read from own value");
19
- node_assert_1.default.strictEqual(fields.absent, undefined);
16
+ const holder = new Holder();
17
+ node_assert_1.default.deepStrictEqual([
18
+ (0, prototypes_1.controllerField)(holder, "own"),
19
+ (0, prototypes_1.controllerField)(holder, "inherited"),
20
+ (0, prototypes_1.controllerField)(holder, "absent"),
21
+ ], [["own value"], ["read from own value"], [undefined]]);
20
22
  });
21
23
  it("refuses a value that is not an object", () => {
22
- node_assert_1.default.throws(() => (0, prototypes_1.fieldsOf)(() => undefined), /A data controller must be an object/);
24
+ node_assert_1.default.throws(() => (0, prototypes_1.controllerField)(() => undefined, "own"), /A data controller must be an object/);
23
25
  });
24
26
  });
25
27
  //# sourceMappingURL=controller-fields.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller-fields.test.js","sourceRoot":"","sources":["../../../src/tests/internal/controller-fields.test.ts"],"names":[],"mappings":";;;;;AAAA,8DAAiC;AAEjC,0DAAqD;AAErD,MAAM,MAAM;IACV,GAAG,GAAG,WAAW,CAAC;IAElB,IAAI,SAAS;QACX,OAAO,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;CACF;AAED,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,IAAA,qBAAQ,EAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAEtC,qBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC5C,qBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAC5D,qBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,qBAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAA,qBAAQ,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAC/B,qCAAqC,CACtC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"controller-fields.test.js","sourceRoot":"","sources":["../../../src/tests/internal/controller-fields.test.ts"],"names":[],"mappings":";;;;;AAAA,8DAAiC;AAEjC,0DAA4D;AAE5D,MAAM,MAAM;IACV,GAAG,GAAG,WAAW,CAAC;IAElB,IAAI,SAAS;QACX,OAAO,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;CACF;AAED,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAE5B,qBAAM,CAAC,eAAe,CACpB;YACE,IAAA,4BAAe,EAAC,MAAM,EAAE,KAAK,CAAC;YAC9B,IAAA,4BAAe,EAAC,MAAM,EAAE,WAAW,CAAC;YACpC,IAAA,4BAAe,EAAC,MAAM,EAAE,QAAQ,CAAC;SAClC,EACD,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CACtD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,qBAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAA,4BAAe,EAAC,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,EAC7C,qCAAqC,CACtC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/docs/3.routes.md CHANGED
@@ -323,7 +323,7 @@ const routes = {
323
323
  };
324
324
  ```
325
325
 
326
- The `GetGuard` callback receives `(ctx, current, params)`. Declare it as a regular function to reach the controller through `this`, typed `DataControllerInstance`. That type is `object`, with no string index, so narrow `this` (with `instanceof` your controller class, for example) before you read a controller field. `current` is `RowFields`, whose values are `unknown`.
326
+ The `GetGuard` callback receives `(ctx, current, params)`. Declare it as a regular function to reach the controller through `this`, typed `DataControllerInstance`. That type is `object`, with no string index, so narrow `this` (with `instanceof` your controller class, for example) before you read a controller field. `current` is a `StoredRow`: each value is one a database stores (`WriteValue`), a relation's row instance, a nested `StoredRow` or a list of those.
327
327
 
328
328
  | Argument | Contents | Use it for |
329
329
  | --------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------- |
@@ -419,7 +419,9 @@ The default routes answer with these HTTP errors.
419
419
  | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
420
420
  | `400 Bad Request` | A field fails its validator, a mandatory field is missing, the body is not a JSON object, or a parameter is missing or invalid |
421
421
  | `404 Not Found` | The record does not exist |
422
- | `500 Internal Server Error` | The database operation fails, or the controller holds no model |
422
+ | `500 Internal Server Error` | The database operation fails, the controller holds no model, or a row holds a value no database stores (see below) |
423
+
424
+ A row holds only values a database stores: text, numbers, booleans, `null`, `undefined`, dates, and arrays or objects of those. A route answers `500` when a getter it reads returns a `bigint`, a `symbol` or a function, when the default the controller class declares for a decorated field is one, when a setter writes one into the row, or when a related row holds one. Convert the value in the getter, default or setter, for example `String(total)` for a `bigint`, or keep a callback out of the decorated fields.
423
425
 
424
426
  A failed mandatory or validator check answers a JSON body with a `code` and the `fields` concerned (see [validators](./5.validators.md#error-handling)). Every other error the routes raise answers its message as text, such as `Missing id.` or `Not Found`.
425
427
 
@@ -132,6 +132,8 @@ get fullName() {
132
132
  }
133
133
  ```
134
134
 
135
+ A getter returns a value a database could store: text, a number, a boolean, `null`, `undefined`, a `Date`, or an array or object of those. A getter that returns a `bigint`, a `symbol` or a function, or an object holding one (an own `toJSON` method or arrow-function field counts), fails the read with `500`. Convert such a value before you return it, for example `String(total)` for a `bigint`.
136
+
135
137
  ## Pagination
136
138
 
137
139
  Every list response carries pagination metadata. The response has this shape:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antelopejs/interface-data-api",
3
- "version": "0.6.3",
3
+ "version": "0.7.0",
4
4
  "description": "AntelopeJS interface that generates CRUD REST endpoints from database tables, with access rules, validation and pagination",
5
5
  "keywords": [
6
6
  "antelopejs",
@@ -78,7 +78,7 @@
78
78
  "@antelopejs/interface-core": "^0.4.0",
79
79
  "@antelopejs/interface-database": "^0.3.0",
80
80
  "@antelopejs/interface-database-decorators": "^0.2.0",
81
- "@antelopejs/tooling-configs": "^0.5.1",
81
+ "@antelopejs/tooling-configs": "^0.5.5",
82
82
  "@types/chai": "^4.3.20",
83
83
  "@types/mocha": "^10.0.10",
84
84
  "@types/node": "^22.19.15",