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
5import { join } from "node:path";5import { join } from "node:path";
6 6
7import { ExecutorFileConfig } from "./schema";7import { ExecutorFileConfig } from "./schema";
8import { loadConfig } from "./load";8import { ConfigParseError, loadConfig } from "./load";
9import {9import {
10 addSourceToConfig,10 addSourceToConfig,
11 removeSourceFromConfig,11 removeSourceFromConfig,
@@ -128,8 +128,10 @@ describe("loadConfig", () => { · 116 unmodified lines
128 const path = join(dir, "executor.jsonc");128 const path = join(dir, "executor.jsonc");
129 yield* fs.writeFileString(path, "{ invalid json }");129 yield* fs.writeFileString(path, "{ invalid json }");
130 130
131 const result = yield* loadConfig(path).pipe(Effect.flip);131 const result = yield* loadConfig(path).pipe(
132 expect(result._tag).toBe("ConfigParseError");132 Effect.catchTag("ConfigParseError", (error) => Effect.succeed(error)),
133 );
134 expect(result).toBeInstanceOf(ConfigParseError);
133 }),135 }),
134 ),136 ),
135 );137 );
packages/core/config/src/write.ts+11−3
@@ -4,6 +4,14 @@ import type { PlatformError } from "effect/PlatformError"; · 3 unmodified lines
4import * as jsonc from "jsonc-parser";4import * as jsonc from "jsonc-parser";
5import type { SourceConfig, ExecutorFileConfig } from "./schema";5import type { SourceConfig, ExecutorFileConfig } from "./schema";
6 6
7export class ConfigWriteError {
8 readonly _tag = "ConfigWriteError";
9 constructor(
10 readonly path: string,
11 readonly cause: unknown,
12 ) {}
13}
14
7const FORMATTING: jsonc.FormattingOptions = {15const FORMATTING: jsonc.FormattingOptions = {
8 tabSize: 2,16 tabSize: 2,
9 insertSpaces: true,17 insertSpaces: true,
@@ -118,13 +126,13 @@ export const removeSourceFromConfig = ( · 108 unmodified lines
118export const writeConfig = (126export const writeConfig = (
119 path: string,127 path: string,
120 config: ExecutorFileConfig,128 config: ExecutorFileConfig,
121): Effect.Effect<void, PlatformError, FileSystem.FileSystem> =>129): Effect.Effect<void, ConfigWriteError | PlatformError, FileSystem.FileSystem> =>
122 Effect.gen(function* () {130 Effect.gen(function* () {
123 const fs = yield* FileSystem.FileSystem;131 const fs = yield* FileSystem.FileSystem;
124 const text = yield* Effect.try({132 const text = yield* Effect.try({
125 try: () => JSON.stringify(config, null, 2) + "\n",133 try: () => JSON.stringify(config, null, 2) + "\n",
126 catch: (cause) => cause,134 catch: (cause) => new ConfigWriteError(path, cause),
127 }).pipe(Effect.orDie);135 });
128 yield* fs.writeFileString(path, text);136 yield* fs.writeFileString(path, text);
129 });137 });
130 138