flingit 0.0.5 → 0.0.7

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 (35) hide show
  1. package/README.md +18 -21
  2. package/dist/cli/commands/logs.d.ts.map +1 -1
  3. package/dist/cli/commands/logs.js +7 -2
  4. package/dist/cli/commands/logs.js.map +1 -1
  5. package/dist/cli/commands/onboard.d.ts +11 -3
  6. package/dist/cli/commands/onboard.d.ts.map +1 -1
  7. package/dist/cli/commands/onboard.js +148 -51
  8. package/dist/cli/commands/onboard.js.map +1 -1
  9. package/dist/cli/commands/tun.d.ts +13 -0
  10. package/dist/cli/commands/tun.d.ts.map +1 -0
  11. package/dist/cli/commands/tun.js +188 -0
  12. package/dist/cli/commands/tun.js.map +1 -0
  13. package/dist/cli/deploy/bundler.d.ts.map +1 -1
  14. package/dist/cli/deploy/bundler.js +1 -0
  15. package/dist/cli/deploy/bundler.js.map +1 -1
  16. package/dist/cli/index.js +2 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/loaders/register-wasm.d.ts +12 -0
  19. package/dist/cli/loaders/register-wasm.d.ts.map +1 -0
  20. package/dist/cli/loaders/register-wasm.js +19 -0
  21. package/dist/cli/loaders/register-wasm.js.map +1 -0
  22. package/dist/cli/loaders/wasm-hooks.d.ts +54 -0
  23. package/dist/cli/loaders/wasm-hooks.d.ts.map +1 -0
  24. package/dist/cli/loaders/wasm-hooks.js +56 -0
  25. package/dist/cli/loaders/wasm-hooks.js.map +1 -0
  26. package/dist/cli/utils/onboarding-io-impl.d.ts +12 -0
  27. package/dist/cli/utils/onboarding-io-impl.d.ts.map +1 -0
  28. package/dist/cli/utils/onboarding-io-impl.js +85 -0
  29. package/dist/cli/utils/onboarding-io-impl.js.map +1 -0
  30. package/dist/cli/utils/onboarding-io.d.ts +60 -0
  31. package/dist/cli/utils/onboarding-io.d.ts.map +1 -0
  32. package/dist/cli/utils/onboarding-io.js +9 -0
  33. package/dist/cli/utils/onboarding-io.js.map +1 -0
  34. package/package.json +2 -1
  35. package/templates/default/skills/fling/SKILL.md +15 -0
