hermes-transform 0.8.0 → 0.10.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/ESLINT_LICENCE +19 -0
- package/PRETTIER_LICENCE +7 -0
- package/dist/detachedNode.js +100 -42
- package/dist/detachedNode.js.flow +116 -41
- package/dist/generated/TransformCloneSignatures.js.flow +18 -0
- package/dist/generated/TransformModifySignatures.js.flow +1127 -0
- package/dist/generated/TransformReplaceSignatures.js.flow +15 -1
- package/dist/generated/node-types.js +852 -883
- package/dist/generated/node-types.js.flow +1187 -1217
- package/dist/generated/special-case-node-types/Comment.js +36 -0
- package/dist/generated/special-case-node-types/Comment.js.flow +36 -0
- package/dist/generated/special-case-node-types/DeclareExportDeclaration.js +55 -0
- package/dist/generated/special-case-node-types/DeclareExportDeclaration.js.flow +97 -0
- package/dist/generated/special-case-node-types/ExportNamedDeclaration.js +42 -0
- package/dist/generated/special-case-node-types/ExportNamedDeclaration.js.flow +75 -0
- package/dist/generated/special-case-node-types/Literal.js +97 -0
- package/dist/generated/special-case-node-types/Literal.js.flow +139 -0
- package/dist/generated/special-case-node-types/ObjectTypeProperty.js +73 -0
- package/dist/generated/special-case-node-types/ObjectTypeProperty.js.flow +107 -0
- package/dist/generated/special-case-node-types/Property.js +136 -0
- package/dist/generated/special-case-node-types/Property.js.flow +237 -0
- package/dist/generated/special-case-node-types/misc.js +119 -0
- package/dist/generated/special-case-node-types/misc.js.flow +205 -0
- package/dist/generated/special-case-node-types.js +42 -180
- package/dist/generated/special-case-node-types.js.flow +7 -258
- package/dist/index.js +19 -3
- package/dist/index.js.flow +6 -2
- package/dist/transform/TransformContext.js +34 -11
- package/dist/transform/TransformContext.js.flow +90 -33
- package/dist/transform/comments/comments.js +34 -5
- package/dist/transform/comments/comments.js.flow +39 -4
- package/dist/transform/comments/prettier/main/comments.js +1 -1
- package/dist/transform/comments/prettier/main/comments.js.flow +2 -1
- package/dist/transform/mutations/InsertStatement.js +4 -3
- package/dist/transform/mutations/InsertStatement.js.flow +4 -3
- package/dist/transform/mutations/RemoveComment.js +3 -3
- package/dist/transform/mutations/RemoveComment.js.flow +3 -5
- package/dist/transform/mutations/RemoveNode.js +2 -2
- package/dist/transform/mutations/RemoveNode.js.flow +2 -2
- package/dist/transform/mutations/RemoveStatement.js +2 -2
- package/dist/transform/mutations/RemoveStatement.js.flow +2 -2
- package/dist/transform/mutations/ReplaceNode.js +10 -7
- package/dist/transform/mutations/ReplaceNode.js.flow +7 -5
- package/dist/transform/mutations/ReplaceStatementWithMany.js +2 -2
- package/dist/transform/mutations/ReplaceStatementWithMany.js.flow +7 -4
- package/dist/transform/mutations/utils/getStatementParent.js +3 -2
- package/dist/transform/mutations/utils/getStatementParent.js.flow +5 -2
- package/dist/transform/parse.js +55 -0
- package/dist/transform/parse.js.flow +55 -0
- package/dist/transform/print.js +160 -0
- package/dist/transform/print.js.flow +176 -0
- package/dist/transform/transform.js +6 -67
- package/dist/transform/transform.js.flow +6 -69
- package/dist/transform/{getTransformedAST.js → transformAST.js} +7 -16
- package/dist/transform/{getTransformedAST.js.flow → transformAST.js.flow} +7 -14
- package/dist/traverse/NodeEventGenerator.js.flow +1 -1
- package/dist/traverse/traverse.js +36 -35
- package/dist/traverse/traverse.js.flow +46 -27
- package/package.json +10 -5
- package/dist/getVisitorKeys.js +0 -33
- package/dist/getVisitorKeys.js.flow +0 -31
- package/dist/transform/mutations/utils/arrayUtils.js +0 -43
- package/dist/transform/mutations/utils/arrayUtils.js.flow +0 -50
- package/dist/traverse/SimpleTraverser.js +0 -118
- package/dist/traverse/SimpleTraverser.js.flow +0 -112
|
@@ -14,261 +14,10 @@ The list of exported functions here must be kept in sync with the `NODES_WITH_SP
|
|
|
14
14
|
list in `scripts/genTransformNodeTypes` to ensure there's no duplicates
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
BooleanLiteral as BooleanLiteralType,
|
|
25
|
-
NumericLiteral as NumericLiteralType,
|
|
26
|
-
NullLiteral as NullLiteralType,
|
|
27
|
-
StringLiteral as StringLiteralType,
|
|
28
|
-
LineComment as LineCommentType,
|
|
29
|
-
BlockComment as BlockCommentType,
|
|
30
|
-
} from 'hermes-estree';
|
|
31
|
-
import type {DetachedNode} from '../detachedNode';
|
|
32
|
-
|
|
33
|
-
import {
|
|
34
|
-
detachedProps,
|
|
35
|
-
setParentPointersInDirectChildren,
|
|
36
|
-
} from '../detachedNode';
|
|
37
|
-
|
|
38
|
-
// hermes adds an `id` prop which is always null, and it adds an `expression`
|
|
39
|
-
// boolean which is true when the body isn't a BlockStatement.
|
|
40
|
-
// No need to make consumers set these
|
|
41
|
-
export type ArrowFunctionExpressionProps = {
|
|
42
|
-
+params: $ReadOnlyArray<
|
|
43
|
-
DetachedNode<ArrowFunctionExpressionType['params'][number]>,
|
|
44
|
-
>,
|
|
45
|
-
+body: DetachedNode<ArrowFunctionExpressionType['body']>,
|
|
46
|
-
+typeParameters?: ?DetachedNode<
|
|
47
|
-
ArrowFunctionExpressionType['typeParameters'],
|
|
48
|
-
>,
|
|
49
|
-
+returnType?: ?DetachedNode<ArrowFunctionExpressionType['returnType']>,
|
|
50
|
-
+predicate?: ?DetachedNode<ArrowFunctionExpressionType['predicate']>,
|
|
51
|
-
+async: ArrowFunctionExpressionType['async'],
|
|
52
|
-
};
|
|
53
|
-
export function ArrowFunctionExpression({
|
|
54
|
-
parent,
|
|
55
|
-
...props
|
|
56
|
-
}: {
|
|
57
|
-
...$ReadOnly<ArrowFunctionExpressionProps>,
|
|
58
|
-
+parent?: ESNode,
|
|
59
|
-
}): DetachedNode<ArrowFunctionExpressionType> {
|
|
60
|
-
const node = detachedProps<ArrowFunctionExpressionType>(parent, {
|
|
61
|
-
type: 'ArrowFunctionExpression',
|
|
62
|
-
id: null,
|
|
63
|
-
// $FlowExpectedError[incompatible-use]
|
|
64
|
-
expression: props.body.type !== 'BlockStatement',
|
|
65
|
-
...props,
|
|
66
|
-
});
|
|
67
|
-
setParentPointersInDirectChildren(node);
|
|
68
|
-
return node;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// pattern/flags are on a subobject in the estree spec, but are flat on the hermes types
|
|
72
|
-
// also the value is supposed to be a RegExp instance
|
|
73
|
-
export type RegExpLiteralProps = {
|
|
74
|
-
+pattern: RegExpLiteralType['regex']['pattern'],
|
|
75
|
-
+flags: RegExpLiteralType['regex']['flags'],
|
|
76
|
-
};
|
|
77
|
-
export function RegExpLiteral({
|
|
78
|
-
pattern,
|
|
79
|
-
flags,
|
|
80
|
-
parent,
|
|
81
|
-
}: {
|
|
82
|
-
...$ReadOnly<RegExpLiteralProps>,
|
|
83
|
-
+parent?: ESNode,
|
|
84
|
-
}): DetachedNode<RegExpLiteralType> {
|
|
85
|
-
const value = new RegExp(pattern, flags);
|
|
86
|
-
return detachedProps<RegExpLiteralType>(parent, {
|
|
87
|
-
type: 'Literal',
|
|
88
|
-
value,
|
|
89
|
-
raw: value.toString(),
|
|
90
|
-
regex: {
|
|
91
|
-
pattern,
|
|
92
|
-
flags,
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// raw/cooked are on a subobject in the estree spec, but are flat on the hermes types
|
|
98
|
-
export type TemplateElementProps = {
|
|
99
|
-
+tail: TemplateElementType['tail'],
|
|
100
|
-
+cooked: TemplateElementType['value']['cooked'],
|
|
101
|
-
+raw: TemplateElementType['value']['raw'],
|
|
102
|
-
};
|
|
103
|
-
export function TemplateElement({
|
|
104
|
-
tail,
|
|
105
|
-
parent,
|
|
106
|
-
...value
|
|
107
|
-
}: {
|
|
108
|
-
...$ReadOnly<TemplateElementProps>,
|
|
109
|
-
+parent?: ESNode,
|
|
110
|
-
}): DetachedNode<TemplateElementType> {
|
|
111
|
-
return detachedProps<TemplateElementType>(parent, {
|
|
112
|
-
type: 'TemplateElement',
|
|
113
|
-
tail,
|
|
114
|
-
value,
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Identifier has a bunch of stuff that usually you don't want to provide - so we have
|
|
119
|
-
// this manual def to allow us to default some values
|
|
120
|
-
export type IdentifierProps = {
|
|
121
|
-
+name: IdentifierType['name'],
|
|
122
|
-
+typeAnnotation?: ?DetachedNode<IdentifierType['typeAnnotation']>,
|
|
123
|
-
+optional?: IdentifierType['optional'],
|
|
124
|
-
};
|
|
125
|
-
export function Identifier({
|
|
126
|
-
parent,
|
|
127
|
-
optional = false,
|
|
128
|
-
typeAnnotation = null,
|
|
129
|
-
...props
|
|
130
|
-
}: {
|
|
131
|
-
...$ReadOnly<IdentifierProps>,
|
|
132
|
-
+parent?: ESNode,
|
|
133
|
-
}): DetachedNode<IdentifierType> {
|
|
134
|
-
const node = detachedProps<IdentifierType>(parent, {
|
|
135
|
-
type: 'Identifier',
|
|
136
|
-
optional,
|
|
137
|
-
typeAnnotation,
|
|
138
|
-
...props,
|
|
139
|
-
});
|
|
140
|
-
setParentPointersInDirectChildren(node);
|
|
141
|
-
return node;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
//
|
|
145
|
-
// Literals require a "raw" which is added by the estree transform, not hermes.
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
export type BigIntLiteralProps = {
|
|
149
|
-
+value: $FlowFixMe /* bigint | null */,
|
|
150
|
-
/**
|
|
151
|
-
* Only set this if you want to use a source-code representation like 1_1n, etc.
|
|
152
|
-
* By default "raw" will just be the exact number you've given.
|
|
153
|
-
*/
|
|
154
|
-
+raw?: NumericLiteralType['raw'],
|
|
155
|
-
};
|
|
156
|
-
export function BigIntLiteral({
|
|
157
|
-
parent,
|
|
158
|
-
...props
|
|
159
|
-
}: {
|
|
160
|
-
...$ReadOnly<BigIntLiteralProps>,
|
|
161
|
-
+parent?: ESNode,
|
|
162
|
-
}): DetachedNode<BigIntLiteralType> {
|
|
163
|
-
const node = detachedProps<BigIntLiteralType>(parent, {
|
|
164
|
-
type: 'Literal',
|
|
165
|
-
...props,
|
|
166
|
-
raw: props.raw ?? `${props.value}n`,
|
|
167
|
-
bigint: `${props.value}`,
|
|
168
|
-
});
|
|
169
|
-
setParentPointersInDirectChildren(node);
|
|
170
|
-
return node;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
export type BooleanLiteralProps = {
|
|
174
|
-
+value: BooleanLiteralType['value'],
|
|
175
|
-
};
|
|
176
|
-
export function BooleanLiteral({
|
|
177
|
-
parent,
|
|
178
|
-
value,
|
|
179
|
-
}: {
|
|
180
|
-
...$ReadOnly<BooleanLiteralProps>,
|
|
181
|
-
+parent?: ESNode,
|
|
182
|
-
}): DetachedNode<BooleanLiteralType> {
|
|
183
|
-
return detachedProps<BooleanLiteralType>(parent, {
|
|
184
|
-
type: 'Literal',
|
|
185
|
-
raw: value ? 'true' : 'false',
|
|
186
|
-
value,
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
export type NumericLiteralProps = {
|
|
191
|
-
+value: NumericLiteralType['value'],
|
|
192
|
-
/**
|
|
193
|
-
* Only set this if you want to use a source-code representation like 1e100, 0x11, 1_1, etc.
|
|
194
|
-
* By default "raw" will just be the exact number you've given.
|
|
195
|
-
*/
|
|
196
|
-
+raw?: NumericLiteralType['raw'],
|
|
197
|
-
};
|
|
198
|
-
export function NumericLiteral({
|
|
199
|
-
parent,
|
|
200
|
-
...props
|
|
201
|
-
}: {
|
|
202
|
-
...$ReadOnly<NumericLiteralProps>,
|
|
203
|
-
+parent?: ESNode,
|
|
204
|
-
}): DetachedNode<NumericLiteralType> {
|
|
205
|
-
return detachedProps<NumericLiteralType>(parent, {
|
|
206
|
-
type: 'Literal',
|
|
207
|
-
...props,
|
|
208
|
-
raw: props.raw ?? `${props.value}`,
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
export type NullLiteralProps = {};
|
|
213
|
-
export function NullLiteral({
|
|
214
|
-
parent,
|
|
215
|
-
}: {
|
|
216
|
-
+parent?: ESNode,
|
|
217
|
-
} = {}): DetachedNode<NullLiteralType> {
|
|
218
|
-
return detachedProps<NullLiteralType>(parent, {
|
|
219
|
-
type: 'Literal',
|
|
220
|
-
value: null,
|
|
221
|
-
raw: 'null',
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
export type StringLiteralProps = {
|
|
226
|
-
+value: StringLiteralType['value'],
|
|
227
|
-
+raw?: StringLiteralType['raw'],
|
|
228
|
-
};
|
|
229
|
-
export function StringLiteral({
|
|
230
|
-
parent,
|
|
231
|
-
raw: rawIn,
|
|
232
|
-
value,
|
|
233
|
-
}: {
|
|
234
|
-
...$ReadOnly<StringLiteralProps>,
|
|
235
|
-
+parent?: ESNode,
|
|
236
|
-
}): DetachedNode<StringLiteralType> {
|
|
237
|
-
const hasSingleQuote = value.includes('"');
|
|
238
|
-
const hasDoubleQuote = value.includes("'");
|
|
239
|
-
let raw = rawIn;
|
|
240
|
-
if (raw == null) {
|
|
241
|
-
if (hasSingleQuote && hasDoubleQuote) {
|
|
242
|
-
raw = `'${value.replace(/'/g, "\\'")}'`;
|
|
243
|
-
} else if (hasSingleQuote) {
|
|
244
|
-
raw = `"${value}"`;
|
|
245
|
-
} else {
|
|
246
|
-
raw = `'${value}'`;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
return detachedProps<StringLiteralType>(parent, {
|
|
250
|
-
type: 'Literal',
|
|
251
|
-
raw,
|
|
252
|
-
value,
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
export type LineCommentProps = {+value: string};
|
|
257
|
-
export function LineComment({value}: LineCommentProps): LineCommentType {
|
|
258
|
-
// $FlowExpectedError[prop-missing]
|
|
259
|
-
// $FlowExpectedError[incompatible-return]
|
|
260
|
-
return detachedProps<LineCommentType>(undefined, {
|
|
261
|
-
type: 'Line',
|
|
262
|
-
value,
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
export type BlockCommentProps = {+value: string};
|
|
267
|
-
export function BlockComment({value}: BlockCommentProps): BlockCommentType {
|
|
268
|
-
// $FlowExpectedError[prop-missing]
|
|
269
|
-
// $FlowExpectedError[incompatible-return]
|
|
270
|
-
return detachedProps<BlockCommentType>(undefined, {
|
|
271
|
-
type: 'Block',
|
|
272
|
-
value,
|
|
273
|
-
});
|
|
274
|
-
}
|
|
17
|
+
export * from './special-case-node-types/Comment';
|
|
18
|
+
export * from './special-case-node-types/DeclareExportDeclaration';
|
|
19
|
+
export * from './special-case-node-types/ExportNamedDeclaration';
|
|
20
|
+
export * from './special-case-node-types/Literal';
|
|
21
|
+
export * from './special-case-node-types/ObjectTypeProperty';
|
|
22
|
+
export * from './special-case-node-types/misc';
|
|
23
|
+
export * from './special-case-node-types/Property';
|
package/dist/index.js
CHANGED
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
Object.defineProperty(exports, "__esModule", {
|
|
13
13
|
value: true
|
|
14
14
|
});
|
|
15
|
-
exports.traverseWithContext = exports.traverse = exports.transform = exports.t = exports.SimpleTraverser = void 0;
|
|
15
|
+
exports.traverseWithContext = exports.traverse = exports.transform = exports.t = exports.print = exports.parse = exports.cloneJSDocCommentsToNewNode = exports.asDetachedNode = exports.SimpleTraverser = void 0;
|
|
16
16
|
|
|
17
|
-
var
|
|
17
|
+
var _hermesParser = require("hermes-parser");
|
|
18
18
|
|
|
19
|
-
exports.SimpleTraverser =
|
|
19
|
+
exports.SimpleTraverser = _hermesParser.SimpleTraverser;
|
|
20
20
|
|
|
21
21
|
var _traverse = require("./traverse/traverse");
|
|
22
22
|
|
|
@@ -27,10 +27,26 @@ var _transform = require("./transform/transform");
|
|
|
27
27
|
|
|
28
28
|
exports.transform = _transform.transform;
|
|
29
29
|
|
|
30
|
+
var _parse = require("./transform/parse");
|
|
31
|
+
|
|
32
|
+
exports.parse = _parse.parse;
|
|
33
|
+
|
|
34
|
+
var _print = require("./transform/print");
|
|
35
|
+
|
|
36
|
+
exports.print = _print.print;
|
|
37
|
+
|
|
30
38
|
var _t = _interopRequireWildcard(require("./generated/node-types"));
|
|
31
39
|
|
|
32
40
|
exports.t = _t;
|
|
33
41
|
|
|
42
|
+
var _detachedNode = require("./detachedNode");
|
|
43
|
+
|
|
44
|
+
exports.asDetachedNode = _detachedNode.asDetachedNode;
|
|
45
|
+
|
|
46
|
+
var _comments = require("./transform/comments/comments");
|
|
47
|
+
|
|
48
|
+
exports.cloneJSDocCommentsToNewNode = _comments.cloneJSDocCommentsToNewNode;
|
|
49
|
+
|
|
34
50
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
35
51
|
|
|
36
52
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
package/dist/index.js.flow
CHANGED
|
@@ -13,9 +13,13 @@
|
|
|
13
13
|
export type {TraversalContextBase, Visitor} from './traverse/traverse';
|
|
14
14
|
export type {TransformVisitor} from './transform/transform';
|
|
15
15
|
export type {TransformContext} from './transform/TransformContext';
|
|
16
|
-
export type {DetachedNode} from './detachedNode';
|
|
16
|
+
export type {DetachedNode, MaybeDetachedNode} from './detachedNode';
|
|
17
17
|
|
|
18
|
-
export {SimpleTraverser} from '
|
|
18
|
+
export {SimpleTraverser} from 'hermes-parser';
|
|
19
19
|
export {traverse, traverseWithContext} from './traverse/traverse';
|
|
20
20
|
export {transform} from './transform/transform';
|
|
21
|
+
export {parse} from './transform/parse';
|
|
22
|
+
export {print} from './transform/print';
|
|
21
23
|
export * as t from './generated/node-types';
|
|
24
|
+
export {asDetachedNode} from './detachedNode';
|
|
25
|
+
export {cloneJSDocCommentsToNewNode} from './transform/comments/comments';
|
|
@@ -52,10 +52,9 @@ function getTransformContext() {
|
|
|
52
52
|
return null;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
return (0, _detachedNode.shallowCloneNode)(node);
|
|
55
|
+
return (0, _detachedNode.shallowCloneNode)(node, {});
|
|
56
56
|
},
|
|
57
|
-
|
|
58
|
-
shallowCloneNodeWithOverrides: (node, newProps) => {
|
|
57
|
+
shallowCloneNodeWithOverrides: (node, newProps = {}) => {
|
|
59
58
|
if (node == null) {
|
|
60
59
|
return null;
|
|
61
60
|
}
|
|
@@ -67,17 +66,23 @@ function getTransformContext() {
|
|
|
67
66
|
return null;
|
|
68
67
|
}
|
|
69
68
|
|
|
70
|
-
return nodes.map(node =>
|
|
69
|
+
return nodes.map(node => {
|
|
70
|
+
if (node == null) {
|
|
71
|
+
// $FlowExpectedError[incompatible-return]
|
|
72
|
+
return node;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return (0, _detachedNode.shallowCloneNode)(node, {});
|
|
76
|
+
});
|
|
71
77
|
},
|
|
72
78
|
deepCloneNode: node => {
|
|
73
79
|
if (node == null) {
|
|
74
80
|
return null;
|
|
75
81
|
}
|
|
76
82
|
|
|
77
|
-
return (0, _detachedNode.deepCloneNode)(node);
|
|
83
|
+
return (0, _detachedNode.deepCloneNode)(node, {});
|
|
78
84
|
},
|
|
79
|
-
|
|
80
|
-
deepCloneNodeWithOverrides: (node, newProps) => {
|
|
85
|
+
deepCloneNodeWithOverrides: (node, newProps = {}) => {
|
|
81
86
|
if (node == null) {
|
|
82
87
|
return null;
|
|
83
88
|
}
|
|
@@ -130,10 +135,14 @@ function getTransformContext() {
|
|
|
130
135
|
};
|
|
131
136
|
const insertAPIs = {
|
|
132
137
|
insertAfterStatement: (target, nodesToInsert) => {
|
|
133
|
-
pushMutation((0, _InsertStatement.createInsertStatementMutation)('after', target, toArray(nodesToInsert))
|
|
138
|
+
pushMutation((0, _InsertStatement.createInsertStatementMutation)('after', target, toArray(nodesToInsert).map(n => (0, _detachedNode.asDetachedNode)(n, {
|
|
139
|
+
useDeepClone: true
|
|
140
|
+
}))));
|
|
134
141
|
},
|
|
135
142
|
insertBeforeStatement: (target, nodesToInsert) => {
|
|
136
|
-
pushMutation((0, _InsertStatement.createInsertStatementMutation)('before', target, toArray(nodesToInsert))
|
|
143
|
+
pushMutation((0, _InsertStatement.createInsertStatementMutation)('before', target, toArray(nodesToInsert).map(n => (0, _detachedNode.asDetachedNode)(n, {
|
|
144
|
+
useDeepClone: true
|
|
145
|
+
}))));
|
|
137
146
|
}
|
|
138
147
|
};
|
|
139
148
|
const removeAPIs = {
|
|
@@ -146,10 +155,23 @@ function getTransformContext() {
|
|
|
146
155
|
};
|
|
147
156
|
const replaceAPIs = {
|
|
148
157
|
replaceNode: (target, nodeToReplaceWith, options) => {
|
|
149
|
-
pushMutation((0, _ReplaceNode.createReplaceNodeMutation)(target, nodeToReplaceWith, options));
|
|
158
|
+
pushMutation((0, _ReplaceNode.createReplaceNodeMutation)(target, (0, _detachedNode.asDetachedNode)(nodeToReplaceWith), options));
|
|
150
159
|
},
|
|
151
160
|
replaceStatementWithMany: (target, nodesToReplaceWith, options) => {
|
|
152
|
-
pushMutation((0, _ReplaceStatementWithMany.createReplaceStatementWithManyMutation)(target, nodesToReplaceWith, options));
|
|
161
|
+
pushMutation((0, _ReplaceStatementWithMany.createReplaceStatementWithManyMutation)(target, nodesToReplaceWith.map(n => (0, _detachedNode.asDetachedNode)(n)), options));
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
const modifyAPIs = {
|
|
165
|
+
modifyNodeInPlace: (node, newProps = {}, options) => {
|
|
166
|
+
if (node == null) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const cloned = (0, _detachedNode.shallowCloneNode)(node, newProps, {
|
|
171
|
+
preserveLocation: true
|
|
172
|
+
}); // $FlowExpectedError[incompatible-call]
|
|
173
|
+
|
|
174
|
+
replaceAPIs.replaceNode(node, cloned, options);
|
|
153
175
|
}
|
|
154
176
|
};
|
|
155
177
|
return {
|
|
@@ -163,6 +185,7 @@ function getTransformContext() {
|
|
|
163
185
|
...cloneAPIs,
|
|
164
186
|
...commentAPIs,
|
|
165
187
|
...insertAPIs,
|
|
188
|
+
...modifyAPIs,
|
|
166
189
|
...removeAPIs,
|
|
167
190
|
...replaceAPIs
|
|
168
191
|
};
|