@fold-run/cli 0.1.3 → 0.2.0

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.
Files changed (46) hide show
  1. package/dist/commands/completions.d.ts +1 -0
  2. package/dist/commands/completions.js +195 -0
  3. package/dist/commands/completions.js.map +1 -0
  4. package/dist/commands/config.d.ts +4 -0
  5. package/dist/commands/config.js +75 -0
  6. package/dist/commands/config.js.map +1 -0
  7. package/dist/commands/deploy.d.ts +1 -0
  8. package/dist/commands/deploy.js +35 -2
  9. package/dist/commands/deploy.js.map +1 -1
  10. package/dist/commands/dev.d.ts +1 -0
  11. package/dist/commands/dev.js +41 -21
  12. package/dist/commands/dev.js.map +1 -1
  13. package/dist/commands/doctor.d.ts +1 -0
  14. package/dist/commands/doctor.js +138 -0
  15. package/dist/commands/doctor.js.map +1 -0
  16. package/dist/commands/domains.d.ts +11 -0
  17. package/dist/commands/domains.js +111 -0
  18. package/dist/commands/domains.js.map +1 -0
  19. package/dist/commands/init.d.ts +1 -0
  20. package/dist/commands/init.js +104 -6
  21. package/dist/commands/init.js.map +1 -1
  22. package/dist/commands/invoke.d.ts +9 -0
  23. package/dist/commands/invoke.js +89 -0
  24. package/dist/commands/invoke.js.map +1 -0
  25. package/dist/commands/link.d.ts +4 -0
  26. package/dist/commands/link.js +77 -0
  27. package/dist/commands/link.js.map +1 -0
  28. package/dist/commands/logs.js +31 -1
  29. package/dist/commands/logs.js.map +1 -1
  30. package/dist/commands/whoami.d.ts +1 -0
  31. package/dist/commands/whoami.js +39 -0
  32. package/dist/commands/whoami.js.map +1 -0
  33. package/dist/index.js +72 -29
  34. package/dist/index.js.map +1 -1
  35. package/dist/lib/api.d.ts +1 -0
  36. package/dist/lib/api.js +30 -0
  37. package/dist/lib/api.js.map +1 -1
  38. package/dist/lib/bundler.js +124 -18
  39. package/dist/lib/bundler.js.map +1 -1
  40. package/dist/lib/colorize.d.ts +5 -0
  41. package/dist/lib/colorize.js +28 -0
  42. package/dist/lib/colorize.js.map +1 -0
  43. package/dist/lib/prompt.d.ts +22 -0
  44. package/dist/lib/prompt.js +146 -0
  45. package/dist/lib/prompt.js.map +1 -1
  46. package/package.json +10 -11
package/dist/index.js CHANGED
@@ -1,13 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { Command } from 'commander';
4
+ import { completionsCommand } from './commands/completions.js';
5
+ import { configGetCommand, configListCommand, configPathCommand, configSetCommand } from './commands/config.js';
4
6
  import { createToolCommand, toolsListCommand } from './commands/create-tool.js';
5
7
  import { deleteCommand } from './commands/delete.js';
6
8
  import { deployCommand } from './commands/deploy.js';
7
9
  import { devCommand } from './commands/dev.js';
10
+ import { doctorCommand } from './commands/doctor.js';
11
+ import { domainsAddCommand, domainsListCommand, domainsRemoveCommand, domainsVerifyCommand, } from './commands/domains.js';
8
12
  import { envDeleteCommand, envListCommand, envSetCommand } from './commands/env-vars.js';
9
13
  import { functionsCommand } from './commands/functions.js';
10
14
  import { initCommand } from './commands/init.js';
15
+ import { invokeCommand } from './commands/invoke.js';
16
+ import { linkCommand } from './commands/link.js';
11
17
  import { loginCommand } from './commands/login.js';
12
18
  import { logsCommand } from './commands/logs.js';
13
19
  import { openCommand } from './commands/open.js';
@@ -19,7 +25,8 @@ import { tailCommand } from './commands/tail.js';
19
25
  import { templatesDeployCommand, templatesGetCommand, templatesListCommand } from './commands/templates.js';
