@danielfgray/pg-sourcerer 0.2.1 → 0.3.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/dist/cli.js +3 -4
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +14 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -1
- package/dist/generate.d.ts +5 -9
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +27 -29
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +19 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -13
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +39 -9
- package/dist/init.js.map +1 -1
- package/dist/ir/extensions/queries.d.ts +264 -0
- package/dist/ir/extensions/queries.d.ts.map +1 -0
- package/dist/ir/extensions/queries.js +153 -0
- package/dist/ir/extensions/queries.js.map +1 -0
- package/dist/ir/extensions/schema-builder.d.ts +61 -0
- package/dist/ir/extensions/schema-builder.d.ts.map +1 -0
- package/dist/ir/extensions/schema-builder.js +5 -0
- package/dist/ir/extensions/schema-builder.js.map +1 -0
- package/dist/lib/conjure.d.ts +66 -0
- package/dist/lib/conjure.d.ts.map +1 -1
- package/dist/lib/conjure.js +127 -29
- package/dist/lib/conjure.js.map +1 -1
- package/dist/lib/hex.d.ts +10 -3
- package/dist/lib/hex.d.ts.map +1 -1
- package/dist/lib/hex.js +18 -8
- package/dist/lib/hex.js.map +1 -1
- package/dist/plugins/arktype.d.ts +27 -14
- package/dist/plugins/arktype.d.ts.map +1 -1
- package/dist/plugins/arktype.js +166 -130
- package/dist/plugins/arktype.js.map +1 -1
- package/dist/plugins/effect.d.ts +53 -0
- package/dist/plugins/effect.d.ts.map +1 -0
- package/dist/plugins/effect.js +1074 -0
- package/dist/plugins/effect.js.map +1 -0
- package/dist/plugins/http-elysia.d.ts +32 -0
- package/dist/plugins/http-elysia.d.ts.map +1 -0
- package/dist/plugins/http-elysia.js +613 -0
- package/dist/plugins/http-elysia.js.map +1 -0
- package/dist/plugins/http-express.d.ts +36 -0
- package/dist/plugins/http-express.d.ts.map +1 -0
- package/dist/plugins/http-express.js +388 -0
- package/dist/plugins/http-express.js.map +1 -0
- package/dist/plugins/http-hono.d.ts +36 -0
- package/dist/plugins/http-hono.d.ts.map +1 -0
- package/dist/plugins/http-hono.js +453 -0
- package/dist/plugins/http-hono.js.map +1 -0
- package/dist/plugins/http-orpc.d.ts +55 -0
- package/dist/plugins/http-orpc.d.ts.map +1 -0
- package/dist/plugins/http-orpc.js +370 -0
- package/dist/plugins/http-orpc.js.map +1 -0
- package/dist/plugins/http-trpc.d.ts +59 -0
- package/dist/plugins/http-trpc.d.ts.map +1 -0
- package/dist/plugins/http-trpc.js +392 -0
- package/dist/plugins/http-trpc.js.map +1 -0
- package/dist/plugins/kysely/queries.d.ts +92 -0
- package/dist/plugins/kysely/queries.d.ts.map +1 -0
- package/dist/plugins/kysely/queries.js +1169 -0
- package/dist/plugins/kysely/queries.js.map +1 -0
- package/dist/plugins/kysely/shared.d.ts +59 -0
- package/dist/plugins/kysely/shared.d.ts.map +1 -0
- package/dist/plugins/kysely/shared.js +247 -0
- package/dist/plugins/kysely/shared.js.map +1 -0
- package/dist/plugins/kysely/types.d.ts +22 -0
- package/dist/plugins/kysely/types.d.ts.map +1 -0
- package/dist/plugins/kysely/types.js +428 -0
- package/dist/plugins/kysely/types.js.map +1 -0
- package/dist/plugins/kysely.d.ts +72 -0
- package/dist/plugins/kysely.d.ts.map +1 -0
- package/dist/plugins/kysely.js +906 -0
- package/dist/plugins/kysely.js.map +1 -0
- package/dist/plugins/sql-queries.d.ts +55 -11
- package/dist/plugins/sql-queries.d.ts.map +1 -1
- package/dist/plugins/sql-queries.js +467 -218
- package/dist/plugins/sql-queries.js.map +1 -1
- package/dist/plugins/types.d.ts +20 -14
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/plugins/types.js +90 -112
- package/dist/plugins/types.js.map +1 -1
- package/dist/plugins/valibot.d.ts +45 -0
- package/dist/plugins/valibot.d.ts.map +1 -0
- package/dist/plugins/valibot.js +422 -0
- package/dist/plugins/valibot.js.map +1 -0
- package/dist/plugins/zod.d.ts +27 -14
- package/dist/plugins/zod.d.ts.map +1 -1
- package/dist/plugins/zod.js +231 -166
- package/dist/plugins/zod.js.map +1 -1
- package/dist/services/artifact-store.d.ts +11 -1
- package/dist/services/artifact-store.d.ts.map +1 -1
- package/dist/services/artifact-store.js +9 -0
- package/dist/services/artifact-store.js.map +1 -1
- package/dist/services/core-providers.d.ts +15 -0
- package/dist/services/core-providers.d.ts.map +1 -0
- package/dist/services/core-providers.js +23 -0
- package/dist/services/core-providers.js.map +1 -0
- package/dist/services/emissions.d.ts +14 -0
- package/dist/services/emissions.d.ts.map +1 -1
- package/dist/services/emissions.js +86 -47
- package/dist/services/emissions.js.map +1 -1
- package/dist/services/execution.d.ts +35 -0
- package/dist/services/execution.d.ts.map +1 -0
- package/dist/services/execution.js +86 -0
- package/dist/services/execution.js.map +1 -0
- package/dist/services/file-builder.d.ts +4 -0
- package/dist/services/file-builder.d.ts.map +1 -1
- package/dist/services/file-builder.js.map +1 -1
- package/dist/services/inflection.d.ts +2 -2
- package/dist/services/inflection.d.ts.map +1 -1
- package/dist/services/inflection.js +4 -4
- package/dist/services/inflection.js.map +1 -1
- package/dist/services/ir-builder.d.ts.map +1 -1
- package/dist/services/ir-builder.js +10 -3
- package/dist/services/ir-builder.js.map +1 -1
- package/dist/services/pg-types.d.ts +31 -0
- package/dist/services/pg-types.d.ts.map +1 -1
- package/dist/services/pg-types.js +24 -0
- package/dist/services/pg-types.js.map +1 -1
- package/dist/services/plugin-runner.d.ts +27 -37
- package/dist/services/plugin-runner.d.ts.map +1 -1
- package/dist/services/plugin-runner.js +73 -171
- package/dist/services/plugin-runner.js.map +1 -1
- package/dist/services/plugin.d.ts +349 -217
- package/dist/services/plugin.d.ts.map +1 -1
- package/dist/services/plugin.js +182 -130
- package/dist/services/plugin.js.map +1 -1
- package/dist/services/resolution.d.ts +38 -0
- package/dist/services/resolution.d.ts.map +1 -0
- package/dist/services/resolution.js +242 -0
- package/dist/services/resolution.js.map +1 -0
- package/dist/services/service-registry.d.ts +74 -0
- package/dist/services/service-registry.d.ts.map +1 -0
- package/dist/services/service-registry.js +61 -0
- package/dist/services/service-registry.js.map +1 -0
- package/dist/services/symbols.d.ts +59 -0
- package/dist/services/symbols.d.ts.map +1 -1
- package/dist/services/symbols.js +16 -0
- package/dist/services/symbols.js.map +1 -1
- package/dist/testing.d.ts +4 -25
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +2 -23
- package/dist/testing.js.map +1 -1
- package/package.json +1 -1
- package/dist/plugins/effect-model.d.ts +0 -17
- package/dist/plugins/effect-model.d.ts.map +0 -1
- package/dist/plugins/effect-model.js +0 -409
- package/dist/plugins/effect-model.js.map +0 -1
- package/dist/plugins/kysely-queries.d.ts +0 -66
- package/dist/plugins/kysely-queries.d.ts.map +0 -1
- package/dist/plugins/kysely-queries.js +0 -951
- package/dist/plugins/kysely-queries.js.map +0 -1
- package/dist/plugins/kysely-types.d.ts +0 -35
- package/dist/plugins/kysely-types.d.ts.map +0 -1
- package/dist/plugins/kysely-types.js +0 -601
- 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
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/services/symbols.ts"],"names":[],"mappings":"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"}
|
package/dist/services/symbols.js
CHANGED
|
@@ -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":"AAAA
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/services/symbols.ts"],"names":[],"mappings":"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"}
|
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
|
|
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("./
|
|
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("./
|
|
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 {
|
|
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
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|