@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.cjs CHANGED
@@ -4,7 +4,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
7
  var __export = (target, all) => {
9
8
  for (var name in all)
10
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -60,12 +59,12 @@ module.exports = __toCommonJS(index_exports);
60
59
 
61
60
  // src/pubsub.ts
62
61
  var pubsub = null;
63
- var setPubsub = /* @__PURE__ */ __name(function(newPubsub) {
62
+ var setPubsub = function(newPubsub) {
64
63
  pubsub = newPubsub;
65
- }, "setPubsub");
66
- var getPubsub = /* @__PURE__ */ __name(function() {
64
+ };
65
+ var getPubsub = function() {
67
66
  return pubsub;
68
- }, "getPubsub");
67
+ };
69
68
 
70
69
  // src/subscription/getChannelName.ts
71
70
  var import_helpers = require("@orion-js/helpers");
@@ -74,29 +73,22 @@ function getChannelName_default(name, params) {
74
73
  const channelName = `${name}_${hash}`;
75
74
  return channelName;
76
75
  }
77
- __name(getChannelName_default, "default");
78
76
 
79
77
  // src/subscription/index.ts
80
78
  var import_resolvers = require("@orion-js/resolvers");
81
- var createSubscription = /* @__PURE__ */ __name(function(options) {
79
+ var createSubscription = function(options) {
82
80
  const subscription = {
83
81
  name: options.name
84
82
  };
85
83
  subscription.publish = async (params, data) => {
86
84
  const pubsub2 = getPubsub();
87
85
  const channelName = getChannelName_default(subscription.name, params);
88
- await pubsub2.publish(channelName, {
89
- [subscription.name]: data
90
- });
86
+ await pubsub2.publish(channelName, { [subscription.name]: data });
91
87
  };
92
88
  subscription.subscribe = async (params, viewer) => {
93
89
  const pubsub2 = getPubsub();
94
90
  try {
95
- await (0, import_resolvers.checkPermissions)({
96
- params,
97
- viewer,
98
- options: null
99
- }, options);
91
+ await (0, import_resolvers.checkPermissions)({ params, viewer, options: null }, options);
100
92
  const channelName = getChannelName_default(subscription.name, params);
101
93
  return pubsub2.asyncIterator(channelName);
102
94
  } catch (error) {
@@ -106,7 +98,7 @@ var createSubscription = /* @__PURE__ */ __name(function(options) {
106
98
  subscription.params = (0, import_resolvers.cleanParams)(options.params);
107
99
  subscription.returns = (0, import_resolvers.cleanReturns)(options.returns);
108
100
  return subscription;
109
- }, "createSubscription");
101
+ };
110
102
  var subscription_default = createSubscription;
111
103
 
112
104
  // src/startGraphiQL.ts
@@ -114,8 +106,7 @@ var import_http = require("@orion-js/http");
114
106
  function safeSerialize(data) {
115
107
  return data ? JSON.stringify(data).replace(/\//g, "\\/") : null;
116
108
  }
117
- __name(safeSerialize, "safeSerialize");
118
- var getHTML = /* @__PURE__ */ __name(function(apolloOptions, options, data) {
109
+ var getHTML = function(apolloOptions, options, data) {
119
110
  const GRAPHIQL_VERSION = "0.11.11";
120
111
  const endpointURL = "/graphql";
121
112
  const subscriptionsEndpoint = "/subscriptions";
@@ -296,19 +287,20 @@ var getHTML = /* @__PURE__ */ __name(function(apolloOptions, options, data) {
296
287
  </script>
297
288
  </body>
298
289
  </html>`;
299
- }, "getHTML");
290
+ };
300
291
  function startGraphiQL_default(apolloOptions, options) {
301
- (0, import_http.registerRoute)((0, import_http.route)({
302
- path: "/graphiql",
303
- method: "get",
304
- async resolve(req) {
305
- return {
306
- body: getHTML(apolloOptions, options, req.query)
307
- };
308
- }
309
- }));
292
+ (0, import_http.registerRoute)(
293
+ (0, import_http.route)({
294
+ path: "/graphiql",
295
+ method: "get",
296
+ async resolve(req) {
297
+ return {
298
+ body: getHTML(apolloOptions, options, req.query)
299
+ };
300
+ }
301
+ })
302
+ );
310
303
  }
311
- __name(startGraphiQL_default, "default");
312
304
 
313
305
  // src/buildSchema/index.ts
314
306
  var import_graphql10 = require("graphql");
@@ -317,7 +309,6 @@ var import_graphql10 = require("graphql");
317
309
  var import_graphql7 = require("graphql");
318
310
 
319
311
  // src/buildSchema/getType/index.ts
320
- var import_isPlainObject2 = __toESM(require("lodash/isPlainObject"), 1);
321
312
  var import_isArray2 = __toESM(require("lodash/isArray"), 1);
322
313
  var import_graphql6 = require("graphql");
323
314
  var import_schema2 = require("@orion-js/schema");
@@ -326,7 +317,7 @@ var import_schema2 = require("@orion-js/schema");
326
317
  var import_graphql = require("graphql");
327
318
  var MAX_INT = Number.MAX_SAFE_INTEGER;
328
319
  var MIN_INT = Number.MIN_SAFE_INTEGER;
329
- var coerceBigInt = /* @__PURE__ */ __name(function coerceBigInt2(value) {
320
+ var coerceBigInt = function coerceBigInt2(value) {
330
321
  if (value === "") {
331
322
  throw new TypeError("BigInt cannot represent non 53-bit signed integer value: (empty string)");
332
323
  }
@@ -339,7 +330,7 @@ var coerceBigInt = /* @__PURE__ */ __name(function coerceBigInt2(value) {
339
330
  throw new TypeError("BigInt cannot represent non-integer value: " + String(value));
340
331
  }
341
332
  return int;
342
- }, "coerceBigInt");
333
+ };
343
334
  var BigIntScalar_default = new import_graphql.GraphQLScalarType({
344
335
  name: "BigInt",
345
336
  description: "The `BigInt` scalar type represents non-fractional signed whole numeric values. BigInt can represent values between -(2^53) + 1 and 2^53 - 1. ",
@@ -371,7 +362,6 @@ var import_graphql3 = require("graphql");
371
362
  function identity(value) {
372
363
  return value;
373
364
  }
374
- __name(identity, "identity");
375
365
  function parseLiteral(ast, variables) {
376
366
  switch (ast.kind) {
377
367
  case import_graphql3.Kind.STRING:
@@ -399,7 +389,6 @@ function parseLiteral(ast, variables) {
399
389
  return void 0;
400
390
  }
401
391
  }
402
- __name(parseLiteral, "parseLiteral");
403
392
  var JSONScalar_default = new import_graphql3.GraphQLScalarType({
404
393
  name: "JSON",
405
394
  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).",
@@ -435,7 +424,6 @@ function getScalar_default(fieldType) {
435
424
  }
436
425
  throw new Error(`Field type "${fieldType.name}" has no convertion to GraphQLType`);
437
426
  }
438
- __name(getScalar_default, "default");
439
427
 
440
428
  // src/buildSchema/getArgs/getField.ts
441
429
  var import_isPlainObject = __toESM(require("lodash/isPlainObject"), 1);
@@ -444,9 +432,11 @@ var import_graphql4 = require("graphql");
444
432
  var import_schema = require("@orion-js/schema");
445
433
 
446
434
  // src/resolversSchemas/getStaticFields.ts
447
- function getStaticFields(model) {
448
- const schema = model.getSchema();
435
+ function getStaticFields(schema) {
449
436
  if (!schema) return [];
437
+ if (schema.getSchema) {
438
+ schema = schema.getSchema();
439
+ }
450
440
  const keys = Object.keys(schema).filter((key) => !key.startsWith("__"));
451
441
  return keys.map((key) => {
452
442
  const field = schema[key];
@@ -456,72 +446,75 @@ function getStaticFields(model) {
456
446
  };
457
447
  }).filter((field) => !field.private);
458
448
  }
459
- __name(getStaticFields, "getStaticFields");
460
449
 
461
450
  // src/buildSchema/getArgs/getField.ts
451
+ Symbol.metadata ?? (Symbol.metadata = Symbol("Symbol.metadata"));
462
452
  var storedModelInput = {};
463
- var getModelInput = /* @__PURE__ */ __name(function(model, fields) {
464
- if (storedModelInput[model.name]) {
465
- return storedModelInput[model.name];
453
+ var getCachedModelInput = (model, fields) => {
454
+ if (!storedModelInput[model.name]) {
455
+ storedModelInput[model.name] = new import_graphql4.GraphQLInputObjectType({
456
+ name: `${model.name}Input`,
457
+ fields
458
+ });
466
459
  }
467
- storedModelInput[model.name] = new import_graphql4.GraphQLInputObjectType({
468
- name: model.name + "Input",
469
- fields
470
- });
471
460
  return storedModelInput[model.name];
472
- }, "getModelInput");
473
- function getParams(type) {
474
- if (!type) {
475
- throw new Error(`No type specified`);
461
+ };
462
+ var resolveModelFields = (model) => {
463
+ const fields = {};
464
+ for (const field of getStaticFields(model)) {
465
+ fields[field.key] = { type: resolveType(field.type) };
476
466
  }
477
- if ((0, import_isArray.default)(type)) {
478
- const graphQLType = getParams(type[0]);
479
- return new import_graphql4.GraphQLList(graphQLType);
480
- } else if (!type._isFieldType && ((0, import_isPlainObject.default)(type) || type.__isModel)) {
481
- const model = type.__isModel ? type : type.__model;
482
- if (!model || !model.__isModel) throw new Error(`A type is not a Model`);
483
- const fields = {};
484
- for (const field of getStaticFields(model)) {
485
- fields[field.key] = {
486
- type: getParams(field.type)
487
- };
488
- }
489
- return getModelInput(model, fields);
490
- } else {
491
- const schemaType = (0, import_schema.getFieldType)(type);
492
- const graphQLType = getScalar_default(schemaType);
493
- return graphQLType;
467
+ return fields;
468
+ };
469
+ var resolveArrayType = (type) => new import_graphql4.GraphQLList(resolveType(type[0]));
470
+ var resolvePlainObjectOrModelType = (type) => {
471
+ const model = type.__isModel ? type : type.__model;
472
+ if (!model || !model.__isModel) {
473
+ throw new Error("A type is not a Model");
494
474
  }
495
- }
496
- __name(getParams, "getParams");
475
+ const fields = resolveModelFields(model);
476
+ return getCachedModelInput(model, fields);
477
+ };
478
+ var resolveType = (type) => {
479
+ var _a;
480
+ if (!type) throw new Error("No type specified");
481
+ if ((_a = type == null ? void 0 : type[Symbol.metadata]) == null ? void 0 : _a._getModel) {
482
+ const model = type[Symbol.metadata]._getModel();
483
+ return resolveType(model);
484
+ }
485
+ if ((0, import_isArray.default)(type)) return resolveArrayType(type);
486
+ if (!type.__isFieldType && ((0, import_isPlainObject.default)(type) || type.__isModel)) {
487
+ return resolvePlainObjectOrModelType(type);
488
+ }
489
+ const schemaType = (0, import_schema.getFieldType)(type);
490
+ return getScalar_default(schemaType);
491
+ };
492
+ var getField_default = resolveType;
497
493
 
498
494
  // src/buildSchema/getArgs/index.ts
499
- function getArgs_default(params) {
495
+ async function getArgs_default(params) {
500
496
  if (!params) return;
501
497
  if (Object.keys(params).length === 0) return;
502
498
  const fields = {};
503
499
  for (const key of Object.keys(params)) {
504
500
  try {
505
- const type = getParams(params[key].type);
506
- fields[key] = {
507
- type
508
- };
501
+ const type = getField_default(params[key].type);
502
+ fields[key] = { type };
509
503
  } catch (error) {
510
504
  throw new Error(`Error creating GraphQL resolver params argument ${key}: ${error.message}`);
511
505
  }
512
506
  }
513
507
  return fields;
514
508
  }
515
- __name(getArgs_default, "default");
516
509
 
517
510
  // src/errorHandler.ts
518
- var import_crypto = __toESM(require("crypto"), 1);
511
+ var import_node_crypto = __toESM(require("crypto"), 1);
519
512
  var import_graphql5 = require("graphql");
520
513
  function errorHandler(error, data) {
521
- const message = `Error in resolver "${data.name}" ${data.model ? `of model "${data.model.name}"` : ""}`;
522
- const hash = import_crypto.default.createHash("sha1").update(error.message, "utf8").digest("hex").substring(0, 10);
514
+ const message = `Error in resolver "${data.name}" ${data.schema ? `of model "${data.schema.__modelName}"` : ""}`;
515
+ const hash = import_node_crypto.default.createHash("sha1").update(error.message, "utf8").digest("hex").substring(0, 10);
523
516
  error.hash = hash;
524
- if (error && error.isOrionError) {
517
+ if (error == null ? void 0 : error.isOrionError) {
525
518
  console.warn(message, error);
526
519
  throw new import_graphql5.GraphQLError(error.message, {
527
520
  originalError: error,
@@ -533,148 +526,151 @@ function errorHandler(error, data) {
533
526
  info: error.getInfo()
534
527
  }
535
528
  });
536
- } else {
537
- console.error(message, error);
538
- throw new import_graphql5.GraphQLError(`${error.message} [${hash}]`, {
539
- // originalError: error,
540
- extensions: {
541
- isOrionError: false,
542
- isValidationError: false,
543
- code: "INTERNAL_SERVER_ERROR",
544
- hash
545
- }
546
- });
547
529
  }
530
+ console.error(message, error);
531
+ throw new import_graphql5.GraphQLError(`${error.message} [${hash}]`, {
532
+ // originalError: error,
533
+ extensions: {
534
+ isOrionError: false,
535
+ isValidationError: false,
536
+ code: "INTERNAL_SERVER_ERROR",
537
+ hash
538
+ }
539
+ });
548
540
  }
549
- __name(errorHandler, "errorHandler");
550
541
 
551
542
  // src/buildSchema/getType/getTypeAsResolver.ts
552
- function getTypeAsResolver_default({ resolver: resolver4, getGraphQLType: getGraphQLType2, options, model }) {
553
- const type = getGraphQLType2(resolver4.returns, options);
554
- const args = getArgs_default(resolver4.params);
543
+ function getTypeAsResolver_default({ resolver: resolver2, getGraphQLType: getGraphQLType2, options, schema }) {
544
+ const type = getGraphQLType2(resolver2.returns, options);
545
+ const args = getArgs_default(resolver2.params);
555
546
  return {
556
547
  type,
557
548
  args,
558
549
  async resolve(item, params, context, info) {
559
550
  try {
560
- const result = await resolver4.resolve(item, params, context, info);
551
+ const result = await resolver2.resolve(item, params, context, info);
561
552
  return result;
562
553
  } catch (error) {
563
- errorHandler(error, {
564
- context,
565
- resolver: resolver4,
566
- options,
567
- model
568
- });
554
+ errorHandler(error, { context, resolver: resolver2, options, schema });
569
555
  throw error;
570
556
  }
571
557
  }
572
558
  };
573
559
  }
574
- __name(getTypeAsResolver_default, "default");
575
560
 
576
561
  // src/resolversSchemas/getDynamicFields.ts
577
- function getDynamicFields(model) {
578
- const resolvers = model.getResolvers();
562
+ function getResolvers(schema) {
563
+ if (typeof schema.getResolvers === "function") {
564
+ console.warn("Models are deprecated");
565
+ return schema.getResolvers();
566
+ }
567
+ if (schema.__resolvers) {
568
+ return schema.__resolvers;
569
+ }
570
+ return {};
571
+ }
572
+ function getDynamicFields(schema) {
573
+ const resolvers = getResolvers(schema);
579
574
  if (!resolvers) return [];
580
575
  const keys = Object.keys(resolvers);
581
576
  return keys.map((key) => {
582
- const resolver4 = resolvers[key];
577
+ const resolver2 = resolvers[key];
583
578
  return {
584
- ...resolver4,
579
+ ...resolver2,
585
580
  key
586
581
  };
587
- }).filter((resolver4) => !resolver4.private);
582
+ }).filter((resolver2) => !resolver2.private);
588
583
  }
589
- __name(getDynamicFields, "getDynamicFields");
590
584
 
591
585
  // src/resolversSchemas/getModelLoadedResolvers.ts
592
- function getModelLoadedResolvers(model, options) {
586
+ function getModelLoadedResolvers(schema, options) {
593
587
  if (!options.modelResolvers) return [];
594
- const resolvers = options.modelResolvers[model.name];
588
+ const resolvers = options.modelResolvers[schema.__modelName];
595
589
  if (!resolvers) return [];
596
590
  const keys = Object.keys(resolvers);
597
591
  return keys.map((key) => {
598
- const resolver4 = resolvers[key];
592
+ const resolver2 = resolvers[key];
599
593
  return {
600
- ...resolver4,
594
+ ...resolver2,
601
595
  key
602
596
  };
603
- }).filter((resolver4) => !resolver4.private);
597
+ }).filter((resolver2) => !resolver2.private);
604
598
  }
605
- __name(getModelLoadedResolvers, "getModelLoadedResolvers");
606
599
 
607
600
  // src/buildSchema/getType/index.ts
601
+ var import_lodash = require("lodash");
602
+ var createGraphQLObjectType = (modelName, schema, options) => new import_graphql6.GraphQLObjectType({
603
+ name: modelName,
604
+ fields: () => buildFields(schema, options)
605
+ });
606
+ var buildFields = (schema, options) => {
607
+ const fields = {};
608
+ const addStaticFields = () => {
609
+ for (const field of getStaticFields(schema)) {
610
+ try {
611
+ fields[field.key] = field.graphQLResolver ? getTypeAsResolver_default({ resolver: field.graphQLResolver, getGraphQLType, options, schema }) : { type: getGraphQLType(field.type, options) };
612
+ } catch (error) {
613
+ throw new Error(`Error getting type for ${field.key}: ${error.message}`);
614
+ }
615
+ }
616
+ };
617
+ const addDynamicFields = () => {
618
+ for (const resolver2 of getDynamicFields(schema)) {
619
+ try {
620
+ fields[resolver2.key] = getTypeAsResolver_default({ resolver: resolver2, getGraphQLType, options, schema });
621
+ } catch (error) {
622
+ throw new Error(
623
+ `Error getting resolver type for resolver "${resolver2.key}": ${error.message}`
624
+ );
625
+ }
626
+ }
627
+ };
628
+ const addModelLoadedResolvers = () => {
629
+ for (const resolver2 of getModelLoadedResolvers(schema, options)) {
630
+ try {
631
+ fields[resolver2.key] = getTypeAsResolver_default({ resolver: resolver2, getGraphQLType, options, schema });
632
+ } catch (error) {
633
+ throw new Error(
634
+ `Error getting resolver type for resolver "${resolver2.key}": ${error.message}`
635
+ );
636
+ }
637
+ }
638
+ };
639
+ addStaticFields();
640
+ addDynamicFields();
641
+ addModelLoadedResolvers();
642
+ return fields;
643
+ };
644
+ var registeredGraphQLTypes = /* @__PURE__ */ new Map();
608
645
  function getGraphQLType(type, options) {
609
- if (!type) {
610
- throw new Error("Type is undefined");
611
- }
646
+ if (!type) throw new Error("Type is undefined");
612
647
  if ((0, import_isArray2.default)(type)) {
613
- const graphQLType = getGraphQLType(type[0], options);
614
- return new import_graphql6.GraphQLList(graphQLType);
615
- } else if (typeof type === "function" && type.getModel && type.__schemaId) {
616
- return getGraphQLType(type.getModel(), options);
617
- } else if (!type._isFieldType && ((0, import_isPlainObject2.default)(type) || type.__isModel)) {
618
- const model = type.__isModel ? type : type.__model;
619
- if (!model || !model.__isModel) throw new Error("Type is not a Model");
620
- if (model.graphQLType) return model.graphQLType;
621
- model.graphQLType = new import_graphql6.GraphQLObjectType({
622
- name: model.name,
623
- fields: /* @__PURE__ */ __name(() => {
624
- const fields = {};
625
- for (const field of getStaticFields(model)) {
626
- try {
627
- if (field.graphQLResolver) {
628
- fields[field.key] = getTypeAsResolver_default({
629
- resolver: field.graphQLResolver,
630
- getGraphQLType,
631
- options,
632
- model
633
- });
634
- } else {
635
- fields[field.key] = {
636
- type: getGraphQLType(field.type, options)
637
- };
638
- }
639
- } catch (error) {
640
- throw new Error(`Error getting type for ${field.key} ${error.message}`);
641
- }
642
- }
643
- for (const resolver4 of getDynamicFields(model)) {
644
- try {
645
- fields[resolver4.key] = getTypeAsResolver_default({
646
- resolver: resolver4,
647
- getGraphQLType,
648
- options,
649
- model
650
- });
651
- } catch (error) {
652
- throw new Error(`Error getting resolver type for resolver "${resolver4.key}": ${error.message}`);
653
- }
654
- }
655
- for (const resolver4 of getModelLoadedResolvers(model, options)) {
656
- try {
657
- fields[resolver4.key] = getTypeAsResolver_default({
658
- resolver: resolver4,
659
- getGraphQLType,
660
- options,
661
- model
662
- });
663
- } catch (error) {
664
- throw new Error(`Error getting resolver type for resolver "${resolver4.key}": ${error.message}`);
665
- }
666
- }
667
- return fields;
668
- }, "fields")
669
- });
670
- return model.graphQLType;
671
- } else {
672
- const schemaType = (0, import_schema2.getFieldType)(type);
673
- const graphQLType = getScalar_default(schemaType);
648
+ return new import_graphql6.GraphQLList(getGraphQLType(type[0], options));
649
+ }
650
+ if ((0, import_schema2.isSchemaLike)(type)) {
651
+ const schema = (0, import_schema2.getSchemaWithMetadataFromAnyOrionForm)(type);
652
+ const modelName = schema.__modelName;
653
+ if (schema.__graphQLType) {
654
+ return schema.__graphQLType;
655
+ }
656
+ if (!modelName) {
657
+ throw new Error(
658
+ `Schema name is not defined. Register a name with schemaWithName. Schema: ${JSON.stringify(schema)}`
659
+ );
660
+ }
661
+ if (registeredGraphQLTypes.has(modelName)) {
662
+ const { graphQLType: graphQLType2, schema: registeredSchema } = registeredGraphQLTypes.get(modelName);
663
+ if ((0, import_lodash.isEqual)(registeredSchema, schema)) {
664
+ return graphQLType2;
665
+ }
666
+ throw new Error(`Schema named "${modelName}" already registered`);
667
+ }
668
+ const graphQLType = createGraphQLObjectType(modelName, schema, options);
669
+ registeredGraphQLTypes.set(modelName, { schema, graphQLType });
674
670
  return graphQLType;
675
671
  }
672
+ return getScalar_default((0, import_schema2.getFieldType)(type));
676
673
  }
677
- __name(getGraphQLType, "getGraphQLType");
678
674
 
679
675
  // src/buildSchema/getResolvers/resolversStore.ts
680
676
  var resolversStore = {};
@@ -687,26 +683,21 @@ async function getResolvers_default(options, mutation) {
687
683
  name: key,
688
684
  resolver: resolvers[key]
689
685
  };
690
- }).filter(({ resolver: resolver4 }) => !!resolver4.mutation === !!mutation).filter(({ resolver: resolver4 }) => !resolver4.private);
686
+ }).filter(({ resolver: resolver2 }) => !!resolver2.mutation === !!mutation).filter(({ resolver: resolver2 }) => !resolver2.private);
691
687
  const fields = {};
692
- for (const { resolver: resolver4, name } of filteredResolvers) {
693
- resolversStore[name] = resolver4;
694
- const type = await getGraphQLType(resolver4.returns, options);
695
- const args = await getArgs_default(resolver4.params);
688
+ for (const { resolver: resolver2, name } of filteredResolvers) {
689
+ resolversStore[name] = resolver2;
690
+ const type = await getGraphQLType(resolver2.returns, options);
691
+ const args = await getArgs_default(resolver2.params);
696
692
  fields[name] = {
697
693
  type,
698
694
  args,
699
- async resolve(root, params, context, info) {
695
+ async resolve(_root, params, context, info) {
700
696
  try {
701
- const result = await resolver4.resolve(params, context, info);
697
+ const result = await resolver2.resolve(params, context, info);
702
698
  return result;
703
699
  } catch (error) {
704
- errorHandler(error, {
705
- context,
706
- resolver: resolver4,
707
- options,
708
- name
709
- });
700
+ errorHandler(error, { context, resolver: resolver2, options, name });
710
701
  throw error;
711
702
  }
712
703
  }
@@ -714,7 +705,6 @@ async function getResolvers_default(options, mutation) {
714
705
  }
715
706
  return fields;
716
707
  }
717
- __name(getResolvers_default, "default");
718
708
 
719
709
  // src/buildSchema/getQuery.ts
720
710
  var import_isEmpty = __toESM(require("lodash/isEmpty"), 1);
@@ -726,7 +716,6 @@ async function getQuery_default(options) {
726
716
  fields
727
717
  });
728
718
  }
729
- __name(getQuery_default, "default");
730
719
 
731
720
  // src/buildSchema/getMutation.ts
732
721
  var import_graphql8 = require("graphql");
@@ -739,7 +728,6 @@ async function getMutation_default(options) {
739
728
  fields
740
729
  });
741
730
  }
742
- __name(getMutation_default, "default");
743
731
 
744
732
  // src/buildSchema/getSubscription.ts
745
733
  var import_graphql9 = require("graphql");
@@ -763,7 +751,6 @@ async function getSubscriptions_default(options) {
763
751
  }
764
752
  return fields;
765
753
  }
766
- __name(getSubscriptions_default, "default");
767
754
 
768
755
  // src/buildSchema/getSubscription.ts
769
756
  async function getSubscription_default(options) {
@@ -774,27 +761,19 @@ async function getSubscription_default(options) {
774
761
  fields
775
762
  });
776
763
  }
777
- __name(getSubscription_default, "default");
778
764
 
779
765
  // src/buildSchema/index.ts
780
766
  async function buildSchema_default(options) {
781
767
  const query = await getQuery_default(options);
782
768
  const mutation = await getMutation_default(options);
783
769
  const subscription = await getSubscription_default(options);
784
- const schema = new import_graphql10.GraphQLSchema({
785
- query,
786
- mutation,
787
- subscription
788
- });
770
+ const schema = new import_graphql10.GraphQLSchema({ query, mutation, subscription });
789
771
  return schema;
790
772
  }
791
- __name(buildSchema_default, "default");
792
773
 
793
774
  // src/getApolloOptions/formatError.ts
794
775
  function formatError_default(apolloError) {
795
- let response = {
796
- ...apolloError
797
- };
776
+ let response = { ...apolloError };
798
777
  const error = apolloError.originalError;
799
778
  if (error && error.isValidationError) {
800
779
  response.validationErrors = error.validationErrors;
@@ -804,13 +783,12 @@ function formatError_default(apolloError) {
804
783
  }
805
784
  return response;
806
785
  }
807
- __name(formatError_default, "default");
808
786
 
809
787
  // src/getApolloOptions/index.ts
810
- var import_lodash = require("lodash");
788
+ var import_lodash2 = require("lodash");
811
789
  async function getApolloOptions_default(options) {
812
790
  const schema = await buildSchema_default(options);
813
- const passedOptions = (0, import_lodash.omit)(options, [
791
+ const passedOptions = (0, import_lodash2.omit)(options, [
814
792
  "resolvers",
815
793
  "modelResolvers",
816
794
  "subscriptions",
@@ -825,7 +803,6 @@ async function getApolloOptions_default(options) {
825
803
  formatError: formatError_default
826
804
  };
827
805
  }
828
- __name(getApolloOptions_default, "default");
829
806
 
830
807
  // src/startWebsocket.ts
831
808
  var import_graphql_subscriptions = require("graphql-subscriptions");
@@ -834,7 +811,7 @@ var import_ws2 = require("graphql-ws/lib/use/ws");
834
811
 
835
812
  // src/websockerViewer.ts
836
813
  global.getWebsocketViewerRef = () => null;
837
- var getWebsockerViewer = /* @__PURE__ */ __name(async (connectionParams) => {
814
+ var getWebsockerViewer = async (connectionParams) => {
838
815
  try {
839
816
  const viewer = await global.getWebsocketViewerRef(connectionParams);
840
817
  if (!viewer) return {};
@@ -842,10 +819,10 @@ var getWebsockerViewer = /* @__PURE__ */ __name(async (connectionParams) => {
842
819
  } catch {
843
820
  return {};
844
821
  }
845
- }, "getWebsockerViewer");
846
- var setGetWebsockerViewer = /* @__PURE__ */ __name((getViewerFunc) => {
822
+ };
823
+ var setGetWebsockerViewer = (getViewerFunc) => {
847
824
  global.getWebsocketViewerRef = getViewerFunc;
848
- }, "setGetWebsockerViewer");
825
+ };
849
826
 
850
827
  // src/startWebsocket.ts
851
828
  var import_http2 = require("@orion-js/http");
@@ -861,12 +838,15 @@ function startWebsocket_default(apolloOptions, options, wsServer) {
861
838
  path: "/subscriptions"
862
839
  });
863
840
  }
864
- const serverCleanup = (0, import_ws2.useServer)({
865
- schema: apolloOptions.schema,
866
- context: /* @__PURE__ */ __name(async (ctx, msg, args) => {
867
- return getWebsockerViewer(ctx.connectionParams);
868
- }, "context")
869
- }, wsServer);
841
+ const serverCleanup = (0, import_ws2.useServer)(
842
+ {
843
+ schema: apolloOptions.schema,
844
+ context: async (ctx, msg, args) => {
845
+ return getWebsockerViewer(ctx.connectionParams);
846
+ }
847
+ },
848
+ wsServer
849
+ );
870
850
  return [
871
851
  // Proper shutdown for the WebSocket server.
872
852
  {
@@ -880,7 +860,6 @@ function startWebsocket_default(apolloOptions, options, wsServer) {
880
860
  }
881
861
  ];
882
862
  }
883
- __name(startWebsocket_default, "default");
884
863
 
885
864
  // src/startGraphQL.ts
886
865
  var import_http3 = require("@orion-js/http");
@@ -895,167 +874,152 @@ async function startGraphQL_default(options) {
895
874
  startGraphiQL_default(apolloOptions, options);
896
875
  }
897
876
  const subPlugins = startWebsocket_default(apolloOptions, options);
898
- const drainPlugins = httpServer ? [
899
- (0, import_drainHttpServer.ApolloServerPluginDrainHttpServer)({
900
- httpServer
901
- })
902
- ] : [];
877
+ const drainPlugins = httpServer ? [(0, import_drainHttpServer.ApolloServerPluginDrainHttpServer)({ httpServer })] : [];
903
878
  const server = new import_server.ApolloServer({
904
879
  ...apolloOptions,
905
- plugins: [
906
- ...apolloOptions.plugins || [],
907
- ...drainPlugins,
908
- ...subPlugins
909
- ]
880
+ plugins: [...apolloOptions.plugins || [], ...drainPlugins, ...subPlugins]
910
881
  });
911
882
  await server.start();
912
883
  const middleware = (0, import_express4.expressMiddleware)(server, {
913
884
  // @ts-expect-error
914
- context: /* @__PURE__ */ __name(({ req, res }) => req._viewer, "context")
885
+ context: ({ req, res }) => req._viewer
915
886
  });
916
- (0, import_http3.registerRoute)((0, import_http3.route)({
917
- app,
918
- method: "all",
919
- path: "/graphql",
920
- bodyParser: "json",
921
- async resolve(req, res, viewer) {
922
- req._viewer = viewer;
923
- return middleware(req, res, req.next);
924
- }
925
- }));
887
+ (0, import_http3.registerRoute)(
888
+ (0, import_http3.route)({
889
+ app,
890
+ method: "all",
891
+ path: "/graphql",
892
+ bodyParser: "json",
893
+ async resolve(req, res, viewer) {
894
+ ;
895
+ req._viewer = viewer;
896
+ return middleware(req, res, req.next);
897
+ }
898
+ })
899
+ );
926
900
  }
927
- __name(startGraphQL_default, "default");
928
901
 
929
902
  // src/resolversSchemas/params.ts
930
- var import_resolvers3 = require("@orion-js/resolvers");
903
+ var import_resolvers2 = require("@orion-js/resolvers");
931
904
  var import_helpers2 = require("@orion-js/helpers");
932
905
 
933
- // src/resolversSchemas/getField.ts
934
- var import_isPlainObject3 = __toESM(require("lodash/isPlainObject"), 1);
935
- var import_isArray3 = __toESM(require("lodash/isArray"), 1);
906
+ // src/resolversSchemas/ResolverParamsInfo.ts
936
907
  var import_schema3 = require("@orion-js/schema");
908
+ var ResolverParamsInfo_default = (0, import_schema3.schemaWithName)("ResolverParams", {
909
+ name: {
910
+ type: "string"
911
+ },
912
+ params: {
913
+ type: "blackbox"
914
+ },
915
+ result: {
916
+ type: "string"
917
+ },
918
+ basicResultQuery: {
919
+ type: "string"
920
+ }
921
+ });
922
+
923
+ // src/resolversSchemas/serializeSchema.ts
924
+ var import_schema5 = require("@orion-js/schema");
925
+
926
+ // src/resolversSchemas/getField.ts
927
+ var import_schema4 = require("@orion-js/schema");
937
928
  var import_omit = __toESM(require("lodash/omit"), 1);
938
- async function getParams2(field) {
939
- let { type } = field;
940
- if (typeof type === "function" && type.getModel && type.__schemaId) {
941
- const model = type.getModel();
942
- return await getParams2({
943
- ...field,
944
- type: model
945
- });
946
- } else if ((0, import_isArray3.default)(type)) {
947
- const serialized = await getParams2({
948
- ...field,
949
- type: type[0]
950
- });
929
+ async function getParams(field) {
930
+ const { type } = field;
931
+ if (Array.isArray(type)) {
932
+ const serialized = await getParams({ ...field, type: type[0] });
951
933
  return {
952
934
  ...serialized,
953
- type: [
954
- serialized.type
955
- ],
935
+ type: [serialized.type],
956
936
  __graphQLType: `[${serialized.__graphQLType}]`
957
937
  };
958
- } else if (!type._isFieldType && ((0, import_isPlainObject3.default)(type) || type.__isModel)) {
959
- const model = type.__isModel ? type : type.__model;
960
- if (!model || !model.__isModel) throw new Error("Type is not a Model");
938
+ }
939
+ const isSchema = (0, import_schema4.isSchemaLike)(type);
940
+ if (isSchema) {
941
+ const schemaOfType = (0, import_schema4.getSchemaWithMetadataFromAnyOrionForm)(type);
942
+ const modelName = schemaOfType.__modelName;
943
+ if (!modelName) {
944
+ throw new Error("The schema needs a model name to be serialized for GraphQL");
945
+ }
961
946
  const fields = {};
962
- for (const field2 of getStaticFields(model)) {
963
- fields[field2.key] = await getParams2(field2);
947
+ for (const field2 of getStaticFields(schemaOfType)) {
948
+ fields[field2.key] = await getParams(field2);
964
949
  }
965
950
  return {
966
951
  ...(0, import_omit.default)(field, "key"),
967
952
  type: fields,
968
- __graphQLType: model.name + "Input"
969
- };
970
- } else {
971
- const schemaType = await (0, import_schema3.getFieldType)(type);
972
- const graphQLType = await getScalar_default(schemaType);
973
- return {
974
- ...(0, import_omit.default)(field, "key"),
975
- type: schemaType.name,
976
- __graphQLType: graphQLType.name
953
+ __graphQLType: `${modelName}Input`
977
954
  };
978
955
  }
956
+ const schemaType = (0, import_schema4.getFieldType)(type);
957
+ const graphQLType = await getScalar_default(schemaType);
958
+ return {
959
+ ...(0, import_omit.default)(field, "key"),
960
+ type: schemaType.name,
961
+ __graphQLType: graphQLType.name
962
+ };
979
963
  }
980
- __name(getParams2, "getParams");
981
964
 
982
965
  // src/resolversSchemas/serializeSchema.ts
966
+ Symbol.metadata ?? (Symbol.metadata = Symbol("Symbol.metadata"));
983
967
  async function serializeSchema(params) {
984
968
  if (!params) return;
985
- if (typeof params === "function" && params.getModel && params.__schemaId) {
986
- params = params.getModel().getCleanSchema();
987
- }
988
- if (Object.keys(params).length === 0) return;
969
+ const schema = (0, import_schema5.getSchemaFromAnyOrionForm)(params);
970
+ if (Object.keys(schema).length === 0) return;
989
971
  const fields = {};
990
- for (const key of Object.keys(params)) {
991
- const field = params[key];
992
- fields[key] = await getParams2(field);
972
+ for (const key of Object.keys(schema).filter((key2) => !key2.startsWith("__"))) {
973
+ const field = schema[key];
974
+ fields[key] = await getParams(field);
993
975
  }
994
976
  return fields;
995
977
  }
996
- __name(serializeSchema, "serializeSchema");
978
+
979
+ // src/resolversSchemas/params.ts
980
+ var import_schema7 = require("@orion-js/schema");
997
981
 
998
982
  // src/resolversSchemas/getBasicResultQuery.ts
999
- var import_isArray4 = __toESM(require("lodash/isArray"), 1);
983
+ var import_isArray3 = __toESM(require("lodash/isArray"), 1);
984
+ var import_schema6 = require("@orion-js/schema");
1000
985
  async function getBasicQuery(field) {
1001
986
  if (!field.type) return "";
1002
- if ((0, import_isArray4.default)(field.type) && field.type[0].__model || field.type.__model) {
1003
- const model = (0, import_isArray4.default)(field.type) ? field.type[0].__model : field.type.__model;
1004
- const fields = [];
1005
- for (const field2 of getStaticFields(model)) {
1006
- fields.push(await getBasicQuery(field2));
1007
- }
1008
- const key = field.key ? `${field.key} ` : "";
1009
- return `${key}{ ${fields.join(" ")} }`;
1010
- } else {
987
+ if ((0, import_isArray3.default)(field.type)) {
988
+ return getBasicQuery({
989
+ ...field,
990
+ type: field.type[0]
991
+ });
992
+ }
993
+ if (!(0, import_schema6.isSchemaLike)(field.type)) {
1011
994
  return field.key;
1012
995
  }
1013
- }
1014
- __name(getBasicQuery, "getBasicQuery");
1015
-
1016
- // src/resolversSchemas/ResolverParamsInfo.ts
1017
- var import_models = require("@orion-js/models");
1018
- var import_resolvers2 = require("@orion-js/resolvers");
1019
- var import_lodash2 = require("lodash");
1020
- var resolverReturnsIsModel = /* @__PURE__ */ __name((returns) => {
1021
- return returns && returns.__isModel;
1022
- }, "resolverReturnsIsModel");
1023
- var ResolverParamsInfo_default = (0, import_models.createModel)({
1024
- name: "ResolverParams",
1025
- schema: {
1026
- name: {
1027
- type: String
1028
- }
1029
- },
1030
- resolvers: {
1031
- params: (0, import_resolvers2.resolver)({
1032
- returns: "blackbox",
1033
- resolve: /* @__PURE__ */ __name(async function({ resolver: resolver4 }) {
1034
- return await serializeSchema(resolver4.params);
1035
- }, "resolve")
1036
- }),
1037
- result: (0, import_resolvers2.resolver)({
1038
- returns: String,
1039
- resolve: /* @__PURE__ */ __name(async function({ resolver: resolver4 }) {
1040
- const returns = (0, import_lodash2.isArray)(resolver4.returns) ? resolver4.returns[0] : resolver4.returns;
1041
- if (resolverReturnsIsModel(returns)) return returns.name;
1042
- return;
1043
- }, "resolve")
1044
- }),
1045
- basicResultQuery: (0, import_resolvers2.resolver)({
1046
- returns: String,
1047
- resolve: /* @__PURE__ */ __name(async function({ resolver: resolver4 }) {
1048
- const returns = (0, import_lodash2.isArray)(resolver4.returns) ? resolver4.returns[0] : resolver4.returns;
1049
- return await getBasicQuery({
1050
- type: resolverReturnsIsModel(returns) ? returns.getSchema() : ""
1051
- });
1052
- }, "resolve")
1053
- })
996
+ const schema = (0, import_schema6.getSchemaFromAnyOrionForm)(field.type);
997
+ const fields = [];
998
+ for (const field2 of getStaticFields(schema)) {
999
+ fields.push(await getBasicQuery(field2));
1054
1000
  }
1055
- });
1001
+ const key = field.key ? `${field.key} ` : "";
1002
+ return `${key}{ ${fields.join(" ")} }`;
1003
+ }
1056
1004
 
1057
1005
  // src/resolversSchemas/params.ts
1058
- var params_default = (0, import_resolvers3.resolver)({
1006
+ function getResultTypeName(type) {
1007
+ const returns = Array.isArray(type) ? type[0] : type;
1008
+ const schema = (0, import_schema7.getSchemaFromAnyOrionForm)(returns);
1009
+ if (schema == null ? void 0 : schema.__modelName) return schema.__modelName;
1010
+ return;
1011
+ }
1012
+ async function getInternalBasicResultQuery(type) {
1013
+ const returns = Array.isArray(type) ? type[0] : type;
1014
+ if ((0, import_schema7.isSchemaLike)(returns)) {
1015
+ const schema = (0, import_schema7.getSchemaFromAnyOrionForm)(returns);
1016
+ return await getBasicQuery({
1017
+ type: schema
1018
+ });
1019
+ }
1020
+ return "";
1021
+ }
1022
+ var params_default = (0, import_resolvers2.createResolver)({
1059
1023
  params: {
1060
1024
  name: {
1061
1025
  type: "ID"
@@ -1066,19 +1030,24 @@ var params_default = (0, import_resolvers3.resolver)({
1066
1030
  },
1067
1031
  returns: ResolverParamsInfo_default,
1068
1032
  mutation: false,
1069
- resolve: /* @__PURE__ */ __name(async function({ mutation, name }, viewer) {
1070
- const resolver4 = resolversStore[name];
1071
- if (!resolver4) {
1072
- throw new import_helpers2.UserError("notFound", `${mutation ? "Mutation" : "Query"} named "${name}" not found`);
1033
+ async resolve({ mutation, name }) {
1034
+ const resolver2 = resolversStore[name];
1035
+ if (!resolver2) {
1036
+ throw new import_helpers2.UserError(
1037
+ "notFound",
1038
+ `${mutation ? "Mutation" : "Query"} named "${name}" not found`
1039
+ );
1073
1040
  }
1074
- if (!!resolver4.mutation !== !!mutation) {
1041
+ if (!!resolver2.mutation !== !!mutation) {
1075
1042
  throw new import_helpers2.UserError("incorrectType", `"${name}" is ${mutation ? "not" : ""} a mutation`);
1076
1043
  }
1077
1044
  return {
1078
- resolver: resolver4,
1079
- name
1045
+ name,
1046
+ basicResultQuery: await getInternalBasicResultQuery(resolver2.returns),
1047
+ params: await serializeSchema(resolver2.params),
1048
+ result: getResultTypeName(resolver2.returns)
1080
1049
  };
1081
- }, "resolve")
1050
+ }
1082
1051
  });
1083
1052
 
1084
1053
  // src/resolversSchemas/index.ts
@@ -1090,183 +1059,222 @@ var resolversSchemas_default = {
1090
1059
  var GraphQL2 = __toESM(require("graphql"), 1);
1091
1060
 
1092
1061
  // src/types/subscription.ts
1093
- var _OrionSubscription = class _OrionSubscription {
1062
+ var OrionSubscription = class {
1094
1063
  name;
1095
1064
  params;
1096
1065
  subscribe;
1097
1066
  returns;
1098
1067
  publish;
1099
1068
  };
1100
- __name(_OrionSubscription, "OrionSubscription");
1101
- var OrionSubscription = _OrionSubscription;
1102
1069
 
1103
1070
  // src/service/global.ts
1104
1071
  var import_services = require("@orion-js/services");
1105
- var import_resolvers4 = require("@orion-js/resolvers");
1106
- var import_helpers3 = require("@orion-js/helpers");
1072
+ var import_resolvers3 = require("@orion-js/resolvers");
1107
1073
 
1108
- // src/service/otherParams.ts
1109
- function createRegisterResolverMetadata(metadataKey, isArray6 = false) {
1110
- return (metadata) => {
1111
- return (target, propertyKey, descriptor) => {
1112
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1113
- target[metadataKey] = target[metadataKey] || {};
1114
- if (isArray6) {
1115
- target[metadataKey][propertyKey] = target[metadataKey][propertyKey] || [];
1116
- target[metadataKey][propertyKey].unshift(metadata);
1117
- } else {
1118
- target[metadataKey][propertyKey] = metadata;
1119
- }
1120
- };
1121
- };
1074
+ // src/service/middlewares.ts
1075
+ var resolversMetadata = /* @__PURE__ */ new WeakMap();
1076
+ function addTargetMetadata(target, propertyKey, metadataKey, metadata, isArray4 = false) {
1077
+ const targetMetadata = resolversMetadata.get(target) || {};
1078
+ targetMetadata[propertyKey] = targetMetadata[propertyKey] || {};
1079
+ if (isArray4) {
1080
+ targetMetadata[propertyKey][metadataKey] = targetMetadata[propertyKey][metadataKey] || [];
1081
+ targetMetadata[propertyKey][metadataKey].unshift(metadata);
1082
+ } else {
1083
+ targetMetadata[propertyKey][metadataKey] = metadata;
1084
+ }
1085
+ resolversMetadata.set(target, targetMetadata);
1122
1086
  }
1123
- __name(createRegisterResolverMetadata, "createRegisterResolverMetadata");
1124
1087
  function getTargetMetadata(target, propertyKey, metadataKey) {
1125
- const items = target[metadataKey] || {};
1126
- return items[propertyKey] || [];
1088
+ var _a;
1089
+ const targetMetadata = resolversMetadata.get(target) || {};
1090
+ return (_a = targetMetadata[propertyKey]) == null ? void 0 : _a[metadataKey];
1091
+ }
1092
+ function UseMiddleware(params) {
1093
+ return (method, context) => {
1094
+ const propertyKey = String(context.name);
1095
+ addTargetMetadata(method, propertyKey, "middlewares", params, true);
1096
+ return method;
1097
+ };
1098
+ }
1099
+ function ResolverParams(params) {
1100
+ return (method, context) => {
1101
+ const propertyKey = String(context.name);
1102
+ addTargetMetadata(method, propertyKey, "params", params, false);
1103
+ return method;
1104
+ };
1105
+ }
1106
+ function ResolverReturns(returns) {
1107
+ return (method, context) => {
1108
+ const propertyKey = String(context.name);
1109
+ addTargetMetadata(method, propertyKey, "returns", returns, false);
1110
+ return method;
1111
+ };
1127
1112
  }
1128
- __name(getTargetMetadata, "getTargetMetadata");
1129
- var UseMiddleware = createRegisterResolverMetadata("middlewares", true);
1130
- var ResolverParams = createRegisterResolverMetadata("params");
1131
- var ResolverReturns = createRegisterResolverMetadata("returns");
1132
1113
 
1133
1114
  // src/service/global.ts
1115
+ var serviceMetadata = /* @__PURE__ */ new WeakMap();
1116
+ var resolversMetadata2 = /* @__PURE__ */ new WeakMap();
1134
1117
  function Resolvers() {
1135
- return (target) => {
1136
- (0, import_services.Service)()(target);
1137
- target.prototype.service = target;
1118
+ return (target, context) => {
1119
+ (0, import_services.Service)()(target, context);
1120
+ context.addInitializer(function() {
1121
+ serviceMetadata.set(this, { _serviceType: "resolvers" });
1122
+ });
1138
1123
  };
1139
1124
  }
1140
- __name(Resolvers, "Resolvers");
1141
- function Query(options) {
1142
- return (target, propertyKey, descriptor) => {
1143
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1144
- target.resolvers = target.resolvers || {};
1145
- target.resolvers[propertyKey] = (0, import_resolvers4.resolver)({
1146
- resolverId: propertyKey,
1147
- params: getTargetMetadata(target, propertyKey, "params"),
1148
- returns: getTargetMetadata(target, propertyKey, "returns"),
1149
- middlewares: getTargetMetadata(target, propertyKey, "middlewares"),
1150
- ...options,
1151
- resolve: /* @__PURE__ */ __name(async (params, viewer, info) => {
1152
- const instance = (0, import_services.getInstance)(target.service);
1153
- return await instance[propertyKey](params, viewer, info);
1154
- }, "resolve")
1125
+ function Query(options = {}) {
1126
+ return (method, context) => {
1127
+ const propertyKey = String(context.name);
1128
+ context.addInitializer(function() {
1129
+ const resolvers = resolversMetadata2.get(this) || {};
1130
+ resolvers[propertyKey] = (0, import_resolvers3.resolver)({
1131
+ resolverId: propertyKey,
1132
+ params: getTargetMetadata(method, propertyKey, "params") || {},
1133
+ returns: getTargetMetadata(method, propertyKey, "returns") || "string",
1134
+ middlewares: getTargetMetadata(method, propertyKey, "middlewares") || [],
1135
+ ...options,
1136
+ resolve: this[propertyKey].bind(this)
1137
+ });
1138
+ resolversMetadata2.set(this, resolvers);
1155
1139
  });
1140
+ return method;
1156
1141
  };
1157
1142
  }
1158
- __name(Query, "Query");
1159
1143
  function Mutation(options) {
1160
- return (target, propertyKey, descriptor) => {
1161
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1162
- target.resolvers = target.resolvers || {};
1163
- target.resolvers[propertyKey] = (0, import_resolvers4.resolver)({
1164
- resolverId: propertyKey,
1165
- params: getTargetMetadata(target, propertyKey, "params"),
1166
- returns: getTargetMetadata(target, propertyKey, "returns"),
1167
- middlewares: getTargetMetadata(target, propertyKey, "middlewares"),
1168
- ...options,
1169
- mutation: true,
1170
- resolve: /* @__PURE__ */ __name(async (params, viewer, info) => {
1171
- const instance = (0, import_services.getInstance)(target.service);
1172
- return await instance[propertyKey](params, viewer, info);
1173
- }, "resolve")
1144
+ return (method, context) => {
1145
+ const propertyKey = String(context.name);
1146
+ context.addInitializer(function() {
1147
+ const resolvers = resolversMetadata2.get(this) || {};
1148
+ resolvers[propertyKey] = (0, import_resolvers3.resolver)({
1149
+ resolverId: propertyKey,
1150
+ params: getTargetMetadata(method, propertyKey, "params") || {},
1151
+ returns: getTargetMetadata(method, propertyKey, "returns") || "string",
1152
+ middlewares: getTargetMetadata(method, propertyKey, "middlewares") || [],
1153
+ ...options,
1154
+ mutation: true,
1155
+ resolve: this[propertyKey].bind(this)
1156
+ });
1157
+ resolversMetadata2.set(this, resolvers);
1174
1158
  });
1159
+ return method;
1175
1160
  };
1176
1161
  }
1177
- __name(Mutation, "Mutation");
1178
1162
  function getServiceResolvers(target) {
1179
- if (!target.prototype) {
1180
- throw new import_helpers3.UserError("You must pass a class to getResolvers");
1163
+ const instance = (0, import_services.getInstance)(target);
1164
+ if (!serviceMetadata.has(instance.constructor)) {
1165
+ throw new Error("You must pass a class decorated with @Resolvers to getServiceResolvers");
1166
+ }
1167
+ const instanceMetadata = serviceMetadata.get(instance.constructor);
1168
+ if (instanceMetadata._serviceType !== "resolvers") {
1169
+ throw new Error("You must pass a class decorated with @Resolvers to getServiceResolvers");
1181
1170
  }
1182
- return target.prototype.resolvers || {};
1171
+ const resolversMap = resolversMetadata2.get(instance) || {};
1172
+ return resolversMap;
1183
1173
  }
1184
- __name(getServiceResolvers, "getServiceResolvers");
1185
1174
 
1186
1175
  // src/service/model.ts
1187
1176
  var import_services2 = require("@orion-js/services");
1188
- var import_resolvers5 = require("@orion-js/resolvers");
1189
- var import_helpers4 = require("@orion-js/helpers");
1190
- function ModelResolver(options) {
1191
- return (target, propertyKey, descriptor) => {
1192
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1193
- target.resolvers = target.resolvers || {};
1194
- target.resolvers[propertyKey] = (0, import_resolvers5.modelResolver)({
1195
- params: getTargetMetadata(target, propertyKey, "params"),
1196
- returns: getTargetMetadata(target, propertyKey, "returns"),
1197
- middlewares: getTargetMetadata(target, propertyKey, "middlewares"),
1198
- ...options,
1199
- resolve: /* @__PURE__ */ __name(async (item, params, viewer, info) => {
1200
- const instance = (0, import_services2.getInstance)(target.service);
1201
- return await instance[propertyKey](item, params, viewer, info);
1202
- }, "resolve")
1177
+ var import_resolvers4 = require("@orion-js/resolvers");
1178
+ var serviceMetadata2 = /* @__PURE__ */ new WeakMap();
1179
+ var modelResolversMetadata = /* @__PURE__ */ new WeakMap();
1180
+ function ModelResolvers(typedSchema, options = {}) {
1181
+ return (target, context) => {
1182
+ (0, import_services2.Service)()(target, context);
1183
+ const modelName = options.modelName || typedSchema.name;
1184
+ context.addInitializer(function() {
1185
+ serviceMetadata2.set(this, {
1186
+ _serviceType: "modelResolvers",
1187
+ options,
1188
+ _typedSchema: typedSchema,
1189
+ _modelName: modelName
1190
+ });
1203
1191
  });
1204
1192
  };
1205
1193
  }
1206
- __name(ModelResolver, "ModelResolver");
1207
- function ModelResolvers(typedSchema, options = {}) {
1208
- return (target) => {
1209
- (0, import_services2.Service)()(target);
1210
- target.prototype.modelName = options.modelName || typedSchema.name;
1211
- if (!target.prototype.modelName) {
1212
- throw new Error("The specified model has no name or is not a model");
1213
- }
1214
- target.prototype.typedSchema = typedSchema;
1215
- target.prototype.service = target;
1216
- target.getModel = () => getModelForClass(target);
1194
+ function ModelResolver(options) {
1195
+ return (method, context) => {
1196
+ const propertyKey = String(context.name);
1197
+ context.addInitializer(function() {
1198
+ const modelResolvers = modelResolversMetadata.get(this) || {};
1199
+ modelResolvers[propertyKey] = (0, import_resolvers4.modelResolver)({
1200
+ params: getTargetMetadata(method, propertyKey, "params") || {},
1201
+ returns: getTargetMetadata(method, propertyKey, "returns") || "string",
1202
+ middlewares: getTargetMetadata(method, propertyKey, "middlewares") || [],
1203
+ ...options,
1204
+ resolve: this[propertyKey].bind(this)
1205
+ });
1206
+ modelResolversMetadata.set(this, modelResolvers);
1207
+ });
1208
+ return method;
1217
1209
  };
1218
1210
  }
1219
- __name(ModelResolvers, "ModelResolvers");
1220
1211
  function getServiceModelResolvers(target) {
1221
- if (!target.prototype) {
1222
- throw new import_helpers4.UserError("You must pass a class to getResolvers");
1212
+ const instance = (0, import_services2.getInstance)(target);
1213
+ if (!serviceMetadata2.has(instance.constructor)) {
1214
+ throw new Error(
1215
+ "You must pass a class decorated with @ModelResolvers to getServiceModelResolvers"
1216
+ );
1217
+ }
1218
+ const instanceMetadata = serviceMetadata2.get(instance.constructor);
1219
+ if (instanceMetadata._serviceType !== "modelResolvers") {
1220
+ throw new Error(
1221
+ "You must pass a class decorated with @ModelResolvers to getServiceModelResolvers"
1222
+ );
1223
1223
  }
1224
+ const modelResolversMap = modelResolversMetadata.get(instance) || {};
1224
1225
  return {
1225
- [target.prototype.modelName]: target.prototype.resolvers || {}
1226
+ [instanceMetadata._modelName]: modelResolversMap
1226
1227
  };
1227
1228
  }
1228
- __name(getServiceModelResolvers, "getServiceModelResolvers");
1229
1229
 
1230
1230
  // src/service/subscription.ts
1231
1231
  var import_services3 = require("@orion-js/services");
1232
- var import_helpers5 = require("@orion-js/helpers");
1232
+ var serviceMetadata3 = /* @__PURE__ */ new WeakMap();
1233
+ var subscriptionsMetadata = /* @__PURE__ */ new WeakMap();
1233
1234
  function Subscriptions() {
1234
- return (target) => {
1235
- (0, import_services3.Service)()(target);
1236
- target.prototype.service = target;
1237
- target.prototype.serviceType = "subscriptions";
1235
+ return (target, context) => {
1236
+ (0, import_services3.Service)()(target, context);
1237
+ context.addInitializer(function() {
1238
+ serviceMetadata3.set(this, { _serviceType: "subscriptions" });
1239
+ });
1238
1240
  };
1239
1241
  }
1240
- __name(Subscriptions, "Subscriptions");
1241
1242
  function Subscription(options) {
1242
- return (object, propertyName, index) => {
1243
- const sub = subscription_default({
1244
- name: propertyName,
1245
- ...options
1246
- });
1247
- object.subscriptions = object.subscriptions || {};
1248
- object.subscriptions[propertyName] = sub;
1249
- import_services3.Container.registerHandler({
1250
- object,
1251
- propertyName,
1252
- index,
1253
- value: /* @__PURE__ */ __name((_containerInstance) => {
1254
- if (!object.serviceType || object.serviceType !== "subscriptions") {
1255
- throw new Error("You must pass a class decorated with @Subscriptions if you want to use @Subscription");
1256
- }
1257
- return sub;
1258
- }, "value")
1243
+ return (_target, context) => {
1244
+ const propertyKey = String(context.name);
1245
+ context.addInitializer(function() {
1246
+ const repo = serviceMetadata3.get(this.constructor);
1247
+ if (!repo || repo._serviceType !== "subscriptions") {
1248
+ throw new Error(
1249
+ "You must pass a class decorated with @Subscriptions if you want to use @Subscription"
1250
+ );
1251
+ }
1252
+ const subscriptions = subscriptionsMetadata.get(this) || {};
1253
+ subscriptions[propertyKey] = subscription_default({
1254
+ name: propertyKey,
1255
+ ...options
1256
+ });
1257
+ subscriptionsMetadata.set(this, subscriptions);
1258
+ this[propertyKey] = subscriptions[propertyKey];
1259
1259
  });
1260
1260
  };
1261
1261
  }
1262
- __name(Subscription, "Subscription");
1263
1262
  function getServiceSubscriptions(target) {
1264
- if (!target.prototype) {
1265
- throw new import_helpers5.UserError("You must pass a class to getSubscriptions");
1263
+ const instance = (0, import_services3.getInstance)(target);
1264
+ if (!serviceMetadata3.has(instance.constructor)) {
1265
+ throw new Error(
1266
+ "You must pass a class decorated with @Subscriptions to getServiceSubscriptions"
1267
+ );
1268
+ }
1269
+ const instanceMetadata = serviceMetadata3.get(instance.constructor);
1270
+ if (instanceMetadata._serviceType !== "subscriptions") {
1271
+ throw new Error(
1272
+ "You must pass a class decorated with @Subscriptions to getServiceSubscriptions"
1273
+ );
1266
1274
  }
1267
- return target.prototype.subscriptions || {};
1275
+ const subscriptionsMap = subscriptionsMetadata.get(instance) || {};
1276
+ return subscriptionsMap;
1268
1277
  }
1269
- __name(getServiceSubscriptions, "getServiceSubscriptions");
1270
1278
  // Annotate the CommonJS export names for ESM import in node:
1271
1279
  0 && (module.exports = {
1272
1280
  GraphQL,