relay-compiler 1.3.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. package/LICENSE +16 -26
  2. package/bin/relay-compiler +7348 -5939
  3. package/index.js +3 -6
  4. package/lib/{FileParser.js → ASTCache.js} +17 -14
  5. package/lib/ASTConvert.js +84 -70
  6. package/lib/CodegenDirectory.js +122 -28
  7. package/lib/{RelayCodegenRunner.js → CodegenRunner.js} +110 -186
  8. package/lib/CodegenTypes.js +12 -0
  9. package/lib/{RelayCodegenWatcher.js → CodegenWatcher.js} +53 -43
  10. package/lib/DefaultHandleKey.js +2 -4
  11. package/lib/DotGraphQLParser.js +27 -0
  12. package/lib/FilterDirectivesTransform.js +11 -11
  13. package/lib/FindGraphQLTags.js +33 -52
  14. package/lib/FlattenTransform.js +197 -0
  15. package/lib/GraphQLCompilerContext.js +158 -0
  16. package/lib/GraphQLCompilerProfiler.js +271 -0
  17. package/lib/GraphQLCompilerPublic.js +27 -22
  18. package/lib/GraphQLCompilerUserError.js +26 -0
  19. package/lib/GraphQLConsoleReporter.js +58 -0
  20. package/lib/GraphQLIR.js +12 -0
  21. package/lib/{RelayPrinter.js → GraphQLIRPrinter.js} +42 -38
  22. package/lib/{RelayIRTransformer.js → GraphQLIRTransformer.js} +47 -38
  23. package/lib/GraphQLIRTransforms.js +6 -15
  24. package/lib/{RelayIRVisitor.js → GraphQLIRVisitor.js} +7 -6
  25. package/lib/GraphQLMultiReporter.js +50 -0
  26. package/lib/GraphQLParser.js +743 -0
  27. package/lib/GraphQLReporter.js +12 -0
  28. package/lib/GraphQLSchemaUtils.js +10 -36
  29. package/lib/GraphQLValidator.js +13 -15
  30. package/lib/{RelayWatchmanClient.js → GraphQLWatchmanClient.js} +15 -17
  31. package/lib/InlineFragmentsTransform.js +48 -0
  32. package/lib/PatchedBabelGenerator.js +58 -0
  33. package/lib/RelayApplyFragmentArgumentTransform.js +37 -18
  34. package/lib/RelayCodeGenerator.js +130 -60
  35. package/lib/RelayCompilerBin.js +80 -35
  36. package/lib/RelayCompilerCache.js +18 -11
  37. package/lib/RelayCompilerPublic.js +24 -10
  38. package/lib/RelayCompilerScope.js +2 -4
  39. package/lib/RelayConcreteNode.js +31 -14
  40. package/lib/RelayConnectionConstants.js +2 -4
  41. package/lib/RelayConnectionTransform.js +34 -38
  42. package/lib/RelayDefaultHandleKey.js +2 -4
  43. package/lib/RelayDeferrableFragmentTransform.js +464 -0
  44. package/lib/RelayError.js +2 -6
  45. package/lib/RelayFieldHandleTransform.js +15 -11
  46. package/lib/RelayFileWriter.js +119 -98
  47. package/lib/RelayFlowBabelFactories.js +113 -0
  48. package/lib/RelayFlowGenerator.js +180 -200
  49. package/lib/RelayFlowTypeTransformers.js +109 -0
  50. package/lib/RelayGenerateIDFieldTransform.js +131 -0
  51. package/lib/RelayGenerateTypeNameTransform.js +75 -0
  52. package/lib/RelayGraphQLEnumsGenerator.js +65 -0
  53. package/lib/RelayIRTransforms.js +19 -23
  54. package/lib/RelayInternalTypes.js +2 -5
  55. package/lib/RelayInternals.js +2 -5
  56. package/lib/RelayJSModuleParser.js +64 -0
  57. package/lib/RelayMaskTransform.js +129 -0
  58. package/lib/RelayMetricsRecorder.js +9 -9
  59. package/lib/RelayMockRenderer.js +3 -8
  60. package/lib/RelayNetworkDebug.js +4 -7
  61. package/lib/RelayParser.js +28 -645
  62. package/lib/RelayProfiler.js +7 -7
  63. package/lib/RelayQueryCaching.js +2 -5
  64. package/lib/RelayRelayDirectiveTransform.js +47 -33
  65. package/lib/RelayRuntimeTypes.js +22 -0
  66. package/lib/RelayShallowMock.js +4 -7
  67. package/lib/RelaySkipHandleFieldTransform.js +13 -11
  68. package/lib/RelayTaskQueue.js +2 -5
  69. package/lib/RelayTransformUtils.js +20 -0
  70. package/lib/RelayTypes.js +2 -5
  71. package/lib/RelayValidator.js +9 -8
  72. package/lib/RelayViewerHandleTransform.js +22 -18
  73. package/lib/SkipClientFieldTransform.js +36 -53
  74. package/lib/SkipRedundantNodesTransform.js +22 -29
  75. package/lib/SkipUnreachableNodeTransform.js +57 -36
  76. package/lib/SourceControl.js +61 -0
  77. package/lib/StripUnusedVariablesTransform.js +86 -41
  78. package/lib/areEqualOSS.js +2 -4
  79. package/lib/compileRelayArtifacts.js +72 -0
  80. package/lib/dedent.js +2 -5
  81. package/lib/dedupeJSONStringify.js +132 -0
  82. package/lib/deepFreeze.js +3 -5
  83. package/lib/deepMergeAssignments.js +68 -0
  84. package/lib/filterContextForNode.js +5 -7
  85. package/lib/formatGeneratedModule.js +5 -9
  86. package/lib/{getIdentifierForRelayArgumentValue.js → getIdentifierForArgumentValue.js} +8 -10
  87. package/lib/getIdentifierForSelection.js +37 -0
  88. package/lib/getLiteralArgumentValues.js +26 -0
  89. package/lib/getModuleName.js +2 -4
  90. package/lib/getRelayHandleKey.js +2 -4
  91. package/lib/isCompatibleRelayFragmentType.js +2 -5
  92. package/lib/isEquivalentType.js +55 -0
  93. package/lib/isPromise.js +2 -5
  94. package/lib/isScalarAndEqual.js +3 -5
  95. package/lib/murmurHash.js +2 -4
  96. package/lib/nullthrowsOSS.js +7 -5
  97. package/lib/recycleNodesInto.js +2 -4
  98. package/lib/relayUnstableBatchedUpdates.js +2 -5
  99. package/lib/relayUnstableBatchedUpdates.native.js +2 -5
  100. package/lib/requestsForOperation.js +75 -0
  101. package/lib/simpleClone.js +2 -4
  102. package/lib/stableCopy.js +35 -0
  103. package/lib/testEditDistance.js +2 -5
  104. package/lib/throwFailedPromise.js +2 -5
  105. package/lib/writeRelayGeneratedFile.js +84 -50
  106. package/package.json +16 -15
  107. package/relay-compiler.js +7208 -5872
  108. package/relay-compiler.min.js +7200 -5867
  109. package/ARCHITECTURE.md +0 -94
  110. package/PATENTS +0 -33
  111. package/lib/AutoAliasTransform.js +0 -80
  112. package/lib/GraphQLFileParser.js +0 -27
  113. package/lib/GraphQLTextParser.js +0 -46
  114. package/lib/RelayCodegenTypes.js +0 -14
  115. package/lib/RelayCompiledTypes.js +0 -13
  116. package/lib/RelayCompiler.js +0 -144
  117. package/lib/RelayCompilerContext.js +0 -133
  118. package/lib/RelayCompilerUserError.js +0 -30
  119. package/lib/RelayConsoleReporter.js +0 -40
  120. package/lib/RelayFileIRParser.js +0 -66
  121. package/lib/RelayFlattenTransform.js +0 -278
  122. package/lib/RelayFlowParser.js +0 -188
  123. package/lib/RelayGenerateRequisiteFieldsTransform.js +0 -189
  124. package/lib/RelayIR.js +0 -14
  125. package/lib/RelayMultiReporter.js +0 -40
  126. package/lib/RelayReporter.js +0 -14
  127. package/lib/RelayTestSchema.js +0 -21
  128. package/lib/formatStorageKey.js +0 -37
  129. package/lib/getIdentifierForRelaySelection.js +0 -54
  130. package/lib/getRelayLiteralArgumentValues.js +0 -28
  131. package/lib/parseGraphQLText.js +0 -33
  132. package/lib/prettyStringify.js +0 -35
  133. package/lib/printFlowTypes.js +0 -282
  134. package/lib/stableJSONStringify.js +0 -45
  135. package/lib/stableJSONStringifyOSS.js +0 -44
  136. package/lib/transformInputObjectToIR.js +0 -85
  137. package/lib/writeLegacyFlowFile.js +0 -24
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayCodeGenerator
10
8
  *
