shell-dsl 0.0.20 → 0.0.22
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 +2 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/commands/cat/cat.cjs +106 -7
- package/dist/cjs/src/commands/cat/cat.cjs.map +3 -3
- package/dist/cjs/src/commands/cut/cut.cjs +188 -0
- package/dist/cjs/src/commands/cut/cut.cjs.map +10 -0
- package/dist/cjs/src/commands/index.cjs +6 -2
- package/dist/cjs/src/commands/index.cjs.map +3 -3
- package/dist/cjs/src/commands/sed/sed.cjs +160 -70
- package/dist/cjs/src/commands/sed/sed.cjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/mjs/src/commands/cat/cat.mjs +106 -7
- package/dist/mjs/src/commands/cat/cat.mjs.map +3 -3
- package/dist/mjs/src/commands/cut/cut.mjs +158 -0
- package/dist/mjs/src/commands/cut/cut.mjs.map +10 -0
- package/dist/mjs/src/commands/index.mjs +6 -2
- package/dist/mjs/src/commands/index.mjs.map +3 -3
- package/dist/mjs/src/commands/sed/sed.mjs +160 -70
- package/dist/mjs/src/commands/sed/sed.mjs.map +3 -3
- package/dist/types/src/commands/cut/cut.d.ts +2 -0
- package/dist/types/src/commands/index.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -496,7 +496,7 @@ import { builtinCommands } from "shell-dsl/commands";
|
|
|
496
496
|
Or import individually:
|
|
497
497
|
|
|
498
498
|
```ts
|
|
499
|
-
import { echo, cat, grep, wc, cp, mv, touch, tee, tree, find, sed, awk } from "shell-dsl/commands";
|
|
499
|
+
import { echo, cat, grep, wc, cp, mv, touch, tee, tree, find, sed, awk, cut } from "shell-dsl/commands";
|
|
500
500
|
```
|
|
501
501
|
|
|
502
502
|
| Command | Description |
|
|
@@ -521,6 +521,7 @@ import { echo, cat, grep, wc, cp, mv, touch, tee, tree, find, sed, awk } from "s
|
|
|
521
521
|
| `find` | Search for files (`-name`, `-iname`, `-type f\|d`, `-maxdepth`, `-mindepth`) |
|
|
522
522
|
| `sed` | Stream editor (`s///`, `d`, `p`, `-n`, `-e`) |
|
|
523
523
|
| `awk` | Pattern scanning (`{print $1}`, `-F`, `NF`, `NR`) |
|
|
524
|
+
| `cut` | Select fields/characters (`-f`, `-d`, `-c`, `-b`, `-s`, `--complement`) |
|
|
524
525
|
| `test` / `[` | File and string tests (`-f`, `-d`, `-e`, `-z`, `-n`, `=`, `!=`) |
|
|
525
526
|
| `true` | Exit with code 0 |
|
|
526
527
|
| `false` | Exit with code 1 |
|
package/dist/cjs/package.json
CHANGED
|
@@ -35,10 +35,69 @@ module.exports = __toCommonJS(exports_cat);
|
|
|
35
35
|
var import_flag_parser = require("../../utils/flag-parser.cjs");
|
|
36
36
|
var spec = {
|
|
37
37
|
name: "cat",
|
|
38
|
-
flags: [
|
|
39
|
-
|
|
38
|
+
flags: [
|
|
39
|
+
{ short: "A", long: "show-all" },
|
|
40
|
+
{ short: "b", long: "number-nonblank" },
|
|
41
|
+
{ short: "E", long: "show-ends" },
|
|
42
|
+
{ short: "n", long: "number" },
|
|
43
|
+
{ short: "T", long: "show-tabs" },
|
|
44
|
+
{ short: "v", long: "show-nonprinting" }
|
|
45
|
+
],
|
|
46
|
+
usage: "cat [-AbEnTv] [file ...]"
|
|
40
47
|
};
|
|
41
|
-
var
|
|
48
|
+
var defaultFlags = {
|
|
49
|
+
A: false,
|
|
50
|
+
b: false,
|
|
51
|
+
E: false,
|
|
52
|
+
n: false,
|
|
53
|
+
T: false,
|
|
54
|
+
v: false
|
|
55
|
+
};
|
|
56
|
+
var parser = import_flag_parser.createFlagParser(spec, defaultFlags, (flags, flagDef) => {
|
|
57
|
+
if (flagDef.short) {
|
|
58
|
+
flags[flagDef.short] = true;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
function showNonPrintingChar(charCode) {
|
|
62
|
+
if (charCode === 9) {
|
|
63
|
+
return "\t";
|
|
64
|
+
} else if (charCode === 10) {
|
|
65
|
+
return `
|
|
66
|
+
`;
|
|
67
|
+
} else if (charCode < 32) {
|
|
68
|
+
return "^" + String.fromCharCode(charCode + 64);
|
|
69
|
+
} else if (charCode === 127) {
|
|
70
|
+
return "^?";
|
|
71
|
+
} else if (charCode >= 128 && charCode < 160) {
|
|
72
|
+
return "M-^" + String.fromCharCode(charCode - 128 + 64);
|
|
73
|
+
} else if (charCode >= 160 && charCode < 255) {
|
|
74
|
+
return "M-" + String.fromCharCode(charCode - 128);
|
|
75
|
+
} else if (charCode === 255) {
|
|
76
|
+
return "M-^?";
|
|
77
|
+
}
|
|
78
|
+
return String.fromCharCode(charCode);
|
|
79
|
+
}
|
|
80
|
+
function processLine(line, flags) {
|
|
81
|
+
let result = "";
|
|
82
|
+
for (let i = 0;i < line.length; i++) {
|
|
83
|
+
const char = line[i];
|
|
84
|
+
const charCode = char.charCodeAt(0);
|
|
85
|
+
if (flags.T && charCode === 9) {
|
|
86
|
+
result += "^I";
|
|
87
|
+
} else if (flags.v && (charCode < 32 || charCode >= 127) && charCode !== 9 && charCode !== 10) {
|
|
88
|
+
result += showNonPrintingChar(charCode);
|
|
89
|
+
} else {
|
|
90
|
+
result += char;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (flags.E) {
|
|
94
|
+
result += "$";
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
function formatLineNumber(num) {
|
|
99
|
+
return num.toString().padStart(6, " ") + "\t";
|
|
100
|
+
}
|
|
42
101
|
var cat = async (ctx) => {
|
|
43
102
|
const result = parser.parse(ctx.args);
|
|
44
103
|
if (result.error) {
|
|
@@ -46,16 +105,56 @@ var cat = async (ctx) => {
|
|
|
46
105
|
return 1;
|
|
47
106
|
}
|
|
48
107
|
const files = result.args;
|
|
108
|
+
const flags = { ...result.flags };
|
|
109
|
+
if (flags.A) {
|
|
110
|
+
flags.v = true;
|
|
111
|
+
flags.E = true;
|
|
112
|
+
flags.T = true;
|
|
113
|
+
}
|
|
114
|
+
const needsProcessing = flags.n || flags.b || flags.E || flags.T || flags.v;
|
|
115
|
+
let lineNumber = 1;
|
|
116
|
+
const processContent = async (content) => {
|
|
117
|
+
if (!needsProcessing) {
|
|
118
|
+
await ctx.stdout.write(new Uint8Array(content));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const text = Buffer.from(content).toString("utf-8");
|
|
122
|
+
const lines = text.split(`
|
|
123
|
+
`);
|
|
124
|
+
for (let i = 0;i < lines.length; i++) {
|
|
125
|
+
const line = lines[i];
|
|
126
|
+
const isLastLine = i === lines.length - 1;
|
|
127
|
+
const isEmpty = line === "";
|
|
128
|
+
if (isLastLine && isEmpty) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
let output = processLine(line, flags);
|
|
132
|
+
if (flags.b) {
|
|
133
|
+
if (!isEmpty) {
|
|
134
|
+
output = formatLineNumber(lineNumber++) + output;
|
|
135
|
+
}
|
|
136
|
+
} else if (flags.n) {
|
|
137
|
+
output = formatLineNumber(lineNumber++) + output;
|
|
138
|
+
}
|
|
139
|
+
await ctx.stdout.writeText(output + `
|
|
140
|
+
`);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
49
143
|
if (files.length === 0) {
|
|
50
|
-
|
|
51
|
-
await ctx.
|
|
144
|
+
if (!needsProcessing) {
|
|
145
|
+
for await (const chunk of ctx.stdin.stream()) {
|
|
146
|
+
await ctx.stdout.write(chunk);
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
const content = await ctx.stdin.buffer();
|
|
150
|
+
await processContent(content);
|
|
52
151
|
}
|
|
53
152
|
} else {
|
|
54
153
|
for (const file of files) {
|
|
55
154
|
try {
|
|
56
155
|
const path = ctx.fs.resolve(ctx.cwd, file);
|
|
57
156
|
const content = await ctx.fs.readFile(path);
|
|
58
|
-
await
|
|
157
|
+
await processContent(new Uint8Array(content));
|
|
59
158
|
} catch (err) {
|
|
60
159
|
const message = err instanceof Error ? err.message : String(err);
|
|
61
160
|
await ctx.stderr.writeText(`cat: ${file}: ${message}
|
|
@@ -67,4 +166,4 @@ var cat = async (ctx) => {
|
|
|
67
166
|
return 0;
|
|
68
167
|
};
|
|
69
168
|
|
|
70
|
-
//# debugId=
|
|
169
|
+
//# debugId=51CCC0B7373826B964756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/commands/cat/cat.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type { Command } from \"../../types.cjs\";\nimport { createFlagParser, type FlagDefinition } from \"../../utils/flag-parser.cjs\";\n\nconst spec = {\n name: \"cat\",\n flags: [] as FlagDefinition[],\n usage: \"cat [file ...]\",\n};\n\nconst parser = createFlagParser(spec, {}, ()
|
|
5
|
+
"import type { Command } from \"../../types.cjs\";\nimport { createFlagParser, type FlagDefinition } from \"../../utils/flag-parser.cjs\";\n\ninterface CatFlags {\n A: boolean; // show all (equivalent to -vET)\n b: boolean; // number non-blank lines\n E: boolean; // show $ at end of lines\n n: boolean; // number all lines\n T: boolean; // show tabs as ^I\n v: boolean; // show non-printing characters\n}\n\nconst spec = {\n name: \"cat\",\n flags: [\n { short: \"A\", long: \"show-all\" },\n { short: \"b\", long: \"number-nonblank\" },\n { short: \"E\", long: \"show-ends\" },\n { short: \"n\", long: \"number\" },\n { short: \"T\", long: \"show-tabs\" },\n { short: \"v\", long: \"show-nonprinting\" },\n ] as FlagDefinition[],\n usage: \"cat [-AbEnTv] [file ...]\",\n};\n\nconst defaultFlags: CatFlags = {\n A: false,\n b: false,\n E: false,\n n: false,\n T: false,\n v: false,\n};\n\nconst parser = createFlagParser(spec, defaultFlags, (flags, flagDef) => {\n if (flagDef.short) {\n flags[flagDef.short as keyof CatFlags] = true;\n }\n});\n\nfunction showNonPrintingChar(charCode: number): string {\n if (charCode === 9) {\n // Tab - handled separately\n return \"\\t\";\n } else if (charCode === 10) {\n // Newline - pass through\n return \"\\n\";\n } else if (charCode < 32) {\n // Control characters 0-31 (except tab/newline)\n return \"^\" + String.fromCharCode(charCode + 64);\n } else if (charCode === 127) {\n // DEL\n return \"^?\";\n } else if (charCode >= 128 && charCode < 160) {\n // High control characters (M-^@, M-^A, etc.)\n return \"M-^\" + String.fromCharCode(charCode - 128 + 64);\n } else if (charCode >= 160 && charCode < 255) {\n // High printable characters (M-<space>, etc.)\n return \"M-\" + String.fromCharCode(charCode - 128);\n } else if (charCode === 255) {\n // M-^?\n return \"M-^?\";\n }\n return String.fromCharCode(charCode);\n}\n\nfunction processLine(line: string, flags: CatFlags): string {\n let result = \"\";\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i]!;\n const charCode = char.charCodeAt(0);\n\n if (flags.T && charCode === 9) {\n result += \"^I\";\n } else if (flags.v && (charCode < 32 || charCode >= 127) && charCode !== 9 && charCode !== 10) {\n result += showNonPrintingChar(charCode);\n } else {\n result += char;\n }\n }\n\n if (flags.E) {\n result += \"$\";\n }\n\n return result;\n}\n\nfunction formatLineNumber(num: number): string {\n return num.toString().padStart(6, \" \") + \"\\t\";\n}\n\nexport const cat: Command = async (ctx) => {\n const result = parser.parse(ctx.args);\n\n if (result.error) {\n await parser.writeError(result.error, ctx.stderr);\n return 1;\n }\n\n const files = result.args;\n const flags: CatFlags = { ...result.flags };\n\n // -A is equivalent to -vET\n if (flags.A) {\n flags.v = true;\n flags.E = true;\n flags.T = true;\n }\n\n const needsProcessing = flags.n || flags.b || flags.E || flags.T || flags.v;\n let lineNumber = 1;\n\n const processContent = async (content: Buffer | Uint8Array) => {\n if (!needsProcessing) {\n await ctx.stdout.write(new Uint8Array(content));\n return;\n }\n\n const text = Buffer.from(content).toString(\"utf-8\");\n const lines = text.split(\"\\n\");\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n const isLastLine = i === lines.length - 1;\n const isEmpty = line === \"\";\n\n // Skip the final empty element from split (no trailing output)\n if (isLastLine && isEmpty) {\n continue;\n }\n\n let output = processLine(line, flags);\n\n // Line numbering\n if (flags.b) {\n // Number non-blank lines only\n if (!isEmpty) {\n output = formatLineNumber(lineNumber++) + output;\n }\n } else if (flags.n) {\n // Number all lines\n output = formatLineNumber(lineNumber++) + output;\n }\n\n await ctx.stdout.writeText(output + \"\\n\");\n }\n };\n\n if (files.length === 0) {\n // Read from stdin\n if (!needsProcessing) {\n for await (const chunk of ctx.stdin.stream()) {\n await ctx.stdout.write(chunk);\n }\n } else {\n const content = await ctx.stdin.buffer();\n await processContent(content);\n }\n } else {\n // Read from files\n for (const file of files) {\n try {\n const path = ctx.fs.resolve(ctx.cwd, file);\n const content = await ctx.fs.readFile(path);\n await processContent(new Uint8Array(content));\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await ctx.stderr.writeText(`cat: ${file}: ${message}\\n`);\n return 1;\n }\n }\n }\n return 0;\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACsD,IAAtD;
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "51CCC0B7373826B964756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
6
|
+
var __toCommonJS = (from) => {
|
|
7
|
+
var entry = __moduleCache.get(from), desc;
|
|
8
|
+
if (entry)
|
|
9
|
+
return entry;
|
|
10
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
13
|
+
get: () => from[key],
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
}));
|
|
16
|
+
__moduleCache.set(from, entry);
|
|
17
|
+
return entry;
|
|
18
|
+
};
|
|
19
|
+
var __export = (target, all) => {
|
|
20
|
+
for (var name in all)
|
|
21
|
+
__defProp(target, name, {
|
|
22
|
+
get: all[name],
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
set: (newValue) => all[name] = () => newValue
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/commands/cut/cut.ts
|
|
30
|
+
var exports_cut = {};
|
|
31
|
+
__export(exports_cut, {
|
|
32
|
+
cut: () => cut
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(exports_cut);
|
|
35
|
+
var import_flag_parser = require("../../utils/flag-parser.cjs");
|
|
36
|
+
var spec = {
|
|
37
|
+
name: "cut",
|
|
38
|
+
flags: [
|
|
39
|
+
{ short: "b", long: "bytes", takesValue: true },
|
|
40
|
+
{ short: "c", long: "characters", takesValue: true },
|
|
41
|
+
{ short: "d", long: "delimiter", takesValue: true },
|
|
42
|
+
{ short: "f", long: "fields", takesValue: true },
|
|
43
|
+
{ short: "s", long: "only-delimited" },
|
|
44
|
+
{ long: "complement" },
|
|
45
|
+
{ long: "output-delimiter", takesValue: true }
|
|
46
|
+
],
|
|
47
|
+
usage: `cut -b list [-n] [file ...]
|
|
48
|
+
cut -c list [file ...]
|
|
49
|
+
cut -f list [-d delim] [-s] [file ...]`
|
|
50
|
+
};
|
|
51
|
+
var defaults = {
|
|
52
|
+
bytes: null,
|
|
53
|
+
characters: null,
|
|
54
|
+
delimiter: "\t",
|
|
55
|
+
fields: null,
|
|
56
|
+
onlyDelimited: false,
|
|
57
|
+
complement: false,
|
|
58
|
+
outputDelimiter: null
|
|
59
|
+
};
|
|
60
|
+
var handler = (flags, flag, value) => {
|
|
61
|
+
if (flag.short === "b")
|
|
62
|
+
flags.bytes = value ?? null;
|
|
63
|
+
if (flag.short === "c")
|
|
64
|
+
flags.characters = value ?? null;
|
|
65
|
+
if (flag.short === "d")
|
|
66
|
+
flags.delimiter = value ?? "\t";
|
|
67
|
+
if (flag.short === "f")
|
|
68
|
+
flags.fields = value ?? null;
|
|
69
|
+
if (flag.short === "s")
|
|
70
|
+
flags.onlyDelimited = true;
|
|
71
|
+
if (flag.long === "complement")
|
|
72
|
+
flags.complement = true;
|
|
73
|
+
if (flag.long === "output-delimiter")
|
|
74
|
+
flags.outputDelimiter = value ?? null;
|
|
75
|
+
};
|
|
76
|
+
var parser = import_flag_parser.createFlagParser(spec, defaults, handler);
|
|
77
|
+
function parseListSpec(listStr) {
|
|
78
|
+
const ranges = [];
|
|
79
|
+
for (const part of listStr.split(",")) {
|
|
80
|
+
const trimmed = part.trim();
|
|
81
|
+
if (trimmed.includes("-")) {
|
|
82
|
+
const [startStr, endStr] = trimmed.split("-", 2);
|
|
83
|
+
const start = startStr === "" ? null : parseInt(startStr, 10);
|
|
84
|
+
const end = endStr === "" ? null : parseInt(endStr, 10);
|
|
85
|
+
ranges.push({ start, end });
|
|
86
|
+
} else {
|
|
87
|
+
const n = parseInt(trimmed, 10);
|
|
88
|
+
ranges.push({ start: n, end: n });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return (index, total) => {
|
|
92
|
+
for (const { start, end } of ranges) {
|
|
93
|
+
const s = start ?? 1;
|
|
94
|
+
const e = end ?? total;
|
|
95
|
+
if (index >= s && index <= e)
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
var cut = async (ctx) => {
|
|
102
|
+
const result = parser.parse(ctx.args);
|
|
103
|
+
if (result.error) {
|
|
104
|
+
await parser.writeError(result.error, ctx.stderr);
|
|
105
|
+
return 1;
|
|
106
|
+
}
|
|
107
|
+
const { bytes, characters, fields, delimiter, onlyDelimited, complement, outputDelimiter } = result.flags;
|
|
108
|
+
const modeCount = [bytes, characters, fields].filter((v) => v !== null).length;
|
|
109
|
+
if (modeCount === 0) {
|
|
110
|
+
await ctx.stderr.writeText(`cut: you must specify a list of bytes, characters, or fields
|
|
111
|
+
`);
|
|
112
|
+
return 1;
|
|
113
|
+
}
|
|
114
|
+
if (modeCount > 1) {
|
|
115
|
+
await ctx.stderr.writeText(`cut: only one type of list may be specified
|
|
116
|
+
`);
|
|
117
|
+
return 1;
|
|
118
|
+
}
|
|
119
|
+
const listStr = bytes ?? characters ?? fields;
|
|
120
|
+
const selector = parseListSpec(listStr);
|
|
121
|
+
const mode = bytes !== null ? "bytes" : characters !== null ? "chars" : "fields";
|
|
122
|
+
const processLine = async (line) => {
|
|
123
|
+
if (mode === "fields") {
|
|
124
|
+
if (!line.includes(delimiter)) {
|
|
125
|
+
if (onlyDelimited)
|
|
126
|
+
return;
|
|
127
|
+
await ctx.stdout.writeText(line + `
|
|
128
|
+
`);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const parts = line.split(delimiter);
|
|
132
|
+
const total = parts.length;
|
|
133
|
+
const selected = [];
|
|
134
|
+
for (let i = 0;i < total; i++) {
|
|
135
|
+
const idx = i + 1;
|
|
136
|
+
const isSelected = selector(idx, total);
|
|
137
|
+
if (complement ? !isSelected : isSelected) {
|
|
138
|
+
selected.push(parts[i]);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const outDelim = outputDelimiter ?? delimiter;
|
|
142
|
+
await ctx.stdout.writeText(selected.join(outDelim) + `
|
|
143
|
+
`);
|
|
144
|
+
} else {
|
|
145
|
+
const chars = [...line];
|
|
146
|
+
const total = chars.length;
|
|
147
|
+
const selected = [];
|
|
148
|
+
for (let i = 0;i < total; i++) {
|
|
149
|
+
const idx = i + 1;
|
|
150
|
+
const isSelected = selector(idx, total);
|
|
151
|
+
if (complement ? !isSelected : isSelected) {
|
|
152
|
+
selected.push(chars[i]);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const outDelim = outputDelimiter ?? "";
|
|
156
|
+
await ctx.stdout.writeText(selected.join(outDelim) + `
|
|
157
|
+
`);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
const files = result.args;
|
|
161
|
+
if (files.length === 0) {
|
|
162
|
+
for await (const line of ctx.stdin.lines()) {
|
|
163
|
+
await processLine(line);
|
|
164
|
+
}
|
|
165
|
+
} else {
|
|
166
|
+
for (const file of files) {
|
|
167
|
+
try {
|
|
168
|
+
const path = ctx.fs.resolve(ctx.cwd, file);
|
|
169
|
+
const content = (await ctx.fs.readFile(path)).toString();
|
|
170
|
+
const lines = content.split(`
|
|
171
|
+
`);
|
|
172
|
+
if (lines.length > 0 && lines[lines.length - 1] === "") {
|
|
173
|
+
lines.pop();
|
|
174
|
+
}
|
|
175
|
+
for (const line of lines) {
|
|
176
|
+
await processLine(line);
|
|
177
|
+
}
|
|
178
|
+
} catch {
|
|
179
|
+
await ctx.stderr.writeText(`cut: ${file}: No such file or directory
|
|
180
|
+
`);
|
|
181
|
+
return 1;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return 0;
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
//# debugId=27E02324E2E46D1D64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/commands/cut/cut.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { Command } from \"../../types.cjs\";\nimport { createFlagParser, type FlagDefinition } from \"../../utils/flag-parser.cjs\";\n\ninterface CutFlags {\n bytes: string | null;\n characters: string | null;\n delimiter: string;\n fields: string | null;\n onlyDelimited: boolean;\n complement: boolean;\n outputDelimiter: string | null;\n}\n\nconst spec = {\n name: \"cut\",\n flags: [\n { short: \"b\", long: \"bytes\", takesValue: true },\n { short: \"c\", long: \"characters\", takesValue: true },\n { short: \"d\", long: \"delimiter\", takesValue: true },\n { short: \"f\", long: \"fields\", takesValue: true },\n { short: \"s\", long: \"only-delimited\" },\n { long: \"complement\" },\n { long: \"output-delimiter\", takesValue: true },\n ] as FlagDefinition[],\n usage: \"cut -b list [-n] [file ...]\\n cut -c list [file ...]\\n cut -f list [-d delim] [-s] [file ...]\",\n};\n\nconst defaults: CutFlags = {\n bytes: null,\n characters: null,\n delimiter: \"\\t\",\n fields: null,\n onlyDelimited: false,\n complement: false,\n outputDelimiter: null,\n};\n\nconst handler = (flags: CutFlags, flag: FlagDefinition, value?: string) => {\n if (flag.short === \"b\") flags.bytes = value ?? null;\n if (flag.short === \"c\") flags.characters = value ?? null;\n if (flag.short === \"d\") flags.delimiter = value ?? \"\\t\";\n if (flag.short === \"f\") flags.fields = value ?? null;\n if (flag.short === \"s\") flags.onlyDelimited = true;\n if (flag.long === \"complement\") flags.complement = true;\n if (flag.long === \"output-delimiter\") flags.outputDelimiter = value ?? null;\n};\n\nconst parser = createFlagParser(spec, defaults, handler);\n\n/**\n * Parse a list specification like \"1\", \"1,3,5\", \"1-3\", \"1-\", \"-3\", \"1-3,7,9-\"\n * Returns a function that checks if a 1-based index is selected.\n */\nfunction parseListSpec(\n listStr: string\n): (index: number, total: number) => boolean {\n const ranges: Array<{ start: number | null; end: number | null }> = [];\n\n for (const part of listStr.split(\",\")) {\n const trimmed = part.trim();\n if (trimmed.includes(\"-\")) {\n const [startStr, endStr] = trimmed.split(\"-\", 2);\n const start = startStr === \"\" ? null : parseInt(startStr!, 10);\n const end = endStr === \"\" ? null : parseInt(endStr!, 10);\n ranges.push({ start, end });\n } else {\n const n = parseInt(trimmed, 10);\n ranges.push({ start: n, end: n });\n }\n }\n\n return (index: number, total: number): boolean => {\n for (const { start, end } of ranges) {\n const s = start ?? 1;\n const e = end ?? total;\n if (index >= s && index <= e) return true;\n }\n return false;\n };\n}\n\nexport const cut: Command = async (ctx) => {\n const result = parser.parse(ctx.args);\n\n if (result.error) {\n await parser.writeError(result.error, ctx.stderr);\n return 1;\n }\n\n const { bytes, characters, fields, delimiter, onlyDelimited, complement, outputDelimiter } =\n result.flags;\n\n // Validate: exactly one of -b, -c, -f must be given\n const modeCount = [bytes, characters, fields].filter((v) => v !== null).length;\n if (modeCount === 0) {\n await ctx.stderr.writeText(\n \"cut: you must specify a list of bytes, characters, or fields\\n\"\n );\n return 1;\n }\n if (modeCount > 1) {\n await ctx.stderr.writeText(\n \"cut: only one type of list may be specified\\n\"\n );\n return 1;\n }\n\n const listStr = (bytes ?? characters ?? fields)!;\n const selector = parseListSpec(listStr);\n const mode = bytes !== null ? \"bytes\" : characters !== null ? \"chars\" : \"fields\";\n\n const processLine = async (line: string) => {\n if (mode === \"fields\") {\n // Check if delimiter exists in line\n if (!line.includes(delimiter)) {\n if (onlyDelimited) return;\n await ctx.stdout.writeText(line + \"\\n\");\n return;\n }\n\n const parts = line.split(delimiter);\n const total = parts.length;\n const selected: string[] = [];\n\n for (let i = 0; i < total; i++) {\n const idx = i + 1; // 1-based\n const isSelected = selector(idx, total);\n if (complement ? !isSelected : isSelected) {\n selected.push(parts[i]!);\n }\n }\n\n const outDelim = outputDelimiter ?? delimiter;\n await ctx.stdout.writeText(selected.join(outDelim) + \"\\n\");\n } else {\n // bytes/chars mode (equivalent for simplicity)\n const chars = [...line];\n const total = chars.length;\n const selected: string[] = [];\n\n for (let i = 0; i < total; i++) {\n const idx = i + 1; // 1-based\n const isSelected = selector(idx, total);\n if (complement ? !isSelected : isSelected) {\n selected.push(chars[i]!);\n }\n }\n\n const outDelim = outputDelimiter ?? \"\";\n await ctx.stdout.writeText(selected.join(outDelim) + \"\\n\");\n }\n };\n\n const files = result.args;\n\n if (files.length === 0) {\n // Read from stdin\n for await (const line of ctx.stdin.lines()) {\n await processLine(line);\n }\n } else {\n for (const file of files) {\n try {\n const path = ctx.fs.resolve(ctx.cwd, file);\n const content = (await ctx.fs.readFile(path)).toString();\n const lines = content.split(\"\\n\");\n // Remove trailing empty line from final newline\n if (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n for (const line of lines) {\n await processLine(line);\n }\n } catch {\n await ctx.stderr.writeText(`cut: ${file}: No such file or directory\\n`);\n return 1;\n }\n }\n }\n\n return 0;\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "27E02324E2E46D1D64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -50,6 +50,7 @@ __export(exports_commands, {
|
|
|
50
50
|
find: () => import_find.find,
|
|
51
51
|
falseCmd: () => import_true_false.falseCmd,
|
|
52
52
|
echo: () => import_echo.echo,
|
|
53
|
+
cut: () => import_cut.cut,
|
|
53
54
|
cp: () => import_cp.cp,
|
|
54
55
|
continueCmd: () => import_break_continue.continueCmd,
|
|
55
56
|
colon: () => import_colon.colon,
|
|
@@ -87,6 +88,7 @@ var import_break_continue = require("./break-continue/break-continue.cjs");
|
|
|
87
88
|
var import_colon = require("./colon/colon.cjs");
|
|
88
89
|
var import_cd = require("./cd/cd.cjs");
|
|
89
90
|
var import_tr = require("./tr/tr.cjs");
|
|
91
|
+
var import_cut = require("./cut/cut.cjs");
|
|
90
92
|
var import_echo2 = require("./echo/echo.cjs");
|
|
91
93
|
var import_cat2 = require("./cat/cat.cjs");
|
|
92
94
|
var import_grep2 = require("./grep/grep.cjs");
|
|
@@ -113,6 +115,7 @@ var import_break_continue2 = require("./break-continue/break-continue.cjs");
|
|
|
113
115
|
var import_colon2 = require("./colon/colon.cjs");
|
|
114
116
|
var import_cd2 = require("./cd/cd.cjs");
|
|
115
117
|
var import_tr2 = require("./tr/tr.cjs");
|
|
118
|
+
var import_cut2 = require("./cut/cut.cjs");
|
|
116
119
|
var builtinCommands = {
|
|
117
120
|
echo: import_echo2.echo,
|
|
118
121
|
cat: import_cat2.cat,
|
|
@@ -142,7 +145,8 @@ var builtinCommands = {
|
|
|
142
145
|
continue: import_break_continue2.continueCmd,
|
|
143
146
|
":": import_colon2.colon,
|
|
144
147
|
cd: import_cd2.cd,
|
|
145
|
-
tr: import_tr2.tr
|
|
148
|
+
tr: import_tr2.tr,
|
|
149
|
+
cut: import_cut2.cut
|
|
146
150
|
};
|
|
147
151
|
|
|
148
|
-
//# debugId=
|
|
152
|
+
//# debugId=BFE70ED48B7DB93D64756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/commands/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type { Command } from \"../types.cjs\";\n\nexport { echo } from \"./echo/echo.cjs\";\nexport { cat } from \"./cat/cat.cjs\";\nexport { grep } from \"./grep/grep.cjs\";\nexport { wc } from \"./wc/wc.cjs\";\nexport { head } from \"./head/head.cjs\";\nexport { tail } from \"./tail/tail.cjs\";\nexport { sort } from \"./sort/sort.cjs\";\nexport { uniq } from \"./uniq/uniq.cjs\";\nexport { pwd } from \"./pwd/pwd.cjs\";\nexport { ls } from \"./ls/ls.cjs\";\nexport { mkdir } from \"./mkdir/mkdir.cjs\";\nexport { rm } from \"./rm/rm.cjs\";\nexport { test, bracket } from \"./test/test.cjs\";\nexport { trueCmd, falseCmd } from \"./true-false/true-false.cjs\";\nexport { touch } from \"./touch/touch.cjs\";\nexport { cp } from \"./cp/cp.cjs\";\nexport { mv } from \"./mv/mv.cjs\";\nexport { tee } from \"./tee/tee.cjs\";\nexport { tree } from \"./tree/tree.cjs\";\nexport { find } from \"./find/find.cjs\";\nexport { sed } from \"./sed/sed.cjs\";\nexport { awk } from \"./awk/awk.cjs\";\nexport { breakCmd, continueCmd } from \"./break-continue/break-continue.cjs\";\nexport { colon } from \"./colon/colon.cjs\";\nexport { cd } from \"./cd/cd.cjs\";\nexport { tr } from \"./tr/tr.cjs\";\n\n// Re-export all commands as a bundle\nimport { echo } from \"./echo/echo.cjs\";\nimport { cat } from \"./cat/cat.cjs\";\nimport { grep } from \"./grep/grep.cjs\";\nimport { wc } from \"./wc/wc.cjs\";\nimport { head } from \"./head/head.cjs\";\nimport { tail } from \"./tail/tail.cjs\";\nimport { sort } from \"./sort/sort.cjs\";\nimport { uniq } from \"./uniq/uniq.cjs\";\nimport { pwd } from \"./pwd/pwd.cjs\";\nimport { ls } from \"./ls/ls.cjs\";\nimport { mkdir } from \"./mkdir/mkdir.cjs\";\nimport { rm } from \"./rm/rm.cjs\";\nimport { test, bracket } from \"./test/test.cjs\";\nimport { trueCmd, falseCmd } from \"./true-false/true-false.cjs\";\nimport { touch } from \"./touch/touch.cjs\";\nimport { cp } from \"./cp/cp.cjs\";\nimport { mv } from \"./mv/mv.cjs\";\nimport { tee } from \"./tee/tee.cjs\";\nimport { tree } from \"./tree/tree.cjs\";\nimport { find } from \"./find/find.cjs\";\nimport { sed } from \"./sed/sed.cjs\";\nimport { awk } from \"./awk/awk.cjs\";\nimport { breakCmd, continueCmd } from \"./break-continue/break-continue.cjs\";\nimport { colon } from \"./colon/colon.cjs\";\nimport { cd } from \"./cd/cd.cjs\";\nimport { tr } from \"./tr/tr.cjs\";\n\nexport const builtinCommands: Record<string, Command> = {\n echo,\n cat,\n grep,\n wc,\n head,\n tail,\n sort,\n uniq,\n pwd,\n ls,\n mkdir,\n rm,\n test,\n \"[\": bracket,\n true: trueCmd,\n false: falseCmd,\n touch,\n cp,\n mv,\n tee,\n tree,\n find,\n sed,\n awk,\n break: breakCmd,\n continue: continueCmd,\n \":\": colon,\n cd,\n tr,\n};\n"
|
|
5
|
+
"import type { Command } from \"../types.cjs\";\n\nexport { echo } from \"./echo/echo.cjs\";\nexport { cat } from \"./cat/cat.cjs\";\nexport { grep } from \"./grep/grep.cjs\";\nexport { wc } from \"./wc/wc.cjs\";\nexport { head } from \"./head/head.cjs\";\nexport { tail } from \"./tail/tail.cjs\";\nexport { sort } from \"./sort/sort.cjs\";\nexport { uniq } from \"./uniq/uniq.cjs\";\nexport { pwd } from \"./pwd/pwd.cjs\";\nexport { ls } from \"./ls/ls.cjs\";\nexport { mkdir } from \"./mkdir/mkdir.cjs\";\nexport { rm } from \"./rm/rm.cjs\";\nexport { test, bracket } from \"./test/test.cjs\";\nexport { trueCmd, falseCmd } from \"./true-false/true-false.cjs\";\nexport { touch } from \"./touch/touch.cjs\";\nexport { cp } from \"./cp/cp.cjs\";\nexport { mv } from \"./mv/mv.cjs\";\nexport { tee } from \"./tee/tee.cjs\";\nexport { tree } from \"./tree/tree.cjs\";\nexport { find } from \"./find/find.cjs\";\nexport { sed } from \"./sed/sed.cjs\";\nexport { awk } from \"./awk/awk.cjs\";\nexport { breakCmd, continueCmd } from \"./break-continue/break-continue.cjs\";\nexport { colon } from \"./colon/colon.cjs\";\nexport { cd } from \"./cd/cd.cjs\";\nexport { tr } from \"./tr/tr.cjs\";\nexport { cut } from \"./cut/cut.cjs\";\n\n// Re-export all commands as a bundle\nimport { echo } from \"./echo/echo.cjs\";\nimport { cat } from \"./cat/cat.cjs\";\nimport { grep } from \"./grep/grep.cjs\";\nimport { wc } from \"./wc/wc.cjs\";\nimport { head } from \"./head/head.cjs\";\nimport { tail } from \"./tail/tail.cjs\";\nimport { sort } from \"./sort/sort.cjs\";\nimport { uniq } from \"./uniq/uniq.cjs\";\nimport { pwd } from \"./pwd/pwd.cjs\";\nimport { ls } from \"./ls/ls.cjs\";\nimport { mkdir } from \"./mkdir/mkdir.cjs\";\nimport { rm } from \"./rm/rm.cjs\";\nimport { test, bracket } from \"./test/test.cjs\";\nimport { trueCmd, falseCmd } from \"./true-false/true-false.cjs\";\nimport { touch } from \"./touch/touch.cjs\";\nimport { cp } from \"./cp/cp.cjs\";\nimport { mv } from \"./mv/mv.cjs\";\nimport { tee } from \"./tee/tee.cjs\";\nimport { tree } from \"./tree/tree.cjs\";\nimport { find } from \"./find/find.cjs\";\nimport { sed } from \"./sed/sed.cjs\";\nimport { awk } from \"./awk/awk.cjs\";\nimport { breakCmd, continueCmd } from \"./break-continue/break-continue.cjs\";\nimport { colon } from \"./colon/colon.cjs\";\nimport { cd } from \"./cd/cd.cjs\";\nimport { tr } from \"./tr/tr.cjs\";\nimport { cut } from \"./cut/cut.cjs\";\n\nexport const builtinCommands: Record<string, Command> = {\n echo,\n cat,\n grep,\n wc,\n head,\n tail,\n sort,\n uniq,\n pwd,\n ls,\n mkdir,\n rm,\n test,\n \"[\": bracket,\n true: trueCmd,\n false: falseCmd,\n touch,\n cp,\n mv,\n tee,\n tree,\n find,\n sed,\n awk,\n break: breakCmd,\n continue: continueCmd,\n \":\": colon,\n cd,\n tr,\n cut,\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEqB,IAArB;AACoB,IAApB;AACqB,IAArB;AACmB,IAAnB;AACqB,IAArB;AACqB,IAArB;AACqB,IAArB;AACqB,IAArB;AACoB,IAApB;AACmB,IAAnB;AACsB,IAAtB;AACmB,IAAnB;AAC8B,IAA9B;AACkC,IAAlC;AACsB,IAAtB;AACmB,IAAnB;AACmB,IAAnB;AACoB,IAApB;AACqB,IAArB;AACqB,IAArB;AACoB,IAApB;AACoB,IAApB;AACsC,IAAtC;AACsB,IAAtB;AACmB,IAAnB;AACmB,IAAnB;AACoB,IAApB;AAGqB,IAArB;AACoB,IAApB;AACqB,IAArB;AACmB,IAAnB;AACqB,IAArB;AACqB,IAArB;AACqB,IAArB;AACqB,IAArB;AACoB,IAApB;AACmB,IAAnB;AACsB,IAAtB;AACmB,IAAnB;AAC8B,IAA9B;AACkC,IAAlC;AACsB,IAAtB;AACmB,IAAnB;AACmB,IAAnB;AACoB,IAApB;AACqB,IAArB;AACqB,IAArB;AACoB,IAApB;AACoB,IAApB;AACsC,IAAtC;AACsB,IAAtB;AACmB,IAAnB;AACmB,IAAnB;AACoB,IAApB;AAEO,IAAM,kBAA2C;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AACF;",
|
|
8
|
+
"debugId": "BFE70ED48B7DB93D64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|