@orion-js/graphql 4.0.0-next.3 → 4.0.0-next.5

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
@@ -309,7 +309,6 @@ var import_graphql10 = require("graphql");
309
309
  var import_graphql7 = require("graphql");
310
310
 
311
311
  // src/buildSchema/getType/index.ts
312
- var import_isPlainObject2 = __toESM(require("lodash/isPlainObject"), 1);
313
312
  var import_isArray2 = __toESM(require("lodash/isArray"), 1);
314
313
  var import_graphql6 = require("graphql");
315
314
  var import_schema2 = require("@orion-js/schema");
@@ -433,9 +432,11 @@ var import_graphql4 = require("graphql");
433
432
  var import_schema = require("@orion-js/schema");
434
433
 
435
434
  // src/resolversSchemas/getStaticFields.ts
436
- function getStaticFields(model) {
437
- const schema = model.getSchema();
435
+ function getStaticFields(schema) {
438
436
  if (!schema) return [];
437
+ if (schema.getSchema) {
438
+ schema = schema.getSchema();
439
+ }
439
440
  const keys = Object.keys(schema).filter((key) => !key.startsWith("__"));
440
441
  return keys.map((key) => {
441
442
  const field = schema[key];
@@ -447,49 +448,57 @@ function getStaticFields(model) {
447
448
  }
448
449
 
449
450
  // src/buildSchema/getArgs/getField.ts
451
+ Symbol.metadata ?? (Symbol.metadata = Symbol("Symbol.metadata"));
450
452
  var storedModelInput = {};
451
- var getModelInput = function(model, fields) {
452
- if (storedModelInput[model.name]) {
453
- 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
+ });
454
459
  }
455
- storedModelInput[model.name] = new import_graphql4.GraphQLInputObjectType({
456
- name: model.name + "Input",
457
- fields
458
- });
459
460
  return storedModelInput[model.name];
460
461
  };
461
- function getParams(type) {
462
- if (!type) {
463
- throw new Error(`No type specified`);
462
+ var resolveModelFields = (model) => {
463
+ const fields = {};
464
+ for (const field of getStaticFields(model)) {
465
+ fields[field.key] = { type: resolveType(field.type) };
464
466
  }
465
- if ((0, import_isArray.default)(type)) {
466
- const graphQLType = getParams(type[0]);
467
- return new import_graphql4.GraphQLList(graphQLType);
468
- } else if (!type._isFieldType && ((0, import_isPlainObject.default)(type) || type.__isModel)) {
469
- const model = type.__isModel ? type : type.__model;
470
- if (!model || !model.__isModel) throw new Error(`A type is not a Model`);
471
- const fields = {};
472
- for (const field of getStaticFields(model)) {
473
- fields[field.key] = {
474
- type: getParams(field.type)
475
- };
476
- }
477
- return getModelInput(model, fields);
478
- } else {
479
- const schemaType = (0, import_schema.getFieldType)(type);
480
- const graphQLType = getScalar_default(schemaType);
481
- 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");
482
474
  }
483
- }
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;
484
493
 
485
494
  // src/buildSchema/getArgs/index.ts
486
- function getArgs_default(params) {
495
+ async function getArgs_default(params) {
487
496
  if (!params) return;
488
497
  if (Object.keys(params).length === 0) return;
489
498
  const fields = {};
490
499
  for (const key of Object.keys(params)) {
491
500
  try {
492
- const type = getParams(params[key].type);
501
+ const type = getField_default(params[key].type);
493
502
  fields[key] = { type };
494
503
  } catch (error) {
495
504
  throw new Error(`Error creating GraphQL resolver params argument ${key}: ${error.message}`);
@@ -499,13 +508,13 @@ function getArgs_default(params) {
499
508
  }
500
509
 
501
510
  // src/errorHandler.ts
502
- var import_crypto = __toESM(require("crypto"), 1);
511
+ var import_node_crypto = __toESM(require("crypto"), 1);
503
512
  var import_graphql5 = require("graphql");
504
513
  function errorHandler(error, data) {
505
- const message = `Error in resolver "${data.name}" ${data.model ? `of model "${data.model.name}"` : ""}`;
506
- 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);
507
516
  error.hash = hash;
508
- if (error && error.isOrionError) {
517
+ if (error == null ? void 0 : error.isOrionError) {
509
518
  console.warn(message, error);
510
519
  throw new import_graphql5.GraphQLError(error.message, {
511
520
  originalError: error,
@@ -517,33 +526,32 @@ function errorHandler(error, data) {
517
526
  info: error.getInfo()
518
527
  }
519
528
  });
520
- } else {
521
- console.error(message, error);
522
- throw new import_graphql5.GraphQLError(`${error.message} [${hash}]`, {
523
- // originalError: error,
524
- extensions: {
525
- isOrionError: false,
526
- isValidationError: false,
527
- code: "INTERNAL_SERVER_ERROR",
528
- hash
529
- }
530
- });
531
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
+ });
532
540
  }
533
541
 
534
542
  // src/buildSchema/getType/getTypeAsResolver.ts
535
- function getTypeAsResolver_default({ resolver: resolver4, getGraphQLType: getGraphQLType2, options, model }) {
536
- const type = getGraphQLType2(resolver4.returns, options);
537
- 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);
538
546
  return {
539
547
  type,
540
548
  args,
541
549
  async resolve(item, params, context, info) {
542
550
  try {
543
- const result = await resolver4.resolve(item, params, context, info);
551
+ const result = await resolver2.resolve(item, params, context, info);
544
552
  return result;
545
553
  } catch (error) {
546
- errorHandler(error, { context, resolver: resolver4, options, model });
554
+ errorHandler(error, { context, resolver: resolver2, options, schema });
547
555
  throw error;
548
556
  }
549
557
  }
@@ -551,97 +559,117 @@ function getTypeAsResolver_default({ resolver: resolver4, getGraphQLType: getGra
551
559
  }
552
560
 
553
561
  // src/resolversSchemas/getDynamicFields.ts
554
- function getDynamicFields(model) {
555
- 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);
556
574
  if (!resolvers) return [];
557
575
  const keys = Object.keys(resolvers);
558
576
  return keys.map((key) => {
559
- const resolver4 = resolvers[key];
577
+ const resolver2 = resolvers[key];
560
578
  return {
561
- ...resolver4,
579
+ ...resolver2,
562
580
  key
563
581
  };
564
- }).filter((resolver4) => !resolver4.private);
582
+ }).filter((resolver2) => !resolver2.private);
565
583
  }
566
584
 
567
585
  // src/resolversSchemas/getModelLoadedResolvers.ts
568
- function getModelLoadedResolvers(model, options) {
586
+ function getModelLoadedResolvers(schema, options) {
569
587
  if (!options.modelResolvers) return [];
570
- const resolvers = options.modelResolvers[model.name];
588
+ const resolvers = options.modelResolvers[schema.__modelName];
571
589
  if (!resolvers) return [];
572
590
  const keys = Object.keys(resolvers);
573
591
  return keys.map((key) => {
574
- const resolver4 = resolvers[key];
592
+ const resolver2 = resolvers[key];
575
593
  return {
576
- ...resolver4,
594
+ ...resolver2,
577
595
  key
578
596
  };
579
- }).filter((resolver4) => !resolver4.private);
597
+ }).filter((resolver2) => !resolver2.private);
580
598
  }
581
599
 
582
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();
583
645
  function getGraphQLType(type, options) {
584
- if (!type) {
585
- throw new Error("Type is undefined");
586
- }
646
+ if (!type) throw new Error("Type is undefined");
587
647
  if ((0, import_isArray2.default)(type)) {
588
- const graphQLType = getGraphQLType(type[0], options);
589
- return new import_graphql6.GraphQLList(graphQLType);
590
- } else if (typeof type === "function" && type.getModel && type.__schemaId) {
591
- return getGraphQLType(type.getModel(), options);
592
- } else if (!type._isFieldType && ((0, import_isPlainObject2.default)(type) || type.__isModel)) {
593
- const model = type.__isModel ? type : type.__model;
594
- if (!model || !model.__isModel) throw new Error("Type is not a Model");
595
- if (model.graphQLType) return model.graphQLType;
596
- model.graphQLType = new import_graphql6.GraphQLObjectType({
597
- name: model.name,
598
- fields: () => {
599
- const fields = {};
600
- for (const field of getStaticFields(model)) {
601
- try {
602
- if (field.graphQLResolver) {
603
- fields[field.key] = getTypeAsResolver_default({
604
- resolver: field.graphQLResolver,
605
- getGraphQLType,
606
- options,
607
- model
608
- });
609
- } else {
610
- fields[field.key] = {
611
- type: getGraphQLType(field.type, options)
612
- };
613
- }
614
- } catch (error) {
615
- throw new Error(`Error getting type for ${field.key} ${error.message}`);
616
- }
617
- }
618
- for (const resolver4 of getDynamicFields(model)) {
619
- try {
620
- fields[resolver4.key] = getTypeAsResolver_default({ resolver: resolver4, getGraphQLType, options, model });
621
- } catch (error) {
622
- throw new Error(
623
- `Error getting resolver type for resolver "${resolver4.key}": ${error.message}`
624
- );
625
- }
626
- }
627
- for (const resolver4 of getModelLoadedResolvers(model, options)) {
628
- try {
629
- fields[resolver4.key] = getTypeAsResolver_default({ resolver: resolver4, getGraphQLType, options, model });
630
- } catch (error) {
631
- throw new Error(
632
- `Error getting resolver type for resolver "${resolver4.key}": ${error.message}`
633
- );
634
- }
635
- }
636
- return fields;
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;
637
665
  }
638
- });
639
- return model.graphQLType;
640
- } else {
641
- const schemaType = (0, import_schema2.getFieldType)(type);
642
- const graphQLType = getScalar_default(schemaType);
666
+ throw new Error(`Schema named "${modelName}" already registered`);
667
+ }
668
+ const graphQLType = createGraphQLObjectType(modelName, schema, options);
669
+ registeredGraphQLTypes.set(modelName, { schema, graphQLType });
643
670
  return graphQLType;
644
671
  }
672
+ return getScalar_default((0, import_schema2.getFieldType)(type));
645
673
  }
646
674
 
647
675
  // src/buildSchema/getResolvers/resolversStore.ts
@@ -655,21 +683,21 @@ async function getResolvers_default(options, mutation) {
655
683
  name: key,
656
684
  resolver: resolvers[key]
657
685
  };
658
- }).filter(({ resolver: resolver4 }) => !!resolver4.mutation === !!mutation).filter(({ resolver: resolver4 }) => !resolver4.private);
686
+ }).filter(({ resolver: resolver2 }) => !!resolver2.mutation === !!mutation).filter(({ resolver: resolver2 }) => !resolver2.private);
659
687
  const fields = {};
