1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | 'use strict';
|
11 |
|
12 | var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
|
13 |
|
14 | var _toConsumableArray2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/toConsumableArray"));
|
15 |
|
16 | function compileAll(_ref) {
|
17 | var baseDir = _ref.baseDir,
|
18 | baseDocuments = _ref.baseDocuments,
|
19 | baseSchema = _ref.baseSchema,
|
20 | compilerTransforms = _ref.compilerTransforms,
|
21 | documents = _ref.documents,
|
22 | extraValidationRules = _ref.extraValidationRules,
|
23 | reporter = _ref.reporter,
|
24 | schemaExtensions = _ref.schemaExtensions,
|
25 | typeGenerator = _ref.typeGenerator;
|
26 |
|
27 |
|
28 | var transformedSchema = require("./ASTConvert").transformASTSchema(baseSchema, schemaExtensions);
|
29 |
|
30 | var extendedSchema = require("./ASTConvert").extendASTSchema(transformedSchema, (0, _toConsumableArray2["default"])(baseDocuments).concat((0, _toConsumableArray2["default"])(documents)));
|
31 |
|
32 |
|
33 |
|
34 | var validationRules = (0, _toConsumableArray2["default"])(require("./RelayValidator").LOCAL_RULES).concat((0, _toConsumableArray2["default"])(require("./RelayValidator").GLOBAL_RULES));
|
35 |
|
36 | if (extraValidationRules) {
|
37 | validationRules = (0, _toConsumableArray2["default"])(validationRules).concat((0, _toConsumableArray2["default"])(extraValidationRules.LOCAL_RULES || []), (0, _toConsumableArray2["default"])(extraValidationRules.GLOBAL_RULES || []));
|
38 | }
|
39 |
|
40 | var definitions = require("./ASTConvert").convertASTDocumentsWithBase(extendedSchema, baseDocuments, documents, validationRules, require("./RelayParser").transform);
|
41 |
|
42 | var compilerContext = new (require("./GraphQLCompilerContext"))(baseSchema, extendedSchema).addAll(definitions);
|
43 | var transformedTypeContext = compilerContext.applyTransforms(typeGenerator.transforms, reporter);
|
44 | var transformedQueryContext = compilerContext.applyTransforms((0, _toConsumableArray2["default"])(compilerTransforms.commonTransforms).concat((0, _toConsumableArray2["default"])(compilerTransforms.queryTransforms)), reporter);
|
45 |
|
46 | var artifacts = require("./compileRelayArtifacts")(compilerContext, compilerTransforms, reporter);
|
47 |
|
48 | return {
|
49 | artifacts: artifacts,
|
50 | definitions: definitions,
|
51 | transformedQueryContext: transformedQueryContext,
|
52 | transformedTypeContext: transformedTypeContext
|
53 | };
|
54 | }
|
55 |
|
56 | function writeAll(_ref2) {
|
57 | var writerConfig = _ref2.config,
|
58 | onlyValidate = _ref2.onlyValidate,
|
59 | baseDocuments = _ref2.baseDocuments,
|
60 | documents = _ref2.documents,
|
61 | baseSchema = _ref2.schema,
|
62 | reporter = _ref2.reporter,
|
63 | sourceControl = _ref2.sourceControl;
|
64 | return require("./GraphQLCompilerProfiler").asyncContext('RelayFileWriter.writeAll',
|
65 |
|
66 | _asyncToGenerator(function* () {
|
67 | var _compileAll = compileAll({
|
68 | baseDir: writerConfig.baseDir,
|
69 | baseDocuments: baseDocuments.valueSeq().toArray(),
|
70 | baseSchema: baseSchema,
|
71 | compilerTransforms: writerConfig.compilerTransforms,
|
72 | documents: documents.valueSeq().toArray(),
|
73 | extraValidationRules: writerConfig.validationRules,
|
74 | reporter: reporter,
|
75 | schemaExtensions: writerConfig.schemaExtensions,
|
76 | typeGenerator: writerConfig.typeGenerator
|
77 | }),
|
78 | artifactsWithBase = _compileAll.artifacts,
|
79 | definitions = _compileAll.definitions,
|
80 | transformedTypeContext = _compileAll.transformedTypeContext,
|
81 | transformedQueryContext = _compileAll.transformedQueryContext;
|
82 |
|
83 |
|
84 | var baseDefinitionNames = new Set();
|
85 | baseDocuments.forEach(function (doc) {
|
86 | doc.definitions.forEach(function (def) {
|
87 | if (require("./GraphQLSchemaUtils").isExecutableDefinitionAST(def) && def.name) {
|
88 | baseDefinitionNames.add(def.name.value);
|
89 | }
|
90 | });
|
91 | });
|
92 |
|
93 |
|
94 | var artifacts = artifactsWithBase.filter(function (node) {
|
95 | var sourceName = require("./GraphQLDerivedFromMetadata").getReaderSourceDefinitionName(node);
|
96 |
|
97 | return !baseDefinitionNames.has(sourceName);
|
98 | });
|
99 | var artifactMap = new Map(artifacts.map(function (artifact) {
|
100 | return [artifact.kind === 'Request' ? artifact.params.name : artifact.name, artifact];
|
101 | }));
|
102 | var existingFragmentNames = new Set(definitions.map(function (definition) {
|
103 | return definition.name;
|
104 | }));
|
105 | var definitionsMeta = new Map();
|
106 |
|
107 | var getDefinitionMeta = function getDefinitionMeta(definitionName) {
|
108 | var artifact = require("nullthrows")(artifactMap.get(definitionName));
|
109 |
|
110 | var sourceName = require("./GraphQLDerivedFromMetadata").getReaderSourceDefinitionName(artifact);
|
111 |
|
112 | var definitionMeta = definitionsMeta.get(sourceName);
|
113 | !definitionMeta ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayFileWriter: Could not determine source for definition: `%s`.', definitionName) : require("fbjs/lib/invariant")(false) : void 0;
|
114 | return definitionMeta;
|
115 | };
|
116 |
|
117 | documents.forEach(function (doc, filePath) {
|
118 | doc.definitions.forEach(function (def) {
|
119 | if (def.name) {
|
120 | definitionsMeta.set(def.name.value, {
|
121 | dir: require("path").join(writerConfig.baseDir, require("path").dirname(filePath)),
|
122 | ast: def
|
123 | });
|
124 | }
|
125 | });
|
126 | });
|
127 |
|
128 |
|
129 | baseDefinitionNames.forEach(function (baseDefinitionName) {
|
130 | existingFragmentNames["delete"](baseDefinitionName);
|
131 | });
|
132 | var allOutputDirectories = new Map();
|
133 |
|
134 | var addCodegenDir = function addCodegenDir(dirPath) {
|
135 | var codegenDir = new (require("./CodegenDirectory"))(dirPath, {
|
136 | onlyValidate: onlyValidate
|
137 | });
|
138 | allOutputDirectories.set(dirPath, codegenDir);
|
139 | return codegenDir;
|
140 | };
|
141 |
|
142 | var _iteratorNormalCompletion = true;
|
143 | var _didIteratorError = false;
|
144 | var _iteratorError = undefined;
|
145 |
|
146 | try {
|
147 | for (var _iterator = (writerConfig.generatedDirectories || [])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
148 | var existingDirectory = _step.value;
|
149 | addCodegenDir(existingDirectory);
|
150 | }
|
151 | } catch (err) {
|
152 | _didIteratorError = true;
|
153 | _iteratorError = err;
|
154 | } finally {
|
155 | try {
|
156 | if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
157 | _iterator["return"]();
|
158 | }
|
159 | } finally {
|
160 | if (_didIteratorError) {
|
161 | throw _iteratorError;
|
162 | }
|
163 | }
|
164 | }
|
165 |
|
166 | var configOutputDirectory;
|
167 |
|
168 | if (writerConfig.outputDir) {
|
169 | configOutputDirectory = addCodegenDir(writerConfig.outputDir);
|
170 | }
|
171 |
|
172 | var getGeneratedDirectory = function getGeneratedDirectory(definitionName) {
|
173 | if (configOutputDirectory) {
|
174 | return configOutputDirectory;
|
175 | }
|
176 |
|
177 | var generatedPath = require("path").join(getDefinitionMeta(definitionName).dir, '__generated__');
|
178 |
|
179 | var cachedDir = allOutputDirectories.get(generatedPath);
|
180 |
|
181 | if (!cachedDir) {
|
182 | cachedDir = addCodegenDir(generatedPath);
|
183 | }
|
184 |
|
185 | return cachedDir;
|
186 | };
|
187 |
|
188 | var formatModule = require("./GraphQLCompilerProfiler").instrument(writerConfig.formatModule, 'RelayFileWriter:formatModule');
|
189 |
|
190 | var persistQuery = writerConfig.persistQuery ? require("./GraphQLCompilerProfiler").instrumentWait(writerConfig.persistQuery, 'RelayFileWriter:persistQuery') : null;
|
191 |
|
192 | try {
|
193 | yield Promise.all(artifacts.map(
|
194 |
|
195 | function () {
|
196 | var _ref3 = _asyncToGenerator(function* (node) {
|
197 | var nodeName = node.kind === 'Request' ? node.params.name : node.name;
|
198 |
|
199 | if (baseDefinitionNames.has(nodeName)) {
|
200 |
|
201 | return;
|
202 | }
|
203 |
|
204 | var typeNode = transformedTypeContext.get(nodeName);
|
205 | var typeText = typeNode ? writerConfig.typeGenerator.generate(typeNode, {
|
206 | customScalars: writerConfig.customScalars,
|
207 | enumsHasteModule: writerConfig.enumsHasteModule,
|
208 | existingFragmentNames: existingFragmentNames,
|
209 | optionalInputFields: writerConfig.optionalInputFieldsForFlow,
|
210 | useHaste: writerConfig.useHaste,
|
211 | useSingleArtifactDirectory: !!writerConfig.outputDir,
|
212 | noFutureProofEnums: writerConfig.noFutureProofEnums
|
213 | }) : '';
|
214 |
|
215 | var sourceHash = require("./GraphQLCompilerProfiler").run('hashGraphQL', function () {
|
216 | return md5(require("graphql").print(getDefinitionMeta(nodeName).ast));
|
217 | });
|
218 |
|
219 | yield require("./writeRelayGeneratedFile")(getGeneratedDirectory(nodeName), node, formatModule, typeText, persistQuery, writerConfig.platform, sourceHash, writerConfig.extension, writerConfig.printModuleDependency);
|
220 | });
|
221 |
|
222 | return function (_x) {
|
223 | return _ref3.apply(this, arguments);
|
224 | };
|
225 | }()));
|
226 | var generateExtraFiles = writerConfig.generateExtraFiles;
|
227 |
|
228 | if (generateExtraFiles) {
|
229 | require("./GraphQLCompilerProfiler").run('RelayFileWriter:generateExtraFiles', function () {
|
230 | var configDirectory = writerConfig.outputDir;
|
231 | generateExtraFiles(function (dir) {
|
232 | var outputDirectory = dir || configDirectory;
|
233 | !outputDirectory ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayFileWriter: cannot generate extra files without specifying ' + 'an outputDir in the config or passing it in.') : require("fbjs/lib/invariant")(false) : void 0;
|
234 | var outputDir = allOutputDirectories.get(outputDirectory);
|
235 |
|
236 | if (!outputDir) {
|
237 | outputDir = addCodegenDir(outputDirectory);
|
238 | }
|
239 |
|
240 | return outputDir;
|
241 | }, transformedQueryContext, getGeneratedDirectory);
|
242 | });
|
243 | }
|
244 |
|
245 |
|
246 | if (writerConfig.experimental_noDeleteExtraFiles !== true) {
|
247 | allOutputDirectories.forEach(function (dir) {
|
248 | dir.deleteExtraFiles(writerConfig.experimental_extraFilesPatternToKeep);
|
249 | });
|
250 | }
|
251 |
|
252 | if (sourceControl && !onlyValidate) {
|
253 | yield require("./CodegenDirectory").sourceControlAddRemove(sourceControl, Array.from(allOutputDirectories.values()));
|
254 | }
|
255 | } catch (error) {
|
256 | var details;
|
257 |
|
258 | try {
|
259 | details = JSON.parse(error.message);
|
260 | } catch (_) {}
|
261 |
|
262 |
|
263 | if (details && details.name === 'GraphQL2Exception' && details.message) {
|
264 | throw new Error('GraphQL error writing modules:\n' + details.message);
|
265 | }
|
266 |
|
267 | throw new Error('Error writing modules:\n' + String(error.stack || error));
|
268 | }
|
269 |
|
270 | return allOutputDirectories;
|
271 | }));
|
272 | }
|
273 |
|
274 | function md5(x) {
|
275 | return require("crypto").createHash('md5').update(x, 'utf8').digest('hex');
|
276 | }
|
277 |
|
278 | module.exports = {
|
279 | writeAll: writeAll
|
280 | }; |
\ | No newline at end of file |