History

Merge remote-tracking branch 'origin/codex/batch19-config-write-errors' into codex/effect-lint-integration

Rhys Sullivan committed 6 months ago

Commit bac06dd2 parents 5c899cc 71332e72 files · +16 −6Browse files

Unified · Split

2 files
  1. packages/core/config/src/config.test.ts +5 −3
  2. packages/core/config/src/write.ts +11 −3
packages/core/config/src/config.test.ts+5−3
@@ -5,7 +5,7 @@ import { FileSystem } from "effect"; · 4 unmodified lines
55 import { join } from "node:path";
66
77 import { ExecutorFileConfig } from "./schema";
8−import { loadConfig } from "./load";
8+import { ConfigParseError, loadConfig } from "./load";
99 import {
1010 addSourceToConfig,
1111 removeSourceFromConfig,
@@ -128,8 +128,10 @@ describe("loadConfig", () => { · 116 unmodified lines
128128 const path = join(dir, "executor.jsonc");
129129 yield* fs.writeFileString(path, "{ invalid json }");
130130
131− const result = yield* loadConfig(path).pipe(Effect.flip);
132− expect(result._tag).toBe("ConfigParseError");
131+ const result = yield* loadConfig(path).pipe(
132+ Effect.catchTag("ConfigParseError", (error) => Effect.succeed(error)),
133+ );
134+ expect(result).toBeInstanceOf(ConfigParseError);
133135 }),
134136 ),
135137 );
packages/core/config/src/write.ts+11−3
@@ -4,6 +4,14 @@ import type { PlatformError } from "effect/PlatformError"; · 3 unmodified lines
44 import * as jsonc from "jsonc-parser";
55 import type { SourceConfig, ExecutorFileConfig } from "./schema";
66
7+export class ConfigWriteError {
8+ readonly _tag = "ConfigWriteError";
9+ constructor(
10+ readonly path: string,
11+ readonly cause: unknown,
12+ ) {}
13+}
14+
715 const FORMATTING: jsonc.FormattingOptions = {
816 tabSize: 2,
917 insertSpaces: true,
@@ -118,13 +126,13 @@ export const removeSourceFromConfig = ( · 108 unmodified lines
118126 export const writeConfig = (
119127 path: string,
120128 config: ExecutorFileConfig,
121−): Effect.Effect<void, PlatformError, FileSystem.FileSystem> =>
129+): Effect.Effect<void, ConfigWriteError | PlatformError, FileSystem.FileSystem> =>
122130 Effect.gen(function* () {
123131 const fs = yield* FileSystem.FileSystem;
124132 const text = yield* Effect.try({
125133 try: () => JSON.stringify(config, null, 2) + "\n",
126− catch: (cause) => cause,
127− }).pipe(Effect.orDie);
134+ catch: (cause) => new ConfigWriteError(path, cause),
135+ });
128136 yield* fs.writeFileString(path, text);
129137 });
130138