UNPKG

6.56 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7const graphql = require('graphql');
8const DataLoader = _interopDefault(require('dataloader'));
9const delegate = require('@graphql-tools/delegate');
10require('tslib');
11
12var VisitSchemaKind;
13(function (VisitSchemaKind) {
14 VisitSchemaKind["TYPE"] = "VisitSchemaKind.TYPE";
15 VisitSchemaKind["SCALAR_TYPE"] = "VisitSchemaKind.SCALAR_TYPE";
16 VisitSchemaKind["ENUM_TYPE"] = "VisitSchemaKind.ENUM_TYPE";
17 VisitSchemaKind["COMPOSITE_TYPE"] = "VisitSchemaKind.COMPOSITE_TYPE";
18 VisitSchemaKind["OBJECT_TYPE"] = "VisitSchemaKind.OBJECT_TYPE";
19 VisitSchemaKind["INPUT_OBJECT_TYPE"] = "VisitSchemaKind.INPUT_OBJECT_TYPE";
20 VisitSchemaKind["ABSTRACT_TYPE"] = "VisitSchemaKind.ABSTRACT_TYPE";
21 VisitSchemaKind["UNION_TYPE"] = "VisitSchemaKind.UNION_TYPE";
22 VisitSchemaKind["INTERFACE_TYPE"] = "VisitSchemaKind.INTERFACE_TYPE";
23 VisitSchemaKind["ROOT_OBJECT"] = "VisitSchemaKind.ROOT_OBJECT";
24 VisitSchemaKind["QUERY"] = "VisitSchemaKind.QUERY";
25 VisitSchemaKind["MUTATION"] = "VisitSchemaKind.MUTATION";
26 VisitSchemaKind["SUBSCRIPTION"] = "VisitSchemaKind.SUBSCRIPTION";
27})(VisitSchemaKind || (VisitSchemaKind = {}));
28var MapperKind;
29(function (MapperKind) {
30 MapperKind["TYPE"] = "MapperKind.TYPE";
31 MapperKind["SCALAR_TYPE"] = "MapperKind.SCALAR_TYPE";
32 MapperKind["ENUM_TYPE"] = "MapperKind.ENUM_TYPE";
33 MapperKind["COMPOSITE_TYPE"] = "MapperKind.COMPOSITE_TYPE";
34 MapperKind["OBJECT_TYPE"] = "MapperKind.OBJECT_TYPE";
35 MapperKind["INPUT_OBJECT_TYPE"] = "MapperKind.INPUT_OBJECT_TYPE";
36 MapperKind["ABSTRACT_TYPE"] = "MapperKind.ABSTRACT_TYPE";
37 MapperKind["UNION_TYPE"] = "MapperKind.UNION_TYPE";
38 MapperKind["INTERFACE_TYPE"] = "MapperKind.INTERFACE_TYPE";
39 MapperKind["ROOT_OBJECT"] = "MapperKind.ROOT_OBJECT";
40 MapperKind["QUERY"] = "MapperKind.QUERY";
41 MapperKind["MUTATION"] = "MapperKind.MUTATION";
42 MapperKind["SUBSCRIPTION"] = "MapperKind.SUBSCRIPTION";
43 MapperKind["DIRECTIVE"] = "MapperKind.DIRECTIVE";
44 MapperKind["FIELD"] = "MapperKind.FIELD";
45 MapperKind["COMPOSITE_FIELD"] = "MapperKind.COMPOSITE_FIELD";
46 MapperKind["OBJECT_FIELD"] = "MapperKind.OBJECT_FIELD";
47 MapperKind["ROOT_FIELD"] = "MapperKind.ROOT_FIELD";
48 MapperKind["QUERY_ROOT_FIELD"] = "MapperKind.QUERY_ROOT_FIELD";
49 MapperKind["MUTATION_ROOT_FIELD"] = "MapperKind.MUTATION_ROOT_FIELD";
50 MapperKind["SUBSCRIPTION_ROOT_FIELD"] = "MapperKind.SUBSCRIPTION_ROOT_FIELD";
51 MapperKind["INTERFACE_FIELD"] = "MapperKind.INTERFACE_FIELD";
52 MapperKind["INPUT_OBJECT_FIELD"] = "MapperKind.INPUT_OBJECT_FIELD";
53 MapperKind["ARGUMENT"] = "MapperKind.ARGUMENT";
54 MapperKind["ENUM_VALUE"] = "MapperKind.ENUM_VALUE";
55})(MapperKind || (MapperKind = {}));
56
57function relocatedError(originalError, path) {
58 return new graphql.GraphQLError(originalError.message, originalError.nodes, originalError.source, originalError.positions, path === null ? undefined : path === undefined ? originalError.path : path, originalError.originalError, originalError.extensions);
59}
60
61const cache1 = new WeakMap();
62function createBatchFn(options) {
63 var _a;
64 const argsFromKeys = (_a = options.argsFromKeys) !== null && _a !== void 0 ? _a : ((keys) => ({ ids: keys }));
65 const { valuesFromResults, lazyOptionsFn } = options;
66 return async (keys) => {
67 const results = await delegate.delegateToSchema({
68 returnType: new graphql.GraphQLList(graphql.getNamedType(options.info.returnType)),
69 onLocatedError: originalError => relocatedError(originalError, originalError.path.slice(0, 0).concat(originalError.path.slice(2))),
70 args: argsFromKeys(keys),
71 ...(lazyOptionsFn == null ? options : lazyOptionsFn(options)),
72 });
73 if (results instanceof Error) {
74 return keys.map(() => results);
75 }
76 const values = valuesFromResults == null ? results : valuesFromResults(results, keys);
77 return Array.isArray(values) ? values : keys.map(() => values);
78 };
79}
80function getLoader(options) {
81 var _a;
82 const fieldName = (_a = options.fieldName) !== null && _a !== void 0 ? _a : options.info.fieldName;
83 let cache2 = cache1.get(options.info.fieldNodes);
84 if (cache2 === undefined) {
85 cache2 = new WeakMap();
86 cache1.set(options.info.fieldNodes, cache2);
87 const loaders = Object.create(null);
88 cache2.set(options.schema, loaders);
89 const batchFn = createBatchFn(options);
90 const loader = new DataLoader(keys => batchFn(keys), options.dataLoaderOptions);
91 loaders[fieldName] = loader;
92 return loader;
93 }
94 let loaders = cache2.get(options.schema);
95 if (loaders === undefined) {
96 loaders = Object.create(null);
97 cache2.set(options.schema, loaders);
98 const batchFn = createBatchFn(options);
99 const loader = new DataLoader(keys => batchFn(keys), options.dataLoaderOptions);
100 loaders[fieldName] = loader;
101 return loader;
102 }
103 let loader = loaders[fieldName];
104 if (loader === undefined) {
105 const batchFn = createBatchFn(options);
106 loader = new DataLoader(keys => batchFn(keys), options.dataLoaderOptions);
107 loaders[fieldName] = loader;
108 }
109 return loader;
110}
111
112function batchDelegateToSchema(options) {
113 const key = options.key;
114 if (key == null) {
115 return null;
116 }
117 else if (Array.isArray(key) && !key.length) {
118 return [];
119 }
120 const loader = getLoader(options);
121 return Array.isArray(key) ? loader.loadMany(key) : loader.load(key);
122}
123
124function createBatchDelegateFn(optionsOrArgsFromKeys, lazyOptionsFn, dataLoaderOptions, valuesFromResults) {
125 return typeof optionsOrArgsFromKeys === 'function'
126 ? createBatchDelegateFnImpl({
127 argsFromKeys: optionsOrArgsFromKeys,
128 lazyOptionsFn,
129 dataLoaderOptions,
130 valuesFromResults,
131 })
132 : createBatchDelegateFnImpl(optionsOrArgsFromKeys);
133}
134function createBatchDelegateFnImpl(options) {
135 return batchDelegateOptions => {
136 const loader = getLoader({
137 ...options,
138 ...batchDelegateOptions,
139 });
140 return loader.load(batchDelegateOptions.key);
141 };
142}
143
144exports.batchDelegateToSchema = batchDelegateToSchema;
145exports.createBatchDelegateFn = createBatchDelegateFn;
146//# sourceMappingURL=index.cjs.js.map