@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,223 @@
1
+ const POSIX_CLASSES = {
2
+ '[:alnum:]': 'a-zA-Z0-9',
3
+ '[:alpha:]': 'a-zA-Z',
4
+ '[:blank:]': ' \\t',
5
+ '[:cntrl:]': '\\x00-\\x1F\\x7F',
6
+ '[:digit:]': '0-9',
7
+ '[:graph:]': '\\x21-\\x7E',
8
+ '[:lower:]': 'a-z',
9
+ '[:print:]': '\\x20-\\x7E',
10
+ '[:punct:]': '!-/:-@\\[-`{-~',
11
+ '[:space:]': ' \\t\\r\\n\\v\\f',
12
+ '[:upper:]': 'A-Z',
13
+ '[:xdigit:]': '0-9A-Fa-f',
14
+ };
15
+ /**
16
+ * Expands POSIX bracket classes inside a bracket expression [...].
17
+ */
18
+ function expandPosixInBracket(content) {
19
+ let result = content;
20
+ for (const [posix, expanded] of Object.entries(POSIX_CLASSES)) {
21
+ result = result.replaceAll(posix, expanded);
22
+ }
23
+ return result;
24
+ }
25
+ /**
26
+ * Converts GNU Basic Regular Expression (BRE) to JS RegExp pattern.
27
+ */
28
+ export function convertBreToJsRegex(bre) {
29
+ let result = '';
30
+ let i = 0;
31
+ const len = bre.length;
32
+ while (i < len) {
33
+ const c = bre[i];
34
+ // Escaped sequence
35
+ if (c === '\\') {
36
+ if (i + 1 >= len) {
37
+ // Trailing backslash
38
+ result += '\\\\';
39
+ i++;
40
+ break;
41
+ }
42
+ const next = bre[i + 1];
43
+ if (next === '<') {
44
+ result += '(?:(?<=\\W|^)(?=\\w))';
45
+ i += 2;
46
+ continue;
47
+ }
48
+ if (next === '>') {
49
+ result += '(?:(?<=\\w)(?=\\W|$))';
50
+ i += 2;
51
+ continue;
52
+ }
53
+ if (next === '(' || next === ')' || next === '+' || next === '?' || next === '|') {
54
+ // In BRE, \(, \), \+, \?, \| are regex operators
55
+ result += next;
56
+ i += 2;
57
+ continue;
58
+ }
59
+ if (next === '{') {
60
+ // In BRE, \{m,n\} is an interval quantifier
61
+ const closeIdx = bre.indexOf('\\}', i + 2);
62
+ if (closeIdx !== -1) {
63
+ const inner = bre.slice(i + 2, closeIdx);
64
+ if (/^\d+(?:,\d*)?$/.test(inner)) {
65
+ result += `{${inner}}`;
66
+ i = closeIdx + 2;
67
+ continue;
68
+ }
69
+ }
70
+ result += '\\{';
71
+ i += 2;
72
+ continue;
73
+ }
74
+ if (next === '}') {
75
+ result += '\\}';
76
+ i += 2;
77
+ continue;
78
+ }
79
+ if (next >= '1' && next <= '9') {
80
+ // Backreference \1 through \9
81
+ result += `\\${next}`;
82
+ i += 2;
83
+ continue;
84
+ }
85
+ if (next === 'b' ||
86
+ next === 'B' ||
87
+ next === 'w' ||
88
+ next === 'W' ||
89
+ next === 's' ||
90
+ next === 'S' ||
91
+ next === 'd' ||
92
+ next === 'D') {
93
+ result += `\\${next}`;
94
+ i += 2;
95
+ continue;
96
+ }
97
+ // Any other escaped char: escape it literally
98
+ result += `\\${next}`;
99
+ i += 2;
100
+ continue;
101
+ }
102
+ // Bracket expressions [...]
103
+ if (c === '[') {
104
+ let j = i + 1;
105
+ if (j < len && (bre[j] === '^' || bre[j] === '!')) {
106
+ j++;
107
+ }
108
+ if (j < len && bre[j] === ']') {
109
+ j++;
110
+ }
111
+ while (j < len && bre[j] !== ']') {
112
+ // Check for [:class:] inside brackets
113
+ if (bre.startsWith('[:', j)) {
114
+ const closePosix = bre.indexOf(':]', j + 2);
115
+ if (closePosix !== -1) {
116
+ j = closePosix + 2;
117
+ continue;
118
+ }
119
+ }
120
+ j++;
121
+ }
122
+ if (j < len && bre[j] === ']') {
123
+ // Found complete bracket expression
124
+ const bracketContent = bre.slice(i + 1, j);
125
+ const expanded = expandPosixInBracket(bracketContent);
126
+ result += `[${expanded}]`;
127
+ i = j + 1;
128
+ continue;
129
+ }
130
+ }
131
+ // Unescaped operators in BRE are literals!
132
+ if (c === '(' || c === ')' || c === '+' || c === '?' || c === '|' || c === '{' || c === '}') {
133
+ result += `\\${c}`;
134
+ i++;
135
+ continue;
136
+ }
137
+ result += c;
138
+ i++;
139
+ }
140
+ return result;
141
+ }
142
+ /**
143
+ * Converts GNU Extended Regular Expression (ERE) to JS RegExp pattern.
144
+ */
145
+ export function convertEreToJsRegex(ere) {
146
+ let result = '';
147
+ let i = 0;
148
+ const len = ere.length;
149
+ while (i < len) {
150
+ const c = ere[i];
151
+ if (c === '\\') {
152
+ if (i + 1 >= len) {
153
+ result += '\\\\';
154
+ i++;
155
+ break;
156
+ }
157
+ const next = ere[i + 1];
158
+ if (next === '<') {
159
+ result += '(?:(?<=\\W|^)(?=\\w))';
160
+ i += 2;
161
+ continue;
162
+ }
163
+ if (next === '>') {
164
+ result += '(?:(?<=\\w)(?=\\W|$))';
165
+ i += 2;
166
+ continue;
167
+ }
168
+ result += `\\${next}`;
169
+ i += 2;
170
+ continue;
171
+ }
172
+ // Bracket expressions [...]
173
+ if (c === '[') {
174
+ let j = i + 1;
175
+ if (j < len && (ere[j] === '^' || ere[j] === '!')) {
176
+ j++;
177
+ }
178
+ if (j < len && ere[j] === ']') {
179
+ j++;
180
+ }
181
+ while (j < len && ere[j] !== ']') {
182
+ if (ere.startsWith('[:', j)) {
183
+ const closePosix = ere.indexOf(':]', j + 2);
184
+ if (closePosix !== -1) {
185
+ j = closePosix + 2;
186
+ continue;
187
+ }
188
+ }
189
+ j++;
190
+ }
191
+ if (j < len && ere[j] === ']') {
192
+ const bracketContent = ere.slice(i + 1, j);
193
+ const expanded = expandPosixInBracket(bracketContent);
194
+ result += `[${expanded}]`;
195
+ i = j + 1;
196
+ continue;
197
+ }
198
+ }
199
+ result += c;
200
+ i++;
201
+ }
202
+ return result;
203
+ }
204
+ /**
205
+ * Escapes a literal string for inclusion in a RegExp pattern.
206
+ */
207
+ export function escapeRegex(str) {
208
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
209
+ }
210
+ /**
211
+ * Applies -w (word) and -x (line) constraints to a regex pattern string.
212
+ */
213
+ export function applyPatternConstraints(patternStr, wordRegexp, lineRegexp) {
214
+ let res = patternStr;
215
+ if (wordRegexp) {
216
+ res = `(?:\\b|(?<=\\W)|^)(?:${res})(?:\\b|(?=\\W)|$)`;
217
+ }
218
+ if (lineRegexp) {
219
+ res = `^(?:${res})$`;
220
+ }
221
+ return res;
222
+ }
223
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/core/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CliOptions } from '../cli/args.js';
2
+ import { type ExitCodeType } from '../errors/exit-codes.js';
3
+ import { OutputWriter } from '../output/writer.js';
4
+ export declare function runSearch(options: CliOptions, customWriter?: OutputWriter): Promise<ExitCodeType>;
5
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAQtE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,wBAAsB,SAAS,CAC7B,OAAO,EAAE,UAAU,EACnB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,YAAY,CAAC,CAgRvB"}
@@ -0,0 +1,249 @@
1
+ import fs from 'node:fs';
2
+ import { ExitCode } from '../errors/exit-codes.js';
3
+ import { discoverTargets } from '../filesystem/discover.js';
4
+ import { readLines } from './line-reader.js';
5
+ import { isBinaryBuffer } from './binary.js';
6
+ import { createMatcher } from './matcher.js';
7
+ import { OutputFormatter } from '../output/formatter.js';
8
+ import { AnsiColors } from '../output/color.js';
9
+ import { ContextManager } from '../output/context.js';
10
+ import { OutputWriter } from '../output/writer.js';
11
+ import { shouldEnableColor } from '../utils/terminal.js';
12
+ export async function runSearch(options, customWriter) {
13
+ const enableColor = shouldEnableColor(options.color);
14
+ const colors = new AnsiColors(enableColor);
15
+ const formatter = new OutputFormatter(options, colors);
16
+ const writer = customWriter ??
17
+ new OutputWriter(process.stdout, process.stderr, options.nullData, options.lineBuffered);
18
+ const matcher = await createMatcher(options);
19
+ // Discover all targets
20
+ const targets = [];
21
+ for await (const t of discoverTargets(options)) {
22
+ targets.push(t);
23
+ }
24
+ // Determine whether filename prefix should be shown
25
+ const isMultipleTargets = targets.length > 1 || options.recursive;
26
+ const defaultShowFilename = isMultipleTargets;
27
+ const showFilename = options.withFilename !== undefined ? options.withFilename : defaultShowFilename;
28
+ let hasAnyMatch = false;
29
+ let hasError = false;
30
+ for (const target of targets) {
31
+ if (target.isError) {
32
+ hasError = true;
33
+ if (!options.noMessages) {
34
+ writer.writeError(`grept: ${target.filePath}: ${target.errorMessage}`);
35
+ }
36
+ continue;
37
+ }
38
+ let stream;
39
+ if (target.isStdin) {
40
+ stream = process.stdin;
41
+ }
42
+ else {
43
+ try {
44
+ stream = fs.createReadStream(target.filePath, { highWaterMark: 65536 });
45
+ }
46
+ catch (err) {
47
+ hasError = true;
48
+ if (!options.noMessages) {
49
+ const msg = err instanceof Error ? err.message : String(err);
50
+ writer.writeError(`grept: ${target.filePath}: ${msg}`);
51
+ }
52
+ continue;
53
+ }
54
+ }
55
+ let fileHasMatch = false;
56
+ let fileMatchCount = 0;
57
+ const contextManager = new ContextManager(options.beforeContext, options.afterContext);
58
+ try {
59
+ // Peek initial chunk for binary detection
60
+ let initialChunk;
61
+ let isBinary = false;
62
+ // Handle stream errors
63
+ stream.on('error', (err) => {
64
+ hasError = true;
65
+ if (!options.noMessages) {
66
+ const msg = err instanceof Error ? err.message : String(err);
67
+ writer.writeError(`grept: ${target.filePath}: ${msg}`);
68
+ }
69
+ });
70
+ // Binary detection (only if not -a and not -z)
71
+ if (options.binaryFiles !== 'text' && !options.nullData) {
72
+ // Read first chunk from stream
73
+ const iterator = stream[Symbol.asyncIterator]();
74
+ const first = await iterator.next();
75
+ if (!first.done && first.value) {
76
+ initialChunk = Buffer.isBuffer(first.value) ? first.value : Buffer.from(first.value);
77
+ if (isBinaryBuffer(initialChunk, initialChunk.length)) {
78
+ isBinary = true;
79
+ }
80
+ }
81
+ }
82
+ if (isBinary) {
83
+ if (options.binaryFiles === 'without-match') {
84
+ // -I or --binary-files=without-match: skip binary file completely
85
+ if (!target.isStdin) {
86
+ stream.destroy();
87
+ }
88
+ continue;
89
+ }
90
+ // --binary-files=binary (default)
91
+ // Check if any match exists in the binary file
92
+ const binaryLines = readLines(stream, {
93
+ nullData: options.nullData,
94
+ initialChunk,
95
+ unixByteOffsets: options.unixByteOffsets,
96
+ });
97
+ for await (const line of binaryLines) {
98
+ if (matcher.test(line.text)) {
99
+ fileHasMatch = true;
100
+ if (!options.filesWithoutMatch) {
101
+ hasAnyMatch = true;
102
+ }
103
+ break;
104
+ }
105
+ }
106
+ if (fileHasMatch) {
107
+ if (options.quiet) {
108
+ if (!target.isStdin)
109
+ stream.destroy();
110
+ return ExitCode.MATCH_FOUND;
111
+ }
112
+ if (options.filesWithMatches) {
113
+ writer.writeLine(target.displayPath);
114
+ }
115
+ else if (options.count) {
116
+ writer.writeLine(formatter.formatBinaryMatch(target.displayPath));
117
+ }
118
+ else if (!options.filesWithoutMatch) {
119
+ writer.writeLine(formatter.formatBinaryMatch(target.displayPath));
120
+ }
121
+ }
122
+ else if (options.filesWithoutMatch) {
123
+ writer.writeLine(target.displayPath);
124
+ hasAnyMatch = true;
125
+ }
126
+ if (!target.isStdin)
127
+ stream.destroy();
128
+ continue;
129
+ }
130
+ // Normal text scanning
131
+ const lineGen = readLines(stream, {
132
+ nullData: options.nullData,
133
+ initialChunk,
134
+ unixByteOffsets: options.unixByteOffsets,
135
+ });
136
+ let reachedMaxCount = false;
137
+ for await (const line of lineGen) {
138
+ const isMatch = matcher.test(line.text);
139
+ if (isMatch) {
140
+ fileMatchCount++;
141
+ fileHasMatch = true;
142
+ if (!options.filesWithoutMatch) {
143
+ hasAnyMatch = true;
144
+ }
145
+ if (options.quiet) {
146
+ if (!target.isStdin)
147
+ stream.destroy();
148
+ return ExitCode.MATCH_FOUND;
149
+ }
150
+ if (options.filesWithMatches) {
151
+ writer.writeLine(target.displayPath);
152
+ if (!target.isStdin)
153
+ stream.destroy();
154
+ break;
155
+ }
156
+ if (options.maxCount !== undefined && fileMatchCount >= options.maxCount) {
157
+ reachedMaxCount = true;
158
+ }
159
+ }
160
+ // If count or filename-only modes, skip normal line output
161
+ if (options.count || options.filesWithMatches || options.filesWithoutMatch) {
162
+ if (reachedMaxCount) {
163
+ if (!target.isStdin)
164
+ stream.destroy();
165
+ break;
166
+ }
167
+ continue;
168
+ }
169
+ if (options.onlyMatching) {
170
+ if (isMatch) {
171
+ const matches = matcher.findMatches(line.text);
172
+ const linesToPrint = formatter.formatOnlyMatching(target.displayPath, showFilename, line.lineNum, line.byteOffset, line.text, matches);
173
+ for (const outLine of linesToPrint) {
174
+ writer.writeLine(outLine);
175
+ }
176
+ }
177
+ if (reachedMaxCount) {
178
+ if (!target.isStdin)
179
+ stream.destroy();
180
+ break;
181
+ }
182
+ continue;
183
+ }
184
+ // Standard or context output
185
+ if (options.beforeContext === 0 && options.afterContext === 0) {
186
+ if (isMatch) {
187
+ const ranges = enableColor ? matcher.findMatches(line.text) : [];
188
+ const outLine = formatter.formatLine(target.displayPath, showFilename, line.lineNum, line.byteOffset, line.text, false, ranges);
189
+ writer.writeLine(outLine);
190
+ }
191
+ if (reachedMaxCount) {
192
+ if (!target.isStdin)
193
+ stream.destroy();
194
+ break;
195
+ }
196
+ }
197
+ else {
198
+ // Context mode
199
+ for (const cLine of contextManager.processLine(line, isMatch)) {
200
+ if (cLine.needsGroupSeparatorBefore) {
201
+ const sep = formatter.formatGroupSeparator();
202
+ if (sep !== null) {
203
+ writer.writeLine(sep);
204
+ }
205
+ }
206
+ const ranges = enableColor && cLine.isMatch ? matcher.findMatches(cLine.item.text) : [];
207
+ const outLine = formatter.formatLine(target.displayPath, showFilename, cLine.item.lineNum, cLine.item.byteOffset, cLine.item.text, !cLine.isMatch, ranges);
208
+ writer.writeLine(outLine);
209
+ }
210
+ if (reachedMaxCount && options.afterContext === 0) {
211
+ if (!target.isStdin)
212
+ stream.destroy();
213
+ break;
214
+ }
215
+ }
216
+ }
217
+ // After file processing
218
+ if (options.filesWithoutMatch) {
219
+ if (!fileHasMatch) {
220
+ writer.writeLine(target.displayPath);
221
+ hasAnyMatch = true;
222
+ }
223
+ }
224
+ else if (options.count) {
225
+ writer.writeLine(formatter.formatCount(target.displayPath, showFilename, fileMatchCount));
226
+ }
227
+ }
228
+ catch (err) {
229
+ hasError = true;
230
+ if (!options.noMessages) {
231
+ const msg = err instanceof Error ? err.message : String(err);
232
+ writer.writeError(`grept: ${target.filePath}: ${msg}`);
233
+ }
234
+ }
235
+ finally {
236
+ if (!target.isStdin && stream && 'destroy' in stream) {
237
+ stream.destroy();
238
+ }
239
+ }
240
+ }
241
+ if (hasError) {
242
+ if (options.quiet && hasAnyMatch) {
243
+ return ExitCode.MATCH_FOUND;
244
+ }
245
+ return ExitCode.ERROR;
246
+ }
247
+ return hasAnyMatch ? ExitCode.MATCH_FOUND : ExitCode.NO_MATCH;
248
+ }
249
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type ExitCodeType } from './exit-codes.js';
2
+ export declare class GreptError extends Error {
3
+ readonly exitCode: ExitCodeType;
4
+ readonly isFileError: boolean;
5
+ constructor(message: string, exitCode?: ExitCodeType, isFileError?: boolean);
6
+ }
7
+ export declare class ArgumentError extends GreptError {
8
+ constructor(message: string);
9
+ }
10
+ export declare class RegexSyntaxError extends GreptError {
11
+ constructor(message: string);
12
+ }
13
+ export declare class FileSystemError extends GreptError {
14
+ readonly path: string;
15
+ constructor(path: string, message: string);
16
+ }
17
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE9D,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,QAAQ,EAAE,YAAY,CAAC;IACvC,SAAgB,WAAW,EAAE,OAAO,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,YAA6B,EAAE,WAAW,UAAQ;CAM1F;AAED,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,UAAU;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C"}
@@ -0,0 +1,32 @@
1
+ import { ExitCode } from './exit-codes.js';
2
+ export class GreptError extends Error {
3
+ exitCode;
4
+ isFileError;
5
+ constructor(message, exitCode = ExitCode.ERROR, isFileError = false) {
6
+ super(message);
7
+ this.name = 'GreptError';
8
+ this.exitCode = exitCode;
9
+ this.isFileError = isFileError;
10
+ }
11
+ }
12
+ export class ArgumentError extends GreptError {
13
+ constructor(message) {
14
+ super(`grept: ${message}`, ExitCode.ERROR, false);
15
+ this.name = 'ArgumentError';
16
+ }
17
+ }
18
+ export class RegexSyntaxError extends GreptError {
19
+ constructor(message) {
20
+ super(`grept: ${message}`, ExitCode.ERROR, false);
21
+ this.name = 'RegexSyntaxError';
22
+ }
23
+ }
24
+ export class FileSystemError extends GreptError {
25
+ path;
26
+ constructor(path, message) {
27
+ super(`grept: ${path}: ${message}`, ExitCode.ERROR, true);
28
+ this.name = 'FileSystemError';
29
+ this.path = path;
30
+ }
31
+ }
32
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAqB,MAAM,iBAAiB,CAAC;AAE9D,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnB,QAAQ,CAAe;IACvB,WAAW,CAAU;IAErC,YAAY,OAAe,EAAE,WAAyB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK;QACvF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,UAAU;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,UAAU,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,UAAU,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7B,IAAI,CAAS;IAE7B,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,UAAU,IAAI,KAAK,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export declare const ExitCode: {
2
+ readonly MATCH_FOUND: 0;
3
+ readonly NO_MATCH: 1;
4
+ readonly ERROR: 2;
5
+ };
6
+ export type ExitCodeType = (typeof ExitCode)[keyof typeof ExitCode];
7
+ //# sourceMappingURL=exit-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../../src/errors/exit-codes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;CAIX,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const ExitCode = {
2
+ MATCH_FOUND: 0,
3
+ NO_MATCH: 1,
4
+ ERROR: 2,
5
+ };
6
+ //# sourceMappingURL=exit-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../../src/errors/exit-codes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;CACA,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { CliOptions } from '../cli/args.js';
2
+ export interface SearchTarget {
3
+ isStdin: boolean;
4
+ filePath: string;
5
+ displayPath: string;
6
+ isError?: boolean;
7
+ errorMessage?: string;
8
+ }
9
+ export declare function discoverTargets(options: CliOptions): AsyncGenerator<SearchTarget, void, undefined>;
10
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/filesystem/discover.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAuB,eAAe,CACpC,OAAO,EAAE,UAAU,GAClB,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,CAyG/C"}