@danielfgray/pg-sourcerer 0.2.1 → 0.2.2

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 (164) hide show
  1. package/dist/cli.js +3 -4
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +1 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +1 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/errors.d.ts +14 -1
  8. package/dist/errors.d.ts.map +1 -1
  9. package/dist/errors.js +2 -0
  10. package/dist/errors.js.map +1 -1
  11. package/dist/generate.d.ts +5 -9
  12. package/dist/generate.d.ts.map +1 -1
  13. package/dist/generate.js +27 -29
  14. package/dist/generate.js.map +1 -1
  15. package/dist/index.d.ts +19 -12
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +25 -13
  18. package/dist/index.js.map +1 -1
  19. package/dist/init.d.ts.map +1 -1
  20. package/dist/init.js +39 -9
  21. package/dist/init.js.map +1 -1
  22. package/dist/ir/extensions/queries.d.ts +264 -0
  23. package/dist/ir/extensions/queries.d.ts.map +1 -0
  24. package/dist/ir/extensions/queries.js +153 -0
  25. package/dist/ir/extensions/queries.js.map +1 -0
  26. package/dist/ir/extensions/schema-builder.d.ts +61 -0
  27. package/dist/ir/extensions/schema-builder.d.ts.map +1 -0
  28. package/dist/ir/extensions/schema-builder.js +5 -0
  29. package/dist/ir/extensions/schema-builder.js.map +1 -0
  30. package/dist/lib/conjure.d.ts +66 -0
  31. package/dist/lib/conjure.d.ts.map +1 -1
  32. package/dist/lib/conjure.js +127 -29
  33. package/dist/lib/conjure.js.map +1 -1
  34. package/dist/lib/hex.d.ts +10 -3
  35. package/dist/lib/hex.d.ts.map +1 -1
  36. package/dist/lib/hex.js +18 -8
  37. package/dist/lib/hex.js.map +1 -1
  38. package/dist/plugins/arktype.d.ts +27 -14
  39. package/dist/plugins/arktype.d.ts.map +1 -1
  40. package/dist/plugins/arktype.js +166 -130
  41. package/dist/plugins/arktype.js.map +1 -1
  42. package/dist/plugins/effect.d.ts +53 -0
  43. package/dist/plugins/effect.d.ts.map +1 -0
  44. package/dist/plugins/effect.js +1074 -0
  45. package/dist/plugins/effect.js.map +1 -0
  46. package/dist/plugins/http-elysia.d.ts +32 -0
  47. package/dist/plugins/http-elysia.d.ts.map +1 -0
  48. package/dist/plugins/http-elysia.js +613 -0
  49. package/dist/plugins/http-elysia.js.map +1 -0
  50. package/dist/plugins/http-express.d.ts +36 -0
  51. package/dist/plugins/http-express.d.ts.map +1 -0
  52. package/dist/plugins/http-express.js +388 -0
  53. package/dist/plugins/http-express.js.map +1 -0
  54. package/dist/plugins/http-hono.d.ts +36 -0
  55. package/dist/plugins/http-hono.d.ts.map +1 -0
  56. package/dist/plugins/http-hono.js +453 -0
  57. package/dist/plugins/http-hono.js.map +1 -0
  58. package/dist/plugins/http-orpc.d.ts +55 -0
  59. package/dist/plugins/http-orpc.d.ts.map +1 -0
  60. package/dist/plugins/http-orpc.js +370 -0
  61. package/dist/plugins/http-orpc.js.map +1 -0
  62. package/dist/plugins/http-trpc.d.ts +59 -0
  63. package/dist/plugins/http-trpc.d.ts.map +1 -0
  64. package/dist/plugins/http-trpc.js +392 -0
  65. package/dist/plugins/http-trpc.js.map +1 -0
  66. package/dist/plugins/kysely/queries.d.ts +92 -0
  67. package/dist/plugins/kysely/queries.d.ts.map +1 -0
  68. package/dist/plugins/kysely/queries.js +1169 -0
  69. package/dist/plugins/kysely/queries.js.map +1 -0
  70. package/dist/plugins/kysely/shared.d.ts +59 -0
  71. package/dist/plugins/kysely/shared.d.ts.map +1 -0
  72. package/dist/plugins/kysely/shared.js +247 -0
  73. package/dist/plugins/kysely/shared.js.map +1 -0
  74. package/dist/plugins/kysely/types.d.ts +22 -0
  75. package/dist/plugins/kysely/types.d.ts.map +1 -0
  76. package/dist/plugins/kysely/types.js +428 -0
  77. package/dist/plugins/kysely/types.js.map +1 -0
  78. package/dist/plugins/kysely.d.ts +72 -0
  79. package/dist/plugins/kysely.d.ts.map +1 -0
  80. package/dist/plugins/kysely.js +906 -0
  81. package/dist/plugins/kysely.js.map +1 -0
  82. package/dist/plugins/sql-queries.d.ts +55 -11
  83. package/dist/plugins/sql-queries.d.ts.map +1 -1
  84. package/dist/plugins/sql-queries.js +467 -218
  85. package/dist/plugins/sql-queries.js.map +1 -1
  86. package/dist/plugins/types.d.ts +20 -14
  87. package/dist/plugins/types.d.ts.map +1 -1
  88. package/dist/plugins/types.js +90 -112
  89. package/dist/plugins/types.js.map +1 -1
  90. package/dist/plugins/valibot.d.ts +45 -0
  91. package/dist/plugins/valibot.d.ts.map +1 -0
  92. package/dist/plugins/valibot.js +422 -0
  93. package/dist/plugins/valibot.js.map +1 -0
  94. package/dist/plugins/zod.d.ts +27 -14
  95. package/dist/plugins/zod.d.ts.map +1 -1
  96. package/dist/plugins/zod.js +231 -166
  97. package/dist/plugins/zod.js.map +1 -1
  98. package/dist/services/artifact-store.d.ts +11 -1
  99. package/dist/services/artifact-store.d.ts.map +1 -1
  100. package/dist/services/artifact-store.js +9 -0
  101. package/dist/services/artifact-store.js.map +1 -1
  102. package/dist/services/core-providers.d.ts +15 -0
  103. package/dist/services/core-providers.d.ts.map +1 -0
  104. package/dist/services/core-providers.js +23 -0
  105. package/dist/services/core-providers.js.map +1 -0
  106. package/dist/services/emissions.d.ts +14 -0
  107. package/dist/services/emissions.d.ts.map +1 -1
  108. package/dist/services/emissions.js +86 -47
  109. package/dist/services/emissions.js.map +1 -1
  110. package/dist/services/execution.d.ts +35 -0
  111. package/dist/services/execution.d.ts.map +1 -0
  112. package/dist/services/execution.js +86 -0
  113. package/dist/services/execution.js.map +1 -0
  114. package/dist/services/file-builder.d.ts +4 -0
  115. package/dist/services/file-builder.d.ts.map +1 -1
  116. package/dist/services/file-builder.js.map +1 -1
  117. package/dist/services/inflection.d.ts +2 -2
  118. package/dist/services/inflection.d.ts.map +1 -1
  119. package/dist/services/inflection.js +4 -4
  120. package/dist/services/inflection.js.map +1 -1
  121. package/dist/services/ir-builder.d.ts.map +1 -1
  122. package/dist/services/ir-builder.js +10 -3
  123. package/dist/services/ir-builder.js.map +1 -1
  124. package/dist/services/pg-types.d.ts +31 -0
  125. package/dist/services/pg-types.d.ts.map +1 -1
  126. package/dist/services/pg-types.js +24 -0
  127. package/dist/services/pg-types.js.map +1 -1
  128. package/dist/services/plugin-runner.d.ts +27 -37
  129. package/dist/services/plugin-runner.d.ts.map +1 -1
  130. package/dist/services/plugin-runner.js +73 -171
  131. package/dist/services/plugin-runner.js.map +1 -1
  132. package/dist/services/plugin.d.ts +349 -217
  133. package/dist/services/plugin.d.ts.map +1 -1
  134. package/dist/services/plugin.js +182 -130
  135. package/dist/services/plugin.js.map +1 -1
  136. package/dist/services/resolution.d.ts +38 -0
  137. package/dist/services/resolution.d.ts.map +1 -0
  138. package/dist/services/resolution.js +242 -0
  139. package/dist/services/resolution.js.map +1 -0
  140. package/dist/services/service-registry.d.ts +74 -0
  141. package/dist/services/service-registry.d.ts.map +1 -0
  142. package/dist/services/service-registry.js +61 -0
  143. package/dist/services/service-registry.js.map +1 -0
  144. package/dist/services/symbols.d.ts +59 -0
  145. package/dist/services/symbols.d.ts.map +1 -1
  146. package/dist/services/symbols.js +16 -0
  147. package/dist/services/symbols.js.map +1 -1
  148. package/dist/testing.d.ts +4 -25
  149. package/dist/testing.d.ts.map +1 -1
  150. package/dist/testing.js +2 -23
  151. package/dist/testing.js.map +1 -1
  152. package/package.json +1 -1
  153. package/dist/plugins/effect-model.d.ts +0 -17
  154. package/dist/plugins/effect-model.d.ts.map +0 -1
  155. package/dist/plugins/effect-model.js +0 -409
  156. package/dist/plugins/effect-model.js.map +0 -1
  157. package/dist/plugins/kysely-queries.d.ts +0 -66
  158. package/dist/plugins/kysely-queries.d.ts.map +0 -1
  159. package/dist/plugins/kysely-queries.js +0 -951
  160. package/dist/plugins/kysely-queries.js.map +0 -1
  161. package/dist/plugins/kysely-types.d.ts +0 -35
  162. package/dist/plugins/kysely-types.d.ts.map +0 -1
  163. package/dist/plugins/kysely-types.js +0 -601
  164. package/dist/plugins/kysely-types.js.map +0 -1
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Resolution Phase
3
+ *
4
+ * Matches requests to providers, expands dependencies, builds DAG,
5
+ * detects cycles, and produces an execution plan.
6
+ */
7
+ import { Array as Arr, Data, Effect, HashMap, Option, pipe } from "effect";
8
+ import { PluginCycle, PluginNotFound, } from "./plugin.js";
9
+ const makeKey = (kind, params) => Data.struct({
10
+ kind,
11
+ paramsJson: JSON.stringify(params ?? {}),
12
+ });
13
+ // ============================================================================
14
+ // Resolution
15
+ // ============================================================================
16
+ /**
17
+ * Find the first provider that can handle a request.
18
+ * Returns Option.none() if no provider found.
19
+ */
20
+ const findProviderOptional = (providers, kind, params) => {
21
+ const byKind = providers.filter((p) => p.kind === kind);
22
+ return Arr.findFirst(byKind, (p) => p.canProvide(params));
23
+ };
24
+ /**
25
+ * Find the first provider that can handle a request.
26
+ * Fails with PluginNotFound if none found.
27
+ */
28
+ const findProvider = (providers, kind, params, requestedBy) => pipe(findProviderOptional(providers, kind, params), Option.match({
29
+ onNone: () => Effect.fail(new PluginNotFound({
30
+ message: `No provider found for "${kind}"`,
31
+ kind,
32
+ params,
33
+ requestedBy,
34
+ })),
35
+ onSome: Effect.succeed,
36
+ }));
37
+ /**
38
+ * Resolve a single request: match to provider, get required dependencies.
39
+ * Optional dependencies are handled separately in collectAndResolve.
40
+ */
41
+ const resolveRequest = (providers, kind, params, requestedBy) => findProvider(providers, kind, params, requestedBy).pipe(Effect.map((provider) => ({
42
+ kind,
43
+ params,
44
+ provider,
45
+ dependencies: provider.requires?.(params) ?? [],
46
+ optionalDependencies: [], // Filled in later by collectAndResolve
47
+ })));
48
+ /**
49
+ * Collect all requests (including transitive dependencies) and resolve them.
50
+ *
51
+ * Returns a map of RequestKey → ResolvedRequest.
52
+ */
53
+ const collectAndResolve = (registry) => {
54
+ const providers = registry.getPlugins();
55
+ const pendingRequests = registry.getPendingRequests();
56
+ const singletons = registry.getSingletons();
57
+ // Initial requests: pending + singletons
58
+ const initialRequests = [
59
+ ...pendingRequests.map((p) => ({ kind: p.kind, params: p.params })),
60
+ ...singletons.map((s) => ({ kind: s.kind, params: s.singletonParams ?? {} })),
61
+ ];
62
+ // Track optional dependencies that were resolved for each request
63
+ // Key: request key string, Value: array of resolved optional deps
64
+ const resolvedOptionalDeps = new Map();
65
+ const keyToString = (k) => `${k.kind}:${k.paramsJson}`;
66
+ // BFS to collect all requests
67
+ const processQueue = (queue, resolved) => {
68
+ if (queue.length === 0) {
69
+ // Post-process: update resolved requests with their optional dependencies
70
+ return Effect.succeed(HashMap.map(resolved, (req) => {
71
+ const key = makeKey(req.kind, req.params);
72
+ const optDeps = resolvedOptionalDeps.get(keyToString(key)) ?? [];
73
+ return { ...req, optionalDependencies: optDeps };
74
+ }));
75
+ }
76
+ const [current, ...rest] = queue;
77
+ if (!current)
78
+ return Effect.succeed(resolved);
79
+ const key = makeKey(current.req.kind, current.req.params);
80
+ // Skip if already resolved
81
+ if (HashMap.has(resolved, key)) {
82
+ return processQueue(rest, resolved);
83
+ }
84
+ // For optional requests, check if provider exists first
85
+ if (current.isOptional) {
86
+ const maybeProvider = findProviderOptional(providers, current.req.kind, current.req.params);
87
+ if (Option.isNone(maybeProvider)) {
88
+ // No provider for optional dep - skip silently
89
+ return processQueue(rest, resolved);
90
+ }
91
+ }
92
+ return resolveRequest(providers, current.req.kind, current.req.params, current.requestedBy).pipe(Effect.flatMap((resolvedReq) => {
93
+ const newResolved = HashMap.set(resolved, key, resolvedReq);
94
+ // Add required dependencies to queue
95
+ const requiredItems = resolvedReq.dependencies.map((dep) => ({
96
+ req: dep,
97
+ requestedBy: resolvedReq.provider.name,
98
+ isOptional: false,
99
+ }));
100
+ // Process optional dependencies
101
+ const optionalReqs = resolvedReq.provider.optionalRequires?.(resolvedReq.params) ?? [];
102
+ const optionalItems = [];
103
+ for (const optReq of optionalReqs) {
104
+ // Check if provider exists for this optional dep
105
+ const maybeProvider = findProviderOptional(providers, optReq.kind, optReq.params);
106
+ if (Option.isSome(maybeProvider)) {
107
+ // Provider exists - add to queue and track as optional dependency
108
+ optionalItems.push({
109
+ req: optReq,
110
+ requestedBy: resolvedReq.provider.name,
111
+ isOptional: true,
112
+ });
113
+ // Track that this was an optional dep of the current request
114
+ const currentKeyStr = keyToString(key);
115
+ const existing = resolvedOptionalDeps.get(currentKeyStr) ?? [];
116
+ existing.push(optReq);
117
+ resolvedOptionalDeps.set(currentKeyStr, existing);
118
+ }
119
+ // If no provider, silently skip - that's the point of optional deps
120
+ }
121
+ return processQueue([...rest, ...requiredItems, ...optionalItems], newResolved);
122
+ }));
123
+ };
124
+ const initialQueue = initialRequests.map((req) => ({
125
+ req,
126
+ requestedBy: "initial",
127
+ isOptional: false,
128
+ }));
129
+ return processQueue(initialQueue, HashMap.empty());
130
+ };
131
+ /**
132
+ * Build adjacency list for the dependency graph.
133
+ * Node: RequestKey, Edges: dependencies (both required and optional, as keys)
134
+ */
135
+ const buildAdjacencyList = (resolved) => HashMap.map(resolved, (req) => {
136
+ const requiredKeys = req.dependencies.map((dep) => makeKey(dep.kind, dep.params));
137
+ const optionalKeys = req.optionalDependencies.map((dep) => makeKey(dep.kind, dep.params));
138
+ return [...requiredKeys, ...optionalKeys];
139
+ });
140
+ /**
141
+ * Detect cycles using DFS with color marking.
142
+ * WHITE = unvisited, GRAY = in progress, BLACK = done
143
+ *
144
+ * Uses string keys for the color map since Data.struct creates new instances.
145
+ */
146
+ const detectCycles = (adjacency) => {
147
+ // Use string serialization for Map keys since Data.struct instances are different objects
148
+ const keyToString = (k) => `${k.kind}:${k.paramsJson}`;
149
+ const nodes = HashMap.keys(adjacency);
150
+ const dfs = (node, colors, path) => {
151
+ const nodeStr = keyToString(node);
152
+ const color = colors.get(nodeStr) ?? "white";
153
+ if (color === "gray") {
154
+ // Cycle detected - find where in path this node appears
155
+ const pathStrs = path.map(keyToString);
156
+ const cycleStart = pathStrs.indexOf(nodeStr);
157
+ const cyclePath = cycleStart >= 0 ? path.slice(cycleStart) : path;
158
+ const cycle = [...cyclePath, node].map((k) => {
159
+ const params = JSON.parse(k.paramsJson);
160
+ return Object.keys(params).length > 0 ? `${k.kind}(${k.paramsJson})` : k.kind;
161
+ });
162
+ return Effect.fail(new PluginCycle({
163
+ message: `Dependency cycle detected: ${cycle.join(" → ")}`,
164
+ cycle,
165
+ }));
166
+ }
167
+ if (color === "black") {
168
+ return Effect.succeed(colors);
169
+ }
170
+ colors.set(nodeStr, "gray");
171
+ const neighbors = pipe(HashMap.get(adjacency, node), Option.getOrElse(() => []));
172
+ return Effect.reduce(neighbors, colors, (cols, neighbor) => dfs(neighbor, cols, [...path, node])).pipe(Effect.map((cols) => {
173
+ cols.set(nodeStr, "black");
174
+ return cols;
175
+ }));
176
+ };
177
+ return Effect.reduce(nodes, new Map(), (colors, node) => dfs(node, colors, [])).pipe(Effect.asVoid);
178
+ };
179
+ /**
180
+ * Topological sort using Kahn's algorithm.
181
+ */
182
+ const topologicalSort = (resolved, adjacency) => {
183
+ const keyToString = (k) => `${k.kind}:${k.paramsJson}`;
184
+ // Build in-degree map (how many things depend on each node)
185
+ const inDegree = new Map();
186
+ const keysByString = new Map();
187
+ for (const key of HashMap.keys(adjacency)) {
188
+ const keyStr = keyToString(key);
189
+ keysByString.set(keyStr, key);
190
+ if (!inDegree.has(keyStr))
191
+ inDegree.set(keyStr, 0);
192
+ }
193
+ for (const deps of HashMap.values(adjacency)) {
194
+ for (const dep of deps) {
195
+ const depStr = keyToString(dep);
196
+ inDegree.set(depStr, (inDegree.get(depStr) ?? 0) + 1);
197
+ }
198
+ }
199
+ // Start with nodes that have no dependencies on them (in-degree = 0)
200
+ const queue = [];
201
+ for (const [keyStr, degree] of inDegree) {
202
+ if (degree === 0)
203
+ queue.push(keyStr);
204
+ }
205
+ const result = [];
206
+ while (queue.length > 0) {
207
+ const nodeStr = queue.shift();
208
+ const node = keysByString.get(nodeStr);
209
+ const resolvedReq = pipe(HashMap.get(resolved, node), Option.getOrThrow);
210
+ result.push(resolvedReq);
211
+ const deps = pipe(HashMap.get(adjacency, node), Option.getOrElse(() => []));
212
+ for (const dep of deps) {
213
+ const depStr = keyToString(dep);
214
+ const newDegree = (inDegree.get(depStr) ?? 1) - 1;
215
+ inDegree.set(depStr, newDegree);
216
+ if (newDegree === 0)
217
+ queue.push(depStr);
218
+ }
219
+ }
220
+ // Reverse: dependencies should come first
221
+ return result.reverse();
222
+ };
223
+ // ============================================================================
224
+ // Public API
225
+ // ============================================================================
226
+ /**
227
+ * Resolve all requests and produce an execution plan.
228
+ *
229
+ * Steps:
230
+ * 1. Collect all requests (pending + singletons + transitive dependencies)
231
+ * 2. Match each request to a provider
232
+ * 3. Build dependency DAG
233
+ * 4. Detect cycles
234
+ * 5. Topologically sort
235
+ */
236
+ export const resolve = (registry) => collectAndResolve(registry).pipe(Effect.flatMap((resolved) => {
237
+ const adjacency = buildAdjacencyList(resolved);
238
+ return detectCycles(adjacency).pipe(Effect.map(() => ({
239
+ steps: topologicalSort(resolved, adjacency),
240
+ })));
241
+ }));
242
+ //# sourceMappingURL=resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution.js","sourceRoot":"","sources":["../../src/services/resolution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Service Registry
3
+ *
4
+ * Runtime service registration for plugin-to-plugin communication.
5
+ * Plugins register services during their provide() phase, and other
6
+ * plugins can access them via ctx.services.get().
7
+ *
8
+ * This enables on-demand requests between plugins without coupling
9
+ * them to specific implementations.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // Provider plugin (e.g., zod)
14
+ * ctx.services.register("schema-builder", {
15
+ * buildParamSchema: (params) => // ... generate AST
16
+ * })
17
+ *
18
+ * // Consumer plugin (e.g., http-elysia)
19
+ * const builder = ctx.services.get<SchemaBuilder>("schema-builder")
20
+ * if (builder) {
21
+ * const ast = builder.buildParamSchema(params)
22
+ * }
23
+ * ```
24
+ */
25
+ import { Context, Layer } from "effect";
26
+ /**
27
+ * Runtime service registry for plugin communication.
28
+ */
29
+ export interface ServiceRegistry {
30
+ /**
31
+ * Register a service by kind.
32
+ * Later registrations for the same kind overwrite earlier ones.
33
+ *
34
+ * @param kind - Service identifier (e.g., "schema-builder")
35
+ * @param service - The service implementation
36
+ */
37
+ readonly register: <S>(kind: string, service: S) => void;
38
+ /**
39
+ * Get a registered service by kind.
40
+ * Returns undefined if no service is registered for the kind.
41
+ *
42
+ * @param kind - Service identifier
43
+ * @returns The service or undefined
44
+ */
45
+ readonly get: <S>(kind: string) => S | undefined;
46
+ /**
47
+ * Check if a service is registered.
48
+ *
49
+ * @param kind - Service identifier
50
+ * @returns true if registered
51
+ */
52
+ readonly has: (kind: string) => boolean;
53
+ /**
54
+ * List all registered service kinds.
55
+ * Useful for debugging.
56
+ */
57
+ readonly kinds: () => readonly string[];
58
+ }
59
+ declare const Services_base: Context.TagClass<Services, "Services", ServiceRegistry>;
60
+ /**
61
+ * Effect service tag for ServiceRegistry.
62
+ */
63
+ export declare class Services extends Services_base {
64
+ }
65
+ /**
66
+ * Create a new service registry.
67
+ */
68
+ export declare function createServiceRegistry(): ServiceRegistry;
69
+ /**
70
+ * Live layer - creates fresh service registry.
71
+ */
72
+ export declare const ServicesLive: Layer.Layer<Services, never, never>;
73
+ export {};
74
+ //# sourceMappingURL=service-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-registry.d.ts","sourceRoot":"","sources":["../../src/services/service-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAMvC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,IAAI,CAAA;IAExD;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAA;IAEhD;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAEvC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,SAAS,MAAM,EAAE,CAAA;CACxC;;AAMD;;GAEG;AACH,qBAAa,QAAS,SAAQ,aAAoD;CAAG;AAMrF;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAoBvD;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,qCAAsD,CAAA"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Service Registry
3
+ *
4
+ * Runtime service registration for plugin-to-plugin communication.
5
+ * Plugins register services during their provide() phase, and other
6
+ * plugins can access them via ctx.services.get().
7
+ *
8
+ * This enables on-demand requests between plugins without coupling
9
+ * them to specific implementations.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // Provider plugin (e.g., zod)
14
+ * ctx.services.register("schema-builder", {
15
+ * buildParamSchema: (params) => // ... generate AST
16
+ * })
17
+ *
18
+ * // Consumer plugin (e.g., http-elysia)
19
+ * const builder = ctx.services.get<SchemaBuilder>("schema-builder")
20
+ * if (builder) {
21
+ * const ast = builder.buildParamSchema(params)
22
+ * }
23
+ * ```
24
+ */
25
+ import { Context, Layer } from "effect";
26
+ // ============================================================================
27
+ // Service Tag
28
+ // ============================================================================
29
+ /**
30
+ * Effect service tag for ServiceRegistry.
31
+ */
32
+ export class Services extends Context.Tag("Services")() {
33
+ }
34
+ // ============================================================================
35
+ // Implementation
36
+ // ============================================================================
37
+ /**
38
+ * Create a new service registry.
39
+ */
40
+ export function createServiceRegistry() {
41
+ const services = new Map();
42
+ return {
43
+ register: (kind, service) => {
44
+ services.set(kind, service);
45
+ },
46
+ get: (kind) => {
47
+ return services.get(kind);
48
+ },
49
+ has: (kind) => {
50
+ return services.has(kind);
51
+ },
52
+ kinds: () => {
53
+ return [...services.keys()];
54
+ },
55
+ };
56
+ }
57
+ /**
58
+ * Live layer - creates fresh service registry.
59
+ */
60
+ export const ServicesLive = Layer.sync(Services, () => createServiceRegistry());
61
+ //# sourceMappingURL=service-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-registry.js","sourceRoot":"","sources":["../../src/services/service-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AA2CvC,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAA6B;CAAG;AAErF,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAA;IAE3C,OAAO;QACL,QAAQ,EAAE,CAAI,IAAY,EAAE,OAAU,EAAE,EAAE;YACxC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC7B,CAAC;QAED,GAAG,EAAE,CAAI,IAAY,EAAE,EAAE;YACvB,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAkB,CAAA;QAC5C,CAAC;QAED,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE;YACpB,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC;QAED,KAAK,EAAE,GAAG,EAAE;YACV,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7B,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAA"}
@@ -2,9 +2,50 @@
2
2
  * Symbol Registry Service