20
26
  import { tenantClearCommand, tenantGetCommand, tenantListCommand, tenantSetCommand } from './commands/tenant.js';
21
27
  import { webhooksCreateCommand, webhooksDeleteCommand, webhooksListCommand } from './commands/webhooks.js';
22
- import { deleteConfig, loadConfig } from './lib/config.js';
28
+ import { whoamiCommand } from './commands/whoami.js';
29
+ import { deleteConfig } from './lib/config.js';
23
30
  import { setJsonMode } from './lib/output.js';
24
31
  const require = createRequire(import.meta.url);
25
32
  const { version } = require('../package.json');
@@ -41,20 +48,30 @@ program
41
48
  .addHelpText('beforeAll', `\n\x1b[1mfold.run\x1b[0m v${version}\n`)
42
49
  .addHelpText('after', `
43
50
  Examples:
44
- $ fold init my-function Scaffold a new project
51
+ $ fold init my-function Scaffold a new project (interactive)
52
+ $ fold init my-fn --yes Scaffold with defaults (non-interactive)
53
+ $ fold link Link local dir to deployed function
45
54
  $ fold deploy Deploy using fold.json
46
55
  $ fold deploy function.ts Deploy a specific file
56
+ $ fold deploy --dry-run Preview deploy without sending
57
+ $ fold invoke my-fn -d '{}' Invoke a function directly
47
58
  $ fold dev Start local dev server (auto-reloads)
59
+ $ fold dev --mode production Use .env.production vars
60
+ $ fold domains add example.com Add a custom domain
48
61
  $ fold open my-function Open function URL in browser
49
62
  $ fold tail -f fn-1 Stream activations in real-time
50
- $ fold logs -F Poll activation logs
63
+ $ fold logs -F -v Follow logs with colored JSON
51
64
  $ fold functions --json List functions as JSON
52
- $ fold secrets set API_KEY Set a secret (masked input)`);
65
+ $ fold secrets set API_KEY Set a secret (masked input)
66
+ $ fold config set apiUrl ... Change API URL
67
+ $ fold doctor Diagnose common issues
68
+ $ fold completions zsh Generate shell completions`);
53
69
  // ── Getting started ──────────────────────────────────────────────
54
70
  program
55
71
  .command('init [name]')
56
- .description('Scaffold a new fold project')
57
- .action((name) => initCommand({ name }));
72
+ .description('Scaffold a new fold project (interactive)')
73
+ .option('-y, --yes', 'Skip prompts and use defaults')
74
+ .action((name, opts) => initCommand({ name, yes: opts.yes }));
58
75
  program
59
76
  .command('login')
60
77
  .description('Authenticate with the fold.run API')
@@ -71,34 +88,13 @@ program
71
88
  console.log('No credentials found.');
72
89
  }
73
90
  });
74
- program
75
- .command('whoami')
76
- .description('Show current login info')
77
- .action(() => {
78
- const config = loadConfig();
79
- if (!config) {
80
- console.log('Not logged in. Run `fold login` first.');
81
- return;
82
- }
83
- console.log(`API: ${config.apiUrl}`);
84
- if (config.tenantId)
85
- console.log(`Tenant: ${config.tenantId}`);
86
- try {
87
- const payload = JSON.parse(Buffer.from(config.token.split('.')[1], 'base64url').toString());
88
- if (payload.role)
89
- console.log(`Role: ${payload.role}`);
90
- if (payload.tenant_id)
91
- console.log(`JWT tenant: ${payload.tenant_id}`);
92
- }
93
- catch {
94
- console.log('Token: (not a JWT)');
95
- }
96
- });
91
+ program.command('whoami').description('Show current login info').action(whoamiCommand);
97
92
  program
98
93
  .command('status')
99
94
  .description('Show current config and deployed functions')
100
95
  .option('-t, --tenant <id>', 'Tenant ID')
101
96
  .action(statusCommand);
97
+ program.command('doctor').description('Diagnose common issues (auth, API, esbuild, manifest)').action(doctorCommand);
102
98
  // ── Tenant ──────────────────────────────────────────────────────
103
99
  const tenant = program.command('tenant').description('Manage default tenant');
104
100
  tenant.command('set <tenant-id>').description('Set the default tenant for all commands').action(tenantSetCommand);
@@ -106,19 +102,38 @@ tenant.command('get').description('Show the current default tenant').action(tena
106
102
  tenant.command('list').description('List all accessible tenants').action(tenantListCommand);
107
103
  tenant.command('clear').description('Clear the default tenant').action(tenantClearCommand);
108
104
  // ── Deploy & manage ──────────────────────────────────────────────
105
+ program
106
+ .command('link')
107
+ .description('Link local directory to an existing deployed function')
108
+ .option('-t, --tenant <id>', 'Tenant ID')
109
+ .option('-y, --yes', 'Overwrite existing fold.json without confirming')
110
+ .action(linkCommand);
109
111
  program
110
112
  .command('deploy [file]')
111
113
  .description('Deploy a function (reads fold.json if no file given)')
112
114
  .option('-n, --name <name>', 'Function name (defaults to filename)')
113
115
  .option('-t, --tenant <id>', 'Tenant ID')
114
116
  .option('--no-bundle', 'Skip esbuild bundling for .ts files')
117
+ .option('--dry-run', 'Bundle and validate without deploying')
115
118
  .action(deployCommand);
119
+ program
120
+ .command('invoke <function>')
121
+ .description('Invoke a deployed function directly')
122
+ .option('-d, --data <json>', 'Request body (JSON string)')
123
+ .option('-f, --file <path>', 'Read request body from file')
124
+ .option('-X, --method <method>', 'HTTP method (default: GET, or POST if body given)')
125
+ .option('-p, --path <path>', 'Request path (default: /)')
126
+ .option('-H, --header <key:value>', 'Custom header (can be repeated)', (v, a) => [...a, v], [])
127
+ .option('-s, --stream', 'Print streaming response body as-is')
128
+ .option('-t, --tenant <id>', 'Tenant ID')
129
+ .action(invokeCommand);
116
130
  program
117
131
  .command('dev [file]')
118
132
  .description('Start a local dev server with auto-reload')
119
133
  .option('-p, --port <port>', 'Port to listen on', '8000')
120
134
  .option('--no-bundle', 'Skip esbuild bundling for .ts files')
121
135
  .option('--no-watch', 'Disable file watching and auto-reload')
136
+ .option('--mode <mode>', 'Environment mode for .env file loading (default: development)')
122
137
  .option('-e, --env <KEY=VALUE>', 'Set an env var (can be repeated; also auto-loads .env)', (v, a) => [...a, v], [])
123
138
  .action(devCommand);
124
139
  program
@@ -157,6 +172,11 @@ program
157
172
  .option('-v, --verbose', 'Show request details and console logs')
158
173
  .action(logsCommand);
159
174
  // ── Configuration ────────────────────────────────────────────────
175
+ const configCmd = program.command('config').description('View and update CLI configuration');
176
+ configCmd.command('get <key>').description('Get a config value (apiUrl, tenantId)').action(configGetCommand);
177
+ configCmd.command('set <key> <value>').description('Set a config value').action(configSetCommand);
178
+ configCmd.command('list').description('List all config values').action(configListCommand);
179
+ configCmd.command('path').description('Print config file path').action(configPathCommand);
160
180
  const secrets = program.command('secrets').description('Manage tenant secrets');
161
181
  secrets
162
182
  .command('set <name>')
@@ -192,6 +212,24 @@ env
192
212
  .option('-y, --yes', 'Skip confirmation prompt')
193
213
  .action(envDeleteCommand);
194
214
  // ── Integrations ─────────────────────────────────────────────────
215
+ const domains = program.command('domains').description('Manage custom domains');
216
+ domains
217
+ .command('list')
218
+ .description('List custom domains')
219
+ .option('-t, --tenant <id>', 'Tenant ID')
220
+ .action(domainsListCommand);
221
+ domains
222
+ .command('add <hostname>')
223
+ .description('Add a custom domain')
224
+ .option('-t, --tenant <id>', 'Tenant ID')
225
+ .option('-f, --function-id <id>', 'Route to specific function')
226
+ .action(domainsAddCommand);
227
+ domains
228
+ .command('remove <domain-id>')
229
+ .description('Remove a custom domain')
230
+ .option('-y, --yes', 'Skip confirmation prompt')
231
+ .action(domainsRemoveCommand);
232
+ domains.command('verify <domain-id>').description('Verify DNS ownership of a domain').action(domainsVerifyCommand);
195
233
  const webhooks = program.command('webhooks').description('Manage webhook ingress endpoints');
196
234
  webhooks
197
235
  .command('list')
@@ -258,6 +296,11 @@ templates
258
296
  .option('-n, --name <name>', 'Function name (defaults to template name)')
259
297
  .option('-t, --tenant <id>', 'Tenant ID')
260
298
  .action(templatesDeployCommand);
299
+ // ── Utilities ───────────────────────────────────────────────────
300
+ program
301
+ .command('completions <shell>')
302
+ .description('Generate shell completions (bash, zsh, fish)')
303
+ .action(completionsCommand);
261
304
  // Start version check early (non-blocking)
262
305
  import { checkForUpdate, printUpdateNotice } from './lib/version-check.js';
263
306
  const updateCheck = checkForUpdate();
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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"}
package/dist/lib/api.d.ts CHANGED
@@ -9,4 +9,5 @@ export declare function apiFetch(config: FoldConfig, path: string, opts?: {
9
9
  method?: string;
10
10
  body?: unknown;
11
11
  timeout?: number;
12
+ retries?: number;
12
13
  }): Promise<unknown>;
package/dist/lib/api.js CHANGED
@@ -1,4 +1,34 @@
1
+ /** Status codes that are safe to retry (transient server/gateway errors). */
2
+ const RETRYABLE_STATUS = new Set([502, 503, 504]);
1
3
  export async function apiFetch(config, path, opts) {
4
+ const maxRetries = opts?.retries ?? 0;
5
+ let lastError;
6
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
7
+ if (attempt > 0) {
8
+ // Exponential backoff: 1s, 2s
9
+ await new Promise((r) => setTimeout(r, 1000 * attempt));
10
+ }
11
+ try {
12
+ return await _apiFetchOnce(config, path, opts);
13
+ }
14
+ catch (err) {
15
+ lastError = err instanceof Error ? err : new Error(String(err));
16
+ // Only retry on transient errors (502/503/504 or network failures)
17
+ const isRetryable = RETRYABLE_STATUS.has(statusFromError(lastError)) ||
18
+ lastError.message.includes('fetch failed') ||
19
+ lastError.message.includes('ECONNREFUSED');
20
+ if (!isRetryable || attempt === maxRetries) {
21
+ throw lastError;
22
+ }
23
+ }
24
+ }
25
+ throw lastError;
26
+ }
27
+ function statusFromError(err) {
28
+ const match = err.message.match(/^\[(\d{3})\]/);
29
+ return match ? Number.parseInt(match[1], 10) : 0;
30
+ }
31
+ async function _apiFetchOnce(config, path, opts) {
2
32
  const url = `${config.apiUrl}${path}`;
3
33
  const headers = {
4
34
  Authorization: `Bearer ${config.token}`,
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAkB,EAClB,IAAY,EACZ,IAA4D;IAE5D,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;IACtC,MAAM,OAAO,GAA2B;QACtC,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;KACxC,CAAC;IACF,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACrD,OAAO;QACP,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QACxD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,wDAAwD;IACxD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAY,CAAC;IAE3C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,IAAgB,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -2,40 +2,113 @@ import { build } from 'esbuild';
2
2
  /**
3
3
  * Dev shim for @fold-run/runtime — stubs all platform bindings for local development.
4
4
  * Injected by the esbuild plugin when bundling for `fold dev`.
5
+ *
6
+ * Stubs provide functional in-memory implementations for KV and Storage,
7
+ * logged no-ops for AI/Queue/Vectorize, and middleware support in defineHandler.
5
8
  */
6
9
  const FOLD_RUNTIME_DEV_SHIM = `