@@ -13,51 +11,109 @@
13
11
 
14
12
  'use strict';
15
13
 
16
- var _toConsumableArray3 = _interopRequireDefault(require('babel-runtime/helpers/toConsumableArray'));
14
+ var _require = require('relay-runtime'),
15
+ getStorageKey = _require.getStorageKey;
16
+ // TODO T21875029 ../../relay-runtime/util/stableCopy
17
17
 
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
19
18
 
20
- var _require = require('graphql'),
21
- GraphQLList = _require.GraphQLList;
19
+ var _require2 = require('graphql'),
20
+ GraphQLList = _require2.GraphQLList;
22
21
 
23
- var getRawType = require('./GraphQLSchemaUtils').getRawType,
24
- isAbstractType = require('./GraphQLSchemaUtils').isAbstractType,
25
- getNullableType = require('./GraphQLSchemaUtils').getNullableType;
22
+ var _require3 = require('./GraphQLCompilerPublic'),
23
+ IRVisitor = _require3.IRVisitor,
24
+ SchemaUtils = _require3.SchemaUtils;
26
25
 
27
- /* eslint-disable no-redeclare */
26
+ // TODO T21875029 ../../relay-runtime/util/RelayConcreteNode
27
+
28
+
29
+ var getRawType = SchemaUtils.getRawType,
30
+ isAbstractType = SchemaUtils.isAbstractType,
31
+ getNullableType = SchemaUtils.getNullableType;
28
32
 
