@vibes.diy/vibe-runtime 3.0.3 → 3.0.4

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.
@@ -0,0 +1,24 @@
1
+ import { type WorkerLoaderBinding } from "./worker-loader-executor.js";
2
+ export type BackendHandler = "fetch" | "scheduled" | "onChange";
3
+ export interface BackendTrigger {
4
+ readonly userHandle?: string | null;
5
+ readonly sourceTag?: string;
6
+ readonly depth?: number;
7
+ readonly dedupeKey?: string;
8
+ readonly payload?: unknown;
9
+ }
10
+ export interface BackendInvokeInput {
11
+ readonly source: string;
12
+ readonly handler: BackendHandler;
13
+ readonly trigger: BackendTrigger;
14
+ }
15
+ export interface BackendExecutor {
16
+ invoke(input: BackendInvokeInput): Promise<Response>;
17
+ }
18
+ export type BackendJsMode = "off" | "loader";
19
+ export declare function parseBackendJsMode(raw: string | undefined): BackendJsMode;
20
+ export interface SelectBackendExecutorOptions {
21
+ readonly loader?: WorkerLoaderBinding;
22
+ readonly policyVersion?: string;
23
+ }
24
+ export declare function selectBackendExecutor(mode: BackendJsMode, opts?: SelectBackendExecutorOptions): BackendExecutor | undefined;
@@ -0,0 +1,21 @@
1
+ import { WorkerLoaderBackendExecutor } from "./backend-worker-loader-executor.js";
2
+ export function parseBackendJsMode(raw) {
3
+ switch ((raw ?? "").trim().toLowerCase()) {
4
+ case "loader":
5
+ return "loader";
6
+ default:
7
+ return "off";
8
+ }
9
+ }
10
+ export function selectBackendExecutor(mode, opts = {}) {
11
+ switch (mode) {
12
+ case "off":
13
+ return undefined;
14
+ case "loader":
15
+ if (opts.loader === undefined) {
16
+ throw new Error("BACKEND_JS=loader requires a Worker Loader (env.LOADER) binding");
17
+ }
18
+ return new WorkerLoaderBackendExecutor(opts.loader, { policyVersion: opts.policyVersion });
19
+ }
20
+ }
21
+ //# sourceMappingURL=backend-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-executor.js","sourceRoot":"","sources":["../jsr/backend-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AA4ElF,MAAM,UAAU,kBAAkB,CAAC,GAAuB;IACxD,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACzC,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAyBD,MAAM,UAAU,qBAAqB,CAAC,IAAmB,EAAE,IAAI,GAAiC,EAAE;IAChG,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK;YACR,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ;YACX,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,IAAI,2BAA2B,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type WorkerCode, type WorkerLoaderBinding } from "./worker-loader-executor.js";
2
+ import { type BackendExecutor, type BackendInvokeInput } from "./backend-executor.js";
3
+ export declare function buildBackendWorkerCode(input: {
4
+ module: string;
5
+ policyVersion?: string;
6
+ }): WorkerCode;
7
+ export declare class WorkerLoaderBackendExecutor implements BackendExecutor {
8
+ private readonly loader;
9
+ private readonly opts;
10
+ constructor(loader: WorkerLoaderBinding, opts?: {
11
+ readonly policyVersion?: string;
12
+ });
13
+ invoke(input: BackendInvokeInput): Promise<Response>;
14
+ }
@@ -0,0 +1,77 @@
1
+ import { TxtEnDecoderSingleton } from "@adviser/cement";
2
+ import { transformBackendSource } from "./transform-backend-source.js";
3
+ const MAIN_MODULE = "main.js";
4
+ const BACKEND_MODULE = "backend.js";
5
+ const COMPATIBILITY_DATE = "2025-05-01";
6
+ const BACKEND_REQUEST_URL = "https://vibe-backend.internal/";
7
+ export function buildBackendWorkerCode(input) {
8
+ const policyVersion = input.policyVersion ?? "v1";
9
+ const main = [
10
+ `// backend-isolate policy=${policyVersion}`,
11
+ `import * as handlers from "./${BACKEND_MODULE}";`,
12
+ `export default {`,
13
+ ` async fetch(request) {`,
14
+ ` const { handler, trigger } = await request.json();`,
15
+ ` const ALLOWED_HANDLERS = { fetch: true, scheduled: true, onChange: true };`,
16
+ ` if (!Object.prototype.hasOwnProperty.call(ALLOWED_HANDLERS, handler)) {`,
17
+ ` return new Response("invalid backend handler: " + handler, { status: 400 });`,
18
+ ` }`,
19
+ ` const ctx = {`,
20
+ ` appInfo: (trigger && trigger.appInfo) || null,`,
21
+ ` userInfo: trigger && trigger.userHandle ? { userHandle: trigger.userHandle } : null,`,
22
+ ` };`,
23
+ ` const fn = handlers[handler];`,
24
+ ` if (typeof fn !== "function") {`,
25
+ ` return new Response("no backend handler: " + handler, { status: 404 });`,
26
+ ` }`,
27
+ ` if (handler === "fetch") {`,
28
+ ` const p = (trigger && trigger.payload) || {};`,
29
+ ` const userReq = new Request(p.url || "https://vibe.internal/", {`,
30
+ ` method: p.method, headers: p.headers, body: p.body,`,
31
+ ` });`,
32
+ ` return await fn(userReq, ctx);`,
33
+ ` }`,
34
+ ` await fn((trigger && trigger.payload) || {}, ctx);`,
35
+ ` return new Response(null, { status: 204 });`,
36
+ ` },`,
37
+ `};`,
38
+ ``,
39
+ ].join("\n");
40
+ return {
41
+ compatibilityDate: COMPATIBILITY_DATE,
42
+ mainModule: MAIN_MODULE,
43
+ modules: {
44
+ [MAIN_MODULE]: main,
45
+ [BACKEND_MODULE]: input.module,
46
+ },
47
+ globalOutbound: null,
48
+ };
49
+ }
50
+ async function hashBackendWorkerCode(code) {
51
+ const payload = `${code.compatibilityDate}\n${code.mainModule}\n${JSON.stringify(code.modules)}`;
52
+ const digest = await crypto.subtle.digest("SHA-256", TxtEnDecoderSingleton().encode(payload));
53
+ return Array.from(new Uint8Array(digest))
54
+ .map((b) => b.toString(16).padStart(2, "0"))
55
+ .join("");
56
+ }
57
+ export class WorkerLoaderBackendExecutor {
58
+ loader;
59
+ opts;
60
+ constructor(loader, opts = {}) {
61
+ this.loader = loader;
62
+ this.opts = opts;
63
+ }
64
+ async invoke(input) {
65
+ const { module } = transformBackendSource(input.source);
66
+ const code = buildBackendWorkerCode({ module, policyVersion: this.opts.policyVersion });
67
+ const id = await hashBackendWorkerCode(code);
68
+ const stub = this.loader.get(id, () => code);
69
+ const request = new Request(BACKEND_REQUEST_URL, {
70
+ method: "POST",
71
+ headers: { "content-type": "application/json" },
72
+ body: JSON.stringify({ handler: input.handler, trigger: input.trigger }),
73
+ });
74
+ return stub.getEntrypoint().fetch(request);
75
+ }
76
+ }
77
+ //# sourceMappingURL=backend-worker-loader-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-worker-loader-executor.js","sourceRoot":"","sources":["../jsr/backend-worker-loader-executor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,22 @@
1
1
  {
2
2
  "name": "@vibes.diy/vibe-runtime",
3
- "version": "3.0.3",
3
+ "version": "3.0.4",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
+ "exports": {
7
+ ".": "./index.js",
8
+ "./vibe-executor.js": "./vibe-executor.js",
9
+ "./worker-loader-executor.js": "./worker-loader-executor.js",
10
+ "./ssr-source-check.js": "./ssr-source-check.js",
11
+ "./render-vibes.js": "./render-vibes.js"
12
+ },
6
13
  "scripts": {
7
14
  "build": "core-cli tsc"
8
15
  },
9
16
  "dependencies": {
10
17
  "@adviser/cement": "~0.5.34",
11
- "@vibes.diy/base": "3.0.3",
12
- "@vibes.diy/vibe-types": "3.0.3",
18
+ "@vibes.diy/base": "3.0.4",
19
+ "@vibes.diy/vibe-types": "3.0.4",
13
20
  "arktype": "~2.2.1",
14
21
  "charwise": "~3.0.1",
15
22
  "es-module-lexer": "~2.1.0",
@@ -0,0 +1,14 @@
1
+ import type { BackendHandler } from "./backend-executor.js";
2
+ export declare const MIN_INTERVAL_MS = 5000;
3
+ export declare const MAX_INTERVAL_MS = 3600000;
4
+ export interface BackendSchedule {
5
+ readonly intervalMs: number;
6
+ readonly raw: string;
7
+ }
8
+ export interface BackendConfigParseResult {
9
+ readonly handlers: BackendHandler[];
10
+ readonly hasConfig: boolean;
11
+ readonly schedule?: BackendSchedule;
12
+ readonly errors: string[];
13
+ }
14
+ export declare function parseBackendConfig(source: string | undefined): BackendConfigParseResult;
@@ -0,0 +1,102 @@
1
+ export const MIN_INTERVAL_MS = 5_000;
2
+ export const MAX_INTERVAL_MS = 3_600_000;
3
+ const HANDLER_NAMES = ["fetch", "scheduled", "onChange"];
4
+ function exportsName(source, name) {
5
+ const decl = new RegExp(`export\\s+(?:async\\s+)?(?:function\\s+${name}\\b|(?:const|let|var)\\s+${name}\\b)`);
6
+ if (decl.test(source))
7
+ return true;
8
+ const listPattern = /export\s*\{([^}]*)\}/g;
9
+ let m;
10
+ while ((m = listPattern.exec(source)) !== null) {
11
+ const inner = m[1];
12
+ const bareOrAliased = new RegExp(`(?:\\bas\\s+${name}\\b|(?:^|,)\\s*${name}\\s*(?:,|$))`);
13
+ if (bareOrAliased.test(inner))
14
+ return true;
15
+ }
16
+ return false;
17
+ }
18
+ function parseDurationMs(raw) {
19
+ const m = /^(\d+)\s*(s|m|h)$/.exec(raw.trim());
20
+ if (m === null)
21
+ return undefined;
22
+ const n = Number.parseInt(m[1], 10);
23
+ if (!Number.isFinite(n))
24
+ return undefined;
25
+ const mult = m[2] === "s" ? 1_000 : m[2] === "m" ? 60_000 : 3_600_000;
26
+ return n * mult;
27
+ }
28
+ function sliceBalancedObject(source, openIdx) {
29
+ let depth = 0;
30
+ let quote = null;
31
+ for (let i = openIdx; i < source.length; i++) {
32
+ const ch = source[i];
33
+ if (quote !== null) {
34
+ if (ch === "\\") {
35
+ i++;
36
+ continue;
37
+ }
38
+ if (ch === quote)
39
+ quote = null;
40
+ continue;
41
+ }
42
+ if (ch === '"' || ch === "'" || ch === "`") {
43
+ quote = ch;
44
+ }
45
+ else if (ch === "{") {
46
+ depth++;
47
+ }
48
+ else if (ch === "}") {
49
+ depth--;
50
+ if (depth === 0)
51
+ return source.slice(openIdx, i + 1);
52
+ }
53
+ }
54
+ return undefined;
55
+ }
56
+ function extractConfigObject(source) {
57
+ const decl = /(?:export\s+)?(?:const|let|var)\s+config\s*=\s*\{/.exec(source);
58
+ if (decl === null)
59
+ return undefined;
60
+ const openIdx = decl.index + decl[0].length - 1;
61
+ return sliceBalancedObject(source, openIdx);
62
+ }
63
+ function extractIntervalLiteral(source) {
64
+ const configObj = extractConfigObject(source);
65
+ if (configObj === undefined)
66
+ return undefined;
67
+ const m = /scheduled\s*:\s*\{[^}]*?\binterval\s*:\s*["']([^"']+)["']/s.exec(configObj);
68
+ return m?.[1];
69
+ }
70
+ export function parseBackendConfig(source) {
71
+ const errors = [];
72
+ if (source === undefined || source.trim() === "") {
73
+ return { handlers: [], hasConfig: false, errors };
74
+ }
75
+ const handlers = HANDLER_NAMES.filter((name) => exportsName(source, name));
76
+ const hasConfig = exportsName(source, "config");
77
+ const hasScheduled = handlers.includes("scheduled");
78
+ let schedule;
79
+ const rawInterval = extractIntervalLiteral(source);
80
+ if (hasScheduled) {
81
+ if (rawInterval === undefined) {
82
+ errors.push('scheduled handler requires config.scheduled.interval as a static string-literal duration, e.g. { scheduled: { interval: "5m" } }; computed/indirect values are unsupported');
83
+ }
84
+ else {
85
+ const intervalMs = parseDurationMs(rawInterval);
86
+ if (intervalMs === undefined) {
87
+ errors.push(`config.scheduled.interval "${rawInterval}" is not a valid duration — use a string literal like "5s", "1m", or "1h"`);
88
+ }
89
+ else if (intervalMs < MIN_INTERVAL_MS) {
90
+ errors.push(`config.scheduled.interval "${rawInterval}" is faster than the 5s minimum`);
91
+ }
92
+ else if (intervalMs > MAX_INTERVAL_MS) {
93
+ errors.push(`config.scheduled.interval "${rawInterval}" is slower than the 1h maximum`);
94
+ }
95
+ else {
96
+ schedule = { intervalMs, raw: rawInterval };
97
+ }
98
+ }
99
+ }
100
+ return { handlers, hasConfig, schedule, errors };
101
+ }
102
+ //# sourceMappingURL=parse-backend-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-backend-config.js","sourceRoot":"","sources":["../jsr/parse-backend-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type TransformResult } from "./transform-vibe-source.js";
2
+ export declare function transformBackendSource(src: string): TransformResult;
@@ -0,0 +1,5 @@
1
+ import { transformVibeSource } from "./transform-vibe-source.js";
2
+ export function transformBackendSource(src) {
3
+ return transformVibeSource(src);
4
+ }
5
+ //# sourceMappingURL=transform-backend-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-backend-source.js","sourceRoot":"","sources":["../jsr/transform-backend-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAwB,MAAM,4BAA4B,CAAC;AAYvF,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC"}