7
10
  class DevKV {
8
11
  constructor() { this._store = new Map(); }
9
- async get(key) { return this._store.get(key) ?? null; }
10
- async put(key, value) { this._store.set(key, value); }
12
+ async get(key, opts) {
13
+ const val = this._store.get(key);
14
+ if (val === undefined) return null;
15
+ if (opts?.type === 'json') return JSON.parse(val);
16
+ if (opts?.type === 'arrayBuffer') return new TextEncoder().encode(val).buffer;
17
+ return val;
18
+ }
19
+ async put(key, value, opts) {
20
+ const str = typeof value === 'string' ? value : '[binary]';
21
+ this._store.set(key, str);
22
+ if (opts?.expirationTtl) {
23
+ setTimeout(() => this._store.delete(key), opts.expirationTtl * 1000);
24
+ }
25
+ }
11
26
  async delete(key) { this._store.delete(key); }
12
27
  async list(opts) {
13
- const keys = [...this._store.keys()].filter(k => !opts?.prefix || k.startsWith(opts.prefix));
14
- return { keys: keys.slice(0, opts?.limit ?? 1000).map(name => ({ name })) };
28
+ const all = [...this._store.keys()];
29
+ const filtered = opts?.prefix ? all.filter(k => k.startsWith(opts.prefix)) : all;
30
+ const limited = filtered.slice(0, opts?.limit ?? 1000);
31
+ return { keys: limited.map(name => ({ name })), list_complete: limited.length === filtered.length, cursor: undefined };
15
32
  }
16
33
  }