3
3
  *
4
4
  * Tracks emitted symbols for cross-file import resolution.
5
+ * Also provides method registry for query provider → HTTP provider communication.
5
6
  */
6
7
  import { Context, Layer } from "effect";
7
8
  import type { CapabilityKey } from "../ir/index.js";
9
+ import type { QueryMethodKind, QueryMethodParam, QueryMethodReturn, CallSignature } from "../ir/extensions/queries.js";
10
+ /**
11
+ * A method symbol registered by query providers.
12
+ * HTTP providers consume these to generate routes.
13
+ */
14
+ export interface MethodSymbol {
15
+ /** Export name in the generated file (e.g., "findUserById") */
16
+ readonly name: string;
17
+ /** File where the method is exported */
18
+ readonly file: string;
19
+ /** Entity this method operates on */
20
+ readonly entity: string;
21
+ /** What kind of operation */
22
+ readonly kind: QueryMethodKind;
23
+ /** Parameters */
24
+ readonly params: readonly QueryMethodParam[];
25
+ /** Return type info */
26
+ readonly returns: QueryMethodReturn;
27
+ /** For lookup methods */
28
+ readonly lookupField?: string;
29
+ /** Whether lookup returns single result */
30
+ readonly isUniqueLookup?: boolean;
31
+ /** How to call this method */
32
+ readonly callSignature?: CallSignature;
33
+ }
34
+ /**
35
+ * Entity methods summary for a single entity
36
+ */
37
+ export interface EntityMethods {
38
+ /** Entity name */
39
+ readonly entity: string;
40
+ /** Import path for the methods file */
41
+ readonly importPath: string;
42
+ /** All methods for this entity */
43
+ readonly methods: readonly MethodSymbol[];
44
+ /** Primary key type */
45
+ readonly pkType?: string;
46
+ /** Has composite PK */
47
+ readonly hasCompositePk?: boolean;
48
+ }
8
49
  /**
9
50
  * Reference to a symbol
10
51
  */