@@ -0,0 +1,188 @@
1
+ /**
2
+ * fling tun - Expose local development server via Cloudflare Tunnel
3
+ *
4
+ * Uses cloudflared (Cloudflare's tunnel daemon) for high-performance,
5
+ * concurrent request handling. The platform provisions tunnel credentials
6
+ * and DNS records; the CLI runs cloudflared with the provided token.
7
+ *
8
+ * Usage:
9
+ * fling tun 3000 # Tunnel localhost:3000
10
+ */
11
+ import { Command } from "commander";
12
+ import { spawn } from "child_process";
13
+ import { existsSync } from "fs";
14
+ import { platformFetch, getToken } from "../utils/config.js";
15
+ export const tunCommand = new Command("tun")
16
+ .description("Expose local server via Cloudflare Tunnel")
17
+ .argument("<port>", "Local port to tunnel")
18
+ .addHelpText("after", `
19
+ What it does:
20
+ Creates a Cloudflare Tunnel from the internet to your local development server.
21
+ External requests to the tunnel URL are forwarded to localhost:<port>.
22
+
23
+ This uses cloudflared (Cloudflare's tunnel daemon) which provides:
24
+ - Full concurrent request handling (no serialization)
25
+ - Native Cloudflare edge integration
26
+ - Automatic TLS termination
27
+
28
+ Examples:
29
+ fling tun 3000 Tunnel localhost:3000
30
+
31
+ The tunnel URL will be displayed when connected. Keep the command running
32
+ to maintain the tunnel. Press Ctrl+C to disconnect.
33
+
34
+ Prerequisites:
35
+ - Must be logged in (fling login)
36
+ - Local server must be running on the specified port
37
+
38
+ Note: cloudflared will be automatically downloaded on first use.
39
+ `)
40
+ .action(async (portArg) => {
41
+ const port = parseInt(portArg, 10);
42
+ if (isNaN(port) || port < 1 || port > 65535) {
43
+ console.error("Error: Port must be a number between 1 and 65535");
44
+ process.exit(1);
45
+ }
46
+ const token = getToken();
47
+ if (!token) {
48
+ console.error("Error: Not logged in. Run 'fling login' first.");
49
+ process.exit(1);
50
+ }
51
+ // Use default project (like other CLI commands)
52
+ const projectName = "default";
53
+ console.log(`Starting tunnel to localhost:${port}...`);
54
+ // Ensure cloudflared is installed
55
+ const cloudflaredBin = await ensureCloudflared();
56
+ if (!cloudflaredBin) {
57
+ process.exit(1);
58
+ }
59
+ // Request tunnel credentials from platform
60
+ const tunResponse = await startTunnel(projectName, port);
61
+ if (!tunResponse) {
62
+ process.exit(1);
63
+ }
64
+ console.log(`\nTunnel URL: ${tunResponse.tunnelUrl}`);
65
+ console.log(`Forwarding to: http://localhost:${port}`);
66
+ console.log("\nPress Ctrl+C to disconnect\n");
67
+ // Run cloudflared with the token
68
+ const cloudflaredProcess = runCloudflared(cloudflaredBin, tunResponse.token, port);
69
+ // Handle graceful shutdown
70
+ const cleanup = async () => {
71
+ console.log("\nDisconnecting tunnel...");
72
+ cloudflaredProcess.kill("SIGTERM");
73
+ // Stop tunnel on platform
74
+ await stopTunnel(projectName);
75
+ process.exit(0);
76
+ };
77
+ process.on("SIGINT", () => void cleanup());
78
+ process.on("SIGTERM", () => void cleanup());
79
+ // Wait for cloudflared to exit
80
+ cloudflaredProcess.on("exit", (code) => {
81
+ if (code !== 0 && code !== null) {
82
+ console.error(`cloudflared exited with code ${code}`);
83
+ }
84
+ process.exit(code ?? 0);
85
+ });
86
+ });
87
+ /**
88
+ * Ensure cloudflared binary is installed.
89
+ * Uses the 'cloudflared' npm package which handles platform-specific downloads.
90
+ */
91
+ async function ensureCloudflared() {
92
+ try {
93
+ // Dynamic import to handle the cloudflared package
94
+ const { bin, install } = await import("cloudflared");
95
+ if (!existsSync(bin)) {
96
+ console.log("Installing cloudflared...");
97
+ await install(bin);
98
+ console.log("cloudflared installed successfully");
99
+ }
100
+ return bin;
101
+ }
102
+ catch (error) {
103
+ console.error("Failed to install cloudflared:", error);
104
+ return null;
105
+ }
106
+ }
107
+ /**
108
+ * Request tunnel credentials from the platform.
109
+ */
110
+ async function startTunnel(projectName, localPort) {
111
+ try {
112
+ const response = await platformFetch(`/project/${encodeURIComponent(projectName)}/tun/start`, {
113
+ method: "POST",
114
+ headers: { "Content-Type": "application/json" },
115
+ body: JSON.stringify({ localPort }),
116
+ });
117
+ if (!response.ok) {
118
+ const error = await response.json().catch(() => ({}));
119
+ console.error(`Error: Failed to start tunnel: ${error.error ?? response.statusText}`);
120
+ return null;
121
+ }
122
+ return (await response.json());
123
+ }
124
+ catch (error) {
125
+ console.error("Error: Failed to connect to platform:", error);
126
+ return null;
127
+ }
128
+ }
129
+ /**
130
+ * Notify platform that tunnel is stopping.
131
+ */
132
+ async function stopTunnel(projectName) {
133
+ try {
134
+ await platformFetch(`/project/${encodeURIComponent(projectName)}/tun/stop`, { method: "DELETE" });
135
+ }
136
+ catch {
137
+ // Ignore errors on cleanup
138
+ }
139
+ }
140
+ /**
141
+ * Run cloudflared with the provided token.
142
+ */
143
+ function runCloudflared(bin, tunnelToken, localPort) {
144
+ const args = [
145
+ "tunnel",
146
+ "--no-autoupdate",
147
+ "run",
148
+ "--token",
149
+ tunnelToken,
150
+ "--url",
151
+ `http://localhost:${localPort}`,
152
+ ];
153
+ const child = spawn(bin, args, {
154
+ stdio: ["ignore", "pipe", "pipe"],
155
+ });
156
+ // Forward cloudflared output (stdout and stderr are piped, so they're non-null)
157
+ child.stdout.on("data", (data) => {
158
+ const lines = data.toString().split("\n").filter(Boolean);
159
+ for (const line of lines) {
160
+ // Filter out noisy logs, show important ones
161
+ if (line.includes("error") ||
162
+ line.includes("failed") ||
163
+ line.includes("connected") ||
164
+ line.includes("Registered")) {
165
+ console.log(`[cloudflared] ${line}`);
166
+ }
167
+ }
168
+ });
169
+ child.stderr.on("data", (data) => {
170
+ const lines = data.toString().split("\n").filter(Boolean);
171
+ for (const line of lines) {
172
+ // cloudflared logs to stderr by default
173
+ if (line.includes("ERR") ||
174
+ line.includes("error") ||
175
+ line.includes("failed")) {
176
+ console.error(`[cloudflared] ${line}`);
177
+ }
178
+ else if (line.includes("INF") &&
179
+ (line.includes("connect") ||
180
+ line.includes("Registered") ||
181
+ line.includes("serving"))) {
182
+ console.log(`[cloudflared] ${line}`);
183
+ }
184
+ }
185
+ });
186
+ return child;
187
+ }
188
+ //# sourceMappingURL=tun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tun.js","sourceRoot":"","sources":["../../../src/cli/commands/tun.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bundler.d.ts","sourceRoot":"","sources":["../../../src/cli/deploy/bundler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAWD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,OAAO,UAAQ,GACd,OAAO,CAAC,YAAY,CAAC,CAyKvB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBzE"}
1
+ {"version":3,"file":"bundler.d.ts","sourceRoot":"","sources":["../../../src/cli/deploy/bundler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAWD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,OAAO,UAAQ,GACd,OAAO,CAAC,YAAY,CAAC,CA0KvB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBzE"}
@@ -106,6 +106,7 @@ async function handleCronRequest(request, env) {
106
106
  }
107
107
 
108
108
  try {
109
+ console.log("Running cron job " + name);
109
110
  const result = await job.handler();
110
111
  return new Response(JSON.stringify({
111
112
  success: true,
@@ -1 +1 @@
1
- {"version":3,"file":"bundler.js","sourceRoot":"","sources":["../../../src/cli/deploy/bundler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAY1D;;;GAGG;AACH,SAAS,oBAAoB;IAC3B,wDAAwD;IACxD,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,OAAO,GAAG,KAAK;IAEf,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IAEjD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,uDAAuD;YACrD,8CAA8C;YAC9C,sEAAsE,CACzE,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,iBAAiB,CAAC,CAAC;IACjE,CAAC;IAED,yDAAyD;IACzD,MAAM,SAAS,GAAG;2EACuD,iBAAiB;;;;;;;;;;;;;;sBActE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+E5B,CAAC;IAEA,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAED,sBAAsB;IACtB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;QACzB,KAAK,EAAE;YACL,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE,IAAI;SACb;QACD,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,SAAS,EAAE,qCAAqC;QAC1D,MAAM,EAAE,KAAK,EAAE,8BAA8B;QAC7C,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,EAAE,EAAE,oBAAoB;QAClC,KAAK,EAAE;YACL,+CAA+C;YAC/C,OAAO,EAAE,iBAAiB;SAC3B;QACD,MAAM,EAAE;YACN,sBAAsB,EAAE,cAAc;SACvC;KACF,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAE7B,uDAAuD;IACvD,0EAA0E;IAC1E,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,aAAa,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,iDAAiD;IACjD,sBAAsB;IACtB,kCAAkC;IAClC,kCAAkC;IAClC,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,aAAa,GAAG,8DAA8D,CAAC;IAErF,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YACrB,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"bundler.js","sourceRoot":"","sources":["../../../src/cli/deploy/bundler.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -22,6 +22,7 @@ import { feedbackCommand } from "./commands/feedback.js";
22
22
  import { projectCommand } from "./commands/project.js";
23
23
  import { adminCommand } from "./commands/admin.js";
24
24
  import { cronCommand } from "./commands/cron.js";
25
+ import { tunCommand } from "./commands/tun.js";
25
26
  import { launch } from "./commands/launch.js";
26
27
  const program = new Command();
27
28
  program
@@ -61,6 +62,7 @@ program.addCommand(whoamiCommand);
61
62
  program.addCommand(feedbackCommand);
62
63
  program.addCommand(projectCommand);
63
64
  program.addCommand(cronCommand);
65
+ program.addCommand(tunCommand);
64
66
  program.addCommand(adminCommand);
65
67
  // If no command specified, run the default launch action
66
68
  if (process.argv.length === 2) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,QAAQ,EAAE,gDAAgD,CAAC;KAClE,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;CAiBvB,CAAC,CAAC;AAEH,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,yDAAyD;AACzD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Registration file for the WASM ESM loader hooks.
3
+ *
4
+ * This file is used with Node.js --import flag to register the WASM loader
5
+ * before any user code runs. It uses the node:module register() API to
6
+ * install the custom resolve and load hooks.
7
+ *
8
+ * Usage:
9
+ * node --import ./register-wasm.js script.js
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=register-wasm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-wasm.d.ts","sourceRoot":"","sources":["../../../src/cli/loaders/register-wasm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Registration file for the WASM ESM loader hooks.
3
+ *
4
+ * This file is used with Node.js --import flag to register the WASM loader
5
+ * before any user code runs. It uses the node:module register() API to
6
+ * install the custom resolve and load hooks.
7
+ *
8
+ * Usage:
9
+ * node --import ./register-wasm.js script.js
10
+ */
11
+ import { register } from "node:module";
12
+ import { fileURLToPath, pathToFileURL } from "node:url";
13
+ import { dirname, join } from "node:path";
14
+ const __dirname = dirname(fileURLToPath(import.meta.url));
15
+ // The hooks file path - will be .js when compiled to dist/
16
+ const hooksPath = join(__dirname, "wasm-hooks.js");
17
+ // Register the WASM loader hooks
18
+ register(pathToFileURL(hooksPath).href, import.meta.url);
19
+ //# sourceMappingURL=register-wasm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-wasm.js","sourceRoot":"","sources":["../../../src/cli/loaders/register-wasm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,2DAA2D;AAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAEnD,iCAAiC;AACjC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Node.js ESM loader hooks for WebAssembly support in development.
3
+ *
4
+ * This file provides the resolve and load hooks that allow importing .wasm
5
+ * files directly in TypeScript/JavaScript code during development with tsx.
6
+ *
7
+ * Usage in user code (same API as production bundling):
8
+ * import loadWasm from './example.wasm';
9
+ * const exports = await loadWasm({ env: { log: console.log } });
10
+ * exports.someFunction();
11
+ */
12
+ interface ResolveContext {
13
+ conditions: string[];
14
+ importAttributes: Record<string, string>;
15
+ parentURL?: string;
16
+ }
17
+ interface ResolveResult {
18
+ format?: string | null;
19
+ importAttributes?: Record<string, string>;
20
+ shortCircuit?: boolean;
21
+ url: string;
22
+ }
23
+ type NextResolve = (specifier: string, context: ResolveContext) => Promise<ResolveResult>;
24
+ interface LoadContext {
25
+ conditions: string[];
26
+ format?: string | null;
27
+ importAttributes: Record<string, string>;
28
+ }
29
+ interface LoadResult {
30
+ format: string;
31
+ shortCircuit?: boolean;
32
+ source?: string | ArrayBuffer | Uint8Array;
33
+ }
34
+ type NextLoad = (url: string, context: LoadContext) => Promise<LoadResult>;
35
+ /**
36
+ * Resolve hook: mark .wasm imports with custom format.
37
+ */
38
+ export declare function resolve(specifier: string, context: ResolveContext, nextResolve: NextResolve): Promise<ResolveResult>;
39
+ /**
40
+ * Load hook: generate JS module that exports WASM binary as Uint8Array.
41
+ *
42
+ * We embed the WASM binary as base64 in the generated JS module,
43
+ * which then decodes to Uint8Array when imported.
44
+ *
45
+ * This matches what libraries like @resvg/resvg-wasm expect:
46
+ * - In Cloudflare Workers: import returns WebAssembly.Module
47
+ * - In Node.js (local dev): import returns Uint8Array
48
+ *
49
+ * Both types are accepted by WebAssembly.instantiate() and by
50
+ * library init functions like initWasm().
51
+ */
52
+ export declare function load(url: string, context: LoadContext, nextLoad: NextLoad): Promise<LoadResult>;
53
+ export {};
54
+ //# sourceMappingURL=wasm-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/loaders/wasm-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,KAAK,WAAW,GAAG,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;CAC5C;AAED,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3E;;GAEG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,aAAa,CAAC,CASxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,UAAU,CAAC,CAkBrB"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Node.js ESM loader hooks for WebAssembly support in development.
3
+ *
4
+ * This file provides the resolve and load hooks that allow importing .wasm
5
+ * files directly in TypeScript/JavaScript code during development with tsx.
6
+ *
7
+ * Usage in user code (same API as production bundling):
8
+ * import loadWasm from './example.wasm';
9
+ * const exports = await loadWasm({ env: { log: console.log } });
10
+ * exports.someFunction();
11
+ */
12
+ import { readFile } from "node:fs/promises";
13
+ import { fileURLToPath } from "node:url";
14
+ // Custom format identifier for WASM files
15
+ const WASM_FORMAT = "wasm-loader";
16
+ /**
17
+ * Resolve hook: mark .wasm imports with custom format.
18
+ */
19
+ export async function resolve(specifier, context, nextResolve) {
20
+ const resolved = await nextResolve(specifier, context);
21
+ // Mark .wasm files with our custom format
22
+ if (specifier.endsWith(".wasm")) {
23
+ return { ...resolved, format: WASM_FORMAT };
24
+ }
25
+ return resolved;
26
+ }
27
+ /**
28
+ * Load hook: generate JS module that exports WASM binary as Uint8Array.
29
+ *
30
+ * We embed the WASM binary as base64 in the generated JS module,
31
+ * which then decodes to Uint8Array when imported.
32
+ *
33
+ * This matches what libraries like @resvg/resvg-wasm expect:
34
+ * - In Cloudflare Workers: import returns WebAssembly.Module
35
+ * - In Node.js (local dev): import returns Uint8Array
36
+ *
37
+ * Both types are accepted by WebAssembly.instantiate() and by
38
+ * library init functions like initWasm().
39
+ */
40
+ export async function load(url, context, nextLoad) {
41
+ if (context.format === WASM_FORMAT) {
42
+ const filePath = fileURLToPath(url);
43
+ const wasmBuffer = await readFile(filePath);
44
+ const base64 = wasmBuffer.toString("base64");
45
+ // Generate JS module that decodes base64 to Uint8Array
46
+ // This is compatible with libraries that accept either Uint8Array or WebAssembly.Module
47
+ const source = `
48
+ const base64 = "${base64}";
49
+ const binary = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
50
+ export default binary;
51
+ `;
52
+ return { format: "module", source, shortCircuit: true };
53
+ }
54
+ return nextLoad(url, context);
55
+ }
56
+ //# sourceMappingURL=wasm-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-hooks.js","sourceRoot":"","sources":["../../../src/cli/loaders/wasm-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,0CAA0C;AAC1C,MAAM,WAAW,GAAG,aAAa,CAAC;AAkClC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAAiB,EACjB,OAAuB,EACvB,WAAwB;IAExB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEvD,0CAA0C;IAC1C,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,GAAW,EACX,OAAoB,EACpB,QAAkB;IAElB,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE7C,uDAAuD;QACvD,wFAAwF;QACxF,MAAM,MAAM,GAAG;kBACD,MAAM;;;CAGvB,CAAC;QAEE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Production implementations of onboarding I/O interfaces.
3
+ *
4
+ * These wrap the real dependencies (@clack/prompts, fs, fetch)
5
+ * used in production. Tests can substitute mock implementations.
6
+ */
7
+ import type { UserIO, FileIO, NetworkIO, OnboardingIO } from "./onboarding-io.js";
8
+ export declare const clackUserIO: UserIO;
9
+ export declare const nodeFileIO: FileIO;
10
+ export declare const fetchNetworkIO: NetworkIO;
11
+ export declare const defaultOnboardingIO: OnboardingIO;
12
+ //# sourceMappingURL=onboarding-io-impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-io-impl.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/onboarding-io-impl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAa,MAAM,oBAAoB,CAAC;AAM7F,eAAO,MAAM,WAAW,EAAE,MA4CzB,CAAC;AAMF,eAAO,MAAM,UAAU,EAAE,MAaxB,CAAC;AAMF,eAAO,MAAM,cAAc,EAAE,SAE5B,CAAC;AAMF,eAAO,MAAM,mBAAmB,EAAE,YAIjC,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Production implementations of onboarding I/O interfaces.
3
+ *
4
+ * These wrap the real dependencies (@clack/prompts, fs, fetch)
5
+ * used in production. Tests can substitute mock implementations.
6
+ */
7
+ import * as p from "@clack/prompts";
8
+ import { existsSync, readFileSync, writeFileSync, unlinkSync, mkdirSync, } from "node:fs";
9
+ // ═══════════════════════════════════════════════════════
10
+ // USER INTERACTION (wraps @clack/prompts)
11
+ // ═══════════════════════════════════════════════════════
12
+ export const clackUserIO = {
13
+ intro: (msg) => {
14
+ p.intro(msg);
15
+ },
16
+ outro: (msg) => {
17
+ p.outro(msg);
18
+ },
19
+ cancel: (msg) => {
20
+ p.cancel(msg);
21
+ },
22
+ select: async (opts) => {
23
+ // Cast required due to exactOptionalPropertyTypes mismatch with Clack's types
24
+ const result = await p.select(opts);
25
+ return result;
26
+ },
27
+ password: (opts) => p.password(opts),
28
+ text: (opts) => p.text(opts),
29
+ confirm: (opts) => p.confirm(opts),
30
+ spinner: () => {
31
+ const spinner = p.spinner();
32
+ return {
33
+ start: (msg) => {
34
+ spinner.start(msg);
35
+ },
36
+ stop: (msg, exitCode) => {
37
+ spinner.stop(msg, exitCode);
38
+ },
39
+ };
40
+ },
41
+ log: {
42
+ info: (msg) => {
43
+ p.log.info(msg);
44
+ },
45
+ warn: (msg) => {
46
+ p.log.warn(msg);
47
+ },
48
+ message: (msg) => {
49
+ p.log.message(msg);
50
+ },
51
+ },
52
+ isCancel: p.isCancel,
53
+ };
54
+ // ═══════════════════════════════════════════════════════
55
+ // FILE SYSTEM (wraps node:fs)
56
+ // ═══════════════════════════════════════════════════════
57
+ export const nodeFileIO = {
58
+ exists: existsSync,
59
+ read: (path) => existsSync(path) ? readFileSync(path, "utf-8").trim() : null,
60
+ write: (path, content, mode) => {
61
+ writeFileSync(path, content, mode ? { mode } : undefined);
62
+ },
63
+ delete: (path) => {
64
+ if (existsSync(path))
65
+ unlinkSync(path);
66
+ },
67
+ mkdir: (path) => {
68
+ mkdirSync(path, { recursive: true });
69
+ },
70
+ };
71
+ // ═══════════════════════════════════════════════════════
72
+ // NETWORK (wraps global fetch)
73
+ // ═══════════════════════════════════════════════════════
74
+ export const fetchNetworkIO = {
75
+ fetch: globalThis.fetch,
76
+ };
77
+ // ═══════════════════════════════════════════════════════
78
+ // DEFAULT COMBINED CONTEXT
79
+ // ═══════════════════════════════════════════════════════
80
+ export const defaultOnboardingIO = {
81
+ user: clackUserIO,
82
+ file: nodeFileIO,
83
+ network: fetchNetworkIO,
84
+ };
85
+ //# sourceMappingURL=onboarding-io-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-io-impl.js","sourceRoot":"","sources":["../../../src/cli/utils/onboarding-io-impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * I/O abstraction interfaces for onboarding flow.
3
+ *
4
+ * These interfaces allow the onboarding logic to be tested without
5
+ * mocking individual modules. Tests can provide script-based implementations
6
+ * that verify the exact sequence of I/O operations.
7
+ */
8
+ export interface SpinnerIO {
9
+ start(message: string): void;
10
+ stop(message: string, exitCode?: number): void;
11
+ }
12
+ export interface UserIO {
13
+ intro(message: string): void;
14
+ outro(message: string): void;
15
+ cancel(message: string): void;
16
+ select<T extends string>(opts: {
17
+ message: string;
18
+ options: Array<{
19
+ value: T;
20
+ label: string;
21
+ hint?: string | undefined;
22
+ }>;
23
+ }): Promise<T | symbol>;
24
+ password(opts: {
25
+ message: string;
26
+ validate?: (value: string) => string | undefined;
27
+ }): Promise<string | symbol>;
28
+ text(opts: {
29
+ message: string;
30
+ placeholder?: string;
31
+ validate?: (value: string) => string | undefined;
32
+ }): Promise<string | symbol>;
33
+ confirm(opts: {
34
+ message: string;
35
+ initialValue?: boolean;
36
+ }): Promise<boolean | symbol>;
37
+ spinner(): SpinnerIO;
38
+ log: {
39
+ info(message: string): void;
40
+ warn(message: string): void;
41
+ message(message: string): void;
42
+ };
43
+ isCancel(value: unknown): value is symbol;
44
+ }
45
+ export interface FileIO {
46
+ exists(path: string): boolean;
47
+ read(path: string): string | null;
48
+ write(path: string, content: string, mode?: number): void;
49
+ delete(path: string): void;
50
+ mkdir(path: string): void;
51
+ }
52
+ export interface NetworkIO {
53
+ fetch(url: string, options?: RequestInit): Promise<Response>;
54
+ }
55
+ export interface OnboardingIO {
56
+ user: UserIO;
57
+ file: FileIO;
58
+ network: NetworkIO;
59
+ }
60
+ //# sourceMappingURL=onboarding-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-io.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/onboarding-io.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAAE,CAAC,CAAC;KACxE,GAAG,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IAExB,QAAQ,CAAC,IAAI,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;KAClD,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAE7B,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;KAClD,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAE7B,OAAO,CAAC,IAAI,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IAE9B,OAAO,IAAI,SAAS,CAAC;IAErB,GAAG,EAAE;QACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IAEF,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC;CAC3C;AAMD,MAAM,WAAW,MAAM;IACrB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAMD,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9D;AAMD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,CAAC;CACpB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * I/O abstraction interfaces for onboarding flow.
3
+ *
4
+ * These interfaces allow the onboarding logic to be tested without
5
+ * mocking individual modules. Tests can provide script-based implementations
6
+ * that verify the exact sequence of I/O operations.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=onboarding-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-io.js","sourceRoot":"","sources":["../../../src/cli/utils/onboarding-io.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flingit",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "Personal Software Platform - Build and deploy personal tools through conversation",
5
5
  "type": "module",
6
6
  "engines": {
@@ -53,6 +53,7 @@
53
53
  "@clack/prompts": "^0.11.0",
54
54
  "@hono/node-server": "^1.19.9",
55
55
  "better-sqlite3": "^12.6.2",
56
+ "cloudflared": "^0.7.1",
56
57
  "commander": "^14.0.2",
57
58
  "croner": "^9.1.0",
58
59
  "dotenv": "^17.2.3",