@orion-js/typed-model 3.2.1 → 3.2.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/lib/decorators/index.d.ts +1 -0
- package/lib/decorators/index.js +1 -0
- package/lib/decorators/resolver.d.ts +3 -0
- package/lib/decorators/resolver.js +3 -0
- package/lib/decorators/typedModel.d.ts +3 -0
- package/lib/decorators/typedModel.js +3 -0
- package/lib/decorators/typedSchema.d.ts +2 -0
- package/lib/decorators/typedSchema.js +13 -0
- package/lib/factories/getModelForClass.js +9 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -1
- package/lib/storage/metadataStorage.d.ts +1 -3
- package/lib/storage/metadataStorage.js +0 -7
- package/package.json +3 -2
- package/lib/resolvers/index.d.ts +0 -19
- package/lib/resolvers/index.js +0 -50
- package/lib/resolvers/index.test.d.ts +0 -1
- package/lib/resolvers/index.test.js +0 -103
package/lib/decorators/index.js
CHANGED
|
@@ -11,5 +11,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./typedModel"), exports);
|
|
14
|
+
__exportStar(require("./typedSchema"), exports);
|
|
14
15
|
__exportStar(require("./prop"), exports);
|
|
15
16
|
__exportStar(require("./resolver"), exports);
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ResolverProp = void 0;
|
|
4
4
|
const metadataStorage_1 = require("../storage/metadataStorage");
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Please use a @TypedSchema and a @Model a @ModelResolver instead
|
|
7
|
+
*/
|
|
5
8
|
function ResolverProp(options) {
|
|
6
9
|
return (classDef, propertyKey) => {
|
|
7
10
|
metadataStorage_1.MetadataStorage.addResolverMetadata({ target: classDef.constructor, propertyKey, options });
|
|
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TypedModel = void 0;
|
|
4
4
|
const __1 = require("..");
|
|
5
5
|
const metadataStorage_1 = require("../storage/metadataStorage");
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Please use @TypedSchema instead
|
|
8
|
+
*/
|
|
6
9
|
function TypedModel(options = {}) {
|
|
7
10
|
return target => {
|
|
8
11
|
metadataStorage_1.MetadataStorage.addSchemaMetadata({ target, options });
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TypedSchema = void 0;
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
const metadataStorage_1 = require("../storage/metadataStorage");
|
|
6
|
+
function TypedSchema(options = {}) {
|
|
7
|
+
return target => {
|
|
8
|
+
metadataStorage_1.MetadataStorage.addSchemaMetadata({ target, options });
|
|
9
|
+
// @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass
|
|
10
|
+
target.getModel = () => (0, __1.getModelForClass)(target);
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
exports.TypedSchema = TypedSchema;
|
|
@@ -13,6 +13,11 @@ function processModelSchemaForProp(prop) {
|
|
|
13
13
|
return (0, processSchemaForProp_1.processSchemaForProp)(prop);
|
|
14
14
|
}
|
|
15
15
|
function getModelForClass(target) {
|
|
16
|
+
let modelResolvers = null;
|
|
17
|
+
if (target.prototype.typedModel) {
|
|
18
|
+
modelResolvers = target.prototype.resolvers || {};
|
|
19
|
+
target = target.prototype.typedModel;
|
|
20
|
+
}
|
|
16
21
|
const schemaId = target.__schemaId;
|
|
17
22
|
if (modelCache.has(schemaId)) {
|
|
18
23
|
return modelCache.get(schemaId);
|
|
@@ -37,7 +42,10 @@ function getModelForClass(target) {
|
|
|
37
42
|
const model = (0, models_1.createModel)({
|
|
38
43
|
name: target.name,
|
|
39
44
|
schema,
|
|
40
|
-
resolvers:
|
|
45
|
+
resolvers: {
|
|
46
|
+
...resolverMap,
|
|
47
|
+
...modelResolvers
|
|
48
|
+
}
|
|
41
49
|
});
|
|
42
50
|
modelCache.set(schemaId, model);
|
|
43
51
|
return model;
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -12,4 +12,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./decorators"), exports);
|
|
14
14
|
__exportStar(require("./factories"), exports);
|
|
15
|
-
__exportStar(require("./resolvers"), exports);
|
|
@@ -4,9 +4,7 @@ import { ModelResolver, ModelResolverResolve } from '@orion-js/resolvers';
|
|
|
4
4
|
export declare type PropertiesMap = {
|
|
5
5
|
[key: string]: PropOptions;
|
|
6
6
|
};
|
|
7
|
-
export
|
|
8
|
-
resolversService?: any;
|
|
9
|
-
}
|
|
7
|
+
export declare type TypedModelOptions = Record<string, never>;
|
|
10
8
|
export declare class MetadataStorageHandler {
|
|
11
9
|
private schemas;
|
|
12
10
|
private getSchema;
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MetadataStorage = exports.MetadataStorageHandler = void 0;
|
|
4
4
|
const errors_1 = require("../errors");
|
|
5
5
|
const helpers_1 = require("@orion-js/helpers");
|
|
6
|
-
const resolvers_1 = require("../resolvers");
|
|
7
6
|
class MetadataStorageHandler {
|
|
8
7
|
constructor() {
|
|
9
8
|
this.schemas = new Map();
|
|
@@ -25,12 +24,6 @@ class MetadataStorageHandler {
|
|
|
25
24
|
}
|
|
26
25
|
addSchemaMetadata({ target, options }) {
|
|
27
26
|
const schema = this.getSchema(target);
|
|
28
|
-
if (options.resolversService) {
|
|
29
|
-
const resolversService = (0, resolvers_1.getServiceModelResolvers)(options.resolversService);
|
|
30
|
-
Object.entries(resolversService).forEach(([key, resolver]) => {
|
|
31
|
-
schema.resolvers[key] = resolver;
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
27
|
schema.options = options;
|
|
35
28
|
}
|
|
36
29
|
addPropMetadata({ target, propertyKey, options }) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orion-js/typed-model",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.4",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"types": "lib/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -34,11 +34,12 @@
|
|
|
34
34
|
"eslint": "8.2.0",
|
|
35
35
|
"eslint-plugin-import": "2.25.3",
|
|
36
36
|
"jest": "27.3.1",
|
|
37
|
+
"kafkajs": "^1.16.0",
|
|
37
38
|
"ts-jest": "27.0.7",
|
|
38
39
|
"typescript": "^4.4.4"
|
|
39
40
|
},
|
|
40
41
|
"publishConfig": {
|
|
41
42
|
"access": "public"
|
|
42
43
|
},
|
|
43
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "a1c4cff581b31f24896ec96a0a180d043dbf802a"
|
|
44
45
|
}
|
package/lib/resolvers/index.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { GlobalResolverResolve, ResolverOptions, ModelResolverResolve, Resolver, ModelResolver } from '@orion-js/resolvers';
|
|
2
|
-
export interface GlobalResolverPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
|
|
3
|
-
value?: GlobalResolverResolve;
|
|
4
|
-
}
|
|
5
|
-
export declare function CreateResolver(options: Omit<ResolverOptions<any>, 'resolve'> & {
|
|
6
|
-
thisService: any;
|
|
7
|
-
}): (target: any, propertyKey: string, descriptor: GlobalResolverPropertyDescriptor) => void;
|
|
8
|
-
export declare function getServiceResolvers(target: any): {
|
|
9
|
-
[key: string]: Resolver<GlobalResolverResolve>;
|
|
10
|
-
};
|
|
11
|
-
export interface ModelResolverPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
|
|
12
|
-
value?: ModelResolverResolve;
|
|
13
|
-
}
|
|
14
|
-
export declare function CreateModelResolver(options: Omit<ResolverOptions<any>, 'resolve'> & {
|
|
15
|
-
thisService: any;
|
|
16
|
-
}): (target: any, propertyKey: string, descriptor: ModelResolverPropertyDescriptor) => void;
|
|
17
|
-
export declare function getServiceModelResolvers(target: any): {
|
|
18
|
-
[key: string]: ModelResolver<GlobalResolverResolve>;
|
|
19
|
-
};
|
package/lib/resolvers/index.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getServiceModelResolvers = exports.CreateModelResolver = exports.getServiceResolvers = exports.CreateResolver = void 0;
|
|
4
|
-
const services_1 = require("@orion-js/services");
|
|
5
|
-
const resolvers_1 = require("@orion-js/resolvers");
|
|
6
|
-
const helpers_1 = require("@orion-js/helpers");
|
|
7
|
-
function CreateResolver(options) {
|
|
8
|
-
return function (target, propertyKey, descriptor) {
|
|
9
|
-
if (!descriptor.value)
|
|
10
|
-
throw new Error(`You must pass resolver function to ${propertyKey}`);
|
|
11
|
-
target.resolvers = target.resolvers || {};
|
|
12
|
-
target.resolvers[propertyKey] = (0, resolvers_1.resolver)({
|
|
13
|
-
...options,
|
|
14
|
-
resolve: async (params, viewer) => {
|
|
15
|
-
const instance = (0, services_1.getInstance)(options.thisService);
|
|
16
|
-
return await instance[propertyKey](params, viewer);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
exports.CreateResolver = CreateResolver;
|
|
22
|
-
function getServiceResolvers(target) {
|
|
23
|
-
if (!target.prototype) {
|
|
24
|
-
throw new helpers_1.UserError('You must pass a class to getResolvers');
|
|
25
|
-
}
|
|
26
|
-
return target.prototype.resolvers || {};
|
|
27
|
-
}
|
|
28
|
-
exports.getServiceResolvers = getServiceResolvers;
|
|
29
|
-
function CreateModelResolver(options) {
|
|
30
|
-
return function (target, propertyKey, descriptor) {
|
|
31
|
-
if (!descriptor.value)
|
|
32
|
-
throw new Error(`You must pass resolver function to ${propertyKey}`);
|
|
33
|
-
target.resolvers = target.resolvers || {};
|
|
34
|
-
target.resolvers[propertyKey] = (0, resolvers_1.modelResolver)({
|
|
35
|
-
...options,
|
|
36
|
-
resolve: async (item, params, viewer) => {
|
|
37
|
-
const instance = (0, services_1.getInstance)(options.thisService);
|
|
38
|
-
return await instance[propertyKey](item, params, viewer);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
exports.CreateModelResolver = CreateModelResolver;
|
|
44
|
-
function getServiceModelResolvers(target) {
|
|
45
|
-
if (!target.prototype) {
|
|
46
|
-
throw new helpers_1.UserError('You must pass a class to getResolvers');
|
|
47
|
-
}
|
|
48
|
-
return target.prototype.resolvers || {};
|
|
49
|
-
}
|
|
50
|
-
exports.getServiceModelResolvers = getServiceModelResolvers;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import 'reflect-metadata';
|
|
@@ -1,103 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
require("reflect-metadata");
|
|
13
|
-
const services_1 = require("@orion-js/services");
|
|
14
|
-
const __1 = require("..");
|
|
15
|
-
const factories_1 = require("../factories");
|
|
16
|
-
const _1 = require(".");
|
|
17
|
-
describe('Resolvers with service injection', () => {
|
|
18
|
-
it('should allow to pass a service as resolve', async () => {
|
|
19
|
-
var ExampleResolverService_1;
|
|
20
|
-
let ExampleRepo = class ExampleRepo {
|
|
21
|
-
getLastName() {
|
|
22
|
-
return 'Lopez';
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
ExampleRepo = __decorate([
|
|
26
|
-
(0, services_1.Service)()
|
|
27
|
-
], ExampleRepo);
|
|
28
|
-
let ExampleResolverService = ExampleResolverService_1 = class ExampleResolverService {
|
|
29
|
-
async sayHi(params) {
|
|
30
|
-
return this.addAge(`My name is ${params.name} ${this.repo.getLastName()}`);
|
|
31
|
-
}
|
|
32
|
-
async addAge(params) {
|
|
33
|
-
return `${params} and I'm 100 years old`;
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
__decorate([
|
|
37
|
-
(0, services_1.Inject)(),
|
|
38
|
-
__metadata("design:type", ExampleRepo)
|
|
39
|
-
], ExampleResolverService.prototype, "repo", void 0);
|
|
40
|
-
__decorate([
|
|
41
|
-
(0, _1.CreateResolver)({
|
|
42
|
-
thisService: ExampleResolverService_1,
|
|
43
|
-
params: { name: { type: 'string' } },
|
|
44
|
-
returns: String
|
|
45
|
-
}),
|
|
46
|
-
__metadata("design:type", Function),
|
|
47
|
-
__metadata("design:paramtypes", [Object]),
|
|
48
|
-
__metadata("design:returntype", Promise)
|
|
49
|
-
], ExampleResolverService.prototype, "sayHi", null);
|
|
50
|
-
ExampleResolverService = ExampleResolverService_1 = __decorate([
|
|
51
|
-
(0, services_1.Service)()
|
|
52
|
-
], ExampleResolverService);
|
|
53
|
-
const resolvers = (0, _1.getServiceResolvers)(ExampleResolverService);
|
|
54
|
-
expect(resolvers.sayHi).toBeDefined();
|
|
55
|
-
const result = await resolvers.sayHi.execute({ params: { name: 'Orion' } });
|
|
56
|
-
expect(result).toBe(`My name is Orion Lopez and I'm 100 years old`);
|
|
57
|
-
});
|
|
58
|
-
it('show allow to pass a service with resolvers to typed model', async () => {
|
|
59
|
-
var PersonResolvers_1;
|
|
60
|
-
let AgeRepo = class AgeRepo {
|
|
61
|
-
getAge(name) {
|
|
62
|
-
return `${name} is 100 years old`;
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
AgeRepo = __decorate([
|
|
66
|
-
(0, services_1.Service)()
|
|
67
|
-
], AgeRepo);
|
|
68
|
-
let PersonResolvers = PersonResolvers_1 = class PersonResolvers {
|
|
69
|
-
async getAge(person) {
|
|
70
|
-
const result = this.repo.getAge(person.name);
|
|
71
|
-
return result;
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
__decorate([
|
|
75
|
-
(0, services_1.Inject)(),
|
|
76
|
-
__metadata("design:type", AgeRepo)
|
|
77
|
-
], PersonResolvers.prototype, "repo", void 0);
|
|
78
|
-
__decorate([
|
|
79
|
-
(0, _1.CreateModelResolver)({
|
|
80
|
-
thisService: PersonResolvers_1,
|
|
81
|
-
returns: String
|
|
82
|
-
}),
|
|
83
|
-
__metadata("design:type", Function),
|
|
84
|
-
__metadata("design:paramtypes", [Object]),
|
|
85
|
-
__metadata("design:returntype", Promise)
|
|
86
|
-
], PersonResolvers.prototype, "getAge", null);
|
|
87
|
-
PersonResolvers = PersonResolvers_1 = __decorate([
|
|
88
|
-
(0, services_1.Service)()
|
|
89
|
-
], PersonResolvers);
|
|
90
|
-
let Person = class Person {
|
|
91
|
-
};
|
|
92
|
-
__decorate([
|
|
93
|
-
(0, __1.Prop)(),
|
|
94
|
-
__metadata("design:type", String)
|
|
95
|
-
], Person.prototype, "name", void 0);
|
|
96
|
-
Person = __decorate([
|
|
97
|
-
(0, __1.TypedModel)({ resolversService: PersonResolvers })
|
|
98
|
-
], Person);
|
|
99
|
-
const model = (0, factories_1.getModelForClass)(Person);
|
|
100
|
-
const item = model.initItem({ name: 'Orion' });
|
|
101
|
-
expect(await item.getAge()).toBe(`Orion is 100 years old`);
|
|
102
|
-
});
|
|
103
|
-
});
|