@@ -66,6 +107,24 @@ export interface SymbolRegistry {
66
107
  * Get all registered symbols
67
108
  */
68
109
  readonly getAll: () => readonly Symbol[];
110
+ /**
111
+ * Register all methods for an entity.
112
+ * Called by query providers (sql-queries, kysely-queries).
113
+ */
114
+ readonly registerEntityMethods: (entityMethods: EntityMethods, provider: string) => void;
115
+ /**
116
+ * Get all methods for an entity.
117
+ * Called by HTTP providers (http-elysia, http-trpc).
118
+ */
119
+ readonly getEntityMethods: (entity: string) => EntityMethods | undefined;
120
+ /**
121
+ * Get all entities that have registered methods.
122
+ */
123
+ readonly getEntitiesWithMethods: () => readonly string[];
124
+ /**
125
+ * Get methods by kind across all entities.
126
+ */
127
+ readonly getMethodsByKind: (kind: QueryMethodKind) => readonly MethodSymbol[];
69
128
  }
70
129
  declare const Symbols_base: Context.TagClass<Symbols, "Symbols", SymbolRegistry>;
71
130
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/services/symbols.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAgB,OAAO,EAAE,KAAK,EAAgC,MAAM,QAAQ,CAAA;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAE3D;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,MAAM,GAAG,SAAS,CAAA;IAExD;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,eAAe,CAAA;IAEzE;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,SAAS,eAAe,EAAE,CAAA;IAEnD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,CAAA;CACzC;;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,YAG1B;CAAG;AAEN;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CA4GrD;AAmDD;;GAEG;AACH,eAAO,MAAM,WAAW,oCAAoD,CAAA"}
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/services/symbols.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * Symbol Registry Service
3
3
  *
