@vite-hub/workflow 0.0.0 → 0.0.1
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/README.md +60 -1
- package/dist/_app-BVWpnNHo.d.ts +11 -0
- package/dist/app-BE3EYOWn.js +10 -0
- package/dist/cloudflare-CeHVSHoN.js +42 -0
- package/dist/cloudflare-env-BVUMOgFK.d.ts +21 -0
- package/dist/cloudflare-env-g0Rf3ClH.js +49 -0
- package/dist/cloudflare-shared-BIeY2kak.d.ts +1 -0
- package/dist/cloudflare-vite-DcM5YVTP.js +40 -0
- package/dist/config-DkgsQuXz.js +92 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.js +369 -0
- package/dist/module-UYEnVfxy.js +1546 -0
- package/dist/nitro.d.ts +19 -0
- package/dist/nitro.js +2 -0
- package/dist/openworkflow-amN7IkGO.d.ts +24 -0
- package/dist/runtime/cloudflare-runner.d.ts +27 -0
- package/dist/runtime/cloudflare-runner.js +23 -0
- package/dist/runtime/cloudflare-shared.d.ts +2 -0
- package/dist/runtime/cloudflare-shared.js +2 -0
- package/dist/runtime/cloudflare-vite.d.ts +17 -0
- package/dist/runtime/cloudflare-vite.js +2 -0
- package/dist/runtime/execute.d.ts +11 -0
- package/dist/runtime/execute.js +25 -0
- package/dist/runtime/nitro-plugin.d.ts +6 -0
- package/dist/runtime/nitro-plugin.js +14 -0
- package/dist/runtime/openworkflow-worker.d.ts +18 -0
- package/dist/runtime/openworkflow-worker.js +55 -0
- package/dist/runtime/openworkflow.d.ts +2 -0
- package/dist/runtime/openworkflow.js +143 -0
- package/dist/runtime/state.d.ts +35 -0
- package/dist/runtime/state.js +179 -0
- package/dist/runtime/vercel-vite.d.ts +14 -0
- package/dist/runtime/vercel-vite.js +48 -0
- package/dist/types-ThDitg7Z.d.ts +121 -0
- package/dist/vite.d.ts +16 -0
- package/dist/vite.js +503 -0
- package/package.json +93 -5
package/README.md
CHANGED
|
@@ -1,3 +1,62 @@
|
|
|
1
1
|
# @vite-hub/workflow
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p>
|
|
4
|
+
<a href="https://vitehub.dev"><img alt="ViteHub" src="https://img.shields.io/badge/ViteHub-vitehub.dev-646cff?style=flat-square"></a>
|
|
5
|
+
<img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-ready-3178c6?style=flat-square">
|
|
6
|
+
<img alt="Vite" src="https://img.shields.io/badge/Vite-discovery-646cff?style=flat-square">
|
|
7
|
+
<img alt="Workflow" src="https://img.shields.io/badge/Workflow-durable%20steps-7c3aed?style=flat-square">
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
`@vite-hub/workflow` defines long-running work once and starts it through one `runWorkflow()` API.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
pnpm add @vite-hub/workflow
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Add the provider dependency for the workflow provider you configure.
|
|
19
|
+
|
|
20
|
+
## Minimal API
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
// server/workflows/welcome.ts
|
|
24
|
+
import { defineWorkflow } from "@vite-hub/workflow"
|
|
25
|
+
|
|
26
|
+
export default defineWorkflow<{ email: string }>(async ({ id, payload, step }) => {
|
|
27
|
+
const email = await step?.do?.("send-email", {}, async () => {
|
|
28
|
+
return { sentTo: payload.email }
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
return { id, email }
|
|
32
|
+
})
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
// server/api/welcome.post.ts
|
|
37
|
+
import { getWorkflowRun, runWorkflow } from "@vite-hub/workflow"
|
|
38
|
+
import { defineEventHandler, readBody } from "h3"
|
|
39
|
+
|
|
40
|
+
export default defineEventHandler(async (event) => {
|
|
41
|
+
const run = await runWorkflow("welcome", await readBody<{ email: string }>(event))
|
|
42
|
+
return getWorkflowRun("welcome", run.id)
|
|
43
|
+
})
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
// nitro.config.ts
|
|
48
|
+
import { defineNitroConfig } from "nitro/config"
|
|
49
|
+
|
|
50
|
+
export default defineNitroConfig({
|
|
51
|
+
modules: ["@vite-hub/workflow/nitro"],
|
|
52
|
+
workflow: { provider: "openworkflow" },
|
|
53
|
+
})
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Vite and Nitro
|
|
57
|
+
|
|
58
|
+
Nitro discovers `server/workflows/<name>.ts` and folder workflows such as `server/workflows/welcome/index.ts` with numbered step files. Vite also supports `src/<name>.workflow.ts` through `hubWorkflow()`.
|
|
59
|
+
|
|
60
|
+
Providers map to [OpenWorkflow](https://openworkflow.dev/docs/overview), [Cloudflare Workflows](https://developers.cloudflare.com/workflows/), or [Vercel Workflow](https://vercel.com/docs/workflow).
|
|
61
|
+
|
|
62
|
+
Learn more at [vitehub.dev](https://vitehub.dev).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region ../internal/src/runtime/app.d.ts
|
|
2
|
+
type AppHandler = (request: Request, context?: Record<string, unknown>) => Response | Promise<Response>;
|
|
3
|
+
type VitehubApp = AppHandler | {
|
|
4
|
+
fetch?: AppHandler;
|
|
5
|
+
request?: (request: Request, options?: RequestInit, context?: Record<string, unknown>) => Response | Promise<Response>;
|
|
6
|
+
};
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region src/runtime/_app.d.ts
|
|
9
|
+
type WorkflowApp = VitehubApp;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { WorkflowApp as t };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region ../internal/src/runtime/app.ts
|
|
2
|
+
function resolveAppFetch(label, app) {
|
|
3
|
+
if (!app) return;
|
|
4
|
+
if (typeof app === "function") return app;
|
|
5
|
+
if (typeof app.request === "function") return (request, context) => app.request(request, void 0, context);
|
|
6
|
+
if (typeof app.fetch === "function") return app.fetch.bind(app);
|
|
7
|
+
throw new TypeError(`Invalid ${label} app. Expected an h3 app or a fetch-compatible handler.`);
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { resolveAppFetch as t };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//#region ../internal/src/integrations/hex.ts
|
|
2
|
+
const textEncoder = new TextEncoder();
|
|
3
|
+
new TextDecoder();
|
|
4
|
+
function encodeNameHex(name) {
|
|
5
|
+
return [...textEncoder.encode(name)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region src/integrations/cloudflare.ts
|
|
9
|
+
const cloudflareWorkflowNameMaxLength = 64;
|
|
10
|
+
function shortHash(value) {
|
|
11
|
+
let hash = 2166136261;
|
|
12
|
+
for (const char of value) {
|
|
13
|
+
hash ^= char.codePointAt(0) || 0;
|
|
14
|
+
hash = Math.imul(hash, 16777619);
|
|
15
|
+
}
|
|
16
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
17
|
+
}
|
|
18
|
+
function getCloudflareWorkflowBindingName(name) {
|
|
19
|
+
return `WORKFLOW_${encodeNameHex(name).toUpperCase()}`;
|
|
20
|
+
}
|
|
21
|
+
function getCloudflareWorkflowName(name) {
|
|
22
|
+
const encoded = encodeNameHex(name);
|
|
23
|
+
const fullName = `workflow--${encoded}`;
|
|
24
|
+
if (fullName.length <= cloudflareWorkflowNameMaxLength) return fullName;
|
|
25
|
+
const hash = shortHash(name);
|
|
26
|
+
const prefixLength = cloudflareWorkflowNameMaxLength - 10 - 1 - hash.length;
|
|
27
|
+
return `workflow--${encoded.slice(0, prefixLength)}-${hash}`;
|
|
28
|
+
}
|
|
29
|
+
function getCloudflareWorkflowClassName(name) {
|
|
30
|
+
return `ViteHub${name.split(/[^a-z0-9]+/i).filter(Boolean).map((segment) => `${segment.charAt(0).toUpperCase()}${segment.slice(1)}`).join("") || "Default"}${shortHash(name)}Workflow`;
|
|
31
|
+
}
|
|
32
|
+
function createCloudflareWorkflowBindings(definitions, options) {
|
|
33
|
+
if (!definitions.length) return;
|
|
34
|
+
if (definitions.length > 1 && options && (options.binding || options.name)) throw new TypeError("Cloudflare workflow binding and name overrides are only supported when one workflow is discovered.");
|
|
35
|
+
return definitions.map((definition) => ({
|
|
36
|
+
binding: definitions.length === 1 && options ? options.binding || getCloudflareWorkflowBindingName(definition.name) : getCloudflareWorkflowBindingName(definition.name),
|
|
37
|
+
class_name: getCloudflareWorkflowClassName(definition.name),
|
|
38
|
+
name: definitions.length === 1 && options ? options.name || getCloudflareWorkflowName(definition.name) : getCloudflareWorkflowName(definition.name)
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { encodeNameHex as a, getCloudflareWorkflowName as i, getCloudflareWorkflowBindingName as n, getCloudflareWorkflowClassName as r, createCloudflareWorkflowBindings as t };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region ../internal/src/runtime/cloudflare-env.d.ts
|
|
2
|
+
type CloudflareWorkerEnv = Record<string, unknown>;
|
|
3
|
+
interface CloudflareWorkerExecutionContext {
|
|
4
|
+
waitUntil?: (promise: Promise<unknown>) => void;
|
|
5
|
+
}
|
|
6
|
+
declare function setActiveCloudflareEnv(env: CloudflareWorkerEnv | undefined): void;
|
|
7
|
+
type WaitUntilFn = (promise: Promise<unknown>) => void;
|
|
8
|
+
interface CloudflareRuntimeEvent {
|
|
9
|
+
context: {
|
|
10
|
+
cloudflare: {
|
|
11
|
+
context: CloudflareWorkerExecutionContext | undefined;
|
|
12
|
+
env: CloudflareWorkerEnv;
|
|
13
|
+
};
|
|
14
|
+
waitUntil?: WaitUntilFn;
|
|
15
|
+
};
|
|
16
|
+
env: CloudflareWorkerEnv;
|
|
17
|
+
waitUntil?: WaitUntilFn;
|
|
18
|
+
}
|
|
19
|
+
declare function createCloudflareRuntimeEvent(env: CloudflareWorkerEnv, context: CloudflareWorkerExecutionContext | undefined): CloudflareRuntimeEvent;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { setActiveCloudflareEnv as i, CloudflareWorkerExecutionContext as n, createCloudflareRuntimeEvent as r, CloudflareWorkerEnv as t };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
//#region ../internal/src/runtime/cloudflare-env.ts
|
|
3
|
+
let activeEnv;
|
|
4
|
+
const activeEnvStorage = new AsyncLocalStorage();
|
|
5
|
+
function setActiveCloudflareEnv(env) {
|
|
6
|
+
activeEnv = env;
|
|
7
|
+
globalThis.__env__ = env;
|
|
8
|
+
try {
|
|
9
|
+
activeEnvStorage.enterWith(env);
|
|
10
|
+
} catch {}
|
|
11
|
+
}
|
|
12
|
+
function getActiveCloudflareEnv() {
|
|
13
|
+
return activeEnvStorage.getStore() ?? activeEnv ?? globalThis.__env__;
|
|
14
|
+
}
|
|
15
|
+
function getCloudflareEnv(event) {
|
|
16
|
+
const target = event;
|
|
17
|
+
return target?.env || target?.context?.cloudflare?.env || target?.context?._platform?.cloudflare?.env || target?.req?.runtime?.cloudflare?.env || getActiveCloudflareEnv();
|
|
18
|
+
}
|
|
19
|
+
function resolveWaitUntil(event) {
|
|
20
|
+
const target = event;
|
|
21
|
+
const owners = [
|
|
22
|
+
target,
|
|
23
|
+
target?.context,
|
|
24
|
+
target?.context?.cloudflare,
|
|
25
|
+
target?.context?.cloudflare?.context,
|
|
26
|
+
target?.context?._platform?.cloudflare,
|
|
27
|
+
target?.context?._platform?.cloudflare?.context,
|
|
28
|
+
target?.req,
|
|
29
|
+
target?.req?.runtime?.cloudflare,
|
|
30
|
+
target?.req?.runtime?.cloudflare?.context
|
|
31
|
+
];
|
|
32
|
+
for (const owner of owners) if (typeof owner?.waitUntil === "function") return owner.waitUntil.bind(owner);
|
|
33
|
+
}
|
|
34
|
+
function createCloudflareRuntimeEvent(env, context) {
|
|
35
|
+
const waitUntil = typeof context?.waitUntil === "function" ? context.waitUntil.bind(context) : void 0;
|
|
36
|
+
return {
|
|
37
|
+
context: {
|
|
38
|
+
cloudflare: {
|
|
39
|
+
env,
|
|
40
|
+
context
|
|
41
|
+
},
|
|
42
|
+
waitUntil
|
|
43
|
+
},
|
|
44
|
+
env,
|
|
45
|
+
waitUntil
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { setActiveCloudflareEnv as i, getCloudflareEnv as n, resolveWaitUntil as r, createCloudflareRuntimeEvent as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { t as normalizeWorkflowOptions } from "./config-DkgsQuXz.js";
|
|
2
|
+
import { i as setActiveCloudflareEnv, t as createCloudflareRuntimeEvent } from "./cloudflare-env-g0Rf3ClH.js";
|
|
3
|
+
import { runWithWorkflowRuntimeEvent, setWorkflowRuntimeConfig, setWorkflowRuntimeRegistry } from "./runtime/state.js";
|
|
4
|
+
import { t as resolveAppFetch } from "./app-BE3EYOWn.js";
|
|
5
|
+
import { H3, toWebHandler } from "h3/cloudflare";
|
|
6
|
+
//#region ../internal/src/runtime/cloudflare-hosted.ts
|
|
7
|
+
function createWebRequestHandler(appHandler) {
|
|
8
|
+
const defaultHandler = toWebHandler(new H3());
|
|
9
|
+
return async (request, context) => await Promise.resolve(appHandler ? appHandler(request, context) : defaultHandler(request, context));
|
|
10
|
+
}
|
|
11
|
+
function createCloudflareHostedWorker(adapter) {
|
|
12
|
+
const requestHandler = createWebRequestHandler(resolveAppFetch(adapter.label, adapter.app));
|
|
13
|
+
return { async fetch(request, env, context) {
|
|
14
|
+
const handle = async (handlerContext) => await Promise.resolve(requestHandler(request, handlerContext));
|
|
15
|
+
if (adapter.onRequest) return await adapter.onRequest({
|
|
16
|
+
env,
|
|
17
|
+
executionContext: context,
|
|
18
|
+
handle
|
|
19
|
+
});
|
|
20
|
+
return await handle();
|
|
21
|
+
} };
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
//#region src/runtime/cloudflare-vite.ts
|
|
25
|
+
function createWorkflowCloudflareWorker(options = {}) {
|
|
26
|
+
const workflowConfig = options.workflow === false ? false : normalizeWorkflowOptions(options.workflow, { hosting: "cloudflare" });
|
|
27
|
+
return createCloudflareHostedWorker({
|
|
28
|
+
app: options.app,
|
|
29
|
+
label: "workflow",
|
|
30
|
+
async onRequest({ env, executionContext, handle }) {
|
|
31
|
+
setWorkflowRuntimeConfig(workflowConfig);
|
|
32
|
+
setWorkflowRuntimeRegistry(options.registry);
|
|
33
|
+
setActiveCloudflareEnv(env);
|
|
34
|
+
const runtimeEvent = createCloudflareRuntimeEvent(env, executionContext);
|
|
35
|
+
return await runWithWorkflowRuntimeEvent(runtimeEvent, () => handle(runtimeEvent.context));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { createWorkflowCloudflareWorker as t };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { defu } from "defu";
|
|
2
|
+
//#region ../internal/src/feature-bridge/hosting.ts
|
|
3
|
+
function normalizeHosting(hosting) {
|
|
4
|
+
const normalized = hosting?.trim().toLowerCase().replaceAll("_", "-") || "";
|
|
5
|
+
if (normalized === "cloudflare") return "cloudflare-module";
|
|
6
|
+
return normalized;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
//#region ../internal/src/object.ts
|
|
10
|
+
function isPlainObject(value) {
|
|
11
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/config.ts
|
|
15
|
+
const knownProviders = new Set([
|
|
16
|
+
"cloudflare",
|
|
17
|
+
"openworkflow",
|
|
18
|
+
"vercel"
|
|
19
|
+
]);
|
|
20
|
+
function readString(value, label) {
|
|
21
|
+
if (typeof value === "undefined") return;
|
|
22
|
+
if (typeof value !== "string" || !value.trim()) throw new TypeError(`\`${label}\` must be a non-empty string when provided.`);
|
|
23
|
+
return value.trim();
|
|
24
|
+
}
|
|
25
|
+
function readBoolean(value, label) {
|
|
26
|
+
if (typeof value === "undefined") return;
|
|
27
|
+
if (typeof value !== "boolean") throw new TypeError(`\`${label}\` must be a boolean when provided.`);
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
function readPositiveInteger(value, label) {
|
|
31
|
+
if (typeof value === "undefined") return;
|
|
32
|
+
if (!Number.isInteger(value) || value <= 0) throw new TypeError(`\`${label}\` must be a positive integer when provided.`);
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
function normalizeOpenWorkflowPostgresOptions(value) {
|
|
36
|
+
if (typeof value === "undefined") return;
|
|
37
|
+
if (!isPlainObject(value)) throw new TypeError("`workflow.postgres` must be a plain object.");
|
|
38
|
+
const namespaceId = readString(value.namespaceId, "workflow.postgres.namespaceId");
|
|
39
|
+
const runMigrations = readBoolean(value.runMigrations, "workflow.postgres.runMigrations");
|
|
40
|
+
const schema = readString(value.schema, "workflow.postgres.schema");
|
|
41
|
+
const url = readString(value.url, "workflow.postgres.url");
|
|
42
|
+
return {
|
|
43
|
+
...namespaceId ? { namespaceId } : {},
|
|
44
|
+
...typeof runMigrations === "boolean" ? { runMigrations } : {},
|
|
45
|
+
...schema ? { schema } : {},
|
|
46
|
+
...url ? { url } : {}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function normalizeOpenWorkflowWorkerOptions(value) {
|
|
50
|
+
if (typeof value === "undefined") return;
|
|
51
|
+
if (!isPlainObject(value)) throw new TypeError("`workflow.worker` must be a plain object.");
|
|
52
|
+
const concurrency = readPositiveInteger(value.concurrency, "workflow.worker.concurrency");
|
|
53
|
+
return typeof concurrency === "number" ? { concurrency } : {};
|
|
54
|
+
}
|
|
55
|
+
function hasOpenWorkflowPostgresConfig(options) {
|
|
56
|
+
return isPlainObject(options.postgres) && typeof options.postgres.url === "string" && !!options.postgres.url.trim();
|
|
57
|
+
}
|
|
58
|
+
function inferProvider(provider, hosting) {
|
|
59
|
+
if (provider === "cloudflare" || provider === "openworkflow" || provider === "vercel") return provider;
|
|
60
|
+
if (hosting.includes("cloudflare")) return "cloudflare";
|
|
61
|
+
return "vercel";
|
|
62
|
+
}
|
|
63
|
+
function inferProviderFromOptions(options, hosting) {
|
|
64
|
+
if (typeof options.provider === "undefined" && (hosting.includes("node") || hosting.includes("docker")) && hasOpenWorkflowPostgresConfig(options)) return "openworkflow";
|
|
65
|
+
return inferProvider(options.provider, hosting);
|
|
66
|
+
}
|
|
67
|
+
function resolveProvider(options, hosting) {
|
|
68
|
+
const shared = {
|
|
69
|
+
...typeof options.binding === "string" ? { binding: options.binding } : {},
|
|
70
|
+
...typeof options.name === "string" ? { name: options.name } : {}
|
|
71
|
+
};
|
|
72
|
+
const provider = options.provider;
|
|
73
|
+
if (typeof provider === "string" && !knownProviders.has(provider)) throw new TypeError(`Unknown \`workflow.provider\`: ${JSON.stringify(provider)}. Expected "cloudflare", "openworkflow", or "vercel".`);
|
|
74
|
+
const resolved = inferProviderFromOptions(options, hosting);
|
|
75
|
+
if (resolved === "cloudflare") return defu(shared, { provider: "cloudflare" });
|
|
76
|
+
if (resolved === "openworkflow") {
|
|
77
|
+
const postgres = normalizeOpenWorkflowPostgresOptions(options.postgres);
|
|
78
|
+
const worker = normalizeOpenWorkflowWorkerOptions(options.worker);
|
|
79
|
+
return defu({
|
|
80
|
+
...postgres ? { postgres } : {},
|
|
81
|
+
...worker ? { worker } : {}
|
|
82
|
+
}, shared, { provider: "openworkflow" });
|
|
83
|
+
}
|
|
84
|
+
return defu(shared, { provider: "vercel" });
|
|
85
|
+
}
|
|
86
|
+
function normalizeWorkflowOptions(options, input = {}) {
|
|
87
|
+
if (options === false) return void 0;
|
|
88
|
+
if (typeof options !== "undefined" && !isPlainObject(options)) throw new TypeError("`workflow` must be a plain object.");
|
|
89
|
+
return resolveProvider(options || {}, normalizeHosting(input.hosting));
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
export { normalizeWorkflowOptions as t };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { A as WorkflowStepRunner, C as WorkflowProviderStep, D as WorkflowStartOptions, E as WorkflowSharedOptions, O as WorkflowStepFunction, S as WorkflowProviderOptions, T as WorkflowRunStatus, _ as WorkflowHandle, a as InferredWorkflowProviderOptions, b as WorkflowModuleProviderOptions, c as OpenWorkflowWorkerOptions, d as WorkflowCreateOptions, f as WorkflowDeferOptions, g as WorkflowExecutionContext, h as WorkflowDefinitionRegistry, i as DiscoveredWorkflowDefinition, k as WorkflowStepOptions, l as ResolvedWorkflowOptions, m as WorkflowDefinitionOptions, n as CloudflareWorkflowInstance, o as OpenWorkflowPostgresOptions, p as WorkflowDefinition, r as CloudflareWorkflowProviderOptions, s as OpenWorkflowProviderOptions, t as CloudflareWorkflowBinding, u as VercelWorkflowProviderOptions, v as WorkflowHandler, w as WorkflowRun, x as WorkflowProvider, y as WorkflowModuleOptions } from "./types-ThDitg7Z.js";
|
|
2
|
+
import { createWorkflowCloudflareWorker } from "./runtime/cloudflare-vite.js";
|
|
3
|
+
import { createOpenWorkflowWorker, startOpenWorkflowWorker } from "./runtime/openworkflow-worker.js";
|
|
4
|
+
|
|
5
|
+
//#region src/config.d.ts
|
|
6
|
+
interface WorkflowResolutionInput {
|
|
7
|
+
hosting?: string;
|
|
8
|
+
}
|
|
9
|
+
declare function normalizeWorkflowOptions(options: WorkflowModuleOptions | undefined, input?: WorkflowResolutionInput): ResolvedWorkflowOptions | undefined;
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/definition.d.ts
|
|
12
|
+
declare function defineWorkflow<TPayload = unknown, TResult = unknown>(handler: WorkflowHandler<TPayload, TResult>, options?: WorkflowDefinitionOptions): WorkflowDefinition<TPayload, TResult>;
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/errors.d.ts
|
|
15
|
+
interface WorkflowErrorOptions {
|
|
16
|
+
cause?: unknown;
|
|
17
|
+
code?: string;
|
|
18
|
+
details?: Record<string, unknown>;
|
|
19
|
+
httpStatus?: number;
|
|
20
|
+
provider?: string;
|
|
21
|
+
}
|
|
22
|
+
declare class WorkflowError extends Error {
|
|
23
|
+
readonly code?: string;
|
|
24
|
+
readonly details?: Record<string, unknown>;
|
|
25
|
+
readonly httpStatus?: number;
|
|
26
|
+
readonly provider?: string;
|
|
27
|
+
constructor(message: string, options?: WorkflowErrorOptions);
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/integrations/cloudflare.d.ts
|
|
31
|
+
declare function getCloudflareWorkflowBindingName(name: string): string;
|
|
32
|
+
declare function getCloudflareWorkflowName(name: string): string;
|
|
33
|
+
declare function getCloudflareWorkflowClassName(name: string): string;
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/integrations/vercel.d.ts
|
|
36
|
+
declare function getVercelWorkflowName(name: string): string;
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region src/runtime/client.d.ts
|
|
39
|
+
declare function createWorkflow<TPayload = unknown, TResult = unknown>(options: WorkflowCreateOptions<TPayload, TResult> & {
|
|
40
|
+
handler: WorkflowHandler<TPayload, TResult>;
|
|
41
|
+
name: string;
|
|
42
|
+
}): WorkflowHandle<TPayload, TResult>;
|
|
43
|
+
declare function createWorkflow<TPayload = unknown, TResult = unknown>(name: string, options?: WorkflowCreateOptions<TPayload, TResult>): WorkflowHandle<TPayload, TResult>;
|
|
44
|
+
declare function createWorkflow<TPayload = unknown, TResult = unknown>(name: string, handler: WorkflowHandler<TPayload, TResult>, options?: WorkflowCreateOptions<TPayload, TResult>): WorkflowHandle<TPayload, TResult>;
|
|
45
|
+
declare function runWorkflow<TPayload = unknown, TResult = unknown>(name: string, payload?: TPayload, options?: WorkflowDeferOptions): Promise<WorkflowRun<TPayload, TResult>>;
|
|
46
|
+
declare function getWorkflowRun<TPayload = unknown, TResult = unknown>(name: string, id: string): Promise<WorkflowRun<TPayload, TResult>>;
|
|
47
|
+
declare function deferWorkflow<TPayload = unknown>(name: string, payload?: TPayload, options?: WorkflowStartOptions): Promise<WorkflowRun<TPayload>>;
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/runtime/payload.d.ts
|
|
50
|
+
interface PayloadSchema<T> {
|
|
51
|
+
safeParse: (payload: unknown) => {
|
|
52
|
+
success: boolean;
|
|
53
|
+
data?: T;
|
|
54
|
+
error?: unknown;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
interface ParsePayloadSchema<T> {
|
|
58
|
+
parse: (payload: unknown) => T;
|
|
59
|
+
}
|
|
60
|
+
type PayloadValidator<T> = PayloadSchema<T> | ParsePayloadSchema<T> | ((payload: unknown) => T | Promise<T>);
|
|
61
|
+
declare function readRequestPayload<T = unknown>(request: Request): Promise<T>;
|
|
62
|
+
declare function validatePayload<T>(payload: unknown, schema: PayloadValidator<T>): Promise<T>;
|
|
63
|
+
declare function readValidatedPayload<T>(request: Request, schema: PayloadValidator<T>): Promise<T>;
|
|
64
|
+
//#endregion
|
|
65
|
+
export { type CloudflareWorkflowBinding, type CloudflareWorkflowInstance, type CloudflareWorkflowProviderOptions, type DiscoveredWorkflowDefinition, type InferredWorkflowProviderOptions, type OpenWorkflowPostgresOptions, type OpenWorkflowProviderOptions, type OpenWorkflowWorkerOptions, type ResolvedWorkflowOptions, type VercelWorkflowProviderOptions, type WorkflowCreateOptions, type WorkflowDeferOptions, type WorkflowDefinition, type WorkflowDefinitionOptions, type WorkflowDefinitionRegistry, WorkflowError, type WorkflowExecutionContext, type WorkflowHandle, type WorkflowHandler, type WorkflowModuleOptions, type WorkflowModuleProviderOptions, type WorkflowProvider, type WorkflowProviderOptions, type WorkflowProviderStep, type WorkflowRun, type WorkflowRunStatus, type WorkflowSharedOptions, type WorkflowStartOptions, type WorkflowStepFunction, type WorkflowStepOptions, type WorkflowStepRunner, createOpenWorkflowWorker, createWorkflow, createWorkflowCloudflareWorker, deferWorkflow, defineWorkflow, getCloudflareWorkflowBindingName, getCloudflareWorkflowClassName, getCloudflareWorkflowName, getVercelWorkflowName, getWorkflowRun, normalizeWorkflowOptions, readRequestPayload, readValidatedPayload, runWorkflow, startOpenWorkflowWorker, validatePayload };
|