aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cli/bunx_command.zig5
-rw-r--r--src/install/install.zig1
-rw-r--r--src/install/lockfile.zig1
-rw-r--r--test/bun.js/install/bunx.test.ts64
4 files changed, 66 insertions, 5 deletions
diff --git a/src/cli/bunx_command.zig b/src/cli/bunx_command.zig
index 9c83c00ba..3548702ee 100644
--- a/src/cli/bunx_command.zig
+++ b/src/cli/bunx_command.zig
@@ -223,11 +223,10 @@ pub const BunxCommand = struct {
);
var PATH = this_bundler.env.map.get("PATH").?;
- const display_version: []const u8 =
- if (update_request.missing_version)
+ const display_version = if (update_request.version.literal.isEmpty())
"latest"
else
- update_request.version_buf;
+ update_request.version.literal.slice(update_request.version_buf);
const PATH_FOR_BIN_DIRS = PATH;
if (PATH.len > 0) {
diff --git a/src/install/install.zig b/src/install/install.zig
index d5ba59c4b..99cb9213d 100644
--- a/src/install/install.zig
+++ b/src/install/install.zig
@@ -5266,7 +5266,6 @@ pub const PackageManager = struct {
resolution: Resolution = .{},
resolved_name: String = .{},
is_aliased: bool = false,
- missing_version: bool = false,
failed: bool = false,
// This must be cloned to handle when the AST store resets
e_string: ?*JSAst.E.String = null,
diff --git a/src/install/lockfile.zig b/src/install/lockfile.zig
index b948557bf..339521c0a 100644
--- a/src/install/lockfile.zig
+++ b/src/install/lockfile.zig
@@ -708,7 +708,6 @@ pub fn clean(old: *Lockfile, updates: []PackageManager.UpdateRequest) !*Lockfile
updates[update_i].version = dep.version;
updates[update_i].resolution = resolutions[package_id];
updates[update_i].resolved_name = names[package_id];
- updates[update_i].missing_version = true;
}
}
}
diff --git a/test/bun.js/install/bunx.test.ts b/test/bun.js/install/bunx.test.ts
new file mode 100644
index 000000000..95fe3b2b9
--- /dev/null
+++ b/test/bun.js/install/bunx.test.ts
@@ -0,0 +1,64 @@
+import { spawn } from "bun";
+import {
+ afterEach,
+ beforeEach,
+ expect,
+ it,
+} from "bun:test";
+import { bunExe } from "bunExe";
+import { bunEnv as env } from "bunEnv";
+import { realpathSync } from "fs";
+import { mkdtemp, rm } from "fs/promises";
+import { tmpdir } from "os";
+import { join } from "path";
+
+let x_dir;
+
+beforeEach(async () => {
+ x_dir = realpathSync(await mkdtemp(join(tmpdir(), "bun-install.test")));
+});
+afterEach(async () => {
+ await rm(x_dir, { force: true, recursive: true });
+});
+
+it("should install and run default (latest) version", async () => {
+ const { stdout, stderr, exited } = spawn({
+ cmd: [bunExe(), "x", "uglify-js", "--compress"],
+ cwd: x_dir,
+ stdout: null,
+ stdin: new TextEncoder().encode("console.log(6 * 7);"),
+ stderr: "pipe",
+ env,
+ });
+ expect(stderr).toBeDefined();
+ const err = await new Response(stderr).text();
+ expect(err).not.toContain("error");
+ expect(stdout).toBeDefined();
+ const out = await new Response(stdout).text();
+ expect(out.split(/\r?\n/)).toEqual([
+ "console.log(42);",
+ "",
+ ]);
+ expect(await exited).toBe(0);
+});
+
+it("should install and run specified version", async () => {
+ const { stdout, stderr, exited } = spawn({
+ cmd: [bunExe(), "x", "uglify-js@3.14.1", "-v"],
+ cwd: x_dir,
+ stdout: null,
+ stdin: "pipe",
+ stderr: "pipe",
+ env,
+ });
+ expect(stderr).toBeDefined();
+ const err = await new Response(stderr).text();
+ expect(err).not.toContain("error");
+ expect(stdout).toBeDefined();
+ const out = await new Response(stdout).text();
+ expect(out.split(/\r?\n/)).toEqual([
+ "uglify-js 3.14.1",
+ "",
+ ]);
+ expect(await exited).toBe(0);
+});