@orion-js/typed-model 3.2.1 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
1
  export * from './typedModel';
2
+ export * from './typedSchema';
2
3
  export * from './prop';
3
4
  export * from './resolver';
@@ -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);
@@ -1,2 +1,5 @@
1
1
  import { ModelResolver, ModelResolverResolve } from '@orion-js/resolvers';
2
+ /**
3
+ * @deprecated Please use a @TypedSchema and a @Model a @ModelResolver instead
4
+ */
2
5
  export declare function ResolverProp(options: ModelResolver<ModelResolverResolve>): PropertyDecorator;
@@ -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 });
@@ -1,2 +1,5 @@
1
1
  import { TypedModelOptions } from '../storage/metadataStorage';
2
+ /**
3
+ * @deprecated Please use @TypedSchema instead
4
+ */
2
5
  export declare function TypedModel(options?: TypedModelOptions): ClassDecorator;
@@ -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,2 @@
1
+ import { TypedModelOptions } from '../storage/metadataStorage';
2
+ export declare function TypedSchema(options?: TypedModelOptions): ClassDecorator;
@@ -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;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getModelForClass = void 0;
4
4
  /* eslint-disable @typescript-eslint/ban-types */
5
5
  const models_1 = require("@orion-js/models");
6
+ const __1 = require("..");
6
7
  const metadataStorage_1 = require("../storage/metadataStorage");
7
8
  const processSchemaForProp_1 = require("./helpers/processSchemaForProp");
8
9
  const modelCache = new Map();
@@ -13,6 +14,11 @@ function processModelSchemaForProp(prop) {
13
14
  return (0, processSchemaForProp_1.processSchemaForProp)(prop);
14
15
  }
