@decaf-ts/for-nest 0.0.2 → 0.0.4
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/dist/for-nest.cjs +549 -15
- package/dist/for-nest.esm.cjs +549 -14
- package/lib/RepoFactory.cjs +27 -0
- package/lib/RepoFactory.d.ts +6 -0
- package/lib/core-module.cjs +27 -7
- package/lib/core-module.d.ts +7 -2
- package/lib/decoration.cjs +123 -0
- package/lib/decoration.d.ts +1 -0
- package/lib/decorators/ApiProperty.cjs +63 -0
- package/lib/decorators/ApiProperty.d.ts +27 -0
- package/lib/decorators/helpers.cjs +140 -0
- package/lib/decorators/helpers.d.ts +8 -0
- package/lib/decorators/index.cjs +19 -0
- package/lib/decorators/index.d.ts +2 -0
- package/lib/esm/RepoFactory.d.ts +6 -0
- package/lib/esm/RepoFactory.js +24 -0
- package/lib/esm/core-module.d.ts +7 -2
- package/lib/esm/core-module.js +27 -7
- package/lib/esm/decoration.d.ts +1 -0
- package/lib/esm/decoration.js +121 -0
- package/lib/esm/decorators/ApiProperty.d.ts +27 -0
- package/lib/esm/decorators/ApiProperty.js +57 -0
- package/lib/esm/decorators/helpers.d.ts +8 -0
- package/lib/esm/decorators/helpers.js +132 -0
- package/lib/esm/decorators/index.d.ts +2 -0
- package/lib/esm/decorators/index.js +3 -0
- package/lib/esm/index.d.ts +7 -2
- package/lib/esm/index.js +8 -3
- package/lib/esm/model-module.d.ts +8 -0
- package/lib/esm/model-module.js +199 -0
- package/lib/esm/module.d.ts +1 -1
- package/lib/esm/module.js +11 -3
- package/lib/esm/types.d.ts +1 -0
- package/lib/esm/types.js +1 -1
- package/lib/esm/utils.d.ts +2 -0
- package/lib/esm/utils.js +11 -0
- package/lib/index.cjs +8 -3
- package/lib/index.d.ts +7 -2
- package/lib/model-module.cjs +202 -0
- package/lib/model-module.d.ts +8 -0
- package/lib/module.cjs +11 -3
- package/lib/module.d.ts +1 -1
- package/lib/types.cjs +1 -1
- package/lib/types.d.ts +1 -0
- package/lib/utils.cjs +14 -0
- package/lib/utils.d.ts +2 -0
- package/package.json +4 -2
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
var DecafModelModule_1;
|
|
14
|
+
import { Body, Controller, Delete, Get, Module, Param, Post, Put, } from "@nestjs/common";
|
|
15
|
+
import { ApiBadRequestResponse, ApiBody, ApiCreatedResponse, ApiExtraModels, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiParam, ApiTags, ApiUnprocessableEntityResponse, getSchemaPath, } from "@nestjs/swagger";
|
|
16
|
+
import { Adapter, Repository } from "@decaf-ts/core";
|
|
17
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
18
|
+
import { LoggedClass, Logging, toKebabCase } from "@decaf-ts/logging";
|
|
19
|
+
import { RepoFactory } from "./RepoFactory.js";
|
|
20
|
+
let DecafModelModule = class DecafModelModule {
|
|
21
|
+
static { DecafModelModule_1 = this; }
|
|
22
|
+
static get log() {
|
|
23
|
+
if (!this._logger)
|
|
24
|
+
this._logger = Logging.for(DecafModelModule_1);
|
|
25
|
+
return this._logger;
|
|
26
|
+
}
|
|
27
|
+
static toModelController(ModelClazz) {
|
|
28
|
+
const log = this.log.for(this.toModelController);
|
|
29
|
+
const tableName = Repository.table(ModelClazz);
|
|
30
|
+
const routePath = toKebabCase(tableName);
|
|
31
|
+
const modelClazzName = ModelClazz.name;
|
|
32
|
+
log.debug(`Creating controller for model: ${modelClazzName}`);
|
|
33
|
+
let DynamicModelController = class DynamicModelController extends LoggedClass {
|
|
34
|
+
constructor(repoFactory) {
|
|
35
|
+
super();
|
|
36
|
+
this.repoFactory = repoFactory;
|
|
37
|
+
log.info(`Registering dynamic controller for model: ${modelClazzName} route: /${routePath}`);
|
|
38
|
+
try {
|
|
39
|
+
this.repo = this.repoFactory.for(ModelClazz.name);
|
|
40
|
+
this.pk = this.repo.pk;
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
this.log.error(`Failed to initialize repository for model "${ModelClazz.name}".`, e);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async create(data) {
|
|
47
|
+
const log = this.log.for(this.create);
|
|
48
|
+
log.verbose(`creating new ${modelClazzName}`);
|
|
49
|
+
let created;
|
|
50
|
+
try {
|
|
51
|
+
created = await this.repo.create(data);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
log.error(`Failed to create new ${modelClazzName}`, e);
|
|
55
|
+
throw e;
|
|
56
|
+
}
|
|
57
|
+
log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
|
|
58
|
+
return created;
|
|
59
|
+
}
|
|
60
|
+
async read(id) {
|
|
61
|
+
const log = this.log.for(this.read);
|
|
62
|
+
let read;
|
|
63
|
+
try {
|
|
64
|
+
log.debug(`reading ${modelClazzName} with ${this.pk} ${id}`);
|
|
65
|
+
read = await this.repo.read(id);
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
log.error(`Failed to read ${modelClazzName} with id ${id}`, e);
|
|
69
|
+
throw e;
|
|
70
|
+
}
|
|
71
|
+
log.info(`read ${modelClazzName} with id ${read[this.pk]}`);
|
|
72
|
+
return read;
|
|
73
|
+
}
|
|
74
|
+
async update(data) {
|
|
75
|
+
const log = this.log.for(this.update);
|
|
76
|
+
let updated;
|
|
77
|
+
try {
|
|
78
|
+
log.info(`updating ${modelClazzName} with ${this.pk} ${data[this.pk]}`);
|
|
79
|
+
updated = await this.repo.create(data);
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
throw e;
|
|
83
|
+
}
|
|
84
|
+
return updated;
|
|
85
|
+
}
|
|
86
|
+
async delete(id) {
|
|
87
|
+
const log = this.log.for(this.delete);
|
|
88
|
+
let read;
|
|
89
|
+
try {
|
|
90
|
+
log.debug(`deleting ${modelClazzName} with ${this.pk} ${id}`);
|
|
91
|
+
read = await this.repo.read(id);
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
log.error(`Failed to delete ${modelClazzName} with id ${id}`, e);
|
|
95
|
+
throw e;
|
|
96
|
+
}
|
|
97
|
+
log.info(`deleted ${modelClazzName} with id ${read[this.pk]}`);
|
|
98
|
+
return read;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
__decorate([
|
|
102
|
+
Post(),
|
|
103
|
+
ApiOperation({ summary: `Create a new ${modelClazzName}.` }),
|
|
104
|
+
ApiBody({
|
|
105
|
+
description: `Payload for ${modelClazzName}`,
|
|
106
|
+
schema: { $ref: getSchemaPath(ModelClazz) },
|
|
107
|
+
}),
|
|
108
|
+
ApiCreatedResponse({
|
|
109
|
+
description: `${modelClazzName} created successfully.`,
|
|
110
|
+
}),
|
|
111
|
+
ApiBadRequestResponse({ description: "Payload validation failed." }),
|
|
112
|
+
ApiUnprocessableEntityResponse({
|
|
113
|
+
description: "Repository rejected the provided payload.",
|
|
114
|
+
}),
|
|
115
|
+
__param(0, Body()),
|
|
116
|
+
__metadata("design:type", Function),
|
|
117
|
+
__metadata("design:paramtypes", [Object]),
|
|
118
|
+
__metadata("design:returntype", Promise)
|
|
119
|
+
], DynamicModelController.prototype, "create", null);
|
|
120
|
+
__decorate([
|
|
121
|
+
Get(":id"),
|
|
122
|
+
ApiOperation({ summary: `Retrieve a ${modelClazzName} record by id.` }),
|
|
123
|
+
ApiParam({ name: "id", description: "Primary key" }),
|
|
124
|
+
ApiOkResponse({
|
|
125
|
+
description: `${modelClazzName} retrieved successfully.`,
|
|
126
|
+
}),
|
|
127
|
+
ApiNotFoundResponse({
|
|
128
|
+
description: `No ${modelClazzName} record matches the provided identifier.`,
|
|
129
|
+
}),
|
|
130
|
+
__param(0, Param("id")),
|
|
131
|
+
__metadata("design:type", Function),
|
|
132
|
+
__metadata("design:paramtypes", [String]),
|
|
133
|
+
__metadata("design:returntype", Promise)
|
|
134
|
+
], DynamicModelController.prototype, "read", null);
|
|
135
|
+
__decorate([
|
|
136
|
+
Put(":id"),
|
|
137
|
+
ApiOperation({
|
|
138
|
+
summary: `Replace an existing ${modelClazzName} record with a new payload.`,
|
|
139
|
+
}),
|
|
140
|
+
ApiBody({
|
|
141
|
+
description: `Payload for replace a existing record of ${modelClazzName}`,
|
|
142
|
+
schema: { $ref: getSchemaPath(ModelClazz) },
|
|
143
|
+
}),
|
|
144
|
+
ApiOkResponse({
|
|
145
|
+
description: `${ModelClazz} record replaced successfully.`,
|
|
146
|
+
}),
|
|
147
|
+
ApiNotFoundResponse({
|
|
148
|
+
description: `No ${modelClazzName} record matches the provided identifier.`,
|
|
149
|
+
}),
|
|
150
|
+
ApiBadRequestResponse({ description: "Payload validation failed." }),
|
|
151
|
+
__param(0, Body()),
|
|
152
|
+
__metadata("design:type", Function),
|
|
153
|
+
__metadata("design:paramtypes", [Model]),
|
|
154
|
+
__metadata("design:returntype", Promise)
|
|
155
|
+
], DynamicModelController.prototype, "update", null);
|
|
156
|
+
__decorate([
|
|
157
|
+
Delete(":id"),
|
|
158
|
+
ApiOperation({ summary: `Delete a ${modelClazzName} record by id.` }),
|
|
159
|
+
ApiParam({
|
|
160
|
+
name: "id",
|
|
161
|
+
description: `Primary key value of the ${modelClazzName} record to delete.`,
|
|
162
|
+
}),
|
|
163
|
+
ApiOkResponse({
|
|
164
|
+
description: `${modelClazzName} record deleted successfully.`,
|
|
165
|
+
}),
|
|
166
|
+
ApiNotFoundResponse({
|
|
167
|
+
description: `No ${modelClazzName} record matches the provided identifier.`,
|
|
168
|
+
}),
|
|
169
|
+
__param(0, Param("id")),
|
|
170
|
+
__metadata("design:type", Function),
|
|
171
|
+
__metadata("design:paramtypes", [String]),
|
|
172
|
+
__metadata("design:returntype", Promise)
|
|
173
|
+
], DynamicModelController.prototype, "delete", null);
|
|
174
|
+
DynamicModelController = __decorate([
|
|
175
|
+
Controller(routePath),
|
|
176
|
+
ApiTags(modelClazzName),
|
|
177
|
+
ApiExtraModels(ModelClazz),
|
|
178
|
+
__metadata("design:paramtypes", [RepoFactory])
|
|
179
|
+
], DynamicModelController);
|
|
180
|
+
return DynamicModelController;
|
|
181
|
+
}
|
|
182
|
+
static forRoot(flavour) {
|
|
183
|
+
const log = this.log.for(this.forRoot);
|
|
184
|
+
log.info(`Generating controllers for flavour...`);
|
|
185
|
+
const trackedModels = Adapter.models(flavour);
|
|
186
|
+
const controllers = trackedModels.map(this.toModelController.bind(this));
|
|
187
|
+
log.info(`Generated ${controllers.length} controllers`);
|
|
188
|
+
return {
|
|
189
|
+
module: DecafModelModule_1,
|
|
190
|
+
controllers,
|
|
191
|
+
providers: [RepoFactory],
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
DecafModelModule = DecafModelModule_1 = __decorate([
|
|
196
|
+
Module({})
|
|
197
|
+
], DecafModelModule);
|
|
198
|
+
export { DecafModelModule };
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLElBQUksRUFDSixVQUFVLEVBQ1YsTUFBTSxFQUVOLEdBQUcsRUFDSCxNQUFNLEVBQ04sS0FBSyxFQUNMLElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsWUFBWSxFQUNaLFFBQVEsRUFDUixPQUFPLEVBQ1AsOEJBQThCLEVBQzlCLGFBQWEsR0FDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQVEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBb0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFVLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLHlCQUFzQjtBQUdyQyxJQUFNLGdCQUFnQixHQUF0QixNQUFNLGdCQUFnQjs7SUFHakIsTUFBTSxLQUFLLEdBQUc7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFnQixDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFYyxBQUFQLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDOUIsVUFBaUM7UUFFakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7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dkMsR0FBRyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBRWxELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFekUsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLFdBQVcsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDO1FBRXhELE9BQU87WUFDTCxNQUFNLEVBQUUsa0JBQWdCO1lBQ3hCLFdBQVc7WUFDWCxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUM7U0FDekIsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFBO0FBaExZLGdCQUFnQjtJQUQ1QixNQUFNLENBQUMsRUFBRSxDQUFDO0dBQ0UsZ0JBQWdCLENBZ0w1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJvZHksXG4gIENvbnRyb2xsZXIsXG4gIERlbGV0ZSxcbiAgRHluYW1pY01vZHVsZSxcbiAgR2V0LFxuICBNb2R1bGUsXG4gIFBhcmFtLFxuICBQb3N0LFxuICBQdXQsXG59IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQXBpQmFkUmVxdWVzdFJlc3BvbnNlLFxuICBBcGlCb2R5LFxuICBBcGlDcmVhdGVkUmVzcG9uc2UsXG4gIEFwaUV4dHJhTW9kZWxzLFxuICBBcGlOb3RGb3VuZFJlc3BvbnNlLFxuICBBcGlPa1Jlc3BvbnNlLFxuICBBcGlPcGVyYXRpb24sXG4gIEFwaVBhcmFtLFxuICBBcGlUYWdzLFxuICBBcGlVbnByb2Nlc3NhYmxlRW50aXR5UmVzcG9uc2UsXG4gIGdldFNjaGVtYVBhdGgsXG59IGZyb20gXCJAbmVzdGpzL3N3YWdnZXJcIjtcbmltcG9ydCB7IEFkYXB0ZXIsIFJlcG8sIFJlcG9zaXRvcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IE1vZGVsLCBNb2RlbENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgTG9nZ2VkQ2xhc3MsIExvZ2dlciwgTG9nZ2luZywgdG9LZWJhYkNhc2UgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFJlcG9GYWN0b3J5IH0gZnJvbSBcIi4vUmVwb0ZhY3RvcnlcIjtcblxuQE1vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBEZWNhZk1vZGVsTW9kdWxlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogTG9nZ2VyO1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgZ2V0IGxvZygpOiBMb2dnZXIge1xuICAgIGlmICghdGhpcy5fbG9nZ2VyKSB0aGlzLl9sb2dnZXIgPSBMb2dnaW5nLmZvcihEZWNhZk1vZGVsTW9kdWxlKTtcbiAgICByZXR1cm4gdGhpcy5fbG9nZ2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdG9Nb2RlbENvbnRyb2xsZXI8VCBleHRlbmRzIE1vZGVsPGFueT4+KFxuICAgIE1vZGVsQ2xheno6IE1vZGVsQ29uc3RydWN0b3I8YW55PlxuICApIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy50b01vZGVsQ29udHJvbGxlcik7XG4gICAgY29uc3QgdGFibGVOYW1lID0gUmVwb3NpdG9yeS50YWJsZShNb2RlbENsYXp6KTtcbiAgICBjb25zdCByb3V0ZVBhdGggPSB0b0tlYmFiQ2FzZSh0YWJsZU5hbWUpO1xuICAgIGNvbnN0IG1vZGVsQ2xhenpOYW1lID0gTW9kZWxDbGF6ei5uYW1lO1xuXG4gICAgbG9nLmRlYnVnKGBDcmVhdGluZyBjb250cm9sbGVyIGZvciBtb2RlbDogJHttb2RlbENsYXp6TmFtZX1gKTtcblxuICAgIEBDb250cm9sbGVyKHJvdXRlUGF0aClcbiAgICBAQXBpVGFncyhtb2RlbENsYXp6TmFtZSlcbiAgICBAQXBpRXh0cmFNb2RlbHMoTW9kZWxDbGF6eilcbiAgICBjbGFzcyBEeW5hbWljTW9kZWxDb250cm9sbGVyIGV4dGVuZHMgTG9nZ2VkQ2xhc3Mge1xuICAgICAgLy8gcHJpdmF0ZSByZWFkb25seSByZXBvID0gdGhpcy5yZXBvRmFjdG9yeS5mb3IoTW9kZWxDbGF6eik7XG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHBrITogc3RyaW5nO1xuICAgICAgcHJpdmF0ZSByZWFkb25seSByZXBvITogUmVwbzxUPjsgLy9SZXBvc2l0b3J5PE1vZGVsPGFueT4sIGFueSwgYW55LCBhbnksIGFueT47XG5cbiAgICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVwb0ZhY3Rvcnk6IFJlcG9GYWN0b3J5KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGxvZy5pbmZvKFxuICAgICAgICAgIGBSZWdpc3RlcmluZyBkeW5hbWljIGNvbnRyb2xsZXIgZm9yIG1vZGVsOiAke21vZGVsQ2xhenpOYW1lfSByb3V0ZTogLyR7cm91dGVQYXRofWBcbiAgICAgICAgKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucmVwbyA9IHRoaXMucmVwb0ZhY3RvcnkuZm9yKE1vZGVsQ2xhenoubmFtZSk7XG4gICAgICAgICAgdGhpcy5wayA9IHRoaXMucmVwby5wayBhcyBzdHJpbmc7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgZm9yIG1vZGVsIFwiJHtNb2RlbENsYXp6Lm5hbWV9XCIuYCxcbiAgICAgICAgICAgIGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBQb3N0KClcbiAgICAgIEBBcGlPcGVyYXRpb24oeyBzdW1tYXJ5OiBgQ3JlYXRlIGEgbmV3ICR7bW9kZWxDbGF6ek5hbWV9LmAgfSlcbiAgICAgIEBBcGlCb2R5KHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ2xhenopIH0sXG4gICAgICB9KVxuICAgICAgQEFwaUNyZWF0ZWRSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gY3JlYXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgIH0pXG4gICAgICBAQXBpQmFkUmVxdWVzdFJlc3BvbnNlKHsgZGVzY3JpcHRpb246IFwiUGF5bG9hZCB2YWxpZGF0aW9uIGZhaWxlZC5cIiB9KVxuICAgICAgQEFwaVVucHJvY2Vzc2FibGVFbnRpdHlSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlJlcG9zaXRvcnkgcmVqZWN0ZWQgdGhlIHByb3ZpZGVkIHBheWxvYWQuXCIsXG4gICAgICB9KVxuICAgICAgYXN5bmMgY3JlYXRlKEBCb2R5KCkgZGF0YTogVCk6IFByb21pc2U8TW9kZWw8YW55Pj4ge1xuICAgICAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5jcmVhdGUpO1xuICAgICAgICBsb2cudmVyYm9zZShgY3JlYXRpbmcgbmV3ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgIGxldCBjcmVhdGVkOiBNb2RlbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjcmVhdGVkID0gYXdhaXQgdGhpcy5yZXBvLmNyZWF0ZShkYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBuZXcgJHttb2RlbENsYXp6TmFtZX1gLCBlIGFzIEVycm9yKTtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGxvZy5pbmZvKGBjcmVhdGVkIG5ldyAke21vZGVsQ2xhenpOYW1lfSB3aXRoIGlkICR7Y3JlYXRlZFt0aGlzLnBrXX1gKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgICB9XG5cbiAgICAgIEBHZXQoXCI6aWRcIilcbiAgICAgIEBBcGlPcGVyYXRpb24oeyBzdW1tYXJ5OiBgUmV0cmlldmUgYSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgYnkgaWQuYCB9KVxuICAgICAgQEFwaVBhcmFtKHsgbmFtZTogXCJpZFwiLCBkZXNjcmlwdGlvbjogXCJQcmltYXJ5IGtleVwiIH0pXG4gICAgICBAQXBpT2tSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgfSlcbiAgICAgIEBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgfSlcbiAgICAgIGFzeW5jIHJlYWQoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5yZWFkKTtcbiAgICAgICAgbGV0IHJlYWQ6IE1vZGVsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgcmVhZGluZyAke21vZGVsQ2xhenpOYW1lfSB3aXRoICR7dGhpcy5wa30gJHtpZH1gKTtcbiAgICAgICAgICByZWFkID0gYXdhaXQgdGhpcy5yZXBvLnJlYWQoaWQpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byByZWFkICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtpZH1gLFxuICAgICAgICAgICAgZSBhcyBFcnJvclxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZy5pbmZvKGByZWFkICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtyZWFkW3RoaXMucGtdfWApO1xuICAgICAgICByZXR1cm4gcmVhZDtcbiAgICAgIH1cblxuICAgICAgQFB1dChcIjppZFwiKVxuICAgICAgQEFwaU9wZXJhdGlvbih7XG4gICAgICAgIHN1bW1hcnk6IGBSZXBsYWNlIGFuIGV4aXN0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCB3aXRoIGEgbmV3IHBheWxvYWQuYCxcbiAgICAgIH0pXG4gICAgICBAQXBpQm9keSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgUGF5bG9hZCBmb3IgcmVwbGFjZSBhIGV4aXN0aW5nIHJlY29yZCBvZiAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ2xhenopIH0sXG4gICAgICB9KVxuICAgICAgQEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYCR7TW9kZWxDbGF6en0gcmVjb3JkIHJlcGxhY2VkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgfSlcbiAgICAgIEBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgfSlcbiAgICAgIEBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pXG4gICAgICBhc3luYyB1cGRhdGUoQEJvZHkoKSBkYXRhOiBNb2RlbDxhbnk+KSB7XG4gICAgICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnVwZGF0ZSk7XG4gICAgICAgIGxldCB1cGRhdGVkOiBNb2RlbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICAgIGB1cGRhdGluZyAke21vZGVsQ2xhenpOYW1lfSB3aXRoICR7dGhpcy5wa30gJHtkYXRhW3RoaXMucGtdfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIHVwZGF0ZWQgPSBhd2FpdCB0aGlzLnJlcG8uY3JlYXRlKGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgIH1cblxuICAgICAgQERlbGV0ZShcIjppZFwiKVxuICAgICAgQEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBEZWxldGUgYSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgYnkgaWQuYCB9KVxuICAgICAgQEFwaVBhcmFtKHtcbiAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFByaW1hcnkga2V5IHZhbHVlIG9mIHRoZSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgdG8gZGVsZXRlLmAsXG4gICAgICB9KVxuICAgICAgQEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBkZWxldGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgfSlcbiAgICAgIEBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgfSlcbiAgICAgIGFzeW5jIGRlbGV0ZShAUGFyYW0oXCJpZFwiKSBpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmRlbGV0ZSk7XG4gICAgICAgIGxldCByZWFkOiBNb2RlbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgICBgZGVsZXRpbmcgJHttb2RlbENsYXp6TmFtZX0gd2l0aCAke3RoaXMucGsgYXMgc3RyaW5nfSAke2lkfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlYWQgPSBhd2FpdCB0aGlzLnJlcG8ucmVhZChpZCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGRlbGV0ZSAke21vZGVsQ2xhenpOYW1lfSB3aXRoIGlkICR7aWR9YCxcbiAgICAgICAgICAgIGUgYXMgRXJyb3JcbiAgICAgICAgICApO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLmluZm8oYGRlbGV0ZWQgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAke3JlYWRbdGhpcy5wa119YCk7XG4gICAgICAgIHJldHVybiByZWFkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBEeW5hbWljTW9kZWxDb250cm9sbGVyO1xuICB9XG5cbiAgc3RhdGljIGZvclJvb3QoZmxhdm91cjogc3RyaW5nKTogRHluYW1pY01vZHVsZSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuZm9yUm9vdCk7XG4gICAgbG9nLmluZm8oYEdlbmVyYXRpbmcgY29udHJvbGxlcnMgZm9yIGZsYXZvdXIuLi5gKTtcblxuICAgIGNvbnN0IHRyYWNrZWRNb2RlbHMgPSBBZGFwdGVyLm1vZGVscyhmbGF2b3VyKTtcbiAgICBjb25zdCBjb250cm9sbGVycyA9IHRyYWNrZWRNb2RlbHMubWFwKHRoaXMudG9Nb2RlbENvbnRyb2xsZXIuYmluZCh0aGlzKSk7XG5cbiAgICBsb2cuaW5mbyhgR2VuZXJhdGVkICR7Y29udHJvbGxlcnMubGVuZ3RofSBjb250cm9sbGVyc2ApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZHVsZTogRGVjYWZNb2RlbE1vZHVsZSxcbiAgICAgIGNvbnRyb2xsZXJzLFxuICAgICAgcHJvdmlkZXJzOiBbUmVwb0ZhY3RvcnldLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
package/lib/esm/module.d.ts
CHANGED
package/lib/esm/module.js
CHANGED
|
@@ -7,14 +7,22 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var DecafModule_1;
|
|
8
8
|
import { Module } from "@nestjs/common";
|
|
9
9
|
import { DecafCoreModule } from "./core-module.js";
|
|
10
|
+
import { DecafModelModule } from "./model-module.js";
|
|
10
11
|
/**
|
|
11
12
|
* @publicApi
|
|
12
13
|
*/
|
|
13
14
|
let DecafModule = DecafModule_1 = class DecafModule {
|
|
14
|
-
static
|
|
15
|
+
static async forRootAsync(options) {
|
|
16
|
+
const { autoControllers } = options;
|
|
17
|
+
const adapter = await DecafCoreModule.createAdapter(options);
|
|
18
|
+
const flavour = adapter.flavour;
|
|
19
|
+
const imports = [DecafCoreModule.forRoot(options)];
|
|
20
|
+
if (autoControllers) {
|
|
21
|
+
imports.push(DecafModelModule.forRoot(flavour));
|
|
22
|
+
}
|
|
15
23
|
return {
|
|
16
24
|
module: DecafModule_1,
|
|
17
|
-
imports:
|
|
25
|
+
imports: imports,
|
|
18
26
|
};
|
|
19
27
|
}
|
|
20
28
|
};
|
|
@@ -22,4 +30,4 @@ DecafModule = DecafModule_1 = __decorate([
|
|
|
22
30
|
Module({})
|
|
23
31
|
], DecafModule);
|
|
24
32
|
export { DecafModule };
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsT0FBTyxFQUFtQyxNQUFNLEVBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUFzQjtBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQXVCO0FBRWxEOztHQUVHO0FBRUksSUFBTSxXQUFXLG1CQUFqQixNQUFNLFdBQVc7SUFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQ3ZCLE9BQTJCO1FBRTNCLE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFFaEMsTUFBTSxPQUFPLEdBT0csQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFbkQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLGFBQVc7WUFDbkIsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFBO0FBM0JZLFdBQVc7SUFEdkIsTUFBTSxDQUFDLEVBQUUsQ0FBQztHQUNFLFdBQVcsQ0EyQnZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHluYW1pY01vZHVsZSwgRm9yd2FyZFJlZmVyZW5jZSwgTW9kdWxlLCBUeXBlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBEZWNhZk1vZHVsZU9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgRGVjYWZDb3JlTW9kdWxlIH0gZnJvbSBcIi4vY29yZS1tb2R1bGVcIjtcbmltcG9ydCB7IERlY2FmTW9kZWxNb2R1bGUgfSBmcm9tIFwiLi9tb2RlbC1tb2R1bGVcIjtcblxuLyoqXG4gKiBAcHVibGljQXBpXG4gKi9cbkBNb2R1bGUoe30pXG5leHBvcnQgY2xhc3MgRGVjYWZNb2R1bGUge1xuICBzdGF0aWMgYXN5bmMgZm9yUm9vdEFzeW5jKFxuICAgIG9wdGlvbnM6IERlY2FmTW9kdWxlT3B0aW9uc1xuICApOiBQcm9taXNlPER5bmFtaWNNb2R1bGU+IHtcbiAgICBjb25zdCB7IGF1dG9Db250cm9sbGVycyB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBEZWNhZkNvcmVNb2R1bGUuY3JlYXRlQWRhcHRlcihvcHRpb25zKTtcbiAgICBjb25zdCBmbGF2b3VyID0gYWRhcHRlci5mbGF2b3VyO1xuXG4gICAgY29uc3QgaW1wb3J0czpcbiAgICAgIHwgKFxuICAgICAgICAgIHwgRHluYW1pY01vZHVsZVxuICAgICAgICAgIHwgVHlwZTxhbnk+XG4gICAgICAgICAgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+XG4gICAgICAgICAgfCBGb3J3YXJkUmVmZXJlbmNlPGFueT5cbiAgICAgICAgKVtdXG4gICAgICB8IHVuZGVmaW5lZCA9IFtEZWNhZkNvcmVNb2R1bGUuZm9yUm9vdChvcHRpb25zKV07XG5cbiAgICBpZiAoYXV0b0NvbnRyb2xsZXJzKSB7XG4gICAgICBpbXBvcnRzLnB1c2goRGVjYWZNb2RlbE1vZHVsZS5mb3JSb290KGZsYXZvdXIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9kdWxlOiBEZWNhZk1vZHVsZSxcbiAgICAgIGltcG9ydHM6IGltcG9ydHMsXG4gICAgfTtcbiAgfVxufVxuIl19
|
package/lib/esm/types.d.ts
CHANGED
package/lib/esm/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgdHlwZSBEZWNhZk1vZHVsZU9wdGlvbnM8XG4gIENPTkYgPSBhbnksXG4gIEEgZXh0ZW5kcyBBZGFwdGVyPENPTkYsIGFueSwgYW55LCBhbnksIGFueT4gPSBBZGFwdGVyPENPTkYsIGFueSwgYW55Pixcbj4gPSB7XG4gIGFkYXB0ZXI6IENvbnN0cnVjdG9yPEE+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgdHlwZSBEZWNhZk1vZHVsZU9wdGlvbnM8XG4gIENPTkYgPSBhbnksXG4gIEEgZXh0ZW5kcyBBZGFwdGVyPENPTkYsIGFueSwgYW55LCBhbnksIGFueT4gPSBBZGFwdGVyPENPTkYsIGFueSwgYW55Pixcbj4gPSB7XG4gIGFkYXB0ZXI6IENvbnN0cnVjdG9yPEE+O1xuICBjb25mOiBDT05GO1xuICBhbGlhcz86IHN0cmluZztcbiAgYXV0b0NvbnRyb2xsZXJzOiBib29sZWFuO1xufTtcbiJdfQ==
|
package/lib/esm/utils.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { InternalError } from "@decaf-ts/db-decorators";
|
|
3
|
+
import { Repository } from "@decaf-ts/core";
|
|
4
|
+
export function repoForModel(model) {
|
|
5
|
+
const m = Model.get(model);
|
|
6
|
+
if (!m)
|
|
7
|
+
throw new InternalError(`Failed to find repository for ${model}`);
|
|
8
|
+
const repo = Repository.forModel(m);
|
|
9
|
+
return repo;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhO0lBQ3pDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLENBQUM7UUFDTCxNQUFNLElBQUksYUFBYSxDQUFDLGlDQUFpQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsT0FBTyxJQUFJLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNb2RlbH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtJbnRlcm5hbEVycm9yfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7UmVwb3NpdG9yeX0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBvRm9yTW9kZWwobW9kZWw6IHN0cmluZykge1xuXHRjb25zdCBtID0gTW9kZWwuZ2V0KG1vZGVsKTtcblx0aWYgKCFtKVxuXHRcdHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBGYWlsZWQgdG8gZmluZCByZXBvc2l0b3J5IGZvciAke21vZGVsfWApXG5cdGNvbnN0IHJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKG0pO1xuXHRyZXR1cm4gcmVwbztcbn0iXX0=
|
package/lib/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* @module
|
|
3
|
+
* @module for-nest
|
|
4
4
|
* @description This module serves as the main entry point for the ts-workspace library. It aggregates and exports
|
|
5
5
|
* functionality from various submodules and utilities within the project.
|
|
6
6
|
*
|
|
@@ -37,16 +37,21 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
exports.PACKAGE_NAME = exports.VERSION = void 0;
|
|
39
39
|
const decoration_1 = require("@decaf-ts/decoration");
|
|
40
|
+
require("./decoration.cjs");
|
|
41
|
+
__exportStar(require("./decorators/index.cjs"), exports);
|
|
40
42
|
__exportStar(require("./constants.cjs"), exports);
|
|
43
|
+
__exportStar(require("./decoration.cjs"), exports);
|
|
41
44
|
__exportStar(require("./module.cjs"), exports);
|
|
45
|
+
__exportStar(require("./RepoFactory.cjs"), exports);
|
|
42
46
|
__exportStar(require("./types.cjs"), exports);
|
|
47
|
+
__exportStar(require("./utils.cjs"), exports);
|
|
43
48
|
/**
|
|
44
49
|
* Represents the current version of the ts-workspace module.
|
|
45
50
|
* The actual version number is replaced during the build process.
|
|
46
51
|
* @constant
|
|
47
52
|
* @type {string}
|
|
48
53
|
*/
|
|
49
|
-
exports.VERSION = "0.0.
|
|
54
|
+
exports.VERSION = "0.0.4";
|
|
50
55
|
exports.PACKAGE_NAME = "##PACKAGE_NAME##";
|
|
51
56
|
decoration_1.Metadata.registerLibrary(exports.PACKAGE_NAME, exports.VERSION);
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxxREFBZ0Q7QUFDaEQsNEJBQXNCO0FBRXRCLHlEQUE2QjtBQUM3QixrREFBNEI7QUFDNUIsbURBQTZCO0FBQzdCLCtDQUF5QjtBQUN6QixvREFBOEI7QUFDOUIsOENBQXdCO0FBQ3hCLDhDQUF3QjtBQUV4Qjs7Ozs7R0FLRztBQUNVLFFBQUEsT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUN4QixRQUFBLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztBQUUvQyxxQkFBUSxDQUFDLGVBQWUsQ0FBQyxvQkFBWSxFQUFFLGVBQU8sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGZvci1uZXN0XG4gKiBAZGVzY3JpcHRpb24gVGhpcyBtb2R1bGUgc2VydmVzIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdHMtd29ya3NwYWNlIGxpYnJhcnkuIEl0IGFnZ3JlZ2F0ZXMgYW5kIGV4cG9ydHNcbiAqIGZ1bmN0aW9uYWxpdHkgZnJvbSB2YXJpb3VzIHN1Ym1vZHVsZXMgYW5kIHV0aWxpdGllcyB3aXRoaW4gdGhlIHByb2plY3QuXG4gKlxuICogVGhlIG1vZHVsZSBpbmNsdWRlczpcbiAqIDEuIFV0aWxpdHkgZnVuY3Rpb25zIGFuZCB0eXBlcyBmcm9tIHRoZSBcIi4vdXRpbHNcIiBkaXJlY3Rvcnk6XG4gKiAgICAtIFRoZXNlIGxpa2VseSBjb250YWluIGhlbHBlciBmdW5jdGlvbnMsIGNvbW1vbiB0eXBlcywgYW5kIHNoYXJlZCBmdW5jdGlvbmFsaXR5IHVzZWQgdGhyb3VnaG91dCB0aGUgcHJvamVjdC5cbiAqICAgIC0gTWF5IGluY2x1ZGUgb3BlcmF0aW9ucyBmb3IgZGF0YSBtYW5pcHVsYXRpb24sIHR5cGUgY2hlY2tpbmcsIG9yIG90aGVyIGdlbmVyYWwtcHVycG9zZSB1dGlsaXRpZXMuXG4gKlxuICogMi4gQSBuYW1lc3BhY2UgYW5kIHJlbGF0ZWQgdHlwZXMgZnJvbSB0aGUgXCIuL25hbWVzcGFjZVwiIGRpcmVjdG9yeTpcbiAqICAgIC0gVGhpcyBjb3VsZCBjb250YWluIGRvbWFpbi1zcGVjaWZpYyBjb2RlIG9yIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuXG4gKiAgICAtIE1pZ2h0IGluY2x1ZGUgaW50ZXJmYWNlcywgdHlwZXMsIG9yIGNsYXNzZXMgdGhhdCByZXByZXNlbnQgY29yZSBjb25jZXB0cyBpbiB0aGUgbGlicmFyeS5cbiAqXG4gKiAzLiBBIFZFUlNJT04gY29uc3RhbnQ6XG4gKiAgICAtIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgbW9kdWxlLlxuICogICAgLSBVc2VmdWwgZm9yIHZlcnNpb24gY2hlY2tpbmcgYW5kIGNvbXBhdGliaWxpdHkgcHVycG9zZXMuXG4gKlxuICogVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgYSBjbGVhbiBhbmQgb3JnYW5pemVkIGV4cG9ydCBvZiB0aGUgbW9kdWxlJ3MgZnVuY3Rpb25hbGl0eSwgYWxsb3dpbmcgY29uc3VtZXJzXG4gKiB0byBlYXNpbHkgaW1wb3J0IGFuZCB1c2Ugc3BlY2lmaWMgcGFydHMgb2YgdGhlIGxpYnJhcnkgYXMgbmVlZGVkLlxuICovXG5cbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgXCIuL2RlY29yYXRpb25cIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2R1bGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1JlcG9GYWN0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHRzLXdvcmtzcGFjZSBtb2R1bGUuXG4gKiBUaGUgYWN0dWFsIHZlcnNpb24gbnVtYmVyIGlzIHJlcGxhY2VkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy5cbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9OQU1FID0gXCIjI1BBQ0tBR0VfTkFNRSMjXCI7XG5cbk1ldGFkYXRhLnJlZ2lzdGVyTGlicmFyeShQQUNLQUdFX05BTUUsIFZFUlNJT04pO1xuIl19
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module
|
|
2
|
+
* @module for-nest
|
|
3
3
|
* @description This module serves as the main entry point for the ts-workspace library. It aggregates and exports
|
|
4
4
|
* functionality from various submodules and utilities within the project.
|
|
5
5
|
*
|
|
@@ -19,14 +19,19 @@
|
|
|
19
19
|
* This structure provides a clean and organized export of the module's functionality, allowing consumers
|
|
20
20
|
* to easily import and use specific parts of the library as needed.
|
|
21
21
|
*/
|
|
22
|
+
import "./decoration";
|
|
23
|
+
export * from "./decorators";
|
|
22
24
|
export * from "./constants";
|
|
25
|
+
export * from "./decoration";
|
|
23
26
|
export * from "./module";
|
|
27
|
+
export * from "./RepoFactory";
|
|
24
28
|
export * from "./types";
|
|
29
|
+
export * from "./utils";
|
|
25
30
|
/**
|
|
26
31
|
* Represents the current version of the ts-workspace module.
|
|
27
32
|
* The actual version number is replaced during the build process.
|
|
28
33
|
* @constant
|
|
29
34
|
* @type {string}
|
|
30
35
|
*/
|
|
31
|
-
export declare const VERSION = "0.0.
|
|
36
|
+
export declare const VERSION = "0.0.4";
|
|
32
37
|
export declare const PACKAGE_NAME = "##PACKAGE_NAME##";
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var DecafModelModule_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.DecafModelModule = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
19
|
+
const core_1 = require("@decaf-ts/core");
|
|
20
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
21
|
+
const logging_1 = require("@decaf-ts/logging");
|
|
22
|
+
const RepoFactory_1 = require("./RepoFactory.cjs");
|
|
23
|
+
let DecafModelModule = class DecafModelModule {
|
|
24
|
+
static { DecafModelModule_1 = this; }
|
|
25
|
+
static get log() {
|
|
26
|
+
if (!this._logger)
|
|
27
|
+
this._logger = logging_1.Logging.for(DecafModelModule_1);
|
|
28
|
+
return this._logger;
|
|
29
|
+
}
|
|
30
|
+
static toModelController(ModelClazz) {
|
|
31
|
+
const log = this.log.for(this.toModelController);
|
|
32
|
+
const tableName = core_1.Repository.table(ModelClazz);
|
|
33
|
+
const routePath = (0, logging_1.toKebabCase)(tableName);
|
|
34
|
+
const modelClazzName = ModelClazz.name;
|
|
35
|
+
log.debug(`Creating controller for model: ${modelClazzName}`);
|
|
36
|
+
let DynamicModelController = class DynamicModelController extends logging_1.LoggedClass {
|
|
37
|
+
constructor(repoFactory) {
|
|
38
|
+
super();
|
|
39
|
+
this.repoFactory = repoFactory;
|
|
40
|
+
log.info(`Registering dynamic controller for model: ${modelClazzName} route: /${routePath}`);
|
|
41
|
+
try {
|
|
42
|
+
this.repo = this.repoFactory.for(ModelClazz.name);
|
|
43
|
+
this.pk = this.repo.pk;
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
this.log.error(`Failed to initialize repository for model "${ModelClazz.name}".`, e);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async create(data) {
|
|
50
|
+
const log = this.log.for(this.create);
|
|
51
|
+
log.verbose(`creating new ${modelClazzName}`);
|
|
52
|
+
let created;
|
|
53
|
+
try {
|
|
54
|
+
created = await this.repo.create(data);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
log.error(`Failed to create new ${modelClazzName}`, e);
|
|
58
|
+
throw e;
|
|
59
|
+
}
|
|
60
|
+
log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
|
|
61
|
+
return created;
|
|
62
|
+
}
|
|
63
|
+
async read(id) {
|
|
64
|
+
const log = this.log.for(this.read);
|
|
65
|
+
let read;
|
|
66
|
+
try {
|
|
67
|
+
log.debug(`reading ${modelClazzName} with ${this.pk} ${id}`);
|
|
68
|
+
read = await this.repo.read(id);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
log.error(`Failed to read ${modelClazzName} with id ${id}`, e);
|
|
72
|
+
throw e;
|
|
73
|
+
}
|
|
74
|
+
log.info(`read ${modelClazzName} with id ${read[this.pk]}`);
|
|
75
|
+
return read;
|
|
76
|
+
}
|
|
77
|
+
async update(data) {
|
|
78
|
+
const log = this.log.for(this.update);
|
|
79
|
+
let updated;
|
|
80
|
+
try {
|
|
81
|
+
log.info(`updating ${modelClazzName} with ${this.pk} ${data[this.pk]}`);
|
|
82
|
+
updated = await this.repo.create(data);
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
throw e;
|
|
86
|
+
}
|
|
87
|
+
return updated;
|
|
88
|
+
}
|
|
89
|
+
async delete(id) {
|
|
90
|
+
const log = this.log.for(this.delete);
|
|
91
|
+
let read;
|
|
92
|
+
try {
|
|
93
|
+
log.debug(`deleting ${modelClazzName} with ${this.pk} ${id}`);
|
|
94
|
+
read = await this.repo.read(id);
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
log.error(`Failed to delete ${modelClazzName} with id ${id}`, e);
|
|
98
|
+
throw e;
|
|
99
|
+
}
|
|
100
|
+
log.info(`deleted ${modelClazzName} with id ${read[this.pk]}`);
|
|
101
|
+
return read;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
__decorate([
|
|
105
|
+
(0, common_1.Post)(),
|
|
106
|
+
(0, swagger_1.ApiOperation)({ summary: `Create a new ${modelClazzName}.` }),
|
|
107
|
+
(0, swagger_1.ApiBody)({
|
|
108
|
+
description: `Payload for ${modelClazzName}`,
|
|
109
|
+
schema: { $ref: (0, swagger_1.getSchemaPath)(ModelClazz) },
|
|
110
|
+
}),
|
|
111
|
+
(0, swagger_1.ApiCreatedResponse)({
|
|
112
|
+
description: `${modelClazzName} created successfully.`,
|
|
113
|
+
}),
|
|
114
|
+
(0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
|
|
115
|
+
(0, swagger_1.ApiUnprocessableEntityResponse)({
|
|
116
|
+
description: "Repository rejected the provided payload.",
|
|
117
|
+
}),
|
|
118
|
+
__param(0, (0, common_1.Body)()),
|
|
119
|
+
__metadata("design:type", Function),
|
|
120
|
+
__metadata("design:paramtypes", [Object]),
|
|
121
|
+
__metadata("design:returntype", Promise)
|
|
122
|
+
], DynamicModelController.prototype, "create", null);
|
|
123
|
+
__decorate([
|
|
124
|
+
(0, common_1.Get)(":id"),
|
|
125
|
+
(0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
|
|
126
|
+
(0, swagger_1.ApiParam)({ name: "id", description: "Primary key" }),
|
|
127
|
+
(0, swagger_1.ApiOkResponse)({
|
|
128
|
+
description: `${modelClazzName} retrieved successfully.`,
|
|
129
|
+
}),
|
|
130
|
+
(0, swagger_1.ApiNotFoundResponse)({
|
|
131
|
+
description: `No ${modelClazzName} record matches the provided identifier.`,
|
|
132
|
+
}),
|
|
133
|
+
__param(0, (0, common_1.Param)("id")),
|
|
134
|
+
__metadata("design:type", Function),
|
|
135
|
+
__metadata("design:paramtypes", [String]),
|
|
136
|
+
__metadata("design:returntype", Promise)
|
|
137
|
+
], DynamicModelController.prototype, "read", null);
|
|
138
|
+
__decorate([
|
|
139
|
+
(0, common_1.Put)(":id"),
|
|
140
|
+
(0, swagger_1.ApiOperation)({
|
|
141
|
+
summary: `Replace an existing ${modelClazzName} record with a new payload.`,
|
|
142
|
+
}),
|
|
143
|
+
(0, swagger_1.ApiBody)({
|
|
144
|
+
description: `Payload for replace a existing record of ${modelClazzName}`,
|
|
145
|
+
schema: { $ref: (0, swagger_1.getSchemaPath)(ModelClazz) },
|
|
146
|
+
}),
|
|
147
|
+
(0, swagger_1.ApiOkResponse)({
|
|
148
|
+
description: `${ModelClazz} record replaced successfully.`,
|
|
149
|
+
}),
|
|
150
|
+
(0, swagger_1.ApiNotFoundResponse)({
|
|
151
|
+
description: `No ${modelClazzName} record matches the provided identifier.`,
|
|
152
|
+
}),
|
|
153
|
+
(0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
|
|
154
|
+
__param(0, (0, common_1.Body)()),
|
|
155
|
+
__metadata("design:type", Function),
|
|
156
|
+
__metadata("design:paramtypes", [decorator_validation_1.Model]),
|
|
157
|
+
__metadata("design:returntype", Promise)
|
|
158
|
+
], DynamicModelController.prototype, "update", null);
|
|
159
|
+
__decorate([
|
|
160
|
+
(0, common_1.Delete)(":id"),
|
|
161
|
+
(0, swagger_1.ApiOperation)({ summary: `Delete a ${modelClazzName} record by id.` }),
|
|
162
|
+
(0, swagger_1.ApiParam)({
|
|
163
|
+
name: "id",
|
|
164
|
+
description: `Primary key value of the ${modelClazzName} record to delete.`,
|
|
165
|
+
}),
|
|
166
|
+
(0, swagger_1.ApiOkResponse)({
|
|
167
|
+
description: `${modelClazzName} record deleted successfully.`,
|
|
168
|
+
}),
|
|
169
|
+
(0, swagger_1.ApiNotFoundResponse)({
|
|
170
|
+
description: `No ${modelClazzName} record matches the provided identifier.`,
|
|
171
|
+
}),
|
|
172
|
+
__param(0, (0, common_1.Param)("id")),
|
|
173
|
+
__metadata("design:type", Function),
|
|
174
|
+
__metadata("design:paramtypes", [String]),
|
|
175
|
+
__metadata("design:returntype", Promise)
|
|
176
|
+
], DynamicModelController.prototype, "delete", null);
|
|
177
|
+
DynamicModelController = __decorate([
|
|
178
|
+
(0, common_1.Controller)(routePath),
|
|
179
|
+
(0, swagger_1.ApiTags)(modelClazzName),
|
|
180
|
+
(0, swagger_1.ApiExtraModels)(ModelClazz),
|
|
181
|
+
__metadata("design:paramtypes", [RepoFactory_1.RepoFactory])
|
|
182
|
+
], DynamicModelController);
|
|
183
|
+
return DynamicModelController;
|
|
184
|
+
}
|
|
185
|
+
static forRoot(flavour) {
|
|
186
|
+
const log = this.log.for(this.forRoot);
|
|
187
|
+
log.info(`Generating controllers for flavour...`);
|
|
188
|
+
const trackedModels = core_1.Adapter.models(flavour);
|
|
189
|
+
const controllers = trackedModels.map(this.toModelController.bind(this));
|
|
190
|
+
log.info(`Generated ${controllers.length} controllers`);
|
|
191
|
+
return {
|
|
192
|
+
module: DecafModelModule_1,
|
|
193
|
+
controllers,
|
|
194
|
+
providers: [RepoFactory_1.RepoFactory],
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
exports.DecafModelModule = DecafModelModule;
|
|
199
|
+
exports.DecafModelModule = DecafModelModule = DecafModelModule_1 = __decorate([
|
|
200
|
+
(0, common_1.Module)({})
|
|
201
|
+
], DecafModelModule);
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21vZGVsLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBVXdCO0FBQ3hCLDZDQVl5QjtBQUN6Qix5Q0FBMkQ7QUFDM0QseUVBQXlFO0FBQ3pFLCtDQUE4RTtBQUM5RSxtREFBNEM7QUFHckMsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBZ0I7O0lBR2pCLE1BQU0sS0FBSyxHQUFHO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWdCLENBQUMsQ0FBQztRQUNoRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVjLEFBQVAsTUFBTSxDQUFDLGlCQUFpQixDQUM5QixVQUFpQztRQUVqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxpQkFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFBLHFCQUFXLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUV2QyxHQUFHLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRTlELElBR00sc0JBQXNCLEdBSDVCLE1BR00sc0JBQXVCLFNBQVEscUJBQVc7WUFLOUMsWUFBNkIsV0FBd0I7Z0JBQ25ELEtBQUssRUFBRSxDQUFDO2dCQURtQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtnQkFFbkQsR0FBRyxDQUFDLElBQUksQ0FDTiw2Q0FBNkMsY0FBYyxZQUFZLFNBQVMsRUFBRSxDQUNuRixDQUFD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QUFDLElBQUksQ0FBQyxhQUFhLFdBQVcsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDO1FBRXhELE9BQU87WUFDTCxNQUFNLEVBQUUsa0JBQWdCO1lBQ3hCLFdBQVc7WUFDWCxTQUFTLEVBQUUsQ0FBQyx5QkFBVyxDQUFDO1NBQ3pCLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQTtBQWhMWSw0Q0FBZ0I7MkJBQWhCLGdCQUFnQjtJQUQ1QixJQUFBLGVBQU0sRUFBQyxFQUFFLENBQUM7R0FDRSxnQkFBZ0IsQ0FnTDVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQm9keSxcbiAgQ29udHJvbGxlcixcbiAgRGVsZXRlLFxuICBEeW5hbWljTW9kdWxlLFxuICBHZXQsXG4gIE1vZHVsZSxcbiAgUGFyYW0sXG4gIFBvc3QsXG4gIFB1dCxcbn0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQge1xuICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UsXG4gIEFwaUJvZHksXG4gIEFwaUNyZWF0ZWRSZXNwb25zZSxcbiAgQXBpRXh0cmFNb2RlbHMsXG4gIEFwaU5vdEZvdW5kUmVzcG9uc2UsXG4gIEFwaU9rUmVzcG9uc2UsXG4gIEFwaU9wZXJhdGlvbixcbiAgQXBpUGFyYW0sXG4gIEFwaVRhZ3MsXG4gIEFwaVVucHJvY2Vzc2FibGVFbnRpdHlSZXNwb25zZSxcbiAgZ2V0U2NoZW1hUGF0aCxcbn0gZnJvbSBcIkBuZXN0anMvc3dhZ2dlclwiO1xuaW1wb3J0IHsgQWRhcHRlciwgUmVwbywgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgTW9kZWwsIE1vZGVsQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBMb2dnZWRDbGFzcywgTG9nZ2VyLCBMb2dnaW5nLCB0b0tlYmFiQ2FzZSB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgUmVwb0ZhY3RvcnkgfSBmcm9tIFwiLi9SZXBvRmFjdG9yeVwiO1xuXG5ATW9kdWxlKHt9KVxuZXhwb3J0IGNsYXNzIERlY2FmTW9kZWxNb2R1bGUge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBMb2dnZXI7XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBnZXQgbG9nKCk6IExvZ2dlciB7XG4gICAgaWYgKCF0aGlzLl9sb2dnZXIpIHRoaXMuX2xvZ2dlciA9IExvZ2dpbmcuZm9yKERlY2FmTW9kZWxNb2R1bGUpO1xuICAgIHJldHVybiB0aGlzLl9sb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0b01vZGVsQ29udHJvbGxlcjxUIGV4dGVuZHMgTW9kZWw8YW55Pj4oXG4gICAgTW9kZWxDbGF6ejogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+XG4gICkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnRvTW9kZWxDb250cm9sbGVyKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBSZXBvc2l0b3J5LnRhYmxlKE1vZGVsQ2xhenopO1xuICAgIGNvbnN0IHJvdXRlUGF0aCA9IHRvS2ViYWJDYXNlKHRhYmxlTmFtZSk7XG4gICAgY29uc3QgbW9kZWxDbGF6ek5hbWUgPSBNb2RlbENsYXp6Lm5hbWU7XG5cbiAgICBsb2cuZGVidWcoYENyZWF0aW5nIGNvbnRyb2xsZXIgZm9yIG1vZGVsOiAke21vZGVsQ2xhenpOYW1lfWApO1xuXG4gICAgQENvbnRyb2xsZXIocm91dGVQYXRoKVxuICAgIEBBcGlUYWdzKG1vZGVsQ2xhenpOYW1lKVxuICAgIEBBcGlFeHRyYU1vZGVscyhNb2RlbENsYXp6KVxuICAgIGNsYXNzIER5bmFtaWNNb2RlbENvbnRyb2xsZXIgZXh0ZW5kcyBMb2dnZWRDbGFzcyB7XG4gICAgICAvLyBwcml2YXRlIHJlYWRvbmx5IHJlcG8gPSB0aGlzLnJlcG9GYWN0b3J5LmZvcihNb2RlbENsYXp6KTtcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGshOiBzdHJpbmc7XG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHJlcG8hOiBSZXBvPFQ+OyAvL1JlcG9zaXRvcnk8TW9kZWw8YW55PiwgYW55LCBhbnksIGFueSwgYW55PjtcblxuICAgICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByZXBvRmFjdG9yeTogUmVwb0ZhY3RvcnkpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgYFJlZ2lzdGVyaW5nIGR5bmFtaWMgY29udHJvbGxlciBmb3IgbW9kZWw6ICR7bW9kZWxDbGF6ek5hbWV9IHJvdXRlOiAvJHtyb3V0ZVBhdGh9YFxuICAgICAgICApO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5yZXBvID0gdGhpcy5yZXBvRmFjdG9yeS5mb3IoTW9kZWxDbGF6ei5uYW1lKTtcbiAgICAgICAgICB0aGlzLnBrID0gdGhpcy5yZXBvLnBrIGFzIHN0cmluZztcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBmb3IgbW9kZWwgXCIke01vZGVsQ2xhenoubmFtZX1cIi5gLFxuICAgICAgICAgICAgZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQFBvc3QoKVxuICAgICAgQEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBDcmVhdGUgYSBuZXcgJHttb2RlbENsYXp6TmFtZX0uYCB9KVxuICAgICAgQEFwaUJvZHkoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYFBheWxvYWQgZm9yICR7bW9kZWxDbGF6ek5hbWV9YCxcbiAgICAgICAgc2NoZW1hOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDbGF6eikgfSxcbiAgICAgIH0pXG4gICAgICBAQXBpQ3JlYXRlZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgfSlcbiAgICAgIEBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pXG4gICAgICBAQXBpVW5wcm9jZXNzYWJsZUVudGl0eVJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwiUmVwb3NpdG9yeSByZWplY3RlZCB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cIixcbiAgICAgIH0pXG4gICAgICBhc3luYyBjcmVhdGUoQEJvZHkoKSBkYXRhOiBUKTogUHJvbWlzZTxNb2RlbDxhbnk+PiB7XG4gICAgICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmNyZWF0ZSk7XG4gICAgICAgIGxvZy52ZXJib3NlKGBjcmVhdGluZyBuZXcgJHttb2RlbENsYXp6TmFtZX1gKTtcbiAgICAgICAgbGV0IGNyZWF0ZWQ6IE1vZGVsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNyZWF0ZWQgPSBhd2FpdCB0aGlzLnJlcG8uY3JlYXRlKGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIG5ldyAke21vZGVsQ2xhenpOYW1lfWAsIGUgYXMgRXJyb3IpO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLmluZm8oYGNyZWF0ZWQgbmV3ICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtjcmVhdGVkW3RoaXMucGtdfWApO1xuICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgIH1cblxuICAgICAgQEdldChcIjppZFwiKVxuICAgICAgQEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSBhICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBieSBpZC5gIH0pXG4gICAgICBAQXBpUGFyYW0oeyBuYW1lOiBcImlkXCIsIGRlc2NyaXB0aW9uOiBcIlByaW1hcnkga2V5XCIgfSlcbiAgICAgIEBBcGlPa1Jlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICB9KVxuICAgICAgQEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICB9KVxuICAgICAgYXN5bmMgcmVhZChAUGFyYW0oXCJpZFwiKSBpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnJlYWQpO1xuICAgICAgICBsZXQgcmVhZDogTW9kZWw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGByZWFkaW5nICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHt0aGlzLnBrfSAke2lkfWApO1xuICAgICAgICAgIHJlYWQgPSBhd2FpdCB0aGlzLnJlcG8ucmVhZChpZCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHJlYWQgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAke2lkfWAsXG4gICAgICAgICAgICBlIGFzIEVycm9yXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nLmluZm8oYHJlYWQgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAke3JlYWRbdGhpcy5wa119YCk7XG4gICAgICAgIHJldHVybiByZWFkO1xuICAgICAgfVxuXG4gICAgICBAUHV0KFwiOmlkXCIpXG4gICAgICBAQXBpT3BlcmF0aW9uKHtcbiAgICAgICAgc3VtbWFyeTogYFJlcGxhY2UgYW4gZXhpc3RpbmcgJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIHdpdGggYSBuZXcgcGF5bG9hZC5gLFxuICAgICAgfSlcbiAgICAgIEBBcGlCb2R5KHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciByZXBsYWNlIGEgZXhpc3RpbmcgcmVjb3JkIG9mICR7bW9kZWxDbGF6ek5hbWV9YCxcbiAgICAgICAgc2NoZW1hOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDbGF6eikgfSxcbiAgICAgIH0pXG4gICAgICBAQXBpT2tSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtNb2RlbENsYXp6fSByZWNvcmQgcmVwbGFjZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICB9KVxuICAgICAgQEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICB9KVxuICAgICAgQEFwaUJhZFJlcXVlc3RSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBcIlBheWxvYWQgdmFsaWRhdGlvbiBmYWlsZWQuXCIgfSlcbiAgICAgIGFzeW5jIHVwZGF0ZShAQm9keSgpIGRhdGE6IE1vZGVsPGFueT4pIHtcbiAgICAgICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMudXBkYXRlKTtcbiAgICAgICAgbGV0IHVwZGF0ZWQ6IE1vZGVsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvZy5pbmZvKFxuICAgICAgICAgICAgYHVwZGF0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHt0aGlzLnBrfSAke2RhdGFbdGhpcy5wa119YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdXBkYXRlZCA9IGF3YWl0IHRoaXMucmVwby5jcmVhdGUoZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgfVxuXG4gICAgICBARGVsZXRlKFwiOmlkXCIpXG4gICAgICBAQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYERlbGV0ZSBhICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBieSBpZC5gIH0pXG4gICAgICBAQXBpUGFyYW0oe1xuICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgUHJpbWFyeSBrZXkgdmFsdWUgb2YgdGhlICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCB0byBkZWxldGUuYCxcbiAgICAgIH0pXG4gICAgICBAQXBpT2tSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICB9KVxuICAgICAgQEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICB9KVxuICAgICAgYXN5bmMgZGVsZXRlKEBQYXJhbShcImlkXCIpIGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuZGVsZXRlKTtcbiAgICAgICAgbGV0IHJlYWQ6IE1vZGVsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICAgIGBkZWxldGluZyAke21vZGVsQ2xhenpOYW1lfSB3aXRoICR7dGhpcy5wayBhcyBzdHJpbmd9ICR7aWR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVhZCA9IGF3YWl0IHRoaXMucmVwby5yZWFkKGlkKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIGxvZy5lcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gZGVsZXRlICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtpZH1gLFxuICAgICAgICAgICAgZSBhcyBFcnJvclxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBsb2cuaW5mbyhgZGVsZXRlZCAke21vZGVsQ2xhenpOYW1lfSB3aXRoIGlkICR7cmVhZFt0aGlzLnBrXX1gKTtcbiAgICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIER5bmFtaWNNb2RlbENvbnRyb2xsZXI7XG4gIH1cblxuICBzdGF0aWMgZm9yUm9vdChmbGF2b3VyOiBzdHJpbmcpOiBEeW5hbWljTW9kdWxlIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5mb3JSb290KTtcbiAgICBsb2cuaW5mbyhgR2VuZXJhdGluZyBjb250cm9sbGVycyBmb3IgZmxhdm91ci4uLmApO1xuXG4gICAgY29uc3QgdHJhY2tlZE1vZGVscyA9IEFkYXB0ZXIubW9kZWxzKGZsYXZvdXIpO1xuICAgIGNvbnN0IGNvbnRyb2xsZXJzID0gdHJhY2tlZE1vZGVscy5tYXAodGhpcy50b01vZGVsQ29udHJvbGxlci5iaW5kKHRoaXMpKTtcblxuICAgIGxvZy5pbmZvKGBHZW5lcmF0ZWQgJHtjb250cm9sbGVycy5sZW5ndGh9IGNvbnRyb2xsZXJzYCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9kdWxlOiBEZWNhZk1vZGVsTW9kdWxlLFxuICAgICAgY29udHJvbGxlcnMsXG4gICAgICBwcm92aWRlcnM6IFtSZXBvRmFjdG9yeV0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DynamicModule } from "@nestjs/common";
|
|
2
|
+
import { Logger } from "@decaf-ts/logging";
|
|
3
|
+
export declare class DecafModelModule {
|
|
4
|
+
private static _logger;
|
|
5
|
+
protected static get log(): Logger;
|
|
6
|
+
private static toModelController;
|
|
7
|
+
static forRoot(flavour: string): DynamicModule;
|
|
8
|
+
}
|