refactor(file): decode ripgrep rows with schema
This commit is contained in:
parent
f2a83a0a00
commit
2a10e4e89e
1 changed files with 5 additions and 10 deletions
|
|
@ -408,14 +408,6 @@ export namespace Ripgrep {
|
||||||
}) {
|
}) {
|
||||||
return yield* Effect.scoped(
|
return yield* Effect.scoped(
|
||||||
Effect.gen(function* () {
|
Effect.gen(function* () {
|
||||||
const parse = Effect.fn("Ripgrep.parse")(function* (line: string) {
|
|
||||||
const row = yield* Effect.try({
|
|
||||||
try: () => Result.parse(JSON.parse(line)),
|
|
||||||
catch: (cause) => new Error(`invalid ripgrep output: ${cause}`),
|
|
||||||
})
|
|
||||||
if (row.type !== "match") return undefined
|
|
||||||
return row.data
|
|
||||||
})
|
|
||||||
const cmd = yield* args({
|
const cmd = yield* args({
|
||||||
mode: "search",
|
mode: "search",
|
||||||
glob: input.glob,
|
glob: input.glob,
|
||||||
|
|
@ -436,8 +428,11 @@ export namespace Ripgrep {
|
||||||
Stream.decodeText(handle.stdout).pipe(
|
Stream.decodeText(handle.stdout).pipe(
|
||||||
Stream.splitLines,
|
Stream.splitLines,
|
||||||
Stream.filter((line) => line.length > 0),
|
Stream.filter((line) => line.length > 0),
|
||||||
Stream.mapEffect(parse),
|
Stream.mapEffect((line) =>
|
||||||
Stream.filter((item): item is Item => item !== undefined),
|
decode(line).pipe(Effect.mapError((cause) => new Error("invalid ripgrep output", { cause }))),
|
||||||
|
),
|
||||||
|
Stream.filter((row): row is Schema.Schema.Type<typeof Hit> => row.type === "match"),
|
||||||
|
Stream.map((row): Item => row.data),
|
||||||
Stream.runCollect,
|
Stream.runCollect,
|
||||||
Effect.map((chunk) => [...chunk]),
|
Effect.map((chunk) => [...chunk]),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue