flow-parser 0.318.0 → 0.320.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.
Files changed (103) hide show
  1. package/flow_parser.js +9498 -9488
  2. package/oxidized/FlowParser.js +249 -0
  3. package/oxidized/FlowParser.js.flow +457 -0
  4. package/oxidized/FlowParserDeserializer.js +209 -0
  5. package/oxidized/FlowParserDeserializer.js.flow +323 -0
  6. package/oxidized/FlowParserNodeDeserializers.js +1781 -0
  7. package/oxidized/FlowParserNodeDeserializers.js.flow +18 -0
  8. package/oxidized/FlowParserWASM.js +1 -0
  9. package/oxidized/FlowParserWASM.js.flow +119 -0
  10. package/oxidized/HermesAST.js.flow +57 -0
  11. package/oxidized/HermesParserDecodeUTF8String.js +45 -0
  12. package/oxidized/HermesParserDecodeUTF8String.js.flow +65 -0
  13. package/oxidized/ParserOptions.js +8 -0
  14. package/oxidized/ParserOptions.js.flow +55 -0
  15. package/oxidized/babel/TransformESTreeToBabel.js +1063 -0
  16. package/oxidized/babel/TransformESTreeToBabel.js.flow +1357 -0
  17. package/oxidized/estree/StripFlowTypes.js +158 -0
  18. package/oxidized/estree/StripFlowTypes.js.flow +158 -0
  19. package/oxidized/estree/StripFlowTypesForBabel.js +191 -0
  20. package/oxidized/estree/StripFlowTypesForBabel.js.flow +238 -0
  21. package/oxidized/estree/TransformComponentSyntax.js +764 -0
  22. package/oxidized/estree/TransformComponentSyntax.js.flow +882 -0
  23. package/oxidized/estree/TransformEnumSyntax.js +92 -0
  24. package/oxidized/estree/TransformEnumSyntax.js.flow +125 -0
  25. package/oxidized/estree/TransformMatchSyntax.js +990 -0
  26. package/oxidized/estree/TransformMatchSyntax.js.flow +991 -0
  27. package/oxidized/estree/TransformRecordSyntax.js +283 -0
  28. package/oxidized/estree/TransformRecordSyntax.js.flow +310 -0
  29. package/oxidized/generated/ESTreeVisitorKeys.js +234 -0
  30. package/oxidized/generated/ESTreeVisitorKeys.js.flow +22 -0
  31. package/oxidized/getModuleDocblock.js +87 -0
  32. package/oxidized/getModuleDocblock.js.flow +119 -0
  33. package/oxidized/index.js +220 -0
  34. package/oxidized/index.js.flow +183 -0
  35. package/oxidized/oxidized-src/FlowParser.js +249 -0
  36. package/oxidized/oxidized-src/FlowParserDeserializer.js +209 -0
  37. package/oxidized/oxidized-src/FlowParserNodeDeserializers.js +1781 -0
  38. package/oxidized/oxidized-src/HermesParserDecodeUTF8String.js +45 -0
  39. package/oxidized/oxidized-src/ParserOptions.js +8 -0
  40. package/oxidized/oxidized-src/babel/TransformESTreeToBabel.js +1063 -0
  41. package/oxidized/oxidized-src/estree/StripFlowTypes.js +158 -0
  42. package/oxidized/oxidized-src/estree/StripFlowTypesForBabel.js +191 -0
  43. package/oxidized/oxidized-src/estree/TransformComponentSyntax.js +764 -0
  44. package/oxidized/oxidized-src/estree/TransformEnumSyntax.js +92 -0
  45. package/oxidized/oxidized-src/estree/TransformMatchSyntax.js +990 -0
  46. package/oxidized/oxidized-src/estree/TransformRecordSyntax.js +283 -0
  47. package/oxidized/oxidized-src/generated/ESTreeVisitorKeys.js +234 -0
  48. package/oxidized/oxidized-src/getModuleDocblock.js +87 -0
  49. package/oxidized/oxidized-src/index.js +220 -0
  50. package/oxidized/oxidized-src/transform/SimpleTransform.js +95 -0
  51. package/oxidized/oxidized-src/transform/astArrayMutationHelpers.js +52 -0
  52. package/oxidized/oxidized-src/transform/astNodeMutationHelpers.js +142 -0
  53. package/oxidized/oxidized-src/transform/print/comments/comments.js +245 -0
  54. package/oxidized/oxidized-src/transform/print/comments/prettier/common/util.js +235 -0
  55. package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/comments.js +663 -0
  56. package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/loc.js +30 -0
  57. package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/printer-estree.js +23 -0
  58. package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/utils.js +89 -0
  59. package/oxidized/oxidized-src/transform/print/comments/prettier/main/comments.js +374 -0
  60. package/oxidized/oxidized-src/transform/print/comments/prettier/utils/get-last.js +5 -0
  61. package/oxidized/oxidized-src/transform/print/detachedNodeTypes.js +1 -0
  62. package/oxidized/oxidized-src/transform/print/print.js +68 -0
  63. package/oxidized/oxidized-src/traverse/SimpleTraverser.js +90 -0
  64. package/oxidized/oxidized-src/traverse/getVisitorKeys.js +29 -0
  65. package/oxidized/oxidized-src/utils/Builders.js +181 -0
  66. package/oxidized/oxidized-src/utils/GenID.js +37 -0
  67. package/oxidized/oxidized-src/utils/createSyntaxError.js +15 -0
  68. package/oxidized/oxidized-src/utils/isReservedWord.js +53 -0
  69. package/oxidized/oxidized-src/utils/mutateESTreeASTForPrettier.js +85 -0
  70. package/oxidized/transform/SimpleTransform.js +95 -0
  71. package/oxidized/transform/SimpleTransform.js.flow +168 -0
  72. package/oxidized/transform/astArrayMutationHelpers.js +52 -0
  73. package/oxidized/transform/astArrayMutationHelpers.js.flow +71 -0
  74. package/oxidized/transform/astNodeMutationHelpers.js +142 -0
  75. package/oxidized/transform/astNodeMutationHelpers.js.flow +252 -0
  76. package/oxidized/transform/print/comments/comments.js +245 -0
  77. package/oxidized/transform/print/comments/comments.js.flow +330 -0
  78. package/oxidized/transform/print/comments/prettier/common/util.js +235 -0
  79. package/oxidized/transform/print/comments/prettier/language-js/comments.js +663 -0
  80. package/oxidized/transform/print/comments/prettier/language-js/loc.js +30 -0
  81. package/oxidized/transform/print/comments/prettier/language-js/printer-estree.js +23 -0
  82. package/oxidized/transform/print/comments/prettier/language-js/utils.js +89 -0
  83. package/oxidized/transform/print/comments/prettier/main/comments.js +374 -0
  84. package/oxidized/transform/print/comments/prettier/utils/get-last.js +5 -0
  85. package/oxidized/transform/print/detachedNodeTypes.js +1 -0
  86. package/oxidized/transform/print/detachedNodeTypes.js.flow +24 -0
  87. package/oxidized/transform/print/print.js +68 -0
  88. package/oxidized/transform/print/print.js.flow +87 -0
  89. package/oxidized/traverse/SimpleTraverser.js +90 -0
  90. package/oxidized/traverse/SimpleTraverser.js.flow +133 -0
  91. package/oxidized/traverse/getVisitorKeys.js +29 -0
  92. package/oxidized/traverse/getVisitorKeys.js.flow +36 -0
  93. package/oxidized/utils/Builders.js +181 -0
  94. package/oxidized/utils/Builders.js.flow +218 -0
  95. package/oxidized/utils/GenID.js +37 -0
  96. package/oxidized/utils/GenID.js.flow +39 -0
  97. package/oxidized/utils/createSyntaxError.js +15 -0
  98. package/oxidized/utils/createSyntaxError.js.flow +24 -0
  99. package/oxidized/utils/isReservedWord.js +53 -0
  100. package/oxidized/utils/isReservedWord.js.flow +57 -0
  101. package/oxidized/utils/mutateESTreeASTForPrettier.js +85 -0
  102. package/oxidized/utils/mutateESTreeASTForPrettier.js.flow +130 -0
  103. 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
+ }