aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alex Lam S.L <alexlamsl@gmail.com> 2023-01-30 10:33:13 +0200
committerGravatar GitHub <noreply@github.com> 2023-01-30 00:33:13 -0800
commit5c30983d5dd1fcf6c256feec119ed136b5dd408a (patch)
treeb09bb50d056f199ecdb76e385eb019646f99b127
parentc9ca729493298a11ef45b4d2b99f644e209aa518 (diff)
downloadbun-5c30983d5dd1fcf6c256feec119ed136b5dd408a.tar.gz
bun-5c30983d5dd1fcf6c256feec119ed136b5dd408a.tar.zst
bun-5c30983d5dd1fcf6c256feec119ed136b5dd408a.zip
[bunx] fix version parsing (#1937)
-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);
+});