flow-parser 0.318.0 → 0.319.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/oxidized/FlowParser.js +249 -0
- package/oxidized/FlowParser.js.flow +457 -0
- package/oxidized/FlowParserDeserializer.js +209 -0
- package/oxidized/FlowParserDeserializer.js.flow +323 -0
- package/oxidized/FlowParserNodeDeserializers.js +1767 -0
- package/oxidized/FlowParserNodeDeserializers.js.flow +18 -0
- package/oxidized/FlowParserWASM.js +1 -0
- package/oxidized/FlowParserWASM.js.flow +119 -0
- package/oxidized/HermesAST.js.flow +57 -0
- package/oxidized/HermesParserDecodeUTF8String.js +45 -0
- package/oxidized/HermesParserDecodeUTF8String.js.flow +65 -0
- package/oxidized/ParserOptions.js +8 -0
- package/oxidized/ParserOptions.js.flow +55 -0
- package/oxidized/babel/TransformESTreeToBabel.js +1055 -0
- package/oxidized/babel/TransformESTreeToBabel.js.flow +1349 -0
- package/oxidized/estree/StripFlowTypes.js +158 -0
- package/oxidized/estree/StripFlowTypes.js.flow +158 -0
- package/oxidized/estree/StripFlowTypesForBabel.js +176 -0
- package/oxidized/estree/StripFlowTypesForBabel.js.flow +216 -0
- package/oxidized/estree/TransformComponentSyntax.js +751 -0
- package/oxidized/estree/TransformComponentSyntax.js.flow +864 -0
- package/oxidized/estree/TransformEnumSyntax.js +92 -0
- package/oxidized/estree/TransformEnumSyntax.js.flow +125 -0
- package/oxidized/estree/TransformMatchSyntax.js +990 -0
- package/oxidized/estree/TransformMatchSyntax.js.flow +991 -0
- package/oxidized/estree/TransformRecordSyntax.js +283 -0
- package/oxidized/estree/TransformRecordSyntax.js.flow +310 -0
- package/oxidized/generated/ESTreeVisitorKeys.js +234 -0
- package/oxidized/generated/ESTreeVisitorKeys.js.flow +22 -0
- package/oxidized/getModuleDocblock.js +87 -0
- package/oxidized/getModuleDocblock.js.flow +119 -0
- package/oxidized/index.js +220 -0
- package/oxidized/index.js.flow +183 -0
- package/oxidized/oxidized-src/FlowParser.js +249 -0
- package/oxidized/oxidized-src/FlowParserDeserializer.js +209 -0
- package/oxidized/oxidized-src/FlowParserNodeDeserializers.js +1767 -0
- package/oxidized/oxidized-src/HermesParserDecodeUTF8String.js +45 -0
- package/oxidized/oxidized-src/ParserOptions.js +8 -0
- package/oxidized/oxidized-src/babel/TransformESTreeToBabel.js +1055 -0
- package/oxidized/oxidized-src/estree/StripFlowTypes.js +158 -0
- package/oxidized/oxidized-src/estree/StripFlowTypesForBabel.js +176 -0
- package/oxidized/oxidized-src/estree/TransformComponentSyntax.js +751 -0
- package/oxidized/oxidized-src/estree/TransformEnumSyntax.js +92 -0
- package/oxidized/oxidized-src/estree/TransformMatchSyntax.js +990 -0
- package/oxidized/oxidized-src/estree/TransformRecordSyntax.js +283 -0
- package/oxidized/oxidized-src/generated/ESTreeVisitorKeys.js +234 -0
- package/oxidized/oxidized-src/getModuleDocblock.js +87 -0
- package/oxidized/oxidized-src/index.js +220 -0
- package/oxidized/oxidized-src/transform/SimpleTransform.js +95 -0
- package/oxidized/oxidized-src/transform/astArrayMutationHelpers.js +52 -0
- package/oxidized/oxidized-src/transform/astNodeMutationHelpers.js +142 -0
- package/oxidized/oxidized-src/transform/print/comments/comments.js +245 -0
- package/oxidized/oxidized-src/transform/print/comments/prettier/common/util.js +235 -0
- package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/comments.js +663 -0
- package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/loc.js +30 -0
- package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/printer-estree.js +23 -0
- package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/utils.js +89 -0
- package/oxidized/oxidized-src/transform/print/comments/prettier/main/comments.js +374 -0
- package/oxidized/oxidized-src/transform/print/comments/prettier/utils/get-last.js +5 -0
- package/oxidized/oxidized-src/transform/print/detachedNodeTypes.js +1 -0
- package/oxidized/oxidized-src/transform/print/print.js +68 -0
- package/oxidized/oxidized-src/traverse/SimpleTraverser.js +90 -0
- package/oxidized/oxidized-src/traverse/getVisitorKeys.js +29 -0
- package/oxidized/oxidized-src/utils/Builders.js +181 -0
- package/oxidized/oxidized-src/utils/GenID.js +37 -0
- package/oxidized/oxidized-src/utils/createSyntaxError.js +15 -0
- package/oxidized/oxidized-src/utils/isReservedWord.js +53 -0
- package/oxidized/oxidized-src/utils/mutateESTreeASTForPrettier.js +85 -0
- package/oxidized/transform/SimpleTransform.js +95 -0
- package/oxidized/transform/SimpleTransform.js.flow +168 -0
- package/oxidized/transform/astArrayMutationHelpers.js +52 -0
- package/oxidized/transform/astArrayMutationHelpers.js.flow +71 -0
- package/oxidized/transform/astNodeMutationHelpers.js +142 -0
- package/oxidized/transform/astNodeMutationHelpers.js.flow +252 -0
- package/oxidized/transform/print/comments/comments.js +245 -0
- package/oxidized/transform/print/comments/comments.js.flow +330 -0
- package/oxidized/transform/print/comments/prettier/common/util.js +235 -0
- package/oxidized/transform/print/comments/prettier/language-js/comments.js +663 -0
- package/oxidized/transform/print/comments/prettier/language-js/loc.js +30 -0
- package/oxidized/transform/print/comments/prettier/language-js/printer-estree.js +23 -0
- package/oxidized/transform/print/comments/prettier/language-js/utils.js +89 -0
- package/oxidized/transform/print/comments/prettier/main/comments.js +374 -0
- package/oxidized/transform/print/comments/prettier/utils/get-last.js +5 -0
- package/oxidized/transform/print/detachedNodeTypes.js +1 -0
- package/oxidized/transform/print/detachedNodeTypes.js.flow +24 -0
- package/oxidized/transform/print/print.js +68 -0
- package/oxidized/transform/print/print.js.flow +87 -0
- package/oxidized/traverse/SimpleTraverser.js +90 -0
- package/oxidized/traverse/SimpleTraverser.js.flow +133 -0
- package/oxidized/traverse/getVisitorKeys.js +29 -0
- package/oxidized/traverse/getVisitorKeys.js.flow +36 -0
- package/oxidized/utils/Builders.js +181 -0
- package/oxidized/utils/Builders.js.flow +218 -0
- package/oxidized/utils/GenID.js +37 -0
- package/oxidized/utils/GenID.js.flow +39 -0
- package/oxidized/utils/createSyntaxError.js +15 -0
- package/oxidized/utils/createSyntaxError.js.flow +24 -0
- package/oxidized/utils/isReservedWord.js +53 -0
- package/oxidized/utils/isReservedWord.js.flow +57 -0
- package/oxidized/utils/mutateESTreeASTForPrettier.js +85 -0
- package/oxidized/utils/mutateESTreeASTForPrettier.js.flow +130 -0
- package/package.json +6 -4
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
parse: true,
|
|
8
|
+
mutateESTreeASTForPrettier: true,
|
|
9
|
+
Transforms: true,
|
|
10
|
+
FlowVisitorKeys: true,
|
|
11
|
+
astArrayMutationHelpers: true,
|
|
12
|
+
astNodeMutationHelpers: true
|
|
13
|
+
};
|
|
14
|
+
exports.mutateESTreeASTForPrettier = exports.astNodeMutationHelpers = exports.astArrayMutationHelpers = exports.Transforms = void 0;
|
|
15
|
+
exports.parse = parse;
|
|
16
|
+
|
|
17
|
+
var FlowParser = _interopRequireWildcard(require("./FlowParser"));
|
|
18
|
+
|
|
19
|
+
var _ESTreeVisitorKeys = _interopRequireDefault(require("./generated/ESTreeVisitorKeys"));
|
|
20
|
+
|
|
21
|
+
exports.FlowVisitorKeys = _ESTreeVisitorKeys.default;
|
|
22
|
+
|
|
23
|
+
var TransformComponentSyntax = _interopRequireWildcard(require("./estree/TransformComponentSyntax"));
|
|
24
|
+
|
|
25
|
+
var TransformEnumSyntax = _interopRequireWildcard(require("./estree/TransformEnumSyntax"));
|
|
26
|
+
|
|
27
|
+
var TransformMatchSyntax = _interopRequireWildcard(require("./estree/TransformMatchSyntax"));
|
|
28
|
+
|
|
29
|
+
var TransformRecordSyntax = _interopRequireWildcard(require("./estree/TransformRecordSyntax"));
|
|
30
|
+
|
|
31
|
+
var StripFlowTypesForBabel = _interopRequireWildcard(require("./estree/StripFlowTypesForBabel"));
|
|
32
|
+
|
|
33
|
+
var TransformESTreeToBabel = _interopRequireWildcard(require("./babel/TransformESTreeToBabel"));
|
|
34
|
+
|
|
35
|
+
var StripFlowTypes = _interopRequireWildcard(require("./estree/StripFlowTypes"));
|
|
36
|
+
|
|
37
|
+
var _ParserOptions = require("./ParserOptions");
|
|
38
|
+
|
|
39
|
+
Object.keys(_ParserOptions).forEach(function (key) {
|
|
40
|
+
if (key === "default" || key === "__esModule") return;
|
|
41
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
42
|
+
if (key in exports && exports[key] === _ParserOptions[key]) return;
|
|
43
|
+
exports[key] = _ParserOptions[key];
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
var _SimpleTraverser = require("./traverse/SimpleTraverser");
|
|
47
|
+
|
|
48
|
+
Object.keys(_SimpleTraverser).forEach(function (key) {
|
|
49
|
+
if (key === "default" || key === "__esModule") return;
|
|
50
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
51
|
+
if (key in exports && exports[key] === _SimpleTraverser[key]) return;
|
|
52
|
+
exports[key] = _SimpleTraverser[key];
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
var _SimpleTransform = require("./transform/SimpleTransform");
|
|
56
|
+
|
|
57
|
+
Object.keys(_SimpleTransform).forEach(function (key) {
|
|
58
|
+
if (key === "default" || key === "__esModule") return;
|
|
59
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
60
|
+
if (key in exports && exports[key] === _SimpleTransform[key]) return;
|
|
61
|
+
exports[key] = _SimpleTransform[key];
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
var _getVisitorKeys = require("./traverse/getVisitorKeys");
|
|
65
|
+
|
|
66
|
+
Object.keys(_getVisitorKeys).forEach(function (key) {
|
|
67
|
+
if (key === "default" || key === "__esModule") return;
|
|
68
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
69
|
+
if (key in exports && exports[key] === _getVisitorKeys[key]) return;
|
|
70
|
+
exports[key] = _getVisitorKeys[key];
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
var _astArrayMutationHelpers = _interopRequireWildcard(require("./transform/astArrayMutationHelpers"));
|
|
74
|
+
|
|
75
|
+
exports.astArrayMutationHelpers = _astArrayMutationHelpers;
|
|
76
|
+
|
|
77
|
+
var _astNodeMutationHelpers = _interopRequireWildcard(require("./transform/astNodeMutationHelpers"));
|
|
78
|
+
|
|
79
|
+
exports.astNodeMutationHelpers = _astNodeMutationHelpers;
|
|
80
|
+
|
|
81
|
+
var _mutateESTreeASTForPrettier = _interopRequireDefault(require("./utils/mutateESTreeASTForPrettier"));
|
|
82
|
+
|
|
83
|
+
exports.mutateESTreeASTForPrettier = _mutateESTreeASTForPrettier.default;
|
|
84
|
+
|
|
85
|
+
function _interopRequireDefault(obj) {
|
|
86
|
+
return obj && obj.__esModule ? obj : {
|
|
87
|
+
default: obj
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
92
|
+
if (typeof WeakMap !== "function") return null;
|
|
93
|
+
var cacheBabelInterop = new WeakMap();
|
|
94
|
+
var cacheNodeInterop = new WeakMap();
|
|
95
|
+
return (_getRequireWildcardCache = function (nodeInterop) {
|
|
96
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
97
|
+
})(nodeInterop);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function _interopRequireWildcard(obj, nodeInterop) {
|
|
101
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
102
|
+
return obj;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
106
|
+
return {
|
|
107
|
+
default: obj
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
112
|
+
|
|
113
|
+
if (cache && cache.has(obj)) {
|
|
114
|
+
return cache.get(obj);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
var newObj = {};
|
|
118
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
119
|
+
|
|
120
|
+
for (var key in obj) {
|
|
121
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
122
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
123
|
+
|
|
124
|
+
if (desc && (desc.get || desc.set)) {
|
|
125
|
+
Object.defineProperty(newObj, key, desc);
|
|
126
|
+
} else {
|
|
127
|
+
newObj[key] = obj[key];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
newObj.default = obj;
|
|
133
|
+
|
|
134
|
+
if (cache) {
|
|
135
|
+
cache.set(obj, newObj);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return newObj;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const DEFAULTS = {
|
|
142
|
+
flow: 'detect'
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
function getOptions(opts) {
|
|
146
|
+
const options = { ...DEFAULTS,
|
|
147
|
+
...(opts != null ? opts : {})
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
if (options.flow !== 'all' && options.flow !== 'detect') {
|
|
151
|
+
throw new Error('flow option must be "all" or "detect"');
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (options.sourceType === 'unambiguous') {
|
|
155
|
+
delete options.sourceType;
|
|
156
|
+
} else if (options.sourceType != null && options.sourceType !== 'script' && options.sourceType !== 'module') {
|
|
157
|
+
throw new Error('sourceType option must be "script", "module", or "unambiguous" if set');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (options.enableExperimentalComponentSyntax == null) {
|
|
161
|
+
options.enableExperimentalComponentSyntax = true;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (options.enableExperimentalFlowMatchSyntax == null) {
|
|
165
|
+
options.enableExperimentalFlowMatchSyntax = true;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (options.enableExperimentalFlowRecordSyntax == null) {
|
|
169
|
+
options.enableExperimentalFlowRecordSyntax = true;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
options.enableRecords = options.enableExperimentalFlowRecordSyntax;
|
|
173
|
+
|
|
174
|
+
if (options.enableEnums == null) {
|
|
175
|
+
options.enableEnums = true;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (options.enableExperimentalDecorators == null) {
|
|
179
|
+
options.enableExperimentalDecorators = true;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
options.tokens = options.tokens === true;
|
|
183
|
+
options.allowReturnOutsideFunction = options.allowReturnOutsideFunction === true;
|
|
184
|
+
return options;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function parse(code, opts) {
|
|
188
|
+
var _options$transformOpt, _options$transformOpt2;
|
|
189
|
+
|
|
190
|
+
const options = getOptions(opts);
|
|
191
|
+
|
|
192
|
+
if (options.flow === 'all') {
|
|
193
|
+
options.enableTypes = true;
|
|
194
|
+
} else {
|
|
195
|
+
options.enableTypesPragmaDetection = true;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const estreeAST = FlowParser.parse(code, options);
|
|
199
|
+
|
|
200
|
+
if (options.babel !== true) {
|
|
201
|
+
return estreeAST;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const loweredESTreeAST = [(_options$transformOpt = options.transformOptions) != null && (_options$transformOpt2 = _options$transformOpt.TransformEnumSyntax) != null && _options$transformOpt2.enable ? TransformEnumSyntax.transformProgram : null, TransformMatchSyntax.transformProgram, TransformComponentSyntax.transformProgram, TransformRecordSyntax.transformProgram, StripFlowTypesForBabel.transformProgram].reduce((ast, transform) => {
|
|
205
|
+
var _transform;
|
|
206
|
+
|
|
207
|
+
return (_transform = transform == null ? void 0 : transform(ast, options)) != null ? _transform : ast;
|
|
208
|
+
}, estreeAST);
|
|
209
|
+
return TransformESTreeToBabel.transformProgram(loweredESTreeAST, options);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const Transforms = {
|
|
213
|
+
transformEnumSyntax: TransformEnumSyntax.transformProgram,
|
|
214
|
+
transformMatchSyntax: TransformMatchSyntax.transformProgram,
|
|
215
|
+
transformComponentSyntax: TransformComponentSyntax.transformProgram,
|
|
216
|
+
transformRecordSyntax: TransformRecordSyntax.transformProgram,
|
|
217
|
+
stripFlowTypesForBabel: StripFlowTypesForBabel.transformProgram,
|
|
218
|
+
stripFlowTypes: StripFlowTypes.transformProgram
|
|
219
|
+
};
|
|
220
|
+
exports.Transforms = Transforms;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SimpleTransform = void 0;
|
|
7
|
+
|
|
8
|
+
var _SimpleTraverser = require("../traverse/SimpleTraverser");
|
|
9
|
+
|
|
10
|
+
var _astNodeMutationHelpers = require("./astNodeMutationHelpers");
|
|
11
|
+
|
|
12
|
+
function setParentPointer(node, parent) {
|
|
13
|
+
if (parent != null) {
|
|
14
|
+
if (Array.isArray(node)) {
|
|
15
|
+
for (const item of node) {
|
|
16
|
+
item.parent = parent;
|
|
17
|
+
}
|
|
18
|
+
} else {
|
|
19
|
+
node.parent = parent;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
class SimpleTransform {
|
|
25
|
+
transform(rootNode, options) {
|
|
26
|
+
let resultRootNode = rootNode;
|
|
27
|
+
|
|
28
|
+
_SimpleTraverser.SimpleTraverser.traverse(rootNode, {
|
|
29
|
+
enter: (node, parent) => {
|
|
30
|
+
setParentPointer(node, parent);
|
|
31
|
+
const resultNode = options.transform(node);
|
|
32
|
+
|
|
33
|
+
if (resultNode !== node) {
|
|
34
|
+
let traversedResultNode = null;
|
|
35
|
+
|
|
36
|
+
if (resultNode != null) {
|
|
37
|
+
setParentPointer(resultNode, parent);
|
|
38
|
+
|
|
39
|
+
if (Array.isArray(resultNode)) {
|
|
40
|
+
traversedResultNode = resultNode.map(item => this.transform(item, options)).filter(item => item != null);
|
|
41
|
+
} else {
|
|
42
|
+
traversedResultNode = this.transform(resultNode, options);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (parent == null) {
|
|
47
|
+
if (node !== rootNode) {
|
|
48
|
+
throw new Error('SimpleTransform infra error: Parent not set on non root node, this should not be possible');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (Array.isArray(traversedResultNode)) {
|
|
52
|
+
throw new Error('SimpleTransform: invalid array result for root node');
|
|
53
|
+
} else {
|
|
54
|
+
resultRootNode = traversedResultNode;
|
|
55
|
+
}
|
|
56
|
+
} else if (traversedResultNode == null) {
|
|
57
|
+
(0, _astNodeMutationHelpers.removeNodeOnParent)(node, parent, options.visitorKeys);
|
|
58
|
+
} else {
|
|
59
|
+
(0, _astNodeMutationHelpers.replaceNodeOnParent)(node, parent, traversedResultNode, options.visitorKeys);
|
|
60
|
+
setParentPointer(traversedResultNode, parent);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
throw _SimpleTraverser.SimpleTraverser.Skip;
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
leave(_node) {},
|
|
68
|
+
|
|
69
|
+
visitorKeys: options.visitorKeys
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
return resultRootNode;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
static transform(node, options) {
|
|
76
|
+
return new SimpleTransform().transform(node, options);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static transformProgram(program, options) {
|
|
80
|
+
const result = SimpleTransform.transform(program, options);
|
|
81
|
+
|
|
82
|
+
if ((result == null ? void 0 : result.type) === 'Program') {
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
throw new Error('SimpleTransform.transformProgram: Expected program node.');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
static nodeWith(node, overrideProps, visitorKeys) {
|
|
90
|
+
return (0, _astNodeMutationHelpers.nodeWith)(node, overrideProps, visitorKeys);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
exports.SimpleTransform = SimpleTransform;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.arrayIsEqual = arrayIsEqual;
|
|
7
|
+
exports.insertInArray = insertInArray;
|
|
8
|
+
exports.removeFromArray = removeFromArray;
|
|
9
|
+
exports.replaceInArray = replaceInArray;
|
|
10
|
+
|
|
11
|
+
function assertArrayBounds(array, index) {
|
|
12
|
+
if (index < 0 || index >= array.length) {
|
|
13
|
+
throw new Error(`Invalid Mutation: Tried to mutate an elements array with an out of bounds index. Index: ${index}, Array Size: ${array.length}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function arrayIsEqual(a1, a2) {
|
|
18
|
+
if (a1 === a2) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (a1.length !== a2.length) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
for (let i = 0; i < a1.length; i++) {
|
|
27
|
+
if (a1[i] !== a2[i]) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function insertInArray(array, index, elements) {
|
|
36
|
+
if (index === array.length) {
|
|
37
|
+
return array.concat(elements);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
assertArrayBounds(array, index);
|
|
41
|
+
return array.slice(0, index).concat(elements).concat(array.slice(index));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function removeFromArray(array, index) {
|
|
45
|
+
assertArrayBounds(array, index);
|
|
46
|
+
return [...array.slice(0, index), ...array.slice(index + 1)];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function replaceInArray(array, index, elements) {
|
|
50
|
+
assertArrayBounds(array, index);
|
|
51
|
+
return array.slice(0, index).concat(elements).concat(array.slice(index + 1));
|
|
52
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.deepCloneNode = deepCloneNode;
|
|
7
|
+
exports.nodeWith = nodeWith;
|
|
8
|
+
exports.removeNodeOnParent = removeNodeOnParent;
|
|
9
|
+
exports.replaceNodeOnParent = replaceNodeOnParent;
|
|
10
|
+
exports.setParentPointersInDirectChildren = setParentPointersInDirectChildren;
|
|
11
|
+
exports.shallowCloneNode = shallowCloneNode;
|
|
12
|
+
exports.updateAllParentPointers = updateAllParentPointers;
|
|
13
|
+
|
|
14
|
+
var _astArrayMutationHelpers = require("./astArrayMutationHelpers");
|
|
15
|
+
|
|
16
|
+
var _getVisitorKeys = require("../traverse/getVisitorKeys");
|
|
17
|
+
|
|
18
|
+
var _SimpleTraverser = require("../traverse/SimpleTraverser");
|
|
19
|
+
|
|
20
|
+
function getParentKey(target, parent, visitorKeys) {
|
|
21
|
+
if (parent == null) {
|
|
22
|
+
throw new Error(`Expected parent node to be set on "${target.type}"`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
for (const key of (0, _getVisitorKeys.getVisitorKeys)(parent, visitorKeys)) {
|
|
26
|
+
if ((0, _getVisitorKeys.isNode)(parent[key])) {
|
|
27
|
+
if (parent[key] === target) {
|
|
28
|
+
return {
|
|
29
|
+
type: 'single',
|
|
30
|
+
node: parent,
|
|
31
|
+
key
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
} else if (Array.isArray(parent[key])) {
|
|
35
|
+
for (let i = 0; i < parent[key].length; i += 1) {
|
|
36
|
+
const current = parent[key][i];
|
|
37
|
+
|
|
38
|
+
if (current === target) {
|
|
39
|
+
return {
|
|
40
|
+
type: 'array',
|
|
41
|
+
node: parent,
|
|
42
|
+
key,
|
|
43
|
+
targetIndex: i
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
throw new Error(`Expected to find the ${target.type} as a direct child of the ${parent.type}.`);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function replaceNodeOnParent(originalNode, originalNodeParent, nodeToReplaceWith, visitorKeys) {
|
|
54
|
+
const replacementParent = getParentKey(originalNode, originalNodeParent, visitorKeys);
|
|
55
|
+
const parent = replacementParent.node;
|
|
56
|
+
|
|
57
|
+
if (replacementParent.type === 'array') {
|
|
58
|
+
parent[replacementParent.key] = (0, _astArrayMutationHelpers.replaceInArray)(parent[replacementParent.key], replacementParent.targetIndex, Array.isArray(nodeToReplaceWith) ? nodeToReplaceWith : [nodeToReplaceWith]);
|
|
59
|
+
} else {
|
|
60
|
+
if (Array.isArray(nodeToReplaceWith)) {
|
|
61
|
+
throw new Error(`Cannot insert array into non-array parent type: ${parent.type}`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
parent[replacementParent.key] = nodeToReplaceWith;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function removeNodeOnParent(originalNode, originalNodeParent, visitorKeys) {
|
|
69
|
+
const replacementParent = getParentKey(originalNode, originalNodeParent, visitorKeys);
|
|
70
|
+
const parent = replacementParent.node;
|
|
71
|
+
|
|
72
|
+
if (replacementParent.type === 'array') {
|
|
73
|
+
parent[replacementParent.key] = (0, _astArrayMutationHelpers.removeFromArray)(parent[replacementParent.key], replacementParent.targetIndex);
|
|
74
|
+
} else {
|
|
75
|
+
parent[replacementParent.key] = null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function setParentPointersInDirectChildren(node, visitorKeys) {
|
|
80
|
+
for (const key of (0, _getVisitorKeys.getVisitorKeys)(node, visitorKeys)) {
|
|
81
|
+
if ((0, _getVisitorKeys.isNode)(node[key])) {
|
|
82
|
+
node[key].parent = node;
|
|
83
|
+
} else if (Array.isArray(node[key])) {
|
|
84
|
+
for (const child of node[key]) {
|
|
85
|
+
child.parent = node;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function updateAllParentPointers(node, visitorKeys) {
|
|
92
|
+
_SimpleTraverser.SimpleTraverser.traverse(node, {
|
|
93
|
+
enter(node, parent) {
|
|
94
|
+
node.parent = parent;
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
leave() {},
|
|
98
|
+
|
|
99
|
+
visitorKeys
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function nodeWith(node, overrideProps, visitorKeys) {
|
|
104
|
+
const willBeUnchanged = Object.entries(overrideProps).every(([key, value]) => {
|
|
105
|
+
const node_ = node;
|
|
106
|
+
|
|
107
|
+
if (Array.isArray(value)) {
|
|
108
|
+
return Array.isArray(node_[key]) ? (0, _astArrayMutationHelpers.arrayIsEqual)(node_[key], value) : false;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return node_[key] === value;
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
if (willBeUnchanged) {
|
|
115
|
+
return node;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const newNode = { ...node,
|
|
119
|
+
...overrideProps
|
|
120
|
+
};
|
|
121
|
+
setParentPointersInDirectChildren(newNode, visitorKeys);
|
|
122
|
+
return newNode;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function shallowCloneNode(node, visitorKeys) {
|
|
126
|
+
const newNode = { ...node
|
|
127
|
+
};
|
|
128
|
+
setParentPointersInDirectChildren(newNode, visitorKeys);
|
|
129
|
+
return newNode;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function deepCloneNode(node, visitorKeys) {
|
|
133
|
+
const clone = JSON.parse(JSON.stringify(node, (key, value) => {
|
|
134
|
+
if (key === 'parent') {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return value;
|
|
139
|
+
}));
|
|
140
|
+
updateAllParentPointers(clone, visitorKeys);
|
|
141
|
+
return clone;
|
|
142
|
+
}
|