@nest-yalc-2/omnikernel-module 1.1.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/LICENSE +661 -0
- package/README.md +193 -0
- package/package.json +52 -0
- package/src/__tests__/omni-collection.entity.spec.ts +49 -0
- package/src/__tests__/omni-collection.service.spec.ts +83 -0
- package/src/__tests__/omni-document.entity.spec.ts +55 -0
- package/src/__tests__/omni-document.service.spec.ts +83 -0
- package/src/__tests__/omni-extension-projection-constraints.spec.ts +518 -0
- package/src/__tests__/omni-extension-projection.registration.spec.ts +946 -0
- package/src/__tests__/omni-extension-projection.service.spec.ts +806 -0
- package/src/__tests__/omni-external-ref.entity.spec.ts +36 -0
- package/src/__tests__/omni-external-ref.service.spec.ts +252 -0
- package/src/__tests__/omni-named.entity.spec.ts +33 -0
- package/src/__tests__/omni-record.entity.spec.ts +32 -0
- package/src/__tests__/omni-record.service.spec.ts +107 -0
- package/src/__tests__/omni-relation-semantics.spec.ts +102 -0
- package/src/__tests__/omni-relation.entity.spec.ts +38 -0
- package/src/__tests__/omni-scope-substrate.spec.ts +81 -0
- package/src/__tests__/omni-scoped.backend.spec.ts +115 -0
- package/src/__tests__/omni-scoped.service.spec.ts +354 -0
- package/src/__tests__/omnikernel.diagnostics.spec.ts +94 -0
- package/src/__tests__/omnikernel.module.spec.ts +40 -0
- package/src/__tests__/omnikernel.persistence.spec.ts +154 -0
- package/src/__tests__/omnikernel.public-api.spec.ts +238 -0
- package/src/__tests__/omnikernel.query.service.spec.ts +155 -0
- package/src/__tests__/tsconfig.json +6 -0
- package/src/base/omni-base.entity.d.ts +9 -0
- package/src/base/omni-base.entity.js +53 -0
- package/src/base/omni-base.entity.js.map +1 -0
- package/src/base/omni-base.entity.ts +41 -0
- package/src/base/omni-external-ref.entity.d.ts +13 -0
- package/src/base/omni-external-ref.entity.js +72 -0
- package/src/base/omni-external-ref.entity.js.map +1 -0
- package/src/base/omni-external-ref.entity.ts +53 -0
- package/src/base/omni-named.entity.d.ts +6 -0
- package/src/base/omni-named.entity.js +35 -0
- package/src/base/omni-named.entity.js.map +1 -0
- package/src/base/omni-named.entity.ts +16 -0
- package/src/base/omni-record.entity.d.ts +13 -0
- package/src/base/omni-record.entity.js +71 -0
- package/src/base/omni-record.entity.js.map +1 -0
- package/src/base/omni-record.entity.ts +51 -0
- package/src/base/omni-relation.entity.d.ts +15 -0
- package/src/base/omni-relation.entity.js +91 -0
- package/src/base/omni-relation.entity.js.map +1 -0
- package/src/base/omni-relation.entity.ts +72 -0
- package/src/index.d.ts +49 -0
- package/src/index.js +66 -0
- package/src/index.js.map +1 -0
- package/src/index.ts +49 -0
- package/src/omni-collection-kind.enum.d.ts +4 -0
- package/src/omni-collection-kind.enum.js +13 -0
- package/src/omni-collection-kind.enum.js.map +1 -0
- package/src/omni-collection-kind.enum.ts +10 -0
- package/src/omni-collection.backend.d.ts +2 -0
- package/src/omni-collection.backend.js +15 -0
- package/src/omni-collection.backend.js.map +1 -0
- package/src/omni-collection.backend.ts +16 -0
- package/src/omni-collection.dto.d.ts +32 -0
- package/src/omni-collection.dto.js +184 -0
- package/src/omni-collection.dto.js.map +1 -0
- package/src/omni-collection.dto.ts +170 -0
- package/src/omni-collection.entity.d.ts +7 -0
- package/src/omni-collection.entity.js +41 -0
- package/src/omni-collection.entity.js.map +1 -0
- package/src/omni-collection.entity.ts +21 -0
- package/src/omni-collection.service.d.ts +14 -0
- package/src/omni-collection.service.js +24 -0
- package/src/omni-collection.service.js.map +1 -0
- package/src/omni-collection.service.ts +75 -0
- package/src/omni-document-kind.enum.d.ts +6 -0
- package/src/omni-document-kind.enum.js +15 -0
- package/src/omni-document-kind.enum.js.map +1 -0
- package/src/omni-document-kind.enum.ts +12 -0
- package/src/omni-document.backend.d.ts +2 -0
- package/src/omni-document.backend.js +15 -0
- package/src/omni-document.backend.js.map +1 -0
- package/src/omni-document.backend.ts +16 -0
- package/src/omni-document.dto.d.ts +35 -0
- package/src/omni-document.dto.js +213 -0
- package/src/omni-document.dto.js.map +1 -0
- package/src/omni-document.dto.ts +198 -0
- package/src/omni-document.entity.d.ts +10 -0
- package/src/omni-document.entity.js +53 -0
- package/src/omni-document.entity.js.map +1 -0
- package/src/omni-document.entity.ts +30 -0
- package/src/omni-document.service.d.ts +14 -0
- package/src/omni-document.service.js +24 -0
- package/src/omni-document.service.js.map +1 -0
- package/src/omni-document.service.ts +75 -0
- package/src/omni-dto.helpers.d.ts +1 -0
- package/src/omni-dto.helpers.js +10 -0
- package/src/omni-dto.helpers.js.map +1 -0
- package/src/omni-dto.helpers.ts +21 -0
- package/src/omni-extension-projection.definition.d.ts +17 -0
- package/src/omni-extension-projection.definition.js +160 -0
- package/src/omni-extension-projection.definition.js.map +1 -0
- package/src/omni-extension-projection.definition.ts +294 -0
- package/src/omni-extension-projection.resource.d.ts +42 -0
- package/src/omni-extension-projection.resource.js +127 -0
- package/src/omni-extension-projection.resource.js.map +1 -0
- package/src/omni-extension-projection.resource.ts +274 -0
- package/src/omni-extension-projection.service.d.ts +33 -0
- package/src/omni-extension-projection.service.js +332 -0
- package/src/omni-extension-projection.service.js.map +1 -0
- package/src/omni-extension-projection.service.ts +452 -0
- package/src/omni-external-ref-binding.validator.d.ts +14 -0
- package/src/omni-external-ref-binding.validator.js +34 -0
- package/src/omni-external-ref-binding.validator.js.map +1 -0
- package/src/omni-external-ref-binding.validator.ts +53 -0
- package/src/omni-external-ref-internal-type.enum.d.ts +5 -0
- package/src/omni-external-ref-internal-type.enum.js +14 -0
- package/src/omni-external-ref-internal-type.enum.js.map +1 -0
- package/src/omni-external-ref-internal-type.enum.ts +11 -0
- package/src/omni-external-ref.backend.d.ts +2 -0
- package/src/omni-external-ref.backend.js +19 -0
- package/src/omni-external-ref.backend.js.map +1 -0
- package/src/omni-external-ref.backend.ts +25 -0
- package/src/omni-external-ref.dto.d.ts +26 -0
- package/src/omni-external-ref.dto.js +140 -0
- package/src/omni-external-ref.dto.js.map +1 -0
- package/src/omni-external-ref.dto.ts +128 -0
- package/src/omni-external-ref.service.d.ts +33 -0
- package/src/omni-external-ref.service.js +133 -0
- package/src/omni-external-ref.service.js.map +1 -0
- package/src/omni-external-ref.service.ts +255 -0
- package/src/omni-migration.d.ts +28 -0
- package/src/omni-migration.js +239 -0
- package/src/omni-migration.js.map +1 -0
- package/src/omni-migration.ts +365 -0
- package/src/omni-named.backend.d.ts +2 -0
- package/src/omni-named.backend.js +13 -0
- package/src/omni-named.backend.js.map +1 -0
- package/src/omni-named.backend.ts +11 -0
- package/src/omni-named.dto.d.ts +19 -0
- package/src/omni-named.dto.js +94 -0
- package/src/omni-named.dto.js.map +1 -0
- package/src/omni-named.dto.ts +86 -0
- package/src/omni-projection.catalog.d.ts +49 -0
- package/src/omni-projection.catalog.js +177 -0
- package/src/omni-projection.catalog.js.map +1 -0
- package/src/omni-projection.catalog.ts +345 -0
- package/src/omni-projection.lifecycle.d.ts +20 -0
- package/src/omni-projection.lifecycle.js +3 -0
- package/src/omni-projection.lifecycle.js.map +1 -0
- package/src/omni-projection.lifecycle.ts +53 -0
- package/src/omni-record-status.enum.d.ts +5 -0
- package/src/omni-record-status.enum.js +14 -0
- package/src/omni-record-status.enum.js.map +1 -0
- package/src/omni-record-status.enum.ts +11 -0
- package/src/omni-record.backend.d.ts +2 -0
- package/src/omni-record.backend.js +13 -0
- package/src/omni-record.backend.js.map +1 -0
- package/src/omni-record.backend.ts +19 -0
- package/src/omni-record.dto.d.ts +29 -0
- package/src/omni-record.dto.js +169 -0
- package/src/omni-record.dto.js.map +1 -0
- package/src/omni-record.dto.ts +157 -0
- package/src/omni-record.service.d.ts +18 -0
- package/src/omni-record.service.js +45 -0
- package/src/omni-record.service.js.map +1 -0
- package/src/omni-record.service.ts +113 -0
- package/src/omni-relation-kind.contract.d.ts +9 -0
- package/src/omni-relation-kind.contract.js +33 -0
- package/src/omni-relation-kind.contract.js.map +1 -0
- package/src/omni-relation-kind.contract.ts +49 -0
- package/src/omni-relation-kind.enum.d.ts +6 -0
- package/src/omni-relation-kind.enum.js +15 -0
- package/src/omni-relation-kind.enum.js.map +1 -0
- package/src/omni-relation-kind.enum.ts +12 -0
- package/src/omni-relation-projection.definition.d.ts +25 -0
- package/src/omni-relation-projection.definition.js +83 -0
- package/src/omni-relation-projection.definition.js.map +1 -0
- package/src/omni-relation-projection.definition.ts +166 -0
- package/src/omni-relation-projection.resource.d.ts +51 -0
- package/src/omni-relation-projection.resource.js +203 -0
- package/src/omni-relation-projection.resource.js.map +1 -0
- package/src/omni-relation-projection.resource.ts +360 -0
- package/src/omni-relation-projection.service.d.ts +47 -0
- package/src/omni-relation-projection.service.js +385 -0
- package/src/omni-relation-projection.service.js.map +1 -0
- package/src/omni-relation-projection.service.ts +610 -0
- package/src/omni-relation-semantics.d.ts +11 -0
- package/src/omni-relation-semantics.js +34 -0
- package/src/omni-relation-semantics.js.map +1 -0
- package/src/omni-relation-semantics.ts +52 -0
- package/src/omni-relation-status.enum.d.ts +5 -0
- package/src/omni-relation-status.enum.js +14 -0
- package/src/omni-relation-status.enum.js.map +1 -0
- package/src/omni-relation-status.enum.ts +11 -0
- package/src/omni-relation.backend.d.ts +2 -0
- package/src/omni-relation.backend.js +17 -0
- package/src/omni-relation.backend.js.map +1 -0
- package/src/omni-relation.backend.ts +21 -0
- package/src/omni-relation.dto.d.ts +28 -0
- package/src/omni-relation.dto.js +153 -0
- package/src/omni-relation.dto.js.map +1 -0
- package/src/omni-relation.dto.ts +142 -0
- package/src/omni-relation.service.d.ts +19 -0
- package/src/omni-relation.service.js +76 -0
- package/src/omni-relation.service.js.map +1 -0
- package/src/omni-relation.service.ts +159 -0
- package/src/omni-scope.d.ts +33 -0
- package/src/omni-scope.js +91 -0
- package/src/omni-scope.js.map +1 -0
- package/src/omni-scope.ts +161 -0
- package/src/omni-scoped.backend.d.ts +21 -0
- package/src/omni-scoped.backend.js +47 -0
- package/src/omni-scoped.backend.js.map +1 -0
- package/src/omni-scoped.backend.ts +110 -0
- package/src/omni-scoped.repository.d.ts +10 -0
- package/src/omni-scoped.repository.js +26 -0
- package/src/omni-scoped.repository.js.map +1 -0
- package/src/omni-scoped.repository.ts +34 -0
- package/src/omni-scoped.service.d.ts +36 -0
- package/src/omni-scoped.service.js +171 -0
- package/src/omni-scoped.service.js.map +1 -0
- package/src/omni-scoped.service.ts +338 -0
- package/src/omnikernel.diagnostics.d.ts +16 -0
- package/src/omnikernel.diagnostics.js +50 -0
- package/src/omnikernel.diagnostics.js.map +1 -0
- package/src/omnikernel.diagnostics.ts +83 -0
- package/src/omnikernel.module.d.ts +5 -0
- package/src/omnikernel.module.js +87 -0
- package/src/omnikernel.module.js.map +1 -0
- package/src/omnikernel.module.ts +97 -0
- package/src/omnikernel.query.service.d.ts +17 -0
- package/src/omnikernel.query.service.js +85 -0
- package/src/omnikernel.query.service.js.map +1 -0
- package/src/omnikernel.query.service.ts +108 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OmniRelationKind = void 0;
|
|
4
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
5
|
+
var OmniRelationKind;
|
|
6
|
+
(function (OmniRelationKind) {
|
|
7
|
+
OmniRelationKind["Contains"] = "contains";
|
|
8
|
+
OmniRelationKind["References"] = "references";
|
|
9
|
+
OmniRelationKind["RelatedTo"] = "related_to";
|
|
10
|
+
OmniRelationKind["DerivedFrom"] = "derived_from";
|
|
11
|
+
})(OmniRelationKind || (exports.OmniRelationKind = OmniRelationKind = {}));
|
|
12
|
+
(0, graphql_1.registerEnumType)(OmniRelationKind, {
|
|
13
|
+
name: 'OmniRelationKind',
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=omni-relation-kind.enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omni-relation-kind.enum.js","sourceRoot":"","sources":["omni-relation-kind.enum.ts"],"names":[],"mappings":";;;AAAA,6CAAmD;AAEnD,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,yCAAqB,CAAA;IACrB,6CAAyB,CAAA;IACzB,4CAAwB,CAAA;IACxB,gDAA4B,CAAA;AAC9B,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B;AAED,IAAA,0BAAgB,EAAC,gBAAgB,EAAE;IACjC,IAAI,EAAE,kBAAkB;CACzB,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { registerEnumType } from '@nestjs/graphql';
|
|
2
|
+
|
|
3
|
+
export enum OmniRelationKind {
|
|
4
|
+
Contains = 'contains',
|
|
5
|
+
References = 'references',
|
|
6
|
+
RelatedTo = 'related_to',
|
|
7
|
+
DerivedFrom = 'derived_from',
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
registerEnumType(OmniRelationKind, {
|
|
11
|
+
name: 'OmniRelationKind',
|
|
12
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { OmniRelationStatus } from './omni-relation-status.enum.js';
|
|
2
|
+
export interface OmniRelationProjectionAliases {
|
|
3
|
+
kind?: string;
|
|
4
|
+
source?: string;
|
|
5
|
+
target?: string;
|
|
6
|
+
payload?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface OmniRelationProjectionDefinition {
|
|
9
|
+
id: string;
|
|
10
|
+
relation: {
|
|
11
|
+
kind?: string;
|
|
12
|
+
allowedKinds?: readonly string[];
|
|
13
|
+
sourceKind: string;
|
|
14
|
+
targetKind: string;
|
|
15
|
+
status?: OmniRelationStatus;
|
|
16
|
+
schema?: {
|
|
17
|
+
id: string;
|
|
18
|
+
version: number;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
aliases?: OmniRelationProjectionAliases;
|
|
22
|
+
}
|
|
23
|
+
export declare function getOmniRelationProjectionAllowedKinds(definition: OmniRelationProjectionDefinition): readonly string[];
|
|
24
|
+
export declare function getOmniRelationProjectionAliases(definition: OmniRelationProjectionDefinition): Required<OmniRelationProjectionAliases>;
|
|
25
|
+
export declare function defineOmniRelationProjection<TDefinition extends OmniRelationProjectionDefinition>(definition: TDefinition): Readonly<TDefinition>;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOmniRelationProjectionAllowedKinds = getOmniRelationProjectionAllowedKinds;
|
|
4
|
+
exports.getOmniRelationProjectionAliases = getOmniRelationProjectionAliases;
|
|
5
|
+
exports.defineOmniRelationProjection = defineOmniRelationProjection;
|
|
6
|
+
const omni_relation_status_enum_js_1 = require("./omni-relation-status.enum.js");
|
|
7
|
+
const omni_relation_kind_contract_js_1 = require("./omni-relation-kind.contract.js");
|
|
8
|
+
const publicFieldPattern = /^[_A-Za-z][_0-9A-Za-z]*$/;
|
|
9
|
+
function assertFixedValue(value, label, max) {
|
|
10
|
+
if (typeof value !== 'string' ||
|
|
11
|
+
value.trim().length === 0 ||
|
|
12
|
+
value.length > max) {
|
|
13
|
+
throw new TypeError(`${label} must be a non-empty string up to ${max} characters.`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function freeze(definition) {
|
|
17
|
+
if (definition && typeof definition === 'object') {
|
|
18
|
+
Object.values(definition).forEach((value) => {
|
|
19
|
+
if (value && typeof value === 'object')
|
|
20
|
+
freeze(value);
|
|
21
|
+
});
|
|
22
|
+
Object.freeze(definition);
|
|
23
|
+
}
|
|
24
|
+
return definition;
|
|
25
|
+
}
|
|
26
|
+
function getOmniRelationProjectionAllowedKinds(definition) {
|
|
27
|
+
return definition.relation.allowedKinds ?? [definition.relation.kind];
|
|
28
|
+
}
|
|
29
|
+
function getOmniRelationProjectionAliases(definition) {
|
|
30
|
+
return {
|
|
31
|
+
kind: definition.aliases?.kind ?? 'kind',
|
|
32
|
+
source: definition.aliases?.source ?? 'sourceRecordId',
|
|
33
|
+
target: definition.aliases?.target ?? 'targetRecordId',
|
|
34
|
+
payload: definition.aliases?.payload ?? 'payload',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function defineOmniRelationProjection(definition) {
|
|
38
|
+
assertFixedValue(definition.id, 'Omni relation projection id', 128);
|
|
39
|
+
const relation = definition.relation;
|
|
40
|
+
if (!relation || typeof relation !== 'object') {
|
|
41
|
+
throw new TypeError('Omni relation projection relation must be an object.');
|
|
42
|
+
}
|
|
43
|
+
if (relation.kind !== undefined && relation.allowedKinds !== undefined) {
|
|
44
|
+
throw new TypeError('Omni relation projection accepts either kind or allowedKinds, not both.');
|
|
45
|
+
}
|
|
46
|
+
const allowedKinds = getOmniRelationProjectionAllowedKinds(definition);
|
|
47
|
+
if (!Array.isArray(allowedKinds) ||
|
|
48
|
+
allowedKinds.length === 0 ||
|
|
49
|
+
new Set(allowedKinds).size !== allowedKinds.length) {
|
|
50
|
+
throw new TypeError('Omni relation projection allowedKinds must be a non-empty unique list.');
|
|
51
|
+
}
|
|
52
|
+
for (const kind of allowedKinds) {
|
|
53
|
+
assertFixedValue(kind, 'Omni relation projection kind', 64);
|
|
54
|
+
if (!omni_relation_kind_contract_js_1.omniRelationKindPattern.test(kind)) {
|
|
55
|
+
throw new TypeError('Omni relation projection kind must use lowercase letters, digits, and underscores.');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
assertFixedValue(relation.sourceKind, 'Omni relation projection source kind', 64);
|
|
59
|
+
assertFixedValue(relation.targetKind, 'Omni relation projection target kind', 64);
|
|
60
|
+
if (relation.status !== undefined &&
|
|
61
|
+
!Object.values(omni_relation_status_enum_js_1.OmniRelationStatus).includes(relation.status)) {
|
|
62
|
+
throw new TypeError('Omni relation projection status must be an Omni relation status.');
|
|
63
|
+
}
|
|
64
|
+
if (relation.schema) {
|
|
65
|
+
assertFixedValue(relation.schema.id, 'Omni relation projection schema id', 128);
|
|
66
|
+
if (!Number.isInteger(relation.schema.version) ||
|
|
67
|
+
relation.schema.version < 1 ||
|
|
68
|
+
relation.schema.version > 2_147_483_647) {
|
|
69
|
+
throw new TypeError('Omni relation projection schema version must be a positive signed 32-bit integer.');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const aliases = getOmniRelationProjectionAliases(definition);
|
|
73
|
+
if (new Set(Object.values(aliases)).size !== Object.keys(aliases).length) {
|
|
74
|
+
throw new TypeError('Omni relation projection aliases must be unique.');
|
|
75
|
+
}
|
|
76
|
+
for (const [role, alias] of Object.entries(aliases)) {
|
|
77
|
+
if (!publicFieldPattern.test(alias)) {
|
|
78
|
+
throw new TypeError(`Omni relation projection ${role} alias must be a GraphQL-safe field name.`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return freeze(definition);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=omni-relation-projection.definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omni-relation-projection.definition.js","sourceRoot":"","sources":["omni-relation-projection.definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { OmniRelationStatus } from './omni-relation-status.enum.js';
|
|
2
|
+
import { omniRelationKindPattern } from './omni-relation-kind.contract.js';
|
|
3
|
+
|
|
4
|
+
export interface OmniRelationProjectionAliases {
|
|
5
|
+
/** Public field that maps to OmniRelationEntity.kind. */
|
|
6
|
+
kind?: string;
|
|
7
|
+
/** Public field that maps to OmniRelationEntity.sourceRecordId. */
|
|
8
|
+
source?: string;
|
|
9
|
+
/** Public field that maps to OmniRelationEntity.targetRecordId. */
|
|
10
|
+
target?: string;
|
|
11
|
+
/** Public field that maps to OmniRelationEntity.payload. */
|
|
12
|
+
payload?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface OmniRelationProjectionDefinition {
|
|
16
|
+
id: string;
|
|
17
|
+
relation: {
|
|
18
|
+
/**
|
|
19
|
+
* Legacy single-kind shorthand. New multi-kind resources use
|
|
20
|
+
* allowedKinds instead.
|
|
21
|
+
*/
|
|
22
|
+
kind?: string;
|
|
23
|
+
/** The non-empty registered kinds this one generated resource permits. */
|
|
24
|
+
allowedKinds?: readonly string[];
|
|
25
|
+
sourceKind: string;
|
|
26
|
+
targetKind: string;
|
|
27
|
+
status?: OmniRelationStatus;
|
|
28
|
+
schema?: {
|
|
29
|
+
id: string;
|
|
30
|
+
version: number;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/** Names exposed by generated REST and GraphQL transports. */
|
|
34
|
+
aliases?: OmniRelationProjectionAliases;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const publicFieldPattern = /^[_A-Za-z][_0-9A-Za-z]*$/;
|
|
38
|
+
|
|
39
|
+
function assertFixedValue(
|
|
40
|
+
value: unknown,
|
|
41
|
+
label: string,
|
|
42
|
+
max: number,
|
|
43
|
+
): asserts value is string {
|
|
44
|
+
if (
|
|
45
|
+
typeof value !== 'string' ||
|
|
46
|
+
value.trim().length === 0 ||
|
|
47
|
+
value.length > max
|
|
48
|
+
) {
|
|
49
|
+
throw new TypeError(
|
|
50
|
+
`${label} must be a non-empty string up to ${max} characters.`,
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function freeze<T>(definition: T): Readonly<T> {
|
|
56
|
+
if (definition && typeof definition === 'object') {
|
|
57
|
+
Object.values(definition as Record<string, unknown>).forEach((value) => {
|
|
58
|
+
if (value && typeof value === 'object') freeze(value);
|
|
59
|
+
});
|
|
60
|
+
Object.freeze(definition);
|
|
61
|
+
}
|
|
62
|
+
return definition;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Resolves legacy kind syntax into the canonical immutable allowed-kind set. */
|
|
66
|
+
export function getOmniRelationProjectionAllowedKinds(
|
|
67
|
+
definition: OmniRelationProjectionDefinition,
|
|
68
|
+
): readonly string[] {
|
|
69
|
+
return definition.relation.allowedKinds ?? [definition.relation.kind!];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Resolves omitted aliases to the native OmniRelationEntity field names. */
|
|
73
|
+
export function getOmniRelationProjectionAliases(
|
|
74
|
+
definition: OmniRelationProjectionDefinition,
|
|
75
|
+
): Required<OmniRelationProjectionAliases> {
|
|
76
|
+
return {
|
|
77
|
+
kind: definition.aliases?.kind ?? 'kind',
|
|
78
|
+
source: definition.aliases?.source ?? 'sourceRecordId',
|
|
79
|
+
target: definition.aliases?.target ?? 'targetRecordId',
|
|
80
|
+
payload: definition.aliases?.payload ?? 'payload',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Defines one generated relation resource over omni-relation. A resource can
|
|
86
|
+
* expose one or more registered relation kinds, while status, schema, and
|
|
87
|
+
* endpoint kinds remain server-owned.
|
|
88
|
+
*/
|
|
89
|
+
export function defineOmniRelationProjection<
|
|
90
|
+
TDefinition extends OmniRelationProjectionDefinition,
|
|
91
|
+
>(definition: TDefinition): Readonly<TDefinition> {
|
|
92
|
+
assertFixedValue(definition.id, 'Omni relation projection id', 128);
|
|
93
|
+
const relation = definition.relation;
|
|
94
|
+
if (!relation || typeof relation !== 'object') {
|
|
95
|
+
throw new TypeError('Omni relation projection relation must be an object.');
|
|
96
|
+
}
|
|
97
|
+
if (relation.kind !== undefined && relation.allowedKinds !== undefined) {
|
|
98
|
+
throw new TypeError(
|
|
99
|
+
'Omni relation projection accepts either kind or allowedKinds, not both.',
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
const allowedKinds = getOmniRelationProjectionAllowedKinds(definition);
|
|
103
|
+
if (
|
|
104
|
+
!Array.isArray(allowedKinds) ||
|
|
105
|
+
allowedKinds.length === 0 ||
|
|
106
|
+
new Set(allowedKinds).size !== allowedKinds.length
|
|
107
|
+
) {
|
|
108
|
+
throw new TypeError(
|
|
109
|
+
'Omni relation projection allowedKinds must be a non-empty unique list.',
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
for (const kind of allowedKinds) {
|
|
113
|
+
assertFixedValue(kind, 'Omni relation projection kind', 64);
|
|
114
|
+
if (!omniRelationKindPattern.test(kind)) {
|
|
115
|
+
throw new TypeError(
|
|
116
|
+
'Omni relation projection kind must use lowercase letters, digits, and underscores.',
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
assertFixedValue(
|
|
121
|
+
relation.sourceKind,
|
|
122
|
+
'Omni relation projection source kind',
|
|
123
|
+
64,
|
|
124
|
+
);
|
|
125
|
+
assertFixedValue(
|
|
126
|
+
relation.targetKind,
|
|
127
|
+
'Omni relation projection target kind',
|
|
128
|
+
64,
|
|
129
|
+
);
|
|
130
|
+
if (
|
|
131
|
+
relation.status !== undefined &&
|
|
132
|
+
!Object.values(OmniRelationStatus).includes(relation.status)
|
|
133
|
+
) {
|
|
134
|
+
throw new TypeError(
|
|
135
|
+
'Omni relation projection status must be an Omni relation status.',
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
if (relation.schema) {
|
|
139
|
+
assertFixedValue(
|
|
140
|
+
relation.schema.id,
|
|
141
|
+
'Omni relation projection schema id',
|
|
142
|
+
128,
|
|
143
|
+
);
|
|
144
|
+
if (
|
|
145
|
+
!Number.isInteger(relation.schema.version) ||
|
|
146
|
+
relation.schema.version < 1 ||
|
|
147
|
+
relation.schema.version > 2_147_483_647
|
|
148
|
+
) {
|
|
149
|
+
throw new TypeError(
|
|
150
|
+
'Omni relation projection schema version must be a positive signed 32-bit integer.',
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const aliases = getOmniRelationProjectionAliases(definition);
|
|
155
|
+
if (new Set(Object.values(aliases)).size !== Object.keys(aliases).length) {
|
|
156
|
+
throw new TypeError('Omni relation projection aliases must be unique.');
|
|
157
|
+
}
|
|
158
|
+
for (const [role, alias] of Object.entries(aliases)) {
|
|
159
|
+
if (!publicFieldPattern.test(alias)) {
|
|
160
|
+
throw new TypeError(
|
|
161
|
+
`Omni relation projection ${role} alias must be a GraphQL-safe field name.`,
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return freeze(definition);
|
|
166
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type InjectionToken, type Provider } from '@nestjs/common';
|
|
2
|
+
import { type ICrudGenResourceFactoryResult } from '@nest-yalc-2/crud-gen';
|
|
3
|
+
import type { ClassType } from '@nest-yalc-2/types/globals.d.js';
|
|
4
|
+
import type { ObjectLiteral } from 'typeorm';
|
|
5
|
+
import { OmniRelationEntity } from './base/omni-relation.entity.js';
|
|
6
|
+
import type { OmniProjectionReaderCatalogProvider, OmniRelationProjectionReaderRegistration } from './omni-projection.catalog.js';
|
|
7
|
+
import { type OmniRelationProjectionDefinition } from './omni-relation-projection.definition.js';
|
|
8
|
+
import type { OmniProjectionLifecycleProvider } from './omni-projection.lifecycle.js';
|
|
9
|
+
type RelationGraphqlClass = new () => Record<string, unknown>;
|
|
10
|
+
export interface OmniRelationProjectionGraphqlNames {
|
|
11
|
+
object: string;
|
|
12
|
+
create: string;
|
|
13
|
+
patch: string;
|
|
14
|
+
conditions: string;
|
|
15
|
+
}
|
|
16
|
+
export interface OmniRelationProjectionRegistrationOptions<Api extends ObjectLiteral> {
|
|
17
|
+
apiModel: ClassType<Api>;
|
|
18
|
+
definition: OmniRelationProjectionDefinition;
|
|
19
|
+
dbConnection: string;
|
|
20
|
+
catalog?: OmniProjectionReaderCatalogProvider;
|
|
21
|
+
lifecycle?: OmniProjectionLifecycleProvider<OmniRelationProjectionDefinition, OmniRelationEntity>;
|
|
22
|
+
rest?: {
|
|
23
|
+
path?: string;
|
|
24
|
+
};
|
|
25
|
+
graphql?: {
|
|
26
|
+
prefix?: string;
|
|
27
|
+
names?: OmniRelationProjectionGraphqlNames;
|
|
28
|
+
};
|
|
29
|
+
moduleRefToken?: InjectionToken;
|
|
30
|
+
}
|
|
31
|
+
export interface OmniRelationProjectionGraphqlTypes {
|
|
32
|
+
object: RelationGraphqlClass;
|
|
33
|
+
create: RelationGraphqlClass;
|
|
34
|
+
patch: RelationGraphqlClass;
|
|
35
|
+
conditions: RelationGraphqlClass;
|
|
36
|
+
}
|
|
37
|
+
export interface OmniRelationProjectionRegistration<Api extends ObjectLiteral> {
|
|
38
|
+
entities: readonly [];
|
|
39
|
+
relationKinds: readonly string[];
|
|
40
|
+
definition: OmniRelationProjectionDefinition;
|
|
41
|
+
reader: OmniRelationProjectionReaderRegistration;
|
|
42
|
+
graphqlTypes: OmniRelationProjectionGraphqlTypes;
|
|
43
|
+
resource: ICrudGenResourceFactoryResult<Api>;
|
|
44
|
+
controllers: readonly ClassType[];
|
|
45
|
+
providers: readonly Provider[];
|
|
46
|
+
serviceToken: string;
|
|
47
|
+
dataLoaderToken: string;
|
|
48
|
+
}
|
|
49
|
+
export declare function createOmniRelationProjectionGraphqlTypes(definition: OmniRelationProjectionDefinition, names: OmniRelationProjectionGraphqlNames): OmniRelationProjectionGraphqlTypes;
|
|
50
|
+
export declare function createOmniRelationProjectionRegistration<Api extends ObjectLiteral>(options: OmniRelationProjectionRegistrationOptions<Api>): OmniRelationProjectionRegistration<Api>;
|
|
51
|
+
export {};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createOmniRelationProjectionGraphqlTypes = createOmniRelationProjectionGraphqlTypes;
|
|
7
|
+
exports.createOmniRelationProjectionRegistration = createOmniRelationProjectionRegistration;
|
|
8
|
+
const common_1 = require("@nestjs/common");
|
|
9
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
10
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
11
|
+
const crud_gen_1 = require("@nest-yalc-2/crud-gen");
|
|
12
|
+
const data_loader_1 = require("@nest-yalc-2/data-loader");
|
|
13
|
+
const uuid_scalar_js_1 = require("@nest-yalc-2/graphql/scalars/uuid.scalar.js");
|
|
14
|
+
const returnValue_js_1 = __importDefault(require("@nest-yalc-2/utils/returnValue.js"));
|
|
15
|
+
const class_transformer_1 = require("class-transformer");
|
|
16
|
+
const graphql_type_json_1 = require("graphql-type-json");
|
|
17
|
+
const omni_record_entity_js_1 = require("./base/omni-record.entity.js");
|
|
18
|
+
const omni_relation_entity_js_1 = require("./base/omni-relation.entity.js");
|
|
19
|
+
const omni_relation_projection_definition_js_1 = require("./omni-relation-projection.definition.js");
|
|
20
|
+
const omni_relation_projection_service_js_1 = require("./omni-relation-projection.service.js");
|
|
21
|
+
const omni_relation_kind_contract_js_1 = require("./omni-relation-kind.contract.js");
|
|
22
|
+
const omni_scope_js_1 = require("./omni-scope.js");
|
|
23
|
+
function namedClass(name, outputFields) {
|
|
24
|
+
return {
|
|
25
|
+
[name]: class {
|
|
26
|
+
constructor(data) {
|
|
27
|
+
if (!outputFields) {
|
|
28
|
+
Object.assign(this, data);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
for (const [publicName, destination] of outputFields) {
|
|
32
|
+
if (data && Object.prototype.hasOwnProperty.call(data, destination)) {
|
|
33
|
+
this[publicName] = data[destination];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
}[name];
|
|
39
|
+
}
|
|
40
|
+
function addField(target, name, destination, type, nullable) {
|
|
41
|
+
(0, crud_gen_1.ModelField)({
|
|
42
|
+
dst: destination,
|
|
43
|
+
gqlType: (0, returnValue_js_1.default)(type),
|
|
44
|
+
gqlOptions: { nullable },
|
|
45
|
+
})(target.prototype, name);
|
|
46
|
+
(0, class_transformer_1.Expose)()(target.prototype, name);
|
|
47
|
+
}
|
|
48
|
+
function defaultGraphqlNames(apiModel) {
|
|
49
|
+
return {
|
|
50
|
+
object: apiModel.name,
|
|
51
|
+
create: `${apiModel.name}CreateInput`,
|
|
52
|
+
patch: `${apiModel.name}UpdateInput`,
|
|
53
|
+
conditions: `${apiModel.name}Condition`,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function createOmniRelationProjectionGraphqlTypes(definition, names) {
|
|
57
|
+
const aliases = (0, omni_relation_projection_definition_js_1.getOmniRelationProjectionAliases)(definition);
|
|
58
|
+
const multipleKinds = (0, omni_relation_projection_definition_js_1.getOmniRelationProjectionAllowedKinds)(definition).length > 1;
|
|
59
|
+
const objectFields = [
|
|
60
|
+
['guid', 'guid'],
|
|
61
|
+
[aliases.source, 'sourceRecordId'],
|
|
62
|
+
[aliases.target, 'targetRecordId'],
|
|
63
|
+
['revision', 'revision'],
|
|
64
|
+
[aliases.payload, 'payload'],
|
|
65
|
+
];
|
|
66
|
+
if (multipleKinds)
|
|
67
|
+
objectFields.splice(1, 0, [aliases.kind, 'kind']);
|
|
68
|
+
const object = namedClass(names.object, objectFields);
|
|
69
|
+
(0, graphql_1.ObjectType)(names.object)(object);
|
|
70
|
+
(0, crud_gen_1.ModelObject)({
|
|
71
|
+
filters: { type: crud_gen_1.FilterOptionType.INCLUDE, fields: ['guid'] },
|
|
72
|
+
})(object);
|
|
73
|
+
(0, class_transformer_1.Exclude)()(object);
|
|
74
|
+
addField(object, 'guid', 'guid', uuid_scalar_js_1.UUIDScalar, false);
|
|
75
|
+
if (multipleKinds) {
|
|
76
|
+
addField(object, aliases.kind, 'kind', String, false);
|
|
77
|
+
}
|
|
78
|
+
addField(object, aliases.source, 'sourceRecordId', uuid_scalar_js_1.UUIDScalar, false);
|
|
79
|
+
addField(object, aliases.target, 'targetRecordId', uuid_scalar_js_1.UUIDScalar, false);
|
|
80
|
+
addField(object, 'revision', 'revision', graphql_1.Int, false);
|
|
81
|
+
addField(object, aliases.payload, 'payload', graphql_type_json_1.GraphQLJSON, true);
|
|
82
|
+
const create = namedClass(names.create);
|
|
83
|
+
(0, graphql_1.InputType)(names.create)(create);
|
|
84
|
+
(0, crud_gen_1.ModelObject)()(create);
|
|
85
|
+
addField(create, 'guid', 'guid', uuid_scalar_js_1.UUIDScalar, false);
|
|
86
|
+
if (multipleKinds) {
|
|
87
|
+
addField(create, aliases.kind, 'kind', String, false);
|
|
88
|
+
}
|
|
89
|
+
addField(create, aliases.source, 'sourceRecordId', uuid_scalar_js_1.UUIDScalar, false);
|
|
90
|
+
addField(create, aliases.target, 'targetRecordId', uuid_scalar_js_1.UUIDScalar, false);
|
|
91
|
+
addField(create, aliases.payload, 'payload', graphql_type_json_1.GraphQLJSON, true);
|
|
92
|
+
const patch = namedClass(names.patch);
|
|
93
|
+
(0, graphql_1.InputType)(names.patch)(patch);
|
|
94
|
+
(0, crud_gen_1.ModelObject)()(patch);
|
|
95
|
+
addField(patch, aliases.payload, 'payload', graphql_type_json_1.GraphQLJSON, true);
|
|
96
|
+
addField(patch, 'expectedRevision', 'expectedRevision', graphql_1.Int, false);
|
|
97
|
+
const conditions = namedClass(names.conditions);
|
|
98
|
+
(0, graphql_1.InputType)(names.conditions)(conditions);
|
|
99
|
+
(0, crud_gen_1.ModelObject)()(conditions);
|
|
100
|
+
addField(conditions, 'guid', 'guid', uuid_scalar_js_1.UUIDScalar, false);
|
|
101
|
+
return { object, create, patch, conditions };
|
|
102
|
+
}
|
|
103
|
+
function createOmniRelationProjectionRegistration(options) {
|
|
104
|
+
const graphqlTypes = createOmniRelationProjectionGraphqlTypes(options.definition, options.graphql?.names ?? defaultGraphqlNames(options.apiModel));
|
|
105
|
+
const serviceToken = (0, crud_gen_1.getServiceToken)(options.apiModel);
|
|
106
|
+
const dataLoaderToken = (0, data_loader_1.getDataloaderToken)(options.apiModel);
|
|
107
|
+
const resource = (0, crud_gen_1.CrudGenResourceFactory)({
|
|
108
|
+
entityModel: options.apiModel,
|
|
109
|
+
backend: false,
|
|
110
|
+
graphql: {
|
|
111
|
+
resolver: {
|
|
112
|
+
dto: graphqlTypes.object,
|
|
113
|
+
input: {
|
|
114
|
+
create: graphqlTypes.create,
|
|
115
|
+
update: graphqlTypes.patch,
|
|
116
|
+
conditions: graphqlTypes.conditions,
|
|
117
|
+
},
|
|
118
|
+
...(options.graphql?.prefix ? { prefix: options.graphql.prefix } : {}),
|
|
119
|
+
...(options.moduleRefToken !== undefined
|
|
120
|
+
? { moduleRefToken: options.moduleRefToken }
|
|
121
|
+
: {}),
|
|
122
|
+
queries: { getResource: { idName: 'guid' } },
|
|
123
|
+
},
|
|
124
|
+
serviceToken,
|
|
125
|
+
dataLoaderToken,
|
|
126
|
+
},
|
|
127
|
+
rest: {
|
|
128
|
+
dto: graphqlTypes.object,
|
|
129
|
+
serialize: true,
|
|
130
|
+
...(options.rest?.path ? { path: options.rest.path } : {}),
|
|
131
|
+
idField: 'guid',
|
|
132
|
+
serviceToken,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
const relationKinds = Object.freeze([
|
|
136
|
+
...(0, omni_relation_projection_definition_js_1.getOmniRelationProjectionAllowedKinds)(options.definition),
|
|
137
|
+
]);
|
|
138
|
+
const reader = Object.freeze({
|
|
139
|
+
type: 'relation',
|
|
140
|
+
id: options.definition.id,
|
|
141
|
+
definition: options.definition,
|
|
142
|
+
});
|
|
143
|
+
const serviceProvider = options.lifecycle && options.catalog
|
|
144
|
+
? {
|
|
145
|
+
provide: serviceToken,
|
|
146
|
+
scope: common_1.Scope.REQUEST,
|
|
147
|
+
useFactory: (dataSource, scope, omniOptions, lifecycle, catalog) => new omni_relation_projection_service_js_1.OmniRelationProjectionService(dataSource.getRepository(omni_relation_entity_js_1.OmniRelationEntity), scope, omniOptions.deletion.relation, dataSource.getRepository(omni_record_entity_js_1.OmniRecordEntity), (0, omni_relation_kind_contract_js_1.createOmniRelationKindContract)(relationKinds), options.definition, dataSource, lifecycle, catalog),
|
|
148
|
+
inject: [
|
|
149
|
+
(0, typeorm_1.getDataSourceToken)(options.dbConnection),
|
|
150
|
+
omni_scope_js_1.OmniScopeContext,
|
|
151
|
+
omni_scope_js_1.OMNI_KERNEL_OPTIONS,
|
|
152
|
+
options.lifecycle.token,
|
|
153
|
+
options.catalog.token,
|
|
154
|
+
],
|
|
155
|
+
}
|
|
156
|
+
: options.lifecycle
|
|
157
|
+
? {
|
|
158
|
+
provide: serviceToken,
|
|
159
|
+
scope: common_1.Scope.REQUEST,
|
|
160
|
+
useFactory: (dataSource, scope, omniOptions, lifecycle) => new omni_relation_projection_service_js_1.OmniRelationProjectionService(dataSource.getRepository(omni_relation_entity_js_1.OmniRelationEntity), scope, omniOptions.deletion.relation, dataSource.getRepository(omni_record_entity_js_1.OmniRecordEntity), (0, omni_relation_kind_contract_js_1.createOmniRelationKindContract)(relationKinds), options.definition, dataSource, lifecycle),
|
|
161
|
+
inject: [
|
|
162
|
+
(0, typeorm_1.getDataSourceToken)(options.dbConnection),
|
|
163
|
+
omni_scope_js_1.OmniScopeContext,
|
|
164
|
+
omni_scope_js_1.OMNI_KERNEL_OPTIONS,
|
|
165
|
+
options.lifecycle.token,
|
|
166
|
+
],
|
|
167
|
+
}
|
|
168
|
+
: {
|
|
169
|
+
provide: serviceToken,
|
|
170
|
+
scope: common_1.Scope.REQUEST,
|
|
171
|
+
useFactory: (dataSource, scope, omniOptions) => new omni_relation_projection_service_js_1.OmniRelationProjectionService(dataSource.getRepository(omni_relation_entity_js_1.OmniRelationEntity), scope, omniOptions.deletion.relation, dataSource.getRepository(omni_record_entity_js_1.OmniRecordEntity), (0, omni_relation_kind_contract_js_1.createOmniRelationKindContract)(relationKinds), options.definition, dataSource, undefined),
|
|
172
|
+
inject: [
|
|
173
|
+
(0, typeorm_1.getDataSourceToken)(options.dbConnection),
|
|
174
|
+
omni_scope_js_1.OmniScopeContext,
|
|
175
|
+
omni_scope_js_1.OMNI_KERNEL_OPTIONS,
|
|
176
|
+
],
|
|
177
|
+
};
|
|
178
|
+
const providers = [
|
|
179
|
+
serviceProvider,
|
|
180
|
+
{
|
|
181
|
+
provide: dataLoaderToken,
|
|
182
|
+
scope: common_1.Scope.REQUEST,
|
|
183
|
+
useFactory: (service, scope) => new data_loader_1.GQLDataLoader((0, data_loader_1.getFn)(service), 'guid', undefined, {
|
|
184
|
+
cacheKeyFn: (key) => scope.cacheKey(key),
|
|
185
|
+
}),
|
|
186
|
+
inject: [serviceToken, omni_scope_js_1.OmniScopeContext],
|
|
187
|
+
},
|
|
188
|
+
...resource.providers,
|
|
189
|
+
];
|
|
190
|
+
return Object.freeze({
|
|
191
|
+
entities: Object.freeze([]),
|
|
192
|
+
relationKinds,
|
|
193
|
+
definition: options.definition,
|
|
194
|
+
reader,
|
|
195
|
+
graphqlTypes: Object.freeze(graphqlTypes),
|
|
196
|
+
resource,
|
|
197
|
+
controllers: Object.freeze([...resource.controllers]),
|
|
198
|
+
providers: Object.freeze(providers),
|
|
199
|
+
serviceToken,
|
|
200
|
+
dataLoaderToken,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=omni-relation-projection.resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omni-relation-projection.resource.js","sourceRoot":"","sources":["omni-relation-projection.resource.ts"],"names":[],"mappings":"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"}
|