@pogodisco/zephyr 1.5.17 → 1.5.18
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/utils.d.ts +2 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/workflow-module.d.ts +18 -20
- package/dist/workflow-module.d.ts.map +1 -1
- package/dist/workflow-module.js +365 -16
- package/package.json +1 -1
package/dist/utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Module } from "./workflow-module.js";
|
|
2
2
|
export declare function generateWorkflowId(name: string): string;
|
|
3
|
-
export declare function exposeAll<Name extends string, M extends Module<any, any, any, any
|
|
4
|
-
export declare function exposeAllAs<Name extends string, M extends Module<any, any, any, any
|
|
3
|
+
export declare function exposeAll<Name extends string, M extends Module<any, any, any, any>>(name: Name, mod: M): Record<`${Name}.${keyof M["workflows"] & string}`, `${Name}.${keyof M["workflows"] & string}`>;
|
|
4
|
+
export declare function exposeAllAs<Name extends string, M extends Module<any, any, any, any>>(name: Name, mod: M): Record<keyof M["workflows"] & string, `${Name}.${keyof M["workflows"] & string}`>;
|
|
5
5
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,UAI9C;AAED,wBAAgB,SAAS,CACvB,IAAI,SAAS,MAAM,EACnB,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,UAI9C;AAED,wBAAgB,SAAS,CACvB,IAAI,SAAS,MAAM,EACnB,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACpC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,kGAWnB;AAED,wBAAgB,WAAW,CACzB,IAAI,SAAS,MAAM,EACnB,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACpC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,qFAUnB"}
|
|
@@ -1,53 +1,51 @@
|
|
|
1
1
|
import { ActionRegistry, ServiceRegistry, Executor, Simplify, WorkflowObserver } from "./types.js";
|
|
2
2
|
import { createWorkflow, WorkflowDef } from "./workflow-composer.js";
|
|
3
3
|
type UnionToIntersection<U> = (U extends any ? (x: U) => any : never) extends (x: infer I) => any ? I : never;
|
|
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
|
-
|
|
7
|
+
type DepWorkflows<Deps extends ModuleMap> = keyof Deps extends never ? {} : Simplify<EnsureWorkflowShape<UnionToIntersection<{
|
|
8
8
|
[D in keyof Deps & string]: {
|
|
9
|
-
[K in keyof Deps[D]["
|
|
9
|
+
[K in keyof Deps[D]["workflows"] & string as `${D}.${K}`]: Deps[D]["workflows"][K];
|
|
10
10
|
};
|
|
11
11
|
}[keyof Deps & string]>>>;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
]
|
|
20
|
-
[K in keyof Deps]: Deps[K] extends Module<any, infer S, any, infer SubDeps, any> ? S & ServicesFromDepsRecursive<SubDeps> : never;
|
|
12
|
+
type AnyWorkflow = WorkflowDef<any, any, any, any, any>;
|
|
13
|
+
type ModuleShape = Record<string, AnyWorkflow>;
|
|
14
|
+
type ModuleMap = Record<string, Module<any, any, any, any>>;
|
|
15
|
+
type FinalServices<S extends ServiceRegistry, Deps extends ModuleMap> = S & ServicesFromDepsRecursive<Deps>;
|
|
16
|
+
type ServicesFromDepsRecursive<Deps extends ModuleMap> = [keyof Deps] extends [
|
|
17
|
+
never
|
|
18
|
+
] ? {} : UnionToIntersection<{
|
|
19
|
+
[K in keyof Deps]: Deps[K] extends Module<any, infer S, any, infer SubDeps> ? S & ServicesFromDepsRecursive<SubDeps> : never;
|
|
21
20
|
}[keyof Deps]>;
|
|
22
21
|
export type WorkflowInput<W> = W extends WorkflowDef<any, infer I, any, any, any> ? I : never;
|
|
23
22
|
export type WorkflowResults<W> = W extends WorkflowDef<any, any, infer R, any, any> ? R : never;
|
|
24
23
|
export type WorkflowOutput<W> = W extends WorkflowDef<any, any, any, any, infer O> ? O : never;
|
|
25
|
-
export type Module<Reg extends ActionRegistry, S extends ServiceRegistry, Own extends ModuleShape, Deps extends ModuleMap
|
|
24
|
+
export type Module<Reg extends ActionRegistry, S extends ServiceRegistry, Own extends ModuleShape, Deps extends ModuleMap> = {
|
|
26
25
|
workflows: Own;
|
|
27
|
-
__public: Public;
|
|
28
26
|
__getExecutor: () => Executor;
|
|
29
27
|
createRuntime: (config: {
|
|
30
28
|
services: FinalServices<S, Deps>;
|
|
31
29
|
}) => {
|
|
32
|
-
run: <K extends keyof
|
|
33
|
-
output: WorkflowOutput<
|
|
30
|
+
run: <K extends keyof Own>(workflow: K, input: WorkflowInput<Own[K]>, observers?: WorkflowObserver<Reg>[]) => Promise<{
|
|
31
|
+
output: WorkflowOutput<Own[K]>;
|
|
34
32
|
extras: Record<string, any>;
|
|
35
33
|
}>;
|
|
36
34
|
getServices: () => FinalServices<S, Deps>;
|
|
37
35
|
};
|
|
38
36
|
};
|
|
39
|
-
|
|
37
|
+
type ModuleContext<Reg extends ActionRegistry, WFReg extends Record<string, WorkflowDef<any, any, any, any, any>>, S extends ServiceRegistry> = {
|
|
40
38
|
wf: ReturnType<typeof createWorkflow<Reg, WFReg, S>>;
|
|
41
39
|
services: S;
|
|
42
40
|
};
|
|
43
|
-
|
|
41
|
+
type ExposedWorkflows<Own extends ModuleShape, Use extends ModuleMap, Expose extends Record<string, keyof DepWorkflows<Use>> | undefined> = Own & (Expose extends Record<string, keyof DepWorkflows<Use>> ? {
|
|
44
42
|
[K in keyof Expose]: DepWorkflows<Use>[Expose[K]];
|
|
45
43
|
} : {});
|
|
46
|
-
export declare function createModuleFactory<S extends ServiceRegistry>(): <Reg extends ActionRegistry, Use extends ModuleMap, Own extends ModuleShape, Expose extends Record<string, keyof DepWorkflows<Use>> | undefined = undefined>(config: {
|
|
44
|
+
export declare function createModuleFactory<S extends ServiceRegistry>(): <Reg extends ActionRegistry = Record<string, any>, Use extends ModuleMap = {}, Own extends ModuleShape = {}, Expose extends Record<string, keyof DepWorkflows<Use>> | undefined = undefined>(config: {
|
|
47
45
|
actionRegistry: Reg;
|
|
48
46
|
use?: Use;
|
|
49
47
|
expose?: Expose;
|
|
50
48
|
define: (ctx: ModuleContext<typeof config.actionRegistry, DepWorkflows<Use>, S>) => Own;
|
|
51
|
-
}) => Module<Reg, S,
|
|
49
|
+
}) => Module<Reg, S, ExposedWorkflows<Own, Use, Expose>, Use>;
|
|
52
50
|
export {};
|
|
53
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":"
|
|
1
|
+
{"version":3,"file":"workflow-module.d.ts","sourceRoot":"","sources":["../src/workflow-module.ts"],"names":[],"mappings":"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"}
|
package/dist/workflow-module.js
CHANGED
|
@@ -306,6 +306,365 @@
|
|
|
306
306
|
// };
|
|
307
307
|
// }
|
|
308
308
|
//
|
|
309
|
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
310
|
+
// import {
|
|
311
|
+
// ActionRegistry,
|
|
312
|
+
// ServiceRegistry,
|
|
313
|
+
// Executor,
|
|
314
|
+
// Simplify,
|
|
315
|
+
// WorkflowObserver,
|
|
316
|
+
// } from "./types.js";
|
|
317
|
+
// import {
|
|
318
|
+
// createWorkflow,
|
|
319
|
+
// StepDef,
|
|
320
|
+
// WorkflowBuilder,
|
|
321
|
+
// WorkflowDef,
|
|
322
|
+
// } from "./workflow-composer.js";
|
|
323
|
+
// import { executeWorkflow } from "./workflow-executor.js";
|
|
324
|
+
// type UnionToIntersection<U> = (U extends any ? (x: U) => any : never) extends (
|
|
325
|
+
// x: infer I,
|
|
326
|
+
// ) => any
|
|
327
|
+
// ? I
|
|
328
|
+
// : never;
|
|
329
|
+
// /* ------------------------------------------------ */
|
|
330
|
+
// /* WORKFLOW REGISTRY TYPES */
|
|
331
|
+
// /* ------------------------------------------------ */
|
|
332
|
+
//
|
|
333
|
+
// export type EnsureWorkflowShape<T> = {
|
|
334
|
+
// [K in keyof T]: T[K] extends WorkflowDef<any, any, any, any, any>
|
|
335
|
+
// ? T[K]
|
|
336
|
+
// : never;
|
|
337
|
+
// };
|
|
338
|
+
//
|
|
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
|
|
404
|
+
// ? {}
|
|
405
|
+
// : Simplify<
|
|
406
|
+
// EnsureWorkflowShape<
|
|
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
|
|
416
|
+
// >
|
|
417
|
+
// >;
|
|
418
|
+
// export type WorkflowRegistry<
|
|
419
|
+
// Own extends ModuleShape,
|
|
420
|
+
// Deps extends ModuleMap,
|
|
421
|
+
// > = Own & DepWorkflows<Deps>;
|
|
422
|
+
//
|
|
423
|
+
// /* ------------------------------------------------ */
|
|
424
|
+
// /* MODULE TYPES */
|
|
425
|
+
// /* ------------------------------------------------ */
|
|
426
|
+
//
|
|
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>>;
|
|
430
|
+
//
|
|
431
|
+
// export type FinalServices<
|
|
432
|
+
// S extends ServiceRegistry,
|
|
433
|
+
// Deps extends ModuleMap,
|
|
434
|
+
// > = S & ServicesFromDepsRecursive<Deps>;
|
|
435
|
+
//
|
|
436
|
+
// export type ServicesFromDepsRecursive<Deps extends ModuleMap> = [
|
|
437
|
+
// keyof Deps,
|
|
438
|
+
// ] extends [never]
|
|
439
|
+
// ? {} // no deps
|
|
440
|
+
// : UnionToIntersection<
|
|
441
|
+
// {
|
|
442
|
+
// [K in keyof Deps]: Deps[K] extends Module<
|
|
443
|
+
// any,
|
|
444
|
+
// infer S,
|
|
445
|
+
// any,
|
|
446
|
+
// infer SubDeps,
|
|
447
|
+
// any
|
|
448
|
+
// >
|
|
449
|
+
// ? S & ServicesFromDepsRecursive<SubDeps>
|
|
450
|
+
// : never;
|
|
451
|
+
// }[keyof Deps]
|
|
452
|
+
// >;
|
|
453
|
+
//
|
|
454
|
+
// /* ------------------------------------------------ */
|
|
455
|
+
// /* WORKFLOW IO TYPES */
|
|
456
|
+
// /* ------------------------------------------------ */
|
|
457
|
+
//
|
|
458
|
+
// export type WorkflowInput<W> =
|
|
459
|
+
// W extends WorkflowDef<any, infer I, any, any, any> ? I : never;
|
|
460
|
+
//
|
|
461
|
+
// export type WorkflowResults<W> =
|
|
462
|
+
// W extends WorkflowDef<any, any, infer R, any, any> ? R : never;
|
|
463
|
+
//
|
|
464
|
+
// export type WorkflowOutput<W> =
|
|
465
|
+
// W extends WorkflowDef<any, any, any, any, infer O> ? O : never;
|
|
466
|
+
//
|
|
467
|
+
// /* ------------------------------------------------ */
|
|
468
|
+
// /* MODULE RUNTIME */
|
|
469
|
+
// /* ------------------------------------------------ */
|
|
470
|
+
//
|
|
471
|
+
// export type Module<
|
|
472
|
+
// Reg extends ActionRegistry,
|
|
473
|
+
// S extends ServiceRegistry,
|
|
474
|
+
// Own extends ModuleShape,
|
|
475
|
+
// Deps extends ModuleMap,
|
|
476
|
+
// Public extends ModuleShape,
|
|
477
|
+
// > = {
|
|
478
|
+
// workflows: Own;
|
|
479
|
+
//
|
|
480
|
+
// __public: Public;
|
|
481
|
+
// __getExecutor: () => Executor;
|
|
482
|
+
//
|
|
483
|
+
// createRuntime: (config: { services: FinalServices<S, Deps> }) => {
|
|
484
|
+
// run: <K extends keyof Public>(
|
|
485
|
+
// workflow: K,
|
|
486
|
+
// input: WorkflowInput<Public[K]>,
|
|
487
|
+
// observers?: WorkflowObserver<Reg>[],
|
|
488
|
+
// ) => Promise<{
|
|
489
|
+
// output: WorkflowOutput<Public[K]>;
|
|
490
|
+
// extras: Record<string, any>;
|
|
491
|
+
// }>;
|
|
492
|
+
//
|
|
493
|
+
// getServices: () => FinalServices<S, Deps>;
|
|
494
|
+
// };
|
|
495
|
+
// };
|
|
496
|
+
//
|
|
497
|
+
// /* ------------------------------------------------ */
|
|
498
|
+
// /* MODULE CONTEXT (FIXED) */
|
|
499
|
+
// /* ------------------------------------------------ */
|
|
500
|
+
//
|
|
501
|
+
// export type ModuleContext<
|
|
502
|
+
// Reg extends ActionRegistry,
|
|
503
|
+
// WFReg extends Record<string, WorkflowDef<any, any, any, any, any>>,
|
|
504
|
+
// S extends ServiceRegistry,
|
|
505
|
+
// > = {
|
|
506
|
+
// wf: ReturnType<typeof createWorkflow<Reg, WFReg, S>>;
|
|
507
|
+
// services: S;
|
|
508
|
+
// };
|
|
509
|
+
//
|
|
510
|
+
// export type ExposedWorkflows<
|
|
511
|
+
// Own extends ModuleShape,
|
|
512
|
+
// Use extends ModuleMap,
|
|
513
|
+
// Expose extends Record<string, keyof DepWorkflows<Use>> | undefined,
|
|
514
|
+
// > = Own &
|
|
515
|
+
// (Expose extends Record<string, keyof DepWorkflows<Use>>
|
|
516
|
+
// ? {
|
|
517
|
+
// [K in keyof Expose]: DepWorkflows<Use>[Expose[K]];
|
|
518
|
+
// }
|
|
519
|
+
// : {});
|
|
520
|
+
// function createModule<
|
|
521
|
+
// Reg extends ActionRegistry,
|
|
522
|
+
// S extends ServiceRegistry,
|
|
523
|
+
// Use extends ModuleMap,
|
|
524
|
+
// Own extends ModuleShape,
|
|
525
|
+
// Expose extends Record<string, keyof DepWorkflows<Use>> | undefined,
|
|
526
|
+
// >(config: {
|
|
527
|
+
// actionRegistry: Reg;
|
|
528
|
+
// use?: Use;
|
|
529
|
+
// expose?: Expose;
|
|
530
|
+
// define: (ctx: ModuleContext<Reg, DepWorkflows<Use>, S>) => Own;
|
|
531
|
+
// }): Module<Reg, S, Own, Use, ExposedWorkflows<Own, Use, Expose> & ModuleShape> {
|
|
532
|
+
// const deps = (config.use ?? {}) as Use;
|
|
533
|
+
//
|
|
534
|
+
// type WFReg = DepWorkflows<Use>;
|
|
535
|
+
//
|
|
536
|
+
// const wf = createWorkflow<Reg, WFReg, S>();
|
|
537
|
+
//
|
|
538
|
+
// const own = config.define({
|
|
539
|
+
// wf,
|
|
540
|
+
// services: {} as S,
|
|
541
|
+
// });
|
|
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
|
+
//
|
|
554
|
+
// function buildWorkflowMap() {
|
|
555
|
+
// const depWFs = Object.fromEntries(
|
|
556
|
+
// Object.entries(deps).flatMap(([name, mod]) =>
|
|
557
|
+
// Object.entries(mod.__public).map(([k, wf]) => [`${name}.${k}`, wf]),
|
|
558
|
+
// ),
|
|
559
|
+
// );
|
|
560
|
+
//
|
|
561
|
+
// const internalBase = { ...own, ...depWFs } as WorkflowRegistry<Own, Use>;
|
|
562
|
+
//
|
|
563
|
+
// const exposed = {} as Record<string, AnyWorkflow>;
|
|
564
|
+
//
|
|
565
|
+
// if (config.expose) {
|
|
566
|
+
// for (const alias in config.expose) {
|
|
567
|
+
// const key = config.expose[alias];
|
|
568
|
+
// exposed[alias] = internalBase[key];
|
|
569
|
+
// }
|
|
570
|
+
// }
|
|
571
|
+
// const internal = {
|
|
572
|
+
// ...internalBase,
|
|
573
|
+
// ...exposed,
|
|
574
|
+
// } as WorkflowRegistry<Own, Use> & typeof exposed;
|
|
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);
|
|
583
|
+
// return { internal, publicMap };
|
|
584
|
+
// }
|
|
585
|
+
//
|
|
586
|
+
// const { internal, publicMap } = buildWorkflowMap();
|
|
587
|
+
//
|
|
588
|
+
// const depsExecutors = Object.fromEntries(
|
|
589
|
+
// Object.entries(deps).map(([name, mod]) => [name, mod.__getExecutor()]),
|
|
590
|
+
// );
|
|
591
|
+
//
|
|
592
|
+
// const executor: Executor = {
|
|
593
|
+
// run(wfId, input, services, observers = []) {
|
|
594
|
+
// if (!(wfId in publicMap)) {
|
|
595
|
+
// throw new Error(`Workflow not in public: ${wfId}`);
|
|
596
|
+
// }
|
|
597
|
+
//
|
|
598
|
+
// const workflow = internal[wfId];
|
|
599
|
+
//
|
|
600
|
+
// if (!workflow) {
|
|
601
|
+
// throw new Error(`Workflow not found: ${String(wfId)}`);
|
|
602
|
+
// }
|
|
603
|
+
//
|
|
604
|
+
// return executeWorkflow({
|
|
605
|
+
// workflow,
|
|
606
|
+
// actionRegistry: config.actionRegistry,
|
|
607
|
+
// depsExecutors,
|
|
608
|
+
// input,
|
|
609
|
+
// services,
|
|
610
|
+
// observers,
|
|
611
|
+
// });
|
|
612
|
+
// },
|
|
613
|
+
// };
|
|
614
|
+
//
|
|
615
|
+
// return {
|
|
616
|
+
// workflows: own,
|
|
617
|
+
// __public: publicMap,
|
|
618
|
+
// __getExecutor: () => executor,
|
|
619
|
+
//
|
|
620
|
+
// createRuntime({ services }) {
|
|
621
|
+
// let runtimeActions = config.actionRegistry;
|
|
622
|
+
//
|
|
623
|
+
// return {
|
|
624
|
+
// run: async <K extends keyof typeof publicMap>(
|
|
625
|
+
// workflowId: K,
|
|
626
|
+
// input: WorkflowInput<(typeof publicMap)[K]>,
|
|
627
|
+
//
|
|
628
|
+
// observers: WorkflowObserver<Reg>[] = [],
|
|
629
|
+
// ) => {
|
|
630
|
+
// return executor.run(workflowId as string, input, services, observers);
|
|
631
|
+
// },
|
|
632
|
+
//
|
|
633
|
+
// getServices: () => ({ ...services }) as FinalServices<S, Use>,
|
|
634
|
+
//
|
|
635
|
+
// setActionRegistry(reg: Reg) {
|
|
636
|
+
// runtimeActions = reg;
|
|
637
|
+
// },
|
|
638
|
+
// };
|
|
639
|
+
// },
|
|
640
|
+
// };
|
|
641
|
+
// }
|
|
642
|
+
//
|
|
643
|
+
// /* ------------------------------------------------ */
|
|
644
|
+
// /* FACTORY (FIXED) */
|
|
645
|
+
// /* ------------------------------------------------ */
|
|
646
|
+
//
|
|
647
|
+
// export function createModuleFactory<S extends ServiceRegistry>() {
|
|
648
|
+
// return function <
|
|
649
|
+
// Reg extends ActionRegistry,
|
|
650
|
+
// Use extends ModuleMap,
|
|
651
|
+
// Own extends ModuleShape,
|
|
652
|
+
// Expose extends Record<string, keyof DepWorkflows<Use>> | undefined =
|
|
653
|
+
// undefined,
|
|
654
|
+
// >(config: {
|
|
655
|
+
// actionRegistry: Reg;
|
|
656
|
+
// use?: Use;
|
|
657
|
+
// expose?: Expose;
|
|
658
|
+
// define: (
|
|
659
|
+
// ctx: ModuleContext<typeof config.actionRegistry, DepWorkflows<Use>, S>,
|
|
660
|
+
// ) => Own;
|
|
661
|
+
// }): Module<Reg, S, Own, Use, ExposedWorkflows<Own, Use, Expose>> {
|
|
662
|
+
// return createModule<Reg, S, Use, Own, Expose>(config);
|
|
663
|
+
// };
|
|
664
|
+
// }
|
|
665
|
+
// ////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
666
|
+
//
|
|
667
|
+
//
|
|
309
668
|
import { createWorkflow, } from "./workflow-composer.js";
|
|
310
669
|
import { executeWorkflow } from "./workflow-executor.js";
|
|
311
670
|
function createModule(config) {
|
|
@@ -315,12 +674,11 @@ function createModule(config) {
|
|
|
315
674
|
wf,
|
|
316
675
|
services: {},
|
|
317
676
|
});
|
|
318
|
-
function mergePublic(own, exposed) {
|
|
319
|
-
return { ...own, ...exposed };
|
|
320
|
-
}
|
|
321
677
|
function buildWorkflowMap() {
|
|
322
|
-
|
|
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])));
|
|
323
680
|
const internalBase = { ...own, ...depWFs };
|
|
681
|
+
// Build exposed workflows by looking up from internalBase
|
|
324
682
|
const exposed = {};
|
|
325
683
|
if (config.expose) {
|
|
326
684
|
for (const alias in config.expose) {
|
|
@@ -328,16 +686,12 @@ function createModule(config) {
|
|
|
328
686
|
exposed[alias] = internalBase[key];
|
|
329
687
|
}
|
|
330
688
|
}
|
|
689
|
+
// Merge exposed into public workflows
|
|
690
|
+
const publicMap = { ...own, ...exposed };
|
|
331
691
|
const internal = {
|
|
332
692
|
...internalBase,
|
|
333
693
|
...exposed,
|
|
334
694
|
};
|
|
335
|
-
// const publicMap = { ...own, ...exposed } as ExposedWorkflows<
|
|
336
|
-
// Own,
|
|
337
|
-
// Use,
|
|
338
|
-
// Expose
|
|
339
|
-
// >;
|
|
340
|
-
const publicMap = mergePublic(own, exposed);
|
|
341
695
|
return { internal, publicMap };
|
|
342
696
|
}
|
|
343
697
|
const { internal, publicMap } = buildWorkflowMap();
|
|
@@ -362,19 +716,14 @@ function createModule(config) {
|
|
|
362
716
|
},
|
|
363
717
|
};
|
|
364
718
|
return {
|
|
365
|
-
workflows:
|
|
366
|
-
__public: publicMap,
|
|
719
|
+
workflows: publicMap, // ← KEY CHANGE: return publicMap (with exposed merged) as workflows
|
|
367
720
|
__getExecutor: () => executor,
|
|
368
721
|
createRuntime({ services }) {
|
|
369
|
-
let runtimeActions = config.actionRegistry;
|
|
370
722
|
return {
|
|
371
723
|
run: async (workflowId, input, observers = []) => {
|
|
372
724
|
return executor.run(workflowId, input, services, observers);
|
|
373
725
|
},
|
|
374
726
|
getServices: () => ({ ...services }),
|
|
375
|
-
setActionRegistry(reg) {
|
|
376
|
-
runtimeActions = reg;
|
|
377
|
-
},
|
|
378
727
|
};
|
|
379
728
|
},
|
|
380
729
|
};
|