4
4
  * Tracks emitted symbols for cross-file import resolution.
5
+ * Also provides method registry for query provider → HTTP provider communication.
5
6
  */
6
7
  import { Array as Arr, Context, Layer, MutableHashMap, Option, pipe } from "effect";
7
8
  /**
@@ -14,6 +15,8 @@ export class Symbols extends Context.Tag("Symbols")() {
14
15
  */
15
16
  export function createSymbolRegistry() {
16
17
  const symbols = MutableHashMap.empty();
18
+ // Method registry: entity → methods
19
+ const entityMethodsMap = new Map();
17
20
  // Key for deduplication: capability:entity:shape
18
21
  const makeKey = (ref) => `${ref.capability}:${ref.entity}:${ref.shape ?? ""}`;
19
22
  return {
@@ -79,6 +82,19 @@ export function createSymbolRegistry() {
79
82
  }));
80
83
  },
81
84
  getAll: () => pipe(MutableHashMap.values(symbols), Arr.fromIterable, Arr.flatMap((entries) => entries.map((e) => e.symbol))),
85
+ // ============================================================================
86
+ // Method Registry Implementation
87
+ // ============================================================================
88
+ registerEntityMethods: (entityMethods, provider) => {
89
+ entityMethodsMap.set(entityMethods.entity, { methods: entityMethods, provider });
90
+ },
91
+ getEntityMethods: (entity) => {
92
+ return entityMethodsMap.get(entity)?.methods;
93
+ },
94
+ getEntitiesWithMethods: () => {
95
+ return [...entityMethodsMap.keys()];
96
+ },
97
+ getMethodsByKind: (kind) => pipe([...entityMethodsMap.values()], Arr.flatMap(({ methods }) => methods.methods.filter((m) => m.kind === kind))),
82
98
  };
83
99
  }
84
100
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/services/symbols.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/services/symbols.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AA2JnF;;GAEG;AACH,MAAM,OAAO,OAAQ,SAAQ,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAGhD;CAAG;AAEN;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAGjC,CAAA;IAEH,oCAAoC;IACpC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAwD,CAAA;IAExF,iDAAiD;IACjD,MAAM,OAAO,GAAG,CAAC,GAAc,EAAU,EAAE,CACzC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,CAAA;IAEtD,OAAO;QACL,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;YAC3B,IAAI,CACF,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAChC,MAAM,CAAC,KAAK,CAAC;gBACX,MAAM,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpE,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;oBACjC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;gBAC5C,CAAC;aACF,CAAC,CACH,CAAA;QACH,CAAC;QAED,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YACxB,OAAO,IAAI,CACT,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAChC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EACnC,MAAM,CAAC,cAAc,CACtB,CAAA;QACH,CAAC;QAED,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YAC9B,4CAA4C;YAC5C,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YAEjE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO;oBACL,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE,MAAM,CAAC,IAAI;iBACrB,CAAA;YACH,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO;oBACL,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;iBACrB,CAAA;YACH,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,EAAE;aACV,CAAA;QACH,CAAC;QAED,QAAQ,EAAE,GAAG,EAAE;YACb,kEAAkE;YAClE,2EAA2E;YAC3E,MAAM,UAAU,GAAG,IAAI,CACrB,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,OAAO,CACZ,CAAA;YAED,sDAAsD;YACtD,MAAM,iBAAiB,GAAG,IAAI,CAC5B,UAAU,EACV,GAAG,CAAC,MAAM,CACR,IAAI,GAAG,EAAgD,EACvD,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBACb,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;gBAC9E,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;gBACnC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;gBACtB,OAAO,GAAG,CAAA;YACZ,CAAC,CACF,CACF,CAAA;YAED,uDAAuD;YACvD,OAAO,IAAI,CACT,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,CAAC,EAChC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE;gBAC/B,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;oBAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;gBAC7C,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAA;gBACzD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAC1D,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;oBACvB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAqB,CAAC;oBAC3D,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;YACnB,CAAC,CAAC,CACH,CAAA;QACH,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,CACX,IAAI,CACF,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CACvD;QAEH,+EAA+E;QAC/E,iCAAiC;QACjC,+EAA+E;QAE/E,qBAAqB,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE;YACjD,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAA;QAClF,CAAC;QAED,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,OAAO,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;QAC9C,CAAC;QAED,sBAAsB,EAAE,GAAG,EAAE;YAC3B,OAAO,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAA;QACrC,CAAC;QAED,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,CACF,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAC9B,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1B,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAC/C,CACF;KACJ,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,qBAAqB,CAAC,QAAgB,EAAE,MAAc;IAC7D,iDAAiD;IACjD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IACpD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAEhD,0CAA0C;IAC1C,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEvC,0DAA0D;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA;IACtC,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAEvD,yDAAyD;IACzD,SAAS,CAAC,GAAG,EAAE,CAAA;IAEf,4BAA4B;IAC5B,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5D,OAAO,YAAY,GAAG,SAAS,IAAI,SAAS,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACrF,YAAY,EAAE,CAAA;IAChB,CAAC;IAED,wDAAwD;IACxD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,YAAY,CAAA;IAE/C,0BAA0B;IAC1B,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEzD,wCAAwC;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAE7E,OAAO,MAAM,GAAG,OAAO,GAAG,YAAY,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAA"}
package/dist/testing.d.ts CHANGED
@@ -6,10 +6,9 @@
6
6
  import { Layer } from "effect";
