shell-dsl 0.0.19 → 0.0.21
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/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/sed/sed.cjs +160 -70
- package/dist/cjs/src/commands/sed/sed.cjs.map +3 -3
- package/dist/cjs/src/fs/real-fs.cjs.map +2 -2
- 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/sed/sed.mjs +160 -70
- package/dist/mjs/src/commands/sed/sed.mjs.map +3 -3
- package/dist/mjs/src/fs/real-fs.mjs.map +2 -2
- package/dist/types/src/fs/real-fs.d.ts +2 -2
- package/package.json +1 -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
|
}
|
|
@@ -55,6 +55,68 @@ function parseSubstitution(script) {
|
|
|
55
55
|
return null;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
+
function parseAddress(str) {
|
|
59
|
+
if (str.startsWith("$")) {
|
|
60
|
+
return { address: { type: "last" }, remaining: str.slice(1) };
|
|
61
|
+
}
|
|
62
|
+
const lineMatch = str.match(/^(\d+)/);
|
|
63
|
+
if (lineMatch) {
|
|
64
|
+
return {
|
|
65
|
+
address: { type: "line", lineNumber: parseInt(lineMatch[1], 10) },
|
|
66
|
+
remaining: str.slice(lineMatch[0].length)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
let i = 1;
|
|
70
|
+
if (!str.startsWith("/"))
|
|
71
|
+
return null;
|
|
72
|
+
let pattern = "";
|
|
73
|
+
while (i < str.length) {
|
|
74
|
+
if (str[i] === "\\") {
|
|
75
|
+
if (i + 1 < str.length) {
|
|
76
|
+
pattern += str[i] + str[i + 1];
|
|
77
|
+
i += 2;
|
|
78
|
+
} else {
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
} else if (str[i] === "/") {
|
|
82
|
+
try {
|
|
83
|
+
return {
|
|
84
|
+
address: { type: "regex", pattern: new RegExp(pattern) },
|
|
85
|
+
remaining: str.slice(i + 1)
|
|
86
|
+
};
|
|
87
|
+
} catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
pattern += str[i];
|
|
92
|
+
i++;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
function parseAddressRange(script) {
|
|
98
|
+
let trimmed = script.trim();
|
|
99
|
+
const first = parseAddress(trimmed);
|
|
100
|
+
if (!first) {
|
|
101
|
+
return { remaining: trimmed, negated: false };
|
|
102
|
+
}
|
|
103
|
+
trimmed = first.remaining;
|
|
104
|
+
const address1 = first.address;
|
|
105
|
+
if (trimmed.startsWith(",")) {
|
|
106
|
+
const second = parseAddress(trimmed.slice(1));
|
|
107
|
+
if (second) {
|
|
108
|
+
let remaining = second.remaining;
|
|
109
|
+
const negated2 = remaining.startsWith("!");
|
|
110
|
+
if (negated2)
|
|
111
|
+
remaining = remaining.slice(1);
|
|
112
|
+
return { address1, address2: second.address, remaining: remaining.trim(), negated: negated2 };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const negated = trimmed.startsWith("!");
|
|
116
|
+
if (negated)
|
|
117
|
+
trimmed = trimmed.slice(1);
|
|
118
|
+
return { address1, remaining: trimmed.trim(), negated };
|
|
119
|
+
}
|
|
58
120
|
function parseCommand(script) {
|
|
59
121
|
const trimmed = script.trim();
|
|
60
122
|
if (trimmed.startsWith(":")) {
|
|
@@ -65,6 +127,19 @@ function parseCommand(script) {
|
|
|
65
127
|
printFlag: false
|
|
66
128
|
};
|
|
67
129
|
}
|
|
130
|
+
const simpleCommands = {
|
|
131
|
+
h: "h",
|
|
132
|
+
H: "H",
|
|
133
|
+
g: "g_hold",
|
|
134
|
+
G: "G",
|
|
135
|
+
x: "x",
|
|
136
|
+
n: "n",
|
|
137
|
+
N: "N",
|
|
138
|
+
P: "P",
|
|
139
|
+
D: "D",
|
|
140
|
+
d: "d",
|
|
141
|
+
p: "p"
|
|
142
|
+
};
|
|
68
143
|
if (trimmed === "b" || trimmed.startsWith("b ") || trimmed.startsWith("b\t")) {
|
|
69
144
|
return {
|
|
70
145
|
type: "b",
|
|
@@ -89,19 +164,6 @@ function parseCommand(script) {
|
|
|
89
164
|
printFlag: false
|
|
90
165
|
};
|
|
91
166
|
}
|
|
92
|
-
const simpleCommands = {
|
|
93
|
-
h: "h",
|
|
94
|
-
H: "H",
|
|
95
|
-
g: "g_hold",
|
|
96
|
-
G: "G",
|
|
97
|
-
x: "x",
|
|
98
|
-
n: "n",
|
|
99
|
-
N: "N",
|
|
100
|
-
P: "P",
|
|
101
|
-
D: "D",
|
|
102
|
-
d: "d",
|
|
103
|
-
p: "p"
|
|
104
|
-
};
|
|
105
167
|
if (simpleCommands[trimmed]) {
|
|
106
168
|
return {
|
|
107
169
|
type: simpleCommands[trimmed],
|
|
@@ -109,60 +171,57 @@ function parseCommand(script) {
|
|
|
109
171
|
printFlag: false
|
|
110
172
|
};
|
|
111
173
|
}
|
|
112
|
-
const
|
|
113
|
-
if (
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
const restTrimmed = rest.trim();
|
|
117
|
-
try {
|
|
118
|
-
const addressPattern = new RegExp(addressPatternStr);
|
|
119
|
-
if (!restTrimmed)
|
|
120
|
-
return null;
|
|
121
|
-
if (simpleCommands[restTrimmed]) {
|
|
122
|
-
return {
|
|
123
|
-
type: simpleCommands[restTrimmed],
|
|
124
|
-
addressPattern,
|
|
125
|
-
negated,
|
|
126
|
-
globalFlag: false,
|
|
127
|
-
printFlag: false
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
if (restTrimmed === "b" || restTrimmed.startsWith("b ")) {
|
|
131
|
-
return {
|
|
132
|
-
type: "b",
|
|
133
|
-
addressPattern,
|
|
134
|
-
negated,
|
|
135
|
-
label: restTrimmed.length > 1 ? restTrimmed.slice(1).trim() : undefined,
|
|
136
|
-
globalFlag: false,
|
|
137
|
-
printFlag: false
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
if (restTrimmed.startsWith("{") && restTrimmed.endsWith("}")) {
|
|
141
|
-
const inner = restTrimmed.slice(1, -1).trim();
|
|
142
|
-
const parts = splitScriptParts(inner);
|
|
143
|
-
const children = [];
|
|
144
|
-
for (const part of parts) {
|
|
145
|
-
const cmd = parseCommand(part);
|
|
146
|
-
if (cmd)
|
|
147
|
-
children.push(cmd);
|
|
148
|
-
}
|
|
149
|
-
return {
|
|
150
|
-
type: "group",
|
|
151
|
-
addressPattern,
|
|
152
|
-
negated,
|
|
153
|
-
children,
|
|
154
|
-
globalFlag: false,
|
|
155
|
-
printFlag: false
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
const subCmd2 = parseSubstitution(restTrimmed);
|
|
159
|
-
if (subCmd2) {
|
|
160
|
-
subCmd2.addressPattern = addressPattern;
|
|
161
|
-
subCmd2.negated = negated;
|
|
162
|
-
return subCmd2;
|
|
163
|
-
}
|
|
164
|
-
} catch {
|
|
174
|
+
const { address1, address2, remaining, negated } = parseAddressRange(trimmed);
|
|
175
|
+
if (address1) {
|
|
176
|
+
const restTrimmed = remaining.trim();
|
|
177
|
+
if (!restTrimmed)
|
|
165
178
|
return null;
|
|
179
|
+
if (simpleCommands[restTrimmed]) {
|
|
180
|
+
return {
|
|
181
|
+
type: simpleCommands[restTrimmed],
|
|
182
|
+
address1,
|
|
183
|
+
address2,
|
|
184
|
+
negated,
|
|
185
|
+
globalFlag: false,
|
|
186
|
+
printFlag: false
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (restTrimmed === "b" || restTrimmed.startsWith("b ")) {
|
|
190
|
+
return {
|
|
191
|
+
type: "b",
|
|
192
|
+
address1,
|
|
193
|
+
address2,
|
|
194
|
+
negated,
|
|
195
|
+
label: restTrimmed.length > 1 ? restTrimmed.slice(1).trim() : undefined,
|
|
196
|
+
globalFlag: false,
|
|
197
|
+
printFlag: false
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
if (restTrimmed.startsWith("{") && restTrimmed.endsWith("}")) {
|
|
201
|
+
const inner = restTrimmed.slice(1, -1).trim();
|
|
202
|
+
const parts = splitScriptParts(inner);
|
|
203
|
+
const children = [];
|
|
204
|
+
for (const part of parts) {
|
|
205
|
+
const cmd = parseCommand(part);
|
|
206
|
+
if (cmd)
|
|
207
|
+
children.push(cmd);
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
type: "group",
|
|
211
|
+
address1,
|
|
212
|
+
address2,
|
|
213
|
+
negated,
|
|
214
|
+
children,
|
|
215
|
+
globalFlag: false,
|
|
216
|
+
printFlag: false
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
const subCmd2 = parseSubstitution(restTrimmed);
|
|
220
|
+
if (subCmd2) {
|
|
221
|
+
subCmd2.address1 = address1;
|
|
222
|
+
subCmd2.address2 = address2;
|
|
223
|
+
subCmd2.negated = negated;
|
|
224
|
+
return subCmd2;
|
|
166
225
|
}
|
|
167
226
|
}
|
|
168
227
|
const subCmd = parseSubstitution(trimmed);
|
|
@@ -332,11 +391,41 @@ function applySubstitution(line, cmd) {
|
|
|
332
391
|
return line.replace(cmd.pattern, cmd.replacement);
|
|
333
392
|
}
|
|
334
393
|
}
|
|
394
|
+
function singleAddressMatches(address, state) {
|
|
395
|
+
const lineNum = state.lineIndex + 1;
|
|
396
|
+
switch (address.type) {
|
|
397
|
+
case "line":
|
|
398
|
+
return lineNum === address.lineNumber;
|
|
399
|
+
case "last":
|
|
400
|
+
return state.lineIndex === state.lines.length - 1;
|
|
401
|
+
case "regex":
|
|
402
|
+
return address.pattern.test(state.patternSpace);
|
|
403
|
+
default:
|
|
404
|
+
return false;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
335
407
|
function addressMatches(cmd, state) {
|
|
336
|
-
if (!cmd.
|
|
408
|
+
if (!cmd.address1) {
|
|
337
409
|
return cmd.negated ? false : true;
|
|
338
410
|
}
|
|
339
|
-
|
|
411
|
+
if (cmd.address2) {
|
|
412
|
+
const isInRange = state.rangeState.get(cmd) ?? false;
|
|
413
|
+
if (!isInRange) {
|
|
414
|
+
if (singleAddressMatches(cmd.address1, state)) {
|
|
415
|
+
state.rangeState.set(cmd, true);
|
|
416
|
+
const matches2 = true;
|
|
417
|
+
return cmd.negated ? !matches2 : matches2;
|
|
418
|
+
}
|
|
419
|
+
return cmd.negated ? true : false;
|
|
420
|
+
} else {
|
|
421
|
+
if (singleAddressMatches(cmd.address2, state)) {
|
|
422
|
+
state.rangeState.set(cmd, false);
|
|
423
|
+
}
|
|
424
|
+
const matches2 = true;
|
|
425
|
+
return cmd.negated ? !matches2 : matches2;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
const matches = singleAddressMatches(cmd.address1, state);
|
|
340
429
|
return cmd.negated ? !matches : matches;
|
|
341
430
|
}
|
|
342
431
|
function findLabel(commands, label) {
|
|
@@ -494,7 +583,8 @@ var sed = async (ctx) => {
|
|
|
494
583
|
suppressOutput: options.suppressOutput,
|
|
495
584
|
output: [],
|
|
496
585
|
deleted: false,
|
|
497
|
-
restart: false
|
|
586
|
+
restart: false,
|
|
587
|
+
rangeState: new Map
|
|
498
588
|
};
|
|
499
589
|
while (state.lineIndex < lines.length) {
|
|
500
590
|
state.patternSpace = lines[state.lineIndex];
|
|
@@ -570,4 +660,4 @@ var sed = async (ctx) => {
|
|
|
570
660
|
return 0;
|
|
571
661
|
};
|
|
572
662
|
|
|
573
|
-
//# debugId=
|
|
663
|
+
//# debugId=A21FD877655B2D8264756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/commands/sed/sed.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type { Command } from \"../../types.cjs\";\n\ninterface SedCommand {\n type: \"s\" | \"d\" | \"p\" | \"h\" | \"H\" | \"g_hold\" | \"G\" | \"x\" | \"n\" | \"N\" | \"P\" | \"D\" | \"b\" | \"label\" | \"group\";\n addressPattern?: RegExp;\n negated?: boolean;\n pattern?: RegExp;\n replacement?: string;\n globalFlag: boolean;\n printFlag: boolean;\n label?: string;\n children?: SedCommand[];\n}\n\ninterface SedOptions {\n suppressOutput: boolean; // -n\n inPlace: boolean; // -i\n commands: SedCommand[];\n}\n\nfunction parseSubstitution(script: string): SedCommand | null {\n const match = script.match(/^s(.)(.+?)\\1(.*?)\\1([gi]*)$/);\n if (!match) return null;\n\n const [, , rawPattern, rawReplacement, flags] = match;\n const globalFlag = flags!.includes(\"g\");\n const caseInsensitive = flags!.includes(\"i\");\n\n const patternStr = rawPattern!.replace(/\\\\\\(/g, \"(\").replace(/\\\\\\)/g, \")\");\n const replacement = rawReplacement!\n .replace(/\\\\([0-9])/g, \"\\x00BACKREF$1\\x00\")\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\t/g, \"\\t\")\n .replace(/\\\\\\\\/g, \"\\x00BSLASH\\x00\")\n .replace(/\\$/g, \"$$$$\")\n .replace(/\\x00BACKREF([0-9])\\x00/g, \"$$$1\")\n .replace(/\\x00BSLASH\\x00/g, \"\\\\\");\n\n try {\n const regexFlags = caseInsensitive ? \"i\" : \"\";\n return {\n type: \"s\",\n pattern: new RegExp(patternStr, regexFlags),\n replacement,\n globalFlag,\n printFlag: false,\n };\n } catch {\n return null;\n }\n}\n\nfunction parseCommand(script: string): SedCommand | null {\n const trimmed = script.trim();\n\n // Label command :name\n if (trimmed.startsWith(\":\")) {\n return {\n type: \"label\",\n label: trimmed.slice(1).trim(),\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // Branch command: b or b label\n if (trimmed === \"b\" || trimmed.startsWith(\"b \") || trimmed.startsWith(\"b\\t\")) {\n return {\n type: \"b\",\n label: trimmed.length > 1 ? trimmed.slice(1).trim() : undefined,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // Group { ... }\n if (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) {\n const inner = trimmed.slice(1, -1).trim();\n const parts = splitScriptParts(inner);\n const children: SedCommand[] = [];\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) children.push(cmd);\n }\n return {\n type: \"group\",\n children,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // Simple single-char commands (no address)\n const simpleCommands: Record<string, SedCommand[\"type\"]> = {\n h: \"h\",\n H: \"H\",\n g: \"g_hold\",\n G: \"G\",\n x: \"x\",\n n: \"n\",\n N: \"N\",\n P: \"P\",\n D: \"D\",\n d: \"d\",\n p: \"p\",\n };\n if (simpleCommands[trimmed]) {\n return {\n type: simpleCommands[trimmed]!,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // Check for address pattern: /pattern/ followed by optional ! and command\n const addressWithCmd = trimmed.match(/^\\/(.+?)\\/(!)?\\s*(.*)$/);\n if (addressWithCmd) {\n const [, addressPatternStr, negation, rest] = addressWithCmd;\n const negated = negation === \"!\";\n const restTrimmed = rest!.trim();\n\n try {\n const addressPattern = new RegExp(addressPatternStr!);\n\n // /pattern/ alone — not valid, but handle gracefully\n if (!restTrimmed) return null;\n\n // /pattern/[!]d or /pattern/[!]p etc (simple commands)\n if (simpleCommands[restTrimmed]) {\n return {\n type: simpleCommands[restTrimmed]!,\n addressPattern,\n negated,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // /pattern/[!]b or /pattern/[!]b label\n if (restTrimmed === \"b\" || restTrimmed.startsWith(\"b \")) {\n return {\n type: \"b\",\n addressPattern,\n negated,\n label: restTrimmed.length > 1 ? restTrimmed.slice(1).trim() : undefined,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // /pattern/[!]{ ... }\n if (restTrimmed.startsWith(\"{\") && restTrimmed.endsWith(\"}\")) {\n const inner = restTrimmed.slice(1, -1).trim();\n const parts = splitScriptParts(inner);\n const children: SedCommand[] = [];\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) children.push(cmd);\n }\n return {\n type: \"group\",\n addressPattern,\n negated,\n children,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // /pattern/[!]s/old/new/flags\n const subCmd = parseSubstitution(restTrimmed);\n if (subCmd) {\n subCmd.addressPattern = addressPattern;\n subCmd.negated = negated;\n return subCmd;\n }\n } catch {\n return null;\n }\n }\n\n // Substitution command (no address)\n const subCmd = parseSubstitution(trimmed);\n if (subCmd) return subCmd;\n\n return null;\n}\n\nfunction splitScriptParts(script: string): string[] {\n const parts: string[] = [];\n let i = 0;\n let current = \"\";\n let braceDepth = 0;\n\n while (i < script.length) {\n if (script[i] === \"{\") {\n braceDepth++;\n current += script[i];\n i++;\n } else if (script[i] === \"}\") {\n braceDepth--;\n current += script[i];\n i++;\n } else if (script[i] === \"s\" && braceDepth === 0 && i + 1 < script.length && !/[a-zA-Z0-9]/.test(script[i + 1]!)) {\n // Detect substitution command — consume s/pattern/replacement/flags\n const delim = script[i + 1]!;\n let j = i + 2;\n let delimCount = 0;\n while (j < script.length && delimCount < 2) {\n if (script[j] === \"\\\\\") {\n j += 2;\n continue;\n }\n if (script[j] === delim) delimCount++;\n j++;\n }\n // Consume trailing flags\n while (j < script.length && /[gi]/.test(script[j]!)) j++;\n current += script.slice(i, j);\n i = j;\n } else if (script[i] === \";\" && braceDepth === 0) {\n const trimmed = current.trim();\n if (trimmed) parts.push(trimmed);\n current = \"\";\n i++;\n } else {\n current += script[i];\n i++;\n }\n }\n const trimmed = current.trim();\n if (trimmed) parts.push(trimmed);\n return parts;\n}\n\ninterface ParseArgsResult {\n options: SedOptions;\n files: string[];\n error?: { type: \"unrecognized_option\" | \"missing_value\"; option: string };\n}\n\nfunction parseArgs(args: string[]): ParseArgsResult {\n const options: SedOptions = {\n suppressOutput: false,\n inPlace: false,\n commands: [],\n };\n const files: string[] = [];\n\n let i = 0;\n while (i < args.length) {\n const arg = args[i]!;\n\n if (arg === \"--\") {\n i++;\n while (i < args.length) {\n const remaining = args[i]!;\n if (options.commands.length === 0) {\n const parts = splitScriptParts(remaining);\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) options.commands.push(cmd);\n }\n } else {\n files.push(remaining);\n }\n i++;\n }\n break;\n }\n\n if (arg.startsWith(\"--\")) {\n return {\n options,\n files,\n error: { type: \"unrecognized_option\", option: arg },\n };\n }\n\n if (arg.startsWith(\"-\") && arg.length > 1) {\n const flagChars = arg.slice(1);\n\n for (let j = 0; j < flagChars.length; j++) {\n const char = flagChars[j]!;\n\n if (char === \"n\") {\n options.suppressOutput = true;\n } else if (char === \"i\") {\n options.inPlace = true;\n } else if (char === \"e\") {\n const restOfArg = flagChars.slice(j + 1);\n let script: string;\n\n if (restOfArg.length > 0) {\n script = restOfArg;\n } else if (i + 1 < args.length) {\n script = args[++i]!;\n } else {\n return {\n options,\n files,\n error: { type: \"missing_value\", option: \"-e\" },\n };\n }\n\n const parts = splitScriptParts(script);\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) options.commands.push(cmd);\n }\n break;\n } else {\n return {\n options,\n files,\n error: { type: \"unrecognized_option\", option: `-${char}` },\n };\n }\n }\n i++;\n continue;\n }\n\n if (options.commands.length === 0) {\n const parts = splitScriptParts(arg);\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) options.commands.push(cmd);\n }\n } else {\n files.push(arg);\n }\n i++;\n }\n\n return { options, files };\n}\n\nfunction formatError(error: NonNullable<ParseArgsResult[\"error\"]>): string {\n let message: string;\n if (error.type === \"unrecognized_option\") {\n if (error.option.startsWith(\"--\")) {\n message = `sed: unrecognized option '${error.option}'\\n`;\n } else {\n message = `sed: invalid option -- '${error.option.slice(1)}'\\n`;\n }\n } else {\n message = `sed: option '${error.option}' requires an argument\\n`;\n }\n return message + `usage: sed [-ni] [-e script] script [file ...]\\n`;\n}\n\nfunction applySubstitution(line: string, cmd: SedCommand): string {\n if (!cmd.pattern) return line;\n\n if (cmd.globalFlag) {\n return line.replace(new RegExp(cmd.pattern.source, cmd.pattern.flags + \"g\"), cmd.replacement!);\n } else {\n return line.replace(cmd.pattern, cmd.replacement!);\n }\n}\n\ninterface SedState {\n patternSpace: string;\n holdSpace: string;\n lineIndex: number;\n lines: string[];\n suppressOutput: boolean;\n output: string[];\n deleted: boolean;\n restart: boolean; // for D command\n}\n\nfunction addressMatches(cmd: SedCommand, state: SedState): boolean {\n if (!cmd.addressPattern) {\n return cmd.negated ? false : true;\n }\n const matches = cmd.addressPattern.test(state.patternSpace);\n return cmd.negated ? !matches : matches;\n}\n\nfunction findLabel(commands: SedCommand[], label: string): number {\n for (let i = 0; i < commands.length; i++) {\n if (commands[i]!.type === \"label\" && commands[i]!.label === label) {\n return i;\n }\n }\n return -1;\n}\n\ninterface ExecResult {\n branchToEnd: boolean;\n branchLabel?: string;\n nextLine: boolean; // n command: output and advance\n deleted: boolean;\n restart: boolean; // D command\n}\n\nfunction executeCommands(\n commands: SedCommand[],\n state: SedState,\n topLevel: boolean\n): ExecResult {\n let pc = 0;\n while (pc < commands.length) {\n const cmd = commands[pc]!;\n\n // Labels are no-ops\n if (cmd.type === \"label\") {\n pc++;\n continue;\n }\n\n // Check address\n if (!addressMatches(cmd, state)) {\n pc++;\n continue;\n }\n\n switch (cmd.type) {\n case \"s\":\n state.patternSpace = applySubstitution(state.patternSpace, cmd);\n break;\n case \"d\":\n state.deleted = true;\n return { branchToEnd: false, deleted: true, nextLine: false, restart: false };\n case \"p\":\n state.output.push(state.patternSpace);\n break;\n case \"h\":\n state.holdSpace = state.patternSpace;\n break;\n case \"H\":\n state.holdSpace = state.holdSpace + \"\\n\" + state.patternSpace;\n break;\n case \"g_hold\":\n state.patternSpace = state.holdSpace;\n break;\n case \"G\":\n state.patternSpace = state.patternSpace + \"\\n\" + state.holdSpace;\n break;\n case \"x\": {\n const tmp = state.patternSpace;\n state.patternSpace = state.holdSpace;\n state.holdSpace = tmp;\n break;\n }\n case \"n\":\n // Output current pattern space, then read next line\n if (!state.suppressOutput) {\n state.output.push(state.patternSpace);\n }\n state.lineIndex++;\n if (state.lineIndex < state.lines.length) {\n state.patternSpace = state.lines[state.lineIndex]!;\n } else {\n // No more lines\n state.deleted = true;\n return { branchToEnd: false, deleted: true, nextLine: false, restart: false };\n }\n break;\n case \"N\":\n // Append next line to pattern space\n state.lineIndex++;\n if (state.lineIndex < state.lines.length) {\n state.patternSpace = state.patternSpace + \"\\n\" + state.lines[state.lineIndex]!;\n } else {\n // No more lines: output pattern space and exit (POSIX behavior)\n if (!state.suppressOutput) {\n state.output.push(state.patternSpace);\n }\n state.deleted = true;\n return { branchToEnd: false, deleted: true, nextLine: false, restart: false };\n }\n break;\n case \"P\": {\n // Print up to first \\n\n const nlIdx = state.patternSpace.indexOf(\"\\n\");\n if (nlIdx >= 0) {\n state.output.push(state.patternSpace.slice(0, nlIdx));\n } else {\n state.output.push(state.patternSpace);\n }\n break;\n }\n case \"D\": {\n // Delete up to first \\n, restart; if no \\n, delete all\n const nlIdx2 = state.patternSpace.indexOf(\"\\n\");\n if (nlIdx2 >= 0) {\n state.patternSpace = state.patternSpace.slice(nlIdx2 + 1);\n state.restart = true;\n return { branchToEnd: false, deleted: false, nextLine: false, restart: true };\n } else {\n state.deleted = true;\n return { branchToEnd: false, deleted: true, nextLine: false, restart: false };\n }\n }\n case \"b\":\n if (cmd.label) {\n // Branch to label — only works at top level\n if (topLevel) {\n const idx = findLabel(commands, cmd.label);\n if (idx >= 0) {\n pc = idx;\n continue;\n }\n }\n // Label not found or not top-level: branch to end\n return { branchToEnd: true, branchLabel: cmd.label, deleted: false, nextLine: false, restart: false };\n }\n // No label: branch to end of script\n return { branchToEnd: true, deleted: false, nextLine: false, restart: false };\n case \"group\":\n if (cmd.children) {\n const result = executeCommands(cmd.children, state, false);\n if (result.deleted || result.branchToEnd || result.restart) {\n // Propagate branch labels up for top-level resolution\n if (result.branchLabel && topLevel) {\n const idx = findLabel(commands, result.branchLabel);\n if (idx >= 0) {\n pc = idx;\n continue;\n }\n }\n return result;\n }\n }\n break;\n }\n pc++;\n }\n return { branchToEnd: false, deleted: false, nextLine: false, restart: false };\n}\n\nexport const sed: Command = async (ctx) => {\n const { options, files, error } = parseArgs(ctx.args);\n\n if (error) {\n await ctx.stderr.writeText(formatError(error));\n return 1;\n }\n\n if (options.commands.length === 0) {\n await ctx.stderr.writeText(\"sed: missing script\\n\");\n return 1;\n }\n\n const processContent = async (content: string): Promise<string[]> => {\n const lines = content.split(\"\\n\");\n if (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n\n const allOutput: string[] = [];\n const state: SedState = {\n patternSpace: \"\",\n holdSpace: \"\",\n lineIndex: 0,\n lines,\n suppressOutput: options.suppressOutput,\n output: [],\n deleted: false,\n restart: false,\n };\n\n while (state.lineIndex < lines.length) {\n state.patternSpace = lines[state.lineIndex]!;\n state.deleted = false;\n state.output = [];\n\n // Execute commands, possibly restarting on D\n let restarting = true;\n while (restarting) {\n restarting = false;\n state.restart = false;\n const result = executeCommands(options.commands, state, true);\n\n if (result.restart) {\n restarting = true;\n // output collected so far in this cycle goes out\n allOutput.push(...state.output);\n state.output = [];\n continue;\n }\n\n if (result.deleted) {\n allOutput.push(...state.output);\n state.lineIndex++;\n break;\n }\n\n // Normal end: collect printed lines, then auto-print\n allOutput.push(...state.output);\n if (!options.suppressOutput) {\n allOutput.push(state.patternSpace);\n }\n state.lineIndex++;\n }\n }\n\n return allOutput;\n };\n\n if (files.length === 0) {\n const content = await ctx.stdin.text();\n const outputLines = await processContent(content);\n for (const line of outputLines) {\n await ctx.stdout.writeText(line + \"\\n\");\n }\n } else if (options.inPlace) {\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 const outputLines = await processContent(content.toString());\n const result = outputLines.length > 0 ? outputLines.join(\"\\n\") + \"\\n\" : \"\";\n await ctx.fs.writeFile(path, result);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await ctx.stderr.writeText(`sed: ${file}: ${message}\\n`);\n return 1;\n }\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);\n const outputLines = await processContent(content.toString());\n for (const line of outputLines) {\n await ctx.stdout.writeText(line + \"\\n\");\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await ctx.stderr.writeText(`sed: ${file}: ${message}\\n`);\n return 1;\n }\n }\n }\n\n return 0;\n};\n"
|
|
5
|
+
"import type { Command } from \"../../types.cjs\";\n\ninterface SedAddress {\n type: \"line\" | \"regex\" | \"last\";\n lineNumber?: number;\n pattern?: RegExp;\n}\n\ninterface SedCommand {\n type: \"s\" | \"d\" | \"p\" | \"h\" | \"H\" | \"g_hold\" | \"G\" | \"x\" | \"n\" | \"N\" | \"P\" | \"D\" | \"b\" | \"label\" | \"group\";\n address1?: SedAddress;\n address2?: SedAddress;\n negated?: boolean;\n pattern?: RegExp;\n replacement?: string;\n globalFlag: boolean;\n printFlag: boolean;\n label?: string;\n children?: SedCommand[];\n}\n\ninterface SedOptions {\n suppressOutput: boolean; // -n\n inPlace: boolean; // -i\n commands: SedCommand[];\n}\n\nfunction parseSubstitution(script: string): SedCommand | null {\n const match = script.match(/^s(.)(.+?)\\1(.*?)\\1([gi]*)$/);\n if (!match) return null;\n\n const [, , rawPattern, rawReplacement, flags] = match;\n const globalFlag = flags!.includes(\"g\");\n const caseInsensitive = flags!.includes(\"i\");\n\n const patternStr = rawPattern!.replace(/\\\\\\(/g, \"(\").replace(/\\\\\\)/g, \")\");\n const replacement = rawReplacement!\n .replace(/\\\\([0-9])/g, \"\\x00BACKREF$1\\x00\")\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\t/g, \"\\t\")\n .replace(/\\\\\\\\/g, \"\\x00BSLASH\\x00\")\n .replace(/\\$/g, \"$$$$\")\n .replace(/\\x00BACKREF([0-9])\\x00/g, \"$$$1\")\n .replace(/\\x00BSLASH\\x00/g, \"\\\\\");\n\n try {\n const regexFlags = caseInsensitive ? \"i\" : \"\";\n return {\n type: \"s\",\n pattern: new RegExp(patternStr, regexFlags),\n replacement,\n globalFlag,\n printFlag: false,\n };\n } catch {\n return null;\n }\n}\n\nfunction parseAddress(str: string): { address: SedAddress; remaining: string } | null {\n // Match $ (last line)\n if (str.startsWith(\"$\")) {\n return { address: { type: \"last\" }, remaining: str.slice(1) };\n }\n // Match line number\n const lineMatch = str.match(/^(\\d+)/);\n if (lineMatch) {\n return {\n address: { type: \"line\", lineNumber: parseInt(lineMatch[1]!, 10) },\n remaining: str.slice(lineMatch[0].length),\n };\n }\n // Match regex /pattern/\n // Handle escaped slashes in pattern\n let i = 1; // start after opening /\n if (!str.startsWith(\"/\")) return null;\n\n let pattern = \"\";\n while (i < str.length) {\n if (str[i] === \"\\\\\") {\n // Escape sequence\n if (i + 1 < str.length) {\n pattern += str[i]! + str[i + 1]!;\n i += 2;\n } else {\n break;\n }\n } else if (str[i] === \"/\") {\n // End of pattern\n try {\n return {\n address: { type: \"regex\", pattern: new RegExp(pattern) },\n remaining: str.slice(i + 1),\n };\n } catch {\n return null;\n }\n } else {\n pattern += str[i];\n i++;\n }\n }\n return null;\n}\n\nfunction parseAddressRange(script: string): { address1?: SedAddress; address2?: SedAddress; remaining: string; negated: boolean } {\n let trimmed = script.trim();\n\n // Try to parse first address\n const first = parseAddress(trimmed);\n if (!first) {\n return { remaining: trimmed, negated: false };\n }\n\n trimmed = first.remaining;\n const address1 = first.address;\n\n // Check for comma (range)\n if (trimmed.startsWith(\",\")) {\n const second = parseAddress(trimmed.slice(1));\n if (second) {\n let remaining = second.remaining;\n const negated = remaining.startsWith(\"!\");\n if (negated) remaining = remaining.slice(1);\n return { address1, address2: second.address, remaining: remaining.trim(), negated };\n }\n }\n\n // Check for negation\n const negated = trimmed.startsWith(\"!\");\n if (negated) trimmed = trimmed.slice(1);\n\n return { address1, remaining: trimmed.trim(), negated };\n}\n\nfunction parseCommand(script: string): SedCommand | null {\n const trimmed = script.trim();\n\n // Label command :name\n if (trimmed.startsWith(\":\")) {\n return {\n type: \"label\",\n label: trimmed.slice(1).trim(),\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // Simple single-char commands (no address)\n const simpleCommands: Record<string, SedCommand[\"type\"]> = {\n h: \"h\",\n H: \"H\",\n g: \"g_hold\",\n G: \"G\",\n x: \"x\",\n n: \"n\",\n N: \"N\",\n P: \"P\",\n D: \"D\",\n d: \"d\",\n p: \"p\",\n };\n\n // Branch command: b or b label (no address)\n if (trimmed === \"b\" || trimmed.startsWith(\"b \") || trimmed.startsWith(\"b\\t\")) {\n return {\n type: \"b\",\n label: trimmed.length > 1 ? trimmed.slice(1).trim() : undefined,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // Group { ... } (no address)\n if (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) {\n const inner = trimmed.slice(1, -1).trim();\n const parts = splitScriptParts(inner);\n const children: SedCommand[] = [];\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) children.push(cmd);\n }\n return {\n type: \"group\",\n children,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // Simple command without address\n if (simpleCommands[trimmed]) {\n return {\n type: simpleCommands[trimmed]!,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // Try to parse address(es) followed by command\n const { address1, address2, remaining, negated } = parseAddressRange(trimmed);\n\n if (address1) {\n const restTrimmed = remaining.trim();\n\n // Address alone — not valid, but handle gracefully\n if (!restTrimmed) return null;\n\n // [address][!]d or [address][!]p etc (simple commands)\n if (simpleCommands[restTrimmed]) {\n return {\n type: simpleCommands[restTrimmed]!,\n address1,\n address2,\n negated,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // [address][!]b or [address][!]b label\n if (restTrimmed === \"b\" || restTrimmed.startsWith(\"b \")) {\n return {\n type: \"b\",\n address1,\n address2,\n negated,\n label: restTrimmed.length > 1 ? restTrimmed.slice(1).trim() : undefined,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // [address][!]{ ... }\n if (restTrimmed.startsWith(\"{\") && restTrimmed.endsWith(\"}\")) {\n const inner = restTrimmed.slice(1, -1).trim();\n const parts = splitScriptParts(inner);\n const children: SedCommand[] = [];\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) children.push(cmd);\n }\n return {\n type: \"group\",\n address1,\n address2,\n negated,\n children,\n globalFlag: false,\n printFlag: false,\n };\n }\n\n // [address][!]s/old/new/flags\n const subCmd = parseSubstitution(restTrimmed);\n if (subCmd) {\n subCmd.address1 = address1;\n subCmd.address2 = address2;\n subCmd.negated = negated;\n return subCmd;\n }\n }\n\n // Substitution command (no address)\n const subCmd = parseSubstitution(trimmed);\n if (subCmd) return subCmd;\n\n return null;\n}\n\nfunction splitScriptParts(script: string): string[] {\n const parts: string[] = [];\n let i = 0;\n let current = \"\";\n let braceDepth = 0;\n\n while (i < script.length) {\n if (script[i] === \"{\") {\n braceDepth++;\n current += script[i];\n i++;\n } else if (script[i] === \"}\") {\n braceDepth--;\n current += script[i];\n i++;\n } else if (script[i] === \"s\" && braceDepth === 0 && i + 1 < script.length && !/[a-zA-Z0-9]/.test(script[i + 1]!)) {\n // Detect substitution command — consume s/pattern/replacement/flags\n const delim = script[i + 1]!;\n let j = i + 2;\n let delimCount = 0;\n while (j < script.length && delimCount < 2) {\n if (script[j] === \"\\\\\") {\n j += 2;\n continue;\n }\n if (script[j] === delim) delimCount++;\n j++;\n }\n // Consume trailing flags\n while (j < script.length && /[gi]/.test(script[j]!)) j++;\n current += script.slice(i, j);\n i = j;\n } else if (script[i] === \";\" && braceDepth === 0) {\n const trimmed = current.trim();\n if (trimmed) parts.push(trimmed);\n current = \"\";\n i++;\n } else {\n current += script[i];\n i++;\n }\n }\n const trimmed = current.trim();\n if (trimmed) parts.push(trimmed);\n return parts;\n}\n\ninterface ParseArgsResult {\n options: SedOptions;\n files: string[];\n error?: { type: \"unrecognized_option\" | \"missing_value\"; option: string };\n}\n\nfunction parseArgs(args: string[]): ParseArgsResult {\n const options: SedOptions = {\n suppressOutput: false,\n inPlace: false,\n commands: [],\n };\n const files: string[] = [];\n\n let i = 0;\n while (i < args.length) {\n const arg = args[i]!;\n\n if (arg === \"--\") {\n i++;\n while (i < args.length) {\n const remaining = args[i]!;\n if (options.commands.length === 0) {\n const parts = splitScriptParts(remaining);\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) options.commands.push(cmd);\n }\n } else {\n files.push(remaining);\n }\n i++;\n }\n break;\n }\n\n if (arg.startsWith(\"--\")) {\n return {\n options,\n files,\n error: { type: \"unrecognized_option\", option: arg },\n };\n }\n\n if (arg.startsWith(\"-\") && arg.length > 1) {\n const flagChars = arg.slice(1);\n\n for (let j = 0; j < flagChars.length; j++) {\n const char = flagChars[j]!;\n\n if (char === \"n\") {\n options.suppressOutput = true;\n } else if (char === \"i\") {\n options.inPlace = true;\n } else if (char === \"e\") {\n const restOfArg = flagChars.slice(j + 1);\n let script: string;\n\n if (restOfArg.length > 0) {\n script = restOfArg;\n } else if (i + 1 < args.length) {\n script = args[++i]!;\n } else {\n return {\n options,\n files,\n error: { type: \"missing_value\", option: \"-e\" },\n };\n }\n\n const parts = splitScriptParts(script);\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) options.commands.push(cmd);\n }\n break;\n } else {\n return {\n options,\n files,\n error: { type: \"unrecognized_option\", option: `-${char}` },\n };\n }\n }\n i++;\n continue;\n }\n\n if (options.commands.length === 0) {\n const parts = splitScriptParts(arg);\n for (const part of parts) {\n const cmd = parseCommand(part);\n if (cmd) options.commands.push(cmd);\n }\n } else {\n files.push(arg);\n }\n i++;\n }\n\n return { options, files };\n}\n\nfunction formatError(error: NonNullable<ParseArgsResult[\"error\"]>): string {\n let message: string;\n if (error.type === \"unrecognized_option\") {\n if (error.option.startsWith(\"--\")) {\n message = `sed: unrecognized option '${error.option}'\\n`;\n } else {\n message = `sed: invalid option -- '${error.option.slice(1)}'\\n`;\n }\n } else {\n message = `sed: option '${error.option}' requires an argument\\n`;\n }\n return message + `usage: sed [-ni] [-e script] script [file ...]\\n`;\n}\n\nfunction applySubstitution(line: string, cmd: SedCommand): string {\n if (!cmd.pattern) return line;\n\n if (cmd.globalFlag) {\n return line.replace(new RegExp(cmd.pattern.source, cmd.pattern.flags + \"g\"), cmd.replacement!);\n } else {\n return line.replace(cmd.pattern, cmd.replacement!);\n }\n}\n\ninterface SedState {\n patternSpace: string;\n holdSpace: string;\n lineIndex: number;\n lines: string[];\n suppressOutput: boolean;\n output: string[];\n deleted: boolean;\n restart: boolean; // for D command\n rangeState: Map<SedCommand, boolean>; // tracks active ranges\n}\n\nfunction singleAddressMatches(address: SedAddress, state: SedState): boolean {\n const lineNum = state.lineIndex + 1; // 1-based line numbers\n switch (address.type) {\n case \"line\":\n return lineNum === address.lineNumber;\n case \"last\":\n return state.lineIndex === state.lines.length - 1;\n case \"regex\":\n return address.pattern!.test(state.patternSpace);\n default:\n return false;\n }\n}\n\nfunction addressMatches(cmd: SedCommand, state: SedState): boolean {\n // No address - matches all\n if (!cmd.address1) {\n return cmd.negated ? false : true;\n }\n\n // Range address (addr1,addr2)\n if (cmd.address2) {\n const isInRange = state.rangeState.get(cmd) ?? false;\n\n if (!isInRange) {\n // Not in range yet - check if we should start\n if (singleAddressMatches(cmd.address1, state)) {\n state.rangeState.set(cmd, true);\n const matches = true;\n return cmd.negated ? !matches : matches;\n }\n return cmd.negated ? true : false;\n } else {\n // In range - check if we should end\n if (singleAddressMatches(cmd.address2, state)) {\n state.rangeState.set(cmd, false);\n }\n const matches = true;\n return cmd.negated ? !matches : matches;\n }\n }\n\n // Single address\n const matches = singleAddressMatches(cmd.address1, state);\n return cmd.negated ? !matches : matches;\n}\n\nfunction findLabel(commands: SedCommand[], label: string): number {\n for (let i = 0; i < commands.length; i++) {\n if (commands[i]!.type === \"label\" && commands[i]!.label === label) {\n return i;\n }\n }\n return -1;\n}\n\ninterface ExecResult {\n branchToEnd: boolean;\n branchLabel?: string;\n nextLine: boolean; // n command: output and advance\n deleted: boolean;\n restart: boolean; // D command\n}\n\nfunction executeCommands(\n commands: SedCommand[],\n state: SedState,\n topLevel: boolean\n): ExecResult {\n let pc = 0;\n while (pc < commands.length) {\n const cmd = commands[pc]!;\n\n // Labels are no-ops\n if (cmd.type === \"label\") {\n pc++;\n continue;\n }\n\n // Check address\n if (!addressMatches(cmd, state)) {\n pc++;\n continue;\n }\n\n switch (cmd.type) {\n case \"s\":\n state.patternSpace = applySubstitution(state.patternSpace, cmd);\n break;\n case \"d\":\n state.deleted = true;\n return { branchToEnd: false, deleted: true, nextLine: false, restart: false };\n case \"p\":\n state.output.push(state.patternSpace);\n break;\n case \"h\":\n state.holdSpace = state.patternSpace;\n break;\n case \"H\":\n state.holdSpace = state.holdSpace + \"\\n\" + state.patternSpace;\n break;\n case \"g_hold\":\n state.patternSpace = state.holdSpace;\n break;\n case \"G\":\n state.patternSpace = state.patternSpace + \"\\n\" + state.holdSpace;\n break;\n case \"x\": {\n const tmp = state.patternSpace;\n state.patternSpace = state.holdSpace;\n state.holdSpace = tmp;\n break;\n }\n case \"n\":\n // Output current pattern space, then read next line\n if (!state.suppressOutput) {\n state.output.push(state.patternSpace);\n }\n state.lineIndex++;\n if (state.lineIndex < state.lines.length) {\n state.patternSpace = state.lines[state.lineIndex]!;\n } else {\n // No more lines\n state.deleted = true;\n return { branchToEnd: false, deleted: true, nextLine: false, restart: false };\n }\n break;\n case \"N\":\n // Append next line to pattern space\n state.lineIndex++;\n if (state.lineIndex < state.lines.length) {\n state.patternSpace = state.patternSpace + \"\\n\" + state.lines[state.lineIndex]!;\n } else {\n // No more lines: output pattern space and exit (POSIX behavior)\n if (!state.suppressOutput) {\n state.output.push(state.patternSpace);\n }\n state.deleted = true;\n return { branchToEnd: false, deleted: true, nextLine: false, restart: false };\n }\n break;\n case \"P\": {\n // Print up to first \\n\n const nlIdx = state.patternSpace.indexOf(\"\\n\");\n if (nlIdx >= 0) {\n state.output.push(state.patternSpace.slice(0, nlIdx));\n } else {\n state.output.push(state.patternSpace);\n }\n break;\n }\n case \"D\": {\n // Delete up to first \\n, restart; if no \\n, delete all\n const nlIdx2 = state.patternSpace.indexOf(\"\\n\");\n if (nlIdx2 >= 0) {\n state.patternSpace = state.patternSpace.slice(nlIdx2 + 1);\n state.restart = true;\n return { branchToEnd: false, deleted: false, nextLine: false, restart: true };\n } else {\n state.deleted = true;\n return { branchToEnd: false, deleted: true, nextLine: false, restart: false };\n }\n }\n case \"b\":\n if (cmd.label) {\n // Branch to label — only works at top level\n if (topLevel) {\n const idx = findLabel(commands, cmd.label);\n if (idx >= 0) {\n pc = idx;\n continue;\n }\n }\n // Label not found or not top-level: branch to end\n return { branchToEnd: true, branchLabel: cmd.label, deleted: false, nextLine: false, restart: false };\n }\n // No label: branch to end of script\n return { branchToEnd: true, deleted: false, nextLine: false, restart: false };\n case \"group\":\n if (cmd.children) {\n const result = executeCommands(cmd.children, state, false);\n if (result.deleted || result.branchToEnd || result.restart) {\n // Propagate branch labels up for top-level resolution\n if (result.branchLabel && topLevel) {\n const idx = findLabel(commands, result.branchLabel);\n if (idx >= 0) {\n pc = idx;\n continue;\n }\n }\n return result;\n }\n }\n break;\n }\n pc++;\n }\n return { branchToEnd: false, deleted: false, nextLine: false, restart: false };\n}\n\nexport const sed: Command = async (ctx) => {\n const { options, files, error } = parseArgs(ctx.args);\n\n if (error) {\n await ctx.stderr.writeText(formatError(error));\n return 1;\n }\n\n if (options.commands.length === 0) {\n await ctx.stderr.writeText(\"sed: missing script\\n\");\n return 1;\n }\n\n const processContent = async (content: string): Promise<string[]> => {\n const lines = content.split(\"\\n\");\n if (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n\n const allOutput: string[] = [];\n const state: SedState = {\n patternSpace: \"\",\n holdSpace: \"\",\n lineIndex: 0,\n lines,\n suppressOutput: options.suppressOutput,\n output: [],\n deleted: false,\n restart: false,\n rangeState: new Map(),\n };\n\n while (state.lineIndex < lines.length) {\n state.patternSpace = lines[state.lineIndex]!;\n state.deleted = false;\n state.output = [];\n\n // Execute commands, possibly restarting on D\n let restarting = true;\n while (restarting) {\n restarting = false;\n state.restart = false;\n const result = executeCommands(options.commands, state, true);\n\n if (result.restart) {\n restarting = true;\n // output collected so far in this cycle goes out\n allOutput.push(...state.output);\n state.output = [];\n continue;\n }\n\n if (result.deleted) {\n allOutput.push(...state.output);\n state.lineIndex++;\n break;\n }\n\n // Normal end: collect printed lines, then auto-print\n allOutput.push(...state.output);\n if (!options.suppressOutput) {\n allOutput.push(state.patternSpace);\n }\n state.lineIndex++;\n }\n }\n\n return allOutput;\n };\n\n if (files.length === 0) {\n const content = await ctx.stdin.text();\n const outputLines = await processContent(content);\n for (const line of outputLines) {\n await ctx.stdout.writeText(line + \"\\n\");\n }\n } else if (options.inPlace) {\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 const outputLines = await processContent(content.toString());\n const result = outputLines.length > 0 ? outputLines.join(\"\\n\") + \"\\n\" : \"\";\n await ctx.fs.writeFile(path, result);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await ctx.stderr.writeText(`sed: ${file}: ${message}\\n`);\n return 1;\n }\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);\n const outputLines = await processContent(content.toString());\n for (const line of outputLines) {\n await ctx.stdout.writeText(line + \"\\n\");\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await ctx.stderr.writeText(`sed: ${file}: ${message}\\n`);\n return 1;\n }\n }\n }\n\n return 0;\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "A21FD877655B2D8264756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|