webpack 5.85.0 → 5.85.1
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.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +8 -10
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +12 -12
- package/lib/javascript/BasicEvaluatedExpression.js +6 -5
- package/lib/javascript/JavascriptParser.js +23 -23
- package/package.json +1 -1
- package/types.d.ts +10 -7
@@ -212,7 +212,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
212
212
|
.for(harmonySpecifierTag)
|
213
213
|
.tap(
|
214
214
|
"HarmonyImportDependencyParserPlugin",
|
215
|
-
(expression, members, membersOptionals,
|
215
|
+
(expression, members, membersOptionals, memberRanges) => {
|
216
216
|
const settings = /** @type {HarmonySettings} */ (
|
217
217
|
parser.currentTagData
|
218
218
|
);
|
@@ -220,10 +220,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
220
220
|
members,
|
221
221
|
membersOptionals
|
222
222
|
);
|
223
|
-
const
|
223
|
+
const ranges = memberRanges.slice(
|
224
224
|
0,
|
225
|
-
|
226
|
-
(members.length - nonOptionalMembers.length)
|
225
|
+
memberRanges.length - (members.length - nonOptionalMembers.length)
|
227
226
|
);
|
228
227
|
const expr =
|
229
228
|
nonOptionalMembers !== members
|
@@ -241,7 +240,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
241
240
|
expr.range,
|
242
241
|
exportPresenceMode,
|
243
242
|
settings.assertions,
|
244
|
-
|
243
|
+
ranges
|
245
244
|
);
|
246
245
|
dep.referencedPropertiesInDestructuring =
|
247
246
|
parser.destructuringAssignmentPropertiesFor(expr);
|
@@ -256,7 +255,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
256
255
|
.for(harmonySpecifierTag)
|
257
256
|
.tap(
|
258
257
|
"HarmonyImportDependencyParserPlugin",
|
259
|
-
(expression, members, membersOptionals,
|
258
|
+
(expression, members, membersOptionals, memberRanges) => {
|
260
259
|
const { arguments: args, callee } = expression;
|
261
260
|
const settings = /** @type {HarmonySettings} */ (
|
262
261
|
parser.currentTagData
|
@@ -265,10 +264,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
265
264
|
members,
|
266
265
|
membersOptionals
|
267
266
|
);
|
268
|
-
const
|
267
|
+
const ranges = memberRanges.slice(
|
269
268
|
0,
|
270
|
-
|
271
|
-
(members.length - nonOptionalMembers.length)
|
269
|
+
memberRanges.length - (members.length - nonOptionalMembers.length)
|
272
270
|
);
|
273
271
|
const expr =
|
274
272
|
nonOptionalMembers !== members
|
@@ -286,7 +284,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|
286
284
|
expr.range,
|
287
285
|
exportPresenceMode,
|
288
286
|
settings.assertions,
|
289
|
-
|
287
|
+
ranges
|
290
288
|
);
|
291
289
|
dep.directImport = members.length === 0;
|
292
290
|
dep.call = true;
|
@@ -43,7 +43,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
43
43
|
* @param {Range} range range
|
44
44
|
* @param {TODO} exportPresenceMode export presence mode
|
45
45
|
* @param {Assertions=} assertions assertions
|
46
|
-
* @param {
|
46
|
+
* @param {Range[]=} idRanges ranges for members of ids; the two arrays are right-aligned
|
47
47
|
*/
|
48
48
|
constructor(
|
49
49
|
request,
|
@@ -53,13 +53,13 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
53
53
|
range,
|
54
54
|
exportPresenceMode,
|
55
55
|
assertions,
|
56
|
-
|
56
|
+
idRanges // TODO webpack 6 make this non-optional. It must always be set to properly trim ids.
|
57
57
|
) {
|
58
58
|
super(request, sourceOrder, assertions);
|
59
59
|
this.ids = ids;
|
60
60
|
this.name = name;
|
61
61
|
this.range = range;
|
62
|
-
this.
|
62
|
+
this.idRanges = idRanges;
|
63
63
|
this.exportPresenceMode = exportPresenceMode;
|
64
64
|
this.namespaceObjectAsContext = false;
|
65
65
|
this.call = undefined;
|
@@ -261,7 +261,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
261
261
|
write(this.ids);
|
262
262
|
write(this.name);
|
263
263
|
write(this.range);
|
264
|
-
write(this.
|
264
|
+
write(this.idRanges);
|
265
265
|
write(this.exportPresenceMode);
|
266
266
|
write(this.namespaceObjectAsContext);
|
267
267
|
write(this.call);
|
@@ -281,7 +281,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|
281
281
|
this.ids = read();
|
282
282
|
this.name = read();
|
283
283
|
this.range = read();
|
284
|
-
this.
|
284
|
+
this.idRanges = read();
|
285
285
|
this.exportPresenceMode = read();
|
286
286
|
this.namespaceObjectAsContext = read();
|
287
287
|
this.call = read();
|
@@ -320,15 +320,15 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
|
|
320
320
|
|
321
321
|
let [rangeStart, rangeEnd] = dep.range;
|
322
322
|
if (trimmedIds.length !== ids.length) {
|
323
|
-
// The array returned from dep.
|
323
|
+
// The array returned from dep.idRanges is right-aligned with the array returned from dep.getIds.
|
324
324
|
// Meaning, the two arrays may not always have the same number of elements, but the last element of
|
325
|
-
// dep.
|
326
|
-
// Use this to find the correct range
|
325
|
+
// dep.idRanges corresponds to [the expression fragment to the left of] the last element of dep.getIds.
|
326
|
+
// Use this to find the correct replacement range based on the number of ids that were trimmed.
|
327
327
|
const idx =
|
328
|
-
dep.
|
328
|
+
dep.idRanges === undefined
|
329
329
|
? -1 /* trigger failure case below */
|
330
|
-
: dep.
|
331
|
-
if (idx < 0 || idx >= dep.
|
330
|
+
: dep.idRanges.length + (trimmedIds.length - ids.length);
|
331
|
+
if (idx < 0 || idx >= dep.idRanges.length) {
|
332
332
|
// cspell:ignore minifiers
|
333
333
|
// Should not happen but we can't throw an error here because of backward compatibility with
|
334
334
|
// external plugins in wp5. Instead, we just disable trimming for now. This may break some minifiers.
|
@@ -336,7 +336,7 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
|
|
336
336
|
// TODO webpack 6 remove the "trimmedIds = ids" above and uncomment the following line instead.
|
337
337
|
// throw new Error("Missing range starts data for id replacement trimming.");
|
338
338
|
} else {
|
339
|
-
rangeEnd = dep.
|
339
|
+
[rangeStart, rangeEnd] = dep.idRanges[idx];
|
340
340
|
}
|
341
341
|
}
|
342
342
|
|
@@ -6,6 +6,7 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
/** @typedef {import("estree").Node} EsTreeNode */
|
9
|
+
/** @typedef {import("./JavascriptParser").Range} Range */
|
9
10
|
/** @typedef {import("./JavascriptParser").VariableInfoInterface} VariableInfoInterface */
|
10
11
|
|
11
12
|
const TypeUnknown = 0;
|
@@ -70,8 +71,8 @@ class BasicEvaluatedExpression {
|
|
70
71
|
this.getMembers = undefined;
|
71
72
|
/** @type {() => boolean[]} */
|
72
73
|
this.getMembersOptionals = undefined;
|
73
|
-
/** @type {() =>
|
74
|
-
this.
|
74
|
+
/** @type {() => Range[]} */
|
75
|
+
this.getMemberRanges = undefined;
|
75
76
|
/** @type {EsTreeNode} */
|
76
77
|
this.expression = undefined;
|
77
78
|
}
|
@@ -386,7 +387,7 @@ class BasicEvaluatedExpression {
|
|
386
387
|
* @param {string | VariableInfoInterface} rootInfo root info
|
387
388
|
* @param {() => string[]} getMembers members
|
388
389
|
* @param {() => boolean[]=} getMembersOptionals optional members
|
389
|
-
* @param {() =>
|
390
|
+
* @param {() => Range[]=} getMemberRanges ranges of progressively increasing sub-expressions
|
390
391
|
* @returns {this} this
|
391
392
|
*/
|
392
393
|
setIdentifier(
|
@@ -394,14 +395,14 @@ class BasicEvaluatedExpression {
|
|
394
395
|
rootInfo,
|
395
396
|
getMembers,
|
396
397
|
getMembersOptionals,
|
397
|
-
|
398
|
+
getMemberRanges
|
398
399
|
) {
|
399
400
|
this.type = TypeIdentifier;
|
400
401
|
this.identifier = identifier;
|
401
402
|
this.rootInfo = rootInfo;
|
402
403
|
this.getMembers = getMembers;
|
403
404
|
this.getMembersOptionals = getMembersOptionals;
|
404
|
-
this.
|
405
|
+
this.getMemberRanges = getMemberRanges;
|
405
406
|
this.sideEffects = true;
|
406
407
|
return this;
|
407
408
|
}
|
@@ -91,7 +91,7 @@ const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
|
|
91
91
|
/** @typedef {import("../Parser").ParserState} ParserState */
|
92
92
|
/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
|
93
93
|
/** @typedef {{declaredScope: ScopeInfo, freeName: string | true, tagInfo: TagInfo | undefined}} VariableInfoInterface */
|
94
|
-
/** @typedef {{ name: string | VariableInfo, rootInfo: string | VariableInfo, getMembers: () => string[], getMembersOptionals: () => boolean[],
|
94
|
+
/** @typedef {{ name: string | VariableInfo, rootInfo: string | VariableInfo, getMembers: () => string[], getMembersOptionals: () => boolean[], getMemberRanges: () => Range[] }} GetInfoResult */
|
95
95
|
|
96
96
|
const EMPTY_ARRAY = [];
|
97
97
|
const ALLOWED_MEMBER_TYPES_CALL_EXPRESSION = 0b01;
|
@@ -350,14 +350,14 @@ class JavascriptParser extends Parser {
|
|
350
350
|
/** @type {HookMap<SyncBailHook<[BaseCallExpression], boolean | void>>} */
|
351
351
|
call: new HookMap(() => new SyncBailHook(["expression"])),
|
352
352
|
/** Something like "a.b()" */
|
353
|
-
/** @type {HookMap<SyncBailHook<[CallExpression, string[], boolean[],
|
353
|
+
/** @type {HookMap<SyncBailHook<[CallExpression, string[], boolean[], Range[]], boolean | void>>} */
|
354
354
|
callMemberChain: new HookMap(
|
355
355
|
() =>
|
356
356
|
new SyncBailHook([
|
357
357
|
"expression",
|
358
358
|
"members",
|
359
359
|
"membersOptionals",
|
360
|
-
"
|
360
|
+
"memberRanges"
|
361
361
|
])
|
362
362
|
),
|
363
363
|
/** Something like "a.b().c.d" */
|
@@ -390,14 +390,14 @@ class JavascriptParser extends Parser {
|
|
390
390
|
binaryExpression: new SyncBailHook(["binaryExpression"]),
|
391
391
|
/** @type {HookMap<SyncBailHook<[Expression], boolean | void>>} */
|
392
392
|
expression: new HookMap(() => new SyncBailHook(["expression"])),
|
393
|
-
/** @type {HookMap<SyncBailHook<[Expression, string[], boolean[],
|
393
|
+
/** @type {HookMap<SyncBailHook<[Expression, string[], boolean[], Range[]], boolean | void>>} */
|
394
394
|
expressionMemberChain: new HookMap(
|
395
395
|
() =>
|
396
396
|
new SyncBailHook([
|
397
397
|
"expression",
|
398
398
|
"members",
|
399
399
|
"membersOptionals",
|
400
|
-
"
|
400
|
+
"memberRanges"
|
401
401
|
])
|
402
402
|
),
|
403
403
|
/** @type {HookMap<SyncBailHook<[Expression, string[]], boolean | void>>} */
|
@@ -1163,7 +1163,7 @@ class JavascriptParser extends Parser {
|
|
1163
1163
|
info.rootInfo,
|
1164
1164
|
info.getMembers,
|
1165
1165
|
info.getMembersOptionals,
|
1166
|
-
info.
|
1166
|
+
info.getMemberRanges
|
1167
1167
|
)
|
1168
1168
|
.setRange(expr.range);
|
1169
1169
|
}
|
@@ -1184,7 +1184,7 @@ class JavascriptParser extends Parser {
|
|
1184
1184
|
rootInfo: info,
|
1185
1185
|
getMembers: () => [],
|
1186
1186
|
getMembersOptionals: () => [],
|
1187
|
-
|
1187
|
+
getMemberRanges: () => []
|
1188
1188
|
};
|
1189
1189
|
}
|
1190
1190
|
});
|
@@ -1199,7 +1199,7 @@ class JavascriptParser extends Parser {
|
|
1199
1199
|
rootInfo: info,
|
1200
1200
|
getMembers: () => [],
|
1201
1201
|
getMembersOptionals: () => [],
|
1202
|
-
|
1202
|
+
getMemberRanges: () => []
|
1203
1203
|
};
|
1204
1204
|
}
|
1205
1205
|
});
|
@@ -3264,7 +3264,7 @@ class JavascriptParser extends Parser {
|
|
3264
3264
|
callee.getMembersOptionals
|
3265
3265
|
? callee.getMembersOptionals()
|
3266
3266
|
: callee.getMembers().map(() => false),
|
3267
|
-
callee.
|
3267
|
+
callee.getMemberRanges ? callee.getMemberRanges() : []
|
3268
3268
|
);
|
3269
3269
|
if (result1 === true) return;
|
3270
3270
|
const result2 = this.callHooksForInfo(
|
@@ -3308,14 +3308,14 @@ class JavascriptParser extends Parser {
|
|
3308
3308
|
if (result1 === true) return;
|
3309
3309
|
const members = exprInfo.getMembers();
|
3310
3310
|
const membersOptionals = exprInfo.getMembersOptionals();
|
3311
|
-
const
|
3311
|
+
const memberRanges = exprInfo.getMemberRanges();
|
3312
3312
|
const result2 = this.callHooksForInfo(
|
3313
3313
|
this.hooks.expressionMemberChain,
|
3314
3314
|
exprInfo.rootInfo,
|
3315
3315
|
expression,
|
3316
3316
|
members,
|
3317
3317
|
membersOptionals,
|
3318
|
-
|
3318
|
+
memberRanges
|
3319
3319
|
);
|
3320
3320
|
if (result2 === true) return;
|
3321
3321
|
this.walkMemberExpressionWithExpressionName(
|
@@ -4271,23 +4271,23 @@ class JavascriptParser extends Parser {
|
|
4271
4271
|
|
4272
4272
|
/**
|
4273
4273
|
* @param {MemberExpression} expression a member expression
|
4274
|
-
* @returns {{ members: string[], object: Expression | Super, membersOptionals: boolean[],
|
4274
|
+
* @returns {{ members: string[], object: Expression | Super, membersOptionals: boolean[], memberRanges: Range[] }} member names (reverse order) and remaining object
|
4275
4275
|
*/
|
4276
4276
|
extractMemberExpressionChain(expression) {
|
4277
4277
|
/** @type {AnyNode} */
|
4278
4278
|
let expr = expression;
|
4279
4279
|
const members = [];
|
4280
4280
|
const membersOptionals = [];
|
4281
|
-
const
|
4281
|
+
const memberRanges = [];
|
4282
4282
|
while (expr.type === "MemberExpression") {
|
4283
4283
|
if (expr.computed) {
|
4284
4284
|
if (expr.property.type !== "Literal") break;
|
4285
|
-
members.push(`${expr.property.value}`);
|
4286
|
-
|
4285
|
+
members.push(`${expr.property.value}`); // the literal
|
4286
|
+
memberRanges.push(expr.object.range); // the range of the expression fragment before the literal
|
4287
4287
|
} else {
|
4288
4288
|
if (expr.property.type !== "Identifier") break;
|
4289
|
-
members.push(expr.property.name);
|
4290
|
-
|
4289
|
+
members.push(expr.property.name); // the identifier
|
4290
|
+
memberRanges.push(expr.object.range); // the range of the expression fragment before the identifier
|
4291
4291
|
}
|
4292
4292
|
membersOptionals.push(expr.optional);
|
4293
4293
|
expr = expr.object;
|
@@ -4296,7 +4296,7 @@ class JavascriptParser extends Parser {
|
|
4296
4296
|
return {
|
4297
4297
|
members,
|
4298
4298
|
membersOptionals,
|
4299
|
-
|
4299
|
+
memberRanges,
|
4300
4300
|
object: expr
|
4301
4301
|
};
|
4302
4302
|
}
|
@@ -4319,8 +4319,8 @@ class JavascriptParser extends Parser {
|
|
4319
4319
|
return { info, name };
|
4320
4320
|
}
|
4321
4321
|
|
4322
|
-
/** @typedef {{ type: "call", call: CallExpression, calleeName: string, rootInfo: string | VariableInfo, getCalleeMembers: () => string[], name: string, getMembers: () => string[], getMembersOptionals: () => boolean[],
|
4323
|
-
/** @typedef {{ type: "expression", rootInfo: string | VariableInfo, name: string, getMembers: () => string[], getMembersOptionals: () => boolean[],
|
4322
|
+
/** @typedef {{ type: "call", call: CallExpression, calleeName: string, rootInfo: string | VariableInfo, getCalleeMembers: () => string[], name: string, getMembers: () => string[], getMembersOptionals: () => boolean[], getMemberRanges: () => Range[]}} CallExpressionInfo */
|
4323
|
+
/** @typedef {{ type: "expression", rootInfo: string | VariableInfo, name: string, getMembers: () => string[], getMembersOptionals: () => boolean[], getMemberRanges: () => Range[]}} ExpressionExpressionInfo */
|
4324
4324
|
|
4325
4325
|
/**
|
4326
4326
|
* @param {MemberExpression} expression a member expression
|
@@ -4328,7 +4328,7 @@ class JavascriptParser extends Parser {
|
|
4328
4328
|
* @returns {CallExpressionInfo | ExpressionExpressionInfo | undefined} expression info
|
4329
4329
|
*/
|
4330
4330
|
getMemberExpressionInfo(expression, allowedTypes) {
|
4331
|
-
const { object, members, membersOptionals,
|
4331
|
+
const { object, members, membersOptionals, memberRanges } =
|
4332
4332
|
this.extractMemberExpressionChain(expression);
|
4333
4333
|
switch (object.type) {
|
4334
4334
|
case "CallExpression": {
|
@@ -4355,7 +4355,7 @@ class JavascriptParser extends Parser {
|
|
4355
4355
|
name: objectAndMembersToName(`${calleeName}()`, members),
|
4356
4356
|
getMembers: memoize(() => members.reverse()),
|
4357
4357
|
getMembersOptionals: memoize(() => membersOptionals.reverse()),
|
4358
|
-
|
4358
|
+
getMemberRanges: memoize(() => memberRanges.reverse())
|
4359
4359
|
};
|
4360
4360
|
}
|
4361
4361
|
case "Identifier":
|
@@ -4375,7 +4375,7 @@ class JavascriptParser extends Parser {
|
|
4375
4375
|
rootInfo,
|
4376
4376
|
getMembers: memoize(() => members.reverse()),
|
4377
4377
|
getMembersOptionals: memoize(() => membersOptionals.reverse()),
|
4378
|
-
|
4378
|
+
getMemberRanges: memoize(() => memberRanges.reverse())
|
4379
4379
|
};
|
4380
4380
|
}
|
4381
4381
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "webpack",
|
3
|
-
"version": "5.85.
|
3
|
+
"version": "5.85.1",
|
4
4
|
"author": "Tobias Koppers @sokra",
|
5
5
|
"description": "Packs ECMAScript/CommonJs/AMD modules for the browser. Allows you to split your codebase into multiple bundles, which can be loaded on demand. Supports loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.",
|
6
6
|
"license": "MIT",
|
package/types.d.ts
CHANGED
@@ -507,7 +507,7 @@ declare abstract class BasicEvaluatedExpression {
|
|
507
507
|
rootInfo: string | VariableInfoInterface;
|
508
508
|
getMembers: () => string[];
|
509
509
|
getMembersOptionals: () => boolean[];
|
510
|
-
|
510
|
+
getMemberRanges: () => [number, number][];
|
511
511
|
expression: NodeEstreeIndex;
|
512
512
|
isUnknown(): boolean;
|
513
513
|
isNull(): boolean;
|
@@ -593,7 +593,7 @@ declare abstract class BasicEvaluatedExpression {
|
|
593
593
|
rootInfo: string | VariableInfoInterface,
|
594
594
|
getMembers: () => string[],
|
595
595
|
getMembersOptionals?: () => boolean[],
|
596
|
-
|
596
|
+
getMemberRanges?: () => [number, number][]
|
597
597
|
): BasicEvaluatedExpression;
|
598
598
|
|
599
599
|
/**
|
@@ -788,7 +788,7 @@ declare interface CallExpressionInfo {
|
|
788
788
|
name: string;
|
789
789
|
getMembers: () => string[];
|
790
790
|
getMembersOptionals: () => boolean[];
|
791
|
-
|
791
|
+
getMemberRanges: () => [number, number][];
|
792
792
|
}
|
793
793
|
declare interface CallbackAsyncQueue<T> {
|
794
794
|
(err?: null | WebpackError, result?: T): any;
|
@@ -3991,7 +3991,7 @@ declare interface ExpressionExpressionInfo {
|
|
3991
3991
|
name: string;
|
3992
3992
|
getMembers: () => string[];
|
3993
3993
|
getMembersOptionals: () => boolean[];
|
3994
|
-
|
3994
|
+
getMemberRanges: () => [number, number][];
|
3995
3995
|
}
|
3996
3996
|
declare interface ExtensionAliasOption {
|
3997
3997
|
alias: string | string[];
|
@@ -5344,7 +5344,7 @@ declare class JavascriptParser extends Parser {
|
|
5344
5344
|
call: HookMap<SyncBailHook<[BaseCallExpression], boolean | void>>;
|
5345
5345
|
callMemberChain: HookMap<
|
5346
5346
|
SyncBailHook<
|
5347
|
-
[CallExpression, string[], boolean[], number[]],
|
5347
|
+
[CallExpression, string[], boolean[], [number, number][]],
|
5348
5348
|
boolean | void
|
5349
5349
|
>
|
5350
5350
|
>;
|
@@ -5365,7 +5365,10 @@ declare class JavascriptParser extends Parser {
|
|
5365
5365
|
binaryExpression: SyncBailHook<[BinaryExpression], boolean | void>;
|
5366
5366
|
expression: HookMap<SyncBailHook<[Expression], boolean | void>>;
|
5367
5367
|
expressionMemberChain: HookMap<
|
5368
|
-
SyncBailHook<
|
5368
|
+
SyncBailHook<
|
5369
|
+
[Expression, string[], boolean[], [number, number][]],
|
5370
|
+
boolean | void
|
5371
|
+
>
|
5369
5372
|
>;
|
5370
5373
|
unhandledExpressionMemberChain: HookMap<
|
5371
5374
|
SyncBailHook<[Expression, string[]], boolean | void>
|
@@ -5954,7 +5957,7 @@ declare class JavascriptParser extends Parser {
|
|
5954
5957
|
| YieldExpression
|
5955
5958
|
| Super;
|
5956
5959
|
membersOptionals: boolean[];
|
5957
|
-
|
5960
|
+
memberRanges: [number, number][];
|
5958
5961
|
};
|
5959
5962
|
getFreeInfoFromVariable(varName: string): {
|
5960
5963
|
name: string;
|