15
16
  function getModelForClass(target) {
17
+ let modelResolvers = null;
18
+ if (target.prototype.typedModel) {
19
+ modelResolvers = (0, __1.getServiceModelResolvers)(target);
20
+ target = target.prototype.typedModel;
21
+ }
16
22
  const schemaId = target.__schemaId;
17
23
  if (modelCache.has(schemaId)) {
18
24
  return modelCache.get(schemaId);
@@ -37,7 +43,10 @@ function getModelForClass(target) {
37
43
  const model = (0, models_1.createModel)({
38
44
  name: target.name,
39
45
  schema,
40
- resolvers: resolverMap
46
+ resolvers: {
47
+ ...resolverMap,
48
+ ...modelResolvers
49
+ }
41
50
  });
42
51
  modelCache.set(schemaId, model);
43
52
  return model;
package/lib/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from './decorators';
2
2
  export * from './factories';
3
- export * from './resolvers';
3
+ export * from './services';
package/lib/index.js CHANGED
@@ -12,4 +12,4 @@ 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);
15
+ __exportStar(require("./services"), exports);
@@ -0,0 +1,10 @@
1
+ import { Echo as EchoType, EchoConfig } from '@orion-js/echoes';
2
+ export declare function Echoes(): ClassDecorator;
3
+ export interface EchoesPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
4
+ value?: EchoConfig['resolve'];
5
+ }
6
+ export declare function EchoRequest(options?: Omit<EchoConfig, 'resolve' | 'type'>): (target: any, propertyKey: string, descriptor: EchoesPropertyDescriptor) => void;
7
+ export declare function EchoEvent(options?: Omit<EchoConfig, 'resolve' | 'type'>): (target: any, propertyKey: string, descriptor: EchoesPropertyDescriptor) => void;
8
+ export declare function getServiceEchoes(target: any): {
9
+ [key: string]: EchoType;
10
+ };
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getServiceEchoes = exports.EchoEvent = exports.EchoRequest = exports.Echoes = void 0;
4
+ const services_1 = require("@orion-js/services");
5
+ const echoes_1 = require("@orion-js/echoes");
6
+ function Echoes() {
7
+ return function (target) {
8
+ (0, services_1.Service)()(target);
9
+ target.prototype.service = target;
10
+ };
11
+ }
12
+ exports.Echoes = Echoes;
13
+ function EchoRequest(options = {}) {
14
+ return function (target, propertyKey, descriptor) {
15
+ if (!descriptor.value)
16
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
17
+ target.echoes = target.echoes || {};
18
+ target.echoes[propertyKey] = (0, echoes_1.echo)({
19
+ ...options,
20
+ type: 'request',
21
+ resolve: async (params, viewer) => {
22
+ const instance = (0, services_1.getInstance)(target.service);
23
+ return await instance[propertyKey](params, viewer);
24
+ }
25
+ });
26
+ };
27
+ }
28
+ exports.EchoRequest = EchoRequest;
29
+ function EchoEvent(options = {}) {
30
+ return function (target, propertyKey, descriptor) {
31
+ if (!descriptor.value)
32
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
33
+ target.echoes = target.echoes || {};
34
+ target.echoes[propertyKey] = (0, echoes_1.echo)({
35
+ ...options,
36
+ type: 'event',
37
+ resolve: async (params, viewer) => {
38
+ const instance = (0, services_1.getInstance)(target.service);
39
+ return await instance[propertyKey](params, viewer);
40
+ }
41
+ });
42
+ };
43
+ }
44
+ exports.EchoEvent = EchoEvent;
45
+ function getServiceEchoes(target) {
46
+ if (!target.prototype) {
47
+ throw new Error('You must pass a class to getServiceRoutes');
48
+ }
49
+ return target.prototype.echoes || {};
50
+ }
51
+ exports.getServiceEchoes = getServiceEchoes;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,50 @@
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
+ const echoes_1 = require("./echoes");
13
+ describe('Echoes with service injections', () => {
14
+ it('Should define a echoes map using services', async () => {
15
+ let ExampleEchoesService = class ExampleEchoesService {
16
+ async echo() {
17
+ return 1;
18
+ }
19
+ async echoEvent() {
20
+ return 2;
21
+ }
22
+ };
23
+ __decorate([
24
+ (0, echoes_1.EchoRequest)(),
25
+ __metadata("design:type", Function),
26
+ __metadata("design:paramtypes", []),
27
+ __metadata("design:returntype", Promise)
28
+ ], ExampleEchoesService.prototype, "echo", null);
29
+ __decorate([
30
+ (0, echoes_1.EchoEvent)(),
31
+ __metadata("design:type", Function),
32
+ __metadata("design:paramtypes", []),
33
+ __metadata("design:returntype", Promise)
34
+ ], ExampleEchoesService.prototype, "echoEvent", null);
35
+ ExampleEchoesService = __decorate([
36
+ (0, echoes_1.Echoes)()
37
+ ], ExampleEchoesService);
38
+ const echoes = (0, echoes_1.getServiceEchoes)(ExampleEchoesService);
39
+ expect(echoes).toMatchObject({
40
+ echo: {
41
+ type: 'request',
42
+ onRequest: expect.any(Function)
43
+ },
44
+ echoEvent: {
45
+ type: 'event',
46
+ resolve: expect.any(Function)
47
+ }
48
+ });
49
+ });
50
+ });
@@ -0,0 +1,9 @@
1
+ import { OrionRouteOptions, Route as RouteType } from '@orion-js/http';
2
+ export declare function Routes(): ClassDecorator;
3
+ export interface RoutesPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
4
+ value?: OrionRouteOptions['resolve'];
5
+ }
6
+ export declare function Route(options: Omit<OrionRouteOptions, 'resolve'>): (target: any, propertyKey: string, descriptor: RoutesPropertyDescriptor) => void;
7
+ export declare function getServiceRoutes(target: any): {
8
+ [key: string]: RouteType;
9
+ };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getServiceRoutes = exports.Route = exports.Routes = void 0;
4
+ const services_1 = require("@orion-js/services");
5
+ const http_1 = require("@orion-js/http");
6
+ function Routes() {
7
+ return function (target) {
8
+ (0, services_1.Service)()(target);
9
+ target.prototype.service = target;
10
+ };
11
+ }
12
+ exports.Routes = Routes;
13
+ function Route(options) {
14
+ return function (target, propertyKey, descriptor) {
15
+ if (!descriptor.value)
16
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
17
+ target.routes = target.routes || {};
18
+ target.routes[propertyKey] = (0, http_1.route)({
19
+ ...options,
20
+ resolve: async (params, viewer) => {
21
+ const instance = (0, services_1.getInstance)(target.service);
22
+ return await instance[propertyKey](params, viewer);
23
+ }
24
+ });
25
+ };
26
+ }
27
+ exports.Route = Route;
28
+ function getServiceRoutes(target) {
29
+ if (!target.prototype) {
30
+ throw new Error('You must pass a class to getServiceRoutes');
31
+ }
32
+ return target.prototype.routes || {};
33
+ }
34
+ exports.getServiceRoutes = getServiceRoutes;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
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
+ const http_1 = require("./http");
13
+ describe('Routes with service injections', () => {
14
+ it('Should define a routes map using services', async () => {
15
+ let RoutesService = class RoutesService {
16
+ async route1() {
17
+ return {
18
+ statusCode: 200,
19
+ body: 'route1'
20
+ };
21
+ }
22
+ };
23
+ __decorate([
24
+ (0, http_1.Route)({ method: 'get', path: '/route1' }),
25
+ __metadata("design:type", Function),
26
+ __metadata("design:paramtypes", []),
27
+ __metadata("design:returntype", Promise)
28
+ ], RoutesService.prototype, "route1", null);
29
+ RoutesService = __decorate([
30
+ (0, http_1.Routes)()
31
+ ], RoutesService);
32
+ const routes = (0, http_1.getServiceRoutes)(RoutesService);
33
+ expect(routes).toMatchObject({
34
+ route1: {
35
+ method: 'get',
36
+ path: '/route1'
37
+ }
38
+ });
39
+ });
40
+ });
@@ -0,0 +1,4 @@
1
+ export * from './resolvers';
2
+ export * from './echoes';
3
+ export * from './http';
4
+ export * from './jobs';
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./resolvers"), exports);
14
+ __exportStar(require("./echoes"), exports);
15
+ __exportStar(require("./http"), exports);
16
+ __exportStar(require("./jobs"), exports);
@@ -0,0 +1,9 @@
1
+ import { JobDefinition } from '@orion-js/dogs';
2
+ export declare function Jobs(): ClassDecorator;
3
+ export interface JobsPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
4
+ value?: JobDefinition['resolve'];
5
+ }
6
+ export declare function Job(options: Omit<JobDefinition, 'resolve'>): (target: any, propertyKey: string, descriptor: JobsPropertyDescriptor) => void;
7
+ export declare function getServiceJobs(target: any): {
8
+ [key: string]: JobDefinition;
9
+ };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getServiceJobs = exports.Job = exports.Jobs = void 0;
4
+ const services_1 = require("@orion-js/services");
5
+ const dogs_1 = require("@orion-js/dogs");
6
+ function Jobs() {
7
+ return function (target) {
8
+ (0, services_1.Service)()(target);
9
+ target.prototype.service = target;
10
+ };
11
+ }
12
+ exports.Jobs = Jobs;
13
+ function Job(options) {
14
+ return function (target, propertyKey, descriptor) {
15
+ if (!descriptor.value)
16
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
17
+ target.echoes = target.echoes || {};
18
+ target.echoes[propertyKey] = (0, dogs_1.defineJob)({
19
+ ...options,
20
+ resolve: async (params, viewer) => {
21
+ const instance = (0, services_1.getInstance)(target.service);
22
+ return await instance[propertyKey](params, viewer);
23
+ }
24
+ });
25
+ };
26
+ }
27
+ exports.Job = Job;
28
+ function getServiceJobs(target) {
29
+ if (!target.prototype) {
30
+ throw new Error('You must pass a class to getServiceRoutes');
31
+ }
32
+ return target.prototype.echoes || {};
33
+ }
34
+ exports.getServiceJobs = getServiceJobs;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
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
+ const jobs_1 = require("./jobs");
13
+ describe('Jobs (dogs) with service injections', () => {
14
+ it('Should define a jobs map using services', async () => {
15
+ let ExampleJobsService = class ExampleJobsService {
16
+ async job1() {
17
+ return {};
18
+ }
19
+ };
20
+ __decorate([
21
+ (0, jobs_1.Job)({ type: 'event' }),
22
+ __metadata("design:type", Function),
23
+ __metadata("design:paramtypes", []),
24
+ __metadata("design:returntype", Promise)
25
+ ], ExampleJobsService.prototype, "job1", null);
26
+ ExampleJobsService = __decorate([
27
+ (0, jobs_1.Jobs)()
28
+ ], ExampleJobsService);
29
+ const jobs = (0, jobs_1.getServiceJobs)(ExampleJobsService);
30
+ expect(jobs).toMatchObject({
31
+ job1: {
32
+ type: 'event',
33
+ resolve: expect.any(Function)
34
+ }
35
+ });
36
+ });
37
+ });
@@ -0,0 +1,18 @@
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 Query(options: Omit<ResolverOptions<any>, 'resolve' | 'mutation'>): (target: any, propertyKey: string, descriptor: GlobalResolverPropertyDescriptor) => void;
6
+ export declare function Mutation(options: Omit<ResolverOptions<any>, 'resolve' | 'mutation'>): (target: any, propertyKey: string, descriptor: GlobalResolverPropertyDescriptor) => void;
7
+ export declare function getServiceResolvers(target: any): {
8
+ [key: string]: Resolver<GlobalResolverResolve>;
9
+ };
10
+ export interface ModelResolverPropertyDescriptor extends Omit<PropertyDecorator, 'value'> {
11
+ value?: ModelResolverResolve;
12
+ }
13
+ export declare function ModelResolver(options: Omit<ResolverOptions<any>, 'resolve'>): (target: any, propertyKey: string, descriptor: ModelResolverPropertyDescriptor) => void;
14
+ export declare function getServiceModelResolvers(target: any): {
15
+ [key: string]: ModelResolver<GlobalResolverResolve>;
16
+ };
17
+ export declare function Resolvers(): ClassDecorator;
18
+ export declare function Model(typedModel: any): ClassDecorator;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getServiceModelResolvers = exports.CreateModelResolver = exports.getServiceResolvers = exports.CreateResolver = void 0;
3
+ exports.Model = exports.Resolvers = exports.getServiceModelResolvers = exports.ModelResolver = exports.getServiceResolvers = exports.Mutation = exports.Query = void 0;
4
4
  const services_1 = require("@orion-js/services");
