packtory 0.0.87 → 0.0.88
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/analyzed-bundle.d.ts +1 -0
- package/dead-code-eliminator/analyzed-bundle.d.ts.map +1 -1
- package/dead-code-eliminator/analyzed-bundle.js.map +1 -1
- package/dead-code-eliminator/code-file-analyzer.js +10 -3
- package/dead-code-eliminator/code-file-analyzer.js.map +1 -1
- package/dead-code-eliminator/dependency-metadata.js +206 -0
- package/dead-code-eliminator/dependency-metadata.js.map +1 -0
- package/dead-code-eliminator/eliminator.js +5 -294
- package/dead-code-eliminator/eliminator.js.map +1 -1
- package/dead-code-eliminator/expression-unwrapping.js.map +1 -1
- package/dead-code-eliminator/imported-expression-origin.js +23 -11
- package/dead-code-eliminator/imported-expression-origin.js.map +1 -1
- package/dead-code-eliminator/liveness/asset-side-effects.js +10 -0
- package/dead-code-eliminator/liveness/asset-side-effects.js.map +1 -0
- package/dead-code-eliminator/liveness/boolean-facts.js +99 -0
- package/dead-code-eliminator/liveness/boolean-facts.js.map +1 -0
- package/dead-code-eliminator/liveness/external-module-resolution.js +173 -0
- package/dead-code-eliminator/liveness/external-module-resolution.js.map +1 -0
- package/dead-code-eliminator/liveness/external-purity-summary.js +295 -0
- package/dead-code-eliminator/liveness/external-purity-summary.js.map +1 -0
- package/dead-code-eliminator/liveness/external-purity.js +40 -0
- package/dead-code-eliminator/liveness/external-purity.js.map +1 -0
- package/dead-code-eliminator/liveness/module-analysis.js +28 -0
- package/dead-code-eliminator/liveness/module-analysis.js.map +1 -0
- package/dead-code-eliminator/liveness/resource-retention.js +79 -0
- package/dead-code-eliminator/liveness/resource-retention.js.map +1 -0
- package/dead-code-eliminator/liveness/runtime-code.js +16 -0
- package/dead-code-eliminator/liveness/runtime-code.js.map +1 -0
- package/dead-code-eliminator/load-bundle.js +25 -9
- package/dead-code-eliminator/load-bundle.js.map +1 -1
- package/dead-code-eliminator/pure-expression.js +18 -6
- package/dead-code-eliminator/pure-expression.js.map +1 -1
- package/dead-code-eliminator/reachability/local-seed-gathering.js +1 -2
- package/dead-code-eliminator/reachability/local-seed-gathering.js.map +1 -1
- package/dead-code-eliminator/side-effect-classifier.js +23 -10
- package/dead-code-eliminator/side-effect-classifier.js.map +1 -1
- package/dead-code-eliminator/side-effects-field.js +2 -2
- package/dead-code-eliminator/side-effects-field.js.map +1 -1
- package/dead-code-eliminator/statement-classifiers.js +2 -7
- package/dead-code-eliminator/statement-classifiers.js.map +1 -1
- package/dead-code-eliminator/transform/declaration-removal.js +4 -0
- package/dead-code-eliminator/transform/declaration-removal.js.map +1 -1
- package/package.json +3 -3
- package/packages/package-processor.composition.d.ts.map +1 -1
- package/packages/package-processor.composition.js +1 -2
- package/packages/package-processor.composition.js.map +1 -1
- package/packtory/package-processor-build.js +6 -1
- package/packtory/package-processor-build.js.map +1 -1
- package/packtory/stages/package-analysis-stage.js +27 -0
- package/packtory/stages/package-analysis-stage.js.map +1 -1
- package/sbom.cdx.json +15 -15
|
@@ -72,20 +72,32 @@ function originOfTrustedCall(callee, callArguments, recurse, settings) {
|
|
|
72
72
|
}
|
|
73
73
|
return arePureCallArguments(callArguments, recurse) ? callee : undefined;
|
|
74
74
|
}
|
|
75
|
-
export function
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
export function resolveImportedExpressionPath(expression) {
|
|
76
|
+
const identifier = unwrapExpression(expression).asKind(SyntaxKind.Identifier);
|
|
77
|
+
return identifier === undefined ? undefined : importedOriginForIdentifier(identifier);
|
|
78
|
+
}
|
|
79
|
+
function propertyAccessOrigin(expression, recurse, settings, resolveOrigin) {
|
|
80
|
+
if (!TsMorphNode.isPropertyAccessExpression(expression)) {
|
|
81
|
+
return undefined;
|
|
79
82
|
}
|
|
80
|
-
|
|
81
|
-
|
|
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;
|
|
83
89
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
90
|
+
const callee = resolveOrigin(expression.getExpression(), recurse, settings);
|
|
91
|
+
return originOfTrustedCall(callee, expression.getArguments(), recurse, settings);
|
|
92
|
+
}
|
|
93
|
+
export function resolveImportedExpressionOrigin(expression, recurse, settings) {
|
|
94
|
+
const unwrapped = unwrapExpression(expression);
|
|
95
|
+
const directOrigin = resolveImportedExpressionPath(unwrapped);
|
|
96
|
+
if (directOrigin !== undefined) {
|
|
97
|
+
return directOrigin;
|
|
87
98
|
}
|
|
88
|
-
return
|
|
99
|
+
return propertyAccessOrigin(unwrapped, recurse, settings, resolveImportedExpressionOrigin) ??
|
|
100
|
+
trustedCallOrigin(unwrapped, recurse, settings, resolveImportedExpressionOrigin);
|
|
89
101
|
}
|
|
90
102
|
export { arePureCallArguments };
|
|
91
103
|
//# 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":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
const sideEffectAssetExtensions = new Set(['.css', '.less', '.sass', '.scss']);
|
|
3
|
+
export function sideEffectAssetImportKind(specifier) {
|
|
4
|
+
const extension = path.extname(specifier);
|
|
5
|
+
if (!sideEffectAssetExtensions.has(extension)) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
return `${extension.slice(1)} import`;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=asset-side-effects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-side-effects.js","sourceRoot":"","sources":["../../../../../source/dead-code-eliminator/liveness/asset-side-effects.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAE,CAAC,CAAC;AAEjF,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Node as TsMorphNode, SyntaxKind, VariableDeclarationKind } from 'ts-morph';
|
|
2
|
+
import { unwrapExpression } from "../expression-unwrapping.js";
|
|
3
|
+
function andOperator(left, right) {
|
|
4
|
+
return left && right;
|
|
5
|
+
}
|
|
6
|
+
function orOperator(left, right) {
|
|
7
|
+
return left || right;
|
|
8
|
+
}
|
|
9
|
+
function equalOperator(left, right) {
|
|
10
|
+
return left === right;
|
|
11
|
+
}
|
|
12
|
+
function notEqualOperator(left, right) {
|
|
13
|
+
return left !== right;
|
|
14
|
+
}
|
|
15
|
+
function literalBooleanValue(expression) {
|
|
16
|
+
if (expression.getKind() === SyntaxKind.TrueKeyword) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return expression.getKind() === SyntaxKind.FalseKeyword ? false : undefined;
|
|
20
|
+
}
|
|
21
|
+
function logicalBooleanOperatorValue(kind, left, right) {
|
|
22
|
+
if (kind === SyntaxKind.AmpersandAmpersandToken) {
|
|
23
|
+
return andOperator(left, right);
|
|
24
|
+
}
|
|
25
|
+
if (kind === SyntaxKind.BarBarToken) {
|
|
26
|
+
return orOperator(left, right);
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
function equalityBooleanOperatorValue(kind, left, right) {
|
|
31
|
+
if (kind === SyntaxKind.EqualsEqualsEqualsToken) {
|
|
32
|
+
return equalOperator(left, right);
|
|
33
|
+
}
|
|
34
|
+
if (kind === SyntaxKind.ExclamationEqualsEqualsToken) {
|
|
35
|
+
return notEqualOperator(left, right);
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
function binaryBooleanOperatorValue(kind, left, right) {
|
|
40
|
+
return logicalBooleanOperatorValue(kind, left, right) ?? equalityBooleanOperatorValue(kind, left, right);
|
|
41
|
+
}
|
|
42
|
+
function identifierBooleanValue(expression, facts) {
|
|
43
|
+
return TsMorphNode.isIdentifier(expression) ? facts.get(expression.getText()) : undefined;
|
|
44
|
+
}
|
|
45
|
+
function binaryBooleanValue(expression, facts, evaluate) {
|
|
46
|
+
if (!TsMorphNode.isBinaryExpression(expression)) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
const binary = expression.asKindOrThrow(SyntaxKind.BinaryExpression);
|
|
50
|
+
const left = evaluate(binary.getLeft(), facts);
|
|
51
|
+
const right = evaluate(binary.getRight(), facts);
|
|
52
|
+
if (left === undefined || right === undefined) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
return binaryBooleanOperatorValue(binary.getOperatorToken().getKind(), left, right);
|
|
56
|
+
}
|
|
57
|
+
function prefixBooleanValue(expression, facts, evaluate) {
|
|
58
|
+
if (!TsMorphNode.isPrefixUnaryExpression(expression)) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const operand = evaluate(expression.getOperand(), facts);
|
|
62
|
+
return operand !== undefined && expression.getOperatorToken() === SyntaxKind.ExclamationToken
|
|
63
|
+
? !operand
|
|
64
|
+
: undefined;
|
|
65
|
+
}
|
|
66
|
+
export function booleanValue(expression, facts) {
|
|
67
|
+
const unwrapped = unwrapExpression(expression);
|
|
68
|
+
return literalBooleanValue(unwrapped) ??
|
|
69
|
+
identifierBooleanValue(unwrapped, facts) ??
|
|
70
|
+
prefixBooleanValue(unwrapped, facts, booleanValue) ??
|
|
71
|
+
binaryBooleanValue(unwrapped, facts, booleanValue);
|
|
72
|
+
}
|
|
73
|
+
function collectBooleanFact(declaration, facts) {
|
|
74
|
+
const nameNode = declaration.getNameNode();
|
|
75
|
+
const initializer = declaration.getInitializer();
|
|
76
|
+
if (initializer === undefined || !TsMorphNode.isIdentifier(nameNode)) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const value = booleanValue(initializer, facts);
|
|
80
|
+
return value === undefined ? undefined : [nameNode.getText(), value];
|
|
81
|
+
}
|
|
82
|
+
function collectConstBooleanFacts(statement, facts) {
|
|
83
|
+
if (statement.getDeclarationKind() !== VariableDeclarationKind.Const) {
|
|
84
|
+
return facts;
|
|
85
|
+
}
|
|
86
|
+
const nextFacts = new Map(facts);
|
|
87
|
+
for (const declaration of statement.getDeclarations()) {
|
|
88
|
+
const fact = collectBooleanFact(declaration, nextFacts);
|
|
89
|
+
if (fact !== undefined) {
|
|
90
|
+
const [name, value] = fact;
|
|
91
|
+
nextFacts.set(name, value);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return nextFacts;
|
|
95
|
+
}
|
|
96
|
+
export function factsAfterStatement(statement, facts) {
|
|
97
|
+
return TsMorphNode.isVariableStatement(statement) ? collectConstBooleanFacts(statement, facts) : facts;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=boolean-facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boolean-facts.js","sourceRoot":"","sources":["../../../../../source/dead-code-eliminator/liveness/boolean-facts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { ts } from 'ts-morph';
|
|
3
|
+
function isRelativeOrAbsoluteSpecifier(specifier) {
|
|
4
|
+
return specifier.startsWith('.') || path.isAbsolute(specifier);
|
|
5
|
+
}
|
|
6
|
+
function scopedPackageSpecifierFrom(specifier) {
|
|
7
|
+
const [scope, name, ...rest] = specifier.split('/');
|
|
8
|
+
if (name === undefined) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
packageName: `${scope}/${name}`,
|
|
13
|
+
subpath: rest.length === 0 ? '.' : `./${rest.join('/')}`
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function unscopedPackageSpecifierFrom(specifier) {
|
|
17
|
+
const [packageName = specifier, ...rest] = specifier.split('/');
|
|
18
|
+
return {
|
|
19
|
+
packageName,
|
|
20
|
+
subpath: rest.length === 0 ? '.' : `./${rest.join('/')}`
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function packageSpecifierFrom(specifier) {
|
|
24
|
+
if (isRelativeOrAbsoluteSpecifier(specifier) || specifier.startsWith('#')) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
return specifier.startsWith('@') ? scopedPackageSpecifierFrom(specifier) : unscopedPackageSpecifierFrom(specifier);
|
|
28
|
+
}
|
|
29
|
+
function hostFileExists(sourceFile, filePath) {
|
|
30
|
+
return sourceFile.getProject().getModuleResolutionHost().fileExists(filePath);
|
|
31
|
+
}
|
|
32
|
+
function hostReadFile(sourceFile, filePath) {
|
|
33
|
+
return sourceFile.getProject().getModuleResolutionHost().readFile(filePath);
|
|
34
|
+
}
|
|
35
|
+
function packageLookupDirectories(containingSourceFile) {
|
|
36
|
+
const start = path.resolve(path.dirname(containingSourceFile.getFilePath()));
|
|
37
|
+
const { root } = path.parse(start);
|
|
38
|
+
const directorySegments = path
|
|
39
|
+
.relative(root, start)
|
|
40
|
+
.split(path.sep);
|
|
41
|
+
return Array.from({ length: directorySegments.length + 1 }, function (_unusedValue, ancestorOffset) {
|
|
42
|
+
return path.join(root, ...directorySegments.slice(0, directorySegments.length - ancestorOffset));
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function packageRootPath(specifier, containingSourceFile) {
|
|
46
|
+
for (const directory of packageLookupDirectories(containingSourceFile)) {
|
|
47
|
+
const packageRoot = path.join(directory, 'node_modules', specifier.packageName);
|
|
48
|
+
if (hostFileExists(containingSourceFile, path.join(packageRoot, 'package.json'))) {
|
|
49
|
+
return packageRoot;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
function isRecord(value) {
|
|
55
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
56
|
+
}
|
|
57
|
+
function stringProperty(record, key) {
|
|
58
|
+
const value = record[key];
|
|
59
|
+
return typeof value === 'string' ? value : undefined;
|
|
60
|
+
}
|
|
61
|
+
function parsePackageManifest(filePath, content) {
|
|
62
|
+
const parsed = ts.parseConfigFileTextToJson(filePath, content);
|
|
63
|
+
return parsed.error === undefined && isRecord(parsed.config) ? parsed.config : undefined;
|
|
64
|
+
}
|
|
65
|
+
function readPackageManifest(packageRoot, containingSourceFile) {
|
|
66
|
+
const filePath = path.join(packageRoot, 'package.json');
|
|
67
|
+
const parsed = parsePackageManifest(filePath, String(hostReadFile(containingSourceFile, filePath)));
|
|
68
|
+
if (parsed === undefined) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
type: stringProperty(parsed, 'type'),
|
|
73
|
+
exports: parsed.exports,
|
|
74
|
+
main: stringProperty(parsed, 'main'),
|
|
75
|
+
module: stringProperty(parsed, 'module')
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function targetFromConditionArray(value, resolveTarget) {
|
|
79
|
+
if (!Array.isArray(value)) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
for (const entry of value) {
|
|
83
|
+
const target = resolveTarget(entry);
|
|
84
|
+
if (target !== undefined) {
|
|
85
|
+
return target;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
function targetFromConditionRecord(value, resolveTarget) {
|
|
91
|
+
if (!isRecord(value)) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
return resolveTarget(value.import) ?? resolveTarget(value.default);
|
|
95
|
+
}
|
|
96
|
+
function targetFromCondition(value) {
|
|
97
|
+
if (typeof value === 'string') {
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
return targetFromConditionArray(value, targetFromCondition) ??
|
|
101
|
+
targetFromConditionRecord(value, targetFromCondition);
|
|
102
|
+
}
|
|
103
|
+
function targetFromRootExports(exportsValue) {
|
|
104
|
+
if (typeof exportsValue === 'string' || Array.isArray(exportsValue)) {
|
|
105
|
+
return targetFromCondition(exportsValue);
|
|
106
|
+
}
|
|
107
|
+
if (!isRecord(exportsValue)) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
const rootTarget = exportsValue['.'];
|
|
111
|
+
return targetFromCondition(rootTarget === undefined ? exportsValue : rootTarget);
|
|
112
|
+
}
|
|
113
|
+
function targetFromSubpathExports(exportsValue, subpath) {
|
|
114
|
+
return isRecord(exportsValue) ? targetFromCondition(exportsValue[subpath]) : undefined;
|
|
115
|
+
}
|
|
116
|
+
function targetFromExports(exportsValue, subpath) {
|
|
117
|
+
return subpath === '.'
|
|
118
|
+
? targetFromRootExports(exportsValue)
|
|
119
|
+
: targetFromSubpathExports(exportsValue, subpath);
|
|
120
|
+
}
|
|
121
|
+
function manifestFallbackTarget(manifest) {
|
|
122
|
+
if (manifest.module !== undefined) {
|
|
123
|
+
return manifest.module;
|
|
124
|
+
}
|
|
125
|
+
return manifest.type === 'module' ? manifest.main : undefined;
|
|
126
|
+
}
|
|
127
|
+
function targetIsEsm(resolved, manifest) {
|
|
128
|
+
const extension = path.extname(resolved);
|
|
129
|
+
return extension === '.mjs' || extension === '.js' && manifest.type === 'module';
|
|
130
|
+
}
|
|
131
|
+
function runtimeTargetPath(packageRoot, manifest, specifier) {
|
|
132
|
+
const target = targetFromExports(manifest.exports, specifier.subpath) ?? manifestFallbackTarget(manifest);
|
|
133
|
+
if (target === undefined) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
const resolved = path.resolve(packageRoot, target);
|
|
137
|
+
if (!resolved.startsWith(`${path.resolve(packageRoot)}${path.sep}`)) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
return targetIsEsm(resolved, manifest) ? resolved : undefined;
|
|
141
|
+
}
|
|
142
|
+
function sourceFileAtPath(project, filePath) {
|
|
143
|
+
return project.getSourceFile(filePath) ?? project.addSourceFileAtPathIfExists(filePath);
|
|
144
|
+
}
|
|
145
|
+
function resolvePackageSourceFile(specifier, containingSourceFile) {
|
|
146
|
+
const packageRoot = packageRootPath(specifier, containingSourceFile);
|
|
147
|
+
if (packageRoot === undefined) {
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
const manifest = readPackageManifest(packageRoot, containingSourceFile);
|
|
151
|
+
const targetPath = manifest === undefined ? undefined : runtimeTargetPath(packageRoot, manifest, specifier);
|
|
152
|
+
return targetPath === undefined ? undefined : sourceFileAtPath(containingSourceFile.getProject(), targetPath);
|
|
153
|
+
}
|
|
154
|
+
function resolveRelativeSourceFile(moduleSpecifier, containingSourceFile) {
|
|
155
|
+
const project = containingSourceFile.getProject();
|
|
156
|
+
const resolved = path.resolve(path.dirname(containingSourceFile.getFilePath()), moduleSpecifier);
|
|
157
|
+
const candidates = [resolved, `${resolved}.mjs`, `${resolved}.js`];
|
|
158
|
+
for (const candidate of candidates) {
|
|
159
|
+
const sourceFile = sourceFileAtPath(project, candidate);
|
|
160
|
+
if (sourceFile !== undefined) {
|
|
161
|
+
return sourceFile;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
export function resolveModuleSourceFile(moduleSpecifier, containingSourceFile) {
|
|
167
|
+
const specifier = packageSpecifierFrom(moduleSpecifier);
|
|
168
|
+
if (specifier !== undefined) {
|
|
169
|
+
return resolvePackageSourceFile(specifier, containingSourceFile);
|
|
170
|
+
}
|
|
171
|
+
return resolveRelativeSourceFile(moduleSpecifier, containingSourceFile);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=external-module-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-module-resolution.js","sourceRoot":"","sources":["../../../../../source/dead-code-eliminator/liveness/external-module-resolution.ts"],"names":[],"mappings":"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"}
|