@orion-js/graphql 4.0.0-next.2 → 4.0.0-next.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/index.js CHANGED
@@ -1,14 +1,11 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/pubsub.ts
5
2
  var pubsub = null;
6
- var setPubsub = /* @__PURE__ */ __name(function(newPubsub) {
3
+ var setPubsub = function(newPubsub) {
7
4
  pubsub = newPubsub;
8
- }, "setPubsub");
9
- var getPubsub = /* @__PURE__ */ __name(function() {
5
+ };
6
+ var getPubsub = function() {
10
7
  return pubsub;
11
- }, "getPubsub");
8
+ };
12
9
 
13
10
  // src/subscription/getChannelName.ts
14
11
  import { hashObject } from "@orion-js/helpers";
@@ -17,29 +14,26 @@ function getChannelName_default(name, params) {
17
14
  const channelName = `${name}_${hash}`;
18
15
  return channelName;
19
16
  }
20
- __name(getChannelName_default, "default");
21
17
 
22
18
  // src/subscription/index.ts
23
- import { checkPermissions as checkResolverPermissions, cleanParams, cleanReturns } from "@orion-js/resolvers";
24
- var createSubscription = /* @__PURE__ */ __name(function(options) {
19
+ import {
20
+ checkPermissions as checkResolverPermissions,
21
+ cleanParams,
22
+ cleanReturns
23
+ } from "@orion-js/resolvers";
24
+ var createSubscription = function(options) {
25
25
  const subscription = {
26
26
  name: options.name
27
27
  };
28
28
  subscription.publish = async (params, data) => {
29
29
  const pubsub2 = getPubsub();
30
30
  const channelName = getChannelName_default(subscription.name, params);
31
- await pubsub2.publish(channelName, {
32
- [subscription.name]: data
33
- });
31
+ await pubsub2.publish(channelName, { [subscription.name]: data });
34
32
  };
35
33
  subscription.subscribe = async (params, viewer) => {
36
34
  const pubsub2 = getPubsub();
37
35
  try {
38
- await checkResolverPermissions({
39
- params,
40
- viewer,
41
- options: null
42
- }, options);
36
+ await checkResolverPermissions({ params, viewer, options: null }, options);
43
37
  const channelName = getChannelName_default(subscription.name, params);
44
38
  return pubsub2.asyncIterator(channelName);
45
39
  } catch (error) {
@@ -49,7 +43,7 @@ var createSubscription = /* @__PURE__ */ __name(function(options) {
49
43
  subscription.params = cleanParams(options.params);
50
44
  subscription.returns = cleanReturns(options.returns);
51
45
  return subscription;
52
- }, "createSubscription");
46
+ };
53
47
  var subscription_default = createSubscription;
54
48
 
55
49
  // src/startGraphiQL.ts
@@ -57,8 +51,7 @@ import { registerRoute, route } from "@orion-js/http";
57
51
  function safeSerialize(data) {
58
52
  return data ? JSON.stringify(data).replace(/\//g, "\\/") : null;
59
53
  }
60
- __name(safeSerialize, "safeSerialize");
61
- var getHTML = /* @__PURE__ */ __name(function(apolloOptions, options, data) {
54
+ var getHTML = function(apolloOptions, options, data) {
62
55
  const GRAPHIQL_VERSION = "0.11.11";
63
56
  const endpointURL = "/graphql";
64
57
  const subscriptionsEndpoint = "/subscriptions";
@@ -239,19 +232,20 @@ var getHTML = /* @__PURE__ */ __name(function(apolloOptions, options, data) {
239
232
  </script>
240
233
  </body>
241
234
  </html>`;
242
- }, "getHTML");
235
+ };
243
236
  function startGraphiQL_default(apolloOptions, options) {
244
- registerRoute(route({
245
- path: "/graphiql",
246
- method: "get",
247
- async resolve(req) {
248
- return {
249
- body: getHTML(apolloOptions, options, req.query)
250
- };
251
- }
252
- }));
237
+ registerRoute(
238
+ route({
239
+ path: "/graphiql",
240
+ method: "get",
241
+ async resolve(req) {
242
+ return {
243
+ body: getHTML(apolloOptions, options, req.query)
244
+ };
245
+ }
246
+ })
247
+ );
253
248
  }
254
- __name(startGraphiQL_default, "default");
255
249
 
256
250
  // src/buildSchema/index.ts
257
251
  import { GraphQLSchema } from "graphql";
@@ -260,16 +254,19 @@ import { GraphQLSchema } from "graphql";
260
254
  import { GraphQLObjectType as GraphQLObjectType2 } from "graphql";
261
255
 
262
256
  // src/buildSchema/getType/index.ts
263
- import isPlainObject2 from "lodash/isPlainObject";
264
257
  import isArray2 from "lodash/isArray";
265
258
  import { GraphQLList as GraphQLList2, GraphQLObjectType } from "graphql";
266
- import { getFieldType as getFieldType2 } from "@orion-js/schema";
259
+ import {
260
+ getFieldType as getFieldType2,
261
+ getSchemaWithMetadataFromAnyOrionForm,
262
+ isSchemaLike
263
+ } from "@orion-js/schema";
267
264
 
268
265
  // src/buildSchema/getType/BigIntScalar.ts
269
266
  import { GraphQLScalarType } from "graphql";
270
267
  var MAX_INT = Number.MAX_SAFE_INTEGER;
271
268
  var MIN_INT = Number.MIN_SAFE_INTEGER;
272
- var coerceBigInt = /* @__PURE__ */ __name(function coerceBigInt2(value) {
269
+ var coerceBigInt = function coerceBigInt2(value) {
273
270
  if (value === "") {
274
271
  throw new TypeError("BigInt cannot represent non 53-bit signed integer value: (empty string)");
275
272
  }
@@ -282,7 +279,7 @@ var coerceBigInt = /* @__PURE__ */ __name(function coerceBigInt2(value) {
282
279
  throw new TypeError("BigInt cannot represent non-integer value: " + String(value));
283
280
  }
284
281
  return int;
285
- }, "coerceBigInt");
282
+ };
286
283
  var BigIntScalar_default = new GraphQLScalarType({
287
284
  name: "BigInt",
288
285
  description: "The `BigInt` scalar type represents non-fractional signed whole numeric values. BigInt can represent values between -(2^53) + 1 and 2^53 - 1. ",
@@ -314,7 +311,6 @@ import { GraphQLScalarType as GraphQLScalarType3, Kind } from "graphql";
314
311
  function identity(value) {
315
312
  return value;
316
313
  }
317
- __name(identity, "identity");
318
314
  function parseLiteral(ast, variables) {
319
315
  switch (ast.kind) {
320
316
  case Kind.STRING:
@@ -342,7 +338,6 @@ function parseLiteral(ast, variables) {
342
338
  return void 0;
343
339
  }
344
340
  }
345
- __name(parseLiteral, "parseLiteral");
346
341
  var JSONScalar_default = new GraphQLScalarType3({
347
342
  name: "JSON",
348
343
  description: "The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).",
@@ -378,7 +373,6 @@ function getScalar_default(fieldType) {
378
373
  }
379
374
  throw new Error(`Field type "${fieldType.name}" has no convertion to GraphQLType`);
380
375
  }
381
- __name(getScalar_default, "default");
382
376
 
383
377
  // src/buildSchema/getArgs/getField.ts
384
378
  import isPlainObject from "lodash/isPlainObject";
@@ -387,9 +381,11 @@ import { GraphQLList, GraphQLInputObjectType } from "graphql";
387
381
  import { getFieldType } from "@orion-js/schema";
388
382
 
389
383
  // src/resolversSchemas/getStaticFields.ts
390
- function getStaticFields(model) {
391
- const schema = model.getSchema();
384
+ function getStaticFields(schema) {
392
385
  if (!schema) return [];
386
+ if (schema.getSchema) {
387
+ schema = schema.getSchema();
388
+ }
393
389
  const keys = Object.keys(schema).filter((key) => !key.startsWith("__"));
394
390
  return keys.map((key) => {
395
391
  const field = schema[key];
@@ -399,72 +395,75 @@ function getStaticFields(model) {
399
395
  };
400
396
  }).filter((field) => !field.private);
401
397
  }
402
- __name(getStaticFields, "getStaticFields");
403
398
 
404
399
  // src/buildSchema/getArgs/getField.ts
400
+ Symbol.metadata ?? (Symbol.metadata = Symbol("Symbol.metadata"));
405
401
  var storedModelInput = {};
406
- var getModelInput = /* @__PURE__ */ __name(function(model, fields) {
407
- if (storedModelInput[model.name]) {
408
- return storedModelInput[model.name];
402
+ var getCachedModelInput = (model, fields) => {
403
+ if (!storedModelInput[model.name]) {
404
+ storedModelInput[model.name] = new GraphQLInputObjectType({
405
+ name: `${model.name}Input`,
406
+ fields
407
+ });
409
408
  }
410
- storedModelInput[model.name] = new GraphQLInputObjectType({
411
- name: model.name + "Input",
412
- fields
413
- });
414
409
  return storedModelInput[model.name];
415
- }, "getModelInput");
416
- function getParams(type) {
417
- if (!type) {
418
- throw new Error(`No type specified`);
410
+ };
411
+ var resolveModelFields = (model) => {
412
+ const fields = {};
413
+ for (const field of getStaticFields(model)) {
414
+ fields[field.key] = { type: resolveType(field.type) };
419
415
  }
420
- if (isArray(type)) {
421
- const graphQLType = getParams(type[0]);
422
- return new GraphQLList(graphQLType);
423
- } else if (!type._isFieldType && (isPlainObject(type) || type.__isModel)) {
424
- const model = type.__isModel ? type : type.__model;
425
- if (!model || !model.__isModel) throw new Error(`A type is not a Model`);
426
- const fields = {};
427
- for (const field of getStaticFields(model)) {
428
- fields[field.key] = {
429
- type: getParams(field.type)
430
- };
431
- }
432
- return getModelInput(model, fields);
433
- } else {
434
- const schemaType = getFieldType(type);
435
- const graphQLType = getScalar_default(schemaType);
436
- return graphQLType;
416
+ return fields;
417
+ };
418
+ var resolveArrayType = (type) => new GraphQLList(resolveType(type[0]));
419
+ var resolvePlainObjectOrModelType = (type) => {
420
+ const model = type.__isModel ? type : type.__model;
421
+ if (!model || !model.__isModel) {
422
+ throw new Error("A type is not a Model");
437
423
  }
438
- }
439
- __name(getParams, "getParams");
424
+ const fields = resolveModelFields(model);
425
+ return getCachedModelInput(model, fields);
426
+ };
427
+ var resolveType = (type) => {
428
+ var _a;
429
+ if (!type) throw new Error("No type specified");
430
+ if ((_a = type == null ? void 0 : type[Symbol.metadata]) == null ? void 0 : _a._getModel) {
431
+ const model = type[Symbol.metadata]._getModel();
432
+ return resolveType(model);
433
+ }
434
+ if (isArray(type)) return resolveArrayType(type);
435
+ if (!type.__isFieldType && (isPlainObject(type) || type.__isModel)) {
436
+ return resolvePlainObjectOrModelType(type);
437
+ }
438
+ const schemaType = getFieldType(type);
439
+ return getScalar_default(schemaType);
440
+ };
441
+ var getField_default = resolveType;
440
442
 
441
443
  // src/buildSchema/getArgs/index.ts
442
- function getArgs_default(params) {
444
+ async function getArgs_default(params) {
443
445
  if (!params) return;
444
446
  if (Object.keys(params).length === 0) return;
445
447
  const fields = {};
446
448
  for (const key of Object.keys(params)) {
447
449
  try {
448
- const type = getParams(params[key].type);
449
- fields[key] = {
450
- type
451
- };
450
+ const type = getField_default(params[key].type);
451
+ fields[key] = { type };
452
452
  } catch (error) {
453
453
  throw new Error(`Error creating GraphQL resolver params argument ${key}: ${error.message}`);
454
454
  }
455
455
  }
456
456
  return fields;
457
457
  }
458
- __name(getArgs_default, "default");
459
458
 
460
459
  // src/errorHandler.ts
461
460
  import crypto from "crypto";
462
461
  import { GraphQLError } from "graphql";
463
462
  function errorHandler(error, data) {
464
- const message = `Error in resolver "${data.name}" ${data.model ? `of model "${data.model.name}"` : ""}`;
463
+ const message = `Error in resolver "${data.name}" ${data.schema ? `of model "${data.schema.__modelName}"` : ""}`;
465
464
  const hash = crypto.createHash("sha1").update(error.message, "utf8").digest("hex").substring(0, 10);
466
465
  error.hash = hash;
467
- if (error && error.isOrionError) {
466
+ if (error == null ? void 0 : error.isOrionError) {
468
467
  console.warn(message, error);
469
468
  throw new GraphQLError(error.message, {
470
469
  originalError: error,
@@ -476,148 +475,151 @@ function errorHandler(error, data) {
476
475
  info: error.getInfo()
477
476
  }
478
477
  });
479
- } else {
480
- console.error(message, error);
481
- throw new GraphQLError(`${error.message} [${hash}]`, {
482
- // originalError: error,
483
- extensions: {
484
- isOrionError: false,
485
- isValidationError: false,
486
- code: "INTERNAL_SERVER_ERROR",
487
- hash
488
- }
489
- });
490
478
  }
479
+ console.error(message, error);
480
+ throw new GraphQLError(`${error.message} [${hash}]`, {
481
+ // originalError: error,
482
+ extensions: {
483
+ isOrionError: false,
484
+ isValidationError: false,
485
+ code: "INTERNAL_SERVER_ERROR",
486
+ hash
487
+ }
488
+ });
491
489
  }
492
- __name(errorHandler, "errorHandler");
493
490
 
494
491
  // src/buildSchema/getType/getTypeAsResolver.ts
495
- function getTypeAsResolver_default({ resolver: resolver4, getGraphQLType: getGraphQLType2, options, model }) {
496
- const type = getGraphQLType2(resolver4.returns, options);
497
- const args = getArgs_default(resolver4.params);
492
+ function getTypeAsResolver_default({ resolver: resolver2, getGraphQLType: getGraphQLType2, options, schema }) {
493
+ const type = getGraphQLType2(resolver2.returns, options);
494
+ const args = getArgs_default(resolver2.params);
498
495
  return {
499
496
  type,
500
497
  args,
501
498
  async resolve(item, params, context, info) {
502
499
  try {
503
- const result = await resolver4.resolve(item, params, context, info);
500
+ const result = await resolver2.resolve(item, params, context, info);
504
501
  return result;
505
502
  } catch (error) {
506
- errorHandler(error, {
507
- context,
508
- resolver: resolver4,
509
- options,
510
- model
511
- });
503
+ errorHandler(error, { context, resolver: resolver2, options, schema });
512
504
  throw error;
513
505
  }
514
506
  }
515
507
  };
516
508
  }
517
- __name(getTypeAsResolver_default, "default");
518
509
 
519
510
  // src/resolversSchemas/getDynamicFields.ts
520
- function getDynamicFields(model) {
521
- const resolvers = model.getResolvers();
511
+ function getResolvers(schema) {
512
+ if (typeof schema.getResolvers === "function") {
513
+ console.warn("Models are deprecated");
514
+ return schema.getResolvers();
515
+ }
516
+ if (schema.__resolvers) {
517
+ return schema.__resolvers;
518
+ }
519
+ return {};
520
+ }
521
+ function getDynamicFields(schema) {
522
+ const resolvers = getResolvers(schema);
522
523
  if (!resolvers) return [];
523
524
  const keys = Object.keys(resolvers);
524
525
  return keys.map((key) => {
525
- const resolver4 = resolvers[key];
526
+ const resolver2 = resolvers[key];
526
527
  return {
527
- ...resolver4,
528
+ ...resolver2,
528
529
  key
529
530
  };
530
- }).filter((resolver4) => !resolver4.private);
531
+ }).filter((resolver2) => !resolver2.private);
531
532
  }
532
- __name(getDynamicFields, "getDynamicFields");
533
533
 
534
534
  // src/resolversSchemas/getModelLoadedResolvers.ts
535
- function getModelLoadedResolvers(model, options) {
535
+ function getModelLoadedResolvers(schema, options) {
536
536
  if (!options.modelResolvers) return [];
537
- const resolvers = options.modelResolvers[model.name];
537
+ const resolvers = options.modelResolvers[schema.__modelName];
538
538
  if (!resolvers) return [];
539
539
  const keys = Object.keys(resolvers);
540
540
  return keys.map((key) => {
541
- const resolver4 = resolvers[key];
541
+ const resolver2 = resolvers[key];
542
542
  return {
543
- ...resolver4,
543
+ ...resolver2,
544
544
  key
545
545
  };
546
- }).filter((resolver4) => !resolver4.private);
546
+ }).filter((resolver2) => !resolver2.private);
547
547
  }
548
- __name(getModelLoadedResolvers, "getModelLoadedResolvers");
549
548
 
550
549
  // src/buildSchema/getType/index.ts
550
+ import { isEqual } from "lodash";
551
+ var createGraphQLObjectType = (modelName, schema, options) => new GraphQLObjectType({
552
+ name: modelName,
553
+ fields: () => buildFields(schema, options)
554
+ });
555
+ var buildFields = (schema, options) => {
556
+ const fields = {};
557
+ const addStaticFields = () => {
558
+ for (const field of getStaticFields(schema)) {
559
+ try {
560
+ fields[field.key] = field.graphQLResolver ? getTypeAsResolver_default({ resolver: field.graphQLResolver, getGraphQLType, options, schema }) : { type: getGraphQLType(field.type, options) };
561
+ } catch (error) {
562
+ throw new Error(`Error getting type for ${field.key}: ${error.message}`);
563
+ }
564
+ }
565
+ };
566
+ const addDynamicFields = () => {
567
+ for (const resolver2 of getDynamicFields(schema)) {
568
+ try {
569
+ fields[resolver2.key] = getTypeAsResolver_default({ resolver: resolver2, getGraphQLType, options, schema });
570
+ } catch (error) {
571
+ throw new Error(
572
+ `Error getting resolver type for resolver "${resolver2.key}": ${error.message}`
573
+ );
574
+ }
575
+ }
576
+ };
577
+ const addModelLoadedResolvers = () => {
578
+ for (const resolver2 of getModelLoadedResolvers(schema, options)) {
579
+ try {
580
+ fields[resolver2.key] = getTypeAsResolver_default({ resolver: resolver2, getGraphQLType, options, schema });
581
+ } catch (error) {
582
+ throw new Error(
583
+ `Error getting resolver type for resolver "${resolver2.key}": ${error.message}`
584
+ );
585
+ }
586
+ }
587
+ };
588
+ addStaticFields();
589
+ addDynamicFields();
590
+ addModelLoadedResolvers();
591
+ return fields;
592
+ };
593
+ var registeredGraphQLTypes = /* @__PURE__ */ new Map();
551
594
  function getGraphQLType(type, options) {
552
- if (!type) {
553
- throw new Error("Type is undefined");
554
- }
595
+ if (!type) throw new Error("Type is undefined");
555
596
  if (isArray2(type)) {
556
- const graphQLType = getGraphQLType(type[0], options);
557
- return new GraphQLList2(graphQLType);
558
- } else if (typeof type === "function" && type.getModel && type.__schemaId) {
559
- return getGraphQLType(type.getModel(), options);
560
- } else if (!type._isFieldType && (isPlainObject2(type) || type.__isModel)) {
561
- const model = type.__isModel ? type : type.__model;
562
- if (!model || !model.__isModel) throw new Error("Type is not a Model");
563
- if (model.graphQLType) return model.graphQLType;
564
- model.graphQLType = new GraphQLObjectType({
565
- name: model.name,
566
- fields: /* @__PURE__ */ __name(() => {
567
- const fields = {};
568
- for (const field of getStaticFields(model)) {
569
- try {
570
- if (field.graphQLResolver) {
571
- fields[field.key] = getTypeAsResolver_default({
572
- resolver: field.graphQLResolver,
573
- getGraphQLType,
574
- options,
575
- model
576
- });
577
- } else {
578
- fields[field.key] = {
579
- type: getGraphQLType(field.type, options)
580
- };
581
- }
582
- } catch (error) {
583
- throw new Error(`Error getting type for ${field.key} ${error.message}`);
584
- }
585
- }
586
- for (const resolver4 of getDynamicFields(model)) {
587
- try {
588
- fields[resolver4.key] = getTypeAsResolver_default({
589
- resolver: resolver4,
590
- getGraphQLType,
591
- options,
592
- model
593
- });
594
- } catch (error) {
595
- throw new Error(`Error getting resolver type for resolver "${resolver4.key}": ${error.message}`);
596
- }
597
- }
598
- for (const resolver4 of getModelLoadedResolvers(model, options)) {
599
- try {
600
- fields[resolver4.key] = getTypeAsResolver_default({
601
- resolver: resolver4,
602
- getGraphQLType,
603
- options,
604
- model
605
- });
606
- } catch (error) {
607
- throw new Error(`Error getting resolver type for resolver "${resolver4.key}": ${error.message}`);
608
- }
609
- }
610
- return fields;
611
- }, "fields")
612
- });
613
- return model.graphQLType;
614
- } else {
615
- const schemaType = getFieldType2(type);
616
- const graphQLType = getScalar_default(schemaType);
597
+ return new GraphQLList2(getGraphQLType(type[0], options));
598
+ }
599
+ if (isSchemaLike(type)) {
600
+ const schema = getSchemaWithMetadataFromAnyOrionForm(type);
601
+ const modelName = schema.__modelName;
602
+ if (schema.__graphQLType) {
603
+ return schema.__graphQLType;
604
+ }
605
+ if (!modelName) {
606
+ throw new Error(
607
+ `Schema name is not defined. Register a name with schemaWithName. Schema: ${JSON.stringify(schema)}`
608
+ );
609
+ }
610
+ if (registeredGraphQLTypes.has(modelName)) {
611
+ const { graphQLType: graphQLType2, schema: registeredSchema } = registeredGraphQLTypes.get(modelName);
612
+ if (isEqual(registeredSchema, schema)) {
613
+ return graphQLType2;
614
+ }
615
+ throw new Error(`Schema named "${modelName}" already registered`);
616
+ }
617
+ const graphQLType = createGraphQLObjectType(modelName, schema, options);
618
+ registeredGraphQLTypes.set(modelName, { schema, graphQLType });
617
619
  return graphQLType;
618
620
  }
621
+ return getScalar_default(getFieldType2(type));
619
622
  }
620
- __name(getGraphQLType, "getGraphQLType");
621
623
 
622
624
  // src/buildSchema/getResolvers/resolversStore.ts
623
625
  var resolversStore = {};
@@ -630,26 +632,21 @@ async function getResolvers_default(options, mutation) {
630
632
  name: key,
631
633
  resolver: resolvers[key]
632
634
  };
633
- }).filter(({ resolver: resolver4 }) => !!resolver4.mutation === !!mutation).filter(({ resolver: resolver4 }) => !resolver4.private);
635
+ }).filter(({ resolver: resolver2 }) => !!resolver2.mutation === !!mutation).filter(({ resolver: resolver2 }) => !resolver2.private);
634
636
  const fields = {};
635
- for (const { resolver: resolver4, name } of filteredResolvers) {
636
- resolversStore[name] = resolver4;
637
- const type = await getGraphQLType(resolver4.returns, options);
638
- const args = await getArgs_default(resolver4.params);
637
+ for (const { resolver: resolver2, name } of filteredResolvers) {
638
+ resolversStore[name] = resolver2;
639
+ const type = await getGraphQLType(resolver2.returns, options);
640
+ const args = await getArgs_default(resolver2.params);
639
641
  fields[name] = {
640
642
  type,
641
643
  args,
642
- async resolve(root, params, context, info) {
644
+ async resolve(_root, params, context, info) {
643
645
  try {
644
- const result = await resolver4.resolve(params, context, info);
646
+ const result = await resolver2.resolve(params, context, info);
645
647
  return result;
646
648
  } catch (error) {
647
- errorHandler(error, {
648
- context,
649
- resolver: resolver4,
650
- options,
651
- name
652
- });
649
+ errorHandler(error, { context, resolver: resolver2, options, name });
653
650
  throw error;
654
651
  }
655
652
  }
@@ -657,7 +654,6 @@ async function getResolvers_default(options, mutation) {
657
654
  }
658
655
  return fields;
659
656
  }
660
- __name(getResolvers_default, "default");
661
657
 
662
658
  // src/buildSchema/getQuery.ts
663
659
  import isEmpty from "lodash/isEmpty";
@@ -669,7 +665,6 @@ async function getQuery_default(options) {
669
665
  fields
670
666
  });
671
667
  }
672
- __name(getQuery_default, "default");
673
668
 
674
669
  // src/buildSchema/getMutation.ts
675
670
  import { GraphQLObjectType as GraphQLObjectType3 } from "graphql";
@@ -682,7 +677,6 @@ async function getMutation_default(options) {
682
677
  fields
683
678
  });
684
679
  }
685
- __name(getMutation_default, "default");
686
680
 
687
681
  // src/buildSchema/getSubscription.ts
688
682
  import { GraphQLObjectType as GraphQLObjectType4 } from "graphql";
@@ -706,7 +700,6 @@ async function getSubscriptions_default(options) {
706
700
  }
707
701
  return fields;
708
702
  }
709
- __name(getSubscriptions_default, "default");
710
703
 
711
704
  // src/buildSchema/getSubscription.ts
712
705
  async function getSubscription_default(options) {
@@ -717,27 +710,19 @@ async function getSubscription_default(options) {
717
710
  fields
718
711
  });
719
712
  }
720
- __name(getSubscription_default, "default");
721
713
 
722
714
  // src/buildSchema/index.ts
723
715
  async function buildSchema_default(options) {
724
716
  const query = await getQuery_default(options);
725
717
  const mutation = await getMutation_default(options);
726
718
  const subscription = await getSubscription_default(options);
727
- const schema = new GraphQLSchema({
728
- query,
729
- mutation,
730
- subscription
731
- });
719
+ const schema = new GraphQLSchema({ query, mutation, subscription });
732
720
  return schema;
733
721
  }
734
- __name(buildSchema_default, "default");
735
722
 
736
723
  // src/getApolloOptions/formatError.ts
737
724
  function formatError_default(apolloError) {
738
- let response = {
739
- ...apolloError
740
- };
725
+ let response = { ...apolloError };
741
726
  const error = apolloError.originalError;
742
727
  if (error && error.isValidationError) {
743
728
  response.validationErrors = error.validationErrors;
@@ -747,7 +732,6 @@ function formatError_default(apolloError) {
747
732
  }
748
733
  return response;
749
734
  }
750
- __name(formatError_default, "default");
751
735
 
752
736
  // src/getApolloOptions/index.ts
753
737
  import { omit } from "lodash";
@@ -768,7 +752,6 @@ async function getApolloOptions_default(options) {
768
752
  formatError: formatError_default
769
753
  };
770
754
  }
771
- __name(getApolloOptions_default, "default");
772
755
 
773
756
  // src/startWebsocket.ts
774
757
  import { PubSub } from "graphql-subscriptions";
@@ -777,7 +760,7 @@ import { useServer } from "graphql-ws/lib/use/ws";
777
760
 
778
761
  // src/websockerViewer.ts
779
762
  global.getWebsocketViewerRef = () => null;
780
- var getWebsockerViewer = /* @__PURE__ */ __name(async (connectionParams) => {
763
+ var getWebsockerViewer = async (connectionParams) => {
781
764
  try {
782
765
  const viewer = await global.getWebsocketViewerRef(connectionParams);
783
766
  if (!viewer) return {};
@@ -785,10 +768,10 @@ var getWebsockerViewer = /* @__PURE__ */ __name(async (connectionParams) => {
785
768
  } catch {
786
769
  return {};
787
770
  }
788
- }, "getWebsockerViewer");
789
- var setGetWebsockerViewer = /* @__PURE__ */ __name((getViewerFunc) => {
771
+ };
772
+ var setGetWebsockerViewer = (getViewerFunc) => {
790
773
  global.getWebsocketViewerRef = getViewerFunc;
791
- }, "setGetWebsockerViewer");
774
+ };
792
775
 
793
776
  // src/startWebsocket.ts
794
777
  import { getServer } from "@orion-js/http";
@@ -804,12 +787,15 @@ function startWebsocket_default(apolloOptions, options, wsServer) {
804
787
  path: "/subscriptions"
805
788
  });
806
789
  }
807
- const serverCleanup = useServer({
808
- schema: apolloOptions.schema,
809
- context: /* @__PURE__ */ __name(async (ctx, msg, args) => {
810
- return getWebsockerViewer(ctx.connectionParams);
811
- }, "context")
812
- }, wsServer);
790
+ const serverCleanup = useServer(
791
+ {
792
+ schema: apolloOptions.schema,
793
+ context: async (ctx, msg, args) => {
794
+ return getWebsockerViewer(ctx.connectionParams);
795
+ }
796
+ },
797
+ wsServer
798
+ );
813
799
  return [
814
800
  // Proper shutdown for the WebSocket server.
815
801
  {
@@ -823,7 +809,6 @@ function startWebsocket_default(apolloOptions, options, wsServer) {
823
809
  }
824
810
  ];
825
811
  }
826
- __name(startWebsocket_default, "default");
827
812
 
828
813
  // src/startGraphQL.ts
829
814
  import { getApp, getServer as getServer2, registerRoute as registerRoute2, route as route2 } from "@orion-js/http";
@@ -838,167 +823,156 @@ async function startGraphQL_default(options) {
838
823
  startGraphiQL_default(apolloOptions, options);
839
824
  }
840
825
  const subPlugins = startWebsocket_default(apolloOptions, options);
841
- const drainPlugins = httpServer ? [
842
- ApolloServerPluginDrainHttpServer({
843
- httpServer
844
- })
845
- ] : [];
826
+ const drainPlugins = httpServer ? [ApolloServerPluginDrainHttpServer({ httpServer })] : [];
846
827
  const server = new ApolloServer({
847
828
  ...apolloOptions,
848
- plugins: [
849
- ...apolloOptions.plugins || [],
850
- ...drainPlugins,
851
- ...subPlugins
852
- ]
829
+ plugins: [...apolloOptions.plugins || [], ...drainPlugins, ...subPlugins]
853
830
  });
854
831
  await server.start();
855
832
  const middleware = expressMiddleware(server, {
856
833
  // @ts-expect-error
857
- context: /* @__PURE__ */ __name(({ req, res }) => req._viewer, "context")
834
+ context: ({ req, res }) => req._viewer
858
835
  });
859
- registerRoute2(route2({
860
- app,
861
- method: "all",
862
- path: "/graphql",
863
- bodyParser: "json",
864
- async resolve(req, res, viewer) {
865
- req._viewer = viewer;
866
- return middleware(req, res, req.next);
867
- }
868
- }));
836
+ registerRoute2(
837
+ route2({
838
+ app,
839
+ method: "all",
840
+ path: "/graphql",
841
+ bodyParser: "json",
842
+ async resolve(req, res, viewer) {
843
+ ;
844
+ req._viewer = viewer;
845
+ return middleware(req, res, req.next);
846
+ }
847
+ })
848
+ );
869
849
  }
870
- __name(startGraphQL_default, "default");
871
850
 
872
851
  // src/resolversSchemas/params.ts
873
- import { resolver as resolver2 } from "@orion-js/resolvers";
852
+ import { createResolver } from "@orion-js/resolvers";
874
853
  import { UserError } from "@orion-js/helpers";
875
854
 
855
+ // src/resolversSchemas/ResolverParamsInfo.ts
856
+ import { schemaWithName } from "@orion-js/schema";
857
+ var ResolverParamsInfo_default = schemaWithName("ResolverParams", {
858
+ name: {
859
+ type: "string"
860
+ },
861
+ params: {
862
+ type: "blackbox"
863
+ },
864
+ result: {
865
+ type: "string"
866
+ },
867
+ basicResultQuery: {
868
+ type: "string"
869
+ }
870
+ });
871
+
872
+ // src/resolversSchemas/serializeSchema.ts
873
+ import { getSchemaFromAnyOrionForm } from "@orion-js/schema";
874
+
876
875
  // src/resolversSchemas/getField.ts
877
- import isPlainObject3 from "lodash/isPlainObject";
878
- import isArray3 from "lodash/isArray";
879
- import { getFieldType as getFieldType3 } from "@orion-js/schema";
876
+ import {
877
+ getFieldType as getFieldType3,
878
+ getSchemaWithMetadataFromAnyOrionForm as getSchemaWithMetadataFromAnyOrionForm2,
879
+ isSchemaLike as isSchemaLike2
880
+ } from "@orion-js/schema";
880
881
  import omit2 from "lodash/omit";
881
- async function getParams2(field) {
882
- let { type } = field;
883
- if (typeof type === "function" && type.getModel && type.__schemaId) {
884
- const model = type.getModel();
885
- return await getParams2({
886
- ...field,
887
- type: model
888
- });
889
- } else if (isArray3(type)) {
890
- const serialized = await getParams2({
891
- ...field,
892
- type: type[0]
893
- });
882
+ async function getParams(field) {
883
+ const { type } = field;
884
+ if (Array.isArray(type)) {
885
+ const serialized = await getParams({ ...field, type: type[0] });
894
886
  return {
895
887
  ...serialized,
896
- type: [
897
- serialized.type
898
- ],
888
+ type: [serialized.type],
899
889
  __graphQLType: `[${serialized.__graphQLType}]`
900
890
  };
901
- } else if (!type._isFieldType && (isPlainObject3(type) || type.__isModel)) {
902
- const model = type.__isModel ? type : type.__model;
903
- if (!model || !model.__isModel) throw new Error("Type is not a Model");
891
+ }
892
+ const isSchema = isSchemaLike2(type);
893
+ if (isSchema) {
894
+ const schemaOfType = getSchemaWithMetadataFromAnyOrionForm2(type);
895
+ const modelName = schemaOfType.__modelName;
896
+ if (!modelName) {
897
+ throw new Error("The schema needs a model name to be serialized for GraphQL");
898
+ }
904
899
  const fields = {};
905
- for (const field2 of getStaticFields(model)) {
906
- fields[field2.key] = await getParams2(field2);
900
+ for (const field2 of getStaticFields(schemaOfType)) {
901
+ fields[field2.key] = await getParams(field2);
907
902
  }
908
903
  return {
909
904
  ...omit2(field, "key"),
910
905
  type: fields,
911
- __graphQLType: model.name + "Input"
912
- };
913
- } else {
914
- const schemaType = await getFieldType3(type);
915
- const graphQLType = await getScalar_default(schemaType);
916
- return {
917
- ...omit2(field, "key"),
918
- type: schemaType.name,
919
- __graphQLType: graphQLType.name
906
+ __graphQLType: `${modelName}Input`
920
907
  };
921
908
  }
909
+ const schemaType = getFieldType3(type);
910
+ const graphQLType = await getScalar_default(schemaType);
911
+ return {
912
+ ...omit2(field, "key"),
913
+ type: schemaType.name,
914
+ __graphQLType: graphQLType.name
915
+ };
922
916
  }
923
- __name(getParams2, "getParams");
924
917
 
925
918
  // src/resolversSchemas/serializeSchema.ts
919
+ Symbol.metadata ?? (Symbol.metadata = Symbol("Symbol.metadata"));
926
920
  async function serializeSchema(params) {
927
921
  if (!params) return;
928
- if (typeof params === "function" && params.getModel && params.__schemaId) {
929
- params = params.getModel().getCleanSchema();
930
- }
931
- if (Object.keys(params).length === 0) return;
922
+ const schema = getSchemaFromAnyOrionForm(params);
923
+ if (Object.keys(schema).length === 0) return;
932
924
  const fields = {};
933
- for (const key of Object.keys(params)) {
934
- const field = params[key];
935
- fields[key] = await getParams2(field);
925
+ for (const key of Object.keys(schema).filter((key2) => !key2.startsWith("__"))) {
926
+ const field = schema[key];
927
+ fields[key] = await getParams(field);
936
928
  }
937
929
  return fields;
938
930
  }
939
- __name(serializeSchema, "serializeSchema");
931
+
932
+ // src/resolversSchemas/params.ts
933
+ import { getSchemaFromAnyOrionForm as getSchemaFromAnyOrionForm3, isSchemaLike as isSchemaLike4 } from "@orion-js/schema";
940
934
 
941
935
  // src/resolversSchemas/getBasicResultQuery.ts
942
- import isArray4 from "lodash/isArray";
936
+ import isArray3 from "lodash/isArray";
937
+ import { getSchemaFromAnyOrionForm as getSchemaFromAnyOrionForm2, isSchemaLike as isSchemaLike3 } from "@orion-js/schema";
943
938
  async function getBasicQuery(field) {
944
939
  if (!field.type) return "";
945
- if (isArray4(field.type) && field.type[0].__model || field.type.__model) {
946
- const model = isArray4(field.type) ? field.type[0].__model : field.type.__model;
947
- const fields = [];
948
- for (const field2 of getStaticFields(model)) {
949
- fields.push(await getBasicQuery(field2));
950
- }
951
- const key = field.key ? `${field.key} ` : "";
952
- return `${key}{ ${fields.join(" ")} }`;
953
- } else {
940
+ if (isArray3(field.type)) {
941
+ return getBasicQuery({
942
+ ...field,
943
+ type: field.type[0]
944
+ });
945
+ }
946
+ if (!isSchemaLike3(field.type)) {
954
947
  return field.key;
955
948
  }
956
- }
957
- __name(getBasicQuery, "getBasicQuery");
958
-
959
- // src/resolversSchemas/ResolverParamsInfo.ts
960
- import { createModel } from "@orion-js/models";
961
- import { resolver } from "@orion-js/resolvers";
962
- import { isArray as isArray5 } from "lodash";
963
- var resolverReturnsIsModel = /* @__PURE__ */ __name((returns) => {
964
- return returns && returns.__isModel;
965
- }, "resolverReturnsIsModel");
966
- var ResolverParamsInfo_default = createModel({
967
- name: "ResolverParams",
968
- schema: {
969
- name: {
970
- type: String
971
- }
972
- },
973
- resolvers: {
974
- params: resolver({
975
- returns: "blackbox",
976
- resolve: /* @__PURE__ */ __name(async function({ resolver: resolver4 }) {
977
- return await serializeSchema(resolver4.params);
978
- }, "resolve")
979
- }),
980
- result: resolver({
981
- returns: String,
982
- resolve: /* @__PURE__ */ __name(async function({ resolver: resolver4 }) {
983
- const returns = isArray5(resolver4.returns) ? resolver4.returns[0] : resolver4.returns;
984
- if (resolverReturnsIsModel(returns)) return returns.name;
985
- return;
986
- }, "resolve")
987
- }),
988
- basicResultQuery: resolver({
989
- returns: String,
990
- resolve: /* @__PURE__ */ __name(async function({ resolver: resolver4 }) {
991
- const returns = isArray5(resolver4.returns) ? resolver4.returns[0] : resolver4.returns;
992
- return await getBasicQuery({
993
- type: resolverReturnsIsModel(returns) ? returns.getSchema() : ""
994
- });
995
- }, "resolve")
996
- })
949
+ const schema = getSchemaFromAnyOrionForm2(field.type);
950
+ const fields = [];
951
+ for (const field2 of getStaticFields(schema)) {
952
+ fields.push(await getBasicQuery(field2));
997
953
  }
998
- });
954
+ const key = field.key ? `${field.key} ` : "";
955
+ return `${key}{ ${fields.join(" ")} }`;
956
+ }
999
957
 
1000
958
  // src/resolversSchemas/params.ts
1001
- var params_default = resolver2({
959
+ function getResultTypeName(type) {
960
+ const returns = Array.isArray(type) ? type[0] : type;
961
+ const schema = getSchemaFromAnyOrionForm3(returns);
962
+ if (schema == null ? void 0 : schema.__modelName) return schema.__modelName;
963
+ return;
964
+ }
965
+ async function getInternalBasicResultQuery(type) {
966
+ const returns = Array.isArray(type) ? type[0] : type;
967
+ if (isSchemaLike4(returns)) {
968
+ const schema = getSchemaFromAnyOrionForm3(returns);
969
+ return await getBasicQuery({
970
+ type: schema
971
+ });
972
+ }
973
+ return "";
974
+ }
975
+ var params_default = createResolver({
1002
976
  params: {
1003
977
  name: {
1004
978
  type: "ID"
@@ -1009,19 +983,24 @@ var params_default = resolver2({
1009
983
  },
1010
984
  returns: ResolverParamsInfo_default,
1011
985
  mutation: false,
1012
- resolve: /* @__PURE__ */ __name(async function({ mutation, name }, viewer) {
1013
- const resolver4 = resolversStore[name];
1014
- if (!resolver4) {
1015
- throw new UserError("notFound", `${mutation ? "Mutation" : "Query"} named "${name}" not found`);
986
+ async resolve({ mutation, name }) {
987
+ const resolver2 = resolversStore[name];
988
+ if (!resolver2) {
989
+ throw new UserError(
990
+ "notFound",
991
+ `${mutation ? "Mutation" : "Query"} named "${name}" not found`
992
+ );
1016
993
  }
1017
- if (!!resolver4.mutation !== !!mutation) {
994
+ if (!!resolver2.mutation !== !!mutation) {
1018
995
  throw new UserError("incorrectType", `"${name}" is ${mutation ? "not" : ""} a mutation`);
1019
996
  }
1020
997
  return {
1021
- resolver: resolver4,
1022
- name
998
+ name,
999
+ basicResultQuery: await getInternalBasicResultQuery(resolver2.returns),
1000
+ params: await serializeSchema(resolver2.params),
1001
+ result: getResultTypeName(resolver2.returns)
1023
1002
  };
1024
- }, "resolve")
1003
+ }
1025
1004
  });
1026
1005
 
1027
1006
  // src/resolversSchemas/index.ts
@@ -1033,183 +1012,224 @@ var resolversSchemas_default = {
1033
1012
  import * as GraphQL2 from "graphql";
1034
1013
 
1035
1014
  // src/types/subscription.ts
1036
- var _OrionSubscription = class _OrionSubscription {
1015
+ var OrionSubscription = class {
1037
1016
  name;
1038
1017
  params;
1039
1018
  subscribe;
1040
1019
  returns;
1041
1020
  publish;
1042
1021
  };
1043
- __name(_OrionSubscription, "OrionSubscription");
1044
- var OrionSubscription = _OrionSubscription;
1045
1022
 
1046
1023
  // src/service/global.ts
1047
1024
  import { getInstance, Service } from "@orion-js/services";
1048
- import { resolver as resolver3 } from "@orion-js/resolvers";
1049
- import { UserError as UserError2 } from "@orion-js/helpers";
1025
+ import { resolver } from "@orion-js/resolvers";
1050
1026
 
1051
- // src/service/otherParams.ts
1052
- function createRegisterResolverMetadata(metadataKey, isArray6 = false) {
1053
- return (metadata) => {
1054
- return (target, propertyKey, descriptor) => {
1055
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1056
- target[metadataKey] = target[metadataKey] || {};
1057
- if (isArray6) {
1058
- target[metadataKey][propertyKey] = target[metadataKey][propertyKey] || [];
1059
- target[metadataKey][propertyKey].unshift(metadata);
1060
- } else {
1061
- target[metadataKey][propertyKey] = metadata;
1062
- }
1063
- };
1064
- };
1027
+ // src/service/middlewares.ts
1028
+ var resolversMetadata = /* @__PURE__ */ new WeakMap();
1029
+ function addTargetMetadata(target, propertyKey, metadataKey, metadata, isArray4 = false) {
1030
+ const targetMetadata = resolversMetadata.get(target) || {};
1031
+ targetMetadata[propertyKey] = targetMetadata[propertyKey] || {};
1032
+ if (isArray4) {
1033
+ targetMetadata[propertyKey][metadataKey] = targetMetadata[propertyKey][metadataKey] || [];
1034
+ targetMetadata[propertyKey][metadataKey].unshift(metadata);
1035
+ } else {
1036
+ targetMetadata[propertyKey][metadataKey] = metadata;
1037
+ }
1038
+ resolversMetadata.set(target, targetMetadata);
1065
1039
  }
1066
- __name(createRegisterResolverMetadata, "createRegisterResolverMetadata");
1067
1040
  function getTargetMetadata(target, propertyKey, metadataKey) {
1068
- const items = target[metadataKey] || {};
1069
- return items[propertyKey] || [];
1041
+ var _a;
1042
+ const targetMetadata = resolversMetadata.get(target) || {};
1043
+ return (_a = targetMetadata[propertyKey]) == null ? void 0 : _a[metadataKey];
1044
+ }
1045
+ function UseMiddleware(params) {
1046
+ return (method, context) => {
1047
+ const propertyKey = String(context.name);
1048
+ addTargetMetadata(method, propertyKey, "middlewares", params, true);
1049
+ return method;
1050
+ };
1051
+ }
1052
+ function ResolverParams(params) {
1053
+ return (method, context) => {
1054
+ const propertyKey = String(context.name);
1055
+ addTargetMetadata(method, propertyKey, "params", params, false);
1056
+ return method;
1057
+ };
1058
+ }
1059
+ function ResolverReturns(returns) {
1060
+ return (method, context) => {
1061
+ const propertyKey = String(context.name);
1062
+ addTargetMetadata(method, propertyKey, "returns", returns, false);
1063
+ return method;
1064
+ };
1070
1065
  }
1071
- __name(getTargetMetadata, "getTargetMetadata");
1072
- var UseMiddleware = createRegisterResolverMetadata("middlewares", true);
1073
- var ResolverParams = createRegisterResolverMetadata("params");
1074
- var ResolverReturns = createRegisterResolverMetadata("returns");
1075
1066
 
1076
1067
  // src/service/global.ts
1068
+ var serviceMetadata = /* @__PURE__ */ new WeakMap();
1069
+ var resolversMetadata2 = /* @__PURE__ */ new WeakMap();
1077
1070
  function Resolvers() {
1078
- return (target) => {
1079
- Service()(target);
1080
- target.prototype.service = target;
1071
+ return (target, context) => {
1072
+ Service()(target, context);
1073
+ context.addInitializer(function() {
1074
+ serviceMetadata.set(this, { _serviceType: "resolvers" });
1075
+ });
1081
1076
  };
1082
1077
  }
1083
- __name(Resolvers, "Resolvers");
1084
- function Query(options) {
1085
- return (target, propertyKey, descriptor) => {
1086
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1087
- target.resolvers = target.resolvers || {};
1088
- target.resolvers[propertyKey] = resolver3({
1089
- resolverId: propertyKey,
1090
- params: getTargetMetadata(target, propertyKey, "params"),
1091
- returns: getTargetMetadata(target, propertyKey, "returns"),
1092
- middlewares: getTargetMetadata(target, propertyKey, "middlewares"),
1093
- ...options,
1094
- resolve: /* @__PURE__ */ __name(async (params, viewer, info) => {
1095
- const instance = getInstance(target.service);
1096
- return await instance[propertyKey](params, viewer, info);
1097
- }, "resolve")
1078
+ function Query(options = {}) {
1079
+ return (method, context) => {
1080
+ const propertyKey = String(context.name);
1081
+ context.addInitializer(function() {
1082
+ const resolvers = resolversMetadata2.get(this) || {};
1083
+ resolvers[propertyKey] = resolver({
1084
+ resolverId: propertyKey,
1085
+ params: getTargetMetadata(method, propertyKey, "params") || {},
1086
+ returns: getTargetMetadata(method, propertyKey, "returns") || "string",
1087
+ middlewares: getTargetMetadata(method, propertyKey, "middlewares") || [],
1088
+ ...options,
1089
+ resolve: this[propertyKey].bind(this)
1090
+ });
1091
+ resolversMetadata2.set(this, resolvers);
1098
1092
  });
1093
+ return method;
1099
1094
  };
1100
1095
  }
1101
- __name(Query, "Query");
1102
1096
  function Mutation(options) {
1103
- return (target, propertyKey, descriptor) => {
1104
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1105
- target.resolvers = target.resolvers || {};
1106
- target.resolvers[propertyKey] = resolver3({
1107
- resolverId: propertyKey,
1108
- params: getTargetMetadata(target, propertyKey, "params"),
1109
- returns: getTargetMetadata(target, propertyKey, "returns"),
1110
- middlewares: getTargetMetadata(target, propertyKey, "middlewares"),
1111
- ...options,
1112
- mutation: true,
1113
- resolve: /* @__PURE__ */ __name(async (params, viewer, info) => {
1114
- const instance = getInstance(target.service);
1115
- return await instance[propertyKey](params, viewer, info);
1116
- }, "resolve")
1097
+ return (method, context) => {
1098
+ const propertyKey = String(context.name);
1099
+ context.addInitializer(function() {
1100
+ const resolvers = resolversMetadata2.get(this) || {};
1101
+ resolvers[propertyKey] = resolver({
1102
+ resolverId: propertyKey,
1103
+ params: getTargetMetadata(method, propertyKey, "params") || {},
1104
+ returns: getTargetMetadata(method, propertyKey, "returns") || "string",
1105
+ middlewares: getTargetMetadata(method, propertyKey, "middlewares") || [],
1106
+ ...options,
1107
+ mutation: true,
1108
+ resolve: this[propertyKey].bind(this)
1109
+ });
1110
+ resolversMetadata2.set(this, resolvers);
1117
1111
  });
1112
+ return method;
1118
1113
  };
1119
1114
  }
1120
- __name(Mutation, "Mutation");
1121
1115
  function getServiceResolvers(target) {
1122
- if (!target.prototype) {
1123
- throw new UserError2("You must pass a class to getResolvers");
1116
+ const instance = getInstance(target);
1117
+ if (!serviceMetadata.has(instance.constructor)) {
1118
+ throw new Error("You must pass a class decorated with @Resolvers to getServiceResolvers");
1119
+ }
1120
+ const instanceMetadata = serviceMetadata.get(instance.constructor);
1121
+ if (instanceMetadata._serviceType !== "resolvers") {
1122
+ throw new Error("You must pass a class decorated with @Resolvers to getServiceResolvers");
1124
1123
  }
1125
- return target.prototype.resolvers || {};
1124
+ const resolversMap = resolversMetadata2.get(instance) || {};
1125
+ return resolversMap;
1126
1126
  }
1127
- __name(getServiceResolvers, "getServiceResolvers");
1128
1127
 
1129
1128
  // src/service/model.ts
1130
1129
  import { getInstance as getInstance2, Service as Service2 } from "@orion-js/services";
1131
- import { modelResolver } from "@orion-js/resolvers";
1132
- import { UserError as UserError3 } from "@orion-js/helpers";
1133
- function ModelResolver(options) {
1134
- return (target, propertyKey, descriptor) => {
1135
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1136
- target.resolvers = target.resolvers || {};
1137
- target.resolvers[propertyKey] = modelResolver({
1138
- params: getTargetMetadata(target, propertyKey, "params"),
1139
- returns: getTargetMetadata(target, propertyKey, "returns"),
1140
- middlewares: getTargetMetadata(target, propertyKey, "middlewares"),
1141
- ...options,
1142
- resolve: /* @__PURE__ */ __name(async (item, params, viewer, info) => {
1143
- const instance = getInstance2(target.service);
1144
- return await instance[propertyKey](item, params, viewer, info);
1145
- }, "resolve")
1130
+ import {
1131
+ modelResolver
1132
+ } from "@orion-js/resolvers";
1133
+ var serviceMetadata2 = /* @__PURE__ */ new WeakMap();
1134
+ var modelResolversMetadata = /* @__PURE__ */ new WeakMap();
1135
+ function ModelResolvers(typedSchema, options = {}) {
1136
+ return (target, context) => {
1137
+ Service2()(target, context);
1138
+ const modelName = options.modelName || typedSchema.name;
1139
+ context.addInitializer(function() {
1140
+ serviceMetadata2.set(this, {
1141
+ _serviceType: "modelResolvers",
1142
+ options,
1143
+ _typedSchema: typedSchema,
1144
+ _modelName: modelName
1145
+ });
1146
1146
  });
1147
1147
  };
1148
1148
  }
1149
- __name(ModelResolver, "ModelResolver");
1150
- function ModelResolvers(typedSchema, options = {}) {
1151
- return (target) => {
1152
- Service2()(target);
1153
- target.prototype.modelName = options.modelName || typedSchema.name;
1154
- if (!target.prototype.modelName) {
1155
- throw new Error("The specified model has no name or is not a model");
1156
- }
1157
- target.prototype.typedSchema = typedSchema;
1158
- target.prototype.service = target;
1159
- target.getModel = () => getModelForClass(target);
1149
+ function ModelResolver(options) {
1150
+ return (method, context) => {
1151
+ const propertyKey = String(context.name);
1152
+ context.addInitializer(function() {
1153
+ const modelResolvers = modelResolversMetadata.get(this) || {};
1154
+ modelResolvers[propertyKey] = modelResolver({
1155
+ params: getTargetMetadata(method, propertyKey, "params") || {},
1156
+ returns: getTargetMetadata(method, propertyKey, "returns") || "string",
1157
+ middlewares: getTargetMetadata(method, propertyKey, "middlewares") || [],
1158
+ ...options,
1159
+ resolve: this[propertyKey].bind(this)
1160
+ });
1161
+ modelResolversMetadata.set(this, modelResolvers);
1162
+ });
1163
+ return method;
1160
1164
  };
1161
1165
  }
1162
- __name(ModelResolvers, "ModelResolvers");
1163
1166
  function getServiceModelResolvers(target) {
1164
- if (!target.prototype) {
1165
- throw new UserError3("You must pass a class to getResolvers");
1167
+ const instance = getInstance2(target);
1168
+ if (!serviceMetadata2.has(instance.constructor)) {
1169
+ throw new Error(
1170
+ "You must pass a class decorated with @ModelResolvers to getServiceModelResolvers"
1171
+ );
1172
+ }
1173
+ const instanceMetadata = serviceMetadata2.get(instance.constructor);
1174
+ if (instanceMetadata._serviceType !== "modelResolvers") {
1175
+ throw new Error(
1176
+ "You must pass a class decorated with @ModelResolvers to getServiceModelResolvers"
1177
+ );
1166
1178
  }
1179
+ const modelResolversMap = modelResolversMetadata.get(instance) || {};
1167
1180
  return {
1168
- [target.prototype.modelName]: target.prototype.resolvers || {}
1181
+ [instanceMetadata._modelName]: modelResolversMap
1169
1182
  };
1170
1183
  }
1171
- __name(getServiceModelResolvers, "getServiceModelResolvers");
1172
1184
 
1173
1185
  // src/service/subscription.ts
1174
- import { Container, Service as Service3 } from "@orion-js/services";
1175
- import { UserError as UserError4 } from "@orion-js/helpers";
1186
+ import { getInstance as getInstance3, Service as Service3 } from "@orion-js/services";
1187
+ var serviceMetadata3 = /* @__PURE__ */ new WeakMap();
1188
+ var subscriptionsMetadata = /* @__PURE__ */ new WeakMap();
1176
1189
  function Subscriptions() {
1177
- return (target) => {
1178
- Service3()(target);
1179
- target.prototype.service = target;
1180
- target.prototype.serviceType = "subscriptions";
1190
+ return (target, context) => {
1191
+ Service3()(target, context);
1192
+ context.addInitializer(function() {
1193
+ serviceMetadata3.set(this, { _serviceType: "subscriptions" });
1194
+ });
1181
1195
  };
1182
1196
  }
1183
- __name(Subscriptions, "Subscriptions");
1184
1197
  function Subscription(options) {
1185
- return (object, propertyName, index) => {
1186
- const sub = subscription_default({
1187
- name: propertyName,
1188
- ...options
1189
- });
1190
- object.subscriptions = object.subscriptions || {};
1191
- object.subscriptions[propertyName] = sub;
1192
- Container.registerHandler({
1193
- object,
1194
- propertyName,
1195
- index,
1196
- value: /* @__PURE__ */ __name((_containerInstance) => {
1197
- if (!object.serviceType || object.serviceType !== "subscriptions") {
1198
- throw new Error("You must pass a class decorated with @Subscriptions if you want to use @Subscription");
1199
- }
1200
- return sub;
1201
- }, "value")
1198
+ return (_target, context) => {
1199
+ const propertyKey = String(context.name);
1200
+ context.addInitializer(function() {
1201
+ const repo = serviceMetadata3.get(this.constructor);
1202
+ if (!repo || repo._serviceType !== "subscriptions") {
1203
+ throw new Error(
1204
+ "You must pass a class decorated with @Subscriptions if you want to use @Subscription"
1205
+ );
1206
+ }
1207
+ const subscriptions = subscriptionsMetadata.get(this) || {};
1208
+ subscriptions[propertyKey] = subscription_default({
1209
+ name: propertyKey,
1210
+ ...options
1211
+ });
1212
+ subscriptionsMetadata.set(this, subscriptions);
1213
+ this[propertyKey] = subscriptions[propertyKey];
1202
1214
  });
1203
1215
  };
1204
1216
  }
1205
- __name(Subscription, "Subscription");
1206
1217
  function getServiceSubscriptions(target) {
1207
- if (!target.prototype) {
1208
- throw new UserError4("You must pass a class to getSubscriptions");
1218
+ const instance = getInstance3(target);
1219
+ if (!serviceMetadata3.has(instance.constructor)) {
1220
+ throw new Error(
1221
+ "You must pass a class decorated with @Subscriptions to getServiceSubscriptions"
1222
+ );
1223
+ }
1224
+ const instanceMetadata = serviceMetadata3.get(instance.constructor);
1225
+ if (instanceMetadata._serviceType !== "subscriptions") {
1226
+ throw new Error(
1227
+ "You must pass a class decorated with @Subscriptions to getServiceSubscriptions"
1228
+ );
1209
1229
  }
1210
- return target.prototype.subscriptions || {};
1230
+ const subscriptionsMap = subscriptionsMetadata.get(instance) || {};
1231
+ return subscriptionsMap;
1211
1232
  }
1212
- __name(getServiceSubscriptions, "getServiceSubscriptions");
1213
1233
  export {
1214
1234
  GraphQL2 as GraphQL,
1215
1235
  ModelResolver,