packtory 0.0.100 → 0.0.102
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/dead-code-eliminator/computed-property-key-purity.js +68 -0
- package/dead-code-eliminator/computed-property-key-purity.js.map +1 -0
- package/dead-code-eliminator/expression-facts.js +176 -0
- package/dead-code-eliminator/expression-facts.js.map +1 -0
- package/dead-code-eliminator/imported-expression-origin.js +9 -30
- package/dead-code-eliminator/imported-expression-origin.js.map +1 -1
- package/dead-code-eliminator/invariants/export-resolution.js +160 -0
- package/dead-code-eliminator/invariants/export-resolution.js.map +1 -0
- package/dead-code-eliminator/invariants/output-invariants.js +366 -0
- package/dead-code-eliminator/invariants/output-invariants.js.map +1 -0
- package/dead-code-eliminator/invariants/target-candidates.js +56 -0
- package/dead-code-eliminator/invariants/target-candidates.js.map +1 -0
- package/dead-code-eliminator/liveness/external-purity-summary.js +13 -0
- package/dead-code-eliminator/liveness/external-purity-summary.js.map +1 -1
- package/dead-code-eliminator/pure-expression.js +161 -164
- package/dead-code-eliminator/pure-expression.js.map +1 -1
- package/package.json +3 -4
- package/packages/package-processor.composition.d.ts.map +1 -1
- package/packages/package-processor.composition.js +44 -0
- package/packages/package-processor.composition.js.map +1 -1
- package/packtory/package-processor-publish-dependencies.d.ts +2 -0
- package/packtory/package-processor-publish-dependencies.d.ts.map +1 -1
- package/packtory/package-processor-publish.d.ts.map +1 -1
- package/packtory/package-processor-publish.js +21 -2
- package/packtory/package-processor-publish.js.map +1 -1
- package/packtory/package-processor.d.ts +0 -1
- package/packtory/package-processor.d.ts.map +1 -1
- package/packtory/package-processor.js.map +1 -1
- package/packtory/published-artifact-smoke-gate.d.ts +14 -0
- package/packtory/published-artifact-smoke-gate.d.ts.map +1 -0
- package/packtory/published-artifact-smoke-gate.js +309 -0
- package/packtory/published-artifact-smoke-gate.js.map +1 -0
- package/sbom.cdx.json +15 -15
- package/dead-code-eliminator/liveness/external-purity.js +0 -40
- package/dead-code-eliminator/liveness/external-purity.js.map +0 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { Node as TsMorphNode, SyntaxKind, VariableDeclarationKind } from 'ts-morph';
|
|
3
|
+
import { packageTypeForResolvedFilePath, resolveTypescriptModuleFilePath } from "../dependency-scanner/typescript-module-resolution.js";
|
|
4
|
+
import { expressionFactIsPure } from "./expression-facts.js";
|
|
5
|
+
import { unwrapExpression } from "./expression-unwrapping.js";
|
|
6
|
+
import { resolveImportedExpressionPropertyPath } from "./imported-expression-origin.js";
|
|
7
|
+
function packageTypeFor(filePath, containingSourceFile) {
|
|
8
|
+
return packageTypeForResolvedFilePath({ filePath, containingSourceFile });
|
|
9
|
+
}
|
|
10
|
+
function isRuntimeModuleSource(filePath, containingSourceFile) {
|
|
11
|
+
return path.extname(filePath) === '.js' && packageTypeFor(filePath, containingSourceFile) === 'module';
|
|
12
|
+
}
|
|
13
|
+
function resolvedRuntimeSourceFile(moduleSpecifier, containingSourceFile) {
|
|
14
|
+
const filePath = resolveTypescriptModuleFilePath({
|
|
15
|
+
moduleSpecifier,
|
|
16
|
+
containingSourceFile,
|
|
17
|
+
resolutionMode: 'runtime'
|
|
18
|
+
});
|
|
19
|
+
if (filePath === undefined || !isRuntimeModuleSource(filePath, containingSourceFile)) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const project = containingSourceFile.getProject();
|
|
23
|
+
return project.getSourceFile(filePath) ?? project.addSourceFileAtPathIfExists(filePath);
|
|
24
|
+
}
|
|
25
|
+
function objectPropertyInitializer(expression, propertyName) {
|
|
26
|
+
const property = expression.getProperty(propertyName);
|
|
27
|
+
return TsMorphNode.isPropertyAssignment(property) ? property.getInitializerOrThrow() : undefined;
|
|
28
|
+
}
|
|
29
|
+
function primitiveKeyExpression(expression) {
|
|
30
|
+
return TsMorphNode.isStringLiteral(unwrapExpression(expression));
|
|
31
|
+
}
|
|
32
|
+
function expressionMemberIsPrimitiveKey(expression, propertyName) {
|
|
33
|
+
const unwrapped = unwrapExpression(expression);
|
|
34
|
+
if (!TsMorphNode.isObjectLiteralExpression(unwrapped)) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return primitiveKeyExpression(objectPropertyInitializer(unwrapped, propertyName));
|
|
38
|
+
}
|
|
39
|
+
function constDeclarationInitializer(declaration) {
|
|
40
|
+
const statement = declaration.getFirstAncestorByKindOrThrow(SyntaxKind.VariableStatement);
|
|
41
|
+
return statement.isExported() && statement.getDeclarationKind() === VariableDeclarationKind.Const
|
|
42
|
+
? declaration.getInitializer()
|
|
43
|
+
: undefined;
|
|
44
|
+
}
|
|
45
|
+
function exportPathIsPrimitiveKey(sourceFile, exportName, propertyName) {
|
|
46
|
+
const declaration = sourceFile.getVariableDeclaration(exportName);
|
|
47
|
+
if (declaration === undefined) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return expressionMemberIsPrimitiveKey(constDeclarationInitializer(declaration), propertyName);
|
|
51
|
+
}
|
|
52
|
+
function importedExpressionIsPrimitiveKey(expression) {
|
|
53
|
+
const origin = resolveImportedExpressionPropertyPath(expression);
|
|
54
|
+
if (origin === undefined) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const sourceFile = resolvedRuntimeSourceFile(origin.from, expression.getSourceFile());
|
|
58
|
+
const [exportName = origin.from, propertyName = exportName, ...rest] = origin.path;
|
|
59
|
+
return sourceFile !== undefined && rest.length === 0 &&
|
|
60
|
+
exportPathIsPrimitiveKey(sourceFile, exportName, propertyName);
|
|
61
|
+
}
|
|
62
|
+
export function computedPropertyNameIsPure(expression, factFor) {
|
|
63
|
+
if (TsMorphNode.isPropertyAccessExpression(unwrapExpression(expression))) {
|
|
64
|
+
return importedExpressionIsPrimitiveKey(expression);
|
|
65
|
+
}
|
|
66
|
+
return expressionFactIsPure(factFor(expression)) || importedExpressionIsPrimitiveKey(expression);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=computed-property-key-purity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computed-property-key-purity.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/computed-property-key-purity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { Node as TsMorphNode, SyntaxKind, VariableDeclarationKind } from 'ts-morph';
|
|
2
|
+
import { originIsTrustedPureImport, resolveImportedExpressionPath } from "./imported-expression-origin.js";
|
|
3
|
+
import { unwrapExpression } from "./expression-unwrapping.js";
|
|
4
|
+
import { exportPurityForOrigin } from "./liveness/external-purity-summary.js";
|
|
5
|
+
export const pureValueFact = { origin: undefined, type: 'pure-value' };
|
|
6
|
+
export const pureLocalObjectFact = { type: 'pure-object', origin: undefined };
|
|
7
|
+
export const unknownFact = { origin: undefined, type: 'unknown' };
|
|
8
|
+
export function expressionFactIsPure(fact) {
|
|
9
|
+
return ['pure-callable', 'pure-object', 'pure-value'].includes(fact.type);
|
|
10
|
+
}
|
|
11
|
+
export function expressionFactOrigin(fact) {
|
|
12
|
+
return fact.origin;
|
|
13
|
+
}
|
|
14
|
+
export function purityCheckerFor(factFor) {
|
|
15
|
+
return function (candidate) {
|
|
16
|
+
return expressionFactIsPure(factFor(candidate));
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function pureObjectWithOrigin(origin) {
|
|
20
|
+
return { type: 'pure-object', origin };
|
|
21
|
+
}
|
|
22
|
+
export function pureCallableWithOrigin(origin) {
|
|
23
|
+
return { type: 'pure-callable', origin };
|
|
24
|
+
}
|
|
25
|
+
function importedExpressionFact(origin, expression, settings) {
|
|
26
|
+
if (originIsTrustedPureImport(origin, settings)) {
|
|
27
|
+
return pureObjectWithOrigin(origin);
|
|
28
|
+
}
|
|
29
|
+
const exportPurity = exportPurityForOrigin(origin, expression.getSourceFile());
|
|
30
|
+
if (exportPurity === 'pure-callable') {
|
|
31
|
+
return pureCallableWithOrigin(origin);
|
|
32
|
+
}
|
|
33
|
+
if (exportPurity === 'pure-object') {
|
|
34
|
+
return pureObjectWithOrigin(origin);
|
|
35
|
+
}
|
|
36
|
+
return pureValueFact;
|
|
37
|
+
}
|
|
38
|
+
function syntaxKindIsOneOf(kind, ...candidates) {
|
|
39
|
+
return candidates.includes(kind);
|
|
40
|
+
}
|
|
41
|
+
function declarationKindIsAlwaysAvailable(kind) {
|
|
42
|
+
return syntaxKindIsOneOf(kind, SyntaxKind.FunctionDeclaration, SyntaxKind.ImportClause, SyntaxKind.ImportSpecifier, SyntaxKind.NamespaceImport, SyntaxKind.Parameter);
|
|
43
|
+
}
|
|
44
|
+
function declarationKindIsOrdered(kind) {
|
|
45
|
+
return syntaxKindIsOneOf(kind, SyntaxKind.ClassDeclaration, SyntaxKind.EnumDeclaration, SyntaxKind.VariableDeclaration);
|
|
46
|
+
}
|
|
47
|
+
function declarationKindHasImportedOrigin(kind) {
|
|
48
|
+
return syntaxKindIsOneOf(kind, SyntaxKind.ImportClause, SyntaxKind.ImportSpecifier, SyntaxKind.NamespaceImport);
|
|
49
|
+
}
|
|
50
|
+
function operatorKindIsAssignment(kind) {
|
|
51
|
+
return syntaxKindIsOneOf(kind, SyntaxKind.EqualsToken, SyntaxKind.PlusEqualsToken, SyntaxKind.MinusEqualsToken, SyntaxKind.AsteriskEqualsToken, SyntaxKind.AsteriskAsteriskEqualsToken, SyntaxKind.SlashEqualsToken, SyntaxKind.PercentEqualsToken, SyntaxKind.LessThanLessThanEqualsToken, SyntaxKind.GreaterThanGreaterThanEqualsToken, SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken, SyntaxKind.AmpersandEqualsToken, SyntaxKind.BarEqualsToken, SyntaxKind.CaretEqualsToken, SyntaxKind.AmpersandAmpersandEqualsToken, SyntaxKind.BarBarEqualsToken, SyntaxKind.QuestionQuestionEqualsToken);
|
|
52
|
+
}
|
|
53
|
+
function declarationIsAvailableBeforeRead(declaration, expression) {
|
|
54
|
+
return Math.sign(expression.getStart() - declaration.getEnd()) === 1;
|
|
55
|
+
}
|
|
56
|
+
function declarationMakesIdentifierReadPure(declaration, expression) {
|
|
57
|
+
const kind = declaration.getKind();
|
|
58
|
+
if (declarationKindIsAlwaysAvailable(kind)) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
if (declarationKindIsOrdered(kind)) {
|
|
62
|
+
return declarationIsAvailableBeforeRead(declaration, expression);
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
function identifierDeclarations(expression) {
|
|
67
|
+
const symbol = expression.getSymbol();
|
|
68
|
+
return symbol?.getDeclarations() ?? [];
|
|
69
|
+
}
|
|
70
|
+
function rootMutationIdentifier(expression) {
|
|
71
|
+
const unwrapped = unwrapExpression(expression);
|
|
72
|
+
if (TsMorphNode.isIdentifier(unwrapped)) {
|
|
73
|
+
return unwrapped;
|
|
74
|
+
}
|
|
75
|
+
if (TsMorphNode.isPropertyAccessExpression(unwrapped) || TsMorphNode.isElementAccessExpression(unwrapped)) {
|
|
76
|
+
return rootMutationIdentifier(unwrapped.getExpression());
|
|
77
|
+
}
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
function binaryExpressionMutationRecord(expression) {
|
|
81
|
+
if (!TsMorphNode.isBinaryExpression(expression)) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
if (!operatorKindIsAssignment(expression.getOperatorToken().getKind())) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
const identifier = rootMutationIdentifier(expression.getLeft());
|
|
88
|
+
return identifier === undefined ? undefined : { name: identifier.getText(), start: expression.getStart() };
|
|
89
|
+
}
|
|
90
|
+
function updateExpressionMutationRecord(expression) {
|
|
91
|
+
if (!TsMorphNode.isPrefixUnaryExpression(expression) && !TsMorphNode.isPostfixUnaryExpression(expression)) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
const operator = expression.getOperatorToken();
|
|
95
|
+
if (operator !== SyntaxKind.PlusPlusToken && operator !== SyntaxKind.MinusMinusToken) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
const identifier = rootMutationIdentifier(expression.getOperand());
|
|
99
|
+
return identifier === undefined ? undefined : { name: identifier.getText(), start: expression.getStart() };
|
|
100
|
+
}
|
|
101
|
+
function mutationRecordForNode(node) {
|
|
102
|
+
return binaryExpressionMutationRecord(node) ?? updateExpressionMutationRecord(node);
|
|
103
|
+
}
|
|
104
|
+
function* collectMutationRecords(sourceFile) {
|
|
105
|
+
for (const node of sourceFile.getDescendants()) {
|
|
106
|
+
const record = mutationRecordForNode(node);
|
|
107
|
+
if (record !== undefined) {
|
|
108
|
+
yield record;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function mutationRecordTargetsDeclaration(record, declaration, read) {
|
|
113
|
+
return record.name === declaration.getName() &&
|
|
114
|
+
Math.sign(record.start - declaration.getEnd()) === 1 &&
|
|
115
|
+
Math.sign(read.getStart() - record.start) === 1;
|
|
116
|
+
}
|
|
117
|
+
function declarationIsMutatedBeforeRead(declaration, read) {
|
|
118
|
+
for (const record of collectMutationRecords(read.getSourceFile())) {
|
|
119
|
+
if (mutationRecordTargetsDeclaration(record, declaration, read)) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
function variableDeclarationIsConst(declaration) {
|
|
126
|
+
const statement = declaration.getFirstAncestorByKindOrThrow(SyntaxKind.VariableStatement);
|
|
127
|
+
return statement.getDeclarationKind() === VariableDeclarationKind.Const;
|
|
128
|
+
}
|
|
129
|
+
function factNeedsMutationCheck(fact) {
|
|
130
|
+
return fact.type === 'pure-object' || fact.type === 'pure-callable';
|
|
131
|
+
}
|
|
132
|
+
function variableInitializerFact(declaration, factFor) {
|
|
133
|
+
const initializer = declaration.getInitializer();
|
|
134
|
+
return initializer === undefined ? pureValueFact : factFor(initializer);
|
|
135
|
+
}
|
|
136
|
+
function variableDeclarationFact(declaration, expression, factFor) {
|
|
137
|
+
if (!declarationIsAvailableBeforeRead(declaration, expression)) {
|
|
138
|
+
return unknownFact;
|
|
139
|
+
}
|
|
140
|
+
if (!variableDeclarationIsConst(declaration)) {
|
|
141
|
+
return pureValueFact;
|
|
142
|
+
}
|
|
143
|
+
const initializerFact = variableInitializerFact(declaration, factFor);
|
|
144
|
+
if (!factNeedsMutationCheck(initializerFact)) {
|
|
145
|
+
return initializerFact;
|
|
146
|
+
}
|
|
147
|
+
return declarationIsMutatedBeforeRead(declaration, expression) ? pureValueFact : initializerFact;
|
|
148
|
+
}
|
|
149
|
+
function importedOriginForIdentifierDeclaration(declaration, expression) {
|
|
150
|
+
return declarationKindHasImportedOrigin(declaration.getKind())
|
|
151
|
+
? resolveImportedExpressionPath(expression)
|
|
152
|
+
: undefined;
|
|
153
|
+
}
|
|
154
|
+
function declarationFactForIdentifier(declaration, expression, factFor, settings) {
|
|
155
|
+
const origin = importedOriginForIdentifierDeclaration(declaration, expression);
|
|
156
|
+
if (origin !== undefined) {
|
|
157
|
+
return importedExpressionFact(origin, expression, settings);
|
|
158
|
+
}
|
|
159
|
+
if (TsMorphNode.isVariableDeclaration(declaration)) {
|
|
160
|
+
return variableDeclarationFact(declaration, expression, factFor);
|
|
161
|
+
}
|
|
162
|
+
return declarationMakesIdentifierReadPure(declaration, expression) ? pureValueFact : unknownFact;
|
|
163
|
+
}
|
|
164
|
+
export function identifierReadFact(expression, factFor, settings) {
|
|
165
|
+
if (expression.getText() === 'undefined') {
|
|
166
|
+
return pureValueFact;
|
|
167
|
+
}
|
|
168
|
+
for (const declaration of identifierDeclarations(expression)) {
|
|
169
|
+
const fact = declarationFactForIdentifier(declaration, expression, factFor, settings);
|
|
170
|
+
if (expressionFactIsPure(fact)) {
|
|
171
|
+
return fact;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return unknownFact;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=expression-facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression-facts.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/expression-facts.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,7 +46,7 @@ function originMatchesTrustedImport(origin, trustedImport) {
|
|
|
46
46
|
const [pathHead = trustedImport.from] = origin.path;
|
|
47
47
|
return pathHead !== trustedImport.from && trustedImport.imports.includes(pathHead);
|
|
48
48
|
}
|
|
49
|
-
function
|
|
49
|
+
export function originIsTrustedPureImport(origin, settings) {
|
|
50
50
|
const pureImports = settings?.pureImports;
|
|
51
51
|
if (origin === undefined || pureImports === undefined) {
|
|
52
52
|
return false;
|
|
@@ -63,41 +63,20 @@ function arePureCallArguments(callArguments, recurse) {
|
|
|
63
63
|
return TsMorphNode.isExpression(argument) && recurse(argument);
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
-
function appendPropertyAccess(base, propertyName) {
|
|
67
|
-
return base === undefined ? undefined : { from: base.from, path: [...base.path, propertyName] };
|
|
68
|
-
}
|
|
69
|
-
function originOfTrustedCall(callee, callArguments, recurse, settings) {
|
|
70
|
-
if (!expressionOriginIsTrusted(callee, settings)) {
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
return arePureCallArguments(callArguments, recurse) ? callee : undefined;
|
|
74
|
-
}
|
|
75
66
|
export function resolveImportedExpressionPath(expression) {
|
|
76
67
|
const identifier = unwrapExpression(expression).asKind(SyntaxKind.Identifier);
|
|
77
68
|
return identifier === undefined ? undefined : importedOriginForIdentifier(identifier);
|
|
78
69
|
}
|
|
79
|
-
function
|
|
80
|
-
if (!TsMorphNode.isPropertyAccessExpression(expression)) {
|
|
81
|
-
return undefined;
|
|
82
|
-
}
|
|
83
|
-
const base = resolveOrigin(expression.getExpression(), recurse, settings);
|
|
84
|
-
return appendPropertyAccess(base, expression.getName());
|
|
85
|
-
}
|
|
86
|
-
function trustedCallOrigin(expression, recurse, settings, resolveOrigin) {
|
|
87
|
-
if (!TsMorphNode.isCallExpression(expression)) {
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
const callee = resolveOrigin(expression.getExpression(), recurse, settings);
|
|
91
|
-
return originOfTrustedCall(callee, expression.getArguments(), recurse, settings);
|
|
92
|
-
}
|
|
93
|
-
export function resolveImportedExpressionOrigin(expression, recurse, settings) {
|
|
70
|
+
export function resolveImportedExpressionPropertyPath(expression) {
|
|
94
71
|
const unwrapped = unwrapExpression(expression);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
72
|
+
if (TsMorphNode.isIdentifier(unwrapped)) {
|
|
73
|
+
return resolveImportedExpressionPath(unwrapped);
|
|
74
|
+
}
|
|
75
|
+
if (TsMorphNode.isPropertyAccessExpression(unwrapped)) {
|
|
76
|
+
const base = resolveImportedExpressionPropertyPath(unwrapped.getExpression());
|
|
77
|
+
return base === undefined ? undefined : { from: base.from, path: [...base.path, unwrapped.getName()] };
|
|
98
78
|
}
|
|
99
|
-
return
|
|
100
|
-
trustedCallOrigin(unwrapped, recurse, settings, resolveImportedExpressionOrigin);
|
|
79
|
+
return undefined;
|
|
101
80
|
}
|
|
102
81
|
export { arePureCallArguments };
|
|
103
82
|
//# sourceMappingURL=imported-expression-origin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imported-expression-origin.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/imported-expression-origin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,UAAU,EAAoC,MAAM,UAAU,CAAC;AAE7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"imported-expression-origin.js","sourceRoot":"","sources":["../../../../source/dead-code-eliminator/imported-expression-origin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,UAAU,EAAoC,MAAM,UAAU,CAAC;AAE7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAc9D,SAAS,4BAA4B,CAAC,WAAwB;IAC1D,IAAI,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,OAAO;YACH,IAAI,EAAE,WAAW,CAAC,oBAAoB,EAAE,CAAC,uBAAuB,EAAE;YAClE,IAAI,EAAE,CAAE,WAAW,CAAC,OAAO,EAAE,CAAE;SAClC,CAAC;IACN,CAAC;IAED,IAAI,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,MAAM,iBAAiB,GAAG,WAAW,CAAC,6BAA6B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAClG,OAAO;YACH,IAAI,EAAE,iBAAiB,CAAC,uBAAuB,EAAE;YACjD,IAAI,EAAE,EAAE;SACX,CAAC;IACN,CAAC;IAED,IAAI,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C,MAAM,iBAAiB,GAAG,WAAW,CAAC,6BAA6B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAClG,OAAO;YACH,IAAI,EAAE,iBAAiB,CAAC,uBAAuB,EAAE;YACjD,IAAI,EAAE,CAAE,SAAS,CAAE;SACtB,CAAC;IACN,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,2BAA2B,CAAC,UAAsB;IACvD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,0BAA0B,CAC/B,MAAgC,EAChC,aAA4B;IAE5B,IAAI,aAAa,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,aAAa,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,CAAE,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACtD,OAAO,QAAQ,KAAK,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,MAA4C,EAC5C,QAAiD;IAEjD,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,CAAC;IAC1C,IAAI,MAAM,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,aAAa;QAC3C,OAAO,0BAA0B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,oBAAoB,CAAC,aAAqC,EAAE,OAAgC;IACjG,OAAO,aAAa,CAAC,KAAK,CAAC,UAAU,QAAQ;QACzC,IAAI,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,UAAsB;IAChE,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC9E,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,qCAAqC,CAAC,UAAsB;IACxE,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,6BAA6B,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,WAAW,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,qCAAqC,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;QAC9E,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAE,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,CAAE,EAAE,CAAC;IAC7G,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { Node as TsMorphNode } from 'ts-morph';
|
|
2
|
+
import { collectVariableDeclarationBindings } from "../variable-declaration-bindings.js";
|
|
3
|
+
function exportedName(namedExport) {
|
|
4
|
+
return namedExport.getAliasNode()?.getText() ?? namedExport.getName();
|
|
5
|
+
}
|
|
6
|
+
function exportAssignmentNames(statement) {
|
|
7
|
+
return TsMorphNode.isExportAssignment(statement) && !statement.isExportEquals() ? ['default'] : [];
|
|
8
|
+
}
|
|
9
|
+
function exportedDeclarationName(declaration) {
|
|
10
|
+
if (!declaration.isExported()) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
return [String(declaration.getName())];
|
|
14
|
+
}
|
|
15
|
+
function functionExportNames(statement) {
|
|
16
|
+
if (!TsMorphNode.isFunctionDeclaration(statement)) {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
return statement.isDefaultExport() ? ['default'] : exportedDeclarationName(statement);
|
|
20
|
+
}
|
|
21
|
+
function classExportNames(statement) {
|
|
22
|
+
if (!TsMorphNode.isClassDeclaration(statement)) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
return statement.isDefaultExport() ? ['default'] : exportedDeclarationName(statement);
|
|
26
|
+
}
|
|
27
|
+
function interfaceExportNames(statement) {
|
|
28
|
+
return TsMorphNode.isInterfaceDeclaration(statement) ? exportedDeclarationName(statement) : [];
|
|
29
|
+
}
|
|
30
|
+
function typeAliasExportNames(statement) {
|
|
31
|
+
return TsMorphNode.isTypeAliasDeclaration(statement) ? exportedDeclarationName(statement) : [];
|
|
32
|
+
}
|
|
33
|
+
function enumExportNames(statement) {
|
|
34
|
+
return TsMorphNode.isEnumDeclaration(statement) ? exportedDeclarationName(statement) : [];
|
|
35
|
+
}
|
|
36
|
+
function moduleExportNames(statement) {
|
|
37
|
+
return TsMorphNode.isModuleDeclaration(statement) ? exportedDeclarationName(statement) : [];
|
|
38
|
+
}
|
|
39
|
+
function variableExportNames(statement) {
|
|
40
|
+
if (!TsMorphNode.isVariableStatement(statement) || !statement.isExported()) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
return statement.getDeclarations().flatMap(function (declaration) {
|
|
44
|
+
return collectVariableDeclarationBindings(declaration).map(function (binding) {
|
|
45
|
+
return binding.name;
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function statementExportNames(statement) {
|
|
50
|
+
return [
|
|
51
|
+
...exportAssignmentNames(statement),
|
|
52
|
+
...functionExportNames(statement),
|
|
53
|
+
...classExportNames(statement),
|
|
54
|
+
...interfaceExportNames(statement),
|
|
55
|
+
...typeAliasExportNames(statement),
|
|
56
|
+
...enumExportNames(statement),
|
|
57
|
+
...moduleExportNames(statement),
|
|
58
|
+
...variableExportNames(statement)
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
function localExportNames(sourceFile) {
|
|
62
|
+
return sourceFile
|
|
63
|
+
.getExportDeclarations()
|
|
64
|
+
.filter(function (declaration) {
|
|
65
|
+
return declaration.getModuleSpecifierValue() === undefined;
|
|
66
|
+
})
|
|
67
|
+
.flatMap(function (declaration) {
|
|
68
|
+
return declaration.getNamedExports().map(exportedName);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function directExportNames(sourceFile) {
|
|
72
|
+
return new Set([
|
|
73
|
+
...sourceFile.getStatements().flatMap(statementExportNames),
|
|
74
|
+
...localExportNames(sourceFile)
|
|
75
|
+
]);
|
|
76
|
+
}
|
|
77
|
+
function searchKey(input) {
|
|
78
|
+
return `${input.mode}\0${input.targetPath}\0${input.exportName}`;
|
|
79
|
+
}
|
|
80
|
+
function isNamedExportActive(mode, exportDeclaration) {
|
|
81
|
+
return mode === 'declaration' || !exportDeclaration.isTypeOnly();
|
|
82
|
+
}
|
|
83
|
+
function targetFromExportDeclaration(input, declaration) {
|
|
84
|
+
const moduleSpecifier = declaration.getModuleSpecifierValue();
|
|
85
|
+
return moduleSpecifier === undefined
|
|
86
|
+
? undefined
|
|
87
|
+
: input.resolver.resolve(input.targetPath, input.mode, moduleSpecifier);
|
|
88
|
+
}
|
|
89
|
+
function namespaceReExportMatches(search) {
|
|
90
|
+
const namespaceExport = search.declaration.getNamespaceExport();
|
|
91
|
+
return namespaceExport?.getName() === search.input.exportName && !search.target.targetOnly;
|
|
92
|
+
}
|
|
93
|
+
function namedReExportMatches(search) {
|
|
94
|
+
const { sourceFile } = search.target;
|
|
95
|
+
if (sourceFile === undefined) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
return search.declaration.getNamedExports().some(function (namedExport) {
|
|
99
|
+
return exportedName(namedExport) === search.input.exportName &&
|
|
100
|
+
search.hasExportedName({
|
|
101
|
+
input: {
|
|
102
|
+
...search.input,
|
|
103
|
+
targetPath: search.target.targetPath,
|
|
104
|
+
exportName: namedExport.getName(),
|
|
105
|
+
sourceFile
|
|
106
|
+
},
|
|
107
|
+
remainingDepth: search.remainingDepth,
|
|
108
|
+
visited: search.visited
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function starReExportMatches(search) {
|
|
113
|
+
const { sourceFile } = search.target;
|
|
114
|
+
if (sourceFile === undefined) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
return search.declaration.getNamespaceExport() === undefined &&
|
|
118
|
+
search.declaration.getNamedExports().length === 0 &&
|
|
119
|
+
search.input.exportName !== 'default' &&
|
|
120
|
+
search.hasExportedName({
|
|
121
|
+
input: { ...search.input, targetPath: search.target.targetPath, sourceFile },
|
|
122
|
+
remainingDepth: search.remainingDepth,
|
|
123
|
+
visited: search.visited
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function reExportSearch(search, declaration, target, findExportedName) {
|
|
127
|
+
return { ...search, declaration, target, hasExportedName: findExportedName };
|
|
128
|
+
}
|
|
129
|
+
function reExportDeclarationMatches(search, declaration, findExportedName) {
|
|
130
|
+
const target = targetFromExportDeclaration(search.input, declaration);
|
|
131
|
+
return isNamedExportActive(search.input.mode, declaration) &&
|
|
132
|
+
target !== undefined &&
|
|
133
|
+
!target.targetOnly &&
|
|
134
|
+
(namespaceReExportMatches(reExportSearch(search, declaration, target, findExportedName)) ||
|
|
135
|
+
namedReExportMatches(reExportSearch(search, declaration, target, findExportedName)) ||
|
|
136
|
+
starReExportMatches(reExportSearch(search, declaration, target, findExportedName)));
|
|
137
|
+
}
|
|
138
|
+
function reExportDeclarationsMatch(search, findExportedName) {
|
|
139
|
+
return search.input.sourceFile.getExportDeclarations().some(function (declaration) {
|
|
140
|
+
return reExportDeclarationMatches(search, declaration, findExportedName);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function hasExportedName(search) {
|
|
144
|
+
const key = searchKey(search.input);
|
|
145
|
+
if (search.remainingDepth === 0) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
const firstVisit = !search.visited.has(key);
|
|
149
|
+
const nextSearch = {
|
|
150
|
+
...search,
|
|
151
|
+
remainingDepth: search.remainingDepth - 1,
|
|
152
|
+
visited: new Set([...search.visited, key])
|
|
153
|
+
};
|
|
154
|
+
return firstVisit && (directExportNames(search.input.sourceFile).has(search.input.exportName) ||
|
|
155
|
+
reExportDeclarationsMatch(nextSearch, hasExportedName));
|
|
156
|
+
}
|
|
157
|
+
export function hasDeadCodeEliminationExportedName(input) {
|
|
158
|
+
return hasExportedName({ input, remainingDepth: input.maximumDepth, visited: new Set() });
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=export-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-resolution.js","sourceRoot":"","sources":["../../../../../source/dead-code-eliminator/invariants/export-resolution.ts"],"names":[],"mappings":"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"}
|