Skip to content

Commit 690cee5

Browse files
committed
fix: packages option not respecting external/noExternal
1 parent 4b1ed0b commit 690cee5

File tree

7 files changed

+41
-16
lines changed

7 files changed

+41
-16
lines changed

packages/bunup/src/build.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ export async function build(
127127
env: resolvedEnv,
128128
ignoreDCEAnnotations: options.ignoreDCEAnnotations,
129129
emitDCEAnnotations: options.emitDCEAnnotations,
130-
packages: options.packages,
131130
jsx: options.jsx,
132131
// @ts-expect-error - compile option is a different interface in Bun.build api, but it's valid as is
133132
compile: options.compile,

packages/bunup/src/helpers/external.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import type { BuildOptions } from "../options";
2-
import { getPackageDeps } from "../utils/package";
2+
import { getPackageExternalDeps, getPackageAllDeps } from "../utils/package";
33

4-
function getPackageDepsPatterns(packageJson: Record<string, unknown> | null): RegExp[] {
5-
return getPackageDeps(packageJson).map((dep) => new RegExp(`^${dep}($|\\/|\\\\)`));
4+
function getDepsPatterns(deps: string[]): RegExp[] {
5+
return deps.map((dep) => new RegExp(`^${dep}($|\\/|\\\\)`));
66
}
77

88
function matchesPattern(path: string, pattern: string | RegExp): boolean {
@@ -14,7 +14,8 @@ export function isExternalFromPackageJson(
1414
options: BuildOptions,
1515
packageJson: Record<string, unknown> | null,
1616
): boolean | undefined {
17-
const packageDepsPatterns = getPackageDepsPatterns(packageJson);
17+
const packageExternalDepsPatterns = getDepsPatterns(getPackageExternalDeps(packageJson));
18+
const packageAllDepsPatterns = getDepsPatterns(getPackageAllDeps(packageJson));
1819

1920
if (options.packages === "bundle") {
2021
const explicitlyExternal = options.external?.some((pattern) => matchesPattern(path, pattern));
@@ -28,11 +29,11 @@ export function isExternalFromPackageJson(
2829
return false;
2930
}
3031

31-
return packageDepsPatterns.some((pattern) => pattern.test(path));
32+
return packageAllDepsPatterns.some((pattern) => pattern.test(path));
3233
}
3334

3435
const matchesExternalPattern =
35-
packageDepsPatterns.some((pattern) => pattern.test(path)) ||
36+
packageExternalDepsPatterns.some((pattern) => pattern.test(path)) ||
3637
options.external?.some((pattern) => matchesPattern(path, pattern));
3738

3839
const isExcludedFromExternal = options.noExternal?.some((pattern) =>

packages/bunup/src/utils/package.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export function getPackageDeps(packageJson: Record<string, unknown> | null): string[] {
1+
export function getPackageExternalDeps(packageJson: Record<string, unknown> | null): string[] {
22
if (!packageJson) return [];
33

44
return Array.from(
@@ -8,3 +8,15 @@ export function getPackageDeps(packageJson: Record<string, unknown> | null): str
88
]),
99
);
1010
}
11+
12+
export function getPackageAllDeps(packageJson: Record<string, unknown> | null): string[] {
13+
if (!packageJson) return [];
14+
15+
return Array.from(
16+
new Set([
17+
...Object.keys(packageJson.dependencies || {}),
18+
...Object.keys(packageJson.devDependencies || {}),
19+
...Object.keys(packageJson.peerDependencies || {}),
20+
]),
21+
);
22+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { defineConfig } from "../src";
22

33
export default defineConfig({
4-
entry: ["fixtures/nice/index.ts"],
4+
entry: ["fixtures/main.ts"],
55
});
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
import { fetch } from "undici";
1+
import { spinners } from "ora";
22

3-
fetch("");
3+
export { spinners };

packages/bunup/test/fixtures/nice/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/bunup/test/specs/utils.test.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
} from "../../src/utils/extension";
1010
import { cleanOutDir, isGlobPattern } from "../../src/utils/file";
1111
import { formatFileSize } from "../../src/utils/format";
12-
import { getPackageDeps } from "../../src/utils/package";
12+
import { getPackageAllDeps, getPackageExternalDeps } from "../../src/utils/package";
1313
import { cleanPath, getShortFilePath } from "../../src/utils/path";
1414

1515
describe("Utils", () => {
@@ -58,16 +58,30 @@ describe("Utils", () => {
5858
});
5959
});
6060

61-
describe("getPackageDeps", () => {
61+
describe("getPackageExternalDeps", () => {
6262
it("returns dependencies and peerDependencies", () => {
6363
const packageJson = {
6464
dependencies: { dep1: "1.0.0" },
6565
peerDependencies: { peerDep1: "^2.0.0" },
6666
};
67-
expect(getPackageDeps(packageJson)).toEqual(["dep1", "peerDep1"]);
67+
expect(getPackageExternalDeps(packageJson)).toEqual(["dep1", "peerDep1"]);
6868
});
6969
it("returns empty array for no dependencies", () => {
70-
expect(getPackageDeps(null)).toEqual([]);
70+
expect(getPackageExternalDeps(null)).toEqual([]);
71+
});
72+
});
73+
74+
describe("getPackageAllDeps", () => {
75+
it("returns dependencies, devDependencies, and peerDependencies", () => {
76+
const packageJson = {
77+
dependencies: { dep1: "1.0.0" },
78+
devDependencies: { dep1: "^1.1.0", devDep1: "^2.0.0" },
79+
peerDependencies: { peerDep1: "^3.0.0" },
80+
};
81+
expect(getPackageAllDeps(packageJson)).toEqual(["dep1", "devDep1", "peerDep1"]);
82+
});
83+
it("returns empty array for no dependencies", () => {
84+
expect(getPackageAllDeps(null)).toEqual([]);
7185
});
7286
});
7387

0 commit comments

Comments
 (0)