7
7
  import { PluginMeta } from "./services/plugin-meta.js";
8
8
  import { IR } from "./services/ir.js";
9
- import { PluginRunner } from "./services/plugin-runner.js";
10
9
  import type { SemanticIR } from "./ir/semantic-ir.js";
11
10
  /**
12
- * Base test layers for direct plugin testing (bypassing PluginRunner).
11
+ * Base test layers for direct plugin testing.
13
12
  *
14
13
  * Provides all shared services except IR and PluginMeta,
15
14
  * which are test-specific.
@@ -23,27 +22,7 @@ import type { SemanticIR } from "./ir/semantic-ir.js";
23
22
  * )
24
23
  * ```
25
24
  */
26
- export declare const PluginTestLayers: Layer.Layer<import("./index.js").Inflection | import("./testing.js").Symbols | import("./index.js").TypeHints | import("./testing.js").Emissions | import("./index.js").ArtifactStore, never, never>;
27
- /**
28
- * Test layer for PluginRunner integration tests.
29
- *
30
- * PluginRunner.Default includes InflectionLive by default.
31
- * Add TypeHintsLive for complete test setup.
32
- *
33
- * Usage:
34
- * ```typescript
35
- * layer(PluginRunnerTestLayer)("my tests", (it) => {
36
- * it.effect("runs plugins", () =>
37
- * Effect.gen(function* () {
38
- * const runner = yield* PluginRunner
39
- * const prepared = yield* runner.prepare(plugins)
40
- * const result = yield* runner.run(prepared, ir)
41
- * })
42
- * )
43
- * })
44
- * ```
45
- */
46
- export declare const PluginRunnerTestLayer: Layer.Layer<import("./index.js").TypeHints | PluginRunner, never, never>;
25
+ export declare const PluginTestLayers: Layer.Layer<import("./index.js").Inflection | import("./testing.js").Symbols | import("./testing.js").Emissions | import("./index.js").TypeHints | import("./index.js").ArtifactStore, never, never>;
47
26
  /**
48
27
  * Create a complete test layer for a specific plugin test.
49
28
  *
@@ -67,11 +46,11 @@ export declare const PluginRunnerTestLayer: Layer.Layer<import("./index.js").Typ
67
46
  * })
68
47
  * ```
69
48
  */
