@23blocks/jsonapi-codec 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@23blocks/jsonapi-codec",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
4
4
  "description": "JSON:API v1.0 codec for encoding/decoding API responses",
5
5
  "license": "MIT",
6
6
  "author": "23blocks <hello@23blocks.com>",
package/dist/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export { type JsonApiResource, type JsonApiRelationship, type JsonApiResourceIdentifier, type JsonApiLinks, type JsonApiLink, type JsonApiError, type JsonApiDocument, type JsonApiMeta, isSingleResourceDocument, isCollectionDocument, isErrorDocument, } from './lib/types.js';
2
- export { type IncludedMap, type ResourceMapper, resourceKey, buildIncludedMap, getIncluded, resolveRelationship, resolveRelationshipMany, } from './lib/mapper.js';
3
- export { decodeOne, decodeOneOrNull, decodeMany, extractPageMeta, decodePageResult, decodeWith, } from './lib/decode.js';
4
- export { jsonApiErrorToBlockError, jsonApiErrorsToBlockError, blockErrorFromJsonApi, throwIfError, assertNotError, } from './lib/errors.js';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,SAAS,EACT,eAAe,EACf,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,GACX,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -1,28 +0,0 @@
1
- import type { PageResult, PageMeta } from '@23blocks/contracts';
2
- import type { JsonApiDocument, JsonApiMeta } from './types.js';
3
- import type { ResourceMapper, IncludedMap } from './mapper.js';
4
- /**
5
- * Decode a single resource from a JSON:API document
6
- */
7
- export declare function decodeOne<T>(document: JsonApiDocument, mapper: ResourceMapper<T>): T;
8
- /**
9
- * Decode a single resource from a JSON:API document, returning null if not found
10
- */
11
- export declare function decodeOneOrNull<T>(document: JsonApiDocument, mapper: ResourceMapper<T>): T | null;
12
- /**
13
- * Decode multiple resources from a JSON:API document
14
- */
15
- export declare function decodeMany<T>(document: JsonApiDocument, mapper: ResourceMapper<T>): T[];
16
- /**
17
- * Extract pagination metadata from JSON:API meta
18
- */
19
- export declare function extractPageMeta(meta?: JsonApiMeta): PageMeta;
20
- /**
21
- * Decode a paginated collection from a JSON:API document
22
- */
23
- export declare function decodePageResult<T>(document: JsonApiDocument, mapper: ResourceMapper<T>): PageResult<T>;
24
- /**
25
- * Decode with a custom decoder function
26
- */
27
- export declare function decodeWith<T>(document: JsonApiDocument, decoder: (doc: JsonApiDocument, included: IncludedMap) => T): T;
28
- //# sourceMappingURL=decode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/lib/decode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/D;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,CAAC,CAOH;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,CAAC,GAAG,IAAI,CAOV;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,CAAC,EAAE,CAOL;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,CAO5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,UAAU,CAAC,CAAC,CAAC,CASf;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,KAAK,CAAC,GAC1D,CAAC,CAGH"}
@@ -1,24 +0,0 @@
1
- import { BlockErrorException, type BlockError } from '@23blocks/contracts';
2
- import type { JsonApiDocument, JsonApiError } from './types.js';
3
- /**
4
- * Convert a JSON:API error to a BlockError
5
- */
6
- export declare function jsonApiErrorToBlockError(error: JsonApiError): BlockError;
7
- /**
8
- * Convert multiple JSON:API errors to a single BlockError
9
- * Uses the first error as the primary error, includes others in meta
10
- */
11
- export declare function jsonApiErrorsToBlockError(errors: JsonApiError[]): BlockError;
12
- /**
13
- * Create a BlockErrorException from JSON:API errors
14
- */
15
- export declare function blockErrorFromJsonApi(errors: JsonApiError[]): BlockErrorException;
16
- /**
17
- * Check if a document is an error document and throw if so
18
- */
19
- export declare function throwIfError(document: JsonApiDocument): void;
20
- /**
21
- * Assert that a document is not an error document
22
- */
23
- export declare function assertNotError<T extends JsonApiDocument>(document: T): asserts document is T;
24
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhE;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU,CAQxE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,CAmB5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAEjF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAI5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,eAAe,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAE5F"}
@@ -1,40 +0,0 @@
1
- import type { JsonApiResource } from './types.js';
2
- /**
3
- * Included resources map for efficient relationship resolution
4
- */
5
- export type IncludedMap = Map<string, JsonApiResource>;
6
- /**
7
- * Resource mapper interface
8
- * Each block provides mappers for its resource types
9
- */
10
- export interface ResourceMapper<T> {
11
- /** JSON:API resource type this mapper handles */
12
- type: string;
13
- /**
14
- * Map a JSON:API resource to a domain object
15
- * @param resource - The JSON:API resource to map
16
- * @param included - Map of included resources for relationship resolution
17
- */
18
- map(resource: JsonApiResource, included: IncludedMap): T;
19
- }
20
- /**
21
- * Create a key for the included map
22
- */
23
- export declare function resourceKey(type: string, id: string): string;
24
- /**
25
- * Build an included map from an array of resources
26
- */
27
- export declare function buildIncludedMap(included?: JsonApiResource[]): IncludedMap;
28
- /**
29
- * Get a resource from the included map
30
- */
31
- export declare function getIncluded(included: IncludedMap, type: string, id: string): JsonApiResource | undefined;
32
- /**
33
- * Resolve a relationship from included resources
34
- */
35
- export declare function resolveRelationship<T>(resource: JsonApiResource, relationshipName: string, included: IncludedMap, mapper: ResourceMapper<T>): T | null;
36
- /**
37
- * Resolve a has-many relationship from included resources
38
- */
39
- export declare function resolveRelationshipMany<T>(resource: JsonApiResource, relationshipName: string, included: IncludedMap, mapper: ResourceMapper<T>): T[];
40
- //# sourceMappingURL=mapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../src/lib/mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,GAAG,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,GAAE,eAAe,EAAO,GAAG,WAAW,CAM9E;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,WAAW,EACrB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,eAAe,GAAG,SAAS,CAE7B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,QAAQ,EAAE,eAAe,EACzB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,CAAC,GAAG,IAAI,CAmBV;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EACvC,QAAQ,EAAE,eAAe,EACzB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,CAAC,EAAE,CAsBL"}
@@ -1,154 +0,0 @@
1
- /**
2
- * JSON:API Resource Object
3
- * @see https://jsonapi.org/format/#document-resource-objects
4
- */
5
- export interface JsonApiResource<TAttributes = Record<string, unknown>> {
6
- /** Resource type */
7
- type: string;
8
- /** Resource ID */
9
- id: string;
10
- /** Resource attributes */
11
- attributes?: TAttributes;
12
- /** Resource relationships */
13
- relationships?: Record<string, JsonApiRelationship>;
14
- /** Resource links */
15
- links?: JsonApiLinks;
16
- /** Resource meta */
17
- meta?: Record<string, unknown>;
18
- }
19
- /**
20
- * JSON:API Relationship Object
21
- * @see https://jsonapi.org/format/#document-resource-object-relationships
22
- */
23
- export interface JsonApiRelationship {
24
- /** Relationship data */
25
- data: JsonApiResourceIdentifier | JsonApiResourceIdentifier[] | null;
26
- /** Relationship links */
27
- links?: JsonApiLinks;
28
- /** Relationship meta */
29
- meta?: Record<string, unknown>;
30
- }
31
- /**
32
- * JSON:API Resource Identifier Object
33
- * @see https://jsonapi.org/format/#document-resource-identifier-objects
34
- */
35
- export interface JsonApiResourceIdentifier {
36
- /** Resource type */
37
- type: string;
38
- /** Resource ID */
39
- id: string;
40
- /** Identifier meta */
41
- meta?: Record<string, unknown>;
42
- }
43
- /**
44
- * JSON:API Links Object
45
- * @see https://jsonapi.org/format/#document-links
46
- */
47
- export interface JsonApiLinks {
48
- self?: string | JsonApiLink;
49
- related?: string | JsonApiLink;
50
- first?: string | JsonApiLink | null;
51
- last?: string | JsonApiLink | null;
52
- prev?: string | JsonApiLink | null;
53
- next?: string | JsonApiLink | null;
54
- [key: string]: string | JsonApiLink | null | undefined;
55
- }
56
- /**
57
- * JSON:API Link Object
58
- * @see https://jsonapi.org/format/#document-links
59
- */
60
- export interface JsonApiLink {
61
- href: string;
62
- rel?: string;
63
- describedby?: string;
64
- title?: string;
65
- type?: string;
66
- hreflang?: string | string[];
67
- meta?: Record<string, unknown>;
68
- }
69
- /**
70
- * JSON:API Error Object
71
- * @see https://jsonapi.org/format/#error-objects
72
- */
73
- export interface JsonApiError {
74
- /** Unique identifier for this error */
75
- id?: string;
76
- /** Links related to the error */
77
- links?: {
78
- about?: string | JsonApiLink;
79
- type?: string | JsonApiLink;
80
- };
81
- /** HTTP status code */
82
- status?: string;
83
- /** Application-specific error code */
84
- code?: string;
85
- /** Short summary of the error */
86
- title?: string;
87
- /** Detailed explanation of the error */
88
- detail?: string;
89
- /** Source of the error */
90
- source?: {
91
- pointer?: string;
92
- parameter?: string;
93
- header?: string;
94
- };
95
- /** Error meta */
96
- meta?: Record<string, unknown>;
97
- }
98
- /**
99
- * JSON:API Document
100
- * @see https://jsonapi.org/format/#document-structure
101
- */
102
- export interface JsonApiDocument<TAttributes = Record<string, unknown>> {
103
- /** Primary data */
104
- data?: JsonApiResource<TAttributes> | JsonApiResource<TAttributes>[] | null;
105
- /** Included resources */
106
- included?: JsonApiResource[];
107
- /** Errors */
108
- errors?: JsonApiError[];
109
- /** Top-level meta */
110
- meta?: JsonApiMeta;
111
- /** Top-level links */
112
- links?: JsonApiLinks;
113
- /** JSON:API version info */
114
- jsonapi?: {
115
- version?: string;
116
- ext?: string[];
117
- profile?: string[];
118
- meta?: Record<string, unknown>;
119
- };
120
- }
121
- /**
122
- * JSON:API Meta Object (commonly used for pagination)
123
- */
124
- export interface JsonApiMeta {
125
- /** Current page number */
126
- current_page?: number;
127
- /** Total number of pages */
128
- total_pages?: number;
129
- /** Total count of items */
130
- total_count?: number;
131
- /** Items per page */
132
- per_page?: number;
133
- /** Any additional meta fields */
134
- [key: string]: unknown;
135
- }
136
- /**
137
- * Type guard for single resource document
138
- */
139
- export declare function isSingleResourceDocument<T>(doc: JsonApiDocument<T>): doc is JsonApiDocument<T> & {
140
- data: JsonApiResource<T>;
141
- };
142
- /**
143
- * Type guard for collection resource document
144
- */
145
- export declare function isCollectionDocument<T>(doc: JsonApiDocument<T>): doc is JsonApiDocument<T> & {
146
- data: JsonApiResource<T>[];
147
- };
148
- /**
149
- * Type guard for error document
150
- */
151
- export declare function isErrorDocument(doc: JsonApiDocument): doc is JsonApiDocument & {
152
- errors: JsonApiError[];
153
- };
154
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}