buninu 0.3.0 → 0.4.0
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/CHANGELOG.md +71 -0
- package/README.md +334 -37
- package/apps/bunmsh/CHANGELOG.md +262 -0
- package/apps/bunmsh/LICENSE +21 -0
- package/apps/bunmsh/LICENSE-MKSH +295 -0
- package/apps/bunmsh/PORTING.md +192 -0
- package/apps/bunmsh/README.md +801 -0
- package/apps/bunmsh/bunmsh +7 -0
- package/apps/bunmsh/bunshell.md +61 -0
- package/apps/bunmsh/help/README.md +1945 -0
- package/apps/bunmsh/help/alias.md +22 -0
- package/apps/bunmsh/help/basename.md +38 -0
- package/apps/bunmsh/help/builtin.md +25 -0
- package/apps/bunmsh/help/bun.md +27 -0
- package/apps/bunmsh/help/bunmsh.md +47 -0
- package/apps/bunmsh/help/cat.md +31 -0
- package/apps/bunmsh/help/catfancy.md +35 -0
- package/apps/bunmsh/help/cd.md +22 -0
- package/apps/bunmsh/help/chmod.md +27 -0
- package/apps/bunmsh/help/clear.md +21 -0
- package/apps/bunmsh/help/colon.md +22 -0
- package/apps/bunmsh/help/command.md +27 -0
- package/apps/bunmsh/help/cp.md +28 -0
- package/apps/bunmsh/help/cut.md +25 -0
- package/apps/bunmsh/help/date.md +25 -0
- package/apps/bunmsh/help/dirname.md +25 -0
- package/apps/bunmsh/help/echo.md +25 -0
- package/apps/bunmsh/help/env.md +27 -0
- package/apps/bunmsh/help/eval.md +22 -0
- package/apps/bunmsh/help/exec.md +22 -0
- package/apps/bunmsh/help/exit.md +21 -0
- package/apps/bunmsh/help/export.md +22 -0
- package/apps/bunmsh/help/false.md +22 -0
- package/apps/bunmsh/help/find.md +33 -0
- package/apps/bunmsh/help/getopts.md +28 -0
- package/apps/bunmsh/help/grep.md +34 -0
- package/apps/bunmsh/help/head.md +27 -0
- package/apps/bunmsh/help/kill.md +27 -0
- package/apps/bunmsh/help/ln.md +28 -0
- package/apps/bunmsh/help/ls.md +37 -0
- package/apps/bunmsh/help/lsbun.md +29 -0
- package/apps/bunmsh/help/lsfancy.md +37 -0
- package/apps/bunmsh/help/md5sum.md +21 -0
- package/apps/bunmsh/help/mkdir.md +27 -0
- package/apps/bunmsh/help/mktemp.md +26 -0
- package/apps/bunmsh/help/mv.md +26 -0
- package/apps/bunmsh/help/print.md +30 -0
- package/apps/bunmsh/help/printf.md +25 -0
- package/apps/bunmsh/help/pwd.md +21 -0
- package/apps/bunmsh/help/read.md +27 -0
- package/apps/bunmsh/help/readonly.md +27 -0
- package/apps/bunmsh/help/realpath.md +21 -0
- package/apps/bunmsh/help/rm.md +33 -0
- package/apps/bunmsh/help/rmdir.md +27 -0
- package/apps/bunmsh/help/sed.md +29 -0
- package/apps/bunmsh/help/seq.md +29 -0
- package/apps/bunmsh/help/serve.md +50 -0
- package/apps/bunmsh/help/set.md +26 -0
- package/apps/bunmsh/help/sha256sum.md +21 -0
- package/apps/bunmsh/help/shift.md +23 -0
- package/apps/bunmsh/help/sleep.md +25 -0
- package/apps/bunmsh/help/sort.md +29 -0
- package/apps/bunmsh/help/source.md +23 -0
- package/apps/bunmsh/help/tab.md +30 -0
- package/apps/bunmsh/help/tac.md +29 -0
- package/apps/bunmsh/help/tail.md +27 -0
- package/apps/bunmsh/help/tee.md +25 -0
- package/apps/bunmsh/help/test.md +30 -0
- package/apps/bunmsh/help/time.md +29 -0
- package/apps/bunmsh/help/touch.md +26 -0
- package/apps/bunmsh/help/tr.md +26 -0
- package/apps/bunmsh/help/true.md +22 -0
- package/apps/bunmsh/help/type.md +21 -0
- package/apps/bunmsh/help/umask.md +22 -0
- package/apps/bunmsh/help/unalias.md +28 -0
- package/apps/bunmsh/help/uname.md +31 -0
- package/apps/bunmsh/help/unset.md +28 -0
- package/apps/bunmsh/help/wc.md +27 -0
- package/apps/bunmsh/help/whence.md +26 -0
- package/apps/bunmsh/help/which.md +41 -0
- package/apps/bunmsh/help/yes.md +23 -0
- package/apps/bunmsh/package.json +26 -0
- package/apps/bunmsh/serve.js +468 -0
- package/apps/bunmsh/single-exe/README.md +402 -0
- package/apps/bunmsh/single-exe/assetsHelper.js +371 -0
- package/apps/bunmsh/single-exe/assetsLoader.mjs +85 -0
- package/apps/bunmsh/single-exe/assetsPacker.js +218 -0
- package/apps/bunmsh/single-exe/compiled.js +527 -0
- package/apps/bunmsh/single-exe/entry.mjs +17 -0
- package/apps/bunmsh/src/cat-fancy.js +117 -0
- package/apps/bunmsh/src/cat-operands.js +31 -0
- package/apps/bunmsh/src/completion.js +247 -0
- package/apps/bunmsh/src/environment.js +61 -0
- package/apps/bunmsh/src/fancy-ls.js +186 -0
- package/apps/bunmsh/src/find.js +119 -0
- package/apps/bunmsh/src/history.js +198 -0
- package/apps/bunmsh/src/main.js +776 -0
- package/apps/bunmsh/src/mouse.js +103 -0
- package/apps/bunmsh/src/shell.js +3557 -0
- package/apps/bunmsh/test/catfancy.test.js +102 -0
- package/apps/bunmsh/test/reference-source.sh +1 -0
- package/apps/bunmsh/test/reference.test.js +677 -0
- package/apps/bunmsh/test/serve/README.md +3 -0
- package/apps/bunmsh/test/serve/bad.json +1 -0
- package/apps/bunmsh/test/serve/data.json +1 -0
- package/apps/bunmsh/test/serve/data.json5 +1 -0
- package/apps/bunmsh/test/serve/data.jsonc +2 -0
- package/apps/bunmsh/test/serve/data.jsonl +2 -0
- package/apps/bunmsh/test/serve/data.ndjson +1 -0
- package/apps/bunmsh/test/serve/data.toml +3 -0
- package/apps/bunmsh/test/serve/data.ts +15 -0
- package/apps/bunmsh/test/serve/data.xml +1 -0
- package/apps/bunmsh/test/serve/data.yaml +3 -0
- package/apps/bunmsh/test/serve/data.yml +1 -0
- package/apps/bunmsh/test/serve.test.js +241 -0
- package/apps/bunmsh/test/shell.test.js +1778 -0
- package/apps/bunmsh/test/t.sh +12 -0
- package/apps/cmdlist +6 -1
- package/apps/jsgotty/gotty.js +65 -76
- package/apps/jsgotty/package.json +6 -1
- package/apps/jsgotty/single-exe/README.md +358 -54
- package/apps/jsgotty/single-exe/assetsHelper.js +293 -12
- package/apps/jsgotty/single-exe/assetsLoader.mjs +1 -1
- package/apps/jsgotty/single-exe/assetsPacker.js +218 -0
- package/apps/jsgotty/single-exe/compiled.js +379 -19
- package/apps/jsgotty/single-exe/entry.mjs +16 -2
- package/apps/jsgotty/zmodem-node.js +14 -12
- package/apps/jsmdcui/CHANGELOG.md +56 -0
- package/apps/jsmdcui/package.json +12 -2
- package/apps/jsmdcui/single-exe/README.md +298 -375
- package/apps/jsmdcui/single-exe/assetsHelper.js +198 -18
- package/apps/jsmdcui/single-exe/assetsLoader.mjs +1 -1
- package/apps/jsmdcui/single-exe/assetsPacker.js +218 -0
- package/apps/jsmdcui/single-exe/compiled.js +291 -5
- package/apps/jsmdcui/single-exe/entry.mjs +7 -0
- package/apps/jsmdcui/src/index.js +11 -8
- package/apps/jsmdcui/tests/jmigt.js +16 -0
- package/bin/bunmsh.bat +3 -0
- package/bin/bunmsh.sh +5 -0
- package/bin/init.js +48 -5
- package/bin/install.js +541 -0
- package/package.json +4 -2
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { colorJson, fenceFor, main, renderFancy } from "../src/cat-fancy.js";
|
|
6
|
+
|
|
7
|
+
describe("catfancy", () => {
|
|
8
|
+
test("parses data formats into colored pretty JSON", () => {
|
|
9
|
+
for (const [name, source] of [
|
|
10
|
+
["data.json", '{"name":"bun","count":2}'],
|
|
11
|
+
["data.json5", "{name: 'bun', count: 2}"],
|
|
12
|
+
["data.toml", 'name = "bun"\ncount = 2\n'],
|
|
13
|
+
]) {
|
|
14
|
+
const output = renderFancy(source, name);
|
|
15
|
+
expect(output).toContain("\x1b[38;2;");
|
|
16
|
+
expect(Bun.stripANSI(output)).toBe('{\n "name": "bun",\n "count": 2\n}\n');
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("uses Bun markdown ANSI rendering with hyperlinks", () => {
|
|
21
|
+
const output = renderFancy("# Docs\n\n[Site](https://example.com)\n", "README.md");
|
|
22
|
+
expect(output).toContain("\x1b]8;;https://example.com");
|
|
23
|
+
expect(Bun.stripANSI(output)).toContain("Docs");
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test("leaves files without a preview format unchanged", () => {
|
|
27
|
+
expect(renderFancy("plain text\n", "notes.txt")).toBe("plain text\n");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("wraps JS-family files in a ```javascript fence and renders via markdown", () => {
|
|
31
|
+
for (const name of ["app.js", "app.mjs", "app.cjs", "app.jsx"]) {
|
|
32
|
+
const output = renderFancy("const x = 1;\n", name);
|
|
33
|
+
expect(output).toContain("\x1b[");
|
|
34
|
+
const stripped = Bun.stripANSI(output);
|
|
35
|
+
// The box border marks it as an actually-parsed fenced code block, not
|
|
36
|
+
// just source text that happens to contain the word "javascript".
|
|
37
|
+
expect(stripped).toContain("┌─ javascript");
|
|
38
|
+
expect(stripped).toContain("└─");
|
|
39
|
+
expect(stripped).toContain("const x = 1;");
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("wraps TS-family files in a ```typescript fence and renders via markdown", () => {
|
|
44
|
+
for (const name of ["app.ts", "app.mts", "app.cts", "app.tsx"]) {
|
|
45
|
+
const output = renderFancy("const x: number = 1;\n", name);
|
|
46
|
+
expect(output).toContain("\x1b[");
|
|
47
|
+
const stripped = Bun.stripANSI(output);
|
|
48
|
+
expect(stripped).toContain("┌─ typescript");
|
|
49
|
+
expect(stripped).toContain("└─");
|
|
50
|
+
expect(stripped).toContain("const x: number = 1;");
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test("fenceFor widens past the longest backtick run already in the source", () => {
|
|
55
|
+
expect(fenceFor("plain source, no backticks")).toBe("```");
|
|
56
|
+
expect(fenceFor("has `one` backtick pair")).toBe("```");
|
|
57
|
+
expect(fenceFor('has "```" a triple run')).toBe("````");
|
|
58
|
+
expect(fenceFor('has "````" a quadruple run')).toBe("`````");
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("a source ``` run doesn't prematurely close the widened fence", () => {
|
|
62
|
+
const source = 'const s = `` + "```" + `` ;\n';
|
|
63
|
+
expect(fenceFor(source)).toBe("````");
|
|
64
|
+
const output = renderFancy(source, "weird.js");
|
|
65
|
+
const stripped = Bun.stripANSI(output);
|
|
66
|
+
// Genuinely parsed as one fenced block (box border present), with the
|
|
67
|
+
// source's own ``` surviving as literal code content on its one content
|
|
68
|
+
// line -- not treated as a fence closer, and not left as raw unparsed
|
|
69
|
+
// markdown source.
|
|
70
|
+
expect(stripped).toContain("┌─ javascript");
|
|
71
|
+
expect(stripped).toContain("└─");
|
|
72
|
+
expect(stripped).toContain('│ const s = `` + "```" + `` ;');
|
|
73
|
+
expect(stripped.split("\n")).not.toContain("````");
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test("reads files relative to cwd and reports parser errors", async () => {
|
|
77
|
+
const directory = mkdtempSync(join(tmpdir(), "bunmsh-catfancy-"));
|
|
78
|
+
try {
|
|
79
|
+
await Bun.write(join(directory, "data.toml"), 'enabled = true\n');
|
|
80
|
+
await Bun.write(join(directory, "bad.json"), "{");
|
|
81
|
+
const good = await main(["catfancy", "data.toml"], directory);
|
|
82
|
+
expect(good.status).toBe(0);
|
|
83
|
+
expect(Bun.stripANSI(good.stdout)).toBe('{\n "enabled": true\n}\n');
|
|
84
|
+
const excluded = await main([
|
|
85
|
+
"catfancy", "--exclude", "*.json", "bad.json", "data.toml",
|
|
86
|
+
], directory);
|
|
87
|
+
expect(excluded.status).toBe(0);
|
|
88
|
+
expect(Bun.stripANSI(excluded.stdout)).toBe('{\n "enabled": true\n}\n');
|
|
89
|
+
const bad = await main(["catfancy", "bad.json"], directory);
|
|
90
|
+
expect(bad.status).toBe(1);
|
|
91
|
+
expect(bad.stderr).toContain("bunmsh: catfancy: bad.json:");
|
|
92
|
+
} finally {
|
|
93
|
+
rmSync(directory, { recursive: true, force: true });
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("colors JSON keys, strings, numbers, and constants", () => {
|
|
98
|
+
const output = colorJson('{"key":"value","n":1,"ok":true}');
|
|
99
|
+
expect((output.match(/\x1b\[38;2;/g) ?? []).length).toBeGreaterThanOrEqual(6);
|
|
100
|
+
expect(Bun.stripANSI(output)).toBe('{"key":"value","n":1,"ok":true}');
|
|
101
|
+
});
|
|
102
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
echo sourced:$BUNMSH_REFERENCE_SOURCE
|