@zeroxsolutions/response 0.14.7 → 0.14.8

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/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## 0.14.8 (2026-11-10)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **response:** let an error map entry name the fields its line logs ([1d44f11](https://github.com/zeroxsolutions/zeroxsolutions/commit/1d44f11))
6
+ - **response:** type a linkage and a request by the id it points at ([3a2a169](https://github.com/zeroxsolutions/zeroxsolutions/commit/3a2a169))
7
+
8
+ ### ❤️ Thank You
9
+
10
+ - luongvantuit
11
+
1
12
  ## 0.14.7 (2026-10-21)
2
13
 
3
14
  ### 🚀 Features
package/README.md CHANGED
@@ -48,6 +48,30 @@ the descriptor builds the related type's serializer from that same request. Two
48
48
  other - a relationship holds a thunk - and one side of such a pair carries an explicit
49
49
  `JsonApiResource<typeof attributes>`, which is the only thing tsc cannot infer through the cycle.
50
50
 
51
+ A resource names its id as the wire carries it with `id`, the wire half of a codec, and that one value holds
52
+ every place the type's id appears: `data.id`, a linkage in any resource's `relationships` that points at the
53
+ type, an update's `data.id`, a request's linkage, and the ids `readRequestDocument` hands back. Each is typed by
54
+ it and parsed against it, so a linkage carrying another type's id fails the document, and a request carrying one
55
+ answers 422 at its pointer. An object of the type in `included` is parsed against it and not typed by it: the
56
+ union of every type a document reaches, spelled into each route's declaration, outgrows what the compiler will
57
+ serialize for a large router. A resource that names
58
+ no `id` keeps any text in all of those places. The explicit annotation on one side of a cycle carries the
59
+ id as its fifth argument, or a linkage to that side reads as any text.
60
+
61
+ ```ts
62
+ const places = jsonApiResource('places', placeAttributesSchema, { id: placeIdSchema.in });
63
+ const posts = jsonApiResource('posts', postAttributesSchema, {
64
+ id: postIdSchema.in,
65
+ relationships: {
66
+ place: toOne(
67
+ () => places,
68
+ (row) => row.place,
69
+ ),
70
+ },
71
+ });
72
+ // output<typeof posts.document>['data']['relationships']['place']['data']['id'] is `place_${string}`
73
+ ```
74
+
51
75
  `declaredDocumentShape` reads that same declaration back as the permit-list a query guard needs: every
52
76
  reachable type with the fields it publishes - its attributes and its relationships, as the standard counts
53
77
  them - and every relationship path a document can compound.
@@ -133,7 +157,8 @@ an answer's optional members read what that class carries:
133
157
  - `meta` renders the error's own data a client acts on, in the member the standard gives it, rather than
134
158
  a `detail` a client would have to parse;
135
159
  - `source` names the request slot to blame;
136
- - `links` points at a page about the problem.
160
+ - `links` points at a page about the problem;
161
+ - `logged` returns, from the error, the fields its log line carries besides its own.
137
162
 
138
163
  The rendered error object carries the error's `message` as `detail`.
139
164
 
@@ -1,10 +1,11 @@
1
1
  import type { output, ZodObject, ZodType } from 'zod';
2
- import { type CollectionDocument, type ResourceDocument } from './document.js';
3
2
  import { errorDocumentSchema } from './errors/index.js';
4
3
  import { JSON_API_MEDIA_TYPE } from './media-type.js';
5
4
  import type { Meta, PaginationLinks } from './primitives.js';
6
5
  import type { RelationshipDef } from './relationship.js';
7
- import type { JsonApiResource } from './resource.js';
6
+ import type { CollectionDocumentOf, JsonApiResource, ResourceDocumentOf } from './resource.js';
7
+ /** The relationship maps a resource may declare, as `JsonApiResource` bounds its own. */
8
+ type Relationships = Readonly<Record<string, RelationshipDef<any, any>>>;
8
9
  /**
9
10
  * An OpenAPI response object for this spelling - one media type, one schema, and the `Retry-After` a
10
11
  * refusal that tells its caller how long to wait declares.
@@ -46,7 +47,7 @@ export declare function errorResponse(description: string, options?: {
46
47
  retryAfterSeconds: number;
47
48
  }): JsonApiResponse<typeof errorDocumentSchema>;
48
49
  /** The response object for a single resource, off the resource's own declaration. */
49
- export declare function okResponse<A extends ZodObject, C = unknown, I extends string = string>(description: string, resource: JsonApiResource<A, C, string, Readonly<Record<string, RelationshipDef<C>>>, I>): JsonApiResponse<ZodType<ResourceDocument<output<A>, I>>>;
50
+ export declare function okResponse<A extends ZodObject, C = unknown, I extends string = string, T extends string = string, R extends Relationships = Readonly<Record<string, RelationshipDef<C>>>>(description: string, resource: JsonApiResource<A, C, T, R, I>): JsonApiResponse<ZodType<ResourceDocumentOf<A, T, R, I>>>;
50
51
  /**
51
52
  * The response object for a collection, off the resource's own declaration.
52
53
  *
@@ -54,8 +55,9 @@ export declare function okResponse<A extends ZodObject, C = unknown, I extends s
54
55
  * as required and typed, so a client reads it without narrowing; one left out stays the standard's
55
56
  * optional, free-form member.
56
57
  */
57
- export declare function listResponse<A extends ZodObject, C = unknown, M extends ZodType<Meta> = never, L extends ZodType<PaginationLinks> = never, I extends string = string>(description: string, resource: JsonApiResource<A, C, string, Readonly<Record<string, RelationshipDef<C>>>, I>, members?: {
58
+ export declare function listResponse<A extends ZodObject, C = unknown, M extends ZodType<Meta> = never, L extends ZodType<PaginationLinks> = never, I extends string = string, T extends string = string, R extends Relationships = Readonly<Record<string, RelationshipDef<C>>>>(description: string, resource: JsonApiResource<A, C, T, R, I>, members?: {
58
59
  meta?: M;
59
60
  links?: L;
60
- }): JsonApiResponse<ZodType<CollectionDocument<output<A>, output<M>, output<L>, I>>>;
61
+ }): JsonApiResponse<ZodType<CollectionDocumentOf<A, T, R, I, output<M>, output<L>>>>;
62
+ export {};
61
63
  //# sourceMappingURL=api-response.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-response.d.ts","sourceRoot":"","sources":["../src/api-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACtD,OAAO,EAA4B,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,OAAO;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,OAAO,mBAAmB,EAAE;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE;QAAE,aAAa,EAAE,gBAAgB,CAAA;KAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,CAAC,CAAA;KAAE,CAAC;CACzC,CAAC;AAOF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACtC,eAAe,CAAC,OAAO,mBAAmB,CAAC,CAqB7C;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EACpF,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACvF,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,CAAC,SAAS,SAAS,EACnB,CAAC,GAAG,OAAO,EACX,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,EAC/B,CAAC,SAAS,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,EAC1C,CAAC,SAAS,MAAM,GAAG,MAAM,EAEzB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACxF,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,CAAA;CAAO,GACpC,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAQlF"}
1
+ {"version":3,"file":"api-response.d.ts","sourceRoot":"","sources":["../src/api-response.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { ZodObject } from 'zod';
1
+ import type { output, ZodObject, ZodType } from 'zod';
2
+ import type { Meta, RelationshipLinks, ResourceIdentifier } from './primitives.js';
2
3
  import type { RelatedResource } from './relationship.js';
3
4
  /** Counts a depth down by one; index 0 is where a walk stops. */
4
5
  type Down = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8];
@@ -19,6 +20,10 @@ type TypeOf<X> = X extends {
19
20
  type AttributesOf<X> = X extends {
20
21
  readonly attributes: ZodObject<infer S>;
21
22
  } ? S : NoMembers;
23
+ /** The id a resource declared, or any text where it declared none. */
24
+ export type IdOf<X> = X extends {
25
+ readonly id: infer S extends ZodType;
26
+ } ? output<S> & string : string;
22
27
  /** True where an edge was declared against the wide `RelatedResource`, which knows no type name. */
23
28
  type IsWide<X> = string extends TypeOf<X> ? true : false;
24
29
  /**
@@ -34,8 +39,11 @@ export type ReachableResource<R, Depth extends number = 3, Seen extends string =
34
39
  }[keyof RelationshipsOf<R> & string]);
35
40
  /** The type names a document rooted at `R` can carry. */
36
41
  export type ReachableType<R, Depth extends number = 3> = TypeOf<ReachableResource<R, Depth>>;
37
- /** What a fieldset of `X` may name: its attributes and its relationships, which the standard calls its fields. */
38
- export type FieldName<X> = (keyof AttributesOf<X> | keyof RelationshipsOf<X>) & string;
42
+ /**
43
+ * What a fieldset of `X` may name: its attributes and its relationships, which the standard calls its fields. A
44
+ * conditional, so a route's emitted declaration spells the names and never `X`'s whole graph.
45
+ */
46
+ export type FieldName<X> = X extends unknown ? (keyof AttributesOf<X> | keyof RelationshipsOf<X>) & string : never;
39
47
  /** A sparse fieldset per reachable type. */
40
48
  export type Fieldsets<R, Depth extends number = 3> = {
41
49
  [X in ReachableResource<R, Depth> as TypeOf<X>]?: readonly FieldName<X>[];
@@ -49,6 +57,59 @@ export interface TypedDocumentShape<R, Depth extends number> {
49
57
  /** Every relationship path from the root, dotted for a nested one. */
50
58
  include: IncludePath<R, Depth>[];
51
59
  }
60
+ /** A to-one relationship's linkage: one identifier of type `T` under id `I`, or `null`. */
61
+ export interface ToOneLinkage<T extends string, I extends string> {
62
+ data?: {
63
+ type: T;
64
+ id: I;
65
+ } | null;
66
+ links?: RelationshipLinks;
67
+ meta?: Meta;
68
+ }
69
+ /** A to-many relationship's linkage: identifiers of type `T` under id `I`. */
70
+ export interface ToManyLinkage<T extends string, I extends string> {
71
+ data?: {
72
+ type: T;
73
+ id: I;
74
+ }[];
75
+ links?: RelationshipLinks;
76
+ meta?: Meta;
77
+ }
78
+ /** A relationship whose cardinality the declaration does not carry as a literal. */
79
+ export interface ToAnyLinkage<T extends string, I extends string> {
80
+ data?: {
81
+ type: T;
82
+ id: I;
83
+ } | {
84
+ type: T;
85
+ id: I;
86
+ }[] | null;
87
+ links?: RelationshipLinks;
88
+ meta?: Meta;
89
+ }
90
+ /** A relationship of a resource that declares none, as another server may still send it: any type, any id. */
91
+ export interface FreeLinkage {
92
+ data?: ResourceIdentifier | ResourceIdentifier[] | null;
93
+ links?: RelationshipLinks;
94
+ meta?: Meta;
95
+ }
96
+ /**
97
+ * One relationship's linkage, typed by the resource it points at and its cardinality. Built from the type name and id
98
+ * alone, so a declaration emitted for a route spells the linkage and never the related resource's whole graph.
99
+ */
100
+ type LinkageOf<D> = D extends {
101
+ readonly cardinality: 'many';
102
+ } ? ToManyLinkage<TypeOf<RelatedOf<D>>, IdOf<RelatedOf<D>>> : D extends {
103
+ readonly cardinality: 'one';
104
+ } ? ToOneLinkage<TypeOf<RelatedOf<D>>, IdOf<RelatedOf<D>>> : ToAnyLinkage<TypeOf<RelatedOf<D>>, IdOf<RelatedOf<D>>>;
105
+ /**
106
+ * A resource object's `relationships`: one member per relationship `X` declares. A resource declaring none keeps the
107
+ * standard's free-form member, since its documents carry none to type. A conditional, so it resolves before a
108
+ * declaration is emitted rather than naming `X`.
109
+ */
110
+ export type LinkagesOf<X> = [keyof RelationshipsOf<X>] extends [never] ? Record<string, FreeLinkage> : {
111
+ [K in keyof RelationshipsOf<X>]?: LinkageOf<RelationshipsOf<X>[K]>;
112
+ };
52
113
  /** A resource as far as the graph types care; `RelatedResource` already is one. */
53
114
  export type GraphRoot = RelatedResource<never>;
54
115
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"document-graph.d.ts","sourceRoot":"","sources":["../src/document-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,iEAAiE;AACjE,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/C,KAAK,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEtC;;;GAGG;AACH,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;CAAE,GACnE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAC1B,SAAS,GACT,CAAC,GACH,SAAS,CAAC;AACd,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAC9E,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AACjF,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAE7F,oGAAoG;AACpG,KAAK,MAAM,CAAC,CAAC,IAAI,MAAM,SAAS,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,GACnG,KAAK,GACL;KACG,CAAC,IAAI,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GACtF,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,GACpB,CAAC,GACD,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,GACpB,KAAK,GACL,CAAC,GAAG,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAC/D,KAAK;CACV,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAEzC,iGAAiG;AACjG,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IACtF,CAAC,GACD,CAAC,KAAK,SAAS,CAAC,GACZ,KAAK,GACL;KACG,CAAC,IAAI,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GACtF,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,GACpB,KAAK,GACL,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,GACpB,KAAK,GACL,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GACvD,KAAK;CACV,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAE9C,yDAAyD;AACzD,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7F,kHAAkH;AAClH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAEvF,4CAA4C;AAC5C,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI;KAClD,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE;CAC1E,CAAC;AAEF,sEAAsE;AACtE,MAAM,WAAW,kBAAkB,CAAC,CAAC,EAAE,KAAK,SAAS,MAAM;IACzD,2GAA2G;IAC3G,MAAM,EAAE;SAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE;KAAE,CAAC;IAC5E,sEAAsE;IACtE,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;CAClC;AAED,mFAAmF;AACnF,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"document-graph.d.ts","sourceRoot":"","sources":["../src/document-graph.ts"],"names":[],"mappings":"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"}
@@ -7,18 +7,24 @@ export interface Relationship {
7
7
  links?: RelationshipLinks;
8
8
  meta?: Meta;
9
9
  }
10
- /** A resource object, with `attributes` carrying the declared attribute type and `id` the declared id type. */
11
- export interface ResourceObject<A, I extends string = string> {
10
+ /**
11
+ * A resource object, with `attributes` carrying the declared attribute type, `id` the declared id type, and
12
+ * `relationships` each declared relationship's linkage.
13
+ */
14
+ export interface ResourceObject<A, I extends string = string, L = Record<string, Relationship>> {
12
15
  type: string;
13
16
  id: I;
14
17
  attributes: A;
15
- relationships?: Record<string, Relationship>;
18
+ relationships?: L;
16
19
  links?: ResourceLinks;
17
20
  meta?: Meta;
18
21
  }
19
- /** A single-resource document. `included` holds other resource types, so its attributes stay unknown. */
20
- export interface ResourceDocument<A, I extends string = string> {
21
- data: ResourceObject<A, I>;
22
+ /**
23
+ * A single-resource document. `included` holds other resource types, so its attributes stay unknown; each object is
24
+ * parsed against its own type's declared id.
25
+ */
26
+ export interface ResourceDocument<A, I extends string = string, L = Record<string, Relationship>> {
27
+ data: ResourceObject<A, I, L>;
22
28
  included?: ResourceObject<unknown>[];
23
29
  links?: TopLevelLinks;
24
30
  meta?: Meta;
@@ -38,8 +44,8 @@ type CollectionMember<K extends 'links' | 'meta', Declared, Loose> = [Declared]
38
44
  *
39
45
  * `M` and `L` are the `meta` and `links` a route declared, `never` where it declared none.
40
46
  */
41
- export type CollectionDocument<A, M = never, L = never, I extends string = string> = {
42
- data: ResourceObject<A, I>[];
47
+ export type CollectionDocument<A, M = never, L = never, I extends string = string, R = Record<string, Relationship>> = {
48
+ data: ResourceObject<A, I, R>[];
43
49
  included?: ResourceObject<unknown>[];
44
50
  jsonapi?: JsonApiObject;
45
51
  } & CollectionMember<'links', L, PaginationLinks> & CollectionMember<'meta', M, Meta>;
@@ -50,7 +56,7 @@ export type CollectionDocument<A, M = never, L = never, I extends string = strin
50
56
  * Tuple-wrapped so it does not distribute: extras that carry `meta` on one branch of a union and not the
51
57
  * other may send none, and must not type it as present.
52
58
  */
53
- export type CollectionDocumentFor<A, X, I extends string = string> = CollectionDocument<A, [
59
+ export type CollectionDocumentFor<A, X, I extends string = string, R = Record<string, Relationship>> = CollectionDocument<A, [
54
60
  X
55
61
  ] extends [{
56
62
  meta: infer M;
@@ -58,7 +64,7 @@ export type CollectionDocumentFor<A, X, I extends string = string> = CollectionD
58
64
  X
59
65
  ] extends [{
60
66
  links: infer L;
61
- }] ? L : never, I>;
67
+ }] ? L : never, I, R>;
62
68
  /**
63
69
  * Wraps `attributes` into a resource object - `{ type, id, attributes?, relationships?, links?, meta? }`.
64
70
  *
@@ -76,16 +82,16 @@ export declare function resourceObjectSchema<C>(type: string, attributes: ZodObj
76
82
  * Strict at the top level: the standard forbids any top-level member beyond these (extension members
77
83
  * aside), which is what refuses a `data` document that also carries `errors`.
78
84
  */
79
- export declare function resourceDocumentSchema<A = unknown, C = unknown, I extends string = string>(root: RelatedResource<C>): ZodType<ResourceDocument<A, I>>;
85
+ export declare function resourceDocumentSchema<A = unknown, C = unknown, I extends string = string, L = Record<string, Relationship>>(root: RelatedResource<C>): ZodType<ResourceDocument<A, I, L>>;
80
86
  /**
81
87
  * The document for a COLLECTION - the same members, with `data` an array and paginated `links`.
82
88
  *
83
89
  * A member in `members` replaces the standard's optional one, so the route that declared it publishes it
84
90
  * as required. Strict at the top level for the same reason as {@link resourceDocumentSchema}.
85
91
  */
86
- export declare function collectionDocumentSchema<A = unknown, C = unknown, M = never, L = never, I extends string = string>(root: RelatedResource<C>, members?: {
92
+ export declare function collectionDocumentSchema<A = unknown, C = unknown, M = never, L = never, I extends string = string, R = Record<string, Relationship>>(root: RelatedResource<C>, members?: {
87
93
  meta?: ZodType;
88
94
  links?: ZodType;
89
- }): ZodType<CollectionDocument<A, M, L, I>>;
95
+ }): ZodType<CollectionDocument<A, M, L, I, R>>;
90
96
  export {};
91
97
  //# sourceMappingURL=document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
@@ -18,13 +18,15 @@ export interface DomainErrorAnswer<E extends Error = Error> extends ErrorStatus
18
18
  source?: (error: E) => ErrorSource;
19
19
  /** The data a client acts on, read off the raised error - omit to render no `meta` member. */
20
20
  meta?: (error: E) => Meta;
21
+ /** The fields of the handler's log line for this error, read off the raised error - never sent to the client. */
22
+ logged?: (error: E) => Record<string, unknown>;
21
23
  }
22
24
  /** One entry of a domain error map: the class it answers for, and that answer. */
23
25
  export interface DomainErrorEntry {
24
26
  readonly type: ErrorClass;
25
27
  readonly answer: DomainErrorAnswer;
26
28
  }
27
- /** One entry of that map, inferring the error type so its `source` and `meta` read the members that class has. */
29
+ /** One entry of that map, inferring the error type so its `source`, `meta` and `logged` read the members that class has. */
28
30
  export declare function errorEntry<E extends Error>(type: ErrorClass<E>, answer: DomainErrorAnswer<E>): DomainErrorEntry;
29
31
  /** Builds a transport's type-keyed error map - the one place deciding how each error type answers on the wire. */
30
32
  export declare function defineErrorMap(entries: Iterable<DomainErrorEntry>): DomainErrorMap;
@@ -1 +1 @@
1
- {"version":3,"file":"domain-error-resolver.d.ts","sourceRoot":"","sources":["../src/domain-error-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,WAAW;IAC7E,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,WAAW,CAAC;IACnC,8FAA8F;IAC9F,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC3B;AAED,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AAED,kHAAkH;AAClH,wBAAgB,UAAU,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAI/G;AAED,kHAAkH;AAClH,wBAAgB,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAElF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,aAAa,GAAG,SAAS,CAuB1G"}
1
+ {"version":3,"file":"domain-error-resolver.d.ts","sourceRoot":"","sources":["../src/domain-error-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,WAAW;IAC7E,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,WAAW,CAAC;IACnC,8FAA8F;IAC9F,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1B,iHAAiH;IACjH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAED,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AAED,4HAA4H;AAC5H,wBAAgB,UAAU,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAI/G;AAED,kHAAkH;AAClH,wBAAgB,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAElF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,aAAa,GAAG,SAAS,CAyB1G"}
@@ -1,4 +1,4 @@
1
- /** One entry of that map, inferring the error type so its `source` and `meta` read the members that class has. */
1
+ /** One entry of that map, inferring the error type so its `source`, `meta` and `logged` read the members that class has. */
2
2
  export function errorEntry(type, answer) {
3
3
  // The map is keyed by constructor identity and only ever read back through that key, so the answer declared here is
4
4
  // only ever handed an instance of `type`.
@@ -21,6 +21,7 @@ export function createDomainErrorResolver(map) {
21
21
  }
22
22
  const source = answer.source?.(error);
23
23
  const meta = answer.meta?.(error);
24
+ const logged = answer.logged?.(error);
24
25
  return {
25
26
  status: answer.status,
26
27
  errors: [
@@ -34,6 +35,7 @@ export function createDomainErrorResolver(map) {
34
35
  ...(meta !== undefined ? { meta } : {}),
35
36
  },
36
37
  ],
38
+ ...(logged !== undefined ? { logged } : {}),
37
39
  };
38
40
  };
39
41
  }
@@ -3,5 +3,7 @@ import type { ErrorObject } from './error-document.js';
3
3
  export interface ResolvedError {
4
4
  status: number;
5
5
  errors: ErrorObject[];
6
+ /** The fields of the handler's log line for this error - never sent to the client. */
7
+ logged?: Record<string, unknown>;
6
8
  }
7
9
  //# sourceMappingURL=resolved-error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolved-error.d.ts","sourceRoot":"","sources":["../../src/errors/resolved-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,4FAA4F;AAC5F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB"}
1
+ {"version":3,"file":"resolved-error.d.ts","sourceRoot":"","sources":["../../src/errors/resolved-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,4FAA4F;AAC5F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC"}
package/dist/index.d.ts CHANGED
@@ -14,9 +14,9 @@ export { JSON_API_MEDIA_TYPE } from './media-type.js';
14
14
  export { countedCollectionMetaSchema, offsetPaginationLinksSchema } from './primitives.js';
15
15
  export type { JsonApiObject, Link, Meta, PaginationLinks, RelationshipLinks, ResourceIdentifier, ResourceLinks, TopLevelLinks, } from './primitives.js';
16
16
  export { toMany, toOne, type LoadContextArguments, type RelatedResource, type RelationshipDef, type RelationshipLoader, type RelationshipOptions, } from './relationship.js';
17
- export { jsonApiResource, type JsonApiResource, type ResourceOptions } from './resource.js';
17
+ export { jsonApiResource, type CollectionDocumentOf, type JsonApiResource, type ResourceDocumentOf, type ResourceOptions, } from './resource.js';
18
18
  export type { CollectionExtras, LoadedRows, RequestedDocumentShape, ResourceSerializer, Row } from './serialize.js';
19
19
  export { createUpstreamErrorTranslator, type UpstreamErrorAnswer } from './upstream-error.js';
20
- export { readRequestDocument, requestDocumentSchema, type AttributeName, type ReadRequestDocument, type RelationshipName, type RequestDocument, type RequestDocumentSchema, type RequestMode, type WritableResource, } from './request-document.js';
20
+ export { readRequestDocument, requestDocumentSchema, type AttributeName, type LinkageExtras, type ReadRequestDocument, type RelationshipName, type RequestDocument, type RequestDocumentSchema, type RequestMode, type ResourceObjectExtras, type WritableResource, } from './request-document.js';
21
21
  export { RequestConflict, RequestForbidden } from './request-refusal.js';
22
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC3F,YAAY,EACV,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACpH,OAAO,EAAE,6BAA6B,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC3F,YAAY,EACV,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACpH,OAAO,EAAE,6BAA6B,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ export { createJsonApiErrors, } from './json-api-errors.js';
11
11
  export { JSON_API_MEDIA_TYPE } from './media-type.js';
12
12
  export { countedCollectionMetaSchema, offsetPaginationLinksSchema } from './primitives.js';
13
13
  export { toMany, toOne, } from './relationship.js';
14
- export { jsonApiResource } from './resource.js';
14
+ export { jsonApiResource, } from './resource.js';
15
15
  export { createUpstreamErrorTranslator } from './upstream-error.js';
16
16
  export { readRequestDocument, requestDocumentSchema, } from './request-document.js';
17
17
  export { RequestConflict, RequestForbidden } from './request-refusal.js';
@@ -32,6 +32,8 @@ export declare function loadContext<C>(contextArguments: LoadContextArguments<C>
32
32
  /** What a relationship needs from the resource it points at, so this module never imports the descriptor. */
33
33
  export interface RelatedResource<C = unknown> {
34
34
  readonly type: string;
35
+ /** This type's id as the wire carries it, which every linkage and included object naming the type is held to. */
36
+ readonly id: ZodType<string, string>;
35
37
  readonly relationships: Readonly<Record<string, RelationshipDef<C>>>;
36
38
  /** This type's declared attributes - the keys are the projection, so they are also what a fieldset may name. */
37
39
  readonly attributes: ZodObject;
@@ -71,7 +73,10 @@ export declare function toOne<const R extends RelatedResource<never>, C = Contex
71
73
  export declare function toMany<const R extends RelatedResource<never>, C = ContextOf<R>>(related: () => R, read: (row: Row) => unknown, options?: RelationshipOptions<C>): RelationshipDef<NoInfer<C>, R> & {
72
74
  readonly cardinality: 'many';
73
75
  };
74
- /** The linkage schema for one relationship, pinned to the related `type` so a wrong type fails the parse. */
76
+ /**
77
+ * The linkage schema for one relationship, pinned to the related `type` and to that type's declared id, so a wrong type
78
+ * or another type's id fails the parse.
79
+ */
75
80
  export declare function relationshipSchema<C>(def: RelationshipDef<C>): ZodType;
76
81
  /** The `relationships` member for a whole resource - one key per declaration, absent when it declares none. */
77
82
  export declare function relationshipsSchema<C>(relationships: Readonly<Record<string, RelationshipDef<C>>>): ZodType | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"relationship.d.ts","sourceRoot":"","sources":["../src/relationship.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relationship.d.ts","sourceRoot":"","sources":["../src/relationship.ts"],"names":[],"mappings":"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"}
@@ -20,9 +20,13 @@ export function toOne(related, read, options) {
20
20
  export function toMany(related, read, options) {
21
21
  return { cardinality: 'many', related, read, load: options?.load };
22
22
  }
23
- /** The linkage schema for one relationship, pinned to the related `type` so a wrong type fails the parse. */
23
+ /**
24
+ * The linkage schema for one relationship, pinned to the related `type` and to that type's declared id, so a wrong type
25
+ * or another type's id fails the parse.
26
+ */
24
27
  export function relationshipSchema(def) {
25
- const identifier = resourceIdentifierSchema.extend({ type: z.literal(def.related().type) });
28
+ const related = def.related();
29
+ const identifier = resourceIdentifierSchema.extend({ type: z.literal(related.type), id: related.id });
26
30
  return z
27
31
  .object({
28
32
  data: (def.cardinality === 'one' ? identifier.nullable() : z.array(identifier)).optional(),
@@ -1,17 +1,21 @@
1
1
  import type { input, output, ZodObject, ZodType } from 'zod';
2
2
  import { type JsonApiObject, type Meta, type RelationshipLinks, type ResourceIdentifier, type ResourceLinks } from './primitives.js';
3
+ import type { IdOf } from './document-graph.js';
3
4
  /** Whether a request document creates its resource, or updates the one its URL names. */
4
5
  export type RequestMode = 'create' | 'update';
5
- /** What a request document needs of a relationship: how many it holds, and the type it points at. */
6
+ /** What a request document needs of a relationship: how many it holds, and the type and id it points at. */
6
7
  interface WritableRelationship {
7
8
  readonly cardinality: 'one' | 'many';
8
9
  readonly related: () => {
9
10
  readonly type: string;
11
+ readonly id?: ZodType<string, string>;
10
12
  };
11
13
  }
12
14
  /** What a request document needs of a resource declaration - every `jsonApiResource` is one. */
13
15
  export interface WritableResource {
14
16
  readonly type: string;
17
+ /** The id an update names, as the wire carries it; omitted, any text. */
18
+ readonly id?: ZodType<string, string>;
15
19
  readonly attributes: ZodObject;
16
20
  readonly relationships: Readonly<Record<string, WritableRelationship>>;
17
21
  }
@@ -31,17 +35,17 @@ type AttributesOf<R extends WritableResource, K, M extends RequestMode, S extend
31
35
  * members JSON:API 1.1 allows, which the schema accepts and nothing reads.
32
36
  */
33
37
  type IdentifierOf<D> = D extends {
34
- related: () => {
35
- type: infer T extends string;
38
+ related: () => infer X extends {
39
+ type: string;
36
40
  };
37
41
  } ? {
38
- type: T;
39
- id: string;
42
+ type: X['type'];
43
+ id: IdOf<X>;
40
44
  lid?: string;
41
45
  meta?: Meta;
42
46
  } : never;
43
47
  /** The members JSON:API 1.1 lets a relationship object carry beside its `data`, accepted and never read. */
44
- interface LinkageExtras {
48
+ export interface LinkageExtras {
45
49
  meta?: Meta;
46
50
  links?: RelationshipLinks;
47
51
  }
@@ -78,7 +82,7 @@ type AttributesMember<R extends WritableResource, AK, M extends RequestMode, S e
78
82
  attributes?: AttributesOf<R, AK, M, S>;
79
83
  } : Member<'attributes', AK, AttributesOf<R, AK, M, S>, M>;
80
84
  /** The members JSON:API 1.1 lets a resource object carry beside its type, id and fields, accepted and never read. */
81
- interface ResourceObjectExtras {
85
+ export interface ResourceObjectExtras {
82
86
  lid?: string;
83
87
  meta?: Meta;
84
88
  links?: ResourceLinks;
@@ -86,19 +90,20 @@ interface ResourceObjectExtras {
86
90
  /**
87
91
  * The request document a route declares for `R`: one resource object under `data`, the attributes it names under
88
92
  * `attributes`, and each relationship it names as a relationship object. `S` picks what a client sends (`'input'`) or
89
- * what the handler reads (`'output'`).
93
+ * what the handler reads (`'output'`). A conditional, so a route's emitted declaration spells the document and never
94
+ * the resource `R` it was built from.
90
95
  */
91
- export type RequestDocument<R extends WritableResource, M extends RequestMode, AK extends AttributeName<R> = never, RK extends RelationshipName<R> = never, S extends Side = 'output'> = {
96
+ export type RequestDocument<R extends WritableResource, M extends RequestMode, AK extends AttributeName<R> = never, RK extends RelationshipName<R> = never, S extends Side = 'output'> = R extends unknown ? {
92
97
  data: {
93
98
  type: R['type'];
94
99
  } & ResourceObjectExtras & (M extends 'update' ? {
95
- id: string;
100
+ id: IdOf<R>;
96
101
  } : {
97
102
  id?: never;
98
103
  }) & AttributesMember<R, AK, M, S> & Member<'relationships', RK, LinkagesOf<R, RK, M>, M>;
99
104
  meta?: Meta;
100
105
  jsonapi?: JsonApiObject;
101
- };
106
+ } : never;
102
107
  /** The schema {@link requestDocumentSchema} builds: it reads what a client sends into what a handler reads. */
103
108
  export type RequestDocumentSchema<R extends WritableResource, M extends RequestMode, AK extends AttributeName<R>, RK extends RelationshipName<R>> = ZodType<RequestDocument<R, M, AK, RK, 'output'>, RequestDocument<R, M, AK, RK, 'input'>>;
104
109
  /**
@@ -145,10 +150,10 @@ interface RequestDocumentLike {
145
150
  }
146
151
  /** The ids a relationship's linkage names: one or `null` for a to-one, a list for a to-many. */
147
152
  type IdsOf<L> = L extends readonly {
148
- id: string;
149
- }[] ? string[] : L extends {
150
- id: string;
151
- } ? string : null;
153
+ id: infer I;
154
+ }[] ? I[] : L extends {
155
+ id: infer I;
156
+ } ? I : null;
152
157
  /** What a handler writes from a request document: its attributes, and each relationship as the ids it names. */
153
158
  export type ReadRequestDocument<D> = D extends {
154
159
  data: infer Data;
@@ -1 +1 @@
1
- {"version":3,"file":"request-document.d.ts","sourceRoot":"","sources":["../src/request-document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-document.d.ts","sourceRoot":"","sources":["../src/request-document.ts"],"names":[],"mappings":"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"}
@@ -103,10 +103,11 @@ export function requestDocumentSchema(resource, mode, writes = {}) {
103
103
  const relationshipsSchema = z
104
104
  .object(Object.fromEntries(relationships.map((name) => {
105
105
  const def = resource.relationships[name];
106
+ const related = def.related();
106
107
  const identifier = z
107
108
  .object({
108
- type: z.literal(def.related().type),
109
- id: z.string(),
109
+ type: z.literal(related.type),
110
+ id: related.id ?? z.string(),
110
111
  lid: z.string().optional(),
111
112
  meta: metaSchema.optional(),
112
113
  })
@@ -126,7 +127,7 @@ export function requestDocumentSchema(resource, mode, writes = {}) {
126
127
  data: z
127
128
  .object({
128
129
  type: z.literal(resource.type),
129
- ...(mode === 'update' ? { id: z.string() } : {}),
130
+ ...(mode === 'update' ? { id: resource.id ?? z.string() } : {}),
130
131
  lid: z.string().optional(),
131
132
  attributes: present(attributesSchema, someAttributeRequired),
132
133
  relationships: present(relationshipsSchema, relationships.length > 0),
@@ -1,9 +1,23 @@
1
1
  import type { output, ZodObject, ZodType } from 'zod';
2
2
  import { type CollectionDocument, type CollectionDocumentFor, type ResourceDocument } from './document.js';
3
+ import type { LinkagesOf } from './document-graph.js';
3
4
  import { type LoadContextArguments, type RelatedResource, type RelationshipDef } from './relationship.js';
4
5
  import { type CollectionExtras, type RequestedDocumentShape, type Row } from './serialize.js';
5
6
  /** The context every loader in a relationship map runs under. */
6
7
  type ContextOfRelationships<R> = R[keyof R] extends RelationshipDef<infer C, any> ? C : unknown;
8
+ /** What the graph types read of a resource: its type, its relationships and its declared id. */
9
+ interface ResourceNode<T, R, I extends string> {
10
+ readonly type: T;
11
+ readonly relationships: R;
12
+ readonly id: ZodType<I, I>;
13
+ }
14
+ /**
15
+ * The single-resource document a resource answers: its attributes, its id and its linkage. A conditional, so a route's
16
+ * emitted declaration spells the resolved document and never the relationship graph `R`.
17
+ */
18
+ export type ResourceDocumentOf<A extends ZodObject, T, R, I extends string> = R extends unknown ? ResourceDocument<output<A>, I, LinkagesOf<ResourceNode<T, R, I>>> : never;
19
+ /** The collection document a resource answers, with the `meta` and `links` a route declared. */
20
+ export type CollectionDocumentOf<A extends ZodObject, T, R, I extends string, M = never, L = never> = R extends unknown ? CollectionDocument<output<A>, M, L, I, LinkagesOf<ResourceNode<T, R, I>>> : never;
7
21
  /** Per-entity overrides for a resource declaration. */
8
22
  export interface ResourceOptions<R, I extends string = string> {
9
23
  /** Relationships this resource declares, keyed by the member name they take in `relationships`. */
@@ -30,10 +44,12 @@ export interface JsonApiResource<A extends ZodObject, C = unknown, T extends str
30
44
  readonly type: T;
31
45
  readonly attributes: A;
32
46
  readonly relationships: R;
47
+ /** The id as the wire carries it: the declared one, or any text. */
48
+ readonly id: ZodType<I, I>;
33
49
  /** The single-resource document schema - `{ data, included?, links?, meta?, jsonapi? }`. */
34
- readonly document: ZodType<ResourceDocument<output<A>, I>>;
50
+ readonly document: ZodType<ResourceDocumentOf<A, T, R, I>>;
35
51
  /** The collection document schema - the same members with `data` an array. */
36
- readonly collectionDocument: ZodType<CollectionDocument<output<A>, never, never, I>>;
52
+ readonly collectionDocument: ZodType<CollectionDocumentOf<A, T, R, I>>;
37
53
  /**
38
54
  * Serializes one row into a single-resource document.
39
55
  *
@@ -41,7 +57,7 @@ export interface JsonApiResource<A extends ZodObject, C = unknown, T extends str
41
57
  * and an included relationship that declares a loader is loaded before the document is built
42
58
  * @param context - what the loaders are given; the call takes it only where a loader is reachable
43
59
  */
44
- serialize(row: Row<I>, requested?: RequestedDocumentShape, ...context: LoadContextArguments<C>): Promise<ResourceDocument<output<A>, I>>;
60
+ serialize(row: Row<I>, requested?: RequestedDocumentShape, ...context: LoadContextArguments<C>): Promise<ResourceDocumentOf<A, T, R, I>>;
45
61
  /**
46
62
  * Serializes rows into a collection document, merging in pagination `links` and `meta`.
47
63
  *
@@ -49,7 +65,7 @@ export interface JsonApiResource<A extends ZodObject, C = unknown, T extends str
49
65
  * declared with `listResponse`. A key that is neither `links` nor `meta` is refused, since the
50
66
  * serializer drops it unsent.
51
67
  */
52
- serializeMany<X extends CollectionExtras = Record<never, never>>(rows: Row<I>[], extras?: X & Record<Exclude<keyof X, keyof CollectionExtras>, never>, requested?: RequestedDocumentShape, ...context: LoadContextArguments<C>): Promise<CollectionDocumentFor<output<A>, X, I>>;
68
+ serializeMany<X extends CollectionExtras = Record<never, never>>(rows: Row<I>[], extras?: X & Record<Exclude<keyof X, keyof CollectionExtras>, never>, requested?: RequestedDocumentShape, ...context: LoadContextArguments<C>): Promise<CollectionDocumentFor<output<A>, X, I, LinkagesOf<ResourceNode<T, R, I>>>>;
53
69
  }
54
70
  /** A relationship map's own names, and none where the map is the empty default. */
55
71
  type RelationshipName<R> = string extends keyof R ? never : keyof R & string;
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
package/dist/resource.js CHANGED
@@ -84,6 +84,8 @@ export function jsonApiResource(type, attributes, options = {}) {
84
84
  // The attribute keys ARE the projection, so a row member the schema does not declare never reaches the wire.
85
85
  const projection = Object.fromEntries(Object.keys(attributes.shape).map((name) => [name, 1]));
86
86
  const serializers = new Map();
87
+ // Safe: omitted, `I` is its `string` default, which any text satisfies.
88
+ const id = (options.id ?? z.string());
87
89
  let object;
88
90
  let one;
89
91
  let many;
@@ -91,10 +93,12 @@ export function jsonApiResource(type, attributes, options = {}) {
91
93
  type,
92
94
  attributes,
93
95
  relationships,
96
+ id,
94
97
  get resourceObject() {
95
- return (object ??= resourceObjectSchema(type, attributes, relationships, options.id));
98
+ return (object ??= resourceObjectSchema(type, attributes, relationships, id));
96
99
  },
97
100
  get document() {
101
+ // The schema is assembled through thunks, so nothing static carries the document; the declaration is its type.
98
102
  return (one ??= resourceDocumentSchema(resource));
99
103
  },
100
104
  get collectionDocument() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeroxsolutions/response",
3
- "version": "0.14.7",
3
+ "version": "0.14.8",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "sideEffects": false,