Skip to content

Commit 6d68c53

Browse files
committed
fix(cli,build): correct warning suppression sources and harden the scanner
Deploy suppression now uses only the manifest externals (the actual image contents when the warning runs); configured externals like build.external no longer silence warnings for packages that are never installed. Dev suppression adds extension-declared packages and stays silent when those can't be determined (a hook throws, or an older additionalPackages lacks the declaration hook), so it never makes a false deploys-will-fail claim, and additionalPackages skips unparseable entries instead of throwing into dev startup. The lexer blanks regex-literal bodies and records quoted string spans so string contents can't false-positive, dynamic import("node:module") bindings and declare-then-assign variables are recognized, require functions exported from one file and imported into another are followed, dev rebuilds cache per-file scans by mtime and stat in parallel, and the dev/deploy pipelines share one warning builder.
1 parent 25df644 commit 6d68c53

1 file changed

Lines changed: 12 additions & 17 deletions

File tree

packages/cli-v3/src/dev/devSession.ts

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,11 @@ import {
1515
notifyExtensionOnBuildStart,
1616
resolvePluginsForContext,
1717
} from "../build/extensions.js";
18+
import { createExternalsBuildExtension, resolveAlwaysExternal } from "../build/externals.js";
1819
import {
19-
createExternalsBuildExtension,
20-
deployExternalMatchers,
21-
resolveAlwaysExternal,
22-
} from "../build/externals.js";
23-
import {
20+
collectCreateRequireWarningMessages,
2421
CreateRequireCollector,
25-
createRequireUsageToWarning,
26-
unavailableCreateRequireUsages,
22+
extensionInstalledPackageMatchers,
2723
} from "../build/createRequireWarnings.js";
2824
import { type DevCommandOptions } from "../commands/dev.js";
2925
import { eventBus } from "../utilities/eventBus.js";
@@ -93,7 +89,7 @@ export async function startDevSession({
9389

9490
const externalsExtension = createExternalsBuildExtension("dev", rawConfig, alwaysExternal);
9591
const createRequireCollector = new CreateRequireCollector(rawConfig.workingDir);
96-
const externalMatchers = deployExternalMatchers(rawConfig, alwaysExternal);
92+
const extensionPackages = extensionInstalledPackageMatchers(rawConfig);
9793
const buildContext = createBuildContext("dev", rawConfig);
9894
buildContext.prependExtension(externalsExtension);
9995
await notifyExtensionOnBuildStart(buildContext);
@@ -126,16 +122,15 @@ export async function startDevSession({
126122

127123
buildManifest = await notifyExtensionOnBuildComplete(buildContext, buildManifest);
128124

129-
const missingWhenDeployed = unavailableCreateRequireUsages(
130-
createRequireCollector.usages,
131-
new Set((buildManifest.externals ?? []).map((external) => external.name)),
132-
externalMatchers
133-
);
125+
const createRequireWarnings = collectCreateRequireWarningMessages({
126+
usages: createRequireCollector.usages,
127+
buildManifest,
128+
extensionPackages,
129+
target: "dev",
130+
});
134131

135-
if (missingWhenDeployed.length > 0) {
136-
logBuildWarnings(
137-
missingWhenDeployed.map((usage) => createRequireUsageToWarning(usage, "dev"))
138-
);
132+
if (createRequireWarnings.length > 0) {
133+
logBuildWarnings(createRequireWarnings);
139134
}
140135

141136
try {

0 commit comments

Comments
 (0)