1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', { value: true });
|
4 |
|
5 | function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
6 |
|
7 | const tslib = require('tslib');
|
8 | const graphql = require('graphql');
|
9 | const DataLoader = _interopDefault(require('dataloader'));
|
10 | const delegate = require('@graphql-tools/delegate/es5');
|
11 |
|
12 | var 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 = {}));
|
28 | var 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 |
|
57 | function 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 |
|
61 | var cache1 = new WeakMap();
|
62 | function createBatchFn(options) {
|
63 | var _this = this;
|
64 | var _a;
|
65 | var argsFromKeys = (_a = options.argsFromKeys) !== null && _a !== void 0 ? _a : (function (keys) { return ({ ids: keys }); });
|
66 | var valuesFromResults = options.valuesFromResults, lazyOptionsFn = options.lazyOptionsFn;
|
67 | return function (keys) { return tslib.__awaiter(_this, void 0, void 0, function () {
|
68 | var results, values;
|
69 | return tslib.__generator(this, function (_a) {
|
70 | switch (_a.label) {
|
71 | case 0: return [4 , delegate.delegateToSchema(tslib.__assign({ returnType: new graphql.GraphQLList(graphql.getNamedType(options.info.returnType)), onLocatedError: function (originalError) {
|
72 | return relocatedError(originalError, originalError.path.slice(0, 0).concat(originalError.path.slice(2)));
|
73 | }, args: argsFromKeys(keys) }, (lazyOptionsFn == null ? options : lazyOptionsFn(options))))];
|
74 | case 1:
|
75 | results = _a.sent();
|
76 | if (results instanceof Error) {
|
77 | return [2 , keys.map(function () { return results; })];
|
78 | }
|
79 | values = valuesFromResults == null ? results : valuesFromResults(results, keys);
|
80 | return [2 , Array.isArray(values) ? values : keys.map(function () { return values; })];
|
81 | }
|
82 | });
|
83 | }); };
|
84 | }
|
85 | function getLoader(options) {
|
86 | var _a;
|
87 | var fieldName = (_a = options.fieldName) !== null && _a !== void 0 ? _a : options.info.fieldName;
|
88 | var cache2 = cache1.get(options.info.fieldNodes);
|
89 | if (cache2 === undefined) {
|
90 | cache2 = new WeakMap();
|
91 | cache1.set(options.info.fieldNodes, cache2);
|
92 | var loaders_1 = Object.create(null);
|
93 | cache2.set(options.schema, loaders_1);
|
94 | var batchFn_1 = createBatchFn(options);
|
95 | var loader_1 = new DataLoader(function (keys) { return batchFn_1(keys); }, options.dataLoaderOptions);
|
96 | loaders_1[fieldName] = loader_1;
|
97 | return loader_1;
|
98 | }
|
99 | var loaders = cache2.get(options.schema);
|
100 | if (loaders === undefined) {
|
101 | loaders = Object.create(null);
|
102 | cache2.set(options.schema, loaders);
|
103 | var batchFn_2 = createBatchFn(options);
|
104 | var loader_2 = new DataLoader(function (keys) { return batchFn_2(keys); }, options.dataLoaderOptions);
|
105 | loaders[fieldName] = loader_2;
|
106 | return loader_2;
|
107 | }
|
108 | var loader = loaders[fieldName];
|
109 | if (loader === undefined) {
|
110 | var batchFn_3 = createBatchFn(options);
|
111 | loader = new DataLoader(function (keys) { return batchFn_3(keys); }, options.dataLoaderOptions);
|
112 | loaders[fieldName] = loader;
|
113 | }
|
114 | return loader;
|
115 | }
|
116 |
|
117 | function batchDelegateToSchema(options) {
|
118 | var key = options.key;
|
119 | if (key == null) {
|
120 | return null;
|
121 | }
|
122 | else if (Array.isArray(key) && !key.length) {
|
123 | return [];
|
124 | }
|
125 | var loader = getLoader(options);
|
126 | return Array.isArray(key) ? loader.loadMany(key) : loader.load(key);
|
127 | }
|
128 |
|
129 | function createBatchDelegateFn(optionsOrArgsFromKeys, lazyOptionsFn, dataLoaderOptions, valuesFromResults) {
|
130 | return typeof optionsOrArgsFromKeys === 'function'
|
131 | ? createBatchDelegateFnImpl({
|
132 | argsFromKeys: optionsOrArgsFromKeys,
|
133 | lazyOptionsFn: lazyOptionsFn,
|
134 | dataLoaderOptions: dataLoaderOptions,
|
135 | valuesFromResults: valuesFromResults,
|
136 | })
|
137 | : createBatchDelegateFnImpl(optionsOrArgsFromKeys);
|
138 | }
|
139 | function createBatchDelegateFnImpl(options) {
|
140 | return function (batchDelegateOptions) {
|
141 | var loader = getLoader(tslib.__assign(tslib.__assign({}, options), batchDelegateOptions));
|
142 | return loader.load(batchDelegateOptions.key);
|
143 | };
|
144 | }
|
145 |
|
146 | exports.batchDelegateToSchema = batchDelegateToSchema;
|
147 | exports.createBatchDelegateFn = createBatchDelegateFn;
|
148 |
|