flingit 0.0.12 → 0.0.14

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 (93) hide show
  1. package/README.md +8 -1
  2. package/dist/cli/commands/db.d.ts +11 -0
  3. package/dist/cli/commands/db.d.ts.map +1 -1
  4. package/dist/cli/commands/db.js +60 -48
  5. package/dist/cli/commands/db.js.map +1 -1
  6. package/dist/cli/commands/dev.d.ts +9 -0
  7. package/dist/cli/commands/dev.d.ts.map +1 -1
  8. package/dist/cli/commands/dev.js +96 -100
  9. package/dist/cli/commands/dev.js.map +1 -1
  10. package/dist/cli/commands/feedback.d.ts +23 -0
  11. package/dist/cli/commands/feedback.d.ts.map +1 -1
  12. package/dist/cli/commands/feedback.js +60 -73
  13. package/dist/cli/commands/feedback.js.map +1 -1
  14. package/dist/cli/commands/init.d.ts +9 -0
  15. package/dist/cli/commands/init.d.ts.map +1 -1
  16. package/dist/cli/commands/init.js +96 -107
  17. package/dist/cli/commands/init.js.map +1 -1
  18. package/dist/cli/commands/launch.d.ts +11 -1
  19. package/dist/cli/commands/launch.d.ts.map +1 -1
  20. package/dist/cli/commands/launch.js +32 -36
  21. package/dist/cli/commands/launch.js.map +1 -1
  22. package/dist/cli/commands/login.d.ts +30 -0
  23. package/dist/cli/commands/login.d.ts.map +1 -1
  24. package/dist/cli/commands/login.js +71 -58
  25. package/dist/cli/commands/login.js.map +1 -1
  26. package/dist/cli/commands/logout.js +1 -1
  27. package/dist/cli/commands/logs.d.ts +39 -0
  28. package/dist/cli/commands/logs.d.ts.map +1 -1
  29. package/dist/cli/commands/logs.js +121 -90
  30. package/dist/cli/commands/logs.js.map +1 -1
  31. package/dist/cli/commands/onboard.d.ts +1 -1
  32. package/dist/cli/commands/onboard.d.ts.map +1 -1
  33. package/dist/cli/commands/onboard.js +97 -42
  34. package/dist/cli/commands/onboard.js.map +1 -1
  35. package/dist/cli/commands/plugin.d.ts +43 -0
  36. package/dist/cli/commands/plugin.d.ts.map +1 -1
  37. package/dist/cli/commands/plugin.js +229 -211
  38. package/dist/cli/commands/plugin.js.map +1 -1
  39. package/dist/cli/commands/project.d.ts +27 -0
  40. package/dist/cli/commands/project.d.ts.map +1 -1
  41. package/dist/cli/commands/project.js +101 -85
  42. package/dist/cli/commands/project.js.map +1 -1
  43. package/dist/cli/commands/push.d.ts +39 -0
  44. package/dist/cli/commands/push.d.ts.map +1 -1
  45. package/dist/cli/commands/push.js +152 -118
  46. package/dist/cli/commands/push.js.map +1 -1
  47. package/dist/cli/commands/register.js +1 -1
  48. package/dist/cli/commands/storage.d.ts +32 -0
  49. package/dist/cli/commands/storage.d.ts.map +1 -1
  50. package/dist/cli/commands/storage.js +180 -140
  51. package/dist/cli/commands/storage.js.map +1 -1
  52. package/dist/cli/commands/tunnel.d.ts +41 -0
  53. package/dist/cli/commands/tunnel.d.ts.map +1 -0
  54. package/dist/cli/commands/tunnel.js +210 -0
  55. package/dist/cli/commands/tunnel.js.map +1 -0
  56. package/dist/cli/commands/upgrade.d.ts +15 -0
  57. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  58. package/dist/cli/commands/upgrade.js +82 -0
  59. package/dist/cli/commands/upgrade.js.map +1 -0
  60. package/dist/cli/index.js +35 -4
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/cli/utils/cli-io-impl.d.ts +64 -0
  63. package/dist/cli/utils/cli-io-impl.d.ts.map +1 -0
  64. package/dist/cli/utils/cli-io-impl.js +521 -0
  65. package/dist/cli/utils/cli-io-impl.js.map +1 -0
  66. package/dist/cli/utils/cli-io.d.ts +350 -0
  67. package/dist/cli/utils/cli-io.d.ts.map +1 -0
  68. package/dist/cli/utils/cli-io.js +13 -0
  69. package/dist/cli/utils/cli-io.js.map +1 -0
  70. package/dist/cli/utils/config.d.ts +60 -2
  71. package/dist/cli/utils/config.d.ts.map +1 -1
  72. package/dist/cli/utils/config.js +158 -37
  73. package/dist/cli/utils/config.js.map +1 -1
  74. package/dist/cli/utils/project.d.ts +60 -0
  75. package/dist/cli/utils/project.d.ts.map +1 -1
  76. package/dist/cli/utils/project.js +112 -2
  77. package/dist/cli/utils/project.js.map +1 -1
  78. package/dist/cli/utils/prompt-new-project.d.ts +1 -1
  79. package/dist/cli/utils/prompt-new-project.d.ts.map +1 -1
  80. package/dist/cli/utils/registry.d.ts +2 -2
  81. package/dist/cli/utils/registry.d.ts.map +1 -1
  82. package/dist/cli/utils/registry.js +13 -3
  83. package/dist/cli/utils/registry.js.map +1 -1
  84. package/dist/runtime/log.d.ts.map +1 -1
  85. package/dist/runtime/log.js +8 -4
  86. package/dist/runtime/log.js.map +1 -1
  87. package/dist/runtime/storage.js +1 -1
  88. package/dist/runtime/storage.js.map +1 -1
  89. package/package.json +3 -2
  90. package/templates/default/CLAUDE.md +1 -0
  91. package/templates/default/skills/fling/.hash +1 -0
  92. package/templates/default/skills/fling/SKILL.md +12 -4
  93. /package/templates/default/skills/{discord/SKILL.md → fling/DISCORD.md} +0 -0