29
33
 
30
34
  /**
31
35
  * @public
32
36
  *
33
- * Converts a Relay IR node into a plain JS object representation that can be
37
+ * Converts a GraphQLIR node into a plain JS object representation that can be
34
38
  * used at runtime.
35
39
  */
36
40
  function generate(node) {
37
- require('fbjs/lib/invariant')(['Root', 'Fragment'].indexOf(node.kind) >= 0, 'RelayCodeGenerator: Unknown AST kind `%s`. Source: %s.', node.kind, getErrorMessage(node));
38
- return require('./RelayIRVisitor').visit(node, RelayCodeGenVisitor);
41
+ require('fbjs/lib/invariant')(['Batch', 'Fragment'].indexOf(node.kind) >= 0, 'RelayCodeGenerator: Unknown AST kind `%s`. Source: %s.', node.kind, getErrorMessage(node));
42
+ return IRVisitor.visit(node, RelayCodeGenVisitor);
39
43
  }
40
- /* eslint-enable no-redeclare */
41
44
 
42
45
  var RelayCodeGenVisitor = {
43
46
  leave: {
44
- Root: function Root(node) {
45
- return {
46
- argumentDefinitions: node.argumentDefinitions,
47
- kind: 'Root',
48
- name: node.name,
49
- operation: node.operation,
50
- selections: flattenArray(node.selections)
51
- };
47
+ Batch: function Batch(node) {
48
+ require('fbjs/lib/invariant')(node.requests.length !== 0, 'Batch must contain Requests.');
49
+ if (isSingleRequest(node)) {
50
+ var request = node.requests[0];
51
+ return {
52
+ kind: 'Request',
53
+ operationKind: request.root.operation,
54
+ name: node.name,
55
+ id: request.id,
56
+ text: request.text,
57
+ metadata: node.metadata,
58
+ fragment: node.fragment,
59
+ operation: {
60
+ kind: 'Operation',
61
+ name: request.root.name,
62
+ argumentDefinitions: request.root.argumentDefinitions,
63
+ selections: flattenArray(request.root.selections)
64
+ }
65
+ };
66
+ } else {
67
+ return {
68
+ kind: 'BatchRequest',
69
+ operationKind: node.requests[0].root.operation,
70
+ name: node.name,
71
+ metadata: node.metadata,
72
+ fragment: node.fragment,
73
+ requests: node.requests.map(function (request) {
74
+ var isDeferrableFragment = request.metadata && request.metadata.deferrable;
75
+ var operation = isDeferrableFragment ? {
76
+ kind: 'DeferrableOperation',
77
+ name: request.root.name,
78
+ argumentDefinitions: request.root.argumentDefinitions,
79
+ selections: flattenArray(request.root.selections),
80
+ fragmentName: request.metadata.fragmentName,
81
+ rootFieldVariable: request.metadata.rootFieldVariable
82
+ } : {
83
+ kind: 'Operation',
84
+ name: request.root.name,
85
+ argumentDefinitions: request.root.argumentDefinitions,
86
+ selections: flattenArray(request.root.selections)
87
+ };
88
+
89
+ return {
90
+ name: request.name,
91
+ id: request.id,
92
+ text: request.text,
93
+ argumentDependencies: request.argumentDependencies.map(function (dependency) {
94
+ return {
95
+ name: dependency.argumentName,
96
+ fromRequestName: dependency.fromName,
97
+ fromRequestPath: dependency.fromPath,
98
+ ifList: dependency.ifList,
99
+ ifNull: dependency.ifNull,
100
+ maxRecurse: dependency.maxRecurse
101
+ };
102
+ }),
103
+ operation: operation
104
+ };
105
+ })
106
+ };
107
+ }
52
108
  },
53
109
  Fragment: function Fragment(node) {
54
110
  return {
55
- argumentDefinitions: node.argumentDefinitions,
56
111
  kind: 'Fragment',
57
- metadata: node.metadata || null,
58
112
  name: node.name,
59
- selections: flattenArray(node.selections),
60
- type: node.type.toString()
113
+ type: node.type.toString(),
114
+ metadata: node.metadata || null,
115
+ argumentDefinitions: node.argumentDefinitions,
116
+ selections: flattenArray(node.selections)
61
117
  };
62
118
  },
63
119
  LocalArgumentDefinition: function LocalArgumentDefinition(node) {
@@ -91,6 +147,15 @@ var RelayCodeGenVisitor = {
91
147
  args: valuesOrNull(sortByName(node.args))
92
148
  };
93
149
  },
150
+ DeferrableFragmentSpread: function DeferrableFragmentSpread(node) {
151
+ return {
152
+ kind: 'DeferrableFragmentSpread',
153
+ name: node.name,
154
+ args: node.args,
155
+ rootFieldVariable: node.rootFieldVariable,
156
+ storageKey: node.storageKey
157
+ };
158
+ },
94
159
  InlineFragment: function InlineFragment(node) {
95
160
  return {
96
161
  kind: 'InlineFragment',
@@ -99,49 +164,61 @@ var RelayCodeGenVisitor = {
99
164
  };
100
165
  },
101
166
  LinkedField: function LinkedField(node) {
167
+ // Note: it is important that the arguments of this field be sorted to
168
+ // ensure stable generation of storage keys for equivalent arguments
169
+ // which may have originally appeared in different orders across an app.
102
170
  var handles = node.handles && node.handles.map(function (handle) {
103
171
  return {
104
172
  kind: 'LinkedHandle',
105
173
  alias: node.alias,
174
+ name: node.name,
106
175
  args: valuesOrNull(sortByName(node.args)),
107
176
  handle: handle.name,
108
- name: node.name,
109
177
  key: handle.key,
110
178
  filters: handle.filters
111
179
  };
112
180
  }) || [];
113
181
  var type = getRawType(node.type);
114
- return [{
182
+ var field = {
115
183
  kind: 'LinkedField',
116
184
  alias: node.alias,
185
+ name: node.name,
186
+ storageKey: null,
117
187
  args: valuesOrNull(sortByName(node.args)),
118
188
  concreteType: !isAbstractType(type) ? type.toString() : null,
119
- name: node.name,
120
189
  plural: isPlural(node.type),
121
- selections: flattenArray(node.selections),
122
- storageKey: getStorageKey(node.name, node.args)
123
- }].concat((0, _toConsumableArray3['default'])(handles));
190
+ selections: flattenArray(node.selections)
191
+ };
192
+ // Precompute storageKey if possible
193
+ field.storageKey = getStaticStorageKey(field);
194
+ return [field].concat(handles);
124
195
  },
125
196
  ScalarField: function ScalarField(node) {
197
+ // Note: it is important that the arguments of this field be sorted to
198
+ // ensure stable generation of storage keys for equivalent arguments
199
+ // which may have originally appeared in different orders across an app.
126
200
  var handles = node.handles && node.handles.map(function (handle) {
127
201
  return {
128
202
  kind: 'ScalarHandle',
129
203
  alias: node.alias,
204
+ name: node.name,
130
205
  args: valuesOrNull(sortByName(node.args)),
131
206
  handle: handle.name,
132
- name: node.name,
133
207
  key: handle.key,
134
208
  filters: handle.filters
135
209
  };
136
210
  }) || [];
137
- return [{
211
+ var field = {
138
212
  kind: 'ScalarField',
139
213
  alias: node.alias,
140
- args: valuesOrNull(sortByName(node.args)),
141
214
  name: node.name,
215
+ args: valuesOrNull(sortByName(node.args)),
142
216
  selections: valuesOrUndefined(flattenArray(node.selections)),
143
- storageKey: getStorageKey(node.name, node.args)
144
- }].concat((0, _toConsumableArray3['default'])(handles));
217
+ storageKey: null
218
+ };
219
+ // Precompute storageKey if possible
220
+ field.storageKey = getStaticStorageKey(field);
221
+ return [field].concat(handles);
145
222
  },
146
223
  Variable: function Variable(node, key, parent) {
147
224
  return {
@@ -155,17 +232,21 @@ var RelayCodeGenVisitor = {
155
232
  return {
156
233
  kind: 'Literal',
157
234
  name: parent.name,
158
- value: node.value,
235
+ value: require('./stableCopy')(node.value),
159
236
  type: parent.type ? parent.type.toString() : null
160
237
  };
161
238
  },
162
239
  Argument: function Argument(node, key, parent, ancestors) {
163
- require('fbjs/lib/invariant')(['Variable', 'Literal'].indexOf(node.value.kind) >= 0, 'RelayCodeGenerator: Complex argument values (Lists or ' + 'InputObjects with nested variables) are not supported, argument ' + '`%s` had value `%s`. Source: %s.', node.name, require('./prettyStringify')(node.value), getErrorMessage(ancestors[0]));
240
+ require('fbjs/lib/invariant')(['Variable', 'Literal'].indexOf(node.value.kind) >= 0, 'RelayCodeGenerator: Complex argument values (Lists or ' + 'InputObjects with nested variables) are not supported, argument ' + '`%s` had value `%s`. Source: %s.', node.name, JSON.stringify(node.value, null, 2), getErrorMessage(ancestors[0]));
164
241
  return node.value.value !== null ? node.value : null;
165
242
  }
166
243
  }
167
244
  };
168
245
 
246
+ function isSingleRequest(batch) {
247
+ return batch.requests.length === 1 && batch.requests[0].argumentDependencies.length === 0;
248
+ }
249
+
169
250
  function isPlural(type) {
170
251
  return getNullableType(type) instanceof GraphQLList;
171
252
  }
@@ -193,28 +274,17 @@ function getErrorMessage(node) {
193
274
  }
194
275
 
195
276
  /**
196
- * Computes storage key if possible.
197
- *
198
- * Storage keys which can be known ahead of runtime are:
199
- *
200
- * - Fields that do not take arguments.
201
- * - Fields whose arguments are all statically known (ie. literals) at build
202
- * time.
277
+ * Pre-computes storage key if possible and advantageous. Storage keys are
278
+ * generated for fields with supplied arguments that are all statically known
279
+ * (ie. literals, no variables) at build time.
203
280
  */
204
- function getStorageKey(fieldName, args) {
205
- if (!args || !args.length) {
281
+ function getStaticStorageKey(field) {
282
+ if (!field.args || field.args.length === 0 || field.args.some(function (arg) {
283
+ return arg.kind !== 'Literal';
284
+ })) {
206
285
  return null;
207
286
  }
208
- var isLiteral = true;
209
- var preparedArgs = {};
210
- args.forEach(function (arg) {
211
- if (arg.kind !== 'Literal') {
212
- isLiteral = false;
213
- } else {
214
- preparedArgs[arg.name] = arg.value;
215
- }
216
- });
217
- return isLiteral ? require('./formatStorageKey')(fieldName, preparedArgs) : null;
287
+ return getStorageKey(field, {});
218
288
  }
219
289
 
220
290
  module.exports = { generate: generate };
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  *
10
8
  * @providesModule RelayCompilerBin
@@ -19,10 +17,8 @@ var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
19
17
 
20
18
  var _toConsumableArray3 = _interopRequireDefault(require('babel-runtime/helpers/toConsumableArray'));
21
19
 
22
- /* eslint-disable no-console-disallow */
23
-
24
20
  let run = (() => {
25
- var _ref = (0, _asyncToGenerator3.default)(function* (options) {
21
+ var _ref2 = (0, _asyncToGenerator3.default)(function* (options) {
26
22
  var schemaPath = require('path').resolve(process.cwd(), options.schema);
27
23
  if (!require('fs').existsSync(schemaPath)) {
28
24
  throw new Error('--schema path does not exist: ' + schemaPath + '.');
@@ -37,39 +33,67 @@ let run = (() => {
37
33
  if (options.watch && !hasWatchmanRootFile(srcDir)) {
38
34
  throw new Error(('\n--watch requires that the src directory have a valid watchman "root" file.\n\nRoot files can include:\n- A .git/ Git folder\n- A .hg/ Mercurial folder\n- A .watchmanconfig file\n\nEnsure that one such file exists in ' + srcDir + ' or its parents.\n ').trim());
39
35
  }
36
+ if (options.verbose && options.quiet) {
37
+ throw new Error("I can't be quiet and verbose at the same time");
38
+ }
40
39
 
41
- var reporter = new (require('./RelayConsoleReporter'))({ verbose: options.verbose });
40
+ var reporter = new ConsoleReporter({
41
+ verbose: options.verbose,
42
+ quiet: options.quiet
43
+ });
42
44
 
43
- var useWatchman = options.watchman && (yield require('./RelayWatchmanClient').isAvailable());
45
+ var useWatchman = options.watchman && (yield WatchmanClient.isAvailable());
44
46
 
47
+ var schema = getSchema(schemaPath);
45
48
  var parserConfigs = {
46
- 'default': {
49
+ js: {
47
50
  baseDir: srcDir,
48
- getFileFilter: require('./RelayFileIRParser').getFileFilter,
49
- getParser: require('./RelayFileIRParser').getParser,
51
+ getFileFilter: require('./RelayJSModuleParser').getFileFilter,
52
+ getParser: require('./RelayJSModuleParser').getParser,
50
53
  getSchema: function getSchema() {
51
- return _getSchema(schemaPath);
54
+ return schema;
52
55
  },
53
56
  watchmanExpression: useWatchman ? buildWatchExpression(options) : null,
54
57
  filepaths: useWatchman ? null : getFilepathsFromGlob(srcDir, options)
58
+ },
59
+ graphql: {
60
+ baseDir: srcDir,
61
+ getParser: DotGraphQLParser.getParser,
62
+ getSchema: function getSchema() {
63
+ return schema;
64
+ },
65
+ watchmanExpression: useWatchman ? buildWatchExpression({
66
+ extensions: ['graphql'],
67
+ include: options.include,
68
+ exclude: options.exclude
69
+ }) : null,
70
+ filepaths: useWatchman ? null : getFilepathsFromGlob(srcDir, {
71
+ extensions: ['graphql'],
72
+ include: options.include,
73
+ exclude: options.exclude
74
+ })
55
75
  }
56
76
  };
57
77
  var writerConfigs = {
58
- 'default': {
78
+ js: {
59
79
  getWriter: getRelayFileWriter(srcDir),
60
80
  isGeneratedFile: function isGeneratedFile(filePath) {
61
81
  return filePath.endsWith('.js') && filePath.includes('__generated__');
62
82
  },
63
- parser: 'default'
83
+ parser: 'js',
84
+ baseParsers: ['graphql']
64
85
  }
65
86
  };
66
- var codegenRunner = new (require('./RelayCodegenRunner'))({
87
+ var codegenRunner = new CodegenRunner({
67
88
  reporter: reporter,
68
89
  parserConfigs: parserConfigs,
69
90
  writerConfigs: writerConfigs,
70
- onlyValidate: options.validate
91
+ onlyValidate: options.validate,
92
+ // TODO: allow passing in a flag or detect?
93
+ sourceControl: null
71
94
  });
72
95
  if (!options.validate && !options.watch && options.watchman) {
96
+ // eslint-disable-next-line no-console
73
97
  console.log('HINT: pass --watch to keep watching for changes.');
74
98
  }
75
99
  var result = options.watch ? yield codegenRunner.watchAll() : yield codegenRunner.compileAll();
@@ -83,7 +107,7 @@ let run = (() => {
83
107
  });
84
108
 
85
109
  return function run(_x) {
86
- return _ref.apply(this, arguments);
110
+ return _ref2.apply(this, arguments);
87
111
  };
88
112
  })();
89
113
 
@@ -91,13 +115,20 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'd
91
115
 
92
116
  require('babel-polyfill');
93
117
 
94
- var _require = require('graphql'),
95
- buildASTSchema = _require.buildASTSchema,
96
- buildClientSchema = _require.buildClientSchema,
97
- parse = _require.parse,
98
- printSchema = _require.printSchema;
118
+ var _require = require('./GraphQLCompilerPublic'),
119
+ CodegenRunner = _require.CodegenRunner,
120
+ ConsoleReporter = _require.ConsoleReporter,
121
+ WatchmanClient = _require.WatchmanClient,
122
+ DotGraphQLParser = _require.DotGraphQLParser;
123
+
124
+ var _require2 = require('graphql'),
125
+ buildASTSchema = _require2.buildASTSchema,
126
+ buildClientSchema = _require2.buildClientSchema,
127
+ parse = _require2.parse,
128
+ printSchema = _require2.printSchema;
99
129
 
100
- var codegenTransforms = require('./RelayIRTransforms').codegenTransforms,
130
+ var commonTransforms = require('./RelayIRTransforms').commonTransforms,
131
+ codegenTransforms = require('./RelayIRTransforms').codegenTransforms,
101
132
  fragmentTransforms = require('./RelayIRTransforms').fragmentTransforms,
102
133
  printTransforms = require('./RelayIRTransforms').printTransforms,
103
134
  queryTransforms = require('./RelayIRTransforms').queryTransforms,
@@ -122,46 +153,55 @@ function getFilepathsFromGlob(baseDir, options) {
122
153
  return inc + '/*.+(' + extensions.join('|') + ')';
123
154
  });
124
155
 
125
- // $FlowFixMe(site=react_native_fb,www)
126
156
  var glob = require('fast-glob');
127
157
  return glob.sync(patterns, {
128
158
  cwd: baseDir,
129
- bashNative: [],
130
- onlyFiles: true,
131
159
  ignore: exclude
132
160
  });
133
161
  }
134
162
 
135
163
  function getRelayFileWriter(baseDir) {
136
- return function (onlyValidate, schema, documents, baseDocuments) {
164
+ return function (_ref) {
165
+ var onlyValidate = _ref.onlyValidate,
166
+ schema = _ref.schema,
167
+ documents = _ref.documents,
168
+ baseDocuments = _ref.baseDocuments,
169
+ sourceControl = _ref.sourceControl,
170
+ reporter = _ref.reporter;
137
171
  return new (require('./RelayFileWriter'))({
138
172
  config: {
139
- formatModule: require('./formatGeneratedModule'),
173
+ baseDir: baseDir,
140
174
  compilerTransforms: {
175
+ commonTransforms: commonTransforms,
141
176
  codegenTransforms: codegenTransforms,
142
177
  fragmentTransforms: fragmentTransforms,
143
178
  printTransforms: printTransforms,
144
179
  queryTransforms: queryTransforms
145
180
  },
146
- baseDir: baseDir,
147
- schemaExtensions: schemaExtensions
181
+ customScalars: {},
182
+ formatModule: require('./formatGeneratedModule'),
183
+ inputFieldWhiteListForFlow: [],
184
+ schemaExtensions: schemaExtensions,
185
+ useHaste: false
148
186
  },
149
187
  onlyValidate: onlyValidate,
150
188
  schema: schema,
151
189
  baseDocuments: baseDocuments,
152
- documents: documents
190
+ documents: documents,
191
+ reporter: reporter,
192
+ sourceControl: sourceControl
153
193
  });
154
194
  };
155
195
  }
156
196
 
157
- function _getSchema(schemaPath) {
197
+ function getSchema(schemaPath) {
158
198
  try {
159
199
  var source = require('fs').readFileSync(schemaPath, 'utf8');
160
200
  if (require('path').extname(schemaPath) === '.json') {
161
201
  source = printSchema(buildClientSchema(JSON.parse(source).data));
162
202
  }
163
- source = '\n directive @include(if: Boolean) on FRAGMENT | FIELD\n directive @skip(if: Boolean) on FRAGMENT | FIELD\n\n ' + source + '\n ';
164
- return buildASTSchema(parse(source));
203
+ source = '\n directive @include(if: Boolean) on FRAGMENT_SPREAD | FIELD\n directive @skip(if: Boolean) on FRAGMENT_SPREAD | FIELD\n\n ' + source + '\n ';
204
+ return buildASTSchema(parse(source), { assumeValid: true });
165
205
  } catch (error) {
166
206
  throw new Error(('\nError loading schema. Expected the schema to be a .graphql or a .json\nfile, describing your GraphQL server\'s API. Error detail:\n\n' + error.stack + '\n ').trim());
167
207
  }
@@ -216,6 +256,10 @@ var argv = require('yargs').usage('Create Relay generated files\n\n' + '$0 --sch
216
256
  describe: 'More verbose logging',
217
257
  type: 'boolean'
218
258
  },
259
+ quiet: {
260
+ describe: 'No output to stdout',
261
+ type: 'boolean'
262
+ },
219
263
  watchman: {
220
264
  describe: 'Use watchman when not in watch mode',
221
265
  type: 'boolean',
@@ -233,6 +277,7 @@ var argv = require('yargs').usage('Create Relay generated files\n\n' + '$0 --sch
233
277
  }).help().argv;
234
278
 
235
279
  // Run script with args
280
+ // $FlowFixMe: Invalid types for yargs. Please fix this when touching this code.
236
281
  run(argv)['catch'](function (error) {
237
282
  console.error(String(error.stack || error));
238
283
  process.exit(1);
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayCompilerCache
10
8
  *
@@ -17,10 +15,15 @@ var _classCallCheck3 = _interopRequireDefault(require('babel-runtime/helpers/cla
17
15
 
18
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
19
17
 
18
+ var _require = require('./GraphQLCompilerPublic'),
19
+ Profiler = _require.Profiler;
20
+
20
21
  /**
21
22
  * A file backed cache. Values are JSON encoded on disk, so only JSON
22
23
  * serializable values should be used.
23
24
  */
25
+
26
+
24
27
  var RelayCompilerCache = function () {
25
28
 
26
29
  /**
@@ -42,13 +45,17 @@ var RelayCompilerCache = function () {
42
45
  }
43
46
 
44
47
  RelayCompilerCache.prototype.getOrCompute = function getOrCompute(key, compute) {
45
- var cacheFile = require('path').join(this._dir, key);
46
- if (require('fs').existsSync(cacheFile)) {
47
- return JSON.parse(require('fs').readFileSync(cacheFile, 'utf8'));
48
- }
49
- var value = compute();
50
- require('fs').writeFileSync(cacheFile, JSON.stringify(value), 'utf8');
51
- return value;
48
+ var _this = this;
49
+
50
+ return Profiler.run('RelayCompilerCache.getOrCompute', function () {
51
+ var cacheFile = require('path').join(_this._dir, key);
52
+ if (require('fs').existsSync(cacheFile)) {
53
+ return JSON.parse(require('fs').readFileSync(cacheFile, 'utf8'));
54
+ }
55
+ var value = compute();
56
+ require('fs').writeFileSync(cacheFile, JSON.stringify(value), 'utf8');
57
+ return value;
58
+ });
52
59
  };
53
60
 
54
61
  return RelayCompilerCache;
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  *
10
8
  * @providesModule RelayCompilerPublic
@@ -13,13 +11,29 @@
13
11
 
14
12
  'use strict';
15
13
 
14
+ var _require = require('./GraphQLCompilerPublic'),
15
+ ASTConvert = _require.ASTConvert,
16
+ CodegenRunner = _require.CodegenRunner,
17
+ ConsoleReporter = _require.ConsoleReporter,
18
+ MultiReporter = _require.MultiReporter;
19
+
16
20
  module.exports = {
17
- Compiler: require('./RelayCompiler'),
18
- ConsoleReporter: require('./RelayConsoleReporter'),
19
- FileIRParser: require('./RelayFileIRParser'),
21
+ ConsoleReporter: ConsoleReporter,
22
+ Parser: require('./RelayParser'),
23
+ CodeGenerator: require('./RelayCodeGenerator'),
24
+
25
+ GraphQLCompilerContext: require('./GraphQLCompilerContext'),
26
+
27
+ /** @deprecated Use JSModuleParser. */
28
+ FileIRParser: require('./RelayJSModuleParser'),
29
+
20
30
  FileWriter: require('./RelayFileWriter'),
21
31
  IRTransforms: require('./RelayIRTransforms'),
22
- MultiReporter: require('./RelayMultiReporter'),
23
- Runner: require('./RelayCodegenRunner'),
24
- formatGeneratedModule: require('./formatGeneratedModule')
32
+ JSModuleParser: require('./RelayJSModuleParser'),
33
+ MultiReporter: MultiReporter,
34
+ Runner: CodegenRunner,
35
+ compileRelayArtifacts: require('./compileRelayArtifacts'),
36
+ formatGeneratedModule: require('./formatGeneratedModule'),
37
+ convertASTDocuments: ASTConvert.convertASTDocuments,
38
+ transformASTSchema: ASTConvert.transformASTSchema
25
39
  };
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayCompilerScope
10
8
  *