relay-compiler 7.0.0 → 9.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/RelayCompilerBin.js.flow +169 -0
- package/bin/RelayCompilerMain.js.flow +508 -0
- package/bin/__fixtures__/plugin-module.js.flow +17 -0
- package/bin/relay-compiler +8554 -8142
- package/codegen/CodegenDirectory.js.flow +375 -0
- package/codegen/CodegenRunner.js.flow +431 -0
- package/codegen/CodegenTypes.js.flow +28 -0
- package/codegen/CodegenWatcher.js.flow +254 -0
- package/codegen/NormalizationCodeGenerator.js.flow +499 -0
- package/codegen/ReaderCodeGenerator.js.flow +453 -0
- package/codegen/RelayCodeGenerator.js.flow +76 -0
- package/codegen/RelayFileWriter.js.flow +366 -0
- package/codegen/SourceControl.js.flow +58 -0
- package/codegen/compileRelayArtifacts.js.flow +182 -0
- package/codegen/createPrintRequireModuleDependency.js.flow +21 -0
- package/codegen/writeRelayGeneratedFile.js.flow +194 -0
- package/core/ASTCache.js.flow +73 -0
- package/core/ASTConvert.js.flow +233 -0
- package/core/CompilerContext.js.flow +190 -0
- package/core/CompilerError.js.flow +250 -0
- package/core/DotGraphQLParser.js.flow +39 -0
- package/core/GraphQLCompilerProfiler.js.flow +341 -0
- package/core/GraphQLDerivedFromMetadata.js.flow +48 -0
- package/core/GraphQLWatchmanClient.js.flow +111 -0
- package/core/IR.js.flow +329 -0
- package/core/IRPrinter.js.flow +488 -0
- package/core/IRTransformer.js.flow +377 -0
- package/core/IRValidator.js.flow +260 -0
- package/core/IRVisitor.js.flow +150 -0
- package/core/JSModuleParser.js.flow +24 -0
- package/core/RelayCompilerScope.js.flow +199 -0
- package/core/RelayFindGraphQLTags.js.flow +119 -0
- package/core/RelayGraphQLEnumsGenerator.js.flow +55 -0
- package/core/RelayIRTransforms.js.flow +130 -0
- package/core/RelayParser.js.flow +1759 -0
- package/core/RelaySourceModuleParser.js.flow +135 -0
- package/core/Schema.js.flow +1985 -0
- package/core/SchemaUtils.js.flow +109 -0
- package/core/filterContextForNode.js.flow +50 -0
- package/core/getFieldDefinition.js.flow +156 -0
- package/core/getIdentifierForArgumentValue.js.flow +49 -0
- package/core/getIdentifierForSelection.js.flow +69 -0
- package/core/getLiteralArgumentValues.js.flow +32 -0
- package/core/getNormalizationOperationName.js.flow +19 -0
- package/core/inferRootArgumentDefinitions.js.flow +323 -0
- package/index.js +1 -1
- package/index.js.flow +202 -0
- package/language/RelayLanguagePluginInterface.js.flow +283 -0
- package/language/javascript/FindGraphQLTags.js.flow +233 -0
- package/language/javascript/RelayFlowBabelFactories.js.flow +180 -0
- package/language/javascript/RelayFlowGenerator.js.flow +1040 -0
- package/language/javascript/RelayFlowTypeTransformers.js.flow +184 -0
- package/language/javascript/RelayLanguagePluginJavaScript.js.flow +34 -0
- package/language/javascript/formatGeneratedModule.js.flow +65 -0
- package/lib/bin/RelayCompilerBin.js +25 -7
- package/lib/bin/RelayCompilerMain.js +134 -125
- package/lib/bin/__fixtures__/plugin-module.js +1 -0
- package/lib/codegen/CodegenDirectory.js +14 -8
- package/lib/codegen/CodegenRunner.js +35 -75
- package/lib/codegen/CodegenTypes.js +1 -0
- package/lib/codegen/CodegenWatcher.js +14 -21
- package/lib/codegen/NormalizationCodeGenerator.js +80 -127
- package/lib/codegen/ReaderCodeGenerator.js +85 -111
- package/lib/codegen/RelayCodeGenerator.js +9 -6
- package/lib/codegen/RelayFileWriter.js +22 -41
- package/lib/codegen/SourceControl.js +1 -0
- package/lib/codegen/compileRelayArtifacts.js +18 -31
- package/lib/codegen/createPrintRequireModuleDependency.js +1 -0
- package/lib/codegen/writeRelayGeneratedFile.js +62 -90
- package/lib/core/ASTCache.js +4 -4
- package/lib/core/ASTConvert.js +1 -0
- package/lib/core/{GraphQLCompilerContext.js → CompilerContext.js} +10 -11
- package/lib/core/{RelayCompilerError.js → CompilerError.js} +29 -55
- package/lib/core/DotGraphQLParser.js +1 -0
- package/lib/core/GraphQLCompilerProfiler.js +9 -12
- package/lib/core/GraphQLDerivedFromMetadata.js +1 -0
- package/lib/core/GraphQLWatchmanClient.js +5 -12
- package/lib/core/{GraphQLIR.js → IR.js} +1 -0
- package/lib/core/{GraphQLIRPrinter.js → IRPrinter.js} +39 -17
- package/lib/core/{GraphQLIRTransformer.js → IRTransformer.js} +21 -16
- package/lib/core/{GraphQLIRValidator.js → IRValidator.js} +18 -10
- package/lib/core/{GraphQLIRVisitor.js → IRVisitor.js} +1 -2
- package/lib/core/JSModuleParser.js +18 -0
- package/lib/core/RelayCompilerScope.js +6 -5
- package/lib/core/RelayFindGraphQLTags.js +1 -0
- package/lib/core/RelayGraphQLEnumsGenerator.js +26 -12
- package/lib/core/RelayIRTransforms.js +12 -9
- package/lib/core/RelayParser.js +113 -75
- package/lib/core/RelaySourceModuleParser.js +4 -3
- package/lib/core/Schema.js +808 -317
- package/lib/core/SchemaUtils.js +1 -0
- package/lib/core/filterContextForNode.js +5 -4
- package/lib/core/getFieldDefinition.js +14 -16
- package/lib/core/getIdentifierForArgumentValue.js +18 -0
- package/lib/core/getIdentifierForSelection.js +4 -5
- package/lib/core/getLiteralArgumentValues.js +1 -0
- package/lib/core/getNormalizationOperationName.js +1 -0
- package/lib/core/inferRootArgumentDefinitions.js +79 -99
- package/lib/index.js +69 -19
- package/lib/language/RelayLanguagePluginInterface.js +1 -0
- package/lib/language/javascript/FindGraphQLTags.js +1 -0
- package/lib/language/javascript/RelayFlowBabelFactories.js +15 -0
- package/lib/language/javascript/RelayFlowGenerator.js +94 -173
- package/lib/language/javascript/RelayFlowTypeTransformers.js +2 -3
- package/lib/language/javascript/RelayLanguagePluginJavaScript.js +7 -4
- package/lib/language/javascript/formatGeneratedModule.js +14 -4
- package/lib/reporters/ConsoleReporter.js +2 -3
- package/lib/reporters/MultiReporter.js +2 -3
- package/lib/reporters/Reporter.js +1 -0
- package/lib/runner/Artifacts.js +327 -0
- package/lib/runner/BufferedFilesystem.js +265 -0
- package/lib/runner/GraphQLASTNodeGroup.js +260 -0
- package/lib/runner/GraphQLASTUtils.js +23 -0
- package/lib/runner/GraphQLNodeMap.js +85 -0
- package/lib/runner/Sources.js +266 -0
- package/lib/runner/StrictMap.js +136 -0
- package/lib/runner/compileArtifacts.js +39 -0
- package/lib/runner/extractAST.js +77 -0
- package/lib/runner/getChangedNodeNames.js +84 -0
- package/lib/runner/getSchemaInstance.js +30 -0
- package/lib/runner/types.js +12 -0
- package/lib/transforms/ApplyFragmentArgumentTransform.js +49 -55
- package/lib/transforms/ClientExtensionsTransform.js +11 -17
- package/lib/transforms/ConnectionTransform.js +35 -28
- package/lib/transforms/DeferStreamTransform.js +26 -74
- package/lib/transforms/DisallowIdAsAlias.js +5 -4
- package/lib/transforms/DisallowTypenameOnRoot.js +55 -0
- package/lib/transforms/FieldHandleTransform.js +8 -3
- package/lib/transforms/FilterDirectivesTransform.js +4 -3
- package/lib/transforms/FlattenTransform.js +23 -47
- package/lib/transforms/GenerateIDFieldTransform.js +9 -4
- package/lib/transforms/GenerateTypeNameTransform.js +8 -3
- package/lib/transforms/InlineDataFragmentTransform.js +11 -6
- package/lib/transforms/InlineFragmentsTransform.js +3 -2
- package/lib/transforms/MaskTransform.js +20 -19
- package/lib/transforms/MatchTransform.js +113 -34
- package/lib/transforms/RefetchableFragmentTransform.js +25 -41
- package/lib/transforms/RelayDirectiveTransform.js +13 -4
- package/lib/transforms/SkipClientExtensionsTransform.js +11 -2
- package/lib/transforms/SkipHandleFieldTransform.js +8 -3
- package/lib/transforms/SkipRedundantNodesTransform.js +9 -6
- package/lib/transforms/SkipSplitOperationTransform.js +32 -0
- package/lib/transforms/SkipUnreachableNodeTransform.js +12 -12
- package/lib/transforms/SkipUnusedVariablesTransform.js +19 -17
- package/lib/transforms/SplitModuleImportTransform.js +4 -3
- package/lib/transforms/TestOperationTransform.js +9 -6
- package/lib/transforms/TransformUtils.js +1 -0
- package/lib/transforms/ValidateGlobalVariablesTransform.js +20 -31
- package/lib/transforms/ValidateRequiredArgumentsTransform.js +17 -20
- package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +20 -33
- package/lib/transforms/ValidateUnusedVariablesTransform.js +20 -31
- package/lib/transforms/query-generators/FetchableQueryGenerator.js +161 -0
- package/lib/transforms/query-generators/NodeQueryGenerator.js +9 -3
- package/lib/transforms/query-generators/QueryQueryGenerator.js +2 -0
- package/lib/transforms/query-generators/ViewerQueryGenerator.js +6 -3
- package/lib/transforms/query-generators/index.js +25 -7
- package/lib/transforms/query-generators/utils.js +13 -15
- package/lib/util/CodeMarker.js +1 -0
- package/lib/util/DefaultHandleKey.js +1 -0
- package/lib/util/RelayCompilerCache.js +2 -3
- package/lib/util/Rollout.js +1 -0
- package/lib/util/TimeReporter.js +83 -0
- package/lib/util/areEqualOSS.js +1 -0
- package/lib/util/dedupeJSONStringify.js +16 -12
- package/lib/util/getDefinitionNodeHash.js +22 -0
- package/lib/util/getModuleName.js +4 -5
- package/lib/util/joinArgumentDefinitions.js +2 -1
- package/lib/util/md5.js +17 -0
- package/lib/util/murmurHash.js +1 -0
- package/lib/util/nullthrowsOSS.js +1 -0
- package/lib/util/orList.js +2 -1
- package/lib/util/partitionArray.js +1 -0
- package/package.json +4 -4
- package/relay-compiler.js +4 -4
- package/relay-compiler.min.js +4 -4
- package/reporters/ConsoleReporter.js.flow +81 -0
- package/reporters/MultiReporter.js.flow +43 -0
- package/reporters/Reporter.js.flow +19 -0
- package/runner/Artifacts.js.flow +219 -0
- package/runner/BufferedFilesystem.js.flow +194 -0
- package/runner/GraphQLASTNodeGroup.js.flow +176 -0
- package/runner/GraphQLASTUtils.js.flow +26 -0
- package/runner/GraphQLNodeMap.js.flow +55 -0
- package/runner/Sources.js.flow +218 -0
- package/runner/StrictMap.js.flow +96 -0
- package/runner/compileArtifacts.js.flow +76 -0
- package/runner/extractAST.js.flow +100 -0
- package/runner/getChangedNodeNames.js.flow +48 -0
- package/runner/getSchemaInstance.js.flow +36 -0
- package/runner/types.js.flow +37 -0
- package/transforms/ApplyFragmentArgumentTransform.js.flow +474 -0
- package/transforms/ClientExtensionsTransform.js.flow +220 -0
- package/transforms/ConnectionTransform.js.flow +869 -0
- package/transforms/DeferStreamTransform.js.flow +258 -0
- package/transforms/DisallowIdAsAlias.js.flow +47 -0
- package/transforms/DisallowTypenameOnRoot.js.flow +45 -0
- package/transforms/FieldHandleTransform.js.flow +80 -0
- package/transforms/FilterDirectivesTransform.js.flow +45 -0
- package/transforms/FlattenTransform.js.flow +456 -0
- package/transforms/GenerateIDFieldTransform.js.flow +134 -0
- package/transforms/GenerateTypeNameTransform.js.flow +81 -0
- package/transforms/InlineDataFragmentTransform.js.flow +124 -0
- package/transforms/InlineFragmentsTransform.js.flow +71 -0
- package/transforms/MaskTransform.js.flow +126 -0
- package/transforms/MatchTransform.js.flow +583 -0
- package/transforms/RefetchableFragmentTransform.js.flow +272 -0
- package/transforms/RelayDirectiveTransform.js.flow +99 -0
- package/transforms/SkipClientExtensionsTransform.js.flow +54 -0
- package/transforms/SkipHandleFieldTransform.js.flow +44 -0
- package/transforms/SkipRedundantNodesTransform.js.flow +253 -0
- package/transforms/SkipSplitOperationTransform.js.flow +37 -0
- package/transforms/SkipUnreachableNodeTransform.js.flow +149 -0
- package/transforms/SkipUnusedVariablesTransform.js.flow +59 -0
- package/transforms/SplitModuleImportTransform.js.flow +98 -0
- package/transforms/TestOperationTransform.js.flow +138 -0
- package/transforms/TransformUtils.js.flow +26 -0
- package/transforms/ValidateGlobalVariablesTransform.js.flow +81 -0
- package/transforms/ValidateRequiredArgumentsTransform.js.flow +127 -0
- package/transforms/ValidateServerOnlyDirectivesTransform.js.flow +112 -0
- package/transforms/ValidateUnusedVariablesTransform.js.flow +89 -0
- package/transforms/query-generators/FetchableQueryGenerator.js.flow +190 -0
- package/transforms/query-generators/NodeQueryGenerator.js.flow +206 -0
- package/transforms/query-generators/QueryQueryGenerator.js.flow +57 -0
- package/transforms/query-generators/ViewerQueryGenerator.js.flow +97 -0
- package/transforms/query-generators/index.js.flow +90 -0
- package/transforms/query-generators/utils.js.flow +72 -0
- package/util/CodeMarker.js.flow +79 -0
- package/util/DefaultHandleKey.js.flow +17 -0
- package/util/RelayCompilerCache.js.flow +88 -0
- package/util/Rollout.js.flow +39 -0
- package/util/TimeReporter.js.flow +79 -0
- package/util/areEqualOSS.js.flow +123 -0
- package/util/dedupeJSONStringify.js.flow +152 -0
- package/util/getDefinitionNodeHash.js.flow +25 -0
- package/util/getModuleName.js.flow +39 -0
- package/util/joinArgumentDefinitions.js.flow +99 -0
- package/util/md5.js.flow +22 -0
- package/util/murmurHash.js.flow +94 -0
- package/util/nullthrowsOSS.js.flow +25 -0
- package/util/orList.js.flow +37 -0
- package/util/partitionArray.js.flow +37 -0
- package/lib/transforms/ConnectionFieldTransform.js +0 -275
@@ -0,0 +1,327 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
3
|
+
*
|
4
|
+
* This source code is licensed under the MIT license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*
|
7
|
+
* @format
|
8
|
+
*
|
9
|
+
*/
|
10
|
+
// flowlint ambiguous-object-type:error
|
11
|
+
'use strict';
|
12
|
+
|
13
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
14
|
+
|
15
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
16
|
+
|
17
|
+
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
18
|
+
|
19
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
20
|
+
|
21
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
22
|
+
|
23
|
+
var crypto = require('crypto');
|
24
|
+
|
25
|
+
var nullthrows = require('nullthrows');
|
26
|
+
|
27
|
+
var _require = require('./GraphQLASTUtils'),
|
28
|
+
getName = _require.getName;
|
29
|
+
|
30
|
+
function createEmptyState() {
|
31
|
+
return {
|
32
|
+
artifacts: new Map(),
|
33
|
+
metadata: new Map()
|
34
|
+
};
|
35
|
+
}
|
36
|
+
|
37
|
+
function serializeState(state) {
|
38
|
+
var json = [];
|
39
|
+
|
40
|
+
var _iterator = _createForOfIteratorHelper(state.artifacts),
|
41
|
+
_step;
|
42
|
+
|
43
|
+
try {
|
44
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
45
|
+
var _step$value = _step.value,
|
46
|
+
name = _step$value[0],
|
47
|
+
artifacts = _step$value[1];
|
48
|
+
json.push([name, Array.from(artifacts).map(function (filename) {
|
49
|
+
var _state$metadata$get;
|
50
|
+
|
51
|
+
return [filename, (_state$metadata$get = state.metadata.get(filename)) !== null && _state$metadata$get !== void 0 ? _state$metadata$get : ''];
|
52
|
+
})]);
|
53
|
+
}
|
54
|
+
} catch (err) {
|
55
|
+
_iterator.e(err);
|
56
|
+
} finally {
|
57
|
+
_iterator.f();
|
58
|
+
}
|
59
|
+
|
60
|
+
return json;
|
61
|
+
}
|
62
|
+
|
63
|
+
function deserializeState(json) {
|
64
|
+
var metadata = new Map();
|
65
|
+
var artifacts = new Map();
|
66
|
+
json.forEach(function (_ref) {
|
67
|
+
var name = _ref[0],
|
68
|
+
artifactArray = _ref[1];
|
69
|
+
var artifactsFiles = new Set();
|
70
|
+
artifactArray.forEach(function (_ref2) {
|
71
|
+
var filename = _ref2[0],
|
72
|
+
sha1hex = _ref2[1];
|
73
|
+
artifactsFiles.add(filename);
|
74
|
+
metadata.set(filename, sha1hex);
|
75
|
+
});
|
76
|
+
artifacts.set(name, artifactsFiles);
|
77
|
+
});
|
78
|
+
return {
|
79
|
+
artifacts: artifacts,
|
80
|
+
metadata: metadata
|
81
|
+
};
|
82
|
+
}
|
83
|
+
|
84
|
+
function updateState(state, changes, generatedArtifacts, filesystem, resolveFullPath) {
|
85
|
+
var nextState = {
|
86
|
+
artifacts: new Map(state.artifacts),
|
87
|
+
metadata: new Map(state.metadata)
|
88
|
+
};
|
89
|
+
var deletionCandidates = new Set();
|
90
|
+
var addedNames = new Set();
|
91
|
+
|
92
|
+
var _iterator2 = _createForOfIteratorHelper(changes.added),
|
93
|
+
_step2;
|
94
|
+
|
95
|
+
try {
|
96
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
97
|
+
var ast = _step2.value.ast;
|
98
|
+
addedNames.add(getName(ast));
|
99
|
+
} // For every removed AST node, delete the generated artifacts tracked for that
|
100
|
+
// node, unless the AST node was also added when the file was moved or the
|
101
|
+
// AST changed which shows up as added and removed in changes.
|
102
|
+
|
103
|
+
} catch (err) {
|
104
|
+
_iterator2.e(err);
|
105
|
+
} finally {
|
106
|
+
_iterator2.f();
|
107
|
+
}
|
108
|
+
|
109
|
+
var _iterator3 = _createForOfIteratorHelper(changes.removed),
|
110
|
+
_step3;
|
111
|
+
|
112
|
+
try {
|
113
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
114
|
+
var _ast = _step3.value.ast;
|
115
|
+
var name = getName(_ast);
|
116
|
+
|
117
|
+
if (addedNames.has(name)) {
|
118
|
+
// Update, we deal with that when iterating the added nodes.
|
119
|
+
continue;
|
120
|
+
}
|
121
|
+
|
122
|
+
var entry = nextState.artifacts.get(name);
|
123
|
+
|
124
|
+
if (entry == null) {
|
125
|
+
// No existing artifacts to delete
|
126
|
+
continue;
|
127
|
+
}
|
128
|
+
|
129
|
+
var _iterator7 = _createForOfIteratorHelper(entry.keys()),
|
130
|
+
_step7;
|
131
|
+
|
132
|
+
try {
|
133
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
134
|
+
var outdatedFile = _step7.value;
|
135
|
+
deletionCandidates.add(outdatedFile);
|
136
|
+
}
|
137
|
+
} catch (err) {
|
138
|
+
_iterator7.e(err);
|
139
|
+
} finally {
|
140
|
+
_iterator7.f();
|
141
|
+
}
|
142
|
+
|
143
|
+
nextState.artifacts["delete"](name);
|
144
|
+
}
|
145
|
+
} catch (err) {
|
146
|
+
_iterator3.e(err);
|
147
|
+
} finally {
|
148
|
+
_iterator3.f();
|
149
|
+
}
|
150
|
+
|
151
|
+
var _iterator4 = _createForOfIteratorHelper(generatedArtifacts.artifacts),
|
152
|
+
_step4;
|
153
|
+
|
154
|
+
try {
|
155
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
156
|
+
var _step4$value = _step4.value,
|
157
|
+
_name = _step4$value[0],
|
158
|
+
artifacts = _step4$value[1];
|
159
|
+
var oldEntry = nextState.artifacts.get(_name);
|
160
|
+
|
161
|
+
if (oldEntry != null) {
|
162
|
+
var _iterator8 = _createForOfIteratorHelper(oldEntry),
|
163
|
+
_step8;
|
164
|
+
|
165
|
+
try {
|
166
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
167
|
+
var _outdatedFile = _step8.value;
|
168
|
+
|
169
|
+
if (!artifacts.has(_outdatedFile)) {
|
170
|
+
deletionCandidates.add(_outdatedFile);
|
171
|
+
}
|
172
|
+
}
|
173
|
+
} catch (err) {
|
174
|
+
_iterator8.e(err);
|
175
|
+
} finally {
|
176
|
+
_iterator8.f();
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
nextState.artifacts.set(_name, artifacts);
|
181
|
+
|
182
|
+
var _iterator9 = _createForOfIteratorHelper(artifacts.keys()),
|
183
|
+
_step9;
|
184
|
+
|
185
|
+
try {
|
186
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
187
|
+
var _generatedArtifacts$m;
|
188
|
+
|
189
|
+
var filename = _step9.value;
|
190
|
+
nextState.metadata.set(filename, (_generatedArtifacts$m = generatedArtifacts.metadata.get(filename)) !== null && _generatedArtifacts$m !== void 0 ? _generatedArtifacts$m : '');
|
191
|
+
}
|
192
|
+
} catch (err) {
|
193
|
+
_iterator9.e(err);
|
194
|
+
} finally {
|
195
|
+
_iterator9.f();
|
196
|
+
}
|
197
|
+
}
|
198
|
+
} catch (err) {
|
199
|
+
_iterator4.e(err);
|
200
|
+
} finally {
|
201
|
+
_iterator4.f();
|
202
|
+
}
|
203
|
+
|
204
|
+
if (deletionCandidates.size === 0) {
|
205
|
+
return nextState;
|
206
|
+
}
|
207
|
+
|
208
|
+
var nextGeneratedArtifacts = new Set();
|
209
|
+
|
210
|
+
var _iterator5 = _createForOfIteratorHelper(eachNameAndArtifact(nextState)),
|
211
|
+
_step5;
|
212
|
+
|
213
|
+
try {
|
214
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
215
|
+
var _step5$value = _step5.value,
|
216
|
+
artifact = _step5$value[1];
|
217
|
+
nextGeneratedArtifacts.add(artifact);
|
218
|
+
}
|
219
|
+
} catch (err) {
|
220
|
+
_iterator5.e(err);
|
221
|
+
} finally {
|
222
|
+
_iterator5.f();
|
223
|
+
}
|
224
|
+
|
225
|
+
var _iterator6 = _createForOfIteratorHelper(deletionCandidates),
|
226
|
+
_step6;
|
227
|
+
|
228
|
+
try {
|
229
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
230
|
+
var candidate = _step6.value;
|
231
|
+
var someoneElseArtifact = nextGeneratedArtifacts.has(candidate);
|
232
|
+
|
233
|
+
if (someoneElseArtifact) {
|
234
|
+
// Sometimes, there are artifacts that are generated by multiple files
|
235
|
+
// If this candidate is also generated by someone else in
|
236
|
+
// artifact map, we just skip it here
|
237
|
+
continue;
|
238
|
+
}
|
239
|
+
|
240
|
+
var candidatePath = resolveFullPath(candidate);
|
241
|
+
|
242
|
+
if (filesystem.existsSync(candidatePath)) {
|
243
|
+
filesystem.unlinkSync(candidatePath);
|
244
|
+
nextState.metadata["delete"](candidate);
|
245
|
+
}
|
246
|
+
}
|
247
|
+
} catch (err) {
|
248
|
+
_iterator6.e(err);
|
249
|
+
} finally {
|
250
|
+
_iterator6.f();
|
251
|
+
}
|
252
|
+
|
253
|
+
return nextState;
|
254
|
+
}
|
255
|
+
|
256
|
+
function producedFiles(dirs, artifactsMetadata) {
|
257
|
+
var result = new Map();
|
258
|
+
dirs.forEach(function (_ref3) {
|
259
|
+
var baseDir = _ref3.baseDir,
|
260
|
+
dir = _ref3.dir;
|
261
|
+
var _dir$changes = dir.changes,
|
262
|
+
deleted = _dir$changes.deleted,
|
263
|
+
updated = _dir$changes.updated,
|
264
|
+
created = _dir$changes.created,
|
265
|
+
unchanged = _dir$changes.unchanged;
|
266
|
+
|
267
|
+
if (deleted.length > 0) {
|
268
|
+
throw new Error('Did not expect to see a deletion entry here.');
|
269
|
+
}
|
270
|
+
|
271
|
+
[].concat((0, _toConsumableArray2["default"])(updated), (0, _toConsumableArray2["default"])(created)).forEach(function (filename) {
|
272
|
+
var name = dir.getPath(filename).substr(baseDir.length + 1);
|
273
|
+
var sha1hex = sha1(nullthrows(dir.read(filename)));
|
274
|
+
result.set(name, sha1hex);
|
275
|
+
});
|
276
|
+
unchanged.forEach(function (filename) {
|
277
|
+
var name = dir.getPath(filename).substr(baseDir.length + 1);
|
278
|
+
var sha1hex = artifactsMetadata.get(name);
|
279
|
+
result.set(name, sha1hex !== null && sha1hex !== void 0 ? sha1hex : sha1(nullthrows(dir.read(filename))));
|
280
|
+
});
|
281
|
+
});
|
282
|
+
return result;
|
283
|
+
}
|
284
|
+
|
285
|
+
function* eachNameAndArtifact(artifacts) {
|
286
|
+
var _iterator10 = _createForOfIteratorHelper(artifacts.artifacts),
|
287
|
+
_step10;
|
288
|
+
|
289
|
+
try {
|
290
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
291
|
+
var _step10$value = _step10.value,
|
292
|
+
name = _step10$value[0],
|
293
|
+
artifactsForSource = _step10$value[1];
|
294
|
+
|
295
|
+
var _iterator11 = _createForOfIteratorHelper(artifactsForSource.keys()),
|
296
|
+
_step11;
|
297
|
+
|
298
|
+
try {
|
299
|
+
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
300
|
+
var artifactFile = _step11.value;
|
301
|
+
yield [name, artifactFile];
|
302
|
+
}
|
303
|
+
} catch (err) {
|
304
|
+
_iterator11.e(err);
|
305
|
+
} finally {
|
306
|
+
_iterator11.f();
|
307
|
+
}
|
308
|
+
}
|
309
|
+
} catch (err) {
|
310
|
+
_iterator10.e(err);
|
311
|
+
} finally {
|
312
|
+
_iterator10.f();
|
313
|
+
}
|
314
|
+
}
|
315
|
+
|
316
|
+
function sha1(content) {
|
317
|
+
return crypto.createHash('sha1').update(content).digest('hex');
|
318
|
+
}
|
319
|
+
|
320
|
+
module.exports = {
|
321
|
+
createEmptyState: createEmptyState,
|
322
|
+
serializeState: serializeState,
|
323
|
+
deserializeState: deserializeState,
|
324
|
+
updateState: updateState,
|
325
|
+
producedFiles: producedFiles,
|
326
|
+
eachNameAndArtifact: eachNameAndArtifact
|
327
|
+
};
|
@@ -0,0 +1,265 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
3
|
+
*
|
4
|
+
* This source code is licensed under the MIT license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*
|
7
|
+
* @emails oncall+relay
|
8
|
+
*
|
9
|
+
* @format
|
10
|
+
*/
|
11
|
+
// flowlint ambiguous-object-type:error
|
12
|
+
'use strict';
|
13
|
+
|
14
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
15
|
+
|
16
|
+
var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
|
17
|
+
|
18
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
19
|
+
|
20
|
+
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
21
|
+
|
22
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
23
|
+
|
24
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
25
|
+
|
26
|
+
var fs = require('fs');
|
27
|
+
|
28
|
+
var invariant = require("fbjs/lib/invariant");
|
29
|
+
|
30
|
+
/**
|
31
|
+
* A filesystem wrapper that buffers file reads and writes until `commit()` is
|
32
|
+
* called.
|
33
|
+
*/
|
34
|
+
var BufferedFilesystem = /*#__PURE__*/function () {
|
35
|
+
function BufferedFilesystem() {
|
36
|
+
(0, _defineProperty2["default"])(this, "buffer", new Map());
|
37
|
+
(0, _defineProperty2["default"])(this, "committed", false);
|
38
|
+
}
|
39
|
+
|
40
|
+
var _proto = BufferedFilesystem.prototype;
|
41
|
+
|
42
|
+
_proto._assertNotComitted = function _assertNotComitted() {
|
43
|
+
!!this.committed ? process.env.NODE_ENV !== "production" ? invariant(false, 'BufferedFilesystem: no operations allowed after commit().') : invariant(false) : void 0;
|
44
|
+
};
|
45
|
+
|
46
|
+
_proto.commit = /*#__PURE__*/function () {
|
47
|
+
var _commit = _asyncToGenerator(function* (sourceControl) {
|
48
|
+
this._assertNotComitted();
|
49
|
+
|
50
|
+
this.committed = true;
|
51
|
+
var removed = [];
|
52
|
+
var added = [];
|
53
|
+
|
54
|
+
var _iterator = _createForOfIteratorHelper(this.buffer),
|
55
|
+
_step;
|
56
|
+
|
57
|
+
try {
|
58
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
59
|
+
var _step$value = _step.value,
|
60
|
+
path = _step$value[0],
|
61
|
+
data = _step$value[1];
|
62
|
+
|
63
|
+
if (data == null) {
|
64
|
+
removed.push(path);
|
65
|
+
fs.unlinkSync(path);
|
66
|
+
} else {
|
67
|
+
var fileExisits = fs.existsSync(path);
|
68
|
+
var currentData = fileExisits ? fs.readFileSync(path, 'utf8') : null;
|
69
|
+
|
70
|
+
if (currentData !== data) {
|
71
|
+
added.push(path);
|
72
|
+
fs.writeFileSync(path, data, 'utf8');
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
76
|
+
} catch (err) {
|
77
|
+
_iterator.e(err);
|
78
|
+
} finally {
|
79
|
+
_iterator.f();
|
80
|
+
}
|
81
|
+
|
82
|
+
if (sourceControl) {
|
83
|
+
yield sourceControl.addRemove(added, removed);
|
84
|
+
}
|
85
|
+
});
|
86
|
+
|
87
|
+
function commit(_x) {
|
88
|
+
return _commit.apply(this, arguments);
|
89
|
+
}
|
90
|
+
|
91
|
+
return commit;
|
92
|
+
}();
|
93
|
+
|
94
|
+
_proto.hasChanges = function hasChanges() {
|
95
|
+
this._assertNotComitted();
|
96
|
+
|
97
|
+
return this.buffer.size > 0;
|
98
|
+
};
|
99
|
+
|
100
|
+
_proto.getChangesSummary = function getChangesSummary() {
|
101
|
+
this._assertNotComitted();
|
102
|
+
|
103
|
+
var added = [];
|
104
|
+
var updated = [];
|
105
|
+
var removed = [];
|
106
|
+
|
107
|
+
var _iterator2 = _createForOfIteratorHelper(this.buffer),
|
108
|
+
_step2;
|
109
|
+
|
110
|
+
try {
|
111
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
112
|
+
var _step2$value = _step2.value,
|
113
|
+
path = _step2$value[0],
|
114
|
+
data = _step2$value[1];
|
115
|
+
|
116
|
+
if (data == null) {
|
117
|
+
removed.push(path);
|
118
|
+
} else {
|
119
|
+
if (!fs.existsSync(path)) {
|
120
|
+
added.push(path);
|
121
|
+
} else {
|
122
|
+
updated.push(path);
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
126
|
+
} catch (err) {
|
127
|
+
_iterator2.e(err);
|
128
|
+
} finally {
|
129
|
+
_iterator2.f();
|
130
|
+
}
|
131
|
+
|
132
|
+
return [added.length > 0 ? "Added:\n".concat(added.map(formatFilepath).join('')) : '', updated.length > 0 ? "Updated:\n".concat(updated.map(formatFilepath).join('')) : '', removed.length > 0 ? "Removed:\n".concat(removed.map(formatFilepath).join('')) : ''].filter(Boolean).join('\n');
|
133
|
+
};
|
134
|
+
|
135
|
+
_proto.getAddedRemovedFiles = function getAddedRemovedFiles() {
|
136
|
+
this._assertNotComitted();
|
137
|
+
|
138
|
+
var added = [];
|
139
|
+
var removed = [];
|
140
|
+
|
141
|
+
var _iterator3 = _createForOfIteratorHelper(this.buffer),
|
142
|
+
_step3;
|
143
|
+
|
144
|
+
try {
|
145
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
146
|
+
var _step3$value = _step3.value,
|
147
|
+
path = _step3$value[0],
|
148
|
+
data = _step3$value[1];
|
149
|
+
|
150
|
+
if (data == null) {
|
151
|
+
removed.push(path);
|
152
|
+
} else {
|
153
|
+
if (!fs.existsSync(path)) {
|
154
|
+
added.push(path);
|
155
|
+
}
|
156
|
+
}
|
157
|
+
}
|
158
|
+
} catch (err) {
|
159
|
+
_iterator3.e(err);
|
160
|
+
} finally {
|
161
|
+
_iterator3.f();
|
162
|
+
}
|
163
|
+
|
164
|
+
return {
|
165
|
+
added: added,
|
166
|
+
removed: removed
|
167
|
+
};
|
168
|
+
};
|
169
|
+
|
170
|
+
_proto.existsSync = function existsSync(path) {
|
171
|
+
this._assertNotComitted();
|
172
|
+
|
173
|
+
return this.buffer.has(path) ? Boolean(this.buffer.get(path)) : fs.existsSync(path);
|
174
|
+
};
|
175
|
+
|
176
|
+
_proto.mkdirSync = function mkdirSync(path) {
|
177
|
+
this._assertNotComitted();
|
178
|
+
|
179
|
+
fs.mkdirSync(path);
|
180
|
+
};
|
181
|
+
|
182
|
+
_proto.readdirSync = function readdirSync(path) {
|
183
|
+
this._assertNotComitted();
|
184
|
+
|
185
|
+
throw new Error('BufferedFilesystem: readdirSync is not implemented.');
|
186
|
+
};
|
187
|
+
|
188
|
+
_proto.readFileSync = function readFileSync(path, encoding) {
|
189
|
+
this._assertNotComitted();
|
190
|
+
|
191
|
+
if (this.buffer.has(path)) {
|
192
|
+
var data = this.buffer.get(path);
|
193
|
+
!(data != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'BufferedFilesystem: trying to read deleted file.') : invariant(false) : void 0;
|
194
|
+
return data;
|
195
|
+
}
|
196
|
+
|
197
|
+
return fs.readFileSync(path, encoding);
|
198
|
+
};
|
199
|
+
|
200
|
+
_proto.statSync = function statSync(path) {
|
201
|
+
this._assertNotComitted();
|
202
|
+
|
203
|
+
return fs.statSync(path);
|
204
|
+
};
|
205
|
+
|
206
|
+
_proto.unlinkSync = function unlinkSync(path) {
|
207
|
+
this._assertNotComitted();
|
208
|
+
|
209
|
+
this.buffer.set(path, null);
|
210
|
+
};
|
211
|
+
|
212
|
+
_proto.writeFileSync = function writeFileSync(filename, data, encoding) {
|
213
|
+
this._assertNotComitted();
|
214
|
+
|
215
|
+
this.buffer.set(filename, data);
|
216
|
+
};
|
217
|
+
|
218
|
+
_proto.changedFilesToJSON = function changedFilesToJSON() {
|
219
|
+
this._assertNotComitted();
|
220
|
+
|
221
|
+
var changed = [];
|
222
|
+
var removed = [];
|
223
|
+
|
224
|
+
var _iterator4 = _createForOfIteratorHelper(this.buffer),
|
225
|
+
_step4;
|
226
|
+
|
227
|
+
try {
|
228
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
229
|
+
var _step4$value = _step4.value,
|
230
|
+
path = _step4$value[0],
|
231
|
+
data = _step4$value[1];
|
232
|
+
|
233
|
+
if (data == null) {
|
234
|
+
removed.push({
|
235
|
+
path: path
|
236
|
+
});
|
237
|
+
} else {
|
238
|
+
changed.push({
|
239
|
+
path: path,
|
240
|
+
data: data
|
241
|
+
});
|
242
|
+
}
|
243
|
+
}
|
244
|
+
} catch (err) {
|
245
|
+
_iterator4.e(err);
|
246
|
+
} finally {
|
247
|
+
_iterator4.f();
|
248
|
+
}
|
249
|
+
|
250
|
+
return {
|
251
|
+
removed: removed,
|
252
|
+
changed: changed
|
253
|
+
};
|
254
|
+
};
|
255
|
+
|
256
|
+
return BufferedFilesystem;
|
257
|
+
}();
|
258
|
+
|
259
|
+
function formatFilepath(filepath) {
|
260
|
+
var startIndex = filepath.length - 80;
|
261
|
+
var prefix = startIndex > 0 ? "\t - ".concat(filepath.substr(0, 8), "...") : '\t - ';
|
262
|
+
return prefix + filepath.substr(startIndex, filepath.length) + '\n';
|
263
|
+
}
|
264
|
+
|
265
|
+
module.exports = BufferedFilesystem;
|