ts-japi 1.6.1 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/Makefile +1 -27
  3. package/README.md +145 -75
  4. package/api-extractor.json +14 -0
  5. package/lib/classes/cache.d.ts +2 -2
  6. package/lib/classes/cache.js +26 -48
  7. package/lib/classes/cache.js.map +1 -1
  8. package/lib/classes/error-serializer.d.ts +6 -6
  9. package/lib/classes/error-serializer.js +58 -125
  10. package/lib/classes/error-serializer.js.map +1 -1
  11. package/lib/classes/linker.d.ts +5 -5
  12. package/lib/classes/linker.d.ts.map +1 -1
  13. package/lib/classes/linker.js +15 -41
  14. package/lib/classes/linker.js.map +1 -1
  15. package/lib/classes/metaizer.d.ts +4 -4
  16. package/lib/classes/metaizer.d.ts.map +1 -1
  17. package/lib/classes/metaizer.js +12 -38
  18. package/lib/classes/metaizer.js.map +1 -1
  19. package/lib/classes/paginator.d.ts +3 -3
  20. package/lib/classes/paginator.js +17 -16
  21. package/lib/classes/paginator.js.map +1 -1
  22. package/lib/classes/relator.d.ts +6 -6
  23. package/lib/classes/relator.d.ts.map +1 -1
  24. package/lib/classes/relator.js +70 -134
  25. package/lib/classes/relator.js.map +1 -1
  26. package/lib/classes/serializer.d.ts +9 -9
  27. package/lib/classes/serializer.js +213 -316
  28. package/lib/classes/serializer.js.map +1 -1
  29. package/lib/index.js +17 -10
  30. package/lib/index.js.map +1 -1
  31. package/lib/interfaces/cache.interface.d.ts +2 -2
  32. package/lib/interfaces/cache.interface.js +1 -1
  33. package/lib/interfaces/error-serializer.interface.d.ts +11 -11
  34. package/lib/interfaces/error-serializer.interface.js +1 -1
  35. package/lib/interfaces/error.interface.js +1 -1
  36. package/lib/interfaces/json-api.interface.js +1 -1
  37. package/lib/interfaces/linker.interface.d.ts +1 -1
  38. package/lib/interfaces/linker.interface.js +1 -1
  39. package/lib/interfaces/paginator.interface.js +1 -1
  40. package/lib/interfaces/relator.interface.d.ts +4 -4
  41. package/lib/interfaces/relator.interface.js +1 -1
  42. package/lib/interfaces/serializer.interface.d.ts +24 -24
  43. package/lib/interfaces/serializer.interface.js +1 -1
  44. package/lib/models/error.model.d.ts +1 -1
  45. package/lib/models/error.model.js +59 -22
  46. package/lib/models/error.model.js.map +1 -1
  47. package/lib/models/link.model.js +11 -10
  48. package/lib/models/link.model.js.map +1 -1
  49. package/lib/models/meta.model.js +5 -6
  50. package/lib/models/meta.model.js.map +1 -1
  51. package/lib/models/relationship.model.js +8 -6
  52. package/lib/models/relationship.model.js.map +1 -1
  53. package/lib/models/resource-identifier.model.js +11 -9
  54. package/lib/models/resource-identifier.model.js.map +1 -1
  55. package/lib/models/resource.model.js +13 -28
  56. package/lib/models/resource.model.js.map +1 -1
  57. package/lib/tsdoc-metadata.json +11 -0
  58. package/lib/types/global.types.js +1 -1
  59. package/lib/utils/is-error-document.d.ts +1 -1
  60. package/lib/utils/is-error-document.js +6 -8
  61. package/lib/utils/is-error-document.js.map +1 -1
  62. package/lib/utils/is-object.js +1 -1
  63. package/lib/utils/is-plain-object.js +4 -4
  64. package/lib/utils/is-plain-object.js.map +1 -1
  65. package/lib/utils/merge.d.ts +2 -2
  66. package/lib/utils/merge.js +16 -63
  67. package/lib/utils/merge.js.map +1 -1
  68. package/lib/utils/serializer.utils.js +56 -202
  69. package/lib/utils/serializer.utils.js.map +1 -1
  70. package/package.json +36 -30
  71. package/tools/generate_docs.ts +33 -0
  72. package/tools/internal/custom_markdown_action.ts +32 -0
  73. package/tools/internal/custom_markdown_documenter.ts +1337 -0
  74. package/tsconfig.json +60 -79
  75. package/CONTRIBUTING.md +0 -127
