ts-japi 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.commitlintrc.ts +3 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +5 -6
- package/.github/ISSUE_TEMPLATE/feature_request.md +4 -5
- package/.github/ISSUE_TEMPLATE/request-for-comments.md +29 -42
- package/.github/release-please.yml +4 -0
- package/.github/workflows/ci.yaml +73 -0
- package/.github/workflows/publish.yaml +29 -0
- package/.husky/pre-commit +4 -0
- package/.husky/pre-push +4 -0
- package/.prettierignore +2 -0
- package/.release-please-manifest.json +3 -0
- package/CHANGELOG.md +14 -1
- package/Makefile +1 -27
- package/README.md +145 -75
- package/api-extractor.json +14 -0
- package/lib/classes/cache.d.ts +2 -2
- package/lib/classes/cache.js +26 -48
- package/lib/classes/cache.js.map +1 -1
- package/lib/classes/error-serializer.d.ts +6 -6
- package/lib/classes/error-serializer.js +58 -125
- package/lib/classes/error-serializer.js.map +1 -1
- package/lib/classes/linker.d.ts +5 -5
- package/lib/classes/linker.d.ts.map +1 -1
- package/lib/classes/linker.js +15 -41
- package/lib/classes/linker.js.map +1 -1
- package/lib/classes/metaizer.d.ts +4 -4
- package/lib/classes/metaizer.d.ts.map +1 -1
- package/lib/classes/metaizer.js +12 -38
- package/lib/classes/metaizer.js.map +1 -1
- package/lib/classes/paginator.d.ts +3 -3
- package/lib/classes/paginator.js +17 -16
- package/lib/classes/paginator.js.map +1 -1
- package/lib/classes/relator.d.ts +7 -7
- package/lib/classes/relator.d.ts.map +1 -1
- package/lib/classes/relator.js +75 -135
- package/lib/classes/relator.js.map +1 -1
- package/lib/classes/serializer.d.ts +9 -9
- package/lib/classes/serializer.d.ts.map +1 -1
- package/lib/classes/serializer.js +216 -316
- package/lib/classes/serializer.js.map +1 -1
- package/lib/index.js +17 -10
- package/lib/index.js.map +1 -1
- package/lib/interfaces/cache.interface.d.ts +2 -2
- package/lib/interfaces/cache.interface.js +1 -1
- package/lib/interfaces/error-serializer.interface.d.ts +11 -11
- package/lib/interfaces/error-serializer.interface.js +1 -1
- package/lib/interfaces/error.interface.js +1 -1
- package/lib/interfaces/json-api.interface.js +1 -1
- package/lib/interfaces/linker.interface.d.ts +1 -1
- package/lib/interfaces/linker.interface.js +1 -1
- package/lib/interfaces/paginator.interface.js +1 -1
- package/lib/interfaces/relator.interface.d.ts +5 -4
- package/lib/interfaces/relator.interface.d.ts.map +1 -1
- package/lib/interfaces/relator.interface.js +1 -1
- package/lib/interfaces/serializer.interface.d.ts +24 -24
- package/lib/interfaces/serializer.interface.js +1 -1
- package/lib/models/error.model.d.ts +1 -1
- package/lib/models/error.model.d.ts.map +1 -1
- package/lib/models/error.model.js +67 -22
- package/lib/models/error.model.js.map +1 -1
- package/lib/models/link.model.js +11 -10
- package/lib/models/link.model.js.map +1 -1
- package/lib/models/meta.model.js +5 -6
- package/lib/models/meta.model.js.map +1 -1
- package/lib/models/relationship.model.js +8 -6
- package/lib/models/relationship.model.js.map +1 -1
- package/lib/models/resource-identifier.model.js +11 -9
- package/lib/models/resource-identifier.model.js.map +1 -1
- package/lib/models/resource.model.js +13 -28
- package/lib/models/resource.model.js.map +1 -1
- package/lib/types/global.types.js +1 -1
- package/lib/utils/is-error-document.d.ts +1 -1
- package/lib/utils/is-error-document.js +6 -8
- package/lib/utils/is-error-document.js.map +1 -1
- package/lib/utils/is-object.js +1 -1
- package/lib/utils/is-plain-object.js +4 -4
- package/lib/utils/is-plain-object.js.map +1 -1
- package/lib/utils/merge.d.ts +2 -2
- package/lib/utils/merge.js +16 -63
- package/lib/utils/merge.js.map +1 -1
- package/lib/utils/serializer.utils.js +56 -202
- package/lib/utils/serializer.utils.js.map +1 -1
- package/package.json +47 -30
- package/release-please-config.json +10 -0
- package/tools/generate_docs.ts +33 -0
- package/tools/internal/custom_markdown_action.ts +32 -0
- package/tools/internal/custom_markdown_documenter.ts +1337 -0
- package/tsconfig.json +56 -80
- package/.changeset/README.md +0 -8
- package/.changeset/config.json +0 -10
- package/CONTRIBUTING.md +0 -127
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
exports
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class ResourceIdentifier {
|
|
4
|
+
type;
|
|
5
|
+
id;
|
|
6
|
+
meta;
|
|
7
|
+
constructor(id, type, options) {
|
|
5
8
|
this.type = type;
|
|
6
9
|
this.id = id;
|
|
7
10
|
if (options.meta)
|
|
8
11
|
this.meta = options.meta;
|
|
9
12
|
}
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
exports["default"] = ResourceIdentifier;
|
|
13
|
+
getKey() {
|
|
14
|
+
return `[${this.type}:${this.id}]`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.default = ResourceIdentifier;
|
|
16
18
|
//# sourceMappingURL=resource-identifier.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-identifier.model.js","sourceRoot":"","sources":["../../src/models/resource-identifier.model.ts"],"names":[],"mappings":";;AAOA;
|
|
1
|
+
{"version":3,"file":"resource-identifier.model.js","sourceRoot":"","sources":["../../src/models/resource-identifier.model.ts"],"names":[],"mappings":";;AAOA,MAAqB,kBAAkB;IAC9B,IAAI,CAAS;IACb,EAAE,CAAS;IACX,IAAI,CAAQ;IACnB,YAAmB,EAAU,EAAE,IAAY,EAAE,OAAkC;QAC7E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7C,CAAC;IACM,MAAM;QACX,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;IACrC,CAAC;CACF;AAZD,qCAYC"}
|
|
@@ -1,37 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
4
|
};
|
|
20
|
-
exports
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const resource_identifier_model_1 = __importDefault(require("./resource-identifier.model"));
|
|
7
|
+
class Resource extends resource_identifier_model_1.default {
|
|
8
|
+
attributes;
|
|
9
|
+
links;
|
|
10
|
+
relationships;
|
|
11
|
+
constructor(id, type, options) {
|
|
12
|
+
super(id, type, options);
|
|
26
13
|
if (options.attributes)
|
|
27
|
-
|
|
14
|
+
this.attributes = options.attributes;
|
|
28
15
|
if (options.relationships)
|
|
29
|
-
|
|
16
|
+
this.relationships = options.relationships;
|
|
30
17
|
if (options.links)
|
|
31
|
-
|
|
32
|
-
return _this;
|
|
18
|
+
this.links = options.links;
|
|
33
19
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
exports["default"] = Resource;
|
|
20
|
+
}
|
|
21
|
+
exports.default = Resource;
|
|
37
22
|
//# sourceMappingURL=resource.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.model.js","sourceRoot":"","sources":["../../src/models/resource.model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resource.model.js","sourceRoot":"","sources":["../../src/models/resource.model.ts"],"names":[],"mappings":";;;;;AAGA,4FAA4F;AAS5F,MAAqB,QAA8B,SAAQ,mCAAkB;IACpE,UAAU,CAAc;IACxB,KAAK,CAA8B;IACnC,aAAa,CAAgC;IACpD,YAAmB,EAAU,EAAE,IAAY,EAAE,OAA2B;QACtE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzB,IAAI,OAAO,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAC7D,IAAI,OAAO,CAAC,aAAa;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QACtE,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAChD,CAAC;CACF;AAVD,2BAUC"}
|
|
@@ -2,7 +2,7 @@ import { ErrorDocument } from '../interfaces/json-api.interface';
|
|
|
2
2
|
/**
|
|
3
3
|
* Detects an `ErrorDocument` like object
|
|
4
4
|
*
|
|
5
|
-
* @param document An unknown object
|
|
5
|
+
* @param document - An unknown object
|
|
6
6
|
*/
|
|
7
7
|
export declare function isErrorDocument(document: unknown): document is ErrorDocument;
|
|
8
8
|
//# sourceMappingURL=is-error-document.d.ts.map
|
|
@@ -2,22 +2,20 @@
|
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
|
-
exports
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.isErrorDocument = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const is_plain_object_1 = require("./is-plain-object");
|
|
8
|
+
const error_model_1 = __importDefault(require("../models/error.model"));
|
|
9
9
|
/**
|
|
10
10
|
* Detects an `ErrorDocument` like object
|
|
11
11
|
*
|
|
12
|
-
* @param document An unknown object
|
|
12
|
+
* @param document - An unknown object
|
|
13
13
|
*/
|
|
14
14
|
function isErrorDocument(document) {
|
|
15
|
-
return (is_plain_object_1.isPlainObject(document) &&
|
|
15
|
+
return ((0, is_plain_object_1.isPlainObject)(document) &&
|
|
16
16
|
Array.isArray(document.errors) &&
|
|
17
17
|
('jsonapi' in document ||
|
|
18
|
-
document.errors.every(
|
|
19
|
-
return error instanceof error_model_1["default"] ? true : error_model_1["default"].isLikeJapiError(error);
|
|
20
|
-
})));
|
|
18
|
+
document.errors.every((error) => error instanceof error_model_1.default ? true : error_model_1.default.isLikeJapiError(error))));
|
|
21
19
|
}
|
|
22
20
|
exports.isErrorDocument = isErrorDocument;
|
|
23
21
|
//# sourceMappingURL=is-error-document.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-error-document.js","sourceRoot":"","sources":["../../src/utils/is-error-document.ts"],"names":[],"mappings":";;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"is-error-document.js","sourceRoot":"","sources":["../../src/utils/is-error-document.ts"],"names":[],"mappings":";;;;;;AACA,uDAAkD;AAClD,wEAA8C;AAE9C;;;;GAIG;AACH,SAAgB,eAAe,CAAC,QAAiB;IAC/C,OAAO,CACL,IAAA,+BAAa,EAAC,QAAQ,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9B,CAAC,SAAS,IAAI,QAAQ;YACpB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9B,KAAK,YAAY,qBAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CACrE,CAAC,CACL,CAAC;AACJ,CAAC;AATD,0CASC"}
|
package/lib/utils/is-object.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
exports
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isPlainObject = void 0;
|
|
4
|
-
|
|
4
|
+
const is_object_1 = require("./is-object");
|
|
5
5
|
function isPlainObject(o) {
|
|
6
|
-
if (!is_object_1.isObject(o))
|
|
6
|
+
if (!(0, is_object_1.isObject)(o))
|
|
7
7
|
return false;
|
|
8
8
|
// If constructor was modified
|
|
9
9
|
if (typeof o.constructor !== 'function')
|
|
10
10
|
return false;
|
|
11
11
|
// If prototype was modified
|
|
12
|
-
if (!is_object_1.isObject(o.constructor.prototype))
|
|
12
|
+
if (!(0, is_object_1.isObject)(o.constructor.prototype))
|
|
13
13
|
return false;
|
|
14
14
|
// eslint-disable-next-line no-prototype-builtins
|
|
15
15
|
if (!o.constructor.prototype.hasOwnProperty('isPrototypeOf'))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-plain-object.js","sourceRoot":"","sources":["../../src/utils/is-plain-object.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"is-plain-object.js","sourceRoot":"","sources":["../../src/utils/is-plain-object.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AAEvC,SAAgB,aAAa,CAAC,CAAU;IACtC,IAAI,CAAC,IAAA,oBAAQ,EAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,8BAA8B;IAC9B,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACtD,4BAA4B;IAC5B,IAAI,CAAC,IAAA,oBAAQ,EAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,iDAAiD;IACjD,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,eAAe,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC;AATD,sCASC"}
|
package/lib/utils/merge.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { Dictionary, UnionToIntersection } from '../types/global.types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Deep merge two objects over their enumerable properties.
|
|
4
4
|
*
|
|
5
|
-
* @param target The object to merge into
|
|
6
|
-
* @param source The objects to use for merging
|
|
5
|
+
* @param target - The object to merge into
|
|
6
|
+
* @param source - The objects to use for merging
|
|
7
7
|
*/
|
|
8
8
|
export default function merge<T extends Dictionary<any>, U extends Dictionary<any>[]>(target: T, ...sources: U): T & UnionToIntersection<U[number]>;
|
|
9
9
|
//# sourceMappingURL=merge.d.ts.map
|
package/lib/utils/merge.js
CHANGED
|
@@ -1,76 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
if (m) return m.call(o);
|
|
5
|
-
if (o && typeof o.length === "number") return {
|
|
6
|
-
next: function () {
|
|
7
|
-
if (o && i >= o.length) o = void 0;
|
|
8
|
-
return { value: o && o[i++], done: !o };
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
-
};
|
|
13
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
-
if (!m) return o;
|
|
16
|
-
var i = m.call(o), r, ar = [], e;
|
|
17
|
-
try {
|
|
18
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
-
}
|
|
20
|
-
catch (error) { e = { error: error }; }
|
|
21
|
-
finally {
|
|
22
|
-
try {
|
|
23
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
-
}
|
|
25
|
-
finally { if (e) throw e.error; }
|
|
26
|
-
}
|
|
27
|
-
return ar;
|
|
28
|
-
};
|
|
29
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
30
|
-
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
31
|
-
to[j] = from[i];
|
|
32
|
-
return to;
|
|
33
|
-
};
|
|
34
|
-
exports.__esModule = true;
|
|
35
|
-
var is_plain_object_1 = require("./is-plain-object");
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const is_plain_object_1 = require("./is-plain-object");
|
|
36
4
|
/**
|
|
37
5
|
* Deep merge two objects over their enumerable properties.
|
|
38
6
|
*
|
|
39
|
-
* @param target The object to merge into
|
|
40
|
-
* @param source The objects to use for merging
|
|
7
|
+
* @param target - The object to merge into
|
|
8
|
+
* @param source - The objects to use for merging
|
|
41
9
|
*/
|
|
42
|
-
function merge(target) {
|
|
43
|
-
var e_1, _a, _b, _c;
|
|
44
|
-
var sources = [];
|
|
45
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
46
|
-
sources[_i - 1] = arguments[_i];
|
|
47
|
-
}
|
|
10
|
+
function merge(target, ...sources) {
|
|
48
11
|
if (!sources.length)
|
|
49
12
|
return target;
|
|
50
|
-
|
|
51
|
-
if (is_plain_object_1.isPlainObject(target) && is_plain_object_1.isPlainObject(source)) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
Object.assign(target, (_b = {}, _b[key] = {}, _b));
|
|
58
|
-
merge(target[key], source[key]);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
Object.assign(target, (_c = {}, _c[key] = source[key], _c));
|
|
62
|
-
}
|
|
13
|
+
const source = sources.shift();
|
|
14
|
+
if ((0, is_plain_object_1.isPlainObject)(target) && (0, is_plain_object_1.isPlainObject)(source)) {
|
|
15
|
+
for (const key of Object.keys(source)) {
|
|
16
|
+
if ((0, is_plain_object_1.isPlainObject)(source[key])) {
|
|
17
|
+
if (!target[key])
|
|
18
|
+
Object.assign(target, { [key]: {} });
|
|
19
|
+
merge(target[key], source[key]);
|
|
63
20
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
finally {
|
|
67
|
-
try {
|
|
68
|
-
if (_e && !_e.done && (_a = _d["return"])) _a.call(_d);
|
|
21
|
+
else {
|
|
22
|
+
Object.assign(target, { [key]: source[key] });
|
|
69
23
|
}
|
|
70
|
-
finally { if (e_1) throw e_1.error; }
|
|
71
24
|
}
|
|
72
25
|
}
|
|
73
|
-
return merge
|
|
26
|
+
return merge(target, ...sources);
|
|
74
27
|
}
|
|
75
|
-
exports
|
|
28
|
+
exports.default = merge;
|
|
76
29
|
//# sourceMappingURL=merge.js.map
|
package/lib/utils/merge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":";;AACA,uDAAkD;AAElD;;;;;GAKG;AACH,SAAwB,KAAK,CAC3B,MAAS,EACT,GAAG,OAAU;IAEb,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,MAA4C,CAAC;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAE/B,IAAI,IAAA,+BAAa,EAAC,MAAM,CAAC,IAAI,IAAA,+BAAa,EAAC,MAAM,CAAC,EAAE;QAClD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,IAAA,+BAAa,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACjC;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAC/C;SACF;KACF;IAED,OAAO,KAAK,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;AACnC,CAAC;AAnBD,wBAmBC"}
|
|
@@ -1,201 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
4
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Helpers = exports.normalizeRelators = exports.recurseRelators = void 0;
|
|
7
|
+
const relator_1 = __importDefault(require("../classes/relator"));
|
|
8
|
+
async function recurseRelators(data, relators, depth, keys, relatorDataCache) {
|
|
9
|
+
const included = [];
|
|
10
|
+
let curRelatorDataCache = relatorDataCache || new Map();
|
|
11
|
+
// Required to support backwards compatability where the first dataCache may
|
|
12
|
+
// not be passed in. All subsequent iterations will contain a dataCache
|
|
13
|
+
if (!relatorDataCache && depth > 0) {
|
|
14
|
+
for (const name in relators) {
|
|
15
|
+
const cache = curRelatorDataCache.get(relators[name]) || [];
|
|
16
|
+
curRelatorDataCache.set(relators[name], cache);
|
|
17
|
+
for (const datum of data) {
|
|
18
|
+
const relatedData = await relators[name].getRelatedData(datum);
|
|
19
|
+
if (relatedData !== null) {
|
|
20
|
+
cache.push(...(Array.isArray(relatedData) ? relatedData : [relatedData]));
|
|
21
|
+
}
|
|
32
22
|
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var __values = (this && this.__values) || function(o) {
|
|
39
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
40
|
-
if (m) return m.call(o);
|
|
41
|
-
if (o && typeof o.length === "number") return {
|
|
42
|
-
next: function () {
|
|
43
|
-
if (o && i >= o.length) o = void 0;
|
|
44
|
-
return { value: o && o[i++], done: !o };
|
|
45
23
|
}
|
|
46
|
-
};
|
|
47
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
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
24
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
25
|
+
while (depth-- > 0 && curRelatorDataCache.size > 0) {
|
|
26
|
+
const newRelatorDataCache = new Map();
|
|
27
|
+
for (const [relator, cache] of curRelatorDataCache) {
|
|
28
|
+
for (let i = 0; i < cache.length; i++) {
|
|
29
|
+
const resource = await relator.getRelatedResource(cache[i], undefined, undefined, newRelatorDataCache);
|
|
30
|
+
const key = resource.getKey();
|
|
31
|
+
if (!keys.includes(key)) {
|
|
32
|
+
keys.push(key);
|
|
33
|
+
included.push(resource);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
60
36
|
}
|
|
61
|
-
|
|
37
|
+
curRelatorDataCache = newRelatorDataCache;
|
|
62
38
|
}
|
|
63
|
-
return
|
|
64
|
-
};
|
|
65
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
66
|
-
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
67
|
-
to[j] = from[i];
|
|
68
|
-
return to;
|
|
69
|
-
};
|
|
70
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
71
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
72
|
-
};
|
|
73
|
-
exports.__esModule = true;
|
|
74
|
-
exports.Helpers = exports.normalizeRelators = exports.recurseRelators = void 0;
|
|
75
|
-
var relator_1 = __importDefault(require("../classes/relator"));
|
|
76
|
-
function recurseRelators(data, relators, depth, keys, relatorDataCache) {
|
|
77
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
78
|
-
var included, curRelatorDataCache, _a, _b, _i, name_1, cache, data_1, data_1_1, datum, relatedData, e_1_1, newRelatorDataCache, curRelatorDataCache_1, curRelatorDataCache_1_1, _c, relator, cache, i, resource, key, e_2_1;
|
|
79
|
-
var e_1, _d, e_2, _e;
|
|
80
|
-
return __generator(this, function (_f) {
|
|
81
|
-
switch (_f.label) {
|
|
82
|
-
case 0:
|
|
83
|
-
included = [];
|
|
84
|
-
curRelatorDataCache = relatorDataCache || new Map();
|
|
85
|
-
if (!(!relatorDataCache && depth > 0)) return [3 /*break*/, 10];
|
|
86
|
-
_a = [];
|
|
87
|
-
for (_b in relators)
|
|
88
|
-
_a.push(_b);
|
|
89
|
-
_i = 0;
|
|
90
|
-
_f.label = 1;
|
|
91
|
-
case 1:
|
|
92
|
-
if (!(_i < _a.length)) return [3 /*break*/, 10];
|
|
93
|
-
name_1 = _a[_i];
|
|
94
|
-
cache = curRelatorDataCache.get(relators[name_1]) || [];
|
|
95
|
-
curRelatorDataCache.set(relators[name_1], cache);
|
|
96
|
-
_f.label = 2;
|
|
97
|
-
case 2:
|
|
98
|
-
_f.trys.push([2, 7, 8, 9]);
|
|
99
|
-
data_1 = (e_1 = void 0, __values(data)), data_1_1 = data_1.next();
|
|
100
|
-
_f.label = 3;
|
|
101
|
-
case 3:
|
|
102
|
-
if (!!data_1_1.done) return [3 /*break*/, 6];
|
|
103
|
-
datum = data_1_1.value;
|
|
104
|
-
return [4 /*yield*/, relators[name_1].getRelatedData(datum)];
|
|
105
|
-
case 4:
|
|
106
|
-
relatedData = _f.sent();
|
|
107
|
-
if (relatedData !== null) {
|
|
108
|
-
cache.push.apply(cache, __spreadArray([], __read((Array.isArray(relatedData) ? relatedData : [relatedData]))));
|
|
109
|
-
}
|
|
110
|
-
_f.label = 5;
|
|
111
|
-
case 5:
|
|
112
|
-
data_1_1 = data_1.next();
|
|
113
|
-
return [3 /*break*/, 3];
|
|
114
|
-
case 6: return [3 /*break*/, 9];
|
|
115
|
-
case 7:
|
|
116
|
-
e_1_1 = _f.sent();
|
|
117
|
-
e_1 = { error: e_1_1 };
|
|
118
|
-
return [3 /*break*/, 9];
|
|
119
|
-
case 8:
|
|
120
|
-
try {
|
|
121
|
-
if (data_1_1 && !data_1_1.done && (_d = data_1["return"])) _d.call(data_1);
|
|
122
|
-
}
|
|
123
|
-
finally { if (e_1) throw e_1.error; }
|
|
124
|
-
return [7 /*endfinally*/];
|
|
125
|
-
case 9:
|
|
126
|
-
_i++;
|
|
127
|
-
return [3 /*break*/, 1];
|
|
128
|
-
case 10:
|
|
129
|
-
if (!(depth-- > 0 && curRelatorDataCache.size > 0)) return [3 /*break*/, 21];
|
|
130
|
-
newRelatorDataCache = new Map();
|
|
131
|
-
_f.label = 11;
|
|
132
|
-
case 11:
|
|
133
|
-
_f.trys.push([11, 18, 19, 20]);
|
|
134
|
-
curRelatorDataCache_1 = (e_2 = void 0, __values(curRelatorDataCache)), curRelatorDataCache_1_1 = curRelatorDataCache_1.next();
|
|
135
|
-
_f.label = 12;
|
|
136
|
-
case 12:
|
|
137
|
-
if (!!curRelatorDataCache_1_1.done) return [3 /*break*/, 17];
|
|
138
|
-
_c = __read(curRelatorDataCache_1_1.value, 2), relator = _c[0], cache = _c[1];
|
|
139
|
-
i = 0;
|
|
140
|
-
_f.label = 13;
|
|
141
|
-
case 13:
|
|
142
|
-
if (!(i < cache.length)) return [3 /*break*/, 16];
|
|
143
|
-
return [4 /*yield*/, relator.getRelatedResource(cache[i], undefined, undefined, newRelatorDataCache)];
|
|
144
|
-
case 14:
|
|
145
|
-
resource = _f.sent();
|
|
146
|
-
key = resource.getKey();
|
|
147
|
-
if (!keys.includes(key)) {
|
|
148
|
-
keys.push(key);
|
|
149
|
-
included.push(resource);
|
|
150
|
-
}
|
|
151
|
-
_f.label = 15;
|
|
152
|
-
case 15:
|
|
153
|
-
i++;
|
|
154
|
-
return [3 /*break*/, 13];
|
|
155
|
-
case 16:
|
|
156
|
-
curRelatorDataCache_1_1 = curRelatorDataCache_1.next();
|
|
157
|
-
return [3 /*break*/, 12];
|
|
158
|
-
case 17: return [3 /*break*/, 20];
|
|
159
|
-
case 18:
|
|
160
|
-
e_2_1 = _f.sent();
|
|
161
|
-
e_2 = { error: e_2_1 };
|
|
162
|
-
return [3 /*break*/, 20];
|
|
163
|
-
case 19:
|
|
164
|
-
try {
|
|
165
|
-
if (curRelatorDataCache_1_1 && !curRelatorDataCache_1_1.done && (_e = curRelatorDataCache_1["return"])) _e.call(curRelatorDataCache_1);
|
|
166
|
-
}
|
|
167
|
-
finally { if (e_2) throw e_2.error; }
|
|
168
|
-
return [7 /*endfinally*/];
|
|
169
|
-
case 20:
|
|
170
|
-
curRelatorDataCache = newRelatorDataCache;
|
|
171
|
-
return [3 /*break*/, 10];
|
|
172
|
-
case 21: return [2 /*return*/, included];
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
});
|
|
39
|
+
return included;
|
|
176
40
|
}
|
|
177
41
|
exports.recurseRelators = recurseRelators;
|
|
178
42
|
function normalizeRelators(relators) {
|
|
179
|
-
|
|
180
|
-
var normalizedRelators = {};
|
|
43
|
+
const normalizedRelators = {};
|
|
181
44
|
if (relators) {
|
|
182
|
-
if (relators instanceof relator_1
|
|
45
|
+
if (relators instanceof relator_1.default) {
|
|
183
46
|
normalizedRelators[relators.relatedName] = relators;
|
|
184
47
|
return normalizedRelators;
|
|
185
48
|
}
|
|
186
49
|
else if (relators instanceof Array) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
var relator = relators_1_1.value;
|
|
190
|
-
normalizedRelators[relator.relatedName] = relator;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
194
|
-
finally {
|
|
195
|
-
try {
|
|
196
|
-
if (relators_1_1 && !relators_1_1.done && (_a = relators_1["return"])) _a.call(relators_1);
|
|
197
|
-
}
|
|
198
|
-
finally { if (e_3) throw e_3.error; }
|
|
50
|
+
for (const relator of relators) {
|
|
51
|
+
normalizedRelators[relator.relatedName] = relator;
|
|
199
52
|
}
|
|
200
53
|
return normalizedRelators;
|
|
201
54
|
}
|
|
@@ -206,30 +59,32 @@ function normalizeRelators(relators) {
|
|
|
206
59
|
return undefined;
|
|
207
60
|
}
|
|
208
61
|
exports.normalizeRelators = normalizeRelators;
|
|
209
|
-
|
|
210
|
-
|
|
62
|
+
class Helpers {
|
|
63
|
+
projectAttributes;
|
|
64
|
+
relators;
|
|
65
|
+
constructor(options) {
|
|
211
66
|
// Relators
|
|
212
67
|
this.relators = normalizeRelators(options.relators);
|
|
213
68
|
// Projection
|
|
214
69
|
if (options.projection === undefined) {
|
|
215
|
-
this.projectAttributes =
|
|
70
|
+
this.projectAttributes = () => undefined;
|
|
216
71
|
}
|
|
217
72
|
else if (options.projection === null) {
|
|
218
|
-
this.projectAttributes =
|
|
219
|
-
|
|
73
|
+
this.projectAttributes = (data) => {
|
|
74
|
+
const attributes = Object.assign({}, data);
|
|
220
75
|
delete attributes[options.idKey];
|
|
221
76
|
return attributes;
|
|
222
77
|
};
|
|
223
78
|
}
|
|
224
79
|
else {
|
|
225
|
-
|
|
226
|
-
|
|
80
|
+
const projection = options.projection;
|
|
81
|
+
const type = Object.values(projection)[0];
|
|
227
82
|
if (type === 0) {
|
|
228
|
-
this.projectAttributes =
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
for (
|
|
232
|
-
if (!(keys[i] in
|
|
83
|
+
this.projectAttributes = (data) => {
|
|
84
|
+
const keys = Object.keys(data);
|
|
85
|
+
const attributes = {};
|
|
86
|
+
for (let i = 0, len = keys.length; i < len; i++) {
|
|
87
|
+
if (!(keys[i] in projection)) {
|
|
233
88
|
attributes[keys[i]] = data[keys[i]];
|
|
234
89
|
}
|
|
235
90
|
}
|
|
@@ -238,11 +93,11 @@ var Helpers = /** @class */ (function () {
|
|
|
238
93
|
};
|
|
239
94
|
}
|
|
240
95
|
else {
|
|
241
|
-
|
|
242
|
-
this.projectAttributes =
|
|
243
|
-
|
|
244
|
-
for (
|
|
245
|
-
attributes[
|
|
96
|
+
const keys = Object.keys(projection);
|
|
97
|
+
this.projectAttributes = (data) => {
|
|
98
|
+
const attributes = {};
|
|
99
|
+
for (let i = 0, len = keys.length; i < len; i++) {
|
|
100
|
+
attributes[keys[i]] = data[keys[i]];
|
|
246
101
|
}
|
|
247
102
|
delete attributes[options.idKey];
|
|
248
103
|
return attributes;
|
|
@@ -250,7 +105,6 @@ var Helpers = /** @class */ (function () {
|
|
|
250
105
|
}
|
|
251
106
|
}
|
|
252
107
|
}
|
|
253
|
-
|
|
254
|
-
}());
|
|
108
|
+
}
|
|
255
109
|
exports.Helpers = Helpers;
|
|
256
110
|
//# sourceMappingURL=serializer.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.utils.js","sourceRoot":"","sources":["../../src/utils/serializer.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serializer.utils.js","sourceRoot":"","sources":["../../src/utils/serializer.utils.ts"],"names":[],"mappings":"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"}
|