@maravilla-labs/functions 0.2.2 → 0.2.5
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/events/generator.d.ts.map +1 -1
- package/dist/events/generator.js +14 -8
- package/dist/events/generator.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/workflows/build.d.ts +12 -0
- package/dist/workflows/build.d.ts.map +1 -0
- package/dist/workflows/build.js +106 -0
- package/dist/workflows/build.js.map +1 -0
- package/dist/workflows/discover.d.ts +7 -0
- package/dist/workflows/discover.d.ts.map +1 -0
- package/dist/workflows/discover.js +51 -0
- package/dist/workflows/discover.js.map +1 -0
- package/dist/workflows/generator.d.ts +19 -0
- package/dist/workflows/generator.d.ts.map +1 -0
- package/dist/workflows/generator.js +126 -0
- package/dist/workflows/generator.js.map +1 -0
- package/dist/workflows/runtime.d.ts +147 -0
- package/dist/workflows/runtime.d.ts.map +1 -0
- package/dist/workflows/runtime.js +274 -0
- package/dist/workflows/runtime.js.map +1 -0
- package/dist/workflows/types.d.ts +84 -0
- package/dist/workflows/types.d.ts.map +1 -0
- package/dist/workflows/types.js +4 -0
- package/dist/workflows/types.js.map +1 -0
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/events/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/events/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,MAAM,CA8F5E"}
|
package/dist/events/generator.js
CHANGED
|
@@ -36,17 +36,23 @@ for (const mod of MODULES) {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
function buildCtx(handlerId) {
|
|
39
|
+
// Mirror globalThis.platform exactly — these are the same names
|
|
40
|
+
// users see everywhere else in their app via getPlatform().
|
|
39
41
|
const platform = (typeof globalThis !== 'undefined' && globalThis.platform) || {};
|
|
40
42
|
return {
|
|
41
|
-
env:
|
|
42
|
-
kv:
|
|
43
|
-
|
|
44
|
-
storage:
|
|
45
|
-
queue:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
env: platform.env || {},
|
|
44
|
+
kv: platform.kv,
|
|
45
|
+
database: platform.database,
|
|
46
|
+
storage: platform.storage,
|
|
47
|
+
queue: platform.queue,
|
|
48
|
+
auth: platform.auth,
|
|
49
|
+
push: platform.push,
|
|
50
|
+
tenant: platform.tenant || 'default',
|
|
51
|
+
traceId: (globalThis.crypto?.randomUUID?.() || String(Date.now())),
|
|
49
52
|
handlerId,
|
|
53
|
+
// Escape hatch: full platform object for forward-compatibility if
|
|
54
|
+
// new services land on globalThis.platform.
|
|
55
|
+
platform,
|
|
50
56
|
};
|
|
51
57
|
}
|
|
52
58
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/events/generator.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgC;IAClE,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;SAC5E,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/D,OAAO;EACP,OAAO;;mBAEU,SAAS
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/events/generator.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgC;IAClE,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;SAC5E,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/D,OAAO;EACP,OAAO;;mBAEU,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmF3B,CAAC;AACF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,11 @@ export type { FunctionManifest, FunctionRoute, BuildOptions } from './types.js';
|
|
|
5
5
|
export { buildEvents, integrateEventsWithManifest } from './events/build.js';
|
|
6
6
|
export { discoverEventSources } from './events/discover.js';
|
|
7
7
|
export type { EventTrigger, EventHandlerDescriptor, EventsManifest, BuildEventsOptions, DiscoveredEventSource, } from './events/types.js';
|
|
8
|
+
export { buildWorkflows, integrateWorkflowsWithManifest } from './workflows/build.js';
|
|
9
|
+
export { discoverWorkflowSources } from './workflows/discover.js';
|
|
10
|
+
export { defineWorkflow } from './workflows/runtime.js';
|
|
11
|
+
export type { WorkflowStepApi, WorkflowCtx, WorkflowHandler } from './workflows/runtime.js';
|
|
12
|
+
export type { WorkflowOptions, WorkflowDescriptor, WorkflowTrigger, WorkflowsManifest, BuildWorkflowsOptions, DiscoveredWorkflowSource, StepRecord, StepKind, StepStatus, WorkflowOutcome, WorkflowInvokeResponse, NewStep, } from './workflows/types.js';
|
|
8
13
|
export declare function buildFunctions(options?: BuildOptions): Promise<FunctionManifest | null>;
|
|
9
14
|
export declare function integrateWithManifest(manifestPath: string, functionsManifest: FunctionManifest | null): Promise<void>;
|
|
10
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhF,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhF,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC5F,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,eAAe,EACf,sBAAsB,EACtB,OAAO,GACR,MAAM,sBAAsB,CAAC;AAE9B,wBAAsB,cAAc,CAAC,OAAO,GAAE,YAAiB,oCAyG9D;AAwCD,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,gBAAgB,GAAG,IAAI,iBA2C3C"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,10 @@ export { developmentServer } from './dev.js';
|
|
|
8
8
|
// Events pipeline (events.ts + events/**/*.ts)
|
|
9
9
|
export { buildEvents, integrateEventsWithManifest } from './events/build.js';
|
|
10
10
|
export { discoverEventSources } from './events/discover.js';
|
|
11
|
+
// Workflows pipeline (workflows.ts + workflows/**/*.ts)
|
|
12
|
+
export { buildWorkflows, integrateWorkflowsWithManifest } from './workflows/build.js';
|
|
13
|
+
export { discoverWorkflowSources } from './workflows/discover.js';
|
|
14
|
+
export { defineWorkflow } from './workflows/runtime.js';
|
|
11
15
|
export async function buildFunctions(options = {}) {
|
|
12
16
|
const { functionsDir = 'functions', outputDir = '.maravilla', minify = false, sourcemap = false, production = false, } = options;
|
|
13
17
|
const resolvedFunctionsDir = resolve(functionsDir);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BuildWorkflowsOptions, WorkflowsManifest } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build the workflows bundle and emit `workflows.js` + `workflows.json`.
|
|
4
|
+
* Returns the manifest, or null when no workflows are defined.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors `buildEvents` exactly — single-entry strategy, IIFE for the
|
|
7
|
+
* Deno isolate + ESM introspection for `workflows.json`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildWorkflows(options?: BuildWorkflowsOptions): Promise<WorkflowsManifest | null>;
|
|
10
|
+
/** Merge the workflows manifest into an existing `manifest.json`. */
|
|
11
|
+
export declare function integrateWorkflowsWithManifest(manifestPath: string, workflowsManifest: WorkflowsManifest | null): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/workflows/build.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,qBAAqB,EAErB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA2EnC;AAuCD,qEAAqE;AACrE,wBAAsB,8BAA8B,CAClD,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAC1C,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import * as esbuild from 'esbuild';
|
|
5
|
+
import { discoverWorkflowSources } from './discover.js';
|
|
6
|
+
import { generateWorkflowsEntry } from './generator.js';
|
|
7
|
+
/**
|
|
8
|
+
* Build the workflows bundle and emit `workflows.js` + `workflows.json`.
|
|
9
|
+
* Returns the manifest, or null when no workflows are defined.
|
|
10
|
+
*
|
|
11
|
+
* Mirrors `buildEvents` exactly — single-entry strategy, IIFE for the
|
|
12
|
+
* Deno isolate + ESM introspection for `workflows.json`.
|
|
13
|
+
*/
|
|
14
|
+
export async function buildWorkflows(options = {}) {
|
|
15
|
+
const { projectDir = process.cwd(), outputDir = '.maravilla', minify = false, sourcemap = false, production = false, } = options;
|
|
16
|
+
const resolvedProject = resolve(projectDir);
|
|
17
|
+
const resolvedOut = resolve(outputDir);
|
|
18
|
+
const sources = await discoverWorkflowSources(resolvedProject);
|
|
19
|
+
if (sources.length === 0)
|
|
20
|
+
return null;
|
|
21
|
+
console.log(`🔁 Building workflows (${sources.length} source file${sources.length === 1 ? '' : 's'}):`);
|
|
22
|
+
for (const s of sources)
|
|
23
|
+
console.log(` ${s.relPath}`);
|
|
24
|
+
await fs.mkdir(resolvedOut, { recursive: true });
|
|
25
|
+
const tempDir = join(resolvedOut, '.temp');
|
|
26
|
+
await fs.mkdir(tempDir, { recursive: true });
|
|
27
|
+
const entryPath = join(tempDir, 'workflows-entry.mjs');
|
|
28
|
+
await fs.writeFile(entryPath, generateWorkflowsEntry(sources));
|
|
29
|
+
const iifeBundlePath = join(resolvedOut, 'workflows.js');
|
|
30
|
+
const esmIntrospectPath = join(tempDir, 'workflows.introspect.mjs');
|
|
31
|
+
const sharedOpts = {
|
|
32
|
+
entryPoints: [entryPath],
|
|
33
|
+
bundle: true,
|
|
34
|
+
platform: 'neutral',
|
|
35
|
+
target: 'es2022',
|
|
36
|
+
absWorkingDir: resolvedProject,
|
|
37
|
+
minify: minify || production,
|
|
38
|
+
sourcemap,
|
|
39
|
+
external: ['node:*'],
|
|
40
|
+
define: { 'process.env.NODE_ENV': production ? '"production"' : '"development"' },
|
|
41
|
+
mainFields: ['module', 'main'],
|
|
42
|
+
conditions: ['import', 'module'],
|
|
43
|
+
};
|
|
44
|
+
await esbuild.build({
|
|
45
|
+
...sharedOpts,
|
|
46
|
+
format: 'iife',
|
|
47
|
+
globalName: '__maravilla_workflows',
|
|
48
|
+
outfile: iifeBundlePath,
|
|
49
|
+
});
|
|
50
|
+
await esbuild.build({
|
|
51
|
+
...sharedOpts,
|
|
52
|
+
format: 'esm',
|
|
53
|
+
outfile: esmIntrospectPath,
|
|
54
|
+
});
|
|
55
|
+
const workflows = await introspect(esmIntrospectPath, sources);
|
|
56
|
+
await fs.rm(tempDir, { recursive: true, force: true });
|
|
57
|
+
const manifest = {
|
|
58
|
+
version: 1,
|
|
59
|
+
bundle: 'workflows.js',
|
|
60
|
+
workflows,
|
|
61
|
+
buildTime: new Date().toISOString(),
|
|
62
|
+
};
|
|
63
|
+
await fs.writeFile(join(resolvedOut, 'workflows.json'), JSON.stringify(manifest, null, 2));
|
|
64
|
+
console.log(`✅ Workflows build completed: ${workflows.length} workflow${workflows.length === 1 ? '' : 's'}`);
|
|
65
|
+
for (const w of workflows)
|
|
66
|
+
console.log(` ${w.id}`);
|
|
67
|
+
return manifest;
|
|
68
|
+
}
|
|
69
|
+
async function introspect(bundlePath, sources) {
|
|
70
|
+
const url = pathToFileURL(bundlePath).href + `?t=${Date.now()}`;
|
|
71
|
+
let mod;
|
|
72
|
+
try {
|
|
73
|
+
mod = (await import(url));
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
console.warn(`⚠️ Failed to introspect workflows bundle: ${err.message}`);
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
const list = mod.__maravilla_workflows_list;
|
|
80
|
+
if (!Array.isArray(list)) {
|
|
81
|
+
console.warn('⚠️ Workflows bundle missing __maravilla_workflows_list');
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const defaultFile = sources[0]?.relPath;
|
|
85
|
+
return list.map((entry) => {
|
|
86
|
+
const e = entry;
|
|
87
|
+
return {
|
|
88
|
+
id: e.id,
|
|
89
|
+
export: e.export,
|
|
90
|
+
file: defaultFile,
|
|
91
|
+
options: e.options ?? {},
|
|
92
|
+
trigger: e.trigger,
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/** Merge the workflows manifest into an existing `manifest.json`. */
|
|
97
|
+
export async function integrateWorkflowsWithManifest(manifestPath, workflowsManifest) {
|
|
98
|
+
if (!workflowsManifest)
|
|
99
|
+
return;
|
|
100
|
+
const raw = await fs.readFile(manifestPath, 'utf-8');
|
|
101
|
+
const manifest = JSON.parse(raw);
|
|
102
|
+
manifest.workflows = workflowsManifest;
|
|
103
|
+
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
|
|
104
|
+
console.log('📝 Updated manifest.json with workflows configuration');
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/workflows/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DiscoveredWorkflowSource } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Find workflow source files: `workflows.ts|js|mjs` at the project root
|
|
4
|
+
* and anything under `workflows/`. Mirrors event discovery conventions.
|
|
5
|
+
*/
|
|
6
|
+
export declare function discoverWorkflowSources(projectDir: string): Promise<DiscoveredWorkflowSource[]>;
|
|
7
|
+
//# sourceMappingURL=discover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/workflows/discover.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAiBrG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { join, relative, resolve } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Find workflow source files: `workflows.ts|js|mjs` at the project root
|
|
5
|
+
* and anything under `workflows/`. Mirrors event discovery conventions.
|
|
6
|
+
*/
|
|
7
|
+
export async function discoverWorkflowSources(projectDir) {
|
|
8
|
+
const root = resolve(projectDir);
|
|
9
|
+
const sources = [];
|
|
10
|
+
for (const name of ['workflows.ts', 'workflows.js', 'workflows.mjs']) {
|
|
11
|
+
const p = join(root, name);
|
|
12
|
+
if (await exists(p)) {
|
|
13
|
+
sources.push({ absPath: p, relPath: relative(root, p) });
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const dir = join(root, 'workflows');
|
|
18
|
+
if (await exists(dir)) {
|
|
19
|
+
await walk(dir, root, sources);
|
|
20
|
+
}
|
|
21
|
+
return sources;
|
|
22
|
+
}
|
|
23
|
+
async function walk(dir, root, out) {
|
|
24
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
25
|
+
for (const entry of entries) {
|
|
26
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')
|
|
27
|
+
continue;
|
|
28
|
+
const full = join(dir, entry.name);
|
|
29
|
+
if (entry.isDirectory()) {
|
|
30
|
+
await walk(full, root, out);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (!entry.isFile())
|
|
34
|
+
continue;
|
|
35
|
+
if (!/\.(ts|js|mjs)$/.test(entry.name))
|
|
36
|
+
continue;
|
|
37
|
+
if (/\.(test|spec)\./.test(entry.name) || entry.name.endsWith('.d.ts'))
|
|
38
|
+
continue;
|
|
39
|
+
out.push({ absPath: full, relPath: relative(root, full) });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function exists(p) {
|
|
43
|
+
try {
|
|
44
|
+
await fs.access(p);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/workflows/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,UAAkB;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,OAAO,GAA+B,EAAE,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,CAAC;QACrE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3B,IAAI,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpC,IAAI,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,IAAY,EAAE,GAA+B;IAC5E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QACnG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,SAAS;QAC9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACjD,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACjF,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,CAAS;IAC7B,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { DiscoveredWorkflowSource } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate the workflows entry module.
|
|
4
|
+
*
|
|
5
|
+
* The entry:
|
|
6
|
+
* 1. Imports each discovered source file as a namespace.
|
|
7
|
+
* 2. Collects exports tagged by `defineWorkflow` (`__maravilla_workflow`).
|
|
8
|
+
* 3. Exposes `globalThis.handleRequest` so the same Maravilla worker pool
|
|
9
|
+
* that drives events can drive workflows. The orchestrator POSTs
|
|
10
|
+
* `{ id, runId, input, history, resumeEvent }` and expects back
|
|
11
|
+
* `{ outcome, newSteps }`.
|
|
12
|
+
* 4. Exports `__maravilla_workflows_list` for Node-side introspection
|
|
13
|
+
* (used to emit `workflows.json`).
|
|
14
|
+
*
|
|
15
|
+
* All replay logic lives in `@maravilla-labs/functions/workflows/runtime`
|
|
16
|
+
* (bundled in). Bundle is emitted as IIFE + ESM, same as events.
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateWorkflowsEntry(sources: DiscoveredWorkflowSource[]): string;
|
|
19
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/workflows/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,EAAE,GAAG,MAAM,CA6GlF"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate the workflows entry module.
|
|
3
|
+
*
|
|
4
|
+
* The entry:
|
|
5
|
+
* 1. Imports each discovered source file as a namespace.
|
|
6
|
+
* 2. Collects exports tagged by `defineWorkflow` (`__maravilla_workflow`).
|
|
7
|
+
* 3. Exposes `globalThis.handleRequest` so the same Maravilla worker pool
|
|
8
|
+
* that drives events can drive workflows. The orchestrator POSTs
|
|
9
|
+
* `{ id, runId, input, history, resumeEvent }` and expects back
|
|
10
|
+
* `{ outcome, newSteps }`.
|
|
11
|
+
* 4. Exports `__maravilla_workflows_list` for Node-side introspection
|
|
12
|
+
* (used to emit `workflows.json`).
|
|
13
|
+
*
|
|
14
|
+
* All replay logic lives in `@maravilla-labs/functions/workflows/runtime`
|
|
15
|
+
* (bundled in). Bundle is emitted as IIFE + ESM, same as events.
|
|
16
|
+
*/
|
|
17
|
+
export function generateWorkflowsEntry(sources) {
|
|
18
|
+
const imports = sources
|
|
19
|
+
.map((src, i) => `import * as mod_${i} from ${JSON.stringify(src.absPath)};`)
|
|
20
|
+
.join('\n');
|
|
21
|
+
const modsArray = sources.map((_, i) => `mod_${i}`).join(', ');
|
|
22
|
+
return `// Maravilla Workflows Entry — auto-generated, do not edit
|
|
23
|
+
import { runWorkflowInstance, getWorkflowMarker } from '@maravilla-labs/functions/workflows/runtime';
|
|
24
|
+
${imports}
|
|
25
|
+
|
|
26
|
+
const MODULES = [${modsArray}];
|
|
27
|
+
const REGISTRY = {};
|
|
28
|
+
|
|
29
|
+
for (const mod of MODULES) {
|
|
30
|
+
for (const [name, val] of Object.entries(mod)) {
|
|
31
|
+
const marker = getWorkflowMarker(val);
|
|
32
|
+
if (marker && typeof val.handler === 'function') {
|
|
33
|
+
REGISTRY[marker.id] = {
|
|
34
|
+
export: name,
|
|
35
|
+
options: marker.options || {},
|
|
36
|
+
trigger: marker.trigger,
|
|
37
|
+
handler: val.handler,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function buildCtx(runId, workflowId, attempt) {
|
|
44
|
+
const platform = (typeof globalThis !== 'undefined' && globalThis.platform) || {};
|
|
45
|
+
return {
|
|
46
|
+
kv: platform.kv,
|
|
47
|
+
database: platform.db,
|
|
48
|
+
storage: platform.storage,
|
|
49
|
+
queue: platform.queue,
|
|
50
|
+
workflows: platform.workflows,
|
|
51
|
+
platform,
|
|
52
|
+
runId,
|
|
53
|
+
workflowId,
|
|
54
|
+
attempt: attempt || 0,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function handleWorkflow(workflowId, params) {
|
|
59
|
+
const entry = REGISTRY[workflowId];
|
|
60
|
+
if (!entry) {
|
|
61
|
+
return {
|
|
62
|
+
outcome: { kind: 'failed', error: { message: 'Unknown workflow id: ' + workflowId } },
|
|
63
|
+
newSteps: [],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const runId = params.runId || '';
|
|
67
|
+
const attempt = params.attempt || 0;
|
|
68
|
+
const history = Array.isArray(params.history) ? params.history : [];
|
|
69
|
+
const input = params.input;
|
|
70
|
+
return runWorkflowInstance({
|
|
71
|
+
handler: entry.handler,
|
|
72
|
+
input,
|
|
73
|
+
history,
|
|
74
|
+
runId,
|
|
75
|
+
workflowId,
|
|
76
|
+
attempt,
|
|
77
|
+
ctx: buildCtx(runId, workflowId, attempt),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function handleRequest(request) {
|
|
82
|
+
try {
|
|
83
|
+
const bodyText = await request.text();
|
|
84
|
+
const parsed = bodyText ? JSON.parse(bodyText) : {};
|
|
85
|
+
const id = parsed.id;
|
|
86
|
+
if (!id) {
|
|
87
|
+
return new Response(
|
|
88
|
+
JSON.stringify({ outcome: { kind: 'failed', error: { message: 'missing workflow id' } }, newSteps: [] }),
|
|
89
|
+
{ status: 400, headers: { 'content-type': 'application/json' } },
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
const response = await handleWorkflow(id, parsed);
|
|
93
|
+
return new Response(
|
|
94
|
+
JSON.stringify(response),
|
|
95
|
+
{ status: 200, headers: { 'content-type': 'application/json' } },
|
|
96
|
+
);
|
|
97
|
+
} catch (err) {
|
|
98
|
+
return new Response(
|
|
99
|
+
JSON.stringify({
|
|
100
|
+
outcome: { kind: 'failed', error: { message: String(err && err.message || err) } },
|
|
101
|
+
newSteps: [],
|
|
102
|
+
}),
|
|
103
|
+
{ status: 500, headers: { 'content-type': 'application/json' } },
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (typeof globalThis !== 'undefined') {
|
|
109
|
+
globalThis.handleWorkflow = handleWorkflow;
|
|
110
|
+
globalThis.handleRequest = handleRequest;
|
|
111
|
+
globalThis.__maravilla_workflows_registry = REGISTRY;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export const __maravilla_workflows_list = Object.entries(REGISTRY).map(
|
|
115
|
+
([id, entry]) => ({
|
|
116
|
+
id,
|
|
117
|
+
export: entry.export,
|
|
118
|
+
options: entry.options,
|
|
119
|
+
trigger: entry.trigger,
|
|
120
|
+
}),
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
export { handleWorkflow, handleRequest };
|
|
124
|
+
`;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/workflows/generator.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAmC;IACxE,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;SAC5E,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/D,OAAO;;EAEP,OAAO;;mBAEU,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkG3B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime-side replay shim for durable workflows.
|
|
3
|
+
*
|
|
4
|
+
* This file is imported by user code via `defineWorkflow` and by the
|
|
5
|
+
* generated entry that dispatches `handleWorkflow`. It exports:
|
|
6
|
+
*
|
|
7
|
+
* - `defineWorkflow(descriptor, handler)` — user-facing declaration
|
|
8
|
+
* - `runWorkflowInstance(...)` — one invocation against the replay shim
|
|
9
|
+
*
|
|
10
|
+
* Execution model (Cloudflare Workflows / Temporal style):
|
|
11
|
+
* - Orchestrator invokes the handler with the full step history.
|
|
12
|
+
* - Each `step.*` call consults history by `name`:
|
|
13
|
+
* hit → return the persisted output synchronously
|
|
14
|
+
* miss → execute (for `step.run`) or yield (sleep / wait)
|
|
15
|
+
* - Yields throw `WorkflowYield` which the runner catches and converts
|
|
16
|
+
* to a `{ outcome, newSteps }` response; the next invocation picks
|
|
17
|
+
* up from the same spot because all earlier steps are now in history.
|
|
18
|
+
*/
|
|
19
|
+
import type { StepRecord, WorkflowInvokeResponse, WorkflowOptions, WorkflowTrigger } from './types.js';
|
|
20
|
+
/** Distinguished class so the runner can tell a yield apart from a
|
|
21
|
+
* user-thrown exception. Never leaves this module — the runner catches
|
|
22
|
+
* it internally. */
|
|
23
|
+
declare class WorkflowYield extends Error {
|
|
24
|
+
readonly outcome: {
|
|
25
|
+
kind: 'sleeping';
|
|
26
|
+
wakeAtMs: number;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'waiting_event';
|
|
29
|
+
stepName: string;
|
|
30
|
+
filter: unknown;
|
|
31
|
+
timeoutAtMs?: number;
|
|
32
|
+
};
|
|
33
|
+
constructor(outcome: {
|
|
34
|
+
kind: 'sleeping';
|
|
35
|
+
wakeAtMs: number;
|
|
36
|
+
} | {
|
|
37
|
+
kind: 'waiting_event';
|
|
38
|
+
stepName: string;
|
|
39
|
+
filter: unknown;
|
|
40
|
+
timeoutAtMs?: number;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export interface WorkflowDefinitionInput {
|
|
44
|
+
id: string;
|
|
45
|
+
options?: WorkflowOptions;
|
|
46
|
+
/**
|
|
47
|
+
* Optional declarative auto-start. `{ kind: 'schedule', cron: '0 9 * * *' }`
|
|
48
|
+
* fires a new run on cron; `{ kind: 'event', t: 'auth.user.registered' }`
|
|
49
|
+
* fires on a matching RenEvent. Omit to require explicit
|
|
50
|
+
* `platform.workflows.start()` calls.
|
|
51
|
+
*/
|
|
52
|
+
trigger?: WorkflowTrigger;
|
|
53
|
+
}
|
|
54
|
+
/** Anything the user can return from `step.*`. Typed as `any` at the
|
|
55
|
+
* step helper level because the ledger JSON-serializes arbitrary values. */
|
|
56
|
+
type StepValue = any;
|
|
57
|
+
/** Context passed to the workflow handler. Mirrors event handlers for
|
|
58
|
+
* symmetry — users reach platform services the same way they do in
|
|
59
|
+
* event handlers. */
|
|
60
|
+
export interface WorkflowCtx {
|
|
61
|
+
kv: any;
|
|
62
|
+
database: any;
|
|
63
|
+
storage: any;
|
|
64
|
+
queue: any;
|
|
65
|
+
workflows: any;
|
|
66
|
+
platform: any;
|
|
67
|
+
runId: string;
|
|
68
|
+
workflowId: string;
|
|
69
|
+
attempt: number;
|
|
70
|
+
}
|
|
71
|
+
export interface WaitForEventOptions {
|
|
72
|
+
/** Event type to match (`RenEvent.t` or `sendEvent` type). */
|
|
73
|
+
type: string;
|
|
74
|
+
/** Shallow key/value filter on the event's payload. */
|
|
75
|
+
match?: Record<string, unknown>;
|
|
76
|
+
/** Give up after this long; `null` resolves on timeout. Number = ms, string = `"7d"`. */
|
|
77
|
+
timeout?: number | string;
|
|
78
|
+
}
|
|
79
|
+
export interface WaitForEventResult {
|
|
80
|
+
type: string;
|
|
81
|
+
payload: unknown;
|
|
82
|
+
ts: number;
|
|
83
|
+
}
|
|
84
|
+
export interface InvokeOptions {
|
|
85
|
+
/** Abort the wait after this long. Default: 1 hour. */
|
|
86
|
+
timeout?: number | string;
|
|
87
|
+
}
|
|
88
|
+
export interface WorkflowStepApi {
|
|
89
|
+
/** Execute `fn` once; subsequent replays return the persisted output. */
|
|
90
|
+
run<T extends StepValue>(name: string, fn: () => Promise<T> | T): Promise<T>;
|
|
91
|
+
/** Durable sleep. Accepts ms as number or duration string (`"30s"`, `"5m"`, `"1h"`). */
|
|
92
|
+
sleep(name: string, duration: number | string): Promise<void>;
|
|
93
|
+
/** Sleep until an absolute epoch-ms timestamp. */
|
|
94
|
+
sleepUntil(name: string, epochMs: number): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Wait for a signal matching `type` + optional `match`. Returns the
|
|
97
|
+
* event when resolved, or `null` if `timeout` elapses first.
|
|
98
|
+
*/
|
|
99
|
+
waitForEvent(name: string, options: WaitForEventOptions): Promise<WaitForEventResult | null>;
|
|
100
|
+
/**
|
|
101
|
+
* Start a child workflow and wait for it to finish. Persisted as a
|
|
102
|
+
* single `invoke` step so the parent doesn't re-trigger the child on
|
|
103
|
+
* replay. Throws if the child ends `failed` or `cancelled`.
|
|
104
|
+
*/
|
|
105
|
+
invoke<T = unknown>(name: string, workflowId: string, input?: unknown, options?: InvokeOptions): Promise<T>;
|
|
106
|
+
}
|
|
107
|
+
export type WorkflowHandler<Input = unknown> = (event: Input, step: WorkflowStepApi, ctx: WorkflowCtx) => Promise<unknown> | unknown;
|
|
108
|
+
export interface WorkflowRegistration<Input = unknown> {
|
|
109
|
+
readonly [k: string]: unknown;
|
|
110
|
+
readonly handler: WorkflowHandler<Input>;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* User-facing declaration. Tag-only marker — the runtime recognizes the
|
|
114
|
+
* `__maravilla_workflow` key and registers the export.
|
|
115
|
+
*
|
|
116
|
+
* export const onboarding = defineWorkflow(
|
|
117
|
+
* { id: 'onboarding', options: { retries: 5 } },
|
|
118
|
+
* async (event, step, ctx) => { ... }
|
|
119
|
+
* );
|
|
120
|
+
*/
|
|
121
|
+
export declare function defineWorkflow<Input = unknown>(descriptor: WorkflowDefinitionInput, handler: WorkflowHandler<Input>): WorkflowRegistration<Input>;
|
|
122
|
+
export declare function isWorkflowRegistration(v: unknown): v is WorkflowRegistration;
|
|
123
|
+
export declare function getWorkflowMarker(v: unknown): {
|
|
124
|
+
id: string;
|
|
125
|
+
options: WorkflowOptions;
|
|
126
|
+
trigger?: WorkflowTrigger;
|
|
127
|
+
} | null;
|
|
128
|
+
/** Parse `"30s" | "5m" | "1h"` or return the number unchanged. */
|
|
129
|
+
declare function parseDurationMs(d: number | string): number;
|
|
130
|
+
/** One invocation of a workflow handler against the replay shim.
|
|
131
|
+
* Called by the generated entry's `handleWorkflow`. */
|
|
132
|
+
export declare function runWorkflowInstance(opts: {
|
|
133
|
+
handler: WorkflowHandler;
|
|
134
|
+
input: unknown;
|
|
135
|
+
history: StepRecord[];
|
|
136
|
+
runId: string;
|
|
137
|
+
workflowId: string;
|
|
138
|
+
attempt: number;
|
|
139
|
+
ctx: WorkflowCtx;
|
|
140
|
+
}): Promise<WorkflowInvokeResponse>;
|
|
141
|
+
export declare const __workflow_internals: {
|
|
142
|
+
WorkflowYield: typeof WorkflowYield;
|
|
143
|
+
TRIGGER_KEY: string;
|
|
144
|
+
parseDurationMs: typeof parseDurationMs;
|
|
145
|
+
};
|
|
146
|
+
export {};
|
|
147
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/workflows/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime-side replay shim for durable workflows.
|
|
3
|
+
*
|
|
4
|
+
* This file is imported by user code via `defineWorkflow` and by the
|
|
5
|
+
* generated entry that dispatches `handleWorkflow`. It exports:
|
|
6
|
+
*
|
|
7
|
+
* - `defineWorkflow(descriptor, handler)` — user-facing declaration
|
|
8
|
+
* - `runWorkflowInstance(...)` — one invocation against the replay shim
|
|
9
|
+
*
|
|
10
|
+
* Execution model (Cloudflare Workflows / Temporal style):
|
|
11
|
+
* - Orchestrator invokes the handler with the full step history.
|
|
12
|
+
* - Each `step.*` call consults history by `name`:
|
|
13
|
+
* hit → return the persisted output synchronously
|
|
14
|
+
* miss → execute (for `step.run`) or yield (sleep / wait)
|
|
15
|
+
* - Yields throw `WorkflowYield` which the runner catches and converts
|
|
16
|
+
* to a `{ outcome, newSteps }` response; the next invocation picks
|
|
17
|
+
* up from the same spot because all earlier steps are now in history.
|
|
18
|
+
*/
|
|
19
|
+
const TRIGGER_KEY = '__maravilla_workflow';
|
|
20
|
+
/** Distinguished class so the runner can tell a yield apart from a
|
|
21
|
+
* user-thrown exception. Never leaves this module — the runner catches
|
|
22
|
+
* it internally. */
|
|
23
|
+
class WorkflowYield extends Error {
|
|
24
|
+
outcome;
|
|
25
|
+
constructor(outcome) {
|
|
26
|
+
super('workflow yield');
|
|
27
|
+
this.outcome = outcome;
|
|
28
|
+
this.name = 'WorkflowYield';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* User-facing declaration. Tag-only marker — the runtime recognizes the
|
|
33
|
+
* `__maravilla_workflow` key and registers the export.
|
|
34
|
+
*
|
|
35
|
+
* export const onboarding = defineWorkflow(
|
|
36
|
+
* { id: 'onboarding', options: { retries: 5 } },
|
|
37
|
+
* async (event, step, ctx) => { ... }
|
|
38
|
+
* );
|
|
39
|
+
*/
|
|
40
|
+
export function defineWorkflow(descriptor, handler) {
|
|
41
|
+
if (!descriptor?.id || typeof descriptor.id !== 'string') {
|
|
42
|
+
throw new Error('defineWorkflow requires an id');
|
|
43
|
+
}
|
|
44
|
+
if (typeof handler !== 'function') {
|
|
45
|
+
throw new Error('defineWorkflow handler must be a function');
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
[TRIGGER_KEY]: {
|
|
49
|
+
id: descriptor.id,
|
|
50
|
+
options: descriptor.options ?? {},
|
|
51
|
+
trigger: descriptor.trigger,
|
|
52
|
+
},
|
|
53
|
+
handler,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function isWorkflowRegistration(v) {
|
|
57
|
+
return !!v && typeof v === 'object' && TRIGGER_KEY in v;
|
|
58
|
+
}
|
|
59
|
+
export function getWorkflowMarker(v) {
|
|
60
|
+
if (!isWorkflowRegistration(v))
|
|
61
|
+
return null;
|
|
62
|
+
return v[TRIGGER_KEY] ?? null;
|
|
63
|
+
}
|
|
64
|
+
/** Parse `"30s" | "5m" | "1h"` or return the number unchanged. */
|
|
65
|
+
function parseDurationMs(d) {
|
|
66
|
+
if (typeof d === 'number')
|
|
67
|
+
return Math.max(0, Math.floor(d));
|
|
68
|
+
const m = /^(\d+(?:\.\d+)?)(ms|s|m|h|d)$/.exec(d.trim());
|
|
69
|
+
if (!m)
|
|
70
|
+
throw new Error(`unsupported duration: ${d}`);
|
|
71
|
+
const n = parseFloat(m[1]);
|
|
72
|
+
switch (m[2]) {
|
|
73
|
+
case 'ms': return Math.round(n);
|
|
74
|
+
case 's': return Math.round(n * 1000);
|
|
75
|
+
case 'm': return Math.round(n * 60_000);
|
|
76
|
+
case 'h': return Math.round(n * 3_600_000);
|
|
77
|
+
case 'd': return Math.round(n * 86_400_000);
|
|
78
|
+
default: throw new Error(`unsupported duration unit in ${d}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** One invocation of a workflow handler against the replay shim.
|
|
82
|
+
* Called by the generated entry's `handleWorkflow`. */
|
|
83
|
+
export async function runWorkflowInstance(opts) {
|
|
84
|
+
const { handler, input, history, runId, workflowId, attempt, ctx } = opts;
|
|
85
|
+
const historyByName = new Map();
|
|
86
|
+
for (const h of history)
|
|
87
|
+
historyByName.set(h.name, h);
|
|
88
|
+
const newSteps = [];
|
|
89
|
+
const usedNames = new Set();
|
|
90
|
+
const pushNew = (s) => {
|
|
91
|
+
if (usedNames.has(s.name)) {
|
|
92
|
+
throw new Error(`duplicate step name "${s.name}" — step names must be unique per run`);
|
|
93
|
+
}
|
|
94
|
+
usedNames.add(s.name);
|
|
95
|
+
newSteps.push(s);
|
|
96
|
+
};
|
|
97
|
+
function recordStepRun(name) {
|
|
98
|
+
if (usedNames.has(name) || historyByName.has(name)) {
|
|
99
|
+
throw new Error(`duplicate step name "${name}" — step names must be unique per run`);
|
|
100
|
+
}
|
|
101
|
+
usedNames.add(name);
|
|
102
|
+
}
|
|
103
|
+
const step = {
|
|
104
|
+
async run(name, fn) {
|
|
105
|
+
const prior = historyByName.get(name);
|
|
106
|
+
if (prior) {
|
|
107
|
+
if (prior.status === 'completed') {
|
|
108
|
+
return prior.output;
|
|
109
|
+
}
|
|
110
|
+
// A prior failed step re-runs on the next attempt (retry budget
|
|
111
|
+
// is at the run level, not per-step in v0.7).
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
recordStepRun(name);
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const out = await fn();
|
|
118
|
+
pushNew({
|
|
119
|
+
name,
|
|
120
|
+
kind: 'run',
|
|
121
|
+
status: 'completed',
|
|
122
|
+
output: out === undefined ? null : out,
|
|
123
|
+
});
|
|
124
|
+
return out;
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
// Let the outer runner see this and classify as failed outcome.
|
|
128
|
+
throw err;
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
async sleep(name, duration) {
|
|
132
|
+
const prior = historyByName.get(name);
|
|
133
|
+
if (prior && prior.status === 'completed')
|
|
134
|
+
return;
|
|
135
|
+
const ms = parseDurationMs(duration);
|
|
136
|
+
const wakeAtMs = Date.now() + ms;
|
|
137
|
+
pushNew({ name, kind: 'sleep', status: 'pending', wakeAt: wakeAtMs });
|
|
138
|
+
throw new WorkflowYield({ kind: 'sleeping', wakeAtMs });
|
|
139
|
+
},
|
|
140
|
+
async sleepUntil(name, epochMs) {
|
|
141
|
+
const prior = historyByName.get(name);
|
|
142
|
+
if (prior && prior.status === 'completed')
|
|
143
|
+
return;
|
|
144
|
+
const wakeAtMs = Math.floor(epochMs);
|
|
145
|
+
pushNew({ name, kind: 'sleep', status: 'pending', wakeAt: wakeAtMs });
|
|
146
|
+
throw new WorkflowYield({ kind: 'sleeping', wakeAtMs });
|
|
147
|
+
},
|
|
148
|
+
async waitForEvent(name, options) {
|
|
149
|
+
if (!options || typeof options.type !== 'string' || !options.type) {
|
|
150
|
+
throw new Error('step.waitForEvent requires options.type');
|
|
151
|
+
}
|
|
152
|
+
const prior = historyByName.get(name);
|
|
153
|
+
if (prior && prior.status === 'completed') {
|
|
154
|
+
// output is either the resume event, or `null` for a timeout.
|
|
155
|
+
return prior.output;
|
|
156
|
+
}
|
|
157
|
+
recordStepRun(name);
|
|
158
|
+
const filter = {
|
|
159
|
+
type: options.type,
|
|
160
|
+
match: options.match ?? {},
|
|
161
|
+
};
|
|
162
|
+
const timeoutAtMs = options.timeout !== undefined
|
|
163
|
+
? Date.now() + parseDurationMs(options.timeout)
|
|
164
|
+
: undefined;
|
|
165
|
+
// Record a pending step so operators see it in the history; the
|
|
166
|
+
// orchestrator will flip it to completed (or timeout-completed)
|
|
167
|
+
// when the matching event arrives.
|
|
168
|
+
pushNew({
|
|
169
|
+
name,
|
|
170
|
+
kind: 'wait_event',
|
|
171
|
+
status: 'pending',
|
|
172
|
+
wakeAt: timeoutAtMs,
|
|
173
|
+
});
|
|
174
|
+
throw new WorkflowYield({
|
|
175
|
+
kind: 'waiting_event',
|
|
176
|
+
stepName: name,
|
|
177
|
+
filter,
|
|
178
|
+
timeoutAtMs,
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
async invoke(name, workflowId, input, options) {
|
|
182
|
+
const prior = historyByName.get(name);
|
|
183
|
+
if (prior && prior.status === 'completed') {
|
|
184
|
+
return prior.output;
|
|
185
|
+
}
|
|
186
|
+
// A child workflow is one durable step from the parent's POV:
|
|
187
|
+
// start it, wait via the same waitForEvent machinery, return
|
|
188
|
+
// the child's output. Replay shortcut means we don't re-start
|
|
189
|
+
// the child on every parent invocation.
|
|
190
|
+
recordStepRun(name);
|
|
191
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
192
|
+
const pw = globalThis?.platform?.workflows;
|
|
193
|
+
if (!pw?.start) {
|
|
194
|
+
throw new Error('step.invoke requires globalThis.platform.workflows');
|
|
195
|
+
}
|
|
196
|
+
const handle = await pw.start(workflowId, input);
|
|
197
|
+
// Poll until terminal. Budget bounded by options.timeout (default 1h).
|
|
198
|
+
const deadlineMs = Date.now() + parseDurationMs(options?.timeout ?? '1h');
|
|
199
|
+
let delay = 100;
|
|
200
|
+
// eslint-disable-next-line no-constant-condition
|
|
201
|
+
while (true) {
|
|
202
|
+
const run = (await handle.status());
|
|
203
|
+
if (!run) {
|
|
204
|
+
throw new Error(`step.invoke: child run ${handle.runId} not found`);
|
|
205
|
+
}
|
|
206
|
+
if (run.status === 'completed') {
|
|
207
|
+
pushNew({
|
|
208
|
+
name,
|
|
209
|
+
kind: 'invoke',
|
|
210
|
+
status: 'completed',
|
|
211
|
+
output: run.output ?? null,
|
|
212
|
+
});
|
|
213
|
+
return run.output;
|
|
214
|
+
}
|
|
215
|
+
if (run.status === 'failed' || run.status === 'cancelled') {
|
|
216
|
+
const err = new Error(`child workflow ${workflowId} ${run.status}`);
|
|
217
|
+
pushNew({
|
|
218
|
+
name,
|
|
219
|
+
kind: 'invoke',
|
|
220
|
+
status: 'failed',
|
|
221
|
+
error: run.error ?? { message: err.message },
|
|
222
|
+
});
|
|
223
|
+
throw err;
|
|
224
|
+
}
|
|
225
|
+
if (Date.now() >= deadlineMs) {
|
|
226
|
+
throw new Error(`step.invoke: child workflow ${workflowId} timed out`);
|
|
227
|
+
}
|
|
228
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
229
|
+
delay = Math.min(delay * 2, 5000);
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
try {
|
|
234
|
+
const output = await handler(input, step, ctx);
|
|
235
|
+
return {
|
|
236
|
+
outcome: { kind: 'completed', output: output === undefined ? null : output },
|
|
237
|
+
newSteps,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
if (err instanceof WorkflowYield) {
|
|
242
|
+
// Convert completed sleep writes: find the one pending step with
|
|
243
|
+
// `kind = sleep` whose wakeAt matches the yield — the orchestrator
|
|
244
|
+
// will reschedule based on the outcome's wakeAtMs.
|
|
245
|
+
return { outcome: err.outcome, newSteps };
|
|
246
|
+
}
|
|
247
|
+
// Unhandled throw → failed outcome, carry error details.
|
|
248
|
+
return {
|
|
249
|
+
outcome: {
|
|
250
|
+
kind: 'failed',
|
|
251
|
+
error: {
|
|
252
|
+
message: err?.message ?? String(err),
|
|
253
|
+
stack: err?.stack ?? undefined,
|
|
254
|
+
name: err?.name ?? 'Error',
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
newSteps,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
finally {
|
|
261
|
+
// runId / workflowId / attempt are referenced for debugging via ctx;
|
|
262
|
+
// silencing unused-var lints without adding side effects.
|
|
263
|
+
void runId;
|
|
264
|
+
void workflowId;
|
|
265
|
+
void attempt;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Internal use only — exported for the generated entry to construct.
|
|
269
|
+
export const __workflow_internals = {
|
|
270
|
+
WorkflowYield,
|
|
271
|
+
TRIGGER_KEY,
|
|
272
|
+
parseDurationMs,
|
|
273
|
+
};
|
|
274
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/workflows/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** Manifest + builder types for durable workflows.
|
|
2
|
+
* Mirrors `platform::workflows::types` on the Rust side — keep in sync. */
|
|
3
|
+
export interface WorkflowOptions {
|
|
4
|
+
/** Max retries for the whole run (not per-step). Default: 3. */
|
|
5
|
+
retries?: number;
|
|
6
|
+
/** Overall wall-clock deadline in seconds. */
|
|
7
|
+
timeoutSecs?: number;
|
|
8
|
+
}
|
|
9
|
+
/** Declarative auto-start trigger. Shape mirrors `WorkflowTrigger` in Rust. */
|
|
10
|
+
export type WorkflowTrigger = {
|
|
11
|
+
kind: 'schedule';
|
|
12
|
+
cron: string;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'event';
|
|
15
|
+
r?: string;
|
|
16
|
+
t?: string;
|
|
17
|
+
ns?: string;
|
|
18
|
+
};
|
|
19
|
+
export interface WorkflowDescriptor {
|
|
20
|
+
id: string;
|
|
21
|
+
export: string;
|
|
22
|
+
file?: string;
|
|
23
|
+
options?: WorkflowOptions;
|
|
24
|
+
trigger?: WorkflowTrigger;
|
|
25
|
+
}
|
|
26
|
+
export interface WorkflowsManifest {
|
|
27
|
+
version: 1;
|
|
28
|
+
bundle: string;
|
|
29
|
+
workflows: WorkflowDescriptor[];
|
|
30
|
+
buildTime: string;
|
|
31
|
+
}
|
|
32
|
+
export interface DiscoveredWorkflowSource {
|
|
33
|
+
absPath: string;
|
|
34
|
+
relPath: string;
|
|
35
|
+
}
|
|
36
|
+
export interface BuildWorkflowsOptions {
|
|
37
|
+
/** Project root. Discovery looks for `workflows.ts` and `workflows/**\/*.ts` here. */
|
|
38
|
+
projectDir?: string;
|
|
39
|
+
/** Output directory (default: `.maravilla`). */
|
|
40
|
+
outputDir?: string;
|
|
41
|
+
minify?: boolean;
|
|
42
|
+
sourcemap?: boolean;
|
|
43
|
+
production?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export type StepKind = 'run' | 'sleep' | 'wait_event' | 'ai' | 'mcp' | 'invoke';
|
|
46
|
+
export type StepStatus = 'pending' | 'completed' | 'failed';
|
|
47
|
+
export interface StepRecord {
|
|
48
|
+
name: string;
|
|
49
|
+
kind: StepKind;
|
|
50
|
+
status: StepStatus;
|
|
51
|
+
output?: unknown;
|
|
52
|
+
error?: unknown;
|
|
53
|
+
startedAt: number;
|
|
54
|
+
completedAt?: number;
|
|
55
|
+
wakeAt?: number;
|
|
56
|
+
}
|
|
57
|
+
export interface NewStep {
|
|
58
|
+
name: string;
|
|
59
|
+
kind: StepKind;
|
|
60
|
+
status: StepStatus;
|
|
61
|
+
output?: unknown;
|
|
62
|
+
error?: unknown;
|
|
63
|
+
wakeAt?: number;
|
|
64
|
+
}
|
|
65
|
+
export type WorkflowOutcome = {
|
|
66
|
+
kind: 'completed';
|
|
67
|
+
output: unknown;
|
|
68
|
+
} | {
|
|
69
|
+
kind: 'sleeping';
|
|
70
|
+
wakeAtMs: number;
|
|
71
|
+
} | {
|
|
72
|
+
kind: 'waiting_event';
|
|
73
|
+
stepName: string;
|
|
74
|
+
filter: unknown;
|
|
75
|
+
timeoutAtMs?: number;
|
|
76
|
+
} | {
|
|
77
|
+
kind: 'failed';
|
|
78
|
+
error: unknown;
|
|
79
|
+
};
|
|
80
|
+
export interface WorkflowInvokeResponse {
|
|
81
|
+
outcome: WorkflowOutcome;
|
|
82
|
+
newSteps: NewStep[];
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workflows/types.ts"],"names":[],"mappings":"AAAA;4EAC4E;AAE5E,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,+EAA+E;AAC/E,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAKD,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,YAAY,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workflows/types.ts"],"names":[],"mappings":"AAAA;4EAC4E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maravilla-labs/functions",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "Maravilla Edge Functions bundler and development tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
11
|
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./workflows/runtime": {
|
|
14
|
+
"types": "./dist/workflows/runtime.d.ts",
|
|
15
|
+
"import": "./dist/workflows/runtime.js"
|
|
12
16
|
}
|
|
13
17
|
},
|
|
14
18
|
"files": [
|