@@ -1,359 +1,256 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
21
- };
22
- var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
- function verb(n) { return function (v) { return step([n, v]); }; }
26
- function step(op) {
27
- if (f) throw new TypeError("Generator is already executing.");
28
- while (_) try {
29
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
- if (y = 0, t) op = [op[0] & 2, t.value];
31
- switch (op[0]) {
32
- case 0: case 1: t = op; break;
33
- case 4: _.label++; return { value: op[1], done: false };
34
- case 5: _.label++; y = op[1]; op = [0]; continue;
35
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
- default:
37
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
- if (t[2]) _.ops.pop();
42
- _.trys.pop(); continue;
43
- }
44
- op = body.call(thisArg, _);
45
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
- }
48
- };
49
- var __read = (this && this.__read) || function (o, n) {
50
- var m = typeof Symbol === "function" && o[Symbol.iterator];
51
- if (!m) return o;
52
- var i = m.call(o), r, ar = [], e;
53
- try {
54
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
- }
56
- catch (error) { e = { error: error }; }
57
- finally {
58
- try {
59
- if (r && !r.done && (m = i["return"])) m.call(i);
60
- }
61
- finally { if (e) throw e.error; }
62
- }
63
- return ar;
64
- };
65
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
66
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
67
4
  };
68
- exports.__esModule = true;
69
- var resource_identifier_model_1 = __importDefault(require("../models/resource-identifier.model"));
70
- var resource_model_1 = __importDefault(require("../models/resource.model"));
71
- var merge_1 = __importDefault(require("../utils/merge"));
72
- var serializer_utils_1 = require("../utils/serializer.utils");
73
- var cache_1 = __importDefault(require("./cache"));
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const resource_identifier_model_1 = __importDefault(require("../models/resource-identifier.model"));
7
+ const resource_model_1 = __importDefault(require("../models/resource.model"));
8
+ const merge_1 = __importDefault(require("../utils/merge"));
9
+ const serializer_utils_1 = require("../utils/serializer.utils");
10
+ const cache_1 = __importDefault(require("./cache"));
74
11
  /**
75
- * The {@linkcode Serializer} class is the main class used to serializer data
76
- * (you can use the {@linkcode ErrorSerializer} class to serialize errors).
12
+ * The {@link Serializer} class is the main class used to serializer data
13
+ * (you can use the {@link ErrorSerializer} class to serialize errors).
77
14
  *
78
15
  * Example:
79
16
  * ```typescript
80
17
  * [[include:serializer.example.ts]]
81
18
  * ```
82
19
  */