@@ -11,75 +11,41 @@
11
11
  * catching bundling issues (like WASM) early.
12
12
  */
13
13
  import { Command } from "commander";
14
- import { existsSync, mkdirSync, writeFileSync } from "node:fs";
15
14
  import { join, dirname } from "node:path";
16
- import { spawn } from "node:child_process";
17
- import { fileURLToPath } from "node:url";
18
- import { createRequire } from "node:module";
19
- import { context } from "esbuild";
20
- import { hasWorkerEntry, getWorkerEntryPath } from "../utils/project.js";
21
15
  import { wasmPlugin } from "../deploy/bundler.js";
22
- const __dirname = dirname(fileURLToPath(import.meta.url));
23
- // Resolve paths from Fling's node_modules (for externals)
24
- const require = createRequire(import.meta.url);
25
- const honoNodeServerPath = require.resolve("@hono/node-server");
26
- // Get the path to the node runtime (the main flingit export)
27
- function getNodeRuntimePath() {
28
- // From dist/cli/commands/ -> dist/index.js
29
- return join(__dirname, "..", "..", "index.js");
30
- }
31
- export const devCommand = new Command("dev")
32
- .description("Start the local development server")
33
- .option("-p, --port <port>", "Port to run on", "3210")
34
- .addHelpText("after", `
35
- Prerequisites:
36
- - Must have run 'fling init' first
37
- - Must have run 'npm install' first
38
- - Requires src/worker/index.ts
39
-
40
- What it does:
41
- - Bundles backend code with esbuild (same as production)
42
- - Runs database migrations
43
- - Starts cron jobs (if any are registered)
44
- - Starts API server at http://localhost:PORT
45
- - Starts Vite dev server at http://localhost:5173
46
- - Proxies /api/* requests from Vite to the API server
47
- - React HMR enabled for frontend development
48
- - Backend: watches for changes and rebuilds/restarts
49
-
50
- The servers run until you press Ctrl+C.
51
-
52
- Examples:
53
- fling dev Start on default port 3210
54
- fling dev -p 8080 Start API on port 8080
55
- `)
56
- .action(async (options) => {
57
- const cwd = process.cwd();
16
+ import { createDefaultDevIO } from "../utils/cli-io-impl.js";
17
+ /**
18
+ * Run the dev command logic.
19
+ * Extracted for testability via dependency injection.
20
+ */
21
+ export async function runDev(options, io) {
22
+ const cwd = io.process.cwd();
58
23
  const port = parseInt(options.port, 10);
59
24
  // Check if project is initialized
60
- if (!existsSync(join(cwd, ".fling"))) {
61
- console.error("Error: Not a Fling project. Run 'fling init' first.");
62
- process.exit(1);
25
+ if (!io.file.exists(join(cwd, ".fling"))) {
26
+ io.console.error("Error: Not a Fling project. Run 'fling init' first.");
27
+ io.process.exit(1);
63
28
  }
64
29
  // Check for worker entry point
65
- if (!hasWorkerEntry(cwd)) {
66
- console.error("Error: src/worker/index.ts not found.\n");
67
- console.error("This file is your backend API entry point.");
68
- console.error("Run 'fling init' to create a new project with the correct structure.");
69
- process.exit(1);
30
+ if (!io.project.hasWorkerEntry(cwd)) {
31
+ io.console.error("Error: src/worker/index.ts not found.\n");
32
+ io.console.error("This file is your backend API entry point.");
33
+ io.console.error("Run 'fling init' to create a new project with the correct structure.");
34
+ io.process.exit(1);
70
35
  }
71
- console.log("Starting Fling development server...\n");
36
+ io.console.log("Starting Fling development server...\n");
72
37
  let workerProcess = null;
73
38
  let viteProcess = null;
74
39
  let buildContext = null;
75
40
  let isShuttingDown = false;
76
41
  // Create temp directory for bundled output and entry file
77
42
  const tempDir = join(cwd, ".fling", ".dev-bundle");
78
- mkdirSync(tempDir, { recursive: true });
43
+ io.file.mkdir(tempDir, { recursive: true });
79
44
  const bundlePath = join(tempDir, "worker.mjs");
80
45
  const entryPath = join(tempDir, "entry.ts");
81
- const nodeRuntimePath = getNodeRuntimePath();
82
- const appPath = getWorkerEntryPath(cwd);
46
+ const nodeRuntimePath = io.paths.nodeRuntimePath;
47
+ const honoNodeServerPath = io.paths.honoNodeServerPath;
48
+ const appPath = io.project.getWorkerEntryPath(cwd);
83
49
  // Create the dev entry code - similar to production but for Node.js
84
50
  // Use absolute paths for Fling's dependencies (marked external below)
85
51
  const runtimeDir = dirname(nodeRuntimePath);
@@ -125,32 +91,32 @@ serve({
125
91
  });
126
92
  `;
127
93
  // Write entry file (using a file instead of stdin enables proper watch mode)
128
- writeFileSync(entryPath, entryCode);
94
+ io.file.writeFileString(entryPath, entryCode);
129
95
  // Function to spawn the bundled worker
130
96
  function spawnWorker() {
131
- const worker = spawn(process.execPath, [bundlePath], {
97
+ const worker = io.spawn(io.process.execPath, [bundlePath], {
132
98
  cwd,
133
99
  stdio: ["inherit", "pipe", "pipe"],
134
100
  env: {
135
- ...process.env,
101
+ ...io.process.env,
136
102
  PROJECT_DIR: cwd,
137
103
  FORCE_COLOR: "1",
138
104
  },
139
105
  });
140
- worker.stdout.on("data", (data) => {
106
+ worker.stdout?.on("data", (data) => {
141
107
  const lines = data.toString().split("\n").filter(Boolean);
142
108
  for (const line of lines) {
143
- console.log(line);
109
+ io.console.log(line);
144
110
  }
145
111
  });
146
- worker.stderr.on("data", (data) => {
112
+ worker.stderr?.on("data", (data) => {
147
113
  const lines = data.toString().split("\n").filter(Boolean);
148
114
  for (const line of lines) {
149
- console.error(line);
115
+ io.console.error(line);
150
116
  }
151
117
  });
152
118
  worker.on("error", (error) => {
153
- console.error("\nError: Could not start backend worker:", error.message);
119
+ io.console.error("\nError: Could not start backend worker:" + error.message);
154
120
  });
155
121
  worker.on("close", (code) => {
156
122
  // Only clear workerProcess if this is still the current worker
@@ -159,14 +125,14 @@ serve({
159
125
  workerProcess = null;
160
126
  }
161
127
  if (!isShuttingDown && code !== 0 && code !== null) {
162
- console.error(`\n[worker] Backend server exited with code ${code}`);
128
+ io.console.error(`\n[worker] Backend server exited with code ${code}`);
163
129
  }
164
130
  });
165
131
  return worker;
166
132
  }
167
133
  // Function to rebuild and restart the worker
168
134
  async function rebuildAndRestart() {
169
- console.log("[worker] Rebuilding...");
135
+ io.console.log("[worker] Rebuilding...");
170
136
  // Kill existing worker and wait for it to exit
171
137
  if (workerProcess && !workerProcess.killed) {
172
138
  const oldProcess = workerProcess;
@@ -182,16 +148,17 @@ serve({
182
148
  await buildContext.rebuild();
183
149
  }
184
150
  // Start new worker
185
- console.log("[worker] Starting...");
151
+ io.console.log("[worker] Starting...");
186
152
  workerProcess = spawnWorker();
187
153
  }
188
154
  catch (error) {
189
- console.error("[worker] Build failed:", error instanceof Error ? error.message : error);
155
+ io.console.error("[worker] Build failed:" +
156
+ (error instanceof Error ? error.message : String(error)));
190
157
  }
191
158
  }
192
159
  // Create esbuild context with watch mode
193
160
  try {
194
- buildContext = await context({
161
+ buildContext = await io.esbuild.context({
195
162
  entryPoints: [entryPath],
196
163
  outfile: bundlePath,
197
164
  bundle: true,
@@ -224,9 +191,9 @@ serve({
224
191
  let buildCount = 0;
225
192
  build.onEnd((result) => {
226
193
  buildCount++;
227
- console.log(`[worker] Build #${buildCount} completed`);
194
+ io.console.log(`[worker] Build #${buildCount} completed`);
228
195
  if (result.errors.length > 0) {
229
- console.error("[worker] Build errors:", result.errors);
196
+ io.console.error("[worker] Build errors:" + JSON.stringify(result.errors));
230
197
  return;
231
198
  }
232
199
  // Skip restart on initial build (worker started separately below)
@@ -234,7 +201,7 @@ serve({
234
201
  return;
235
202
  }
236
203
  // Restart worker with new code
237
- console.log("[worker] Files changed, restarting...");
204
+ io.console.log("[worker] Files changed, restarting...");
238
205
  if (workerProcess && !workerProcess.killed) {
239
206
  const oldProcess = workerProcess;
240
207
  workerProcess = null;
@@ -253,54 +220,55 @@ serve({
253
220
  ],
254
221
  });
255
222
  // Initial build
256
- console.log("[worker] Initial build...");
223
+ io.console.log("[worker] Initial build...");
257
224
  await buildContext.rebuild();
258
225
  // Start watching for file changes
259
- console.log("[worker] Starting file watcher...");
226
+ io.console.log("[worker] Starting file watcher...");
260
227
  await buildContext.watch();
261
- console.log("[worker] File watcher active");
228
+ io.console.log("[worker] File watcher active");
262
229
  // Start the worker
263
- console.log("[worker] Starting...");
230
+ io.console.log("[worker] Starting...");
264
231
  workerProcess = spawnWorker();
265
232
  }
266
233
  catch (error) {
267
- console.error("Failed to setup build:", error instanceof Error ? error.message : error);
268
- process.exit(1);
234
+ io.console.error("Failed to setup build:" +
235
+ (error instanceof Error ? error.message : String(error)));
236
+ io.process.exit(1);
269
237
  }
270
238
  // Function to spawn Vite dev server
271
239
  function spawnViteDevServer() {
272
- const vite = spawn("npm", ["exec", "vite"], {
240
+ const vite = io.spawn("npm", ["exec", "vite"], {
273
241
  cwd,
274
242
  stdio: ["ignore", "pipe", "pipe"],
275
- env: { ...process.env, FORCE_COLOR: "1" },
243
+ env: { ...io.process.env, FORCE_COLOR: "1" },
276
244
  });
277
- vite.stdout.on("data", (data) => {
245
+ vite.stdout?.on("data", (data) => {
278
246
  const lines = data.toString().split("\n").filter(Boolean);
279
247
  for (const line of lines) {
280
- console.log(`[vite] ${line}`);
248
+ io.console.log(`[vite] ${line}`);
281
249
  }
282
250
  });
283
- vite.stderr.on("data", (data) => {
251
+ vite.stderr?.on("data", (data) => {
284
252
  const lines = data.toString().split("\n").filter(Boolean);
285
253
  for (const line of lines) {
286
- console.error(`[vite] ${line}`);
254
+ io.console.error(`[vite] ${line}`);
287
255
  }
288
256
  });
289
257
  vite.on("error", (error) => {
290
258
  if (error.code === "ENOENT") {
291
- console.error("\nError: Could not start Vite dev server.\n");
292
- console.error("npm is not found in PATH. Ensure Node.js is properly installed.");
259
+ io.console.error("\nError: Could not start Vite dev server.\n");
260
+ io.console.error("npm is not found in PATH. Ensure Node.js is properly installed.");
293
261
  }
294
262
  else {
295
- console.error("\nError starting Vite dev server:", error.message);
263
+ io.console.error("\nError starting Vite dev server:" + error.message);
296
264
  }
297
- console.error(`\nThe API server is still running at http://localhost:${port}`);
298
- console.error("To fix Vite, ensure dependencies are installed: npm install");
265
+ io.console.error(`\nThe API server is still running at http://localhost:${port}`);
266
+ io.console.error("To fix Vite, ensure dependencies are installed: npm install");
299
267
  });
300
268
  vite.on("close", (code) => {
301
269
  if (!isShuttingDown && code !== 0 && code !== null) {
302
- console.error(`\n[vite] Process exited with code ${code}`);
303
- console.error("[vite] Check if vite is installed: npm install");
270
+ io.console.error(`\n[vite] Process exited with code ${code}`);
271
+ io.console.error("[vite] Check if vite is installed: npm install");
304
272
  }
305
273
  viteProcess = null;
306
274
  });
@@ -311,7 +279,7 @@ serve({
311
279
  if (isShuttingDown)
312
280
  return;
313
281
  isShuttingDown = true;
314
- console.log("\nShutting down...");
282
+ io.console.log("\nShutting down...");
315
283
  // buildContext is guaranteed to be set before shutdown can be called
316
284
  await buildContext.dispose();
317
285
  if (workerProcess && !workerProcess.killed) {
@@ -322,21 +290,21 @@ serve({
322
290
  }
323
291
  // Give processes time to clean up, then force exit
324
292
  setTimeout(() => {
325
- process.exit(0);
293
+ io.process.exit(0);
326
294
  }, 2000);
327
295
  };
328
- process.on("SIGINT", () => void shutdown());
329
- process.on("SIGTERM", () => void shutdown());
296
+ io.process.on("SIGINT", () => void shutdown());
297
+ io.process.on("SIGTERM", () => void shutdown());
330
298
  // Start Vite
331
299
  viteProcess = spawnViteDevServer();
332
- console.log(`\nFrontend: http://localhost:5173`);
333
- console.log(`API proxy: /api/* -> http://localhost:${port}`);
334
- console.log("\nPress Ctrl+C to stop\n");
300
+ io.console.log(`\nFrontend: http://localhost:5173`);
301
+ io.console.log(`API proxy: /api/* -> http://localhost:${port}`);
302
+ io.console.log("\nPress Ctrl+C to stop\n");
335
303
  // Handle stdin for manual restart
336
- if (process.stdin.isTTY) {
337
- process.stdin.setRawMode(true);
338
- process.stdin.resume();
339
- process.stdin.on("data", (key) => {
304
+ if (io.process.stdin.isTTY) {
305
+ io.process.stdin.setRawMode(true);
306
+ io.process.stdin.resume();
307
+ io.process.stdin.on("data", (key) => {
340
308
  // Ctrl+C
341
309
  if (key[0] === 3) {
342
310
  void shutdown();
@@ -348,5 +316,33 @@ serve({
348
316
  }
349
317
  });
350
318
  }
319
+ }
320
+ export const devCommand = new Command("dev")
321
+ .description("Start the local development server")
322
+ .option("-p, --port <port>", "Port to run on", "3210")
323
+ .addHelpText("after", `
324
+ Prerequisites:
325
+ - Must have run 'fling init' first
326
+ - Must have run 'npm install' first
327
+ - Requires src/worker/index.ts
328
+
329
+ What it does:
330
+ - Bundles backend code with esbuild (same as production)
331
+ - Runs database migrations
332
+ - Starts cron jobs (if any are registered)
333
+ - Starts API server at http://localhost:PORT
334
+ - Starts Vite dev server at http://localhost:5173
335
+ - Proxies /api/* requests from Vite to the API server
336
+ - React HMR enabled for frontend development
337
+ - Backend: watches for changes and rebuilds/restarts
338
+
339
+ The servers run until you press Ctrl+C.
340
+
341
+ Examples:
342
+ fling dev Start on default port 3210
343
+ fling dev -p 8080 Start API on port 8080
344
+ `)
345
+ .action(async (options) => {
346
+ await runDev(options, createDefaultDevIO());
351
347
  });
352
348
  //# sourceMappingURL=dev.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,28 @@
2
2
  * fling feedback - Submit feedback to the Fling team
3
3
  */
4
4
  import { Command } from "commander";
5
+ import { type PlatformFetchFn } from "../utils/config.js";
6
+ import { type ConsoleIO, type ProcessIOWithStdio, type SimplePromptIOWithMultiline } from "../utils/cli-io.js";
7
+ /**
8
+ * Combined dependencies for feedback command.
9
+ */
10
+ export interface FeedbackDeps {
11
+ console: ConsoleIO;
12
+ process: ProcessIOWithStdio;
13
+ user: SimplePromptIOWithMultiline;
14
+ isLoggedIn: () => boolean;
15
+ platformFetch: PlatformFetchFn;
16
+ findEnclosingProject: (startDir: string) => string | null;
17
+ getProjectName: (cwd?: string) => string;
18
+ }
19
+ export declare function createDefaultFeedbackDeps(): FeedbackDeps;
20
+ export declare const defaultFeedbackDeps: FeedbackDeps;
21
+ /**
22
+ * Run the feedback command.
23
+ * Exported for testing with injected dependencies.
24
+ */
25
+ export declare function runFeedback(messageArg: string | undefined, options: {
26
+ interactive?: boolean;
27
+ }, deps?: FeedbackDeps): Promise<void>;
5
28
  export declare const feedbackCommand: Command;
6
29
  //# sourceMappingURL=feedback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqDpC,eAAO,MAAM,eAAe,SAmFxB,CAAC"}
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrF,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,KAAK,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAU/G;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,IAAI,EAAE,2BAA2B,CAAC;IAClC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,aAAa,EAAE,eAAe,CAAC;IAC/B,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC1D,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C;AAMD,wBAAgB,yBAAyB,IAAI,YAAY,CAUxD;AAED,eAAO,MAAM,mBAAmB,cAA8B,CAAC;AAM/D;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,EAClC,IAAI,GAAE,YAAkC,GACvC,OAAO,CAAC,IAAI,CAAC,CAmEf;AAED,eAAO,MAAM,eAAe,SAkBxB,CAAC"}
@@ -2,71 +2,39 @@
2
2
  * fling feedback - Submit feedback to the Fling team
3
3
  */
4
4
  import { Command } from "commander";
5
- import { createInterface } from "node:readline";
6
5
  import { isLoggedIn, platformFetch } from "../utils/config.js";
7
6
  import { findEnclosingProject } from "../utils/project.js";
8
7
  import { getProjectName } from "../utils/project-name.js";
8
+ import { consoleIO, processIO, createSimplePromptIOWithMultiline } from "../utils/cli-io-impl.js";
9
9
  const MIN_LENGTH = 10;
10
10
  const MAX_LENGTH = 5000;
11
- /**
12
- * Prompt for single-line input.
13
- */
14
- async function prompt(question) {
15
- const rl = createInterface({
16
- input: process.stdin,
17
- output: process.stdout,
18
- });
19
- return new Promise((resolve) => {
20
- rl.question(question, (answer) => {
21
- rl.close();
22
- resolve(answer);
23
- });
24
- });
11
+ // ═══════════════════════════════════════════════════════
12
+ // DEFAULT IMPLEMENTATIONS
13
+ // ═══════════════════════════════════════════════════════
14
+ export function createDefaultFeedbackDeps() {
15
+ return {
16
+ console: consoleIO,
17
+ process: processIO,
18
+ user: createSimplePromptIOWithMultiline(consoleIO, processIO),
19
+ isLoggedIn,
20
+ platformFetch,
21
+ findEnclosingProject,
22
+ getProjectName,
23
+ };
25
24
  }
25
+ export const defaultFeedbackDeps = createDefaultFeedbackDeps();
26
+ // ═══════════════════════════════════════════════════════
27
+ // CORE FUNCTIONS (with DI)
28
+ // ═══════════════════════════════════════════════════════
26
29
  /**
27
- * Prompt for multi-line input (interactive mode).
28
- * User enters text and presses Ctrl+D (Unix) or Ctrl+Z (Windows) to finish.
30
+ * Run the feedback command.
31
+ * Exported for testing with injected dependencies.
29
32
  */
30
- async function promptMultiline() {
31
- console.log("Enter your feedback (press Ctrl+D when done):");
32
- console.log("---");
33
- const rl = createInterface({
34
- input: process.stdin,
35
- output: process.stdout,
36
- terminal: false,
37
- });
38
- const lines = [];
39
- return new Promise((resolve) => {
40
- rl.on("line", (line) => {
41
- lines.push(line);
42
- });
43
- rl.on("close", () => {
44
- console.log("---");
45
- resolve(lines.join("\n"));
46
- });
47
- });
48
- }
49
- export const feedbackCommand = new Command("feedback")
50
- .description("Submit feedback, bug reports, or feature requests to the Fling team")
51
- .argument("[message]", "Feedback message, 10-5000 chars (will prompt if not provided)")
52
- .option("-i, --interactive", "Multi-line input mode (end with Ctrl+D)")
53
- .addHelpText("after", `
54
- Where feedback goes:
55
- Feedback is sent directly to the Fling development team for review.
56
- Include details about bugs, feature requests, or general feedback.
57
-
58
- Requires login (run 'fling login' first).
59
-
60
- Examples:
61
- fling feedback "Love the new logs command!"
62
- fling feedback "Bug: push fails when bundle > 1MB"
63
- fling feedback -i Multi-line mode for detailed feedback
64
- `)
65
- .action(async (messageArg, options) => {
33
+ export async function runFeedback(messageArg, options, deps = defaultFeedbackDeps) {
66
34
  // Check if logged in
67
- if (!isLoggedIn()) {
68
- console.error("Not logged in. Run 'fling login' first.");
69
- process.exit(1);
35
+ if (!deps.isLoggedIn()) {
36
+ deps.console.error("Not logged in. Run 'fling login' first.");
37
+ deps.process.exit(1);
70
38
  }
71
39
  // Get feedback message
72
40
  let message;
@@ -74,32 +42,32 @@ Examples:
74
42
  message = messageArg;
75
43
  }
76
44
  else if (options.interactive) {
77
- message = await promptMultiline();
45
+ message = await deps.user.promptMultiline();
78
46
  }
79
47
  else {
80
- message = await prompt("Feedback: ");
48
+ message = await deps.user.prompt("Feedback: ");
81
49
  }
82
50
  // Trim and validate
83
51
  message = message.trim();
84
52
  if (!message) {
85
- console.error("Feedback message is required.");
86
- process.exit(1);
53
+ deps.console.error("Feedback message is required.");
54
+ deps.process.exit(1);
87
55
  }
88
56
  if (message.length < MIN_LENGTH) {
89
- console.error(`Feedback must be at least ${MIN_LENGTH} characters.`);
90
- process.exit(1);
57
+ deps.console.error(`Feedback must be at least ${MIN_LENGTH} characters.`);
58
+ deps.process.exit(1);
91
59
  }
92
60
  if (message.length > MAX_LENGTH) {
93
- console.error(`Feedback must be less than ${MAX_LENGTH} characters.`);
94
- process.exit(1);
61
+ deps.console.error(`Feedback must be less than ${MAX_LENGTH} characters.`);
62
+ deps.process.exit(1);
95
63
  }
96
64
  // Detect if we're in a Fling project and get the project name
97
- const projectRoot = findEnclosingProject(process.cwd());
98
- const projectName = projectRoot ? getProjectName(projectRoot) : undefined;
65
+ const projectRoot = deps.findEnclosingProject(deps.process.cwd());
66
+ const projectName = projectRoot ? deps.getProjectName(projectRoot) : undefined;
99
67
  // Submit feedback
100
- console.log("Submitting feedback...");
68
+ deps.console.log("Submitting feedback...");
101
69
  try {
102
- const response = await platformFetch("/feedback", {
70
+ const response = await deps.platformFetch("/feedback", {
103
71
  method: "POST",
104
72
  headers: {
105
73
  "Content-Type": "application/json",
@@ -108,14 +76,33 @@ Examples:
108
76
  });
109
77
  const data = (await response.json());
110
78
  if (!response.ok) {
111
- console.error(`Failed to submit feedback: ${data.error ?? "Unknown error"}`);
112
- process.exit(1);
79
+ deps.console.error(`Failed to submit feedback: ${data.error ?? "Unknown error"}`);
80
+ deps.process.exit(1);
113
81
  }
114
- console.log("Thank you! Your feedback has been submitted.");
82
+ deps.console.log("Thank you! Your feedback has been submitted.");
115
83
  }
116
84
  catch (error) {
117
- console.error(`Failed to submit feedback: ${error instanceof Error ? error.message : "Network error"}`);
118
- process.exit(1);
85
+ deps.console.error(`Failed to submit feedback: ${error instanceof Error ? error.message : "Network error"}`);
86
+ deps.process.exit(1);
119
87
  }
88
+ }
89
+ export const feedbackCommand = new Command("feedback")
90
+ .description("Submit feedback, bug reports, or feature requests to the Fling team")
91
+ .argument("[message]", "Feedback message, 10-5000 chars (will prompt if not provided)")
92
+ .option("-i, --interactive", "Multi-line input mode (end with Ctrl+D)")
93
+ .addHelpText("after", `
94
+ Where feedback goes:
95
+ Feedback is sent directly to the Fling development team for review.
96
+ Include details about bugs, feature requests, or general feedback.
97
+
98
+ Requires login (run 'fling login' first).
99
+
100
+ Examples:
101
+ fling feedback "Love the new logs command!"
102
+ fling feedback "Bug: push fails when bundle > 1MB"
103
+ fling feedback -i Multi-line mode for detailed feedback
104
+ `)
105
+ .action(async (messageArg, options) => {
106
+ await runFeedback(messageArg, options);
120
107
  });
121
108
  //# sourceMappingURL=feedback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../../src/cli/commands/feedback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../../src/cli/commands/feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAElG,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,UAAU,GAAG,IAAI,CAAC;AAmBxB,0DAA0D;AAC1D,0BAA0B;AAC1B,0DAA0D;AAE1D,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,iCAAiC,CAAC,SAAS,EAAE,SAAS,CAAC;QAC7D,UAAU;QACV,aAAa;QACb,oBAAoB;QACpB,cAAc;KACf,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,EAAE,CAAC;AAE/D,0DAA0D;AAC1D,2BAA2B;AAC3B,0DAA0D;AAE1D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAA8B,EAC9B,OAAkC,EAClC,OAAqB,mBAAmB;IAExC,qBAAqB;IACrB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAe,CAAC;IACpB,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,GAAG,UAAU,CAAC;IACvB,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAED,oBAAoB;IACpB,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAEzB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,6BAA6B,UAAU,cAAc,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,UAAU,cAAc,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,8DAA8D;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/E,kBAAkB;IAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;SACxD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGlC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACzF,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,qEAAqE,CAAC;KAClF,QAAQ,CAAC,WAAW,EAAE,+DAA+D,CAAC;KACtF,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,CAAC;KACtE,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;CAWvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,UAA8B,EAAE,OAAkC,EAAE,EAAE;IACnF,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC"}
@@ -2,5 +2,14 @@
2
2
  * fling init - Scaffold a new project in the current directory
3
3
  */
4
4
  import { Command } from "commander";
5
+ import type { InitIO } from "../utils/cli-io.js";
6
+ export interface InitOptions {
7
+ local?: boolean;
8
+ }
9
+ /**
10
+ * Run the init command logic.
11
+ * Extracted for testability via dependency injection.
12
+ */
13
+ export declare function runInit(options: InitOptions, io: InitIO): void;
5
14
  export declare const initCommand: Command;
6
15
  //# sourceMappingURL=init.d.ts.map