5
5
  const resolvers_1 = require("@orion-js/resolvers");
6
6
  const helpers_1 = require("@orion-js/helpers");
7
- function CreateResolver(options) {
7
+ function Query(options) {
8
8
  return function (target, propertyKey, descriptor) {
9
9
  if (!descriptor.value)
10
10
  throw new Error(`You must pass resolver function to ${propertyKey}`);
@@ -12,13 +12,29 @@ function CreateResolver(options) {
12
12
  target.resolvers[propertyKey] = (0, resolvers_1.resolver)({
13
13
  ...options,
14
14
  resolve: async (params, viewer) => {
15
- const instance = (0, services_1.getInstance)(options.thisService);
15
+ const instance = (0, services_1.getInstance)(target.service);
16
16
  return await instance[propertyKey](params, viewer);
17
17
  }
18
18
  });
19
19
  };
20
20
  }
21
- exports.CreateResolver = CreateResolver;
21
+ exports.Query = Query;
22
+ function Mutation(options) {
23
+ return function (target, propertyKey, descriptor) {
24
+ if (!descriptor.value)
25
+ throw new Error(`You must pass resolver function to ${propertyKey}`);
26
+ target.resolvers = target.resolvers || {};
27
+ target.resolvers[propertyKey] = (0, resolvers_1.resolver)({
28
+ ...options,
29
+ mutation: true,
30
+ resolve: async (params, viewer) => {
31
+ const instance = (0, services_1.getInstance)(target.service);
32
+ return await instance[propertyKey](params, viewer);
33
+ }
34
+ });
35
+ };
36
+ }
37
+ exports.Mutation = Mutation;
22
38
  function getServiceResolvers(target) {
23
39
  if (!target.prototype) {
24
40
  throw new helpers_1.UserError('You must pass a class to getResolvers');
@@ -26,7 +42,7 @@ function getServiceResolvers(target) {
26
42
  return target.prototype.resolvers || {};
27
43
  }
28
44
  exports.getServiceResolvers = getServiceResolvers;
29
- function CreateModelResolver(options) {
45
+ function ModelResolver(options) {
30
46
  return function (target, propertyKey, descriptor) {
31
47
  if (!descriptor.value)
32
48
  throw new Error(`You must pass resolver function to ${propertyKey}`);
@@ -34,13 +50,13 @@ function CreateModelResolver(options) {
34
50
  target.resolvers[propertyKey] = (0, resolvers_1.modelResolver)({
35
51
  ...options,
36
52
  resolve: async (item, params, viewer) => {
37
- const instance = (0, services_1.getInstance)(options.thisService);
53
+ const instance = (0, services_1.getInstance)(target.service);
38
54
  return await instance[propertyKey](item, params, viewer);
39
55
  }
40
56
  });
41
57
  };
42
58
  }
43
- exports.CreateModelResolver = CreateModelResolver;
59
+ exports.ModelResolver = ModelResolver;
44
60
  function getServiceModelResolvers(target) {
45
61
  if (!target.prototype) {
46
62
  throw new helpers_1.UserError('You must pass a class to getResolvers');
@@ -48,3 +64,20 @@ function getServiceModelResolvers(target) {
48
64
  return target.prototype.resolvers || {};
49
65
  }
50
66
  exports.getServiceModelResolvers = getServiceModelResolvers;
67
+ function Resolvers() {
68
+ return function (target) {
69
+ (0, services_1.Service)()(target);
70
+ target.prototype.service = target;
71
+ };
72
+ }
73
+ exports.Resolvers = Resolvers;
74
+ function Model(typedModel) {
75
+ return function (target) {
76
+ (0, services_1.Service)()(target);
77
+ target.prototype.typedModel = typedModel;
78
+ target.prototype.service = target;
79
+ // @ts-expect-error this is a trick to make it work in resolvers without having to call getModelForClass
80
+ target.getModel = () => getModelForClass(target);
81
+ };
82
+ }
83
+ exports.Model = Model;
@@ -13,10 +13,9 @@ require("reflect-metadata");
13
13
  const services_1 = require("@orion-js/services");
14
14
  const __1 = require("..");
15
15
  const factories_1 = require("../factories");
16
- const _1 = require(".");
16
+ const resolvers_1 = require("./resolvers");
17
17
  describe('Resolvers with service injection', () => {
18
18
  it('should allow to pass a service as resolve', async () => {
19
- var ExampleResolverService_1;
20
19
  let ExampleRepo = class ExampleRepo {
21
20
  getLastName() {
22
21
  return 'Lopez';
@@ -25,10 +24,13 @@ describe('Resolvers with service injection', () => {
25
24
  ExampleRepo = __decorate([
26
25
  (0, services_1.Service)()
27
26
  ], ExampleRepo);
28
- let ExampleResolverService = ExampleResolverService_1 = class ExampleResolverService {
27
+ let ExampleResolverService = class ExampleResolverService {
29
28
  async sayHi(params) {
30
29
  return this.addAge(`My name is ${params.name} ${this.repo.getLastName()}`);
31
30
  }
31
+ async setName() {
32
+ this.repo.getLastName();
33
+ }
32
34
  async addAge(params) {
33
35
  return `${params} and I'm 100 years old`;
34
36
  }
@@ -38,8 +40,7 @@ describe('Resolvers with service injection', () => {
38
40
  __metadata("design:type", ExampleRepo)
39
41
  ], ExampleResolverService.prototype, "repo", void 0);
40
42
  __decorate([
41
- (0, _1.CreateResolver)({
42
- thisService: ExampleResolverService_1,
43
+ (0, resolvers_1.Query)({
43
44
  params: { name: { type: 'string' } },
44
45
  returns: String
45
46
  }),
@@ -47,16 +48,21 @@ describe('Resolvers with service injection', () => {
47
48
  __metadata("design:paramtypes", [Object]),
48
49
  __metadata("design:returntype", Promise)
49
50
  ], ExampleResolverService.prototype, "sayHi", null);
50
- ExampleResolverService = ExampleResolverService_1 = __decorate([
51
- (0, services_1.Service)()
51
+ __decorate([
52
+ (0, resolvers_1.Mutation)({ returns: String }),
53
+ __metadata("design:type", Function),
54
+ __metadata("design:paramtypes", []),
55
+ __metadata("design:returntype", Promise)
56
+ ], ExampleResolverService.prototype, "setName", null);
57
+ ExampleResolverService = __decorate([
58
+ (0, resolvers_1.Resolvers)()
52
59
  ], ExampleResolverService);
53
- const resolvers = (0, _1.getServiceResolvers)(ExampleResolverService);
60
+ const resolvers = (0, resolvers_1.getServiceResolvers)(ExampleResolverService);
54
61
  expect(resolvers.sayHi).toBeDefined();
55
62
  const result = await resolvers.sayHi.execute({ params: { name: 'Orion' } });
56
63
  expect(result).toBe(`My name is Orion Lopez and I'm 100 years old`);
57
64
  });
58
65
  it('show allow to pass a service with resolvers to typed model', async () => {
59
- var PersonResolvers_1;
60
66
  let AgeRepo = class AgeRepo {
61
67
  getAge(name) {
62
68
  return `${name} is 100 years old`;
@@ -65,7 +71,16 @@ describe('Resolvers with service injection', () => {
65
71
  AgeRepo = __decorate([
66
72
  (0, services_1.Service)()
67
73
  ], AgeRepo);
68
- let PersonResolvers = PersonResolvers_1 = class PersonResolvers {
74
+ let PersonSchema = class PersonSchema {
75
+ };
76
+ __decorate([
77
+ (0, __1.Prop)(),
78
+ __metadata("design:type", String)
79
+ ], PersonSchema.prototype, "name", void 0);
80
+ PersonSchema = __decorate([
81
+ (0, __1.TypedSchema)()
82
+ ], PersonSchema);
83
+ let PersonModel = class PersonModel {
69
84
  async getAge(person) {
70
85
  const result = this.repo.getAge(person.name);
71
86
  return result;
@@ -74,29 +89,17 @@ describe('Resolvers with service injection', () => {
74
89
  __decorate([
75
90
  (0, services_1.Inject)(),
76
91
  __metadata("design:type", AgeRepo)
77
- ], PersonResolvers.prototype, "repo", void 0);
92
+ ], PersonModel.prototype, "repo", void 0);
78
93
  __decorate([
79
- (0, _1.CreateModelResolver)({
80
- thisService: PersonResolvers_1,
81
- returns: String
82
- }),
94
+ (0, resolvers_1.ModelResolver)({ returns: String }),
83
95
  __metadata("design:type", Function),
84
- __metadata("design:paramtypes", [Object]),
96
+ __metadata("design:paramtypes", [PersonSchema]),
85
97
  __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);
98
+ ], PersonModel.prototype, "getAge", null);
99
+ PersonModel = __decorate([
100
+ (0, resolvers_1.Model)(PersonSchema)
101
+ ], PersonModel);
102
+ const model = (0, factories_1.getModelForClass)(PersonModel);
100
103
  const item = model.initItem({ name: 'Orion' });
101
104
  expect(await item.getAge()).toBe(`Orion is 100 years old`);
102
105
  });
@@ -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 interface TypedModelOptions {
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.1",
3
+ "version": "3.2.2",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "files": [
@@ -17,7 +17,10 @@
17
17
  "test": "jest --config jest.config.js"
18
18
  },
19
19
  "dependencies": {
20
+ "@orion-js/dogs": "^3.2.2",
21
+ "@orion-js/echoes": "^3.2.2",
20
22
  "@orion-js/helpers": "^3.2.0",
23
+ "@orion-js/http": "^3.2.0",
21
24
  "@orion-js/models": "^3.2.0",
22
25
  "@orion-js/resolvers": "^3.2.0",
23
26
  "@orion-js/schema": "^3.2.0",
@@ -34,11 +37,12 @@
34
37
  "eslint": "8.2.0",
35
38
  "eslint-plugin-import": "2.25.3",
36
39
  "jest": "27.3.1",
40
+ "kafkajs": "^1.16.0",
37
41
  "ts-jest": "27.0.7",
38
42
  "typescript": "^4.4.4"
39
43
  },
40
44
  "publishConfig": {
41
45
  "access": "public"
42
46
  },
43
- "gitHead": "582bfdbd33b30a1259cc2c35f46111992aeeff81"
47
+ "gitHead": "95d6f776514b789bb1c267ee9fbe3b4eaa4c961d"
44
48
  }
@@ -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
- };