83
- var Serializer = /** @class */ (function () {
20
+ class Serializer {
84
21
  /**
85
- * Creates a {@linkcode Serializer}.
22
+ * Default options. Can be edited to change default options globally.
23
+ */
24
+ static defaultOptions = {
25
+ idKey: 'id',
26
+ version: '1.0',
27
+ onlyIdentifier: false,
28
+ nullData: false,
29
+ asIncluded: false,
30
+ onlyRelationship: false,
31
+ cache: false,
32
+ depth: 0,
33
+ projection: null,
34
+ linkers: {},
35
+ metaizers: {},
36
+ };
37
+ /**
38
+ * The name to use for the type.
39
+ */
40
+ collectionName;
41
+ /**
42
+ * The set of options for the serializer.
43
+ */
44
+ options;
45
+ /**
46
+ * The set of helper functions for the serializer
47
+ */
48
+ helpers;
49
+ /**
50
+ * Caching
51
+ */
52
+ cache = new cache_1.default();
53
+ /**
54
+ * Creates a {@link Serializer}.
86
55
  *
87
- * @param collectionName The name of the collection of objects.
88
- * @param options Options for the serializer.
56
+ * @param collectionName - The name of the collection of objects.
57
+ * @param options - Options for the serializer.
89
58
  */
90
- function Serializer(collectionName, options) {
91
- if (options === void 0) { options = {}; }
92
- /**
93
- * Caching
94
- */
95
- this.cache = new cache_1["default"]();
59
+ constructor(collectionName, options = {}) {
96
60
  // Setting default options.
97
- this.options = merge_1["default"]({}, Serializer.defaultOptions, options);
61
+ this.options = (0, merge_1.default)({}, Serializer.defaultOptions, options);
98
62
  this.helpers = new serializer_utils_1.Helpers(this.options);
99
- if (this.options.cache && this.options.cache instanceof cache_1["default"]) {
63
+ if (this.options.cache && this.options.cache instanceof cache_1.default) {
100
64
  this.cache = this.options.cache;
101
65
  }
102
66
  // Setting type name.
103
67
  this.collectionName = collectionName;
104
68
  }
105
69
  /**
106
- * Gets the {@linkcode Relator}s associated with this serializer
70
+ * Gets the {@link Relator}s associated with this serializer
107
71
  */
108
- Serializer.prototype.getRelators = function () {
72
+ getRelators() {
109
73
  return this.helpers.relators;
110
- };
74
+ }
111
75
  /**
112
- * Sets the {@linkcode Relator}s associated with this serializer
76
+ * Sets the {@link Relator}s associated with this serializer
113
77
  */
114
- Serializer.prototype.setRelators = function (relators) {
78
+ setRelators(relators) {
115
79
  this.options.relators = relators;
116
80
  this.helpers = new serializer_utils_1.Helpers(this.options);
117
- };
81
+ }
118
82
  /** @internal Generates a `ResourceIdentifier`. */
119
- Serializer.prototype.createIdentifier = function (data, options) {
83
+ createIdentifier(data, options) {
120
84
  // Get options
121
85
  if (options === undefined)
122
86
  options = this.options;
123
- var identifierOptions = {};
87
+ const identifierOptions = {};
124
88
  if (options.metaizers.resource) {
125
89
  identifierOptions.meta = options.metaizers.resource.metaize(data);
126
90
  }
127
- return new resource_identifier_model_1["default"](data[options.idKey], this.collectionName, identifierOptions);
128
- };
91
+ return new resource_identifier_model_1.default(data[options.idKey], this.collectionName, identifierOptions);
92
+ }
129
93
  /** @internal Generates a `Resource`. */
130
- Serializer.prototype.createResource = function (data, options, helpers, relatorDataCache) {
131
- return __awaiter(this, void 0, void 0, function () {
132
- var resourceOptions, id, type, relationships_1;
133
- var _this = this;
134
- return __generator(this, function (_a) {
135
- switch (_a.label) {
136
- case 0:
137
- // Get options
138
- if (options === undefined || helpers === undefined) {
139
- options = this.options;
140
- helpers = this.helpers;
141
- }
142
- resourceOptions = {};
143
- id = data[options.idKey];
144
- type = this.collectionName;
145
- // Get attributes
146
- resourceOptions.attributes = helpers.projectAttributes(data);
147
- if (!helpers.relators) return [3 /*break*/, 2];
148
- relationships_1 = {};
149
- return [4 /*yield*/, Promise.all(Object.entries(helpers.relators).map(function (_a) {
150
- var _b = __read(_a, 2), name = _b[0], relator = _b[1];
151
- return __awaiter(_this, void 0, void 0, function () {
152
- var relatedDataCache, _c, _d;
153
- return __generator(this, function (_e) {
154
- switch (_e.label) {
155
- case 0:
156
- if (relatorDataCache) {
157
- relatedDataCache = relatorDataCache.get(relator) || [];
158
- relatorDataCache.set(relator, relatedDataCache);
159
- }
160
- _c = relationships_1;
161
- _d = name;
162
- return [4 /*yield*/, relator.getRelationship(data, relatedDataCache)];
163
- case 1:
164
- _c[_d] = _e.sent();
165
- return [2 /*return*/];
166
- }
167
- });
168
- });
169
- }))];
170
- case 1:
171
- _a.sent();
172
- resourceOptions.relationships = relationships_1;
173
- _a.label = 2;
174
- case 2:
175
- // Handling links
176
- if (options.linkers.resource) {
177
- resourceOptions.links = { self: options.linkers.resource.link(data) };
178
- }
179
- if (options.metaizers.resource) {
180
- resourceOptions.meta = options.metaizers.resource.metaize(data);
181
- }
182
- return [2 /*return*/, new resource_model_1["default"](id, type, resourceOptions)];
94
+ async createResource(data, options, helpers, relatorDataCache) {
95
+ // Get options
96
+ if (options === undefined || helpers === undefined) {
97
+ options = this.options;
98
+ helpers = this.helpers;
99
+ }
100
+ const resourceOptions = {};
101
+ // Get ID before projections.
102
+ const id = data[options.idKey];
103
+ const type = this.collectionName;
104
+ // Get attributes
105
+ resourceOptions.attributes = helpers.projectAttributes(data);
106
+ // Handling relators
107
+ if (helpers.relators) {
108
+ const relationships = {};
109
+ await Promise.all(Object.entries(helpers.relators).map(async ([name, relator]) => {
110
+ let relatedDataCache;
111
+ if (relatorDataCache) {
112
+ relatedDataCache = relatorDataCache.get(relator) || [];
113
+ relatorDataCache.set(relator, relatedDataCache);
183
114
  }
184
- });
185
- });
186
- };
115
+ relationships[name] = await relator.getRelationship(data, relatedDataCache);
116
+ }));
117
+ resourceOptions.relationships = relationships;
118
+ }
119
+ // Handling links
120
+ if (options.linkers.resource) {
121
+ resourceOptions.links = { self: options.linkers.resource.link(data) };
122
+ }
123
+ if (options.metaizers.resource) {
124
+ resourceOptions.meta = options.metaizers.resource.metaize(data);
125
+ }
126
+ return new resource_model_1.default(id, type, resourceOptions);
127
+ }
187
128
  /**
188
129
  * The actual serialization function.
189
130
  *
190
- * @param data Data to serialize.
191
- * @param options Options to use at runtime.
131
+ * @param data - Data to serialize.
132
+ * @param options - Options to use at runtime.
192
133
  */
193
- Serializer.prototype.serialize = function (data, options) {
194
- return __awaiter(this, void 0, void 0, function () {
195
- var o, h, cache, storedDocument, document, relatorDataCache, keys, wasSingle, dto, createIdentifier, createResource, relators, relator_1, relatedData, links, meta, pagination, _a, _b, _c, _d, _e;
196
- var _this = this;
197
- return __generator(this, function (_f) {
198
- switch (_f.label) {
199
- case 0:
200
- o = this.options;
201
- h = this.helpers;
202
- if (options !== undefined) {
203
- o = merge_1["default"]({}, o, options);
204
- h = new serializer_utils_1.Helpers(o);
205
- }
206
- cache = o.cache instanceof cache_1["default"] ? o.cache : this.cache;
207
- if (o.cache) {
208
- storedDocument = cache.get(data, options);
209
- if (storedDocument) {
210
- return [2 /*return*/, storedDocument];
211
- }
212
- }
213
- document = {};
214
- // Document versioning
215
- if (o.version) {
216
- document.jsonapi = __assign(__assign({}, document.jsonapi), { version: o.version });
217
- }
218
- if (o.metaizers.jsonapi) {
219
- document.jsonapi = __assign(__assign({}, document.jsonapi), { meta: o.metaizers.jsonapi.metaize() });
220
- }
221
- relatorDataCache = new Map();
222
- keys = [];
223
- wasSingle = false;
224
- if (!o.onlyRelationship) return [3 /*break*/, 2];
225
- // Validate options.
226
- if (h.relators === undefined) {
227
- throw new TypeError("\"relators\" must be defined when using \"onlyRelationship\"");
228
- }
229
- if (!data || Array.isArray(data)) {
230
- throw new TypeError("Cannot serialize multiple primary datum using \"onlyRelationship\"");
231
- }
232
- relator_1 = h.relators[o.onlyRelationship];
233
- if (relator_1 === undefined) {
234
- throw new TypeError("\"onlyRelationship\" is not the name of any collection name among the relators listed in \"relators\"");
235
- }
236
- return [4 /*yield*/, relator_1.getRelatedData(data)];
237
- case 1:
238
- relatedData = _f.sent();
239
- links = relator_1.getRelatedLinks(data, relatedData);
240
- if (links)
241
- document.links = links;
242
- meta = relator_1.getRelatedMeta(data, relatedData);
243
- if (meta)
244
- document.meta = meta;
245
- createIdentifier = function (datum) { return relator_1.getRelatedIdentifier(datum); };
246
- createResource = function (datum) { return __awaiter(_this, void 0, void 0, function () {
247
- var resource;
248
- return __generator(this, function (_a) {
249
- switch (_a.label) {
250
- case 0: return [4 /*yield*/, relator_1.getRelatedResource(datum)];
251
- case 1:
252
- resource = _a.sent();
253
- keys.push(resource.getKey());
254
- return [2 /*return*/, resource];
255
- }
256
- });
257
- }); };
258
- relators = relator_1.getRelatedRelators();
259
- dto = relatedData;
260
- return [3 /*break*/, 3];
261
- case 2:
262
- // Handle meta
263
- if (o.metaizers.document) {
264
- document.meta = o.metaizers.document.metaize(data);
265
- }
266
- // Handle links
267
- if (o.linkers.document) {
268
- document.links = __assign(__assign({}, document.links), { self: o.linkers.document.link(data) });
269
- }
270
- // Handle pagination links
271
- if (o.linkers.paginator) {
272
- pagination = o.linkers.paginator.paginate(data);
273
- if (pagination) {
274
- document.links = __assign(__assign({}, document.links), pagination);
275
- }
276
- }
277
- createIdentifier = function (datum) { return _this.createIdentifier(datum, o); };
278
- createResource = function (datum) { return __awaiter(_this, void 0, void 0, function () {
279
- var resource;
280
- return __generator(this, function (_a) {
281
- switch (_a.label) {
282
- case 0: return [4 /*yield*/, this.createResource(datum, o, h, relatorDataCache)];
283
- case 1:
284
- resource = _a.sent();
285
- keys.push(resource.getKey());
286
- return [2 /*return*/, resource];
287
- }
288
- });
289
- }); };
290
- relators = h.relators;
291
- dto = data;
292
- _f.label = 3;
293
- case 3:
294
- if (dto === undefined) {
295
- return [2 /*return*/, cache.set(data, document, options)];
296
- }
297
- if (o.nullData || dto === null) {
298
- document.data = null;
299
- return [2 /*return*/, cache.set(data, document, options)];
300
- }
301
- // Handle `onlyIdentifier` option
302
- if (o.onlyIdentifier) {
303
- document.data = Array.isArray(dto) ? dto.map(createIdentifier) : createIdentifier(dto);
304
- return [2 /*return*/, cache.set(data, document, options)];
305
- }
306
- if (!Array.isArray(dto)) {
307
- wasSingle = true;
308
- dto = [dto];
309
- }
310
- if (!o.asIncluded) return [3 /*break*/, 5];
311
- document.data = dto.map(createIdentifier);
312
- _a = document;
313
- return [4 /*yield*/, Promise.all(dto.map(createResource))];
314
- case 4:
315
- _a.included = _f.sent();
316
- return [3 /*break*/, 7];
317
- case 5:
318
- _b = document;
319
- return [4 /*yield*/, Promise.all(dto.map(createResource))];
320
- case 6:
321
- _b.data = _f.sent();
322
- _f.label = 7;
323
- case 7:
324
- if (!(relators && o.depth > 0)) return [3 /*break*/, 9];
325
- _c = document;
326
- _e = (_d = (document.included || [])).concat;
327
- return [4 /*yield*/, serializer_utils_1.recurseRelators(dto, relators, o.depth, keys, relatorDataCache)];
328
- case 8:
329
- _c.included = _e.apply(_d, [_f.sent()]);
330
- _f.label = 9;
331
- case 9:
332
- if (wasSingle) {
333
- document.data = document.data[0];
334
- }
335
- return [2 /*return*/, cache.set(data, document, options)];
134
+ async serialize(data, options) {
135
+ // Merge options.
136
+ let o = this.options;
137
+ let h = this.helpers;
138
+ if (options !== undefined) {
139
+ o = (0, merge_1.default)({}, o, options);
140
+ h = new serializer_utils_1.Helpers(o);
141
+ }
142
+ const cache = o.cache instanceof cache_1.default ? o.cache : this.cache;
143
+ if (o.cache) {
144
+ const storedDocument = cache.get(data, options);
145
+ if (storedDocument) {
146
+ return storedDocument;
147
+ }
148
+ }
149
+ // Construct initial document and included data
150
+ const document = {};
151
+ // Document versioning
152
+ if (o.version) {
153
+ document.jsonapi = { ...document.jsonapi, version: o.version };
154
+ }
155
+ if (o.metaizers.jsonapi) {
156
+ document.jsonapi = { ...document.jsonapi, meta: o.metaizers.jsonapi.metaize() };
157
+ }
158
+ // Cache data fetched during resource creation
159
+ const relatorDataCache = new Map();
160
+ const keys = [];
161
+ let wasSingle = false;
162
+ let dto;
163
+ let createIdentifier;
164
+ let createResource;
165
+ let relators;
166
+ // Check if only a relationship is desired
167
+ if (o.onlyRelationship) {
168
+ // Validate options.
169
+ if (h.relators === undefined) {
170
+ throw new TypeError(`"relators" must be defined when using "onlyRelationship"`);
171
+ }
172
+ if (!data || Array.isArray(data)) {
173
+ throw new TypeError(`Cannot serialize multiple primary datum using "onlyRelationship"`);
174
+ }
175
+ const relator = h.relators[o.onlyRelationship];
176
+ if (relator === undefined) {
177
+ throw new TypeError(`"onlyRelationship" is not the name of any collection name among the relators listed in "relators"`);
178
+ }
179
+ // Handle related data
180
+ const relatedData = await relator.getRelatedData(data);
181
+ // Handle related links
182
+ const links = relator.getRelatedLinks(data, relatedData);
183
+ if (links)
184
+ document.links = links;
185
+ // Handle related meta
186
+ const meta = relator.getRelatedMeta(data, relatedData);
187
+ if (meta)
188
+ document.meta = meta;
189
+ createIdentifier = (datum) => relator.getRelatedIdentifier(datum);
190
+ createResource = async (datum) => {
191
+ const resource = await relator.getRelatedResource(datum);
192
+ keys.push(resource.getKey());
193
+ return resource;
194
+ };
195
+ relators = relator.getRelatedRelators();
196
+ dto = relatedData;
197
+ }
198
+ else {
199
+ // Handle meta
200
+ if (o.metaizers.document) {
201
+ document.meta = o.metaizers.document.metaize(data);
202
+ }
203
+ // Handle links
204
+ if (o.linkers.document) {
205
+ document.links = { ...document.links, self: o.linkers.document.link(data) };
206
+ }
207
+ // Handle pagination links
208
+ if (o.linkers.paginator) {
209
+ const pagination = o.linkers.paginator.paginate(data);
210
+ if (pagination) {
211
+ document.links = { ...document.links, ...pagination };
336
212
  }
337
- });
338
- });
339
- };
340
- /**
341
- * Default options. Can be edited to change default options globally.
342
- */
343
- Serializer.defaultOptions = {
344
- idKey: 'id',
345
- version: '1.0',
346
- onlyIdentifier: false,
347
- nullData: false,
348
- asIncluded: false,
349
- onlyRelationship: false,
350
- cache: false,
351
- depth: 0,
352
- projection: null,
353
- linkers: {},
354
- metaizers: {}
355
- };
356
- return Serializer;
357
- }());
358
- exports["default"] = Serializer;
213
+ }
214
+ createIdentifier = (datum) => this.createIdentifier(datum, o);
215
+ createResource = async (datum) => {
216
+ const resource = await this.createResource(datum, o, h, relatorDataCache);
217
+ keys.push(resource.getKey());
218
+ return resource;
219
+ };
220
+ relators = h.relators;
221
+ dto = data;
222
+ }
223
+ if (dto === undefined) {
224
+ return cache.set(data, document, options);
225
+ }
226
+ if (o.nullData || dto === null) {
227
+ document.data = null;
228
+ return cache.set(data, document, options);
229
+ }
230
+ // Handle `onlyIdentifier` option
231
+ if (o.onlyIdentifier) {
232
+ document.data = Array.isArray(dto) ? dto.map(createIdentifier) : createIdentifier(dto);
233
+ return cache.set(data, document, options);
234
+ }
235
+ if (!Array.isArray(dto)) {
236
+ wasSingle = true;
237
+ dto = [dto];
238
+ }
239
+ if (o.asIncluded) {
240
+ document.data = dto.map(createIdentifier);
241
+ document.included = await Promise.all(dto.map(createResource));
242
+ }
243
+ else {
244
+ document.data = await Promise.all(dto.map(createResource));
245
+ }
246
+ if (relators && o.depth > 0) {
247
+ document.included = (document.included || []).concat(await (0, serializer_utils_1.recurseRelators)(dto, relators, o.depth, keys, relatorDataCache));
248
+ }
249
+ if (wasSingle) {
250
+ document.data = document.data[0];
251
+ }
252
+ return cache.set(data, document, options);
253
+ }
254
+ }
255
+ exports.default = Serializer;
359
256
  //# sourceMappingURL=serializer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/classes/serializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/classes/serializer.ts"],"names":[],"mappings":"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"}