shell-dsl 0.0.7 → 0.0.9
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/README.md +3 -1
- package/dist/cjs/index.cjs +14 -4
- package/dist/cjs/index.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/commands/awk/awk.cjs +276 -0
- package/dist/cjs/src/commands/awk/awk.cjs.map +10 -0
- package/dist/cjs/src/commands/break-continue/break-continue.cjs +56 -0
- package/dist/cjs/src/commands/break-continue/break-continue.cjs.map +10 -0
- package/dist/cjs/src/commands/cat/cat.cjs +57 -0
- package/dist/cjs/src/commands/cat/cat.cjs.map +10 -0
- package/dist/cjs/src/commands/cp/cp.cjs +126 -0
- package/dist/cjs/src/commands/cp/cp.cjs.map +10 -0
- package/dist/cjs/src/commands/echo/echo.cjs +50 -0
- package/dist/cjs/src/commands/echo/echo.cjs.map +10 -0
- package/dist/cjs/src/commands/find/find.cjs +251 -0
- package/dist/cjs/src/commands/find/find.cjs.map +10 -0
- package/dist/cjs/src/commands/grep/grep.cjs +510 -0
- package/dist/cjs/src/commands/grep/grep.cjs.map +10 -0
- package/dist/cjs/src/commands/head/head.cjs +95 -0
- package/dist/cjs/src/commands/head/head.cjs.map +10 -0
- package/dist/cjs/src/commands/index.cjs +136 -0
- package/dist/cjs/src/commands/index.cjs.map +10 -0
- package/dist/cjs/src/commands/ls/ls.cjs +119 -0
- package/dist/cjs/src/commands/ls/ls.cjs.map +10 -0
- package/dist/cjs/src/commands/mkdir/mkdir.cjs +64 -0
- package/dist/cjs/src/commands/mkdir/mkdir.cjs.map +10 -0
- package/dist/cjs/src/commands/mv/mv.cjs +118 -0
- package/dist/cjs/src/commands/mv/mv.cjs.map +10 -0
- package/dist/cjs/src/commands/pwd/pwd.cjs +41 -0
- package/dist/cjs/src/commands/pwd/pwd.cjs.map +10 -0
- package/dist/cjs/src/commands/rm/rm.cjs +82 -0
- package/dist/cjs/src/commands/rm/rm.cjs.map +10 -0
- package/dist/cjs/src/commands/sed/sed.cjs +295 -0
- package/dist/cjs/src/commands/sed/sed.cjs.map +10 -0
- package/dist/cjs/src/commands/sort/sort.cjs +105 -0
- package/dist/cjs/src/commands/sort/sort.cjs.map +10 -0
- package/dist/cjs/src/commands/tail/tail.cjs +95 -0
- package/dist/cjs/src/commands/tail/tail.cjs.map +10 -0
- package/dist/cjs/src/commands/tee/tee.cjs +65 -0
- package/dist/cjs/src/commands/tee/tee.cjs.map +10 -0
- package/dist/cjs/src/commands/test/test.cjs +148 -0
- package/dist/cjs/src/commands/test/test.cjs.map +10 -0
- package/dist/cjs/src/commands/touch/touch.cjs +70 -0
- package/dist/cjs/src/commands/touch/touch.cjs.map +10 -0
- package/dist/cjs/src/commands/tree/tree.cjs +161 -0
- package/dist/cjs/src/commands/tree/tree.cjs.map +10 -0
- package/dist/cjs/src/commands/true-false/true-false.cjs +43 -0
- package/dist/cjs/src/commands/true-false/true-false.cjs.map +10 -0
- package/dist/cjs/src/commands/uniq/uniq.cjs +116 -0
- package/dist/cjs/src/commands/uniq/uniq.cjs.map +10 -0
- package/dist/cjs/src/commands/wc/wc.cjs +116 -0
- package/dist/cjs/src/commands/wc/wc.cjs.map +10 -0
- package/dist/cjs/src/index.cjs +10 -2
- package/dist/cjs/src/index.cjs.map +3 -3
- package/dist/cjs/src/interpreter/index.cjs +4 -2
- package/dist/cjs/src/interpreter/index.cjs.map +3 -3
- package/dist/cjs/src/interpreter/interpreter.cjs +381 -2
- package/dist/cjs/src/interpreter/interpreter.cjs.map +3 -3
- package/dist/cjs/src/lexer/index.cjs +3 -2
- package/dist/cjs/src/lexer/index.cjs.map +3 -3
- package/dist/cjs/src/lexer/lexer.cjs +202 -7
- package/dist/cjs/src/lexer/lexer.cjs.map +3 -3
- package/dist/cjs/src/lexer/tokens.cjs +31 -2
- package/dist/cjs/src/lexer/tokens.cjs.map +3 -3
- package/dist/cjs/src/parser/ast.cjs +25 -1
- package/dist/cjs/src/parser/ast.cjs.map +3 -3
- package/dist/cjs/src/parser/index.cjs +7 -1
- package/dist/cjs/src/parser/index.cjs.map +3 -3
- package/dist/cjs/src/parser/parser.cjs +211 -7
- package/dist/cjs/src/parser/parser.cjs.map +3 -3
- package/dist/cjs/src/shell-dsl.cjs +2 -2
- package/dist/cjs/src/shell-dsl.cjs.map +3 -3
- package/dist/mjs/index.mjs +25 -5
- package/dist/mjs/index.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/mjs/src/commands/awk/awk.mjs +246 -0
- package/dist/mjs/src/commands/awk/awk.mjs.map +10 -0
- package/dist/mjs/src/commands/break-continue/break-continue.mjs +26 -0
- package/dist/mjs/src/commands/break-continue/break-continue.mjs.map +10 -0
- package/dist/mjs/src/commands/cat/cat.mjs +27 -0
- package/dist/mjs/src/commands/cat/cat.mjs.map +10 -0
- package/dist/mjs/src/commands/cp/cp.mjs +96 -0
- package/dist/mjs/src/commands/cp/cp.mjs.map +10 -0
- package/dist/mjs/src/commands/echo/echo.mjs +20 -0
- package/dist/mjs/src/commands/echo/echo.mjs.map +10 -0
- package/dist/mjs/src/commands/find/find.mjs +221 -0
- package/dist/mjs/src/commands/find/find.mjs.map +10 -0
- package/dist/mjs/src/commands/grep/grep.mjs +480 -0
- package/dist/mjs/src/commands/grep/grep.mjs.map +10 -0
- package/dist/mjs/src/commands/head/head.mjs +65 -0
- package/dist/mjs/src/commands/head/head.mjs.map +10 -0
- package/dist/mjs/src/commands/index.mjs +106 -0
- package/dist/mjs/src/commands/index.mjs.map +10 -0
- package/dist/mjs/src/commands/ls/ls.mjs +89 -0
- package/dist/mjs/src/commands/ls/ls.mjs.map +10 -0
- package/dist/mjs/src/commands/mkdir/mkdir.mjs +34 -0
- package/dist/mjs/src/commands/mkdir/mkdir.mjs.map +10 -0
- package/dist/mjs/src/commands/mv/mv.mjs +88 -0
- package/dist/mjs/src/commands/mv/mv.mjs.map +10 -0
- package/dist/mjs/src/commands/pwd/pwd.mjs +11 -0
- package/dist/mjs/src/commands/pwd/pwd.mjs.map +10 -0
- package/dist/mjs/src/commands/rm/rm.mjs +52 -0
- package/dist/mjs/src/commands/rm/rm.mjs.map +10 -0
- package/dist/mjs/src/commands/sed/sed.mjs +265 -0
- package/dist/mjs/src/commands/sed/sed.mjs.map +10 -0
- package/dist/mjs/src/commands/sort/sort.mjs +75 -0
- package/dist/mjs/src/commands/sort/sort.mjs.map +10 -0
- package/dist/mjs/src/commands/tail/tail.mjs +65 -0
- package/dist/mjs/src/commands/tail/tail.mjs.map +10 -0
- package/dist/mjs/src/commands/tee/tee.mjs +35 -0
- package/dist/mjs/src/commands/tee/tee.mjs.map +10 -0
- package/dist/mjs/src/commands/test/test.mjs +118 -0
- package/dist/mjs/src/commands/test/test.mjs.map +10 -0
- package/dist/mjs/src/commands/touch/touch.mjs +40 -0
- package/dist/mjs/src/commands/touch/touch.mjs.map +10 -0
- package/dist/mjs/src/commands/tree/tree.mjs +131 -0
- package/dist/mjs/src/commands/tree/tree.mjs.map +10 -0
- package/dist/mjs/src/commands/true-false/true-false.mjs +13 -0
- package/dist/mjs/src/commands/true-false/true-false.mjs.map +10 -0
- package/dist/mjs/src/commands/uniq/uniq.mjs +86 -0
- package/dist/mjs/src/commands/uniq/uniq.mjs.map +10 -0
- package/dist/mjs/src/commands/wc/wc.mjs +86 -0
- package/dist/mjs/src/commands/wc/wc.mjs.map +10 -0
- package/dist/mjs/src/index.mjs +18 -4
- package/dist/mjs/src/index.mjs.map +3 -3
- package/dist/mjs/src/interpreter/index.mjs +5 -3
- package/dist/mjs/src/interpreter/index.mjs.map +2 -2
- package/dist/mjs/src/interpreter/interpreter.mjs +381 -2
- package/dist/mjs/src/interpreter/interpreter.mjs.map +3 -3
- package/dist/mjs/src/lexer/index.mjs +4 -3
- package/dist/mjs/src/lexer/index.mjs.map +2 -2
- package/dist/mjs/src/lexer/lexer.mjs +202 -7
- package/dist/mjs/src/lexer/lexer.mjs.map +3 -3
- package/dist/mjs/src/lexer/tokens.mjs +31 -2
- package/dist/mjs/src/lexer/tokens.mjs.map +3 -3
- package/dist/mjs/src/parser/ast.mjs +25 -1
- package/dist/mjs/src/parser/ast.mjs.map +3 -3
- package/dist/mjs/src/parser/index.mjs +14 -2
- package/dist/mjs/src/parser/index.mjs.map +3 -3
- package/dist/mjs/src/parser/parser.mjs +211 -7
- package/dist/mjs/src/parser/parser.mjs.map +3 -3
- package/dist/mjs/src/shell-dsl.mjs +2 -2
- package/dist/mjs/src/shell-dsl.mjs.map +3 -3
- package/dist/types/index.d.ts +2 -2
- package/dist/types/src/commands/awk/awk.d.ts +2 -0
- package/dist/types/src/commands/break-continue/break-continue.d.ts +3 -0
- package/dist/types/src/commands/cat/cat.d.ts +2 -0
- package/dist/types/src/commands/cp/cp.d.ts +2 -0
- package/dist/types/src/commands/echo/echo.d.ts +2 -0
- package/dist/types/src/commands/find/find.d.ts +2 -0
- package/dist/types/src/commands/grep/grep.d.ts +2 -0
- package/dist/types/src/commands/head/head.d.ts +2 -0
- package/dist/types/src/commands/index.d.ts +25 -0
- package/dist/types/src/commands/ls/ls.d.ts +2 -0
- package/dist/types/src/commands/mkdir/mkdir.d.ts +2 -0
- package/dist/types/src/commands/mv/mv.d.ts +2 -0
- package/dist/types/src/commands/pwd/pwd.d.ts +2 -0
- package/dist/types/src/commands/rm/rm.d.ts +2 -0
- package/dist/types/src/commands/sed/sed.d.ts +2 -0
- package/dist/types/src/commands/sort/sort.d.ts +2 -0
- package/dist/types/src/commands/tail/tail.d.ts +2 -0
- package/dist/types/src/commands/tee/tee.d.ts +2 -0
- package/dist/types/{commands → src/commands/test}/test.d.ts +1 -1
- package/dist/types/src/commands/touch/touch.d.ts +2 -0
- package/dist/types/src/commands/tree/tree.d.ts +2 -0
- package/dist/types/{commands → src/commands/true-false}/true-false.d.ts +1 -1
- package/dist/types/src/commands/uniq/uniq.d.ts +2 -0
- package/dist/types/src/commands/wc/wc.d.ts +2 -0
- package/dist/types/src/index.d.ts +3 -3
- package/dist/types/src/interpreter/index.d.ts +1 -1
- package/dist/types/src/interpreter/interpreter.d.ts +18 -0
- package/dist/types/src/lexer/index.d.ts +2 -2
- package/dist/types/src/lexer/lexer.d.ts +11 -2
- package/dist/types/src/lexer/tokens.d.ts +16 -0
- package/dist/types/src/parser/ast.d.ts +46 -1
- package/dist/types/src/parser/index.d.ts +2 -2
- package/dist/types/src/parser/parser.d.ts +14 -0
- package/package.json +1 -1
- package/dist/types/commands/cat.d.ts +0 -2
- package/dist/types/commands/cp.d.ts +0 -2
- package/dist/types/commands/echo.d.ts +0 -2
- package/dist/types/commands/find.d.ts +0 -2
- package/dist/types/commands/grep.d.ts +0 -2
- package/dist/types/commands/head.d.ts +0 -2
- package/dist/types/commands/index.d.ts +0 -22
- package/dist/types/commands/ls.d.ts +0 -2
- package/dist/types/commands/mkdir.d.ts +0 -2
- package/dist/types/commands/mv.d.ts +0 -2
- package/dist/types/commands/pwd.d.ts +0 -2
- package/dist/types/commands/rm.d.ts +0 -2
- package/dist/types/commands/sort.d.ts +0 -2
- package/dist/types/commands/tail.d.ts +0 -2
- package/dist/types/commands/tee.d.ts +0 -2
- package/dist/types/commands/touch.d.ts +0 -2
- package/dist/types/commands/tree.d.ts +0 -2
- package/dist/types/commands/uniq.d.ts +0 -2
- package/dist/types/commands/wc.d.ts +0 -2
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// src/commands/cp/cp.ts
|
|
2
|
+
var cp = async (ctx) => {
|
|
3
|
+
let recursive = false;
|
|
4
|
+
let noClobber = false;
|
|
5
|
+
const paths = [];
|
|
6
|
+
for (const arg of ctx.args) {
|
|
7
|
+
if (arg === "-r" || arg === "-R" || arg === "--recursive") {
|
|
8
|
+
recursive = true;
|
|
9
|
+
} else if (arg === "-n" || arg === "--no-clobber") {
|
|
10
|
+
noClobber = true;
|
|
11
|
+
} else if (arg === "-f" || arg === "--force") {} else if (arg.startsWith("-")) {
|
|
12
|
+
for (const flag of arg.slice(1)) {
|
|
13
|
+
if (flag === "r" || flag === "R")
|
|
14
|
+
recursive = true;
|
|
15
|
+
else if (flag === "n")
|
|
16
|
+
noClobber = true;
|
|
17
|
+
else if (flag === "f") {}
|
|
18
|
+
}
|
|
19
|
+
} else {
|
|
20
|
+
paths.push(arg);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (paths.length < 2) {
|
|
24
|
+
await ctx.stderr.writeText(`cp: missing destination file operand
|
|
25
|
+
`);
|
|
26
|
+
return 1;
|
|
27
|
+
}
|
|
28
|
+
const sources = paths.slice(0, -1);
|
|
29
|
+
const dest = paths[paths.length - 1];
|
|
30
|
+
const destPath = ctx.fs.resolve(ctx.cwd, dest);
|
|
31
|
+
let destIsDir = false;
|
|
32
|
+
try {
|
|
33
|
+
const stat = await ctx.fs.stat(destPath);
|
|
34
|
+
destIsDir = stat.isDirectory();
|
|
35
|
+
} catch {}
|
|
36
|
+
if (sources.length > 1 && !destIsDir) {
|
|
37
|
+
await ctx.stderr.writeText(`cp: target '${dest}' is not a directory
|
|
38
|
+
`);
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
for (const source of sources) {
|
|
42
|
+
const srcPath = ctx.fs.resolve(ctx.cwd, source);
|
|
43
|
+
try {
|
|
44
|
+
const srcStat = await ctx.fs.stat(srcPath);
|
|
45
|
+
if (srcStat.isDirectory()) {
|
|
46
|
+
if (!recursive) {
|
|
47
|
+
await ctx.stderr.writeText(`cp: -r not specified; omitting directory '${source}'
|
|
48
|
+
`);
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
const finalDest = destIsDir ? ctx.fs.resolve(destPath, ctx.fs.basename(srcPath)) : destPath;
|
|
52
|
+
await copyDirectory(ctx, srcPath, finalDest, noClobber);
|
|
53
|
+
} else {
|
|
54
|
+
const finalDest = destIsDir ? ctx.fs.resolve(destPath, ctx.fs.basename(srcPath)) : destPath;
|
|
55
|
+
if (noClobber) {
|
|
56
|
+
const exists = await ctx.fs.exists(finalDest);
|
|
57
|
+
if (exists)
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const content = await ctx.fs.readFile(srcPath);
|
|
61
|
+
await ctx.fs.writeFile(finalDest, content);
|
|
62
|
+
}
|
|
63
|
+
} catch (err) {
|
|
64
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
65
|
+
await ctx.stderr.writeText(`cp: cannot stat '${source}': ${message}
|
|
66
|
+
`);
|
|
67
|
+
return 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return 0;
|
|
71
|
+
};
|
|
72
|
+
async function copyDirectory(ctx, src, dest, noClobber) {
|
|
73
|
+
await ctx.fs.mkdir(dest, { recursive: true });
|
|
74
|
+
const entries = await ctx.fs.readdir(src);
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
const srcPath = ctx.fs.resolve(src, entry);
|
|
77
|
+
const destPath = ctx.fs.resolve(dest, entry);
|
|
78
|
+
const stat = await ctx.fs.stat(srcPath);
|
|
79
|
+
if (stat.isDirectory()) {
|
|
80
|
+
await copyDirectory(ctx, srcPath, destPath, noClobber);
|
|
81
|
+
} else {
|
|
82
|
+
if (noClobber) {
|
|
83
|
+
const exists = await ctx.fs.exists(destPath);
|
|
84
|
+
if (exists)
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const content = await ctx.fs.readFile(srcPath);
|
|
88
|
+
await ctx.fs.writeFile(destPath, content);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
cp
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
//# debugId=D99DFD6940EFC55C64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/commands/cp/cp.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { Command } from \"../../types.mjs\";\n\nexport const cp: Command = async (ctx) => {\n let recursive = false;\n let noClobber = false;\n const paths: string[] = [];\n\n for (const arg of ctx.args) {\n if (arg === \"-r\" || arg === \"-R\" || arg === \"--recursive\") {\n recursive = true;\n } else if (arg === \"-n\" || arg === \"--no-clobber\") {\n noClobber = true;\n } else if (arg === \"-f\" || arg === \"--force\") {\n // Force is default behavior, just accept the flag\n } else if (arg.startsWith(\"-\")) {\n // Parse combined flags like -rn\n for (const flag of arg.slice(1)) {\n if (flag === \"r\" || flag === \"R\") recursive = true;\n else if (flag === \"n\") noClobber = true;\n else if (flag === \"f\") { /* force is default */ }\n }\n } else {\n paths.push(arg);\n }\n }\n\n if (paths.length < 2) {\n await ctx.stderr.writeText(\"cp: missing destination file operand\\n\");\n return 1;\n }\n\n const sources = paths.slice(0, -1);\n const dest = paths[paths.length - 1]!;\n const destPath = ctx.fs.resolve(ctx.cwd, dest);\n\n // Check if destination is a directory\n let destIsDir = false;\n try {\n const stat = await ctx.fs.stat(destPath);\n destIsDir = stat.isDirectory();\n } catch {\n // Destination doesn't exist\n }\n\n // If multiple sources, dest must be a directory\n if (sources.length > 1 && !destIsDir) {\n await ctx.stderr.writeText(`cp: target '${dest}' is not a directory\\n`);\n return 1;\n }\n\n for (const source of sources) {\n const srcPath = ctx.fs.resolve(ctx.cwd, source);\n\n try {\n const srcStat = await ctx.fs.stat(srcPath);\n\n if (srcStat.isDirectory()) {\n if (!recursive) {\n await ctx.stderr.writeText(`cp: -r not specified; omitting directory '${source}'\\n`);\n return 1;\n }\n // Copy directory recursively\n const finalDest = destIsDir\n ? ctx.fs.resolve(destPath, ctx.fs.basename(srcPath))\n : destPath;\n\n await copyDirectory(ctx, srcPath, finalDest, noClobber);\n } else {\n // Copy file\n const finalDest = destIsDir\n ? ctx.fs.resolve(destPath, ctx.fs.basename(srcPath))\n : destPath;\n\n // Check if dest exists and noClobber\n if (noClobber) {\n const exists = await ctx.fs.exists(finalDest);\n if (exists) continue; // Skip silently\n }\n\n const content = await ctx.fs.readFile(srcPath);\n await ctx.fs.writeFile(finalDest, content);\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await ctx.stderr.writeText(`cp: cannot stat '${source}': ${message}\\n`);\n return 1;\n }\n }\n\n return 0;\n};\n\nasync function copyDirectory(\n ctx: Parameters<Command>[0],\n src: string,\n dest: string,\n noClobber: boolean\n): Promise<void> {\n // Create destination directory\n await ctx.fs.mkdir(dest, { recursive: true });\n\n // Read source directory contents\n const entries = await ctx.fs.readdir(src);\n\n for (const entry of entries) {\n const srcPath = ctx.fs.resolve(src, entry);\n const destPath = ctx.fs.resolve(dest, entry);\n\n const stat = await ctx.fs.stat(srcPath);\n\n if (stat.isDirectory()) {\n await copyDirectory(ctx, srcPath, destPath, noClobber);\n } else {\n if (noClobber) {\n const exists = await ctx.fs.exists(destPath);\n if (exists) continue;\n }\n const content = await ctx.fs.readFile(srcPath);\n await ctx.fs.writeFile(destPath, content);\n }\n }\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "D99DFD6940EFC55C64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// src/commands/echo/echo.ts
|
|
2
|
+
var echo = async (ctx) => {
|
|
3
|
+
let output = ctx.args.join(" ");
|
|
4
|
+
let newline = true;
|
|
5
|
+
if (ctx.args[0] === "-n") {
|
|
6
|
+
newline = false;
|
|
7
|
+
output = ctx.args.slice(1).join(" ");
|
|
8
|
+
}
|
|
9
|
+
if (newline) {
|
|
10
|
+
output += `
|
|
11
|
+
`;
|
|
12
|
+
}
|
|
13
|
+
await ctx.stdout.writeText(output);
|
|
14
|
+
return 0;
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
echo
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
//# debugId=7DA64F60F07EE35564756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/commands/echo/echo.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { Command } from \"../../types.mjs\";\n\nexport const echo: Command = async (ctx) => {\n let output = ctx.args.join(\" \");\n let newline = true;\n\n // Handle -n flag (no newline)\n if (ctx.args[0] === \"-n\") {\n newline = false;\n output = ctx.args.slice(1).join(\" \");\n }\n\n if (newline) {\n output += \"\\n\";\n }\n\n await ctx.stdout.writeText(output);\n return 0;\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAEO,IAAM,OAAgB,OAAO,QAAQ;AAAA,EAC1C,IAAI,SAAS,IAAI,KAAK,KAAK,GAAG;AAAA,EAC9B,IAAI,UAAU;AAAA,EAGd,IAAI,IAAI,KAAK,OAAO,MAAM;AAAA,IACxB,UAAU;AAAA,IACV,SAAS,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,EACrC;AAAA,EAEA,IAAI,SAAS;AAAA,IACX,UAAU;AAAA;AAAA,EACZ;AAAA,EAEA,MAAM,IAAI,OAAO,UAAU,MAAM;AAAA,EACjC,OAAO;AAAA;",
|
|
8
|
+
"debugId": "7DA64F60F07EE35564756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// src/commands/find/find.ts
|
|
2
|
+
function matchGlob(pattern, str, caseInsensitive = false) {
|
|
3
|
+
if (caseInsensitive) {
|
|
4
|
+
pattern = pattern.toLowerCase();
|
|
5
|
+
str = str.toLowerCase();
|
|
6
|
+
}
|
|
7
|
+
let regex = "^";
|
|
8
|
+
for (let i = 0;i < pattern.length; i++) {
|
|
9
|
+
const c = pattern[i];
|
|
10
|
+
switch (c) {
|
|
11
|
+
case "*":
|
|
12
|
+
regex += ".*";
|
|
13
|
+
break;
|
|
14
|
+
case "?":
|
|
15
|
+
regex += ".";
|
|
16
|
+
break;
|
|
17
|
+
case "[": {
|
|
18
|
+
let j = i + 1;
|
|
19
|
+
if (pattern[j] === "!" || pattern[j] === "^")
|
|
20
|
+
j++;
|
|
21
|
+
if (pattern[j] === "]")
|
|
22
|
+
j++;
|
|
23
|
+
while (j < pattern.length && pattern[j] !== "]")
|
|
24
|
+
j++;
|
|
25
|
+
if (j >= pattern.length) {
|
|
26
|
+
regex += "\\[";
|
|
27
|
+
} else {
|
|
28
|
+
let charClass = pattern.slice(i, j + 1);
|
|
29
|
+
charClass = charClass.replace(/^\[!/, "[^");
|
|
30
|
+
regex += charClass;
|
|
31
|
+
i = j;
|
|
32
|
+
}
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
case ".":
|
|
36
|
+
case "^":
|
|
37
|
+
case "$":
|
|
38
|
+
case "+":
|
|
39
|
+
case "{":
|
|
40
|
+
case "}":
|
|
41
|
+
case "(":
|
|
42
|
+
case ")":
|
|
43
|
+
case "|":
|
|
44
|
+
case "\\":
|
|
45
|
+
regex += "\\" + c;
|
|
46
|
+
break;
|
|
47
|
+
default:
|
|
48
|
+
regex += c;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
regex += "$";
|
|
52
|
+
try {
|
|
53
|
+
return new RegExp(regex).test(str);
|
|
54
|
+
} catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
var find = async (ctx) => {
|
|
59
|
+
const args = [...ctx.args];
|
|
60
|
+
const paths = [];
|
|
61
|
+
const options = {};
|
|
62
|
+
let i = 0;
|
|
63
|
+
while (i < args.length && !args[i].startsWith("-")) {
|
|
64
|
+
paths.push(args[i]);
|
|
65
|
+
i++;
|
|
66
|
+
}
|
|
67
|
+
if (paths.length === 0) {
|
|
68
|
+
paths.push(".");
|
|
69
|
+
}
|
|
70
|
+
while (i < args.length) {
|
|
71
|
+
const arg = args[i];
|
|
72
|
+
if (arg === "-name") {
|
|
73
|
+
i++;
|
|
74
|
+
if (i >= args.length) {
|
|
75
|
+
await ctx.stderr.writeText(`find: missing argument to '-name'
|
|
76
|
+
`);
|
|
77
|
+
return 1;
|
|
78
|
+
}
|
|
79
|
+
options.namePattern = args[i];
|
|
80
|
+
options.nameIgnoreCase = false;
|
|
81
|
+
} else if (arg === "-iname") {
|
|
82
|
+
i++;
|
|
83
|
+
if (i >= args.length) {
|
|
84
|
+
await ctx.stderr.writeText(`find: missing argument to '-iname'
|
|
85
|
+
`);
|
|
86
|
+
return 1;
|
|
87
|
+
}
|
|
88
|
+
options.namePattern = args[i];
|
|
89
|
+
options.nameIgnoreCase = true;
|
|
90
|
+
} else if (arg === "-type") {
|
|
91
|
+
i++;
|
|
92
|
+
if (i >= args.length) {
|
|
93
|
+
await ctx.stderr.writeText(`find: missing argument to '-type'
|
|
94
|
+
`);
|
|
95
|
+
return 1;
|
|
96
|
+
}
|
|
97
|
+
const typeArg = args[i];
|
|
98
|
+
if (typeArg !== "f" && typeArg !== "d") {
|
|
99
|
+
await ctx.stderr.writeText(`find: Unknown argument to -type: ${typeArg}
|
|
100
|
+
`);
|
|
101
|
+
return 1;
|
|
102
|
+
}
|
|
103
|
+
options.type = typeArg;
|
|
104
|
+
} else if (arg === "-maxdepth") {
|
|
105
|
+
i++;
|
|
106
|
+
if (i >= args.length) {
|
|
107
|
+
await ctx.stderr.writeText(`find: missing argument to '-maxdepth'
|
|
108
|
+
`);
|
|
109
|
+
return 1;
|
|
110
|
+
}
|
|
111
|
+
const depth = parseInt(args[i], 10);
|
|
112
|
+
if (isNaN(depth) || depth < 0) {
|
|
113
|
+
await ctx.stderr.writeText(`find: Invalid argument '${args[i]}' to -maxdepth
|
|
114
|
+
`);
|
|
115
|
+
return 1;
|
|
116
|
+
}
|
|
117
|
+
options.maxDepth = depth;
|
|
118
|
+
} else if (arg === "-mindepth") {
|
|
119
|
+
i++;
|
|
120
|
+
if (i >= args.length) {
|
|
121
|
+
await ctx.stderr.writeText(`find: missing argument to '-mindepth'
|
|
122
|
+
`);
|
|
123
|
+
return 1;
|
|
124
|
+
}
|
|
125
|
+
const depth = parseInt(args[i], 10);
|
|
126
|
+
if (isNaN(depth) || depth < 0) {
|
|
127
|
+
await ctx.stderr.writeText(`find: Invalid argument '${args[i]}' to -mindepth
|
|
128
|
+
`);
|
|
129
|
+
return 1;
|
|
130
|
+
}
|
|
131
|
+
options.minDepth = depth;
|
|
132
|
+
} else if (arg.startsWith("-")) {
|
|
133
|
+
await ctx.stderr.writeText(`find: unknown predicate '${arg}'
|
|
134
|
+
`);
|
|
135
|
+
return 1;
|
|
136
|
+
} else {
|
|
137
|
+
paths.push(arg);
|
|
138
|
+
}
|
|
139
|
+
i++;
|
|
140
|
+
}
|
|
141
|
+
let hasError = false;
|
|
142
|
+
for (const startPath of paths) {
|
|
143
|
+
const resolvedStart = ctx.fs.resolve(ctx.cwd, startPath);
|
|
144
|
+
let stat;
|
|
145
|
+
try {
|
|
146
|
+
stat = await ctx.fs.stat(resolvedStart);
|
|
147
|
+
} catch {
|
|
148
|
+
await ctx.stderr.writeText(`find: '${startPath}': No such file or directory
|
|
149
|
+
`);
|
|
150
|
+
hasError = true;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
async function traverse(path, displayPath, depth) {
|
|
154
|
+
if (options.maxDepth !== undefined && depth > options.maxDepth) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
let entryStat;
|
|
158
|
+
try {
|
|
159
|
+
entryStat = await ctx.fs.stat(path);
|
|
160
|
+
} catch {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const isDir = entryStat.isDirectory();
|
|
164
|
+
const isFile = entryStat.isFile();
|
|
165
|
+
const basename = ctx.fs.basename(path);
|
|
166
|
+
let matches = true;
|
|
167
|
+
if (options.type === "f" && !isFile) {
|
|
168
|
+
matches = false;
|
|
169
|
+
} else if (options.type === "d" && !isDir) {
|
|
170
|
+
matches = false;
|
|
171
|
+
}
|
|
172
|
+
if (matches && options.namePattern !== undefined) {
|
|
173
|
+
if (!matchGlob(options.namePattern, basename, options.nameIgnoreCase)) {
|
|
174
|
+
matches = false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (matches && (options.minDepth === undefined || depth >= options.minDepth)) {
|
|
178
|
+
await ctx.stdout.writeText(displayPath + `
|
|
179
|
+
`);
|
|
180
|
+
}
|
|
181
|
+
if (isDir) {
|
|
182
|
+
try {
|
|
183
|
+
const entries = await ctx.fs.readdir(path);
|
|
184
|
+
entries.sort();
|
|
185
|
+
for (const entry of entries) {
|
|
186
|
+
const childPath = ctx.fs.resolve(path, entry);
|
|
187
|
+
const childDisplayPath = displayPath === "." ? entry : `${displayPath}/${entry}`;
|
|
188
|
+
await traverse(childPath, childDisplayPath, depth + 1);
|
|
189
|
+
}
|
|
190
|
+
} catch {}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (stat.isFile()) {
|
|
194
|
+
let matches = true;
|
|
195
|
+
if (options.type === "d") {
|
|
196
|
+
matches = false;
|
|
197
|
+
}
|
|
198
|
+
if (matches && options.namePattern !== undefined) {
|
|
199
|
+
const basename = ctx.fs.basename(resolvedStart);
|
|
200
|
+
if (!matchGlob(options.namePattern, basename, options.nameIgnoreCase)) {
|
|
201
|
+
matches = false;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (options.maxDepth !== undefined && options.maxDepth < 0) {
|
|
205
|
+
matches = false;
|
|
206
|
+
}
|
|
207
|
+
if (matches && (options.minDepth === undefined || options.minDepth <= 0)) {
|
|
208
|
+
await ctx.stdout.writeText(startPath + `
|
|
209
|
+
`);
|
|
210
|
+
}
|
|
211
|
+
} else {
|
|
212
|
+
await traverse(resolvedStart, startPath, 0);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return hasError ? 1 : 0;
|
|
216
|
+
};
|
|
217
|
+
export {
|
|
218
|
+
find
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
//# debugId=0DD0859E30BDE7B964756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/commands/find/find.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { Command } from \"../../types.mjs\";\n\n/**\n * Simple glob pattern matching (fnmatch-style)\n * Supports: * (any chars), ? (single char), [...] (character class)\n */\nfunction matchGlob(pattern: string, str: string, caseInsensitive = false): boolean {\n if (caseInsensitive) {\n pattern = pattern.toLowerCase();\n str = str.toLowerCase();\n }\n\n // Convert glob to regex\n let regex = \"^\";\n for (let i = 0; i < pattern.length; i++) {\n const c = pattern[i]!;\n switch (c) {\n case \"*\":\n regex += \".*\";\n break;\n case \"?\":\n regex += \".\";\n break;\n case \"[\": {\n // Find closing bracket\n let j = i + 1;\n // Handle negation\n if (pattern[j] === \"!\" || pattern[j] === \"^\") j++;\n // Handle ] as first char in class\n if (pattern[j] === \"]\") j++;\n while (j < pattern.length && pattern[j] !== \"]\") j++;\n if (j >= pattern.length) {\n // No closing bracket, treat [ as literal\n regex += \"\\\\[\";\n } else {\n let charClass = pattern.slice(i, j + 1);\n // Convert ! to ^ for negation in regex\n charClass = charClass.replace(/^\\[!/, \"[^\");\n regex += charClass;\n i = j;\n }\n break;\n }\n case \".\":\n case \"^\":\n case \"$\":\n case \"+\":\n case \"{\":\n case \"}\":\n case \"(\":\n case \")\":\n case \"|\":\n case \"\\\\\":\n regex += \"\\\\\" + c;\n break;\n default:\n regex += c;\n }\n }\n regex += \"$\";\n\n try {\n return new RegExp(regex).test(str);\n } catch {\n return false;\n }\n}\n\ninterface FindOptions {\n namePattern?: string;\n nameIgnoreCase?: boolean;\n type?: \"f\" | \"d\";\n maxDepth?: number;\n minDepth?: number;\n}\n\nexport const find: Command = async (ctx) => {\n const args = [...ctx.args];\n const paths: string[] = [];\n const options: FindOptions = {};\n\n // Parse arguments: paths come before first flag, then expressions\n let i = 0;\n\n // Collect paths (args before first -)\n while (i < args.length && !args[i]!.startsWith(\"-\")) {\n paths.push(args[i]!);\n i++;\n }\n\n // Default to current directory if no paths\n if (paths.length === 0) {\n paths.push(\".\");\n }\n\n // Parse expression flags\n while (i < args.length) {\n const arg = args[i]!;\n\n if (arg === \"-name\") {\n i++;\n if (i >= args.length) {\n await ctx.stderr.writeText(\"find: missing argument to '-name'\\n\");\n return 1;\n }\n options.namePattern = args[i]!;\n options.nameIgnoreCase = false;\n } else if (arg === \"-iname\") {\n i++;\n if (i >= args.length) {\n await ctx.stderr.writeText(\"find: missing argument to '-iname'\\n\");\n return 1;\n }\n options.namePattern = args[i]!;\n options.nameIgnoreCase = true;\n } else if (arg === \"-type\") {\n i++;\n if (i >= args.length) {\n await ctx.stderr.writeText(\"find: missing argument to '-type'\\n\");\n return 1;\n }\n const typeArg = args[i]!;\n if (typeArg !== \"f\" && typeArg !== \"d\") {\n await ctx.stderr.writeText(`find: Unknown argument to -type: ${typeArg}\\n`);\n return 1;\n }\n options.type = typeArg;\n } else if (arg === \"-maxdepth\") {\n i++;\n if (i >= args.length) {\n await ctx.stderr.writeText(\"find: missing argument to '-maxdepth'\\n\");\n return 1;\n }\n const depth = parseInt(args[i]!, 10);\n if (isNaN(depth) || depth < 0) {\n await ctx.stderr.writeText(`find: Invalid argument '${args[i]}' to -maxdepth\\n`);\n return 1;\n }\n options.maxDepth = depth;\n } else if (arg === \"-mindepth\") {\n i++;\n if (i >= args.length) {\n await ctx.stderr.writeText(\"find: missing argument to '-mindepth'\\n\");\n return 1;\n }\n const depth = parseInt(args[i]!, 10);\n if (isNaN(depth) || depth < 0) {\n await ctx.stderr.writeText(`find: Invalid argument '${args[i]}' to -mindepth\\n`);\n return 1;\n }\n options.minDepth = depth;\n } else if (arg.startsWith(\"-\")) {\n await ctx.stderr.writeText(`find: unknown predicate '${arg}'\\n`);\n return 1;\n } else {\n // This shouldn't happen since paths are parsed first, but treat as path\n paths.push(arg);\n }\n\n i++;\n }\n\n let hasError = false;\n\n // Process each starting path\n for (const startPath of paths) {\n const resolvedStart = ctx.fs.resolve(ctx.cwd, startPath);\n\n // Check if path exists\n let stat;\n try {\n stat = await ctx.fs.stat(resolvedStart);\n } catch {\n await ctx.stderr.writeText(`find: '${startPath}': No such file or directory\\n`);\n hasError = true;\n continue;\n }\n\n // Recursive traversal function\n async function traverse(path: string, displayPath: string, depth: number): Promise<void> {\n // Check maxdepth\n if (options.maxDepth !== undefined && depth > options.maxDepth) {\n return;\n }\n\n let entryStat;\n try {\n entryStat = await ctx.fs.stat(path);\n } catch {\n return;\n }\n\n const isDir = entryStat.isDirectory();\n const isFile = entryStat.isFile();\n const basename = ctx.fs.basename(path);\n\n // Check if this entry matches filters\n let matches = true;\n\n // Type filter\n if (options.type === \"f\" && !isFile) {\n matches = false;\n } else if (options.type === \"d\" && !isDir) {\n matches = false;\n }\n\n // Name filter (only check basename)\n if (matches && options.namePattern !== undefined) {\n if (!matchGlob(options.namePattern, basename, options.nameIgnoreCase)) {\n matches = false;\n }\n }\n\n // Output if matches and above mindepth\n if (matches && (options.minDepth === undefined || depth >= options.minDepth)) {\n await ctx.stdout.writeText(displayPath + \"\\n\");\n }\n\n // Recurse into directories\n if (isDir) {\n try {\n const entries = await ctx.fs.readdir(path);\n entries.sort();\n for (const entry of entries) {\n const childPath = ctx.fs.resolve(path, entry);\n const childDisplayPath = displayPath === \".\" ? entry : `${displayPath}/${entry}`;\n await traverse(childPath, childDisplayPath, depth + 1);\n }\n } catch {\n // Ignore errors reading directory contents\n }\n }\n }\n\n // Start traversal\n // For a single file, it's at depth 0\n // For a directory, the directory itself is depth 0, contents are depth 1+\n if (stat.isFile()) {\n // Starting from a file - depth 0\n let matches = true;\n\n if (options.type === \"d\") {\n matches = false;\n }\n\n if (matches && options.namePattern !== undefined) {\n const basename = ctx.fs.basename(resolvedStart);\n if (!matchGlob(options.namePattern, basename, options.nameIgnoreCase)) {\n matches = false;\n }\n }\n\n if (options.maxDepth !== undefined && options.maxDepth < 0) {\n matches = false;\n }\n\n if (matches && (options.minDepth === undefined || options.minDepth <= 0)) {\n await ctx.stdout.writeText(startPath + \"\\n\");\n }\n } else {\n await traverse(resolvedStart, startPath, 0);\n }\n }\n\n return hasError ? 1 : 0;\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "0DD0859E30BDE7B964756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|