@sergenkabakci/grept 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +169 -2
- package/bin/grept.js +2 -0
- package/dist/cli/args.d.ts +50 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +501 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/help.d.ts +2 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +76 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/version.d.ts +3 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +11 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/core/binary.d.ts +6 -0
- package/dist/core/binary.d.ts.map +1 -0
- package/dist/core/binary.js +14 -0
- package/dist/core/binary.js.map +1 -0
- package/dist/core/encoding.d.ts +10 -0
- package/dist/core/encoding.d.ts.map +1 -0
- package/dist/core/encoding.js +16 -0
- package/dist/core/encoding.js.map +1 -0
- package/dist/core/line-reader.d.ts +19 -0
- package/dist/core/line-reader.d.ts.map +1 -0
- package/dist/core/line-reader.js +69 -0
- package/dist/core/line-reader.js.map +1 -0
- package/dist/core/matcher.d.ts +58 -0
- package/dist/core/matcher.d.ts.map +1 -0
- package/dist/core/matcher.js +342 -0
- package/dist/core/matcher.js.map +1 -0
- package/dist/core/offsets.d.ts +5 -0
- package/dist/core/offsets.d.ts.map +1 -0
- package/dist/core/offsets.js +11 -0
- package/dist/core/offsets.js.map +1 -0
- package/dist/core/patterns.d.ts +17 -0
- package/dist/core/patterns.d.ts.map +1 -0
- package/dist/core/patterns.js +223 -0
- package/dist/core/patterns.js.map +1 -0
- package/dist/core/search.d.ts +5 -0
- package/dist/core/search.d.ts.map +1 -0
- package/dist/core/search.js +249 -0
- package/dist/core/search.js.map +1 -0
- package/dist/errors/errors.d.ts +17 -0
- package/dist/errors/errors.d.ts.map +1 -0
- package/dist/errors/errors.js +32 -0
- package/dist/errors/errors.js.map +1 -0
- package/dist/errors/exit-codes.d.ts +7 -0
- package/dist/errors/exit-codes.d.ts.map +1 -0
- package/dist/errors/exit-codes.js +6 -0
- package/dist/errors/exit-codes.js.map +1 -0
- package/dist/filesystem/discover.d.ts +10 -0
- package/dist/filesystem/discover.d.ts.map +1 -0
- package/dist/filesystem/discover.js +110 -0
- package/dist/filesystem/discover.js.map +1 -0
- package/dist/filesystem/glob.d.ts +9 -0
- package/dist/filesystem/glob.d.ts.map +1 -0
- package/dist/filesystem/glob.js +61 -0
- package/dist/filesystem/glob.js.map +1 -0
- package/dist/filesystem/reparse-points.d.ts +10 -0
- package/dist/filesystem/reparse-points.d.ts.map +1 -0
- package/dist/filesystem/reparse-points.js +28 -0
- package/dist/filesystem/reparse-points.js.map +1 -0
- package/dist/filesystem/traversal.d.ts +15 -0
- package/dist/filesystem/traversal.d.ts.map +1 -0
- package/dist/filesystem/traversal.js +88 -0
- package/dist/filesystem/traversal.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/output/color.d.ts +11 -0
- package/dist/output/color.d.ts.map +1 -0
- package/dist/output/color.js +25 -0
- package/dist/output/color.js.map +1 -0
- package/dist/output/context.d.ts +21 -0
- package/dist/output/context.d.ts.map +1 -0
- package/dist/output/context.js +78 -0
- package/dist/output/context.js.map +1 -0
- package/dist/output/formatter.d.ts +24 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +112 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/writer.d.ts +10 -0
- package/dist/output/writer.d.ts.map +1 -0
- package/dist/output/writer.js +62 -0
- package/dist/output/writer.js.map +1 -0
- package/dist/utils/terminal.d.ts +7 -0
- package/dist/utils/terminal.d.ts.map +1 -0
- package/dist/utils/terminal.js +21 -0
- package/dist/utils/terminal.js.map +1 -0
- package/dist/utils/windows-paths.d.ts +21 -0
- package/dist/utils/windows-paths.d.ts.map +1 -0
- package/dist/utils/windows-paths.js +47 -0
- package/dist/utils/windows-paths.js.map +1 -0
- package/docs/COMPATIBILITY.md +118 -0
- package/docs/PERFORMANCE.md +58 -0
- package/docs/REGEX.md +99 -0
- package/docs/WINDOWS.md +46 -0
- package/package.json +65 -4
package/dist/cli/args.js
ADDED
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { ArgumentError } from '../errors/errors.js';
|
|
3
|
+
export function parseArgs(rawArgs) {
|
|
4
|
+
const options = {
|
|
5
|
+
regexMode: 'basic',
|
|
6
|
+
ignoreCase: false,
|
|
7
|
+
invertMatch: false,
|
|
8
|
+
wordRegexp: false,
|
|
9
|
+
lineRegexp: false,
|
|
10
|
+
patterns: [],
|
|
11
|
+
patternFiles: [],
|
|
12
|
+
byteOffset: false,
|
|
13
|
+
lineNumber: false,
|
|
14
|
+
onlyMatching: false,
|
|
15
|
+
quiet: false,
|
|
16
|
+
noMessages: false,
|
|
17
|
+
count: false,
|
|
18
|
+
filesWithMatches: false,
|
|
19
|
+
filesWithoutMatch: false,
|
|
20
|
+
initialTab: false,
|
|
21
|
+
nullByteFilename: false,
|
|
22
|
+
nullData: false,
|
|
23
|
+
lineBuffered: false,
|
|
24
|
+
color: 'auto',
|
|
25
|
+
unixByteOffsets: false,
|
|
26
|
+
binaryFiles: 'binary',
|
|
27
|
+
beforeContext: 0,
|
|
28
|
+
afterContext: 0,
|
|
29
|
+
groupSeparator: '--',
|
|
30
|
+
recursive: false,
|
|
31
|
+
dereferenceRecursive: false,
|
|
32
|
+
includes: [],
|
|
33
|
+
excludes: [],
|
|
34
|
+
excludeFrom: [],
|
|
35
|
+
excludeDirs: [],
|
|
36
|
+
directories: 'read',
|
|
37
|
+
devices: 'read',
|
|
38
|
+
debug: false,
|
|
39
|
+
help: false,
|
|
40
|
+
version: false,
|
|
41
|
+
targets: [],
|
|
42
|
+
};
|
|
43
|
+
let i = 0;
|
|
44
|
+
let stopOptions = false;
|
|
45
|
+
const positional = [];
|
|
46
|
+
while (i < rawArgs.length) {
|
|
47
|
+
const arg = rawArgs[i];
|
|
48
|
+
if (stopOptions) {
|
|
49
|
+
positional.push(arg);
|
|
50
|
+
i++;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (arg === '--') {
|
|
54
|
+
stopOptions = true;
|
|
55
|
+
i++;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Long option
|
|
59
|
+
if (arg.startsWith('--') && arg.length > 2) {
|
|
60
|
+
const eqIdx = arg.indexOf('=');
|
|
61
|
+
const optName = eqIdx === -1 ? arg.slice(2) : arg.slice(2, eqIdx);
|
|
62
|
+
const optVal = eqIdx === -1 ? undefined : arg.slice(eqIdx + 1);
|
|
63
|
+
const getVal = (name) => {
|
|
64
|
+
if (optVal !== undefined)
|
|
65
|
+
return optVal;
|
|
66
|
+
i++;
|
|
67
|
+
if (i >= rawArgs.length) {
|
|
68
|
+
throw new ArgumentError(`option '--${name}' requires an argument`);
|
|
69
|
+
}
|
|
70
|
+
return rawArgs[i];
|
|
71
|
+
};
|
|
72
|
+
const getNumVal = (name) => {
|
|
73
|
+
const valStr = getVal(name);
|
|
74
|
+
const num = Number(valStr);
|
|
75
|
+
if (!Number.isInteger(num) || num < 0) {
|
|
76
|
+
throw new ArgumentError(`invalid context length argument '${valStr}'`);
|
|
77
|
+
}
|
|
78
|
+
return num;
|
|
79
|
+
};
|
|
80
|
+
switch (optName) {
|
|
81
|
+
case 'help':
|
|
82
|
+
options.help = true;
|
|
83
|
+
break;
|
|
84
|
+
case 'version':
|
|
85
|
+
options.version = true;
|
|
86
|
+
break;
|
|
87
|
+
case 'extended-regexp':
|
|
88
|
+
options.regexMode = 'extended';
|
|
89
|
+
break;
|
|
90
|
+
case 'fixed-strings':
|
|
91
|
+
options.regexMode = 'fixed';
|
|
92
|
+
break;
|
|
93
|
+
case 'basic-regexp':
|
|
94
|
+
options.regexMode = 'basic';
|
|
95
|
+
break;
|
|
96
|
+
case 'perl-regexp':
|
|
97
|
+
options.regexMode = 'pcre';
|
|
98
|
+
break;
|
|
99
|
+
case 'regexp':
|
|
100
|
+
options.patterns.push(getVal('regexp'));
|
|
101
|
+
break;
|
|
102
|
+
case 'file':
|
|
103
|
+
options.patternFiles.push(getVal('file'));
|
|
104
|
+
break;
|
|
105
|
+
case 'ignore-case':
|
|
106
|
+
options.ignoreCase = true;
|
|
107
|
+
break;
|
|
108
|
+
case 'no-ignore-case':
|
|
109
|
+
options.ignoreCase = false;
|
|
110
|
+
break;
|
|
111
|
+
case 'invert-match':
|
|
112
|
+
options.invertMatch = true;
|
|
113
|
+
break;
|
|
114
|
+
case 'word-regexp':
|
|
115
|
+
options.wordRegexp = true;
|
|
116
|
+
break;
|
|
117
|
+
case 'line-regexp':
|
|
118
|
+
options.lineRegexp = true;
|
|
119
|
+
break;
|
|
120
|
+
case 'max-count':
|
|
121
|
+
options.maxCount = getNumVal('max-count');
|
|
122
|
+
break;
|
|
123
|
+
case 'byte-offset':
|
|
124
|
+
options.byteOffset = true;
|
|
125
|
+
break;
|
|
126
|
+
case 'line-number':
|
|
127
|
+
options.lineNumber = true;
|
|
128
|
+
break;
|
|
129
|
+
case 'line-buffered':
|
|
130
|
+
options.lineBuffered = true;
|
|
131
|
+
break;
|
|
132
|
+
case 'with-filename':
|
|
133
|
+
options.withFilename = true;
|
|
134
|
+
break;
|
|
135
|
+
case 'no-filename':
|
|
136
|
+
options.withFilename = false;
|
|
137
|
+
break;
|
|
138
|
+
case 'label':
|
|
139
|
+
options.label = getVal('label');
|
|
140
|
+
break;
|
|
141
|
+
case 'only-matching':
|
|
142
|
+
options.onlyMatching = true;
|
|
143
|
+
break;
|
|
144
|
+
case 'quiet':
|
|
145
|
+
case 'silent':
|
|
146
|
+
options.quiet = true;
|
|
147
|
+
break;
|
|
148
|
+
case 'no-messages':
|
|
149
|
+
options.noMessages = true;
|
|
150
|
+
break;
|
|
151
|
+
case 'text':
|
|
152
|
+
options.binaryFiles = 'text';
|
|
153
|
+
break;
|
|
154
|
+
case 'binary':
|
|
155
|
+
options.binaryFiles = 'without-match';
|
|
156
|
+
break;
|
|
157
|
+
case 'binary-files': {
|
|
158
|
+
const type = getVal('binary-files');
|
|
159
|
+
if (type === 'binary' || type === 'text' || type === 'without-match') {
|
|
160
|
+
options.binaryFiles = type;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
throw new ArgumentError(`unknown binary-files type '${type}'`);
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case 'count':
|
|
168
|
+
options.count = true;
|
|
169
|
+
break;
|
|
170
|
+
case 'files-with-matches':
|
|
171
|
+
options.filesWithMatches = true;
|
|
172
|
+
options.filesWithoutMatch = false;
|
|
173
|
+
break;
|
|
174
|
+
case 'files-without-match':
|
|
175
|
+
options.filesWithoutMatch = true;
|
|
176
|
+
options.filesWithMatches = false;
|
|
177
|
+
break;
|
|
178
|
+
case 'initial-tab':
|
|
179
|
+
options.initialTab = true;
|
|
180
|
+
break;
|
|
181
|
+
case 'null':
|
|
182
|
+
options.nullByteFilename = true;
|
|
183
|
+
break;
|
|
184
|
+
case 'null-data':
|
|
185
|
+
options.nullData = true;
|
|
186
|
+
break;
|
|
187
|
+
case 'color':
|
|
188
|
+
case 'colour': {
|
|
189
|
+
let val = optVal;
|
|
190
|
+
if (val === undefined) {
|
|
191
|
+
if (i + 1 < rawArgs.length &&
|
|
192
|
+
(rawArgs[i + 1] === 'always' ||
|
|
193
|
+
rawArgs[i + 1] === 'never' ||
|
|
194
|
+
rawArgs[i + 1] === 'auto')) {
|
|
195
|
+
i++;
|
|
196
|
+
val = rawArgs[i];
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
val = 'auto';
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (val === 'never' || val === 'always' || val === 'auto') {
|
|
203
|
+
options.color = val;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
throw new ArgumentError(`invalid argument '${val}' for '--color'`);
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
case 'before-context':
|
|
211
|
+
options.beforeContext = getNumVal('before-context');
|
|
212
|
+
break;
|
|
213
|
+
case 'after-context':
|
|
214
|
+
options.afterContext = getNumVal('after-context');
|
|
215
|
+
break;
|
|
216
|
+
case 'context': {
|
|
217
|
+
const c = getNumVal('context');
|
|
218
|
+
options.beforeContext = c;
|
|
219
|
+
options.afterContext = c;
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
case 'group-separator':
|
|
223
|
+
options.groupSeparator = getVal('group-separator');
|
|
224
|
+
break;
|
|
225
|
+
case 'no-group-separator':
|
|
226
|
+
options.groupSeparator = null;
|
|
227
|
+
break;
|
|
228
|
+
case 'recursive':
|
|
229
|
+
options.recursive = true;
|
|
230
|
+
options.directories = 'recurse';
|
|
231
|
+
break;
|
|
232
|
+
case 'dereference-recursive':
|
|
233
|
+
options.recursive = true;
|
|
234
|
+
options.dereferenceRecursive = true;
|
|
235
|
+
options.directories = 'recurse';
|
|
236
|
+
break;
|
|
237
|
+
case 'follow':
|
|
238
|
+
options.dereferenceRecursive = true;
|
|
239
|
+
break;
|
|
240
|
+
case 'include':
|
|
241
|
+
options.includes.push(getVal('include'));
|
|
242
|
+
break;
|
|
243
|
+
case 'exclude':
|
|
244
|
+
options.excludes.push(getVal('exclude'));
|
|
245
|
+
break;
|
|
246
|
+
case 'exclude-from':
|
|
247
|
+
options.excludeFrom.push(getVal('exclude-from'));
|
|
248
|
+
break;
|
|
249
|
+
case 'exclude-dir':
|
|
250
|
+
options.excludeDirs.push(getVal('exclude-dir'));
|
|
251
|
+
break;
|
|
252
|
+
case 'max-depth':
|
|
253
|
+
options.maxDepth = getNumVal('max-depth');
|
|
254
|
+
break;
|
|
255
|
+
case 'directories': {
|
|
256
|
+
const d = getVal('directories');
|
|
257
|
+
if (d === 'read' || d === 'recurse' || d === 'skip') {
|
|
258
|
+
options.directories = d;
|
|
259
|
+
if (d === 'recurse')
|
|
260
|
+
options.recursive = true;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
throw new ArgumentError(`invalid argument '${d}' for '--directories'`);
|
|
264
|
+
}
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
case 'devices': {
|
|
268
|
+
const dev = getVal('devices');
|
|
269
|
+
if (dev === 'read' || dev === 'skip') {
|
|
270
|
+
options.devices = dev;
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
throw new ArgumentError(`invalid argument '${dev}' for '--devices'`);
|
|
274
|
+
}
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
case 'mmap':
|
|
278
|
+
// documented partial support
|
|
279
|
+
break;
|
|
280
|
+
case 'unix-byte-offsets':
|
|
281
|
+
options.unixByteOffsets = true;
|
|
282
|
+
break;
|
|
283
|
+
case 'debug':
|
|
284
|
+
options.debug = true;
|
|
285
|
+
break;
|
|
286
|
+
default:
|
|
287
|
+
throw new ArgumentError(`unrecognized option '--${optName}'`);
|
|
288
|
+
}
|
|
289
|
+
i++;
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
// Short options or numeric context flag (-3)
|
|
293
|
+
if (arg.startsWith('-') && arg.length > 1) {
|
|
294
|
+
// Check if pure number like -3
|
|
295
|
+
if (/^-\d+$/.test(arg)) {
|
|
296
|
+
const c = parseInt(arg.slice(1), 10);
|
|
297
|
+
options.beforeContext = c;
|
|
298
|
+
options.afterContext = c;
|
|
299
|
+
i++;
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
let charIdx = 1;
|
|
303
|
+
while (charIdx < arg.length) {
|
|
304
|
+
const char = arg[charIdx];
|
|
305
|
+
const getShortVal = () => {
|
|
306
|
+
if (charIdx + 1 < arg.length) {
|
|
307
|
+
const val = arg.slice(charIdx + 1);
|
|
308
|
+
charIdx = arg.length; // consumed rest of current arg
|
|
309
|
+
return val;
|
|
310
|
+
}
|
|
311
|
+
i++;
|
|
312
|
+
if (i >= rawArgs.length) {
|
|
313
|
+
throw new ArgumentError(`option requires an argument -- '${char}'`);
|
|
314
|
+
}
|
|
315
|
+
return rawArgs[i];
|
|
316
|
+
};
|
|
317
|
+
const getShortNumVal = () => {
|
|
318
|
+
const valStr = getShortVal();
|
|
319
|
+
const num = Number(valStr);
|
|
320
|
+
if (!Number.isInteger(num) || num < 0) {
|
|
321
|
+
throw new ArgumentError(`invalid context length argument '${valStr}'`);
|
|
322
|
+
}
|
|
323
|
+
return num;
|
|
324
|
+
};
|
|
325
|
+
switch (char) {
|
|
326
|
+
case 'E':
|
|
327
|
+
options.regexMode = 'extended';
|
|
328
|
+
break;
|
|
329
|
+
case 'F':
|
|
330
|
+
options.regexMode = 'fixed';
|
|
331
|
+
break;
|
|
332
|
+
case 'G':
|
|
333
|
+
options.regexMode = 'basic';
|
|
334
|
+
break;
|
|
335
|
+
case 'P':
|
|
336
|
+
options.regexMode = 'pcre';
|
|
337
|
+
break;
|
|
338
|
+
case 'e':
|
|
339
|
+
options.patterns.push(getShortVal());
|
|
340
|
+
break;
|
|
341
|
+
case 'f':
|
|
342
|
+
options.patternFiles.push(getShortVal());
|
|
343
|
+
break;
|
|
344
|
+
case 'i':
|
|
345
|
+
case 'y':
|
|
346
|
+
options.ignoreCase = true;
|
|
347
|
+
break;
|
|
348
|
+
case 'v':
|
|
349
|
+
options.invertMatch = true;
|
|
350
|
+
break;
|
|
351
|
+
case 'w':
|
|
352
|
+
options.wordRegexp = true;
|
|
353
|
+
break;
|
|
354
|
+
case 'x':
|
|
355
|
+
options.lineRegexp = true;
|
|
356
|
+
break;
|
|
357
|
+
case 'm':
|
|
358
|
+
options.maxCount = getShortNumVal();
|
|
359
|
+
break;
|
|
360
|
+
case 'b':
|
|
361
|
+
options.byteOffset = true;
|
|
362
|
+
break;
|
|
363
|
+
case 'n':
|
|
364
|
+
options.lineNumber = true;
|
|
365
|
+
break;
|
|
366
|
+
case 'H':
|
|
367
|
+
options.withFilename = true;
|
|
368
|
+
break;
|
|
369
|
+
case 'h':
|
|
370
|
+
options.withFilename = false;
|
|
371
|
+
break;
|
|
372
|
+
case 'o':
|
|
373
|
+
options.onlyMatching = true;
|
|
374
|
+
break;
|
|
375
|
+
case 'q':
|
|
376
|
+
options.quiet = true;
|
|
377
|
+
break;
|
|
378
|
+
case 's':
|
|
379
|
+
options.noMessages = true;
|
|
380
|
+
break;
|
|
381
|
+
case 'a':
|
|
382
|
+
options.binaryFiles = 'text';
|
|
383
|
+
break;
|
|
384
|
+
case 'I':
|
|
385
|
+
options.binaryFiles = 'without-match';
|
|
386
|
+
break;
|
|
387
|
+
case 'c':
|
|
388
|
+
options.count = true;
|
|
389
|
+
break;
|
|
390
|
+
case 'l':
|
|
391
|
+
options.filesWithMatches = true;
|
|
392
|
+
options.filesWithoutMatch = false;
|
|
393
|
+
break;
|
|
394
|
+
case 'L':
|
|
395
|
+
options.filesWithoutMatch = true;
|
|
396
|
+
options.filesWithMatches = false;
|
|
397
|
+
break;
|
|
398
|
+
case 'T':
|
|
399
|
+
options.initialTab = true;
|
|
400
|
+
break;
|
|
401
|
+
case 'Z':
|
|
402
|
+
options.nullByteFilename = true;
|
|
403
|
+
break;
|
|
404
|
+
case 'z':
|
|
405
|
+
options.nullData = true;
|
|
406
|
+
break;
|
|
407
|
+
case 'A':
|
|
408
|
+
options.afterContext = getShortNumVal();
|
|
409
|
+
break;
|
|
410
|
+
case 'B':
|
|
411
|
+
options.beforeContext = getShortNumVal();
|
|
412
|
+
break;
|
|
413
|
+
case 'C': {
|
|
414
|
+
const c = getShortNumVal();
|
|
415
|
+
options.beforeContext = c;
|
|
416
|
+
options.afterContext = c;
|
|
417
|
+
break;
|
|
418
|
+
}
|
|
419
|
+
case 'r':
|
|
420
|
+
options.recursive = true;
|
|
421
|
+
options.directories = 'recurse';
|
|
422
|
+
break;
|
|
423
|
+
case 'R':
|
|
424
|
+
options.recursive = true;
|
|
425
|
+
options.dereferenceRecursive = true;
|
|
426
|
+
options.directories = 'recurse';
|
|
427
|
+
break;
|
|
428
|
+
case 'd': {
|
|
429
|
+
const d = getShortVal();
|
|
430
|
+
if (d === 'read' || d === 'recurse' || d === 'skip') {
|
|
431
|
+
options.directories = d;
|
|
432
|
+
if (d === 'recurse')
|
|
433
|
+
options.recursive = true;
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
throw new ArgumentError(`invalid argument '${d}' for '-d'`);
|
|
437
|
+
}
|
|
438
|
+
break;
|
|
439
|
+
}
|
|
440
|
+
case 'D': {
|
|
441
|
+
const dev = getShortVal();
|
|
442
|
+
if (dev === 'read' || dev === 'skip') {
|
|
443
|
+
options.devices = dev;
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
throw new ArgumentError(`invalid argument '${dev}' for '-D'`);
|
|
447
|
+
}
|
|
448
|
+
break;
|
|
449
|
+
}
|
|
450
|
+
case 'V':
|
|
451
|
+
options.version = true;
|
|
452
|
+
break;
|
|
453
|
+
case 'u':
|
|
454
|
+
options.unixByteOffsets = true;
|
|
455
|
+
break;
|
|
456
|
+
case 'U':
|
|
457
|
+
options.binaryFiles = 'text';
|
|
458
|
+
break;
|
|
459
|
+
default:
|
|
460
|
+
throw new ArgumentError(`invalid option -- '${char}'`);
|
|
461
|
+
}
|
|
462
|
+
charIdx++;
|
|
463
|
+
}
|
|
464
|
+
i++;
|
|
465
|
+
continue;
|
|
466
|
+
}
|
|
467
|
+
// Positional argument
|
|
468
|
+
positional.push(arg);
|
|
469
|
+
i++;
|
|
470
|
+
}
|
|
471
|
+
// Load patterns from -f pattern files
|
|
472
|
+
for (const file of options.patternFiles) {
|
|
473
|
+
try {
|
|
474
|
+
const content = fs.readFileSync(file, 'utf8');
|
|
475
|
+
const lines = content.split(/\r?\n/);
|
|
476
|
+
// Remove trailing empty line if file ended in newline
|
|
477
|
+
if (lines.length > 0 && lines[lines.length - 1] === '') {
|
|
478
|
+
lines.pop();
|
|
479
|
+
}
|
|
480
|
+
options.patterns.push(...lines);
|
|
481
|
+
}
|
|
482
|
+
catch (err) {
|
|
483
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
484
|
+
throw new ArgumentError(`cannot open pattern file '${file}': ${message}`);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
// If no -e or -f was given, the first positional argument is the pattern
|
|
488
|
+
if (options.patterns.length === 0 && !options.help && !options.version) {
|
|
489
|
+
if (positional.length === 0) {
|
|
490
|
+
// No pattern given
|
|
491
|
+
throw new ArgumentError('missing PATTERNS argument');
|
|
492
|
+
}
|
|
493
|
+
const pat = positional.shift();
|
|
494
|
+
// In GNU grep, if the pattern contains multiple lines, each line is an independent pattern
|
|
495
|
+
const patLines = pat.split(/\r?\n/);
|
|
496
|
+
options.patterns.push(...patLines);
|
|
497
|
+
}
|
|
498
|
+
options.targets = positional;
|
|
499
|
+
return options;
|
|
500
|
+
}
|
|
501
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,IAAI,MAAM,CA0EtC"}
|
package/dist/cli/help.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export function getHelpString() {
|
|
2
|
+
return `Usage: grept [OPTION]... PATTERNS [FILE]...
|
|
3
|
+
Search for PATTERNS in each FILE.
|
|
4
|
+
Example: grept -i 'hello world' menu.h main.c
|
|
5
|
+
|
|
6
|
+
Pattern selection and interpretation:
|
|
7
|
+
-E, --extended-regexp PATTERNS are extended regular expressions
|
|
8
|
+
-F, --fixed-strings PATTERNS are strings
|
|
9
|
+
-G, --basic-regexp PATTERNS are basic regular expressions (default)
|
|
10
|
+
-P, --perl-regexp PATTERNS are Perl-compatible regular expressions (PCRE2)
|
|
11
|
+
-e, --regexp=PATTERNS use PATTERNS for matching
|
|
12
|
+
-f, --file=FILE take PATTERNS from FILE
|
|
13
|
+
-i, --ignore-case ignore case distinctions in patterns and data
|
|
14
|
+
--no-ignore-case do not ignore case distinctions (default)
|
|
15
|
+
-v, --invert-match select non-matching lines
|
|
16
|
+
-w, --word-regexp match only whole words
|
|
17
|
+
-x, --line-regexp match only whole lines
|
|
18
|
+
|
|
19
|
+
Miscellaneous:
|
|
20
|
+
-s, --no-messages suppress error messages
|
|
21
|
+
-v, --invert-match select non-matching lines
|
|
22
|
+
-V, --version display version information and exit
|
|
23
|
+
--help display this help text and exit
|
|
24
|
+
|
|
25
|
+
Output control:
|
|
26
|
+
-m, --max-count=NUM stop after NUM selected lines
|
|
27
|
+
-b, --byte-offset print the byte offset with output lines
|
|
28
|
+
-n, --line-number print line number with output lines
|
|
29
|
+
--line-buffered flush output on every line
|
|
30
|
+
-H, --with-filename print file name with output lines
|
|
31
|
+
-h, --no-filename suppress the file name prefix on output
|
|
32
|
+
--label=LABEL use LABEL as the standard input file name prefix
|
|
33
|
+
-o, --only-matching show only nonempty parts of lines matching
|
|
34
|
+
-q, --quiet, --silent suppress all normal output
|
|
35
|
+
-a, --text equivalent to --binary-files=text
|
|
36
|
+
-I equivalent to --binary-files=without-match
|
|
37
|
+
--binary-files=TYPE assume that binary files are TYPE;
|
|
38
|
+
TYPE is 'binary', 'text', or 'without-match'
|
|
39
|
+
-c, --count print only a count of selected lines per FILE
|
|
40
|
+
-l, --files-with-matches print only names of FILEs with selected lines
|
|
41
|
+
-L, --files-without-match print only names of FILEs with no selected lines
|
|
42
|
+
-Z, --null print 0 byte after FILE name
|
|
43
|
+
-z, --null-data a data line ends in 0 byte, not newline
|
|
44
|
+
-T, --initial-tab make tabs line up (if needed)
|
|
45
|
+
--color[=WHEN],
|
|
46
|
+
--colour[=WHEN] use markers to highlight the matching strings;
|
|
47
|
+
WHEN is 'always', 'never', or 'auto'
|
|
48
|
+
|
|
49
|
+
Context control:
|
|
50
|
+
-B, --before-context=NUM print NUM lines of leading context
|
|
51
|
+
-A, --after-context=NUM print NUM lines of trailing context
|
|
52
|
+
-C, --context=NUM print NUM lines of output context
|
|
53
|
+
-NUM same as --context=NUM
|
|
54
|
+
--group-separator=SEP use SEP as a group separator
|
|
55
|
+
--no-group-separator do not treat group separators specially
|
|
56
|
+
|
|
57
|
+
File and directory selection:
|
|
58
|
+
-r, --recursive like --directories=recurse, but do not follow symlinks/junctions
|
|
59
|
+
-R, --dereference-recursive
|
|
60
|
+
likewise, but follow all directory symlinks and NTFS junctions
|
|
61
|
+
--follow follow directory symlinks and reparse points
|
|
62
|
+
--include=GLOB search only files that match GLOB
|
|
63
|
+
--exclude=GLOB skip files that match GLOB
|
|
64
|
+
--exclude-from=FILE skip files that match any file pattern from FILE
|
|
65
|
+
--exclude-dir=GLOB skip directories that match GLOB
|
|
66
|
+
--max-depth=NUM descend at most NUM directories
|
|
67
|
+
-d, --directories=ACTION how to handle directories;
|
|
68
|
+
ACTION is 'read', 'recurse', or 'skip'
|
|
69
|
+
-D, --devices=ACTION how to handle devices, FIFOs, and sockets;
|
|
70
|
+
ACTION is 'read' or 'skip'
|
|
71
|
+
--debug display internal debugging information
|
|
72
|
+
|
|
73
|
+
When FILE is '-', read standard input. If no FILE is given, recursive searches
|
|
74
|
+
examine the working directory '.', while nonrecursive searches read standard input.`;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFAwE2E,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,wBAAgB,gBAAgB,IAAI,MAAM,CAQzC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const VERSION = '1.0.0';
|
|
2
|
+
export function getVersionString() {
|
|
3
|
+
return `grept (GNU grep compatible for Windows) ${VERSION}
|
|
4
|
+
Copyright (C) 2026 grept contributors.
|
|
5
|
+
License MIT <https://opensource.org/licenses/MIT>.
|
|
6
|
+
This is free software: you are free to change and redistribute it.
|
|
7
|
+
There is NO WARRANTY, to the extent permitted by law.
|
|
8
|
+
|
|
9
|
+
Written for Windows native execution with PCRE2 WebAssembly support.`;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,UAAU,gBAAgB;IAC9B,OAAO,2CAA2C,OAAO;;;;;;qEAMU,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../src/core/binary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQ1E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects whether a buffer contains binary data.
|
|
3
|
+
* In GNU grep, a file is treated as binary if it contains a NUL byte (\0).
|
|
4
|
+
*/
|
|
5
|
+
export function isBinaryBuffer(buffer, length) {
|
|
6
|
+
const checkLen = Math.min(buffer.length, length, 8192);
|
|
7
|
+
for (let i = 0; i < checkLen; i++) {
|
|
8
|
+
if (buffer[i] === 0) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=binary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/core/binary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAkB,EAAE,MAAc;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|