@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.
Files changed (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +169 -2
  3. package/bin/grept.js +2 -0
  4. package/dist/cli/args.d.ts +50 -0
  5. package/dist/cli/args.d.ts.map +1 -0
  6. package/dist/cli/args.js +501 -0
  7. package/dist/cli/args.js.map +1 -0
  8. package/dist/cli/help.d.ts +2 -0
  9. package/dist/cli/help.d.ts.map +1 -0
  10. package/dist/cli/help.js +76 -0
  11. package/dist/cli/help.js.map +1 -0
  12. package/dist/cli/version.d.ts +3 -0
  13. package/dist/cli/version.d.ts.map +1 -0
  14. package/dist/cli/version.js +11 -0
  15. package/dist/cli/version.js.map +1 -0
  16. package/dist/core/binary.d.ts +6 -0
  17. package/dist/core/binary.d.ts.map +1 -0
  18. package/dist/core/binary.js +14 -0
  19. package/dist/core/binary.js.map +1 -0
  20. package/dist/core/encoding.d.ts +10 -0
  21. package/dist/core/encoding.d.ts.map +1 -0
  22. package/dist/core/encoding.js +16 -0
  23. package/dist/core/encoding.js.map +1 -0
  24. package/dist/core/line-reader.d.ts +19 -0
  25. package/dist/core/line-reader.d.ts.map +1 -0
  26. package/dist/core/line-reader.js +69 -0
  27. package/dist/core/line-reader.js.map +1 -0
  28. package/dist/core/matcher.d.ts +58 -0
  29. package/dist/core/matcher.d.ts.map +1 -0
  30. package/dist/core/matcher.js +342 -0
  31. package/dist/core/matcher.js.map +1 -0
  32. package/dist/core/offsets.d.ts +5 -0
  33. package/dist/core/offsets.d.ts.map +1 -0
  34. package/dist/core/offsets.js +11 -0
  35. package/dist/core/offsets.js.map +1 -0
  36. package/dist/core/patterns.d.ts +17 -0
  37. package/dist/core/patterns.d.ts.map +1 -0
  38. package/dist/core/patterns.js +223 -0
  39. package/dist/core/patterns.js.map +1 -0
  40. package/dist/core/search.d.ts +5 -0
  41. package/dist/core/search.d.ts.map +1 -0
  42. package/dist/core/search.js +249 -0
  43. package/dist/core/search.js.map +1 -0
  44. package/dist/errors/errors.d.ts +17 -0
  45. package/dist/errors/errors.d.ts.map +1 -0
  46. package/dist/errors/errors.js +32 -0
  47. package/dist/errors/errors.js.map +1 -0
  48. package/dist/errors/exit-codes.d.ts +7 -0
  49. package/dist/errors/exit-codes.d.ts.map +1 -0
  50. package/dist/errors/exit-codes.js +6 -0
  51. package/dist/errors/exit-codes.js.map +1 -0
  52. package/dist/filesystem/discover.d.ts +10 -0
  53. package/dist/filesystem/discover.d.ts.map +1 -0
  54. package/dist/filesystem/discover.js +110 -0
  55. package/dist/filesystem/discover.js.map +1 -0
  56. package/dist/filesystem/glob.d.ts +9 -0
  57. package/dist/filesystem/glob.d.ts.map +1 -0
  58. package/dist/filesystem/glob.js +61 -0
  59. package/dist/filesystem/glob.js.map +1 -0
  60. package/dist/filesystem/reparse-points.d.ts +10 -0
  61. package/dist/filesystem/reparse-points.d.ts.map +1 -0
  62. package/dist/filesystem/reparse-points.js +28 -0
  63. package/dist/filesystem/reparse-points.js.map +1 -0
  64. package/dist/filesystem/traversal.d.ts +15 -0
  65. package/dist/filesystem/traversal.d.ts.map +1 -0
  66. package/dist/filesystem/traversal.js +88 -0
  67. package/dist/filesystem/traversal.js.map +1 -0
  68. package/dist/index.d.ts +9 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +50 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/output/color.d.ts +11 -0
  73. package/dist/output/color.d.ts.map +1 -0
  74. package/dist/output/color.js +25 -0
  75. package/dist/output/color.js.map +1 -0
  76. package/dist/output/context.d.ts +21 -0
  77. package/dist/output/context.d.ts.map +1 -0
  78. package/dist/output/context.js +78 -0
  79. package/dist/output/context.js.map +1 -0
  80. package/dist/output/formatter.d.ts +24 -0
  81. package/dist/output/formatter.d.ts.map +1 -0
  82. package/dist/output/formatter.js +112 -0
  83. package/dist/output/formatter.js.map +1 -0
  84. package/dist/output/writer.d.ts +10 -0
  85. package/dist/output/writer.d.ts.map +1 -0
  86. package/dist/output/writer.js +62 -0
  87. package/dist/output/writer.js.map +1 -0
  88. package/dist/utils/terminal.d.ts +7 -0
  89. package/dist/utils/terminal.d.ts.map +1 -0
  90. package/dist/utils/terminal.js +21 -0
  91. package/dist/utils/terminal.js.map +1 -0
  92. package/dist/utils/windows-paths.d.ts +21 -0
  93. package/dist/utils/windows-paths.d.ts.map +1 -0
  94. package/dist/utils/windows-paths.js +47 -0
  95. package/dist/utils/windows-paths.js.map +1 -0
  96. package/docs/COMPATIBILITY.md +118 -0
  97. package/docs/PERFORMANCE.md +58 -0
  98. package/docs/REGEX.md +99 -0
  99. package/docs/WINDOWS.md +46 -0
  100. package/package.json +65 -4
@@ -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,2 @@
1
+ export declare function getHelpString(): string;
2
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,IAAI,MAAM,CA0EtC"}
@@ -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,3 @@
1
+ export declare const VERSION = "1.0.0";
2
+ export declare function getVersionString(): string;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -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,6 @@
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 declare function isBinaryBuffer(buffer: Uint8Array, length: number): boolean;
6
+ //# sourceMappingURL=binary.d.ts.map
@@ -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"}