34
+
17
35
  class DevStorage {
18
- async put() { console.warn('[fold dev] Storage binding not available locally'); }
19
- async get() { return null; }
20
- async delete() {}
21
- async list() { return { objects: [] }; }
36
+ constructor() { this._store = new Map(); }
37
+ async put(key, value) {
38
+ let body;
39
+ if (typeof value === 'string') body = value;
40
+ else if (value instanceof ArrayBuffer) body = new TextDecoder().decode(value);
41
+ else body = '[stream/blob]';
42
+ const obj = { key, size: body.length, etag: Math.random().toString(36).slice(2), uploaded: new Date(), body };
43
+ this._store.set(key, obj);
44
+ return { key: obj.key, size: obj.size, etag: obj.etag, uploaded: obj.uploaded };
45
+ }
46
+ async get(key) {
47
+ const obj = this._store.get(key);
48
+ if (!obj) return null;
49
+ const body = obj.body;
50
+ return {
51
+ key: obj.key, size: obj.size, etag: obj.etag, uploaded: obj.uploaded,
52
+ body: new ReadableStream({ start(c) { c.enqueue(new TextEncoder().encode(body)); c.close(); } }),
53
+ bodyUsed: false,
54
+ text: async () => body,
55
+ json: async () => JSON.parse(body),
56
+ arrayBuffer: async () => new TextEncoder().encode(body).buffer,
57
+ blob: async () => new Blob([body]),
58
+ };
59
+ }
60
+ async head(key) {
61
+ const obj = this._store.get(key);
62
+ if (!obj) return null;
63
+ return { key: obj.key, size: obj.size, etag: obj.etag, uploaded: obj.uploaded };
64
+ }
65
+ async delete(keys) {
66
+ const arr = Array.isArray(keys) ? keys : [keys];
67
+ for (const k of arr) this._store.delete(k);
68
+ }
69
+ async list(opts) {
70
+ const all = [...this._store.keys()];
71
+ const filtered = opts?.prefix ? all.filter(k => k.startsWith(opts.prefix)) : all;
72
+ const limited = filtered.slice(0, opts?.limit ?? 1000);
73
+ return {
74
+ objects: limited.map(k => { const o = this._store.get(k); return { key: o.key, size: o.size, etag: o.etag, uploaded: o.uploaded }; }),
75
+ truncated: limited.length < filtered.length,
76
+ cursor: undefined,
77
+ delimitedPrefixes: [],
78
+ };
79
+ }
22
80
  }
