@danielfgray/pg-sourcerer 0.3.0 → 0.5.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.
- package/bin/pgsourcerer +2 -0
- package/dist/__tests__/fixtures/index.d.ts +15 -0
- package/dist/__tests__/fixtures/index.d.ts.map +1 -0
- package/dist/__tests__/fixtures/index.js +19 -0
- package/dist/__tests__/fixtures/index.js.map +1 -0
- package/dist/__tests__/fixtures/introspection.json +40522 -0
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +7 -46
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +38 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -2
- package/dist/config.js.map +1 -1
- package/dist/{lib/conjure.d.ts → conjure/index.d.ts} +62 -3
- package/dist/conjure/index.d.ts.map +1 -0
- package/dist/{lib/conjure.js → conjure/index.js} +124 -3
- package/dist/conjure/index.js.map +1 -0
- package/dist/conjure/signature.d.ts +85 -0
- package/dist/conjure/signature.d.ts.map +1 -0
- package/dist/conjure/signature.js +130 -0
- package/dist/conjure/signature.js.map +1 -0
- package/dist/conjure/types.d.ts +97 -0
- package/dist/conjure/types.d.ts.map +1 -0
- package/dist/conjure/types.js +206 -0
- package/dist/conjure/types.js.map +1 -0
- package/dist/errors.d.ts +114 -139
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +82 -36
- package/dist/errors.js.map +1 -1
- package/dist/generate.d.ts +45 -46
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +86 -59
- package/dist/generate.js.map +1 -1
- package/dist/hex/builder.d.ts +12 -0
- package/dist/hex/builder.d.ts.map +1 -0
- package/dist/hex/builder.js +64 -0
- package/dist/hex/builder.js.map +1 -0
- package/dist/hex/ddl.d.ts +53 -0
- package/dist/hex/ddl.d.ts.map +1 -0
- package/dist/hex/ddl.js +306 -0
- package/dist/hex/ddl.js.map +1 -0
- package/dist/hex/index.d.ts +105 -0
- package/dist/hex/index.d.ts.map +1 -0
- package/dist/hex/index.js +81 -0
- package/dist/hex/index.js.map +1 -0
- package/dist/hex/primitives.d.ts +23 -0
- package/dist/hex/primitives.d.ts.map +1 -0
- package/dist/hex/primitives.js +38 -0
- package/dist/hex/primitives.js.map +1 -0
- package/dist/hex/query.d.ts +116 -0
- package/dist/hex/query.d.ts.map +1 -0
- package/dist/hex/query.js +219 -0
- package/dist/hex/query.js.map +1 -0
- package/dist/hex/types.d.ts +287 -0
- package/dist/hex/types.d.ts.map +1 -0
- package/dist/hex/types.js +431 -0
- package/dist/hex/types.js.map +1 -0
- package/dist/index.d.ts +17 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -44
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +76 -140
- package/dist/init.js.map +1 -1
- package/dist/ir/extensions/queries.d.ts +6 -6
- package/dist/ir/extensions/queries.d.ts.map +1 -1
- package/dist/ir/extensions/queries.js +6 -4
- package/dist/ir/extensions/queries.js.map +1 -1
- package/dist/ir/extensions/schema-builder.d.ts.map +1 -1
- package/dist/ir/extensions/schema-builder.js.map +1 -1
- package/dist/ir/index.d.ts.map +1 -1
- package/dist/ir/index.js.map +1 -1
- package/dist/ir/relation-graph.d.ts.map +1 -1
- package/dist/ir/relation-graph.js +8 -8
- package/dist/ir/relation-graph.js.map +1 -1
- package/dist/ir/semantic-ir.d.ts +38 -0
- package/dist/ir/semantic-ir.d.ts.map +1 -1
- package/dist/ir/semantic-ir.js +50 -2
- package/dist/ir/semantic-ir.js.map +1 -1
- package/dist/ir/smart-tags.d.ts.map +1 -1
- package/dist/ir/smart-tags.js.map +1 -1
- package/dist/lib/field-utils.d.ts.map +1 -1
- package/dist/lib/field-utils.js +7 -7
- package/dist/lib/field-utils.js.map +1 -1
- package/dist/lib/join-graph.d.ts +95 -0
- package/dist/lib/join-graph.d.ts.map +1 -0
- package/dist/lib/join-graph.js +305 -0
- package/dist/lib/join-graph.js.map +1 -0
- package/dist/lib/picker.d.ts +60 -0
- package/dist/lib/picker.d.ts.map +1 -0
- package/dist/lib/picker.js +325 -0
- package/dist/lib/picker.js.map +1 -0
- package/dist/plugins/arktype.d.ts +20 -24
- package/dist/plugins/arktype.d.ts.map +1 -1
- package/dist/plugins/arktype.js +462 -386
- package/dist/plugins/arktype.js.map +1 -1
- package/dist/plugins/effect/http.d.ts +7 -0
- package/dist/plugins/effect/http.d.ts.map +1 -0
- package/dist/plugins/effect/http.js +460 -0
- package/dist/plugins/effect/http.js.map +1 -0
- package/dist/plugins/effect/index.d.ts +22 -0
- package/dist/plugins/effect/index.d.ts.map +1 -0
- package/dist/plugins/effect/index.js +65 -0
- package/dist/plugins/effect/index.js.map +1 -0
- package/dist/plugins/effect/models.d.ts +6 -0
- package/dist/plugins/effect/models.d.ts.map +1 -0
- package/dist/plugins/effect/models.js +116 -0
- package/dist/plugins/effect/models.js.map +1 -0
- package/dist/plugins/effect/repos.d.ts +21 -0
- package/dist/plugins/effect/repos.d.ts.map +1 -0
- package/dist/plugins/effect/repos.js +131 -0
- package/dist/plugins/effect/repos.js.map +1 -0
- package/dist/plugins/effect/schemas.d.ts +7 -0
- package/dist/plugins/effect/schemas.d.ts.map +1 -0
- package/dist/plugins/effect/schemas.js +75 -0
- package/dist/plugins/effect/schemas.js.map +1 -0
- package/dist/plugins/effect/shared.d.ts +116 -0
- package/dist/plugins/effect/shared.d.ts.map +1 -0
- package/dist/plugins/effect/shared.js +164 -0
- package/dist/plugins/effect/shared.js.map +1 -0
- package/dist/plugins/http-elysia.d.ts +20 -27
- package/dist/plugins/http-elysia.d.ts.map +1 -1
- package/dist/plugins/http-elysia.js +350 -475
- package/dist/plugins/http-elysia.js.map +1 -1
- package/dist/plugins/http-express.d.ts +20 -31
- package/dist/plugins/http-express.d.ts.map +1 -1
- package/dist/plugins/http-express.js +281 -268
- package/dist/plugins/http-express.js.map +1 -1
- package/dist/plugins/http-hono.d.ts +17 -33
- package/dist/plugins/http-hono.d.ts.map +1 -1
- package/dist/plugins/http-hono.js +317 -341
- package/dist/plugins/http-hono.js.map +1 -1
- package/dist/plugins/http-orpc.d.ts +34 -33
- package/dist/plugins/http-orpc.d.ts.map +1 -1
- package/dist/plugins/http-orpc.js +345 -257
- package/dist/plugins/http-orpc.js.map +1 -1
- package/dist/plugins/http-trpc.d.ts +33 -35
- package/dist/plugins/http-trpc.d.ts.map +1 -1
- package/dist/plugins/http-trpc.js +337 -241
- package/dist/plugins/http-trpc.js.map +1 -1
- package/dist/plugins/kysely.d.ts +54 -59
- package/dist/plugins/kysely.d.ts.map +1 -1
- package/dist/plugins/kysely.js +826 -687
- package/dist/plugins/kysely.js.map +1 -1
- package/dist/plugins/sql-queries.d.ts +38 -44
- package/dist/plugins/sql-queries.d.ts.map +1 -1
- package/dist/plugins/sql-queries.js +497 -897
- package/dist/plugins/sql-queries.js.map +1 -1
- package/dist/plugins/types.d.ts +12 -20
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/plugins/types.js +84 -227
- package/dist/plugins/types.js.map +1 -1
- package/dist/plugins/valibot.d.ts +7 -44
- package/dist/plugins/valibot.d.ts.map +1 -1
- package/dist/plugins/valibot.js +376 -382
- package/dist/plugins/valibot.js.map +1 -1
- package/dist/plugins/zod.d.ts +20 -24
- package/dist/plugins/zod.d.ts.map +1 -1
- package/dist/plugins/zod.js +370 -367
- package/dist/plugins/zod.js.map +1 -1
- package/dist/runtime/emit.d.ts +64 -0
- package/dist/runtime/emit.d.ts.map +1 -0
- package/dist/runtime/emit.js +445 -0
- package/dist/runtime/emit.js.map +1 -0
- package/dist/runtime/errors.d.ts +36 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +29 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/file-assignment.d.ts +161 -0
- package/dist/runtime/file-assignment.d.ts.map +1 -0
- package/dist/runtime/file-assignment.js +195 -0
- package/dist/runtime/file-assignment.js.map +1 -0
- package/dist/runtime/orchestrator.d.ts +62 -0
- package/dist/runtime/orchestrator.d.ts.map +1 -0
- package/dist/runtime/orchestrator.js +99 -0
- package/dist/runtime/orchestrator.js.map +1 -0
- package/dist/runtime/registry.d.ts +268 -0
- package/dist/runtime/registry.d.ts.map +1 -0
- package/dist/runtime/registry.js +436 -0
- package/dist/runtime/registry.js.map +1 -0
- package/dist/runtime/types.d.ts +182 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/validation.d.ts +41 -0
- package/dist/runtime/validation.d.ts.map +1 -0
- package/dist/runtime/validation.js +70 -0
- package/dist/runtime/validation.js.map +1 -0
- package/dist/services/config-loader.d.ts.map +1 -1
- package/dist/services/config-loader.js +15 -6
- package/dist/services/config-loader.js.map +1 -1
- package/dist/services/config.d.ts +55 -25
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/config.js +60 -34
- package/dist/services/config.js.map +1 -1
- package/dist/services/file-writer.d.ts +3 -3
- package/dist/services/file-writer.d.ts.map +1 -1
- package/dist/services/file-writer.js +6 -8
- package/dist/services/file-writer.js.map +1 -1
- package/dist/services/inflection.d.ts +126 -27
- package/dist/services/inflection.d.ts.map +1 -1
- package/dist/services/inflection.js +300 -72
- package/dist/services/inflection.js.map +1 -1
- package/dist/services/introspection.d.ts.map +1 -1
- package/dist/services/introspection.js +6 -6
- package/dist/services/introspection.js.map +1 -1
- package/dist/services/ir-builder.d.ts.map +1 -1
- package/dist/services/ir-builder.js +73 -77
- package/dist/services/ir-builder.js.map +1 -1
- package/dist/services/ir.d.ts.map +1 -1
- package/dist/services/ir.js.map +1 -1
- package/dist/services/pg-types.d.ts.map +1 -1
- package/dist/services/pg-types.js +3 -3
- package/dist/services/pg-types.js.map +1 -1
- package/dist/services/smart-tags-parser.d.ts.map +1 -1
- package/dist/services/smart-tags-parser.js +4 -4
- package/dist/services/smart-tags-parser.js.map +1 -1
- package/dist/services/type-hints.d.ts.map +1 -1
- package/dist/services/type-hints.js +1 -1
- package/dist/services/type-hints.js.map +1 -1
- package/dist/services/user-module-parser.d.ts +46 -0
- package/dist/services/user-module-parser.d.ts.map +1 -0
- package/dist/services/user-module-parser.js +181 -0
- package/dist/services/user-module-parser.js.map +1 -0
- package/dist/shared/converters.d.ts +60 -0
- package/dist/shared/converters.d.ts.map +1 -0
- package/dist/shared/converters.js +168 -0
- package/dist/shared/converters.js.map +1 -0
- package/dist/shared/query-types.d.ts +95 -0
- package/dist/shared/query-types.d.ts.map +1 -0
- package/dist/shared/query-types.js +9 -0
- package/dist/shared/query-types.js.map +1 -0
- package/dist/testing.d.ts +125 -37
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +134 -42
- package/dist/testing.js.map +1 -1
- package/dist/user-module.d.ts +86 -0
- package/dist/user-module.d.ts.map +1 -0
- package/dist/user-module.js +55 -0
- package/dist/user-module.js.map +1 -0
- package/package.json +10 -6
- package/dist/lib/conjure.d.ts.map +0 -1
- package/dist/lib/conjure.js.map +0 -1
- package/dist/lib/hex.d.ts +0 -119
- package/dist/lib/hex.d.ts.map +0 -1
- package/dist/lib/hex.js +0 -188
- package/dist/lib/hex.js.map +0 -1
- package/dist/plugins/effect.d.ts +0 -53
- package/dist/plugins/effect.d.ts.map +0 -1
- package/dist/plugins/effect.js +0 -1074
- package/dist/plugins/effect.js.map +0 -1
- package/dist/plugins/kysely/queries.d.ts +0 -92
- package/dist/plugins/kysely/queries.d.ts.map +0 -1
- package/dist/plugins/kysely/queries.js +0 -1169
- package/dist/plugins/kysely/queries.js.map +0 -1
- package/dist/plugins/kysely/shared.d.ts +0 -59
- package/dist/plugins/kysely/shared.d.ts.map +0 -1
- package/dist/plugins/kysely/shared.js +0 -247
- package/dist/plugins/kysely/shared.js.map +0 -1
- package/dist/plugins/kysely/types.d.ts +0 -22
- package/dist/plugins/kysely/types.d.ts.map +0 -1
- package/dist/plugins/kysely/types.js +0 -428
- package/dist/plugins/kysely/types.js.map +0 -1
- package/dist/services/artifact-store.d.ts +0 -65
- package/dist/services/artifact-store.d.ts.map +0 -1
- package/dist/services/artifact-store.js +0 -57
- package/dist/services/artifact-store.js.map +0 -1
- package/dist/services/core-providers.d.ts +0 -15
- package/dist/services/core-providers.d.ts.map +0 -1
- package/dist/services/core-providers.js +0 -23
- package/dist/services/core-providers.js.map +0 -1
- package/dist/services/emissions.d.ts +0 -103
- package/dist/services/emissions.d.ts.map +0 -1
- package/dist/services/emissions.js +0 -241
- package/dist/services/emissions.js.map +0 -1
- package/dist/services/execution.d.ts +0 -35
- package/dist/services/execution.d.ts.map +0 -1
- package/dist/services/execution.js +0 -86
- package/dist/services/execution.js.map +0 -1
- package/dist/services/file-builder.d.ts +0 -85
- package/dist/services/file-builder.d.ts.map +0 -1
- package/dist/services/file-builder.js +0 -112
- package/dist/services/file-builder.js.map +0 -1
- package/dist/services/plugin-meta.d.ts +0 -33
- package/dist/services/plugin-meta.d.ts.map +0 -1
- package/dist/services/plugin-meta.js +0 -24
- package/dist/services/plugin-meta.js.map +0 -1
- package/dist/services/plugin-runner.d.ts +0 -42
- package/dist/services/plugin-runner.d.ts.map +0 -1
- package/dist/services/plugin-runner.js +0 -84
- package/dist/services/plugin-runner.js.map +0 -1
- package/dist/services/plugin.d.ts +0 -421
- package/dist/services/plugin.d.ts.map +0 -1
- package/dist/services/plugin.js +0 -197
- package/dist/services/plugin.js.map +0 -1
- package/dist/services/resolution.d.ts +0 -38
- package/dist/services/resolution.d.ts.map +0 -1
- package/dist/services/resolution.js +0 -242
- package/dist/services/resolution.js.map +0 -1
- package/dist/services/service-registry.d.ts +0 -74
- package/dist/services/service-registry.d.ts.map +0 -1
- package/dist/services/service-registry.js +0 -61
- package/dist/services/service-registry.js.map +0 -1
- package/dist/services/symbols.d.ts +0 -144
- package/dist/services/symbols.d.ts.map +0 -1
- package/dist/services/symbols.js +0 -144
- package/dist/services/symbols.js.map +0 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import type { Plugin, SymbolDeclaration } from "./types.js";
|
|
3
|
+
declare const UnsatisfiedCapability_base: Schema.TaggedErrorClass<UnsatisfiedCapability, "UnsatisfiedCapability", {
|
|
4
|
+
readonly _tag: Schema.tag<"UnsatisfiedCapability">;
|
|
5
|
+
} & {
|
|
6
|
+
message: typeof Schema.String;
|
|
7
|
+
capability: typeof Schema.String;
|
|
8
|
+
consumer: typeof Schema.String;
|
|
9
|
+
}>;
|
|
10
|
+
/**
|
|
11
|
+
* Error when a plugin consumes a capability that no plugin provides.
|
|
12
|
+
*/
|
|
13
|
+
export declare class UnsatisfiedCapability extends UnsatisfiedCapability_base {
|
|
14
|
+
}
|
|
15
|
+
declare const CircularDependency_base: Schema.TaggedErrorClass<CircularDependency, "CircularDependency", {
|
|
16
|
+
readonly _tag: Schema.tag<"CircularDependency">;
|
|
17
|
+
} & {
|
|
18
|
+
message: typeof Schema.String;
|
|
19
|
+
cycle: Schema.Array$<typeof Schema.String>;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Error when there's a circular dependency between symbols.
|
|
23
|
+
*/
|
|
24
|
+
export declare class CircularDependency extends CircularDependency_base {
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Validate that all plugin.consumes are satisfied by some plugin.provides.
|
|
28
|
+
*/
|
|
29
|
+
export declare const validateConsumes: (plugins: readonly Plugin[]) => Effect.Effect<void, UnsatisfiedCapability, never>;
|
|
30
|
+
/**
|
|
31
|
+
* Validate that symbol dependencies form a DAG (no cycles).
|
|
32
|
+
*/
|
|
33
|
+
export declare const validateDependencyGraph: (declarations: readonly SymbolDeclaration[]) => Effect.Effect<void, CircularDependency, never>;
|
|
34
|
+
/**
|
|
35
|
+
* Run all validations on plugins and their declarations.
|
|
36
|
+
*/
|
|
37
|
+
export declare const validateAll: (plugins: readonly Plugin[], registry: {
|
|
38
|
+
all(): readonly SymbolDeclaration[];
|
|
39
|
+
}) => Effect.Effect<[void, void], UnsatisfiedCapability | CircularDependency, never>;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/runtime/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAc,MAAM,YAAY,CAAC;;;;;;;;AAExE;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,0BAO1C;CAAG;;;;;;;AAEJ;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,uBAMvC;CAAG;AAEJ;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,SAAS,MAAM,EAAE,sDAiBvD,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,cAAc,SAAS,iBAAiB,EAAE,mDAyC9E,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,SAAS,MAAM,EAAE,EAC1B,UAAU;IAAE,GAAG,IAAI,SAAS,iBAAiB,EAAE,CAAA;CAAE,mFACkC,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
/**
|
|
3
|
+
* Error when a plugin consumes a capability that no plugin provides.
|
|
4
|
+
*/
|
|
5
|
+
export class UnsatisfiedCapability extends Schema.TaggedError()("UnsatisfiedCapability", {
|
|
6
|
+
message: Schema.String,
|
|
7
|
+
capability: Schema.String,
|
|
8
|
+
consumer: Schema.String,
|
|
9
|
+
}) {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Error when there's a circular dependency between symbols.
|
|
13
|
+
*/
|
|
14
|
+
export class CircularDependency extends Schema.TaggedError()("CircularDependency", {
|
|
15
|
+
message: Schema.String,
|
|
16
|
+
cycle: Schema.Array(Schema.String),
|
|
17
|
+
}) {
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Validate that all plugin.consumes are satisfied by some plugin.provides.
|
|
21
|
+
*/
|
|
22
|
+
export const validateConsumes = (plugins) => Effect.gen(function* () {
|
|
23
|
+
const provided = new Set(plugins.flatMap(plugin => plugin.provides));
|
|
24
|
+
yield* Effect.forEach(plugins, plugin => Effect.forEach(plugin.consumes ?? [], cap => {
|
|
25
|
+
if (!provided.has(cap)) {
|
|
26
|
+
return Effect.fail(new UnsatisfiedCapability({
|
|
27
|
+
message: `Plugin "${plugin.name}" consumes "${cap}" but no plugin provides it`,
|
|
28
|
+
capability: cap,
|
|
29
|
+
consumer: plugin.name,
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
return Effect.succeed(undefined);
|
|
33
|
+
}));
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Validate that symbol dependencies form a DAG (no cycles).
|
|
37
|
+
*/
|
|
38
|
+
export const validateDependencyGraph = (declarations) => Effect.gen(function* () {
|
|
39
|
+
const adjacency = new Map();
|
|
40
|
+
for (const decl of declarations) {
|
|
41
|
+
adjacency.set(decl.capability, [...(decl.dependsOn ?? [])]);
|
|
42
|
+
}
|
|
43
|
+
const visited = new Set();
|
|
44
|
+
const recursionStack = new Set();
|
|
45
|
+
const detectCycle = (cap, path) => Effect.suspend(() => {
|
|
46
|
+
if (recursionStack.has(cap)) {
|
|
47
|
+
const cycleStart = path.indexOf(cap);
|
|
48
|
+
const cycle = [...path.slice(cycleStart), cap];
|
|
49
|
+
return Effect.fail(new CircularDependency({
|
|
50
|
+
message: `Circular dependency detected: ${cycle.join(" -> ")}`,
|
|
51
|
+
cycle,
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
if (visited.has(cap)) {
|
|
55
|
+
return Effect.void;
|
|
56
|
+
}
|
|
57
|
+
visited.add(cap);
|
|
58
|
+
recursionStack.add(cap);
|
|
59
|
+
const deps = adjacency.get(cap) ?? [];
|
|
60
|
+
return Effect.forEach(deps, dep => detectCycle(dep, [...path, cap]), { discard: true }).pipe(Effect.ensuring(Effect.sync(() => {
|
|
61
|
+
recursionStack.delete(cap);
|
|
62
|
+
})));
|
|
63
|
+
});
|
|
64
|
+
yield* Effect.forEach(Array.from(adjacency.keys()), cap => detectCycle(cap, []));
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Run all validations on plugins and their declarations.
|
|
68
|
+
*/
|
|
69
|
+
export const validateAll = (plugins, registry) => Effect.all([validateConsumes(plugins), validateDependencyGraph(registry.all())]);
|
|
70
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/runtime/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/services/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAkC,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/services/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAkC,MAAM,QAAQ,CAAC;AAGhF,OAAO,EAAU,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;KAC9B,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,GAAG,aAAa,CAAC,CAAC;CACrE;;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,wBAGtC;CAAG;AAEN;;GAEG;AACH,eAAO,MAAM,iBAAiB,UAK7B,CAAC;AA+BF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAwEjD;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,gDAA2D,CAAC;AAEzF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAE7D"}
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* Loads and validates pgsourcerer.config.{ts,js,mjs} using lilconfig.
|
|
5
5
|
* Wraps the async config loading in Effect for proper error handling.
|
|
6
6
|
*/
|
|
7
|
-
import { Context, Effect, Layer, Schema as S, pipe } from "effect";
|
|
7
|
+
import { Context, Effect, Layer, Schema as S, ParseResult, pipe } from "effect";
|
|
8
8
|
import { lilconfig } from "lilconfig";
|
|
9
|
+
import path from "node:path";
|
|
9
10
|
import { Config } from "../config.js";
|
|
10
11
|
import { ConfigNotFound, ConfigInvalid } from "../errors.js";
|
|
11
12
|
/**
|
|
@@ -39,11 +40,14 @@ function createLilconfig() {
|
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
42
|
-
* Format Schema decode errors into readable strings
|
|
43
|
+
* Format Schema decode errors into readable strings using ArrayFormatter
|
|
43
44
|
*/
|
|
44
45
|
function formatSchemaErrors(error) {
|
|
45
|
-
|
|
46
|
-
return
|
|
46
|
+
const issues = ParseResult.ArrayFormatter.formatErrorSync(error);
|
|
47
|
+
return issues.map((issue) => {
|
|
48
|
+
const path = issue.path.join(".");
|
|
49
|
+
return path ? `${path}: ${issue.message}` : issue.message;
|
|
50
|
+
});
|
|
47
51
|
}
|
|
48
52
|
/**
|
|
49
53
|
* Create a ConfigLoader implementation
|
|
@@ -76,13 +80,16 @@ export function createConfigLoader() {
|
|
|
76
80
|
}));
|
|
77
81
|
}
|
|
78
82
|
const filepath = result.filepath;
|
|
83
|
+
const configDir = path.dirname(filepath);
|
|
79
84
|
// Validate with Effect Schema
|
|
80
85
|
const parseResult = yield* pipe(S.decodeUnknown(Config)(result.config), Effect.mapError(parseError => new ConfigInvalid({
|
|
81
86
|
message: `Invalid configuration in ${filepath}`,
|
|
82
87
|
path: filepath,
|
|
83
88
|
errors: formatSchemaErrors(parseError),
|
|
84
89
|
})));
|
|
85
|
-
// Return resolved config
|
|
90
|
+
// Return resolved config with plugins flattened
|
|
91
|
+
// parseResult.plugins may contain Plugin | Plugin[] entries
|
|
92
|
+
const flatPlugins = parseResult.plugins.flat();
|
|
86
93
|
const resolved = {
|
|
87
94
|
connectionString: parseResult.connectionString,
|
|
88
95
|
schemas: parseResult.schemas,
|
|
@@ -91,8 +98,10 @@ export function createConfigLoader() {
|
|
|
91
98
|
typeHints: parseResult.typeHints,
|
|
92
99
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- inflection is S.Any in schema, validated by plugin system
|
|
93
100
|
inflection: parseResult.inflection,
|
|
94
|
-
plugins:
|
|
101
|
+
plugins: flatPlugins,
|
|
95
102
|
formatter: parseResult.formatter,
|
|
103
|
+
defaultFile: parseResult.defaultFile,
|
|
104
|
+
configDir,
|
|
96
105
|
};
|
|
97
106
|
return resolved;
|
|
98
107
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/services/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/services/config-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,49 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config Service
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Effect-based configuration with multiple providers.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* ## Provider Pattern
|
|
7
|
+
*
|
|
8
|
+
* ConfigProvider is how config gets loaded - file, in-memory, wizard.
|
|
9
|
+
* Each provider returns Effect<ResolvedConfig, ConfigError>.
|
|
10
|
+
*
|
|
11
|
+
* Providers can be chained with withFallback:
|
|
12
|
+
* withFallback(FileProvider(), () => WizardProvider())
|
|
13
|
+
*
|
|
14
|
+
* ## Layer Constructors
|
|
9
15
|
*
|
|
10
|
-
* Layers available:
|
|
11
16
|
* - ConfigFromFile: Load from file, fail if not found
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
17
|
+
* - ConfigFromMemory: Use provided config directly (testing)
|
|
18
|
+
* - ConfigWithFallback: Load from file, fallback to another provider
|
|
14
19
|
*/
|
|
15
|
-
import { Context, Layer } from "effect";
|
|
16
|
-
import { FileSystem, Terminal } from "@effect/platform";
|
|
17
|
-
import type { PlatformError } from "@effect/platform/Error";
|
|
20
|
+
import { Context, Effect, Layer } from "effect";
|
|
18
21
|
import type { ResolvedConfig } from "../config.js";
|
|
19
22
|
import { ConfigNotFound, ConfigInvalid } from "../errors.js";
|
|
23
|
+
/**
|
|
24
|
+
* A ConfigProvider knows how to produce a ResolvedConfig.
|
|
25
|
+
* Different providers: file, wizard, in-memory, env vars.
|
|
26
|
+
*/
|
|
27
|
+
export interface ConfigProvider {
|
|
28
|
+
readonly load: Effect.Effect<ResolvedConfig, ConfigNotFound | ConfigInvalid>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* File-based config provider using lilconfig.
|
|
32
|
+
*/
|
|
33
|
+
export declare const FileConfigProvider: (opts?: {
|
|
34
|
+
readonly configPath?: string;
|
|
35
|
+
readonly searchFrom?: string;
|
|
36
|
+
}) => ConfigProvider;
|
|
37
|
+
/**
|
|
38
|
+
* In-memory config provider - returns the provided config directly.
|
|
39
|
+
* Useful for testing or programmatic usage.
|
|
40
|
+
*/
|
|
41
|
+
export declare const InMemoryConfigProvider: (config: ResolvedConfig) => ConfigProvider;
|
|
42
|
+
/**
|
|
43
|
+
* Create a provider that tries primary first, falls back to secondary.
|
|
44
|
+
* ConfigNotFound from primary triggers fallback; ConfigInvalid propagates.
|
|
45
|
+
*/
|
|
46
|
+
export declare const withFallback: (primary: ConfigProvider, fallback: () => ConfigProvider) => ConfigProvider;
|
|
20
47
|
declare const ConfigService_base: Context.TagClass<ConfigService, "ConfigService", ResolvedConfig>;
|
|
21
48
|
/**
|
|
22
49
|
* Service that provides the loaded configuration.
|
|
@@ -28,27 +55,30 @@ export declare class ConfigService extends ConfigService_base {
|
|
|
28
55
|
* Load config from file. Fails with ConfigNotFound if not found.
|
|
29
56
|
*/
|
|
30
57
|
export declare const ConfigFromFile: (opts?: {
|
|
31
|
-
configPath?: string;
|
|
32
|
-
searchFrom?: string;
|
|
58
|
+
readonly configPath?: string;
|
|
59
|
+
readonly searchFrom?: string;
|
|
33
60
|
}) => Layer.Layer<ConfigService, ConfigNotFound | ConfigInvalid>;
|
|
34
61
|
/**
|
|
35
|
-
*
|
|
36
|
-
* This is the layer to use for CLI commands.
|
|
37
|
-
*
|
|
38
|
-
* Flow:
|
|
39
|
-
* 1. Try to load config from file
|
|
40
|
-
* 2. If ConfigNotFound, print message and run init prompts
|
|
41
|
-
* 3. After init writes config, load it
|
|
42
|
-
* 4. Return the loaded config
|
|
62
|
+
* Provide config directly (for testing or programmatic use).
|
|
43
63
|
*/
|
|
44
|
-
export declare const
|
|
45
|
-
configPath?: string;
|
|
46
|
-
searchFrom?: string;
|
|
47
|
-
}) => Layer.Layer<ConfigService, ConfigInvalid | Error | Terminal.QuitException | PlatformError, Terminal.Terminal | FileSystem.FileSystem>;
|
|
64
|
+
export declare const ConfigFromMemory: (config: ResolvedConfig) => Layer.Layer<ConfigService>;
|
|
48
65
|
/**
|
|
49
|
-
*
|
|
66
|
+
* Alias for ConfigFromMemory - clearer name for test contexts.
|
|
50
67
|
*/
|
|
51
68
|
export declare const ConfigTest: (config: ResolvedConfig) => Layer.Layer<ConfigService>;
|
|
69
|
+
/**
|
|
70
|
+
* Load config with fallback provider chain.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // Try file first, fall back to wizard if not found
|
|
75
|
+
* ConfigWithFallback(
|
|
76
|
+
* FileConfigProvider(),
|
|
77
|
+
* () => WizardConfigProvider()
|
|
78
|
+
* )
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare const ConfigWithFallback: (primary: ConfigProvider, fallback: () => ConfigProvider) => Layer.Layer<ConfigService, ConfigNotFound | ConfigInvalid>;
|
|
52
82
|
/**
|
|
53
83
|
* Get the default search paths for config files.
|
|
54
84
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAO7D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,GAAG,aAAa,CAAC,CAAC;CAC9E;AAMD;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,KAAG,cAKF,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,cAAc,KAAG,cAE9D,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,cAAc,EACvB,UAAU,MAAM,cAAc,KAC7B,cAED,CAAC;;AAMH;;;GAGG;AACH,qBAAa,aAAc,SAAQ,kBAA6D;CAAG;AAMnG;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,KAAG,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,cAAc,GAAG,aAAa,CACD,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,cAAc,KAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAC7C,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,UAAU,WANkB,cAAc,KAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAMzC,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,GAC7B,SAAS,cAAc,EACvB,UAAU,MAAM,cAAc,KAC7B,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,cAAc,GAAG,aAAa,CACO,CAAC;AAMpE;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,aAAY,MAAsB,KAAG,MAAM,EACxB,CAAC"}
|
package/dist/services/config.js
CHANGED
|
@@ -1,20 +1,51 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config Service
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Effect-based configuration with multiple providers.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* ## Provider Pattern
|
|
7
|
+
*
|
|
8
|
+
* ConfigProvider is how config gets loaded - file, in-memory, wizard.
|
|
9
|
+
* Each provider returns Effect<ResolvedConfig, ConfigError>.
|
|
10
|
+
*
|
|
11
|
+
* Providers can be chained with withFallback:
|
|
12
|
+
* withFallback(FileProvider(), () => WizardProvider())
|
|
13
|
+
*
|
|
14
|
+
* ## Layer Constructors
|
|
9
15
|
*
|
|
10
|
-
* Layers available:
|
|
11
16
|
* - ConfigFromFile: Load from file, fail if not found
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
17
|
+
* - ConfigFromMemory: Use provided config directly (testing)
|
|
18
|
+
* - ConfigWithFallback: Load from file, fallback to another provider
|
|
14
19
|
*/
|
|
15
|
-
import {
|
|
20
|
+
import { Context, Effect, Layer } from "effect";
|
|
16
21
|
import { createConfigLoader, CONFIG_FILE_NAMES } from "./config-loader.js";
|
|
17
22
|
// ============================================================================
|
|
23
|
+
// Config Providers
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* File-based config provider using lilconfig.
|
|
27
|
+
*/
|
|
28
|
+
export const FileConfigProvider = (opts) => ({
|
|
29
|
+
load: Effect.gen(function* () {
|
|
30
|
+
const loader = createConfigLoader();
|
|
31
|
+
return yield* loader.load(opts);
|
|
32
|
+
}),
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* In-memory config provider - returns the provided config directly.
|
|
36
|
+
* Useful for testing or programmatic usage.
|
|
37
|
+
*/
|
|
38
|
+
export const InMemoryConfigProvider = (config) => ({
|
|
39
|
+
load: Effect.succeed(config),
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Create a provider that tries primary first, falls back to secondary.
|
|
43
|
+
* ConfigNotFound from primary triggers fallback; ConfigInvalid propagates.
|
|
44
|
+
*/
|
|
45
|
+
export const withFallback = (primary, fallback) => ({
|
|
46
|
+
load: primary.load.pipe(Effect.catchTag("ConfigNotFound", () => fallback().load)),
|
|
47
|
+
});
|
|
48
|
+
// ============================================================================
|
|
18
49
|
// Service Definition
|
|
19
50
|
// ============================================================================
|
|
20
51
|
/**
|
|
@@ -29,36 +60,31 @@ export class ConfigService extends Context.Tag("ConfigService")() {
|
|
|
29
60
|
/**
|
|
30
61
|
* Load config from file. Fails with ConfigNotFound if not found.
|
|
31
62
|
*/
|
|
32
|
-
export const ConfigFromFile = (opts) => Layer.effect(ConfigService,
|
|
33
|
-
const loader = createConfigLoader();
|
|
34
|
-
return yield* loader.load(opts);
|
|
35
|
-
}));
|
|
63
|
+
export const ConfigFromFile = (opts) => Layer.effect(ConfigService, FileConfigProvider(opts).load);
|
|
36
64
|
/**
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
*
|
|
42
|
-
* 2. If ConfigNotFound, print message and run init prompts
|
|
43
|
-
* 3. After init writes config, load it
|
|
44
|
-
* 4. Return the loaded config
|
|
65
|
+
* Provide config directly (for testing or programmatic use).
|
|
66
|
+
*/
|
|
67
|
+
export const ConfigFromMemory = (config) => Layer.succeed(ConfigService, config);
|
|
68
|
+
/**
|
|
69
|
+
* Alias for ConfigFromMemory - clearer name for test contexts.
|
|
45
70
|
*/
|
|
46
|
-
export const
|
|
47
|
-
const loader = createConfigLoader();
|
|
48
|
-
return yield* loader.load(opts).pipe(Effect.catchTag("ConfigNotFound", (error) => Effect.gen(function* () {
|
|
49
|
-
yield* Console.error(`\n✗ No config file found`);
|
|
50
|
-
yield* Console.error(` Searched: ${error.searchPaths.join(", ")}`);
|
|
51
|
-
// Dynamic import to avoid circular dependency with init.ts
|
|
52
|
-
const initModule = yield* Effect.promise(() => import("../init.js"));
|
|
53
|
-
const result = yield* initModule.runInit;
|
|
54
|
-
// Load the newly created config
|
|
55
|
-
return yield* loader.load({ configPath: result.configPath });
|
|
56
|
-
})));
|
|
57
|
-
}));
|
|
71
|
+
export const ConfigTest = ConfigFromMemory;
|
|
58
72
|
/**
|
|
59
|
-
*
|
|
73
|
+
* Load config with fallback provider chain.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* // Try file first, fall back to wizard if not found
|
|
78
|
+
* ConfigWithFallback(
|
|
79
|
+
* FileConfigProvider(),
|
|
80
|
+
* () => WizardConfigProvider()
|
|
81
|
+
* )
|
|
82
|
+
* ```
|
|
60
83
|
*/
|
|
61
|
-
export const
|
|
84
|
+
export const ConfigWithFallback = (primary, fallback) => Layer.effect(ConfigService, withFallback(primary, fallback).load);
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// Utility
|
|
87
|
+
// ============================================================================
|
|
62
88
|
/**
|
|
63
89
|
* Get the default search paths for config files.
|
|
64
90
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAGhD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAc3E,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAGlC,EAAkB,EAAE,CAAC,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACxB,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC;CACH,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAsB,EAAkB,EAAE,CAAC,CAAC;IACjF,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;CAC7B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAuB,EACvB,QAA8B,EACd,EAAE,CAAC,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;CAClF,CAAC,CAAC;AAEH,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAiC;CAAG;AAEnG,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAG9B,EAA8D,EAAE,CAC/D,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAsB,EAA8B,EAAE,CACrF,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAuB,EACvB,QAA8B,EAC8B,EAAE,CAC9D,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAEpE,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,aAAqB,OAAO,CAAC,GAAG,EAAE,EAAY,EAAE,CACnF,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* File Writer Service
|
|
3
3
|
*
|
|
4
|
-
* Writes
|
|
4
|
+
* Writes generated files to disk using @effect/platform FileSystem.
|
|
5
5
|
*/
|
|
6
6
|
import { Context, Effect, Layer } from "effect";
|
|
7
7
|
import { FileSystem, Path } from "@effect/platform";
|
|
8
|
-
import type {
|
|
8
|
+
import type { EmittedFile } from "../runtime/emit.js";
|
|
9
9
|
import { WriteError } from "../errors.js";
|
|
10
10
|
/**
|
|
11
11
|
* Result of a write operation
|
|
@@ -33,7 +33,7 @@ export interface FileWriter {
|
|
|
33
33
|
/**
|
|
34
34
|
* Write all emissions to disk
|
|
35
35
|
*/
|
|
36
|
-
readonly writeAll: (emissions: readonly
|
|
36
|
+
readonly writeAll: (emissions: readonly EmittedFile[], options: WriteOptions) => Effect.Effect<readonly WriteResult[], WriteError, FileSystem.FileSystem | Path.Path>;
|
|
37
37
|
}
|
|
38
38
|
declare const FileWriterSvc_base: Context.TagClass<FileWriterSvc, "FileWriter", FileWriter>;
|
|
39
39
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-writer.d.ts","sourceRoot":"","sources":["../../src/services/file-writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAsB,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"file-writer.d.ts","sourceRoot":"","sources":["../../src/services/file-writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAsB,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,CACjB,SAAS,EAAE,SAAS,WAAW,EAAE,EACjC,OAAO,EAAE,YAAY,KAClB,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;CAC3F;;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,kBAAsD;CAAG;AAc5F;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAqE7C;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,0CAAmD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* File Writer Service
|
|
3
3
|
*
|
|
4
|
-
* Writes
|
|
4
|
+
* Writes generated files to disk using @effect/platform FileSystem.
|
|
5
5
|
*/
|
|
6
6
|
import { Context, Effect, Layer, pipe, Array as Arr } from "effect";
|
|
7
7
|
import { FileSystem, Path } from "@effect/platform";
|
|
@@ -29,7 +29,7 @@ export function createFileWriter() {
|
|
|
29
29
|
const pathSvc = yield* Path.Path;
|
|
30
30
|
const outputDir = options.outputDir;
|
|
31
31
|
// Collect unique directories that need to be created
|
|
32
|
-
const directories = pipe(emissions, Arr.map(
|
|
32
|
+
const directories = pipe(emissions, Arr.map(e => pathSvc.dirname(pathSvc.join(outputDir, e.path))), Arr.dedupe);
|
|
33
33
|
// In dry-run mode, just return what would be written
|
|
34
34
|
if (options.dryRun) {
|
|
35
35
|
return pipe(emissions, Arr.map((e) => ({
|
|
@@ -39,12 +39,11 @@ export function createFileWriter() {
|
|
|
39
39
|
})));
|
|
40
40
|
}
|
|
41
41
|
// Create directories
|
|
42
|
-
yield* Effect.forEach(directories,
|
|
42
|
+
yield* Effect.forEach(directories, dir => fs.makeDirectory(dir, { recursive: true }).pipe(Effect.catchAll(err =>
|
|
43
43
|
// Ignore "already exists" errors
|
|
44
44
|
err._tag === "SystemError" && err.reason === "AlreadyExists"
|
|
45
45
|
? Effect.void
|
|
46
|
-
: Effect.fail(toWriteError(dir)(err)))), { concurrency: 1 }
|
|
47
|
-
);
|
|
46
|
+
: Effect.fail(toWriteError(dir)(err)))), { concurrency: 1 });
|
|
48
47
|
// Write files
|
|
49
48
|
const results = yield* Effect.forEach(emissions, (entry) => {
|
|
50
49
|
const fullPath = pathSvc.join(outputDir, entry.path);
|
|
@@ -53,9 +52,8 @@ export function createFileWriter() {
|
|
|
53
52
|
return fs.writeFileString(fullPath, content).pipe(Effect.map(() => ({
|
|
54
53
|
path: fullPath,
|
|
55
54
|
written: true,
|
|
56
|
-
})), Effect.catchAll(
|
|
57
|
-
}, { concurrency: 10 }
|
|
58
|
-
);
|
|
55
|
+
})), Effect.catchAll(err => Effect.fail(toWriteError(fullPath)(err))));
|
|
56
|
+
}, { concurrency: 10 });
|
|
59
57
|
return results;
|
|
60
58
|
}),
|
|
61
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-writer.js","sourceRoot":"","sources":["../../src/services/file-writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"file-writer.js","sourceRoot":"","sources":["../../src/services/file-writer.ts"],"names":[],"mappings":"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"}
|