70
- export declare function createPluginTestLayer(ir: SemanticIR, pluginName: string): Layer.Layer<import("./index.js").Inflection | import("./testing.js").Symbols | import("./index.js").TypeHints | import("./testing.js").Emissions | IR | import("./index.js").ArtifactStore | PluginMeta, never, never>;
49
+ export declare function createPluginTestLayer(ir: SemanticIR, pluginName: string): Layer.Layer<import("./index.js").Inflection | import("./testing.js").Symbols | import("./testing.js").Emissions | import("./index.js").TypeHints | IR | import("./index.js").ArtifactStore | PluginMeta, never, never>;
71
50
  export { IR } from "./services/ir.js";
72
51
  export { PluginMeta } from "./services/plugin-meta.js";
73
52
  export { Emissions } from "./services/emissions.js";
74
53
  export { Symbols } from "./services/symbols.js";
75
- export { PluginRunner } from "./services/plugin-runner.js";
54
+ export { runPlugins } from "./services/plugin-runner.js";
76
55
  export { createIRBuilder, freezeIR } from "./ir/semantic-ir.js";
77
56
  //# sourceMappingURL=testing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAM9B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,sMAM5B,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,0EAGjC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,0NAMvE;AAGD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAM9B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,sMAM5B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,0NAMvE;AAGD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}