81
+
23
82
  class DevDB {
24
- prepare() {
25
- const noop = { bind: () => noop, first: async () => null, all: async () => ({ results: [] }), run: async () => ({ success: true, meta: {} }) };
83
+ prepare(query) {
84
+ console.log('[fold dev] DB.prepare:', query.slice(0, 80));
85
+ const noop = { bind: () => noop, first: async () => null, all: async () => ({ results: [], success: true }), run: async () => ({ success: true, meta: {} }) };
26
86
  return noop;
27
87
  }
88
+ async batch(stmts) { console.log('[fold dev] DB.batch:', stmts.length, 'statements'); return []; }
89
+ async exec(query) { console.log('[fold dev] DB.exec:', query.slice(0, 80)); return { count: 0, duration: 0 }; }
28
90
  }
91
+
29
92
  class DevAI {
30
- async run(model) {
31
- console.warn('[fold dev] AI.run("' + model + '") is not available locally');
93
+ async run(model, inputs) {
94
+ console.warn('[fold dev] AI.run("' + model + '") returns empty stub. Use fold deploy to test with real models.');
32
95
  return {};
33
96
  }
34
97
  }
98
+
35
99
  class DevQueue {
36
- async send(body) { console.log('[fold dev] Queue.send:', body); }
100
+ async send(body) { console.log('[fold dev] Queue.send:', JSON.stringify(body).slice(0, 200)); }
37
101
  async sendBatch(messages) { console.log('[fold dev] Queue.sendBatch:', messages.length, 'messages'); }
38
102
  }
103
+
104
+ class DevVectorize {
105
+ async insert(vectors) { console.warn('[fold dev] Vectorize.insert:', vectors.length, 'vectors — stub'); return { count: vectors.length, ids: vectors.map(v => v.id) }; }
106
+ async upsert(vectors) { console.warn('[fold dev] Vectorize.upsert:', vectors.length, 'vectors — stub'); return { count: vectors.length, ids: vectors.map(v => v.id) }; }
107
+ async query() { return { matches: [], count: 0 }; }
108
+ async getByIds() { return []; }
109
+ async deleteByIds(ids) { return { count: ids.length, ids }; }
110
+ }
111
+
39
112
  class FoldContext {
40
113
  constructor(request, env) {
41
114
  this.request = request;
@@ -44,33 +117,66 @@ class FoldContext {
44
117
  this.db = new DevDB();
45
118
  this.ai = new DevAI();
46
119
  this.queue = new DevQueue();
120
+ this.vectorize = new DevVectorize();
47
121
  this.tenantId = undefined;
122
+ this._waitUntil = null;
48
123
  const managed = new Set(['AI', 'VECTORIZE', 'KV', 'DB', 'STORAGE', 'QUEUE', 'FOLD_TENANT_ID']);
49
124
  this.env = Object.fromEntries(
50
125
  Object.entries(env).filter(([k, v]) => !managed.has(k) && typeof v === 'string').map(([k, v]) => [k, v])
51
126
  );
52
127
  }
128
+ waitUntil(promise) { if (this._waitUntil) this._waitUntil(promise); }
53
129
  json(data, status = 200) { return Response.json(data, { status }); }
54
130
  text(body, status = 200) { return new Response(body, { status, headers: { 'content-type': 'text/plain' } }); }
131
+ async body() { return this.request.json(); }
132
+ query(name) { return new URL(this.request.url).searchParams.get(name); }
133
+ queries() { return Object.fromEntries(new URL(this.request.url).searchParams.entries()); }
134
+ header(name) { return this.request.headers.get(name); }
55
135
  stream(generator) {
56
136
  const { readable, writable } = new TransformStream();
57
137
  const writer = writable.getWriter();
58
138
  const enc = new TextEncoder();
59
139
  (async () => {
60
140
  try { for await (const chunk of generator()) await writer.write(enc.encode(chunk)); }
61
- finally { await writer.close(); }
141
+ catch (err) { try { await writer.write(enc.encode('event: error\\ndata: ' + JSON.stringify({ error: err?.message ?? 'Stream error' }) + '\\n\\n')); } catch {} }
142
+ finally { try { await writer.close(); } catch {} }
62
143
  })();
63
- return new Response(readable, { headers: { 'content-type': 'text/event-stream', 'cache-control': 'no-cache' } });
144
+ return new Response(readable, { headers: { 'content-type': 'text/event-stream', 'cache-control': 'no-cache', 'connection': 'keep-alive' } });
64
145
  }
65
146
  }
147
+
148
+ function composeMiddleware(middleware, handler) {
149
+ return (ctx) => {
150
+ let index = 0;
151
+ const dispatch = () => {
152
+ if (index < middleware.length) { const mw = middleware[index++]; return Promise.resolve(mw(ctx, dispatch)); }
153
+ return Promise.resolve(handler(ctx));
154
+ };
155
+ return dispatch();
156
+ };
157
+ }
158
+
66
159
  export function defineHandler(handlerOrOptions) {
67
- const fetchFn = typeof handlerOrOptions === 'function' ? handlerOrOptions : handlerOrOptions.fetch;
160
+ const isOptions = typeof handlerOrOptions !== 'function';
161
+ const rawFetchFn = isOptions ? handlerOrOptions.fetch : handlerOrOptions;
162
+ const middleware = isOptions ? handlerOrOptions.middleware : undefined;
163
+ const scheduledFn = isOptions ? handlerOrOptions.scheduled : undefined;
164
+ const fetchFn = middleware?.length ? composeMiddleware(middleware, rawFetchFn) : rawFetchFn;
68
165
  return {
69
- async fetch(request, env) {
166
+ async fetch(request, env, ctx) {
70
167
  const context = new FoldContext(request, env ?? {});
168
+ context._waitUntil = ctx?.waitUntil?.bind(ctx);
71
169
  try { return await fetchFn(context); }
72
170
  catch (err) { return Response.json({ error: err instanceof Error ? err.message : 'Internal error' }, { status: 500 }); }
73
171
  },
172
+ ...(scheduledFn && {
173
+ async scheduled(event, env, ctx) {
174
+ const req = new Request('https://scheduled.internal/__scheduled', { method: 'POST' });
175
+ const context = new FoldContext(req, env ?? {});
176
+ context._waitUntil = ctx?.waitUntil?.bind(ctx);
177
+ await scheduledFn(context, event);
178
+ }
179
+ }),
74
180
  };
75
181
  }
76
182
  export { FoldContext };
@@ -103,7 +209,7 @@ export async function bundleFile(entryPoint, opts = {}) {
103
209
  write: false,
104
210
  format: 'esm',
105
211
  target: 'esnext',
106
- platform: 'browser', // Workers runtime is closer to browser than node
212
+ platform: 'browser',
107
213
  minify: !opts.dev,
108
214
  treeShaking: true,
109
215
  conditions: ['worker', 'browser'],
@@ -1 +1 @@
1
- {"version":3,"file":"bundler.js","sourceRoot":"","sources":["../../src/lib/bundler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAe,MAAM,SAAS,CAAC;AAE7C;;;GAGG;AACH,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuE7B,CAAC;AAEF,qEAAqE;AACrE,MAAM,oBAAoB,GAAW;IACnC,IAAI,EAAE,kBAAkB;IACxB,KAAK,CAAC,KAAK;QACT,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC,CAAC;QACJ,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,QAAQ,EAAE,qBAAqB;YAC/B,MAAM,EAAE,IAAI;SACb,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,OAA0B,EAAE;IAC/E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;QACzB,WAAW,EAAE,CAAC,UAAU,CAAC;QACzB,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,SAAS,EAAE,iDAAiD;QACtE,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;QACjB,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;QACjC,2EAA2E;QAC3E,yEAAyE;QACzE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,mBAAmB,CAAC;QAC7E,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE;KAChD,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"bundler.js","sourceRoot":"","sources":["../../src/lib/bundler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAe,MAAM,SAAS,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8K7B,CAAC;AAEF,qEAAqE;AACrE,MAAM,oBAAoB,GAAW;IACnC,IAAI,EAAE,kBAAkB;IACxB,KAAK,CAAC,KAAK;QACT,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC,CAAC;QACJ,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,QAAQ,EAAE,qBAAqB;YAC/B,MAAM,EAAE,IAAI;SACb,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,OAA0B,EAAE;IAC/E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;QACzB,WAAW,EAAE,CAAC,UAAU,CAAC;QACzB,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;QACjB,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;QACjC,2EAA2E;QAC3E,yEAAyE;QACzE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,mBAAmB,CAAC;QAC7E,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE;KAChD,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Colorize a JSON string for terminal display.
3
+ * Applies syntax highlighting to keys, strings, numbers, booleans, and null.
4
+ */
5
+ export declare function colorizeJson(json: string): string;
@@ -0,0 +1,28 @@
1
+ // Lightweight JSON syntax highlighting for terminal output.
2
+ // No dependencies — uses ANSI escape codes directly.
3
+ const RESET = '\x1b[0m';
4
+ const CYAN = '\x1b[36m'; // keys
5
+ const GREEN = '\x1b[32m'; // strings
6
+ const YELLOW = '\x1b[33m'; // numbers
7
+ const MAGENTA = '\x1b[35m'; // booleans, null
8
+ /**
9
+ * Colorize a JSON string for terminal display.
10
+ * Applies syntax highlighting to keys, strings, numbers, booleans, and null.
11
+ */
12
+ export function colorizeJson(json) {
13
+ return json.replace(/("(?:\\.|[^"\\])*")\s*(:)?|(\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b)|(\bnull\b|\btrue\b|\bfalse\b)/g, (match, str, colon, num, lit) => {
14
+ if (str) {
15
+ // It's a string — is it a key (followed by :) or a value?
16
+ if (colon) {
17
+ return `${CYAN}${str}${RESET}:`;
18
+ }
19
+ return `${GREEN}${str}${RESET}`;
20
+ }
21
+ if (num)
22
+ return `${YELLOW}${num}${RESET}`;
23
+ if (lit)
24
+ return `${MAGENTA}${lit}${RESET}`;
25
+ return match;
26
+ });
27
+ }
28
+ //# sourceMappingURL=colorize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorize.js","sourceRoot":"","sources":["../../src/lib/colorize.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,qDAAqD;AAErD,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,OAAO;AAChC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,UAAU;AACpC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,UAAU;AACrC,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,iBAAiB;AAE7C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CACjB,gGAAgG,EAChG,CAAC,KAAK,EAAE,GAAuB,EAAE,KAAyB,EAAE,GAAuB,EAAE,GAAuB,EAAE,EAAE;QAC9G,IAAI,GAAG,EAAE,CAAC;YACR,0DAA0D;YAC1D,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC;YAClC,CAAC;YACD,OAAO,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,GAAG;YAAE,OAAO,GAAG,MAAM,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;QAC1C,IAAI,GAAG;YAAE,OAAO,GAAG,OAAO,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -3,6 +3,28 @@
3
3
  * Defaults to 'no' if user just presses enter.
4
4
  */
5
5
  export declare function confirm(message: string): Promise<boolean>;
6
+ /**
7
+ * Prompt for a single line of text input.
8
+ * Returns the trimmed input, or defaultValue if the user presses Enter.
9
+ */
10
+ export declare function ask(message: string, defaultValue?: string): Promise<string>;
11
+ /**
12
+ * Prompt the user to select from a list of options using arrow keys.
13
+ * Returns the selected option value. Falls back to numbered list on non-TTY.
14
+ */
15
+ export declare function select<T extends string>(message: string, options: {
16
+ label: string;
17
+ value: T;
18
+ }[]): Promise<T>;
19
+ /**
20
+ * Prompt for toggling multiple options on/off. Returns selected values.
21
+ * Space to toggle, Enter to confirm.
22
+ */
23
+ export declare function multiSelect<T extends string>(message: string, options: {
24
+ label: string;
25
+ value: T;
26
+ default?: boolean;
27
+ }[]): Promise<T[]>;
6
28
  /**
7
29
  * Read a line of input with masked output (shows * for each character).
8
30
  * Handles backspace and Ctrl+C.