660
- for (const { resolver: resolver4, name } of filteredResolvers) {
661
- resolversStore[name] = resolver4;
662
- const type = await getGraphQLType(resolver4.returns, options);
663
- 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);
664
692
  fields[name] = {
665
693
  type,
666
694
  args,
667
- async resolve(root, params, context, info) {
695
+ async resolve(_root, params, context, info) {
668
696
  try {
669
- const result = await resolver4.resolve(params, context, info);
697
+ const result = await resolver2.resolve(params, context, info);
670
698
  return result;
671
699
  } catch (error) {
672
- errorHandler(error, { context, resolver: resolver4, options, name });
700
+ errorHandler(error, { context, resolver: resolver2, options, name });
673
701
  throw error;
674
702
  }
675
703
  }
@@ -757,10 +785,10 @@ function formatError_default(apolloError) {
757
785
  }
758
786
 
759
787
  // src/getApolloOptions/index.ts
760
- var import_lodash = require("lodash");
788
+ var import_lodash2 = require("lodash");
761
789
  async function getApolloOptions_default(options) {
762
790
  const schema = await buildSchema_default(options);
763
- const passedOptions = (0, import_lodash.omit)(options, [
791
+ const passedOptions = (0, import_lodash2.omit)(options, [
764
792
  "resolvers",
765
793
  "modelResolvers",
766
794
  "subscriptions",
@@ -863,6 +891,7 @@ async function startGraphQL_default(options) {
863
891
  path: "/graphql",
864
892
  bodyParser: "json",
865
893
  async resolve(req, res, viewer) {
894
+ ;
866
895
  req._viewer = viewer;
867
896
  return middleware(req, res, req.next);
868
897
  }
@@ -871,124 +900,126 @@ async function startGraphQL_default(options) {
871
900
  }
872
901
 
873
902
  // src/resolversSchemas/params.ts
874
- var import_resolvers3 = require("@orion-js/resolvers");
903
+ var import_resolvers2 = require("@orion-js/resolvers");
875
904
  var import_helpers2 = require("@orion-js/helpers");
876
905
 
877
- // src/resolversSchemas/getField.ts
878
- var import_isPlainObject3 = __toESM(require("lodash/isPlainObject"), 1);
879
- var import_isArray3 = __toESM(require("lodash/isArray"), 1);
906
+ // src/resolversSchemas/ResolverParamsInfo.ts
880
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");
881
928
  var import_omit = __toESM(require("lodash/omit"), 1);
882
- async function getParams2(field) {
883
- let { type } = field;
884
- if (typeof type === "function" && type.getModel && type.__schemaId) {
885
- const model = type.getModel();
886
- return await getParams2({ ...field, type: model });
887
- } else if ((0, import_isArray3.default)(type)) {
888
- const serialized = await getParams2({ ...field, type: type[0] });
929
+ async function getParams(field) {
930
+ const { type } = field;
931
+ if (Array.isArray(type)) {
932
+ const serialized = await getParams({ ...field, type: type[0] });
889
933
  return {
890
934
  ...serialized,
891
935
  type: [serialized.type],
892
936
  __graphQLType: `[${serialized.__graphQLType}]`
893
937
  };
894
- } else if (!type._isFieldType && ((0, import_isPlainObject3.default)(type) || type.__isModel)) {
895
- const model = type.__isModel ? type : type.__model;
896
- 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
+ }
897
946
  const fields = {};
898
- for (const field2 of getStaticFields(model)) {
899
- fields[field2.key] = await getParams2(field2);
947
+ for (const field2 of getStaticFields(schemaOfType)) {
948
+ fields[field2.key] = await getParams(field2);
900
949
  }
901
950
  return {
902
951
  ...(0, import_omit.default)(field, "key"),
903
952
  type: fields,
904
- __graphQLType: model.name + "Input"
905
- };
906
- } else {
907
- const schemaType = await (0, import_schema3.getFieldType)(type);
908
- const graphQLType = await getScalar_default(schemaType);
909
- return {
910
- ...(0, import_omit.default)(field, "key"),
911
- type: schemaType.name,
912
- __graphQLType: graphQLType.name
953
+ __graphQLType: `${modelName}Input`
913
954
  };
914
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
+ };
915
963
  }
916
964
 
917
965
  // src/resolversSchemas/serializeSchema.ts
966
+ Symbol.metadata ?? (Symbol.metadata = Symbol("Symbol.metadata"));
918
967
  async function serializeSchema(params) {
919
968
  if (!params) return;
920
- if (typeof params === "function" && params.getModel && params.__schemaId) {
921
- params = params.getModel().getCleanSchema();
922
- }
923
- if (Object.keys(params).length === 0) return;
969
+ const schema = (0, import_schema5.getSchemaFromAnyOrionForm)(params);
970
+ if (Object.keys(schema).length === 0) return;
924
971
  const fields = {};
925
- for (const key of Object.keys(params)) {
926
- const field = params[key];
927
- 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);
928
975
  }
929
976
  return fields;
930
977
  }
931
978
 
979
+ // src/resolversSchemas/params.ts
980
+ var import_schema7 = require("@orion-js/schema");
981
+
932
982
  // src/resolversSchemas/getBasicResultQuery.ts
933
- 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");
934
985
  async function getBasicQuery(field) {
935
986
  if (!field.type) return "";
936
- if ((0, import_isArray4.default)(field.type) && field.type[0].__model || field.type.__model) {
937
- const model = (0, import_isArray4.default)(field.type) ? field.type[0].__model : field.type.__model;
938
- const fields = [];
939
- for (const field2 of getStaticFields(model)) {
940
- fields.push(await getBasicQuery(field2));
941
- }
942
- const key = field.key ? `${field.key} ` : "";
943
- return `${key}{ ${fields.join(" ")} }`;
944
- } 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)) {
945
994
  return field.key;
946
995
  }
947
- }
948
-
949
- // src/resolversSchemas/ResolverParamsInfo.ts
950
- var import_models = require("@orion-js/models");
951
- var import_resolvers2 = require("@orion-js/resolvers");
952
- var import_lodash2 = require("lodash");
953
- var resolverReturnsIsModel = (returns) => {
954
- return returns && returns.__isModel;
955
- };
956
- var ResolverParamsInfo_default = (0, import_models.createModel)({
957
- name: "ResolverParams",
958
- schema: {
959
- name: {
960
- type: String
961
- }
962
- },
963
- resolvers: {
964
- params: (0, import_resolvers2.resolver)({
965
- returns: "blackbox",
966
- resolve: async function({ resolver: resolver4 }) {
967
- return await serializeSchema(resolver4.params);
968
- }
969
- }),
970
- result: (0, import_resolvers2.resolver)({
971
- returns: String,
972
- resolve: async function({ resolver: resolver4 }) {
973
- const returns = (0, import_lodash2.isArray)(resolver4.returns) ? resolver4.returns[0] : resolver4.returns;
974
- if (resolverReturnsIsModel(returns)) return returns.name;
975
- return;
976
- }
977
- }),
978
- basicResultQuery: (0, import_resolvers2.resolver)({
979
- returns: String,
980
- resolve: async function({ resolver: resolver4 }) {
981
- const returns = (0, import_lodash2.isArray)(resolver4.returns) ? resolver4.returns[0] : resolver4.returns;
982
- return await getBasicQuery({
983
- type: resolverReturnsIsModel(returns) ? returns.getSchema() : ""
984
- });
985
- }
986
- })
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));
987
1000
  }
988
- });
1001
+ const key = field.key ? `${field.key} ` : "";
1002
+ return `${key}{ ${fields.join(" ")} }`;
1003
+ }
989
1004
 
990
1005
  // src/resolversSchemas/params.ts
991
- 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)({
992
1023
  params: {
993
1024
  name: {
994
1025
  type: "ID"
@@ -999,18 +1030,23 @@ var params_default = (0, import_resolvers3.resolver)({
999
1030
  },
1000
1031
  returns: ResolverParamsInfo_default,
1001
1032
  mutation: false,
1002
- resolve: async function({ mutation, name }, viewer) {
1003
- const resolver4 = resolversStore[name];
1004
- if (!resolver4) {
1033
+ async resolve({ mutation, name }) {
1034
+ const resolver2 = resolversStore[name];
1035
+ if (!resolver2) {
1005
1036
  throw new import_helpers2.UserError(
1006
1037
  "notFound",
1007
1038
  `${mutation ? "Mutation" : "Query"} named "${name}" not found`
1008
1039
  );
1009
1040
  }
1010
- if (!!resolver4.mutation !== !!mutation) {
1041
+ if (!!resolver2.mutation !== !!mutation) {
1011
1042
  throw new import_helpers2.UserError("incorrectType", `"${name}" is ${mutation ? "not" : ""} a mutation`);
1012
1043
  }
1013
- return { resolver: resolver4, name };
1044
+ return {
1045
+ name,
1046
+ basicResultQuery: await getInternalBasicResultQuery(resolver2.returns),
1047
+ params: await serializeSchema(resolver2.params),
1048
+ result: getResultTypeName(resolver2.returns)
1049
+ };
1014
1050
  }
1015
1051
  });
1016
1052
 
@@ -1033,160 +1069,211 @@ var OrionSubscription = class {
1033
1069
 
1034
1070
  // src/service/global.ts
1035
1071
  var import_services = require("@orion-js/services");
1036
- var import_resolvers4 = require("@orion-js/resolvers");
1037
- var import_helpers3 = require("@orion-js/helpers");
1072
+ var import_resolvers3 = require("@orion-js/resolvers");
1038
1073
 
1039
- // src/service/otherParams.ts
1040
- function createRegisterResolverMetadata(metadataKey, isArray6 = false) {
1041
- return (metadata) => {
1042
- return (target, propertyKey, descriptor) => {
1043
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1044
- target[metadataKey] = target[metadataKey] || {};
1045
- if (isArray6) {
1046
- target[metadataKey][propertyKey] = target[metadataKey][propertyKey] || [];
1047
- target[metadataKey][propertyKey].unshift(metadata);
1048
- } else {
1049
- target[metadataKey][propertyKey] = metadata;
1050
- }
1051
- };
1052
- };
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);
1053
1086
  }
1054
1087
  function getTargetMetadata(target, propertyKey, metadataKey) {
1055
- const items = target[metadataKey] || {};
1056
- 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
+ };
1057
1112
  }
1058
- var UseMiddleware = createRegisterResolverMetadata("middlewares", true);
1059
- var ResolverParams = createRegisterResolverMetadata("params");
1060
- var ResolverReturns = createRegisterResolverMetadata("returns");
1061
1113
 
1062
1114
  // src/service/global.ts
1115
+ var serviceMetadata = /* @__PURE__ */ new WeakMap();
1116
+ var resolversMetadata2 = /* @__PURE__ */ new WeakMap();
1063
1117
  function Resolvers() {
1064
- return (target) => {
1065
- (0, import_services.Service)()(target);
1066
- 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
+ });
1067
1123
  };
1068
1124
  }
1069
- function Query(options) {
1070
- return (target, propertyKey, descriptor) => {
1071
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1072
- target.resolvers = target.resolvers || {};
1073
- target.resolvers[propertyKey] = (0, import_resolvers4.resolver)({
1074
- resolverId: propertyKey,
1075
- params: getTargetMetadata(target, propertyKey, "params"),
1076
- returns: getTargetMetadata(target, propertyKey, "returns"),
1077
- middlewares: getTargetMetadata(target, propertyKey, "middlewares"),
1078
- ...options,
1079
- resolve: async (params, viewer, info) => {
1080
- const instance = (0, import_services.getInstance)(target.service);
1081
- return await instance[propertyKey](params, viewer, info);
1082
- }
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);
1083
1139
  });
1140
+ return method;
1084
1141
  };
1085
1142
  }
1086
1143
  function Mutation(options) {
1087
- return (target, propertyKey, descriptor) => {
1088
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1089
- target.resolvers = target.resolvers || {};
1090
- target.resolvers[propertyKey] = (0, import_resolvers4.resolver)({
1091
- resolverId: propertyKey,
1092
- params: getTargetMetadata(target, propertyKey, "params"),
1093
- returns: getTargetMetadata(target, propertyKey, "returns"),
1094
- middlewares: getTargetMetadata(target, propertyKey, "middlewares"),
1095
- ...options,
1096
- mutation: true,
1097
- resolve: async (params, viewer, info) => {
1098
- const instance = (0, import_services.getInstance)(target.service);
1099
- return await instance[propertyKey](params, viewer, info);
1100
- }
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);
1101
1158
  });
1159
+ return method;
1102
1160
  };
1103
1161
  }
1104
1162
  function getServiceResolvers(target) {
1105
- if (!target.prototype) {
1106
- 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");
1107
1170
  }
1108
- return target.prototype.resolvers || {};
1171
+ const resolversMap = resolversMetadata2.get(instance) || {};
1172
+ return resolversMap;
1109
1173
  }
1110
1174
 
1111
1175
  // src/service/model.ts
1112
1176
  var import_services2 = require("@orion-js/services");
1113
- var import_resolvers5 = require("@orion-js/resolvers");
1114
- var import_helpers4 = require("@orion-js/helpers");
1115
- function ModelResolver(options) {
1116
- return (target, propertyKey, descriptor) => {
1117
- if (!descriptor.value) throw new Error(`You must pass resolver function to ${propertyKey}`);
1118
- target.resolvers = target.resolvers || {};
1119
- target.resolvers[propertyKey] = (0, import_resolvers5.modelResolver)({
1120
- params: getTargetMetadata(target, propertyKey, "params"),
1121
- returns: getTargetMetadata(target, propertyKey, "returns"),
1122
- middlewares: getTargetMetadata(target, propertyKey, "middlewares"),
1123
- ...options,
1124
- resolve: async (item, params, viewer, info) => {
1125
- const instance = (0, import_services2.getInstance)(target.service);
1126
- return await instance[propertyKey](item, params, viewer, info);
1127
- }
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
+ });
1128
1191
  });
1129
1192
  };
1130
1193
  }
1131
- function ModelResolvers(typedSchema, options = {}) {
1132
- return (target) => {
1133
- (0, import_services2.Service)()(target);
1134
- target.prototype.modelName = options.modelName || typedSchema.name;
1135
- if (!target.prototype.modelName) {
1136
- throw new Error("The specified model has no name or is not a model");
1137
- }
1138
- target.prototype.typedSchema = typedSchema;
1139
- target.prototype.service = target;
1140
- 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;
1141
1209
  };
1142
1210
  }
1143
1211
  function getServiceModelResolvers(target) {
1144
- if (!target.prototype) {
1145
- 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
+ );
1146
1223
  }
1224
+ const modelResolversMap = modelResolversMetadata.get(instance) || {};
1147
1225
  return {
1148
- [target.prototype.modelName]: target.prototype.resolvers || {}
1226
+ [instanceMetadata._modelName]: modelResolversMap
1149
1227
  };
1150
1228
  }
1151
1229
 
1152
1230
  // src/service/subscription.ts
1153
1231
  var import_services3 = require("@orion-js/services");
1154
- var import_helpers5 = require("@orion-js/helpers");
1232
+ var serviceMetadata3 = /* @__PURE__ */ new WeakMap();
1233
+ var subscriptionsMetadata = /* @__PURE__ */ new WeakMap();
1155
1234
  function Subscriptions() {
1156
- return (target) => {
1157
- (0, import_services3.Service)()(target);
1158
- target.prototype.service = target;
1159
- 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
+ });
1160
1240
  };
1161
1241
  }
1162
1242
  function Subscription(options) {
1163
- return (object, propertyName, index) => {
1164
- const sub = subscription_default({
1165
- name: propertyName,
1166
- ...options
1167
- });
1168
- object.subscriptions = object.subscriptions || {};
1169
- object.subscriptions[propertyName] = sub;
1170
- import_services3.Container.registerHandler({
1171
- object,
1172
- propertyName,
1173
- index,
1174
- value: (_containerInstance) => {
1175
- if (!object.serviceType || object.serviceType !== "subscriptions") {
1176
- throw new Error(
1177
- "You must pass a class decorated with @Subscriptions if you want to use @Subscription"
1178
- );
1179
- }
1180
- return sub;
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
+ );
1181
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];
1182
1259
  });
1183
1260
  };
1184
1261
  }
1185
1262
  function getServiceSubscriptions(target) {
1186
- if (!target.prototype) {
1187
- 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
+ );
1188
1274
  }
1189
- return target.prototype.subscriptions || {};
1275
+ const subscriptionsMap = subscriptionsMetadata.get(instance) || {};
1276
+ return subscriptionsMap;
1190
1277
  }
1191
1278
  // Annotate the CommonJS export names for ESM import in node:
1192
1279
  0 && (module.exports = {