@pogodisco/zephyr 1.5.19 → 1.5.20

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.
@@ -4,7 +4,7 @@ type UnionToIntersection<U> = (U extends any ? (x: U) => any : never) extends (x
4
4
  type EnsureWorkflowShape<T> = {
5
5
  [K in keyof T]: T[K] extends WorkflowDef<any, any, any, any, any> ? T[K] : never;
6
6
  };
7
- type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never ? {} : Simplify<EnsureWorkflowShape<UnionToIntersection<{
7
+ export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never ? {} : Simplify<EnsureWorkflowShape<UnionToIntersection<{
8
8
  [D in keyof Deps & string]: {
9
9
  [K in keyof Deps[D]["workflows"] & string as `${D}.${K}`]: Deps[D]["workflows"][K];
10
10
  };
@@ -21,14 +21,14 @@ type ServicesFromDepsRecursive<Deps extends ModuleMap> = [keyof Deps] extends [
21
21
  export type WorkflowInput<W> = W extends WorkflowDef<any, infer I, any, any, any> ? I : never;
22
22
  export type WorkflowResults<W> = W extends WorkflowDef<any, any, infer R, any, any> ? R : never;
23
23
  export type WorkflowOutput<W> = W extends WorkflowDef<any, any, any, any, infer O> ? O : never;
24
- export type Module<Reg extends ActionRegistry, S extends ServiceRegistry, Own extends ModuleShape, Deps extends ModuleMap, Public extends ModuleShape = Own> = {
24
+ export type Module<Reg extends ActionRegistry, S extends ServiceRegistry, Own extends ModuleShape, Deps extends ModuleMap> = {
25
25
  workflows: Own;
26
26
  __getExecutor: () => Executor;
27
27
  createRuntime: (config: {
28
28
  services: FinalServices<S, Deps>;
29
29
  }) => {
30
- run: <K extends keyof Public>(workflow: K, input: WorkflowInput<Public[K]>, observers?: WorkflowObserver<Reg>[]) => Promise<{
31
- output: WorkflowOutput<Public[K]>;
30
+ run: <K extends keyof Own>(workflow: K, input: WorkflowInput<Own[K]>, observers?: WorkflowObserver<Reg>[]) => Promise<{
31
+ output: WorkflowOutput<Own[K]>;
32
32
  extras: Record<string, any>;
33
33
  }>;
34
34
  getServices: () => FinalServices<S, Deps>;
@@ -46,6 +46,6 @@ export declare function createModuleFactory<S extends ServiceRegistry>(): <Reg e
46
46
  use?: Use;
47
47
  expose?: Expose;
48
48
  define: (ctx: ModuleContext<typeof config.actionRegistry, DepWorkflows<Use>, S>) => Own;
49
- }) => Module<Reg, S, Own, Use, ExposedWorkflows<Own, Use, Expose>>;
49
+ }) => Module<Reg, S, ExposedWorkflows<Own, Use, Expose>, Use>;
50
50
  export {};
51
51
  //# sourceMappingURL=workflow-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-module.d.ts","sourceRoot":"","sources":["../src/workflow-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-module.d.ts","sourceRoot":"","sources":["../src/workflow-module.ts"],"names":[],"mappings":"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"}
@@ -1,113 +1,3 @@
1
- import { createWorkflow, } from "./workflow-composer.js";
2
- import { executeWorkflow } from "./workflow-executor.js";
3
- function createModule(config) {
4
- const deps = (config.use ?? {});
5
- const wf = createWorkflow();
6
- const own = config.define({
7
- wf,
8
- services: {},
9
- });
10
- // function buildWorkflowMap(): WorkflowRegistry<Own, Use> {
11
- // const depWFs = Object.fromEntries(
12
- // Object.entries(deps).flatMap(([name, mod]) =>
13
- // Object.entries(mod.workflows).map(([k, wf]) => [`${name}.${k}`, wf]),
14
- // ),
15
- // );
16
- //
17
- // const internal = { ...own, ...depWFs } as WorkflowRegistry<Own, Use>;
18
- //
19
- // const publicMap = own;
20
- // return { internal, publicMap };
21
- // }
22
- function buildWorkflowMap() {
23
- const depWFs = Object.fromEntries(Object.entries(deps).flatMap(([name, mod]) => Object.entries(mod.workflows).map(([k, wf]) => [`${name}.${k}`, wf])));
24
- // const internal = { ...own, ...depWFs } as WorkflowRegistry<Own, Use>;
25
- // const exposed = Object.fromEntries(
26
- // Object.entries(config.expose ?? {}).map(([alias, key]) => [
27
- // alias,
28
- // internal[key], // reuse already resolved workflow
29
- // ]),
30
- // );
31
- //
32
- const internalBase = { ...own, ...depWFs };
33
- const exposed = {};
34
- if (config.expose) {
35
- for (const alias in config.expose) {
36
- const key = config.expose[alias];
37
- exposed[alias] = internalBase[key];
38
- }
39
- }
40
- const internal = {
41
- ...internalBase,
42
- ...exposed,
43
- };
44
- // if (config.expose) {
45
- // for (const alias in config.expose) {
46
- // const key = config.expose[alias];
47
- // exposed[alias] = internal[key];
48
- // }
49
- // }
50
- const publicMap = { ...own, ...exposed };
51
- return { internal, publicMap };
52
- }
53
- const { internal, publicMap } = buildWorkflowMap();
54
- const depsExecutors = Object.fromEntries(Object.entries(deps).map(([name, mod]) => [name, mod.__getExecutor()]));
55
- const executor = {
56
- run(wfId, input, services, observers = []) {
57
- if (!(wfId in publicMap)) {
58
- throw new Error(`Workflow not in public: ${wfId}`);
59
- }
60
- const workflow = internal[wfId];
61
- if (!workflow) {
62
- throw new Error(`Workflow not found: ${String(wfId)}`);
63
- }
64
- return executeWorkflow({
65
- workflow,
66
- actionRegistry: config.actionRegistry,
67
- depsExecutors,
68
- input,
69
- services,
70
- observers,
71
- });
72
- },
73
- };
74
- return {
75
- workflows: own,
76
- __getExecutor: () => executor,
77
- createRuntime({ services }) {
78
- let runtimeActions = config.actionRegistry;
79
- // const runtimeService = createServiceRegisty(services)
80
- return {
81
- run: async (
82
- // run: async <K extends keyof WorkflowRegistry<Own, Use>>(
83
- workflowId, input,
84
- // input: WorkflowInput<WorkflowRegistry<Own, Use>[K]>,
85
- // input: WorkflowInput<WorkflowRegistry<Own, Use>[K]>,
86
- observers = []) => {
87
- return executor.run(workflowId, input, services, observers);
88
- },
89
- // make it same, practically nothing changes but naming, and what context holds
90
- getServices: () => ({ ...services }),
91
- setActionRegistry(reg) {
92
- runtimeActions = reg;
93
- // ⚠️ optional: if you REALLY want override, you'd need:
94
- // executor.actions = reg
95
- // but better keep actions immutable
96
- },
97
- };
98
- },
99
- };
100
- }
101
- /* ------------------------------------------------ */
102
- /* FACTORY (FIXED) */
103
- /* ------------------------------------------------ */
104
- export function createModuleFactory() {
105
- return function (config) {
106
- return createModule(config);
107
- };
108
- }
109
- //
110
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
111
1
  // import {
112
2
  // ActionRegistry,
113
3
  // ServiceRegistry,
@@ -131,112 +21,44 @@ export function createModuleFactory() {
131
21
  // /* WORKFLOW REGISTRY TYPES */
132
22
  // /* ------------------------------------------------ */
133
23
  //
134
- // export type EnsureWorkflowShape<T> = {
24
+ // type EnsureWorkflowShape<T> = {
135
25
  // [K in keyof T]: T[K] extends WorkflowDef<any, any, any, any, any>
136
26
  // ? T[K]
137
27
  // : never;
138
28
  // };
139
29
  //
140
- // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
141
- // // ? {}
142
- // // : Simplify<
143
- // // EnsureWorkflowShape<
144
- // // UnionToIntersection<
145
- // // {
146
- // // [D in keyof Deps & string]: {
147
- // // [K in keyof Deps[D]["__public"] &
148
- // // string as `${D}.${K}`]: Deps[D]["__public"][K];
149
- // // };
150
- // // }[keyof Deps & string]
151
- // // >
152
- // // >
153
- // // >;
154
- //
155
- // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
156
- // // ? {}
157
- // // : Simplify<
158
- // // EnsureWorkflowShape<
159
- // // UnionToIntersection<
160
- // // {
161
- // // [D in keyof Deps & string]: {
162
- // // [K in keyof Deps[D]["__public"] &
163
- // // string as `${D}.${K}`]: Deps[D]["__public"][K];
164
- // // };
165
- // // }[keyof Deps & string]
166
- // // >
167
- // // >
168
- // // >;
169
- // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
170
- // // ? {}
171
- // // : Simplify<{
172
- // // [D in keyof Deps as `${D & string}.${keyof Deps[D]["__public"] & string}`]: Deps[D]["__public"][keyof Deps[D]["__public"]];
173
- // // }>;
174
- // //
175
- //
176
- // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
177
- // // ? {}
178
- // // : Simplify<
179
- // // // Just create the object directly without intersection
180
- // // Omit<
181
- // // {
182
- // // [D in keyof Deps & string]: {
183
- // // [K in keyof Deps[D]["__public"] &
184
- // // string as `${D}.${K}`]: Deps[D]["__public"][K];
185
- // // };
186
- // // }[keyof Deps & string],
187
- // // never
188
- // // >
189
- // // >;
190
- //
191
- // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
192
- // // ? {}
193
- // // : Simplify<
194
- // // EnsureWorkflowShape<
195
- // // {
196
- // // [D in keyof Deps & string]: {
197
- // // [K in keyof Deps[D]["__public"] &
198
- // // string as `${D}.${K}`]: Deps[D]["__public"][K];
199
- // // };
200
- // // }[keyof Deps & string]
201
- // // >
202
- // // >;
203
- //
204
- // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
30
+ // type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
205
31
  // ? {}
206
32
  // : Simplify<
207
33
  // EnsureWorkflowShape<
208
- // // Just use Omit + intersection - it's the same as UnionToIntersection but TypeScript handles it better
209
- // {
210
- // [D in keyof Deps & string]: {
211
- // [K in keyof Deps[D]["__public"] &
212
- // string as `${D}.${K}`]: Deps[D]["__public"][K];
213
- // };
214
- // }[keyof Deps & string] extends infer U
215
- // ? Omit<U, never>
216
- // : never
34
+ // UnionToIntersection<
35
+ // {
36
+ // [D in keyof Deps & string]: {
37
+ // [K in keyof Deps[D]["workflows"] &
38
+ // string as `${D}.${K}`]: Deps[D]["workflows"][K];
39
+ // };
40
+ // }[keyof Deps & string]
41
+ // >
217
42
  // >
218
43
  // >;
219
- // export type WorkflowRegistry<
220
- // Own extends ModuleShape,
221
- // Deps extends ModuleMap,
222
- // > = Own & DepWorkflows<Deps>;
44
+ //
45
+ // type WorkflowRegistry<Own extends ModuleShape, Deps extends ModuleMap> = Own &
46
+ // DepWorkflows<Deps>;
223
47
  //
224
48
  // /* ------------------------------------------------ */
225
49
  // /* MODULE TYPES */
226
50
  // /* ------------------------------------------------ */
227
51
  //
228
- // export type AnyWorkflow = WorkflowDef<any, any, any, any, any>;
229
- // export type ModuleShape = Record<string, AnyWorkflow>;
230
- // export type ModuleMap = Record<string, Module<any, any, any, any, any>>;
52
+ // type AnyWorkflow = WorkflowDef<any, any, any, any, any>;
53
+ // type ModuleShape = Record<string, AnyWorkflow>;
54
+ // type ModuleMap = Record<string, Module<any, any, any, any>>;
231
55
  //
232
- // export type FinalServices<
233
- // S extends ServiceRegistry,
234
- // Deps extends ModuleMap,
235
- // > = S & ServicesFromDepsRecursive<Deps>;
56
+ // type FinalServices<S extends ServiceRegistry, Deps extends ModuleMap> = S &
57
+ // ServicesFromDepsRecursive<Deps>;
236
58
  //
237
- // export type ServicesFromDepsRecursive<Deps extends ModuleMap> = [
238
- // keyof Deps,
239
- // ] extends [never]
59
+ // type ServicesFromDepsRecursive<Deps extends ModuleMap> = [keyof Deps] extends [
60
+ // never,
61
+ // ]
240
62
  // ? {} // no deps
241
63
  // : UnionToIntersection<
242
64
  // {
@@ -244,8 +66,7 @@ export function createModuleFactory() {
244
66
  // any,
245
67
  // infer S,
246
68
  // any,
247
- // infer SubDeps,
248
- // any
69
+ // infer SubDeps
249
70
  // >
250
71
  // ? S & ServicesFromDepsRecursive<SubDeps>
251
72
  // : never;
@@ -274,19 +95,19 @@ export function createModuleFactory() {
274
95
  // S extends ServiceRegistry,
275
96
  // Own extends ModuleShape,
276
97
  // Deps extends ModuleMap,
277
- // Public extends ModuleShape,
98
+ // Public extends ModuleShape = Own,
278
99
  // > = {
279
100
  // workflows: Own;
280
- //
281
- // __public: Public;
282
101
  // __getExecutor: () => Executor;
283
102
  //
284
103
  // createRuntime: (config: { services: FinalServices<S, Deps> }) => {
285
104
  // run: <K extends keyof Public>(
105
+ // // run: <K extends keyof WorkflowRegistry<Own, Deps>>(
286
106
  // workflow: K,
287
107
  // input: WorkflowInput<Public[K]>,
288
108
  // observers?: WorkflowObserver<Reg>[],
289
109
  // ) => Promise<{
110
+ // // results: WorkflowResults<WorkflowRegistry<Own, Deps>[K]>;
290
111
  // output: WorkflowOutput<Public[K]>;
291
112
  // extras: Record<string, any>;
292
113
  // }>;
@@ -299,7 +120,7 @@ export function createModuleFactory() {
299
120
  // /* MODULE CONTEXT (FIXED) */
300
121
  // /* ------------------------------------------------ */
301
122
  //
302
- // export type ModuleContext<
123
+ // type ModuleContext<
303
124
  // Reg extends ActionRegistry,
304
125
  // WFReg extends Record<string, WorkflowDef<any, any, any, any, any>>,
305
126
  // S extends ServiceRegistry,
@@ -308,7 +129,7 @@ export function createModuleFactory() {
308
129
  // services: S;
309
130
  // };
310
131
  //
311
- // export type ExposedWorkflows<
132
+ // type ExposedWorkflows<
312
133
  // Own extends ModuleShape,
313
134
  // Use extends ModuleMap,
314
135
  // Expose extends Record<string, keyof DepWorkflows<Use>> | undefined,
@@ -329,36 +150,45 @@ export function createModuleFactory() {
329
150
  // use?: Use;
330
151
  // expose?: Expose;
331
152
  // define: (ctx: ModuleContext<Reg, DepWorkflows<Use>, S>) => Own;
332
- // }): Module<Reg, S, Own, Use, ExposedWorkflows<Own, Use, Expose> & ModuleShape> {
153
+ // }): Module<Reg, S, Own, Use, ExposedWorkflows<Own, Use, Expose>> {
333
154
  // const deps = (config.use ?? {}) as Use;
334
155
  //
335
- // type WFReg = DepWorkflows<Use>;
336
- //
337
- // const wf = createWorkflow<Reg, WFReg, S>();
156
+ // const wf = createWorkflow<Reg, DepWorkflows<Use>, S>();
338
157
  //
339
158
  // const own = config.define({
340
159
  // wf,
341
160
  // services: {} as S,
342
161
  // });
343
162
  //
344
- // function mergePublic<
345
- // Own extends ModuleShape,
346
- // Use extends ModuleMap,
347
- // Expose extends Record<string, keyof DepWorkflows<Use>> | undefined,
348
- // >(
349
- // own: Own,
350
- // exposed: Record<string, AnyWorkflow>,
351
- // ): ExposedWorkflows<Own, Use, Expose> {
352
- // return { ...own, ...exposed } as any;
353
- // }
163
+ // // function buildWorkflowMap(): WorkflowRegistry<Own, Use> {
164
+ // // const depWFs = Object.fromEntries(
165
+ // // Object.entries(deps).flatMap(([name, mod]) =>
166
+ // // Object.entries(mod.workflows).map(([k, wf]) => [`${name}.${k}`, wf]),
167
+ // // ),
168
+ // // );
169
+ // //
170
+ // // const internal = { ...own, ...depWFs } as WorkflowRegistry<Own, Use>;
171
+ // //
172
+ // // const publicMap = own;
173
+ // // return { internal, publicMap };
174
+ // // }
354
175
  //
355
176
  // function buildWorkflowMap() {
356
177
  // const depWFs = Object.fromEntries(
357
178
  // Object.entries(deps).flatMap(([name, mod]) =>
358
- // Object.entries(mod.__public).map(([k, wf]) => [`${name}.${k}`, wf]),
179
+ // Object.entries(mod.workflows).map(([k, wf]) => [`${name}.${k}`, wf]),
359
180
  // ),
360
181
  // );
361
182
  //
183
+ // // const internal = { ...own, ...depWFs } as WorkflowRegistry<Own, Use>;
184
+ //
185
+ // // const exposed = Object.fromEntries(
186
+ // // Object.entries(config.expose ?? {}).map(([alias, key]) => [
187
+ // // alias,
188
+ // // internal[key], // reuse already resolved workflow
189
+ // // ]),
190
+ // // );
191
+ // //
362
192
  // const internalBase = { ...own, ...depWFs } as WorkflowRegistry<Own, Use>;
363
193
  //
364
194
  // const exposed = {} as Record<string, AnyWorkflow>;
@@ -373,14 +203,18 @@ export function createModuleFactory() {
373
203
  // ...internalBase,
374
204
  // ...exposed,
375
205
  // } as WorkflowRegistry<Own, Use> & typeof exposed;
206
+ // // if (config.expose) {
207
+ // // for (const alias in config.expose) {
208
+ // // const key = config.expose[alias];
209
+ // // exposed[alias] = internal[key];
210
+ // // }
211
+ // // }
376
212
  //
377
- // // const publicMap = { ...own, ...exposed } as ExposedWorkflows<
378
- // // Own,
379
- // // Use,
380
- // // Expose
381
- // // >;
382
- //
383
- // const publicMap = mergePublic<Own, Use, Expose>(own, exposed);
213
+ // const publicMap = { ...own, ...exposed } as ExposedWorkflows<
214
+ // Own,
215
+ // Use,
216
+ // Expose
217
+ // >;
384
218
  // return { internal, publicMap };
385
219
  // }
386
220
  //
@@ -415,26 +249,31 @@ export function createModuleFactory() {
415
249
  //
416
250
  // return {
417
251
  // workflows: own,
418
- // __public: publicMap,
419
252
  // __getExecutor: () => executor,
420
253
  //
421
254
  // createRuntime({ services }) {
422
255
  // let runtimeActions = config.actionRegistry;
423
256
  //
257
+ // // const runtimeService = createServiceRegisty(services)
424
258
  // return {
425
259
  // run: async <K extends keyof typeof publicMap>(
260
+ // // run: async <K extends keyof WorkflowRegistry<Own, Use>>(
426
261
  // workflowId: K,
427
262
  // input: WorkflowInput<(typeof publicMap)[K]>,
428
- //
263
+ // // input: WorkflowInput<WorkflowRegistry<Own, Use>[K]>,
264
+ // // input: WorkflowInput<WorkflowRegistry<Own, Use>[K]>,
429
265
  // observers: WorkflowObserver<Reg>[] = [],
430
266
  // ) => {
431
267
  // return executor.run(workflowId as string, input, services, observers);
432
268
  // },
433
- //
269
+ // // make it same, practically nothing changes but naming, and what context holds
434
270
  // getServices: () => ({ ...services }) as FinalServices<S, Use>,
435
271
  //
436
272
  // setActionRegistry(reg: Reg) {
437
273
  // runtimeActions = reg;
274
+ // // ⚠️ optional: if you REALLY want override, you'd need:
275
+ // // executor.actions = reg
276
+ // // but better keep actions immutable
438
277
  // },
439
278
  // };
440
279
  // },
@@ -445,11 +284,14 @@ export function createModuleFactory() {
445
284
  // /* FACTORY (FIXED) */
446
285
  // /* ------------------------------------------------ */
447
286
  //
448
- // export function createModuleFactory<S extends ServiceRegistry>() {
287
+ // export function createModuleFactory<
288
+ // // Reg extends ActionRegistry,
289
+ // S extends ServiceRegistry,
290
+ // >() {
449
291
  // return function <
450
- // Reg extends ActionRegistry,
451
- // Use extends ModuleMap,
452
- // Own extends ModuleShape,
292
+ // Reg extends ActionRegistry = Record<string, any>,
293
+ // Use extends ModuleMap = {},
294
+ // Own extends ModuleShape = {},
453
295
  // Expose extends Record<string, keyof DepWorkflows<Use>> | undefined =
454
296
  // undefined,
455
297
  // >(config: {
@@ -463,9 +305,8 @@ export function createModuleFactory() {
463
305
  // return createModule<Reg, S, Use, Own, Expose>(config);
464
306
  // };
465
307
  // }
466
- // ////////////////////////////////////////////////////////////////////////////////////////////////////
467
- //
468
308
  //
309
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
469
310
  // import {
470
311
  // ActionRegistry,
471
312
  // ServiceRegistry,
@@ -480,55 +321,121 @@ export function createModuleFactory() {
480
321
  // WorkflowDef,
481
322
  // } from "./workflow-composer.js";
482
323
  // import { executeWorkflow } from "./workflow-executor.js";
483
- //
484
324
  // type UnionToIntersection<U> = (U extends any ? (x: U) => any : never) extends (
485
325
  // x: infer I,
486
326
  // ) => any
487
327
  // ? I
488
328
  // : never;
489
- //
490
329
  // /* ------------------------------------------------ */
491
330
  // /* WORKFLOW REGISTRY TYPES */
492
331
  // /* ------------------------------------------------ */
493
332
  //
494
- // type EnsureWorkflowShape<T> = {
333
+ // export type EnsureWorkflowShape<T> = {
495
334
  // [K in keyof T]: T[K] extends WorkflowDef<any, any, any, any, any>
496
335
  // ? T[K]
497
336
  // : never;
498
337
  // };
499
338
  //
500
- // type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
339
+ // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
340
+ // // ? {}
341
+ // // : Simplify<
342
+ // // EnsureWorkflowShape<
343
+ // // UnionToIntersection<
344
+ // // {
345
+ // // [D in keyof Deps & string]: {
346
+ // // [K in keyof Deps[D]["__public"] &
347
+ // // string as `${D}.${K}`]: Deps[D]["__public"][K];
348
+ // // };
349
+ // // }[keyof Deps & string]
350
+ // // >
351
+ // // >
352
+ // // >;
353
+ //
354
+ // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
355
+ // // ? {}
356
+ // // : Simplify<
357
+ // // EnsureWorkflowShape<
358
+ // // UnionToIntersection<
359
+ // // {
360
+ // // [D in keyof Deps & string]: {
361
+ // // [K in keyof Deps[D]["__public"] &
362
+ // // string as `${D}.${K}`]: Deps[D]["__public"][K];
363
+ // // };
364
+ // // }[keyof Deps & string]
365
+ // // >
366
+ // // >
367
+ // // >;
368
+ // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
369
+ // // ? {}
370
+ // // : Simplify<{
371
+ // // [D in keyof Deps as `${D & string}.${keyof Deps[D]["__public"] & string}`]: Deps[D]["__public"][keyof Deps[D]["__public"]];
372
+ // // }>;
373
+ // //
374
+ //
375
+ // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
376
+ // // ? {}
377
+ // // : Simplify<
378
+ // // // Just create the object directly without intersection
379
+ // // Omit<
380
+ // // {
381
+ // // [D in keyof Deps & string]: {
382
+ // // [K in keyof Deps[D]["__public"] &
383
+ // // string as `${D}.${K}`]: Deps[D]["__public"][K];
384
+ // // };
385
+ // // }[keyof Deps & string],
386
+ // // never
387
+ // // >
388
+ // // >;
389
+ //
390
+ // // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
391
+ // // ? {}
392
+ // // : Simplify<
393
+ // // EnsureWorkflowShape<
394
+ // // {
395
+ // // [D in keyof Deps & string]: {
396
+ // // [K in keyof Deps[D]["__public"] &
397
+ // // string as `${D}.${K}`]: Deps[D]["__public"][K];
398
+ // // };
399
+ // // }[keyof Deps & string]
400
+ // // >
401
+ // // >;
402
+ //
403
+ // export type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never
501
404
  // ? {}
502
405
  // : Simplify<
503
406
  // EnsureWorkflowShape<
504
- // UnionToIntersection<
505
- // {
506
- // [D in keyof Deps & string]: {
507
- // [K in keyof Deps[D]["workflows"] &
508
- // string as `${D}.${K}`]: Deps[D]["workflows"][K];
509
- // };
510
- // }[keyof Deps & string]
511
- // >
407
+ // // Just use Omit + intersection - it's the same as UnionToIntersection but TypeScript handles it better
408
+ // {
409
+ // [D in keyof Deps & string]: {
410
+ // [K in keyof Deps[D]["__public"] &
411
+ // string as `${D}.${K}`]: Deps[D]["__public"][K];
412
+ // };
413
+ // }[keyof Deps & string] extends infer U
414
+ // ? Omit<U, never>
415
+ // : never
512
416
  // >
513
417
  // >;
514
- //
515
- // type WorkflowRegistry<Own extends ModuleShape, Deps extends ModuleMap> = Own &
516
- // DepWorkflows<Deps>;
418
+ // export type WorkflowRegistry<
419
+ // Own extends ModuleShape,
420
+ // Deps extends ModuleMap,
421
+ // > = Own & DepWorkflows<Deps>;
517
422
  //
518
423
  // /* ------------------------------------------------ */
519
424
  // /* MODULE TYPES */
520
425
  // /* ------------------------------------------------ */
521
426
  //
522
- // type AnyWorkflow = WorkflowDef<any, any, any, any, any>;
523
- // type ModuleShape = Record<string, AnyWorkflow>;
524
- // type ModuleMap = Record<string, Module<any, any, any, any>>;
427
+ // export type AnyWorkflow = WorkflowDef<any, any, any, any, any>;
428
+ // export type ModuleShape = Record<string, AnyWorkflow>;
429
+ // export type ModuleMap = Record<string, Module<any, any, any, any, any>>;
525
430
  //
526
- // type FinalServices<S extends ServiceRegistry, Deps extends ModuleMap> = S &
527
- // ServicesFromDepsRecursive<Deps>;
431
+ // export type FinalServices<
432
+ // S extends ServiceRegistry,
433
+ // Deps extends ModuleMap,
434
+ // > = S & ServicesFromDepsRecursive<Deps>;
528
435
  //
529
- // type ServicesFromDepsRecursive<Deps extends ModuleMap> = [keyof Deps] extends [
530
- // never,
531
- // ]
436
+ // export type ServicesFromDepsRecursive<Deps extends ModuleMap> = [
437
+ // keyof Deps,
438
+ // ] extends [never]
532
439
  // ? {} // no deps
533
440
  // : UnionToIntersection<
534
441
  // {
@@ -536,7 +443,8 @@ export function createModuleFactory() {
536
443
  // any,
537
444
  // infer S,
538
445
  // any,
539
- // infer SubDeps
446
+ // infer SubDeps,
447
+ // any
540
448
  // >
541
449
  // ? S & ServicesFromDepsRecursive<SubDeps>
542
450
  // : never;
@@ -565,17 +473,20 @@ export function createModuleFactory() {
565
473
  // S extends ServiceRegistry,
566
474
  // Own extends ModuleShape,
567
475
  // Deps extends ModuleMap,
476
+ // Public extends ModuleShape,
568
477
  // > = {
569
478
  // workflows: Own;
479
+ //
480
+ // __public: Public;
570
481
  // __getExecutor: () => Executor;
571
482
  //
572
483
  // createRuntime: (config: { services: FinalServices<S, Deps> }) => {
573
- // run: <K extends keyof Own>(
484
+ // run: <K extends keyof Public>(
574
485
  // workflow: K,
575
- // input: WorkflowInput<Own[K]>,
486
+ // input: WorkflowInput<Public[K]>,
576
487
  // observers?: WorkflowObserver<Reg>[],
577
488
  // ) => Promise<{
578
- // output: WorkflowOutput<Own[K]>;
489
+ // output: WorkflowOutput<Public[K]>;
579
490
  // extras: Record<string, any>;
580
491
  // }>;
581
492
  //
@@ -587,7 +498,7 @@ export function createModuleFactory() {
587
498
  // /* MODULE CONTEXT (FIXED) */
588
499
  // /* ------------------------------------------------ */
589
500
  //
590
- // type ModuleContext<
501
+ // export type ModuleContext<
591
502
  // Reg extends ActionRegistry,
592
503
  // WFReg extends Record<string, WorkflowDef<any, any, any, any, any>>,
593
504
  // S extends ServiceRegistry,
@@ -596,7 +507,7 @@ export function createModuleFactory() {
596
507
  // services: S;
597
508
  // };
598
509
  //
599
- // type ExposedWorkflows<
510
+ // export type ExposedWorkflows<
600
511
  // Own extends ModuleShape,
601
512
  // Use extends ModuleMap,
602
513
  // Expose extends Record<string, keyof DepWorkflows<Use>> | undefined,
@@ -606,7 +517,6 @@ export function createModuleFactory() {
606
517
  // [K in keyof Expose]: DepWorkflows<Use>[Expose[K]];
607
518
  // }
608
519
  // : {});
609
- //
610
520
  // function createModule<
611
521
  // Reg extends ActionRegistry,
612
522
  // S extends ServiceRegistry,
@@ -618,47 +528,58 @@ export function createModuleFactory() {
618
528
  // use?: Use;
619
529
  // expose?: Expose;
620
530
  // define: (ctx: ModuleContext<Reg, DepWorkflows<Use>, S>) => Own;
621
- // }): Module<Reg, S, ExposedWorkflows<Own, Use, Expose>, Use> {
531
+ // }): Module<Reg, S, Own, Use, ExposedWorkflows<Own, Use, Expose> & ModuleShape> {
622
532
  // const deps = (config.use ?? {}) as Use;
623
533
  //
624
- // const wf = createWorkflow<Reg, DepWorkflows<Use>, S>();
534
+ // type WFReg = DepWorkflows<Use>;
535
+ //
536
+ // const wf = createWorkflow<Reg, WFReg, S>();
625
537
  //
626
538
  // const own = config.define({
627
539
  // wf,
628
540
  // services: {} as S,
629
541
  // });
630
542
  //
543
+ // function mergePublic<
544
+ // Own extends ModuleShape,
545
+ // Use extends ModuleMap,
546
+ // Expose extends Record<string, keyof DepWorkflows<Use>> | undefined,
547
+ // >(
548
+ // own: Own,
549
+ // exposed: Record<string, AnyWorkflow>,
550
+ // ): ExposedWorkflows<Own, Use, Expose> {
551
+ // return { ...own, ...exposed } as any;
552
+ // }
553
+ //
631
554
  // function buildWorkflowMap() {
632
- // // Get all workflows from dependencies (prefixed)
633
555
  // const depWFs = Object.fromEntries(
634
556
  // Object.entries(deps).flatMap(([name, mod]) =>
635
- // Object.entries(mod.workflows).map(([k, wf]) => [`${name}.${k}`, wf]),
557
+ // Object.entries(mod.__public).map(([k, wf]) => [`${name}.${k}`, wf]),
636
558
  // ),
637
559
  // );
638
560
  //
639
561
  // const internalBase = { ...own, ...depWFs } as WorkflowRegistry<Own, Use>;
640
562
  //
641
- // // Build exposed workflows by looking up from internalBase
642
563
  // const exposed = {} as Record<string, AnyWorkflow>;
564
+ //
643
565
  // if (config.expose) {
644
566
  // for (const alias in config.expose) {
645
- // const key = config.expose[alias] as string;
567
+ // const key = config.expose[alias];
646
568
  // exposed[alias] = internalBase[key];
647
569
  // }
648
570
  // }
649
- //
650
- // // Merge exposed into public workflows
651
- // const publicMap = { ...own, ...exposed } as ExposedWorkflows<
652
- // Own,
653
- // Use,
654
- // Expose
655
- // >;
656
- //
657
571
  // const internal = {
658
572
  // ...internalBase,
659
573
  // ...exposed,
660
574
  // } as WorkflowRegistry<Own, Use> & typeof exposed;
661
575
  //
576
+ // // const publicMap = { ...own, ...exposed } as ExposedWorkflows<
577
+ // // Own,
578
+ // // Use,
579
+ // // Expose
580
+ // // >;
581
+ //
582
+ // const publicMap = mergePublic<Own, Use, Expose>(own, exposed);
662
583
  // return { internal, publicMap };
663
584
  // }
664
585
  //
@@ -692,20 +613,28 @@ export function createModuleFactory() {
692
613
  // };
693
614
  //
694
615
  // return {
695
- // workflows: publicMap, // ← KEY CHANGE: return publicMap (with exposed merged) as workflows
616
+ // workflows: own,
617
+ // __public: publicMap,
696
618
  // __getExecutor: () => executor,
697
619
  //
698
620
  // createRuntime({ services }) {
621
+ // let runtimeActions = config.actionRegistry;
622
+ //
699
623
  // return {
700
624
  // run: async <K extends keyof typeof publicMap>(
701
625
  // workflowId: K,
702
626
  // input: WorkflowInput<(typeof publicMap)[K]>,
627
+ //
703
628
  // observers: WorkflowObserver<Reg>[] = [],
704
629
  // ) => {
705
630
  // return executor.run(workflowId as string, input, services, observers);
706
631
  // },
707
632
  //
708
633
  // getServices: () => ({ ...services }) as FinalServices<S, Use>,
634
+ //
635
+ // setActionRegistry(reg: Reg) {
636
+ // runtimeActions = reg;
637
+ // },
709
638
  // };
710
639
  // },
711
640
  // };
@@ -717,9 +646,9 @@ export function createModuleFactory() {
717
646
  //
718
647
  // export function createModuleFactory<S extends ServiceRegistry>() {
719
648
  // return function <
720
- // Reg extends ActionRegistry = Record<string, any>,
721
- // Use extends ModuleMap = {},
722
- // Own extends ModuleShape = {},
649
+ // Reg extends ActionRegistry,
650
+ // Use extends ModuleMap,
651
+ // Own extends ModuleShape,
723
652
  // Expose extends Record<string, keyof DepWorkflows<Use>> | undefined =
724
653
  // undefined,
725
654
  // >(config: {
@@ -729,7 +658,81 @@ export function createModuleFactory() {
729
658
  // define: (
730
659
  // ctx: ModuleContext<typeof config.actionRegistry, DepWorkflows<Use>, S>,
731
660
  // ) => Own;
732
- // }): Module<Reg, S, ExposedWorkflows<Own, Use, Expose>, Use> {
661
+ // }): Module<Reg, S, Own, Use, ExposedWorkflows<Own, Use, Expose>> {
733
662
  // return createModule<Reg, S, Use, Own, Expose>(config);
734
663
  // };
735
664
  // }
665
+ // ////////////////////////////////////////////////////////////////////////////////////////////////////
666
+ //
667
+ //
668
+ import { createWorkflow, } from "./workflow-composer.js";
669
+ import { executeWorkflow } from "./workflow-executor.js";
670
+ function createModule(config) {
671
+ const deps = (config.use ?? {});
672
+ const wf = createWorkflow();
673
+ const own = config.define({
674
+ wf,
675
+ services: {},
676
+ });
677
+ function buildWorkflowMap() {
678
+ // Get all workflows from dependencies (prefixed)
679
+ const depWFs = Object.fromEntries(Object.entries(deps).flatMap(([name, mod]) => Object.entries(mod.workflows).map(([k, wf]) => [`${name}.${k}`, wf])));
680
+ const internalBase = { ...own, ...depWFs };
681
+ // Build exposed workflows by looking up from internalBase
682
+ const exposed = {};
683
+ if (config.expose) {
684
+ for (const alias in config.expose) {
685
+ const key = config.expose[alias];
686
+ exposed[alias] = internalBase[key];
687
+ }
688
+ }
689
+ // Merge exposed into public workflows
690
+ const publicMap = { ...own, ...exposed };
691
+ const internal = {
692
+ ...internalBase,
693
+ ...exposed,
694
+ };
695
+ return { internal, publicMap };
696
+ }
697
+ const { internal, publicMap } = buildWorkflowMap();
698
+ const depsExecutors = Object.fromEntries(Object.entries(deps).map(([name, mod]) => [name, mod.__getExecutor()]));
699
+ const executor = {
700
+ run(wfId, input, services, observers = []) {
701
+ if (!(wfId in publicMap)) {
702
+ throw new Error(`Workflow not in public: ${wfId}`);
703
+ }
704
+ const workflow = internal[wfId];
705
+ if (!workflow) {
706
+ throw new Error(`Workflow not found: ${String(wfId)}`);
707
+ }
708
+ return executeWorkflow({
709
+ workflow,
710
+ actionRegistry: config.actionRegistry,
711
+ depsExecutors,
712
+ input,
713
+ services,
714
+ observers,
715
+ });
716
+ },
717
+ };
718
+ return {
719
+ workflows: publicMap, // ← KEY CHANGE: return publicMap (with exposed merged) as workflows
720
+ __getExecutor: () => executor,
721
+ createRuntime({ services }) {
722
+ return {
723
+ run: async (workflowId, input, observers = []) => {
724
+ return executor.run(workflowId, input, services, observers);
725
+ },
726
+ getServices: () => ({ ...services }),
727
+ };
728
+ },
729
+ };
730
+ }
731
+ /* ------------------------------------------------ */
732
+ /* FACTORY (FIXED) */
733
+ /* ------------------------------------------------ */
734
+ export function createModuleFactory() {
735
+ return function (config) {
736
+ return createModule(config);
737
+ };
738
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pogodisco/zephyr",
3
- "version": "1.5.19",
3
+ "version": "1.5.20",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },