packtory 0.0.88 → 0.0.90
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/bundle-emitter/registry/package-metadata-fetcher.d.ts.map +1 -1
- package/bundle-emitter/registry/package-metadata-fetcher.js +1 -2
- package/bundle-emitter/registry/package-metadata-fetcher.js.map +1 -1
- package/dead-code-eliminator/class-purity.js +17 -1
- package/dead-code-eliminator/class-purity.js.map +1 -1
- package/dead-code-eliminator/pure-expression.js +56 -0
- package/dead-code-eliminator/pure-expression.js.map +1 -1
- package/dead-code-eliminator/statement-classifiers.js +31 -4
- package/dead-code-eliminator/statement-classifiers.js.map +1 -1
- package/dead-code-eliminator/syntax-kind-sets.js +2 -2
- package/dead-code-eliminator/syntax-kind-sets.js.map +1 -1
- package/linker/replacement-lookup.js +148 -64
- package/linker/replacement-lookup.js.map +1 -1
- package/linker/substitute-bundles.js +70 -1
- package/linker/substitute-bundles.js.map +1 -1
- package/package.json +2 -1
- package/packtory/packtory-pack.js +15 -5
- package/packtory/packtory-pack.js.map +1 -1
- package/packtory/packtory-results.d.ts +8 -0
- package/packtory/packtory-results.d.ts.map +1 -1
- package/packtory/packtory-results.js +1 -0
- package/packtory/packtory-results.js.map +1 -1
- package/sbom.cdx.json +4 -4
- package/vendor-materializer/vendor-materializer.d.ts +20 -2
- package/vendor-materializer/vendor-materializer.d.ts.map +1 -1
- package/vendor-materializer/vendor-materializer.js +36 -17
- package/vendor-materializer/vendor-materializer.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-metadata-fetcher.d.ts","sourceRoot":"","sources":["../../../../../source/bundle-emitter/registry/package-metadata-fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,OAAO,EAIH,KAAK,eAAe,EACvB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"package-metadata-fetcher.d.ts","sourceRoot":"","sources":["../../../../../source/bundle-emitter/registry/package-metadata-fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,OAAO,EAIH,KAAK,eAAe,EACvB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAOvF,MAAM,MAAM,qBAAqB,GAAG;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC,CAAC;AAiGF,KAAK,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,QAAQ,GAAG;IACnB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpE,QAAQ,CAAC,IAAI,EAAE,OAAO,SAAS,CAAC,IAAI,CAAC;CACxC,CAAC;AAiGF,wBAAsB,yBAAyB,CAC3C,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAC7C,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAWvC;AAED,wBAAsB,iCAAiC,CACnD,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAC7C,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAyBxC;AAgBD,wBAAsB,0BAA0B,CAC5C,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAC7C,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAoB5B;AAED,wBAAsB,mBAAmB,CACrC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAC7C,OAAO,CAAC,MAAM,CAAC,CAWjB"}
|
|
@@ -6,7 +6,6 @@ import { parseAbbreviatedPackageResponse, parseFullPackageResponse } from "./reg
|
|
|
6
6
|
import { assertTarballIntegrity } from "./tarball-integrity.js";
|
|
7
7
|
import { assertTarballOriginMatchesRegistry } from "./validate-tarball-host.js";
|
|
8
8
|
const notFoundStatusCode = 404;
|
|
9
|
-
const forbiddenStatusCode = 403;
|
|
10
9
|
const abbreviatedResponseAcceptHeader = 'application/vnd.npm.install-v1+json';
|
|
11
10
|
const maxDownloadedTarballBytes = 268_435_456;
|
|
12
11
|
function isRecord(value) {
|
|
@@ -22,7 +21,7 @@ function assertContentLengthWithinDownloadLimit(response) {
|
|
|
22
21
|
}
|
|
23
22
|
function isMissingPackageError(error) {
|
|
24
23
|
const statusCode = isRecord(error) ? error.statusCode : undefined;
|
|
25
|
-
return statusCode === notFoundStatusCode
|
|
24
|
+
return statusCode === notFoundStatusCode;
|
|
26
25
|
}
|
|
27
26
|
function parseTimestamp(timestamp) {
|
|
28
27
|
const parsed = new Date(timestamp);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-metadata-fetcher.js","sourceRoot":"","sources":["../../../../../source/bundle-emitter/registry/package-metadata-fetcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACH,0BAA0B,EAC1B,8BAA8B,EAGjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,+BAA+B,EAC/B,wBAAwB,EAG3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAyB,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAEhF,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM
|
|
1
|
+
{"version":3,"file":"package-metadata-fetcher.js","sourceRoot":"","sources":["../../../../../source/bundle-emitter/registry/package-metadata-fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,16 +16,32 @@ function memberHasImpureStaticInit(member, settings) {
|
|
|
16
16
|
const initializer = member.getInitializer();
|
|
17
17
|
return initializer !== undefined && !isPureExpression(initializer, settings);
|
|
18
18
|
}
|
|
19
|
+
function memberHasImpureComputedName(member, settings) {
|
|
20
|
+
if (!TsMorphNode.isMethodDeclaration(member) &&
|
|
21
|
+
!TsMorphNode.isPropertyDeclaration(member) &&
|
|
22
|
+
!TsMorphNode.isGetAccessorDeclaration(member) &&
|
|
23
|
+
!TsMorphNode.isSetAccessorDeclaration(member)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
const name = member.getNameNode();
|
|
27
|
+
return TsMorphNode.isComputedPropertyName(name) && !isPureExpression(name.getExpression(), settings);
|
|
28
|
+
}
|
|
19
29
|
function classMemberIsImpure(member, settings) {
|
|
20
30
|
if (TsMorphNode.isClassStaticBlockDeclaration(member)) {
|
|
21
31
|
return true;
|
|
22
32
|
}
|
|
23
|
-
return memberHasDecorators(member) ||
|
|
33
|
+
return memberHasDecorators(member) ||
|
|
34
|
+
memberHasImpureComputedName(member, settings) ||
|
|
35
|
+
memberHasImpureStaticInit(member, settings);
|
|
24
36
|
}
|
|
25
37
|
export function hasClassImpurity(classDeclaration, settings) {
|
|
26
38
|
if (classDeclaration.getDecorators().length > 0) {
|
|
27
39
|
return true;
|
|
28
40
|
}
|
|
41
|
+
const extendsExpression = classDeclaration.getExtends()?.getExpression();
|
|
42
|
+
if (extendsExpression !== undefined && !isPureExpression(extendsExpression, settings)) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
29
45
|
return classDeclaration.getMembers().some(function (member) {
|
|
30
46
|
return classMemberIsImpure(member, settings);
|
|
31
47
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-purity.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/class-purity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,WAAW,EAAyB,MAAM,UAAU,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,SAAS,mBAAmB,CAAC,MAAmB;IAC5C,IACI,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC;QACvC,WAAW,CAAC,qBAAqB,CAAC,MAAM,CAAC;QACzC,WAAW,CAAC,wBAAwB,CAAC,MAAM,CAAC;QAC5C,WAAW,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAC9C,CAAC;QACC,OAAO,MAAM,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAmB,EAAE,QAAiD;IACrG,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IAC5C,OAAO,WAAW,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAmB,EAAE,QAAiD;IAC/F,IAAI,WAAW,CAAC,6BAA6B,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,mBAAmB,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"class-purity.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/class-purity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,WAAW,EAAyB,MAAM,UAAU,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,SAAS,mBAAmB,CAAC,MAAmB;IAC5C,IACI,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC;QACvC,WAAW,CAAC,qBAAqB,CAAC,MAAM,CAAC;QACzC,WAAW,CAAC,wBAAwB,CAAC,MAAM,CAAC;QAC5C,WAAW,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAC9C,CAAC;QACC,OAAO,MAAM,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAmB,EAAE,QAAiD;IACrG,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IAC5C,OAAO,WAAW,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAmB,EAAE,QAAiD;IACvG,IACI,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC;QACxC,CAAC,WAAW,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAC1C,CAAC,WAAW,CAAC,wBAAwB,CAAC,MAAM,CAAC;QAC7C,CAAC,WAAW,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAC/C,CAAC;QACC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;AACzG,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAmB,EAAE,QAAiD;IAC/F,IAAI,WAAW,CAAC,6BAA6B,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,mBAAmB,CAAC,MAAM,CAAC;QAC9B,2BAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC7C,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,gBAAkC,EAClC,QAAiD;IAEjD,IAAI,gBAAgB,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,CAAC;IACzE,IAAI,iBAAiB,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,gBAAgB,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,MAAM;QACtD,OAAO,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -3,6 +3,18 @@ import { unwrapExpression } from "./expression-unwrapping.js";
|
|
|
3
3
|
import { arePureCallArguments, resolveImportedExpressionOrigin } from "./imported-expression-origin.js";
|
|
4
4
|
import { externalCallIsPure } from "./liveness/external-purity.js";
|
|
5
5
|
import { allowedBinaryOperators, allowedPrefixUnaryOperators, inherentlyPurePropertyKinds, pureLeafKinds } from "./syntax-kind-sets.js";
|
|
6
|
+
const alwaysAvailableDeclarationKinds = new Set([
|
|
7
|
+
SyntaxKind.FunctionDeclaration,
|
|
8
|
+
SyntaxKind.ImportClause,
|
|
9
|
+
SyntaxKind.ImportSpecifier,
|
|
10
|
+
SyntaxKind.NamespaceImport,
|
|
11
|
+
SyntaxKind.Parameter
|
|
12
|
+
]);
|
|
13
|
+
const orderedDeclarationKinds = new Set([
|
|
14
|
+
SyntaxKind.ClassDeclaration,
|
|
15
|
+
SyntaxKind.EnumDeclaration,
|
|
16
|
+
SyntaxKind.VariableDeclaration
|
|
17
|
+
]);
|
|
6
18
|
function isPureArrayElement(element, recurse) {
|
|
7
19
|
if (TsMorphNode.isOmittedExpression(element)) {
|
|
8
20
|
return true;
|
|
@@ -12,7 +24,23 @@ function isPureArrayElement(element, recurse) {
|
|
|
12
24
|
}
|
|
13
25
|
return recurse(element);
|
|
14
26
|
}
|
|
27
|
+
function computedPropertyNameExpression(property) {
|
|
28
|
+
if (TsMorphNode.isPropertyAssignment(property) ||
|
|
29
|
+
TsMorphNode.isMethodDeclaration(property) ||
|
|
30
|
+
TsMorphNode.isGetAccessorDeclaration(property) ||
|
|
31
|
+
TsMorphNode.isSetAccessorDeclaration(property)) {
|
|
32
|
+
const name = property.getNameNode();
|
|
33
|
+
if (TsMorphNode.isComputedPropertyName(name)) {
|
|
34
|
+
return name.getExpression();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
15
39
|
function isPurePropertyAssignment(property, recurse) {
|
|
40
|
+
const computedNameExpression = computedPropertyNameExpression(property);
|
|
41
|
+
if (computedNameExpression !== undefined && !recurse(computedNameExpression)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
16
44
|
if (TsMorphNode.isPropertyAssignment(property)) {
|
|
17
45
|
return recurse(property.getInitializerOrThrow());
|
|
18
46
|
}
|
|
@@ -21,6 +49,31 @@ function isPurePropertyAssignment(property, recurse) {
|
|
|
21
49
|
}
|
|
22
50
|
return inherentlyPurePropertyKinds.has(property.getKind());
|
|
23
51
|
}
|
|
52
|
+
function declarationIsAvailableBeforeRead(declaration, expression) {
|
|
53
|
+
return Math.sign(expression.getStart() - declaration.getEnd()) === 1;
|
|
54
|
+
}
|
|
55
|
+
function declarationMakesIdentifierReadPure(declaration, expression) {
|
|
56
|
+
const kind = declaration.getKind();
|
|
57
|
+
if (alwaysAvailableDeclarationKinds.has(kind)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
if (orderedDeclarationKinds.has(kind)) {
|
|
61
|
+
return declarationIsAvailableBeforeRead(declaration, expression);
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
function identifierDeclarations(expression) {
|
|
66
|
+
const symbol = expression.getSymbol();
|
|
67
|
+
return symbol?.getDeclarations() ?? [];
|
|
68
|
+
}
|
|
69
|
+
function isPureIdentifierRead(expression) {
|
|
70
|
+
if (expression.getText() === 'undefined') {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
return identifierDeclarations(expression).some(function (declaration) {
|
|
74
|
+
return declarationMakesIdentifierReadPure(declaration, expression);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
24
77
|
function isPureBuiltinCallExpression(callTarget, expression, recurse) {
|
|
25
78
|
return TsMorphNode.isIdentifier(callTarget) && callTarget.getText() === 'Symbol'
|
|
26
79
|
? arePureCallArguments(expression.getArguments(), recurse)
|
|
@@ -123,6 +176,9 @@ function expressionPurityRuleFor(kind) {
|
|
|
123
176
|
}
|
|
124
177
|
export function isPureExpression(expression, settings) {
|
|
125
178
|
const unwrapped = unwrapExpression(expression);
|
|
179
|
+
if (TsMorphNode.isIdentifier(unwrapped)) {
|
|
180
|
+
return isPureIdentifierRead(unwrapped);
|
|
181
|
+
}
|
|
126
182
|
const recurse = function (candidate) {
|
|
127
183
|
return isPureExpression(candidate, settings);
|
|
128
184
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pure-expression.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/pure-expression.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,IAAI,IAAI,WAAW,EACnB,UAAU,
|
|
1
|
+
{"version":3,"file":"pure-expression.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/pure-expression.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,IAAI,IAAI,WAAW,EACnB,UAAU,EAMb,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EACH,oBAAoB,EACpB,+BAA+B,EAElC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACH,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,aAAa,EAChB,MAAM,uBAAuB,CAAC;AAQ/B,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAa;IACxD,UAAU,CAAC,mBAAmB;IAC9B,UAAU,CAAC,YAAY;IACvB,UAAU,CAAC,eAAe;IAC1B,UAAU,CAAC,eAAe;IAC1B,UAAU,CAAC,SAAS;CACvB,CAAC,CAAC;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAa;IAChD,UAAU,CAAC,gBAAgB;IAC3B,UAAU,CAAC,eAAe;IAC1B,UAAU,CAAC,mBAAmB;CACjC,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,OAAmB,EAAE,OAAgC;IAC7E,IAAI,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,8BAA8B,CAAC,QAAqB;IACzD,IACI,WAAW,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAC1C,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QACzC,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC;QAC9C,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAChD,CAAC;QACC,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAqB,EAAE,OAAgC;IACrF,MAAM,sBAAsB,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACxE,IAAI,sBAAsB,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,WAAW,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,gCAAgC,CAAC,WAA4B,EAAE,UAAsB;IAC1F,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,kCAAkC,CAAC,WAA4B,EAAE,UAAsB;IAC5F,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;IACnC,IAAI,+BAA+B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,gCAAgC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAsB;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;IACtC,OAAO,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAsB;IAChD,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,WAAW,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,WAAW;QAChE,OAAO,kCAAkC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,2BAA2B,CAChC,UAAsB,EACtB,UAA0B,EAC1B,OAAgC;IAEhC,OAAO,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,QAAQ;QAC5E,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC;QAC1D,CAAC,CAAC,KAAK,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAsB;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,2BAA2B,CAChC,UAA0C,EAC1C,OAAgC;IAEhC,OAAO,iBAAiB,CAAC,UAAU,CAAC,IAAI,oBAAoB,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,oBAAoB,CACzB,UAA0B,EAC1B,OAAgC,EAChC,QAAiD;IAEjD,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IAChE,OAAO,CACH,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC;QAChD,2BAA2B,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC;QAC5D,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC;QACvC,+BAA+B,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,SAAS,CAC/E,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAC7B,qBAAiC,EACjC,QAAiD;IAEjD,OAAO,WAAW,CAAC,YAAY,CAAC,qBAAqB,CAAC;QAClD,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;AACvF,CAAC;AAED,SAAS,mBAAmB,CACxB,UAAyB,EACzB,OAAgC,EAChC,QAAiD;IAEjD,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3E,MAAM,sBAAsB,GAAG,wBAAwB,CAAC,qBAAqB,EAAE,QAAQ,CAAC;QACpF,oBAAoB,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,sBAAsB,CAAC;AACtF,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAsB,EAAE,OAAgC;IACtF,OAAO,UAAU;SACZ,aAAa,CAAC,UAAU,CAAC,kBAAkB,CAAC;SAC5C,gBAAgB,EAAE;SAClB,KAAK,CAAC,UAAU,IAAI;QACjB,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACX,CAAC;AAED,SAAS,4BAA4B,CAAC,UAAsB,EAAE,OAAgC;IAC1F,OAAO,UAAU;SACZ,aAAa,CAAC,UAAU,CAAC,sBAAsB,CAAC;SAChD,WAAW,EAAE;SACb,KAAK,CAAC,UAAU,OAAO;QACpB,OAAO,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACX,CAAC;AAED,SAAS,6BAA6B,CAAC,UAAsB,EAAE,OAAgC;IAC3F,OAAO,UAAU;SACZ,aAAa,CAAC,UAAU,CAAC,uBAAuB,CAAC;SACjD,aAAa,EAAE;SACf,KAAK,CAAC,UAAU,QAAQ;QACrB,OAAO,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACX,CAAC;AAED,SAAS,2BAA2B,CAAC,UAAsB,EAAE,OAAgC;IACzF,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACzE,OAAO,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAsB,EAAE,OAAgC;IACpF,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACrE,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,oBAAoB,CACzB,UAAsB,EACtB,OAAgC,EAChC,QAAiD;IAEjD,OAAO,oBAAoB,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,mBAAmB,CACxB,UAAsB,EACtB,OAAgC,EAChC,QAAiD;IAEjD,OAAO,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,6BAA6B,CAAC,IAAgB;IACnD,IAAI,IAAI,KAAK,UAAU,CAAC,kBAAkB,EAAE,CAAC;QACzC,OAAO,wBAAwB,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,CAAC,sBAAsB,EAAE,CAAC;QAC7C,OAAO,4BAA4B,CAAC;IACxC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,CAAC,uBAAuB,EAAE,CAAC;QAC9C,OAAO,6BAA6B,CAAC;IACzC,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAgB;IAC5C,IAAI,IAAI,KAAK,UAAU,CAAC,qBAAqB,EAAE,CAAC;QAC5C,OAAO,2BAA2B,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACvC,OAAO,sBAAsB,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,oBAAoB,CAAC;IAChC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,CAAC,aAAa,EAAE,CAAC;QACpC,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAgB;IAC7C,OAAO,6BAA6B,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAsB,EAAE,QAAiD;IACtG,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,OAAO,GAA4B,UAAU,SAAS;QACxD,OAAO,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC;AAClF,CAAC"}
|
|
@@ -17,6 +17,24 @@ function classifyClassDeclaration(statement, settings) {
|
|
|
17
17
|
}
|
|
18
18
|
return undefined;
|
|
19
19
|
}
|
|
20
|
+
function classifyEnumDeclaration(statement, settings) {
|
|
21
|
+
if (statement.isConstEnum()) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
for (const member of statement.getMembers()) {
|
|
25
|
+
const initializer = member.getInitializer();
|
|
26
|
+
if (initializer !== undefined && !isPureExpression(initializer, settings)) {
|
|
27
|
+
return 'enum declaration';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
function classifyModuleDeclaration(statement) {
|
|
33
|
+
if (statement.isAmbient()) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
return 'module declaration';
|
|
37
|
+
}
|
|
20
38
|
function classifyVariableStatement(statement, settings) {
|
|
21
39
|
for (const declarator of statement.getDeclarations()) {
|
|
22
40
|
const initializer = declarator.getInitializer();
|
|
@@ -35,6 +53,12 @@ function exportAssignmentClassifier(statement, settings) {
|
|
|
35
53
|
function classDeclarationClassifier(statement, settings) {
|
|
36
54
|
return classifyClassDeclaration(statement.asKindOrThrow(SyntaxKind.ClassDeclaration), settings);
|
|
37
55
|
}
|
|
56
|
+
function enumDeclarationClassifier(statement, settings) {
|
|
57
|
+
return classifyEnumDeclaration(statement.asKindOrThrow(SyntaxKind.EnumDeclaration), settings);
|
|
58
|
+
}
|
|
59
|
+
function moduleDeclarationClassifier(statement) {
|
|
60
|
+
return classifyModuleDeclaration(statement.asKindOrThrow(SyntaxKind.ModuleDeclaration));
|
|
61
|
+
}
|
|
38
62
|
function variableStatementClassifier(statement, settings) {
|
|
39
63
|
return classifyVariableStatement(statement.asKindOrThrow(SyntaxKind.VariableStatement), settings);
|
|
40
64
|
}
|
|
@@ -54,13 +78,16 @@ function executableStatementClassifierFor(kind) {
|
|
|
54
78
|
if (kind === SyntaxKind.ClassDeclaration) {
|
|
55
79
|
return classDeclarationClassifier;
|
|
56
80
|
}
|
|
81
|
+
if (kind === SyntaxKind.EnumDeclaration) {
|
|
82
|
+
return enumDeclarationClassifier;
|
|
83
|
+
}
|
|
84
|
+
if (kind === SyntaxKind.ModuleDeclaration) {
|
|
85
|
+
return moduleDeclarationClassifier;
|
|
86
|
+
}
|
|
57
87
|
if (kind === SyntaxKind.VariableStatement) {
|
|
58
88
|
return variableStatementClassifier;
|
|
59
89
|
}
|
|
60
|
-
|
|
61
|
-
return expressionStatementClassifier;
|
|
62
|
-
}
|
|
63
|
-
return undefined;
|
|
90
|
+
return kind === SyntaxKind.ExpressionStatement ? expressionStatementClassifier : undefined;
|
|
64
91
|
}
|
|
65
92
|
export function statementClassifierFor(kind) {
|
|
66
93
|
return declarationStatementClassifierFor(kind) ?? executableStatementClassifierFor(kind);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statement-classifiers.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/statement-classifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,
|
|
1
|
+
{"version":3,"file":"statement-classifiers.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/statement-classifiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,11 @@ import { SyntaxKind } from 'ts-morph';
|
|
|
2
2
|
function createSyntaxKindSet(...kinds) {
|
|
3
3
|
return new Set(kinds);
|
|
4
4
|
}
|
|
5
|
-
export const pureLeafKinds = createSyntaxKindSet(SyntaxKind.StringLiteral, SyntaxKind.NumericLiteral, SyntaxKind.BigIntLiteral, SyntaxKind.TrueKeyword, SyntaxKind.FalseKeyword, SyntaxKind.NullKeyword, SyntaxKind.RegularExpressionLiteral, SyntaxKind.NoSubstitutionTemplateLiteral, SyntaxKind.
|
|
5
|
+
export const pureLeafKinds = createSyntaxKindSet(SyntaxKind.StringLiteral, SyntaxKind.NumericLiteral, SyntaxKind.BigIntLiteral, SyntaxKind.TrueKeyword, SyntaxKind.FalseKeyword, SyntaxKind.NullKeyword, SyntaxKind.RegularExpressionLiteral, SyntaxKind.NoSubstitutionTemplateLiteral, SyntaxKind.FunctionExpression, SyntaxKind.ArrowFunction, SyntaxKind.ClassExpression);
|
|
6
6
|
export const allowedPrefixUnaryOperators = createSyntaxKindSet(SyntaxKind.MinusToken, SyntaxKind.PlusToken, SyntaxKind.ExclamationToken, SyntaxKind.TildeToken);
|
|
7
7
|
export const allowedBinaryOperators = createSyntaxKindSet(SyntaxKind.PlusToken, SyntaxKind.MinusToken, SyntaxKind.AsteriskToken, SyntaxKind.SlashToken, SyntaxKind.PercentToken, SyntaxKind.AsteriskAsteriskToken, SyntaxKind.AmpersandAmpersandToken, SyntaxKind.BarBarToken, SyntaxKind.QuestionQuestionToken, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken, SyntaxKind.LessThanEqualsToken, SyntaxKind.GreaterThanEqualsToken, SyntaxKind.EqualsEqualsEqualsToken, SyntaxKind.ExclamationEqualsEqualsToken);
|
|
8
8
|
export const inherentlyPurePropertyKinds = createSyntaxKindSet(SyntaxKind.ShorthandPropertyAssignment, SyntaxKind.MethodDeclaration, SyntaxKind.GetAccessor, SyntaxKind.SetAccessor);
|
|
9
|
-
export const pureDeclarationKinds = createSyntaxKindSet(SyntaxKind.FunctionDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.TypeAliasDeclaration, SyntaxKind.
|
|
9
|
+
export const pureDeclarationKinds = createSyntaxKindSet(SyntaxKind.FunctionDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.TypeAliasDeclaration, SyntaxKind.ExportDeclaration, SyntaxKind.EmptyStatement);
|
|
10
10
|
export function describeControlFlowStatementKind(kind) {
|
|
11
11
|
const descriptions = {
|
|
12
12
|
[SyntaxKind.IfStatement]: 'if statement',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntax-kind-sets.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/syntax-kind-sets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,SAAS,mBAAmB,CAAC,GAAG,KAA4B;IACxD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAA4B,mBAAmB,CACrE,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,cAAc,EACzB,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,wBAAwB,EACnC,UAAU,CAAC,6BAA6B,EACxC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"syntax-kind-sets.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/syntax-kind-sets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,SAAS,mBAAmB,CAAC,GAAG,KAA4B;IACxD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAA4B,mBAAmB,CACrE,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,cAAc,EACzB,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,wBAAwB,EACnC,UAAU,CAAC,6BAA6B,EACxC,UAAU,CAAC,kBAAkB,EAC7B,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,eAAe,CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAA4B,mBAAmB,CACnF,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,SAAS,EACpB,UAAU,CAAC,gBAAgB,EAC3B,UAAU,CAAC,UAAU,CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAA4B,mBAAmB,CAC9E,UAAU,CAAC,SAAS,EACpB,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,qBAAqB,EAChC,UAAU,CAAC,uBAAuB,EAClC,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,qBAAqB,EAChC,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,gBAAgB,EAC3B,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,sBAAsB,EACjC,UAAU,CAAC,uBAAuB,EAClC,UAAU,CAAC,4BAA4B,CAC1C,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAA4B,mBAAmB,CACnF,UAAU,CAAC,2BAA2B,EACtC,UAAU,CAAC,iBAAiB,EAC5B,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,WAAW,CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAA4B,mBAAmB,CAC5E,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,oBAAoB,EAC/B,UAAU,CAAC,oBAAoB,EAC/B,UAAU,CAAC,iBAAiB,EAC5B,UAAU,CAAC,cAAc,CAC5B,CAAC;AAEF,MAAM,UAAU,gCAAgC,CAAC,IAAgB;IAC7D,MAAM,YAAY,GAAwC;QACtD,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,cAAc;QACxC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,eAAe;QAC1C,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,kBAAkB;QAC/C,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,kBAAkB;QAC/C,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,iBAAiB;QAC9C,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,oBAAoB;QAC9C,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,kBAAkB;QAChD,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,eAAe;QAC1C,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,iBAAiB;QAC9C,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,mBAAmB;QAClD,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,iBAAiB;KACxC,CAAC;IAEF,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import { isDefined } from 'remeda';
|
|
3
2
|
import { ts as typescript } from 'ts-morph';
|
|
4
3
|
import { declarationCompanionCandidates } from "../common/declaration-companion-paths.js";
|
|
4
|
+
import { bfsClosure } from "../dead-code-eliminator/reachability/bfs-closure.js";
|
|
5
5
|
import { rootSourceFilePaths } from "../package-surface/package-surface-index.js";
|
|
6
6
|
import { getPublicModuleSpecifierForSourcePath } from "../package-surface/public-specifiers.js";
|
|
7
7
|
import { getRoot } from "../package-surface/root-registry.js";
|
|
@@ -14,6 +14,9 @@ export function ownsSourcePath(file, bundle) {
|
|
|
14
14
|
function needsImportReplacement(file) {
|
|
15
15
|
return !file.endsWith('.map');
|
|
16
16
|
}
|
|
17
|
+
function isDefined(value) {
|
|
18
|
+
return value !== undefined;
|
|
19
|
+
}
|
|
17
20
|
function createContentLookup(bundle) {
|
|
18
21
|
const contentBySourcePath = new Map();
|
|
19
22
|
const sourcePathByTargetPath = new Map();
|
|
@@ -23,7 +26,7 @@ function createContentLookup(bundle) {
|
|
|
23
26
|
}
|
|
24
27
|
return { contentBySourcePath, sourcePathByTargetPath };
|
|
25
28
|
}
|
|
26
|
-
function
|
|
29
|
+
function exportDeclaration(statement) {
|
|
27
30
|
if (!typescript.isExportDeclaration(statement)) {
|
|
28
31
|
return undefined;
|
|
29
32
|
}
|
|
@@ -34,111 +37,192 @@ function moduleSpecifierText(statement) {
|
|
|
34
37
|
if (moduleSpecifier === undefined) {
|
|
35
38
|
return undefined;
|
|
36
39
|
}
|
|
37
|
-
|
|
40
|
+
if (!typescript.isStringLiteral(moduleSpecifier) || !moduleSpecifier.text.startsWith('.')) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
return moduleSpecifier.text;
|
|
38
44
|
}
|
|
39
|
-
function
|
|
45
|
+
function exportDeclarations(content) {
|
|
40
46
|
const sourceFile = typescript.createSourceFile(content, content, typescript.ScriptTarget.Latest);
|
|
41
47
|
return sourceFile
|
|
42
48
|
.statements
|
|
43
|
-
.map(
|
|
44
|
-
.filter(isDefined)
|
|
45
|
-
.map(moduleSpecifierText)
|
|
49
|
+
.map(exportDeclaration)
|
|
46
50
|
.filter(isDefined);
|
|
47
51
|
}
|
|
48
52
|
function exportedTargetPath(currentTargetFilePath, specifier) {
|
|
49
|
-
if (!specifier.startsWith('.')) {
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
53
|
return path.posix.normalize(path.posix.join(path.posix.dirname(currentTargetFilePath), specifier));
|
|
53
54
|
}
|
|
54
|
-
function
|
|
55
|
+
function exportedSourceFilePaths(lookup, currentTargetFilePath, specifier) {
|
|
55
56
|
const targetPath = exportedTargetPath(currentTargetFilePath, specifier);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
.filter(isDefined);
|
|
64
|
-
for (const sourcePath of sourcePaths) {
|
|
65
|
-
pending.push(sourcePath);
|
|
57
|
+
const sourceFilePaths = [];
|
|
58
|
+
for (const candidate of [targetPath, ...declarationCompanionCandidates(targetPath)]) {
|
|
59
|
+
for (const [targetFilePath, sourceFilePath] of lookup.sourcePathByTargetPath) {
|
|
60
|
+
if (targetFilePath === candidate) {
|
|
61
|
+
sourceFilePaths.push(sourceFilePath);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
66
64
|
}
|
|
65
|
+
return sourceFilePaths;
|
|
66
|
+
}
|
|
67
|
+
function namedExports(declaration) {
|
|
68
|
+
const { exportClause } = declaration;
|
|
69
|
+
if (exportClause === undefined || !typescript.isNamedExports(exportClause)) {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
return Array.from(exportClause.elements);
|
|
73
|
+
}
|
|
74
|
+
function isExportStar(declaration) {
|
|
75
|
+
return declaration.exportClause === undefined;
|
|
76
|
+
}
|
|
77
|
+
function declarationSourceFilePaths(lookup, currentTargetFilePath, declaration) {
|
|
78
|
+
return exportedSourceFilePaths(lookup, currentTargetFilePath, moduleSpecifierText(declaration) ?? '');
|
|
79
|
+
}
|
|
80
|
+
const pathClosureDependencies = {
|
|
81
|
+
visitedHas(visited, value) {
|
|
82
|
+
return visited.has(value);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
function exportStateValue(value, property) {
|
|
86
|
+
return Reflect.get(new Object(value), property);
|
|
87
|
+
}
|
|
88
|
+
function sourceFilePathForState(state) {
|
|
89
|
+
return state.sourceFilePath;
|
|
90
|
+
}
|
|
91
|
+
const exportClosureDependencies = {
|
|
92
|
+
visitedHas(visited, value) {
|
|
93
|
+
return Array.from(visited).some(function (state) {
|
|
94
|
+
return exportStateValue(state, 'sourceFilePath') === exportStateValue(value, 'sourceFilePath') &&
|
|
95
|
+
exportStateValue(state, 'exportName') === exportStateValue(value, 'exportName');
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
function exportedStateNames(lookup, state) {
|
|
100
|
+
const content = lookup.contentBySourcePath.get(sourceFilePathForState(state));
|
|
101
|
+
if (content === undefined) {
|
|
102
|
+
return Array.from(new Set());
|
|
103
|
+
}
|
|
104
|
+
return exportDeclarations(content.fileDescription.content).flatMap(function (declaration) {
|
|
105
|
+
const sourceFilePaths = declarationSourceFilePaths(lookup, content.fileDescription.targetFilePath, declaration);
|
|
106
|
+
const exportStarStates = sourceFilePaths
|
|
107
|
+
.filter(function () {
|
|
108
|
+
return state.exportName !== 'default' && isExportStar(declaration);
|
|
109
|
+
})
|
|
110
|
+
.map(function (nextSourceFilePath) {
|
|
111
|
+
return { sourceFilePath: nextSourceFilePath, exportName: state.exportName };
|
|
112
|
+
});
|
|
113
|
+
const namedExportStates = namedExports(declaration)
|
|
114
|
+
.filter(function (namedExport) {
|
|
115
|
+
return namedExport.name.text === state.exportName;
|
|
116
|
+
})
|
|
117
|
+
.flatMap(function (namedExport) {
|
|
118
|
+
const sourceExportName = namedExport.propertyName?.text ?? namedExport.name.text;
|
|
119
|
+
return sourceFilePaths.map(function (nextSourceFilePath) {
|
|
120
|
+
return { sourceFilePath: nextSourceFilePath, exportName: sourceExportName };
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
return [...exportStarStates, ...namedExportStates];
|
|
124
|
+
});
|
|
67
125
|
}
|
|
68
|
-
function
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
function
|
|
126
|
+
function publicModuleCanExport(rootSourceFilePathsForModule, lookup, request, exportName) {
|
|
127
|
+
const closure = bfsClosure(rootSourceFilePathsForModule.map(function (sourceFilePath) {
|
|
128
|
+
return { sourceFilePath, exportName };
|
|
129
|
+
}), function (state) {
|
|
130
|
+
return exportedStateNames(lookup, state);
|
|
131
|
+
}, new Set(), { dependencies: exportClosureDependencies, maximumNodeCount: lookup.contentBySourcePath.size });
|
|
132
|
+
return Array.from(closure).some(function (state) {
|
|
133
|
+
return sourceFilePathForState(state) === request.sourceFilePath;
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function publicModuleReachesSourceFile(rootSourceFilePathsForModule, lookup, request) {
|
|
137
|
+
const closure = bfsClosure(rootSourceFilePathsForModule, function (sourceFilePath) {
|
|
72
138
|
const content = lookup.contentBySourcePath.get(sourceFilePath);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
139
|
+
return content === undefined
|
|
140
|
+
? new Array()
|
|
141
|
+
: exportDeclarations(content.fileDescription.content).flatMap(function (declaration) {
|
|
142
|
+
return declarationSourceFilePaths(lookup, content.fileDescription.targetFilePath, declaration);
|
|
143
|
+
});
|
|
144
|
+
}, new Set(), { dependencies: pathClosureDependencies, maximumNodeCount: lookup.contentBySourcePath.size });
|
|
145
|
+
return closure.has(request.sourceFilePath);
|
|
146
|
+
}
|
|
147
|
+
function publicModuleCanSatisfyRequest(rootSourceFilePathsForModule, lookup, request) {
|
|
148
|
+
if (request.requiredExportNames.size === 0 && !request.requiresNamespaceExport) {
|
|
149
|
+
return publicModuleReachesSourceFile(rootSourceFilePathsForModule, lookup, request);
|
|
150
|
+
}
|
|
151
|
+
for (const exportName of request.requiredExportNames) {
|
|
152
|
+
if (!publicModuleCanExport(rootSourceFilePathsForModule, lookup, request, exportName)) {
|
|
153
|
+
return false;
|
|
78
154
|
}
|
|
79
155
|
}
|
|
80
|
-
|
|
81
|
-
|
|
156
|
+
if (!request.requiresNamespaceExport) {
|
|
157
|
+
return true;
|
|
82
158
|
}
|
|
83
|
-
return
|
|
159
|
+
return publicModuleCanExport(rootSourceFilePathsForModule, lookup, request, undefined);
|
|
84
160
|
}
|
|
85
|
-
function
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
}
|
|
161
|
+
function shortestSpecifier(specifiers) {
|
|
162
|
+
const [specifier] = specifiers.toSorted(function (left, right) {
|
|
163
|
+
return left.length - right.length;
|
|
164
|
+
});
|
|
165
|
+
return specifier;
|
|
92
166
|
}
|
|
93
|
-
function getExplicitPublicModuleSpecifierForSourcePath(bundle, surface,
|
|
167
|
+
function getExplicitPublicModuleSpecifierForSourcePath(bundle, surface, request) {
|
|
94
168
|
const lookup = createContentLookup(bundle);
|
|
95
|
-
const
|
|
169
|
+
const specifiers = [];
|
|
96
170
|
const moduleEntries = surface.packageInterface.modules ?? [];
|
|
97
171
|
for (const moduleEntry of moduleEntries) {
|
|
98
172
|
const root = getRoot(bundle, moduleEntry.root);
|
|
99
173
|
const rootPaths = rootSourceFilePaths(root);
|
|
100
|
-
|
|
174
|
+
const candidate = toPackageSpecifier(bundle.name, moduleEntry.export);
|
|
175
|
+
if (publicModuleCanSatisfyRequest(rootPaths, lookup, request)) {
|
|
176
|
+
specifiers.push(candidate);
|
|
177
|
+
}
|
|
101
178
|
}
|
|
102
|
-
return
|
|
179
|
+
return shortestSpecifier(specifiers);
|
|
103
180
|
}
|
|
104
|
-
function getImplicitPublicModuleSpecifierForSourcePath(bundle, surface,
|
|
181
|
+
function getImplicitPublicModuleSpecifierForSourcePath(bundle, surface, request) {
|
|
105
182
|
const lookup = createContentLookup(bundle);
|
|
106
|
-
const
|
|
183
|
+
const specifiers = [];
|
|
107
184
|
const defaultRoot = getRoot(bundle, surface.defaultModuleRoot);
|
|
108
|
-
|
|
185
|
+
if (publicModuleCanSatisfyRequest(rootSourceFilePaths(defaultRoot), lookup, request)) {
|
|
186
|
+
specifiers.push(bundle.name);
|
|
187
|
+
}
|
|
109
188
|
for (const root of Object.values(bundle.roots)) {
|
|
110
|
-
|
|
189
|
+
const candidate = toPackageSpecifier(bundle.name, `./${root.js.targetFilePath}`);
|
|
190
|
+
if (publicModuleCanSatisfyRequest(rootSourceFilePaths(root), lookup, request)) {
|
|
191
|
+
specifiers.push(candidate);
|
|
192
|
+
}
|
|
111
193
|
}
|
|
112
|
-
return
|
|
194
|
+
return shortestSpecifier(specifiers) ?? getPublicModuleSpecifierForSourcePath(bundle, request.sourceFilePath);
|
|
113
195
|
}
|
|
114
|
-
function getExistingPublicModuleSpecifierForSourcePath(bundle,
|
|
196
|
+
function getExistingPublicModuleSpecifierForSourcePath(bundle, request) {
|
|
115
197
|
const { surface } = bundle;
|
|
116
198
|
if (surface.mode === 'implicit') {
|
|
117
|
-
return getImplicitPublicModuleSpecifierForSourcePath(bundle, surface,
|
|
199
|
+
return getImplicitPublicModuleSpecifierForSourcePath(bundle, surface, request);
|
|
118
200
|
}
|
|
119
|
-
return getExplicitPublicModuleSpecifierForSourcePath(bundle, surface,
|
|
201
|
+
return getExplicitPublicModuleSpecifierForSourcePath(bundle, surface, request);
|
|
120
202
|
}
|
|
121
|
-
function findReplacementInBundles(
|
|
203
|
+
function findReplacementInBundles(request, bundles, getTargetPath) {
|
|
122
204
|
for (const bundle of bundles) {
|
|
123
|
-
const targetPath = getTargetPath(bundle,
|
|
205
|
+
const targetPath = getTargetPath(bundle, request);
|
|
124
206
|
if (targetPath !== undefined) {
|
|
125
207
|
return {
|
|
126
208
|
emittedSpecifier: targetPath,
|
|
127
209
|
packageName: bundle.name
|
|
128
210
|
};
|
|
129
211
|
}
|
|
130
|
-
if (needsImportReplacement(
|
|
131
|
-
throw new Error(`Package "${bundle.name}" does not expose "${
|
|
212
|
+
if (needsImportReplacement(request.sourceFilePath) && ownsSourcePath(request.sourceFilePath, bundle)) {
|
|
213
|
+
throw new Error(`Package "${bundle.name}" does not expose "${request.sourceFilePath}" for cross-package substitution`);
|
|
132
214
|
}
|
|
133
215
|
}
|
|
134
216
|
return undefined;
|
|
135
217
|
}
|
|
136
|
-
function findReplacement(
|
|
137
|
-
const dependencyReplacement = findReplacementInBundles(
|
|
218
|
+
function findReplacement(request, bundleDependencies, bundlePeerDependencies) {
|
|
219
|
+
const dependencyReplacement = findReplacementInBundles(request, bundleDependencies, function (bundle, replacementRequest) {
|
|
220
|
+
return getPublicModuleSpecifierForSourcePath(bundle, replacementRequest.sourceFilePath);
|
|
221
|
+
});
|
|
138
222
|
if (dependencyReplacement !== undefined) {
|
|
139
223
|
return dependencyReplacement;
|
|
140
224
|
}
|
|
141
|
-
return findReplacementInBundles(
|
|
225
|
+
return findReplacementInBundles(request, bundlePeerDependencies, getExistingPublicModuleSpecifierForSourcePath);
|
|
142
226
|
}
|
|
143
227
|
function withSubstitutedSourcePath(substitutedSourceFilePathsByPackageName, packageName, file) {
|
|
144
228
|
if (declarationCompanionCandidates(file).length === 0) {
|
|
@@ -149,16 +233,16 @@ function withSubstitutedSourcePath(substitutedSourceFilePathsByPackageName, pack
|
|
|
149
233
|
updated.set(packageName, new Set([...existing, file]));
|
|
150
234
|
return updated;
|
|
151
235
|
}
|
|
152
|
-
export function findAllPathReplacements(
|
|
236
|
+
export function findAllPathReplacements(requests, bundleDependencies, bundlePeerDependencies) {
|
|
153
237
|
const importPathReplacements = new Map();
|
|
154
238
|
const matchedBundleDependencies = [];
|
|
155
239
|
let substitutedSourceFilePathsByPackageName = new Map();
|
|
156
|
-
for (const
|
|
157
|
-
const replacement = findReplacement(
|
|
240
|
+
for (const request of requests) {
|
|
241
|
+
const replacement = findReplacement(request, bundleDependencies, bundlePeerDependencies);
|
|
158
242
|
if (replacement !== undefined) {
|
|
159
|
-
importPathReplacements.set(
|
|
243
|
+
importPathReplacements.set(request.sourceFilePath, replacement);
|
|
160
244
|
matchedBundleDependencies.push(replacement.packageName);
|
|
161
|
-
substitutedSourceFilePathsByPackageName = withSubstitutedSourcePath(substitutedSourceFilePathsByPackageName, replacement.packageName,
|
|
245
|
+
substitutedSourceFilePathsByPackageName = withSubstitutedSourcePath(substitutedSourceFilePathsByPackageName, replacement.packageName, request.sourceFilePath);
|
|
162
246
|
}
|
|
163
247
|
}
|
|
164
248
|
return {
|