flingit 0.0.4 → 0.0.6

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 (38) hide show
  1. package/README.md +18 -21
  2. package/dist/cli/commands/cron.d.ts.map +1 -1
  3. package/dist/cli/commands/cron.js +16 -12
  4. package/dist/cli/commands/cron.js.map +1 -1
  5. package/dist/cli/commands/dev-worker.d.ts +12 -0
  6. package/dist/cli/commands/dev-worker.d.ts.map +1 -0
  7. package/dist/cli/commands/dev-worker.js +66 -0
  8. package/dist/cli/commands/dev-worker.js.map +1 -0
  9. package/dist/cli/commands/dev.d.ts +8 -1
  10. package/dist/cli/commands/dev.d.ts.map +1 -1
  11. package/dist/cli/commands/dev.js +137 -82
  12. package/dist/cli/commands/dev.js.map +1 -1
  13. package/dist/cli/commands/onboard.d.ts +11 -3
  14. package/dist/cli/commands/onboard.d.ts.map +1 -1
  15. package/dist/cli/commands/onboard.js +148 -51
  16. package/dist/cli/commands/onboard.js.map +1 -1
  17. package/dist/cli/commands/push.d.ts.map +1 -1
  18. package/dist/cli/commands/push.js +39 -33
  19. package/dist/cli/commands/push.js.map +1 -1
  20. package/dist/cli/utils/onboarding-io-impl.d.ts +12 -0
  21. package/dist/cli/utils/onboarding-io-impl.d.ts.map +1 -0
  22. package/dist/cli/utils/onboarding-io-impl.js +85 -0
  23. package/dist/cli/utils/onboarding-io-impl.js.map +1 -0
  24. package/dist/cli/utils/onboarding-io.d.ts +60 -0
  25. package/dist/cli/utils/onboarding-io.d.ts.map +1 -0
  26. package/dist/cli/utils/onboarding-io.js +9 -0
  27. package/dist/cli/utils/onboarding-io.js.map +1 -0
  28. package/dist/cli/utils/retry.d.ts +25 -0
  29. package/dist/cli/utils/retry.d.ts.map +1 -0
  30. package/dist/cli/utils/retry.js +34 -0
  31. package/dist/cli/utils/retry.js.map +1 -0
  32. package/dist/runtime/migrate.d.ts.map +1 -1
  33. package/dist/runtime/migrate.js +3 -2
  34. package/dist/runtime/migrate.js.map +1 -1
  35. package/dist/worker-runtime/index.d.ts.map +1 -1
  36. package/dist/worker-runtime/index.js +3 -2
  37. package/dist/worker-runtime/index.js.map +1 -1
  38. package/package.json +1 -1
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ## What is Fling?
8
8
 
9
- Fling lets you build personal software tools by describing what you want. You open a terminal, type `fling`, and start talking to Claude. That's it.
9
+ Fling is the fastest way from Claude Code to deployed software.
10
10
 
11
11
  > "I want a podcast feed that picks randomly between Hard Fork and The Daily each day, and gives me one episode per day."
12
12
 
@@ -24,26 +24,9 @@ That's it. This creates a project at `~/fling`, sets up the environment, and ope
24
24
 
25
25
  Requires Node.js 22 or later.
26
26
 
27
- ### Global Install (Optional)
28
-
29
- If you prefer a global command:
30
-
31
- ```bash
32
- npm install -g flingit
33
- fling
34
- ```
35
-
36
- ### Returning to Your Project
37
-
38
- ```bash
39
- npx flingit
40
- ```
41
-
42
- Opens Claude Code in your existing project. Continue where you left off.
43
-
44
27
  ## How It Works
45
28
 
46
- Fling provides four primitives that Claude uses to build your tools:
29
+ Fling provides four primitives (more to come) that Claude uses to build your tools:
47
30
 
48
31
  | Primitive | What it does |
49
32
  |-----------|--------------|
@@ -52,7 +35,7 @@ Fling provides four primitives that Claude uses to build your tools:
52
35
  | **Database** | Store and query data (SQLite) |
53
36
  | **Secrets** | Manage API keys and credentials |
54
37
 
55
- Everything works locally during development. When you're ready, `fling push` deploys to production.
38
+ Everything works locally during development. When you're ready, just tell Claude Code to deploys to production.
56
39
 
57
40
  ## Design Philosophy
58
41
 
@@ -60,10 +43,20 @@ Everything works locally during development. When you're ready, `fling push` dep
60
43
 
61
44
  2. **Standard tools over custom abstractions** — Hono for HTTP, SQLite for data, standard cron syntax. Claude already knows these.
62
45
 
63
- 3. **Local-first development** — Everything works locally. Deployment is an optimization.
46
+ 3. **Local-first development** — Everything works and can be tested locally.
64
47
 
65
48
  4. **Fail fast** — Missing secrets throw. Invalid syntax throws. Obvious errors help Claude debug.
66
49
 
50
+ ## Running Fling From Source
51
+
52
+ To run fling from this repo, just do
53
+
54
+ ```bash
55
+ npm run cli
56
+ ```
57
+
58
+ That's the equivalent of running `npx flingit`. It will also do the onboarding flow and create a Fling project, but the `flingit` dependency there will point to your local package instead of the public package on NPM.
59
+
67
60
  ## Publishing
68
61
 
69
62
  The package is published to npm as `flingit`. The `prepublishOnly` script runs lint, typecheck, build, and tests automatically.
@@ -82,4 +75,8 @@ npm pack --dry-run
82
75
 
83
76
  - [ARCHITECTURE.md](./ARCHITECTURE.md) — How Fling works internally (CLI commands, runtime API, platform)
84
77
  - [API.md](./API.md) — Platform HTTP API reference
78
+ - [DEPLOYMENT.md](./DEPLOYMENT.md) — How the Fling platform deploys
79
+ - [SCRIPTS.md](./SCRIPTS.md) — All the scripts in this repo
80
+ - [CLI.md](./CLI.md) — All the commands provided by the CLI
81
+ - [SMOKE-TEST.md](./SMOKE-TEST.md) — What the smoke-test tests
85
82
  - [SPEC.md](./SPEC.md) — Original product specification
@@ -1 +1 @@
1
- {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cron.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyLpC,eAAO,MAAM,WAAW,SAoCpB,CAAC"}
1
+ {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cron.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4LpC,eAAO,MAAM,WAAW,SAoCpB,CAAC"}
@@ -40,21 +40,23 @@ async function listCronJobs() {
40
40
  }
41
41
  // Print table header
42
42
  console.log("");
43
- console.log("Name".padEnd(30) +
43
+ console.log("Name".padEnd(25) +
44
44
  "Schedule".padEnd(15) +
45
- "Enabled".padEnd(10) +
46
- "Last Run".padEnd(22) +
45
+ "Scheduled For".padEnd(22) +
46
+ "Started At".padEnd(22) +
47
47
  "Status");
48
- console.log("-".repeat(90));
48
+ console.log("-".repeat(95));
49
49
  for (const job of data.crons) {
50
- const name = truncate(job.name, 28).padEnd(30);
50
+ const name = truncate(job.name, 23).padEnd(25);
51
51
  const schedule = truncate(job.schedule, 13).padEnd(15);
52
- const enabled = (job.enabled ? "yes" : "no").padEnd(10);
53
- const lastRun = job.lastRun
52
+ const scheduledFor = job.lastRun
54
53
  ? formatDate(job.lastRun.scheduledFor).padEnd(22)
55
54
  : "never".padEnd(22);
55
+ const startedAt = job.lastRun
56
+ ? formatDate(job.lastRun.startedAt).padEnd(22)
57
+ : "-".padEnd(22);
56
58
  const status = job.lastRun?.status ?? "-";
57
- console.log(name + schedule + enabled + lastRun + status);
59
+ console.log(name + schedule + scheduledFor + startedAt + status);
58
60
  }
59
61
  console.log("");
60
62
  }
@@ -77,22 +79,24 @@ async function showCronHistory(name, limit) {
77
79
  console.log(`Invocation history for "${name}":`);
78
80
  console.log("");
79
81
  console.log("Scheduled For".padEnd(22) +
82
+ "Started At".padEnd(22) +
80
83
  "Finished At".padEnd(22) +
81
84
  "Status".padEnd(10) +
82
85
  "Result / Error");
83
- console.log("-".repeat(90));
86
+ console.log("-".repeat(110));
84
87
  for (const inv of data.invocations) {
85
88
  const scheduledFor = formatDate(inv.scheduledFor).padEnd(22);
89
+ const startedAt = formatDate(inv.startedAt).padEnd(22);
86
90
  const finishedAt = inv.finishedAt
87
91
  ? formatDate(inv.finishedAt).padEnd(22)
88
92
  : "running...".padEnd(22);
89
93
  const status = inv.status.padEnd(10);
90
94
  const result = inv.status === "error"
91
- ? truncate(inv.error ?? "Unknown error", 40)
95
+ ? truncate(inv.error ?? "Unknown error", 30)
92
96
  : inv.result
93
- ? truncate(JSON.stringify(inv.result), 40)
97
+ ? truncate(JSON.stringify(inv.result), 30)
94
98
  : "-";
95
- console.log(scheduledFor + finishedAt + status + result);
99
+ console.log(scheduledFor + startedAt + finishedAt + status + result);
96
100
  }
97
101
  console.log("");
98
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../../src/cli/commands/cron.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAqC/D;;GAEG;AACH,SAAS,UAAU,CAAC,SAAiB;IACnC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAClC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY;IACzB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAE/D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqB,CAAC;IAEzD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACf,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,QAAQ,CACX,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO;YACzB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACxD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,0BAA0B,kBAAkB,CAAC,IAAI,CAAC,sBAAsB,KAAK,EAAE,CAChF,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA2B,CAAC;IAE/D,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,sCAAsC,IAAI,IAAI,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,gBAAgB,CACnB,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU;YAC/B,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,MAAM,GACV,GAAG,CAAC,MAAM,KAAK,OAAO;YACpB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC;YAC5C,CAAC,CAAC,GAAG,CAAC,MAAM;gBACV,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBAC1C,CAAC,CAAC,GAAG,CAAC;QAEZ,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,IAAY;IACxC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,MAAM,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,0BAA0B,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAC5D,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;IAE5D,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CACT,cAAc,IAAI,mBAAmB,IAAI,CAAC,YAAY,aAAa,IAAI,CAAC,MAAM,EAAE,CACjF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,cAAc,IAAI,mBAAmB,IAAI,CAAC,YAAY,aAAa,IAAI,CAAC,MAAM,EAAE,CACjF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,kBAAkB,CAAC;KAC/B,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;CAyBH,CACE;KACA,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;IACtB,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,WAAW;KACR,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,4BAA4B;AAC5B,WAAW;KACR,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,aAAa,EAAE,+BAA+B,EAAE,IAAI,CAAC;KAC5D,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA0B,EAAE,EAAE;IACzD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,4BAA4B;AAC5B,WAAW;KACR,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7B,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../../src/cli/commands/cron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * fling dev worker - The actual development server process
3
+ *
4
+ * This script is spawned by `fling dev` using `tsx watch`.
5
+ * tsx watch monitors all imported files and restarts this process on changes.
6
+ *
7
+ * Environment variables:
8
+ * PORT - Port to run the HTTP server on (default: 3210)
9
+ * PROJECT_DIR - Project directory (default: cwd)
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=dev-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-worker.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * fling dev worker - The actual development server process
3
+ *
4
+ * This script is spawned by `fling dev` using `tsx watch`.
5
+ * tsx watch monitors all imported files and restarts this process on changes.
6
+ *
7
+ * Environment variables:
8
+ * PORT - Port to run the HTTP server on (default: 3210)
9
+ * PROJECT_DIR - Project directory (default: cwd)
10
+ */
11
+ import { serve } from "@hono/node-server";
12
+ import { pathToFileURL } from "node:url";
13
+ import { getWorkerEntryPath } from "../utils/project.js";
14
+ const port = parseInt(process.env["PORT"] ?? "3210", 10);
15
+ const projectDir = process.env["PROJECT_DIR"] ?? process.cwd();
16
+ const workerEntry = getWorkerEntryPath(projectDir);
17
+ console.log(`[worker] Starting backend server (pid ${process.pid})...`);
18
+ let server = null;
19
+ async function main() {
20
+ try {
21
+ // Import the user's app - this registers routes, cron jobs, and migrations
22
+ // tsx handles TypeScript imports automatically
23
+ const appUrl = pathToFileURL(workerEntry).href;
24
+ await import(appUrl);
25
+ // Import runtime modules
26
+ const { app } = await import("../../runtime/http.js");
27
+ const { runMigrations } = await import("../../runtime/migrate.js");
28
+ const { startCronJobs, getCronJobs, stopCronJobs } = await import("../../runtime/cron.js");
29
+ const { closeLogDatabase } = await import("../../runtime/log.js");
30
+ // Run migrations (before starting crons or HTTP server)
31
+ await runMigrations();
32
+ // Start cron jobs
33
+ startCronJobs();
34
+ const cronJobs = getCronJobs();
35
+ if (cronJobs.size > 0) {
36
+ console.log(`[worker] Cron jobs: ${cronJobs.size} registered`);
37
+ }
38
+ // Graceful shutdown handler
39
+ const shutdown = () => {
40
+ console.log("[worker] Shutting down...");
41
+ stopCronJobs();
42
+ closeLogDatabase();
43
+ if (server) {
44
+ server.close();
45
+ }
46
+ process.exit(0);
47
+ };
48
+ process.on("SIGINT", shutdown);
49
+ process.on("SIGTERM", shutdown);
50
+ // Start HTTP server
51
+ console.log(`[worker] API server: http://localhost:${port}`);
52
+ server = serve({
53
+ fetch: app.fetch,
54
+ port,
55
+ });
56
+ }
57
+ catch (error) {
58
+ console.error("[worker] Failed to start:", error);
59
+ process.exit(1);
60
+ }
61
+ }
62
+ main().catch((error) => {
63
+ console.error("[worker] Unhandled error:", error);
64
+ process.exit(1);
65
+ });
66
+ //# sourceMappingURL=dev-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-worker.js","sourceRoot":"","sources":["../../../src/cli/commands/dev-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAc,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AACzD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAE/D,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAEnD,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAExE,IAAI,MAAM,GAAsB,IAAI,CAAC;AAErC,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,2EAA2E;QAC3E,+CAA+C;QAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QAC/C,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAErB,yBAAyB;QACzB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACnE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAC/D,uBAAuB,CACxB,CAAC;QACF,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAElE,wDAAwD;QACxD,MAAM,aAAa,EAAE,CAAC;QAEtB,kBAAkB;QAClB,aAAa,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,IAAI,aAAa,CAAC,CAAC;QACjE,CAAC;QAED,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhC,oBAAoB;QACpB,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;QAE7D,MAAM,GAAG,KAAK,CAAC;YACb,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,5 +1,12 @@
1
1
  /**
2
- * fling dev - Run the local development server
2
+ * fling dev - Run the local development server with HMR
3
+ *
4
+ * This is a thin supervisor that spawns:
5
+ * 1. tsx watch dev-worker.ts - Backend server with automatic restart on changes
6
+ * 2. Vite dev server - Frontend with HMR
7
+ *
8
+ * tsx watch automatically monitors all imported files (follows the import graph)
9
+ * and restarts the worker process when any dependency changes.
3
10
  */
4
11
  import { Command } from "commander";
5
12
  export declare const devCommand: Command;
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,UAAU,SAyKnB,CAAC"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,eAAO,MAAM,UAAU,SAyNnB,CAAC"}
@@ -1,13 +1,25 @@
1
1
  /**
2
- * fling dev - Run the local development server
2
+ * fling dev - Run the local development server with HMR
3
+ *
4
+ * This is a thin supervisor that spawns:
5
+ * 1. tsx watch dev-worker.ts - Backend server with automatic restart on changes
6
+ * 2. Vite dev server - Frontend with HMR
7
+ *
8
+ * tsx watch automatically monitors all imported files (follows the import graph)
9
+ * and restarts the worker process when any dependency changes.
3
10
  */
4
11
  import { Command } from "commander";
5
- import { serve } from "@hono/node-server";
6
12
  import { existsSync } from "node:fs";
7
- import { join } from "node:path";
8
- import { pathToFileURL } from "node:url";
13
+ import { join, dirname } from "node:path";
9
14
  import { spawn } from "node:child_process";
10
- import { getWorkerEntryPath, hasWorkerEntry } from "../utils/project.js";
15
+ import { fileURLToPath } from "node:url";
16
+ import { createRequire } from "node:module";
17
+ import { hasWorkerEntry } from "../utils/project.js";
18
+ // Find tsx CLI from flingit's node_modules, not the user's project
19
+ const require = createRequire(import.meta.url);
20
+ const tsxCliPath = require.resolve("tsx/cli");
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ const __dirname = dirname(__filename);
11
23
  export const devCommand = new Command("dev")
12
24
  .description("Start the local development server")
13
25
  .option("-p, --port <port>", "Port to run on", "3210")
@@ -24,8 +36,10 @@ What it does:
24
36
  - Starts Vite dev server at http://localhost:5173
25
37
  - Proxies /api/* requests from Vite to the API server
26
38
  - React HMR enabled for frontend development
39
+ - Backend HMR: changes to src/worker/**/*.ts trigger automatic restart
27
40
 
28
41
  The servers run until you press Ctrl+C.
42
+ Press Enter to manually restart the backend.
29
43
 
30
44
  Examples:
31
45
  fling dev Start on default port 3210
@@ -46,78 +60,88 @@ Examples:
46
60
  console.error("Run 'fling init' to create a new project with the correct structure.");
47
61
  process.exit(1);
48
62
  }
49
- const workerEntry = getWorkerEntryPath(cwd);
50
- let viteProcess = null;
51
63
  console.log("Starting Fling development server...\n");
52
- try {
53
- // Register tsx to enable TypeScript imports
54
- // This must happen before importing any TypeScript files
55
- await import("tsx/esm/api").then((tsx) => tsx.register());
56
- // Using pathToFileURL for proper ESM imports
57
- const appUrl = pathToFileURL(workerEntry).href;
58
- // Import the user's app - this registers routes, cron jobs, and migrations
59
- await import(appUrl);
60
- // Import runtime modules
61
- const { app } = await import("../../runtime/http.js");
62
- const { runMigrations } = await import("../../runtime/migrate.js");
63
- const { startCronJobs, getCronJobs } = await import("../../runtime/cron.js");
64
- // Run migrations (before starting crons or HTTP server)
65
- await runMigrations();
66
- // Start cron jobs
67
- startCronJobs();
68
- const cronJobs = getCronJobs();
69
- if (cronJobs.size > 0) {
70
- console.log(`Cron jobs: ${cronJobs.size} registered`);
71
- }
72
- // Import log database cleanup
73
- const { closeLogDatabase } = await import("../../runtime/log.js");
74
- const { stopCronJobs } = await import("../../runtime/cron.js");
75
- // Function to spawn Vite dev server
76
- function spawnViteDevServer(projectDir) {
77
- // Use npm exec for reliability and clear error messages
78
- const vite = spawn("npm", ["exec", "vite"], {
79
- cwd: projectDir,
80
- stdio: ["ignore", "pipe", "pipe"],
81
- env: { ...process.env, FORCE_COLOR: "1" },
82
- });
83
- // Prefix Vite output for clarity
84
- // stdout/stderr are always defined when using stdio: ["ignore", "pipe", "pipe"]
85
- vite.stdout.on("data", (data) => {
86
- const lines = data.toString().split("\n").filter(Boolean);
87
- for (const line of lines) {
88
- console.log(`[vite] ${line}`);
89
- }
90
- });
91
- vite.stderr.on("data", (data) => {
92
- const lines = data.toString().split("\n").filter(Boolean);
93
- for (const line of lines) {
94
- console.error(`[vite] ${line}`);
64
+ console.log("Backend HMR enabled - changes to src/worker/**/*.ts will");
65
+ console.log("trigger automatic restart.\n");
66
+ let workerProcess = null;
67
+ let viteProcess = null;
68
+ let isShuttingDown = false;
69
+ // Path to the dev-worker.ts script
70
+ // When running from source (via tsx), use .ts extension
71
+ // When running from dist (published package), use .js extension
72
+ const workerScriptTs = join(__dirname, "dev-worker.ts");
73
+ const workerScriptJs = join(__dirname, "dev-worker.js");
74
+ const workerScript = existsSync(workerScriptTs)
75
+ ? workerScriptTs
76
+ : workerScriptJs;
77
+ // Function to spawn the backend worker with tsx watch
78
+ function spawnWorker() {
79
+ // Use tsx watch to run the worker script
80
+ // tsx watch automatically monitors all imported files
81
+ // We use the tsx CLI from flingit's node_modules (resolved at module load)
82
+ const worker = spawn(process.execPath, [tsxCliPath, "watch", "--clear-screen=false", workerScript], {
83
+ cwd,
84
+ stdio: ["inherit", "pipe", "pipe"],
85
+ env: {
86
+ ...process.env,
87
+ PORT: String(port),
88
+ PROJECT_DIR: cwd,
89
+ FORCE_COLOR: "1",
90
+ },
91
+ });
92
+ // Pipe worker output
93
+ // stdout/stderr are always defined when using stdio: ["inherit", "pipe", "pipe"]
94
+ worker.stdout.on("data", (data) => {
95
+ const lines = data.toString().split("\n").filter(Boolean);
96
+ for (const line of lines) {
97
+ console.log(line);
98
+ }
99
+ });
100
+ worker.stderr.on("data", (data) => {
101
+ const lines = data.toString().split("\n").filter(Boolean);
102
+ for (const line of lines) {
103
+ console.error(line);
104
+ }
105
+ });
106
+ worker.on("error", (error) => {
107
+ console.error("\nError: Could not start backend worker:", error.message);
108
+ process.exit(1);
109
+ });
110
+ worker.on("close", (code) => {
111
+ workerProcess = null;
112
+ if (!isShuttingDown) {
113
+ if (code !== 0 && code !== null) {
114
+ console.error(`\n[worker] Backend server failed with code ${code}`);
95
115
  }
96
- });
97
- return vite;
98
- }
99
- // Graceful shutdown handler
100
- const shutdown = () => {
101
- console.log("\nShutting down...");
102
- if (viteProcess && !viteProcess.killed) {
103
- viteProcess.kill("SIGTERM");
116
+ // Worker died unexpectedly - shut down everything
117
+ console.error("[worker] Backend server stopped. Shutting down...");
118
+ shutdown();
104
119
  }
105
- stopCronJobs();
106
- closeLogDatabase();
107
- process.exit(0);
108
- };
109
- process.on("SIGINT", shutdown);
110
- process.on("SIGTERM", shutdown);
111
- // Start HTTP server
112
- console.log(`\nAPI server: http://localhost:${port}`);
113
- serve({
114
- fetch: app.fetch,
115
- port,
116
120
  });
117
- // Start Vite dev server
118
- console.log("Starting Vite dev server...");
119
- viteProcess = spawnViteDevServer(cwd);
120
- viteProcess.on("error", (error) => {
121
+ return worker;
122
+ }
123
+ // Function to spawn Vite dev server
124
+ function spawnViteDevServer() {
125
+ const vite = spawn("npm", ["exec", "vite"], {
126
+ cwd,
127
+ stdio: ["ignore", "pipe", "pipe"],
128
+ env: { ...process.env, FORCE_COLOR: "1" },
129
+ });
130
+ // Prefix Vite output for clarity
131
+ // stdout/stderr are always defined when using stdio: ["ignore", "pipe", "pipe"]
132
+ vite.stdout.on("data", (data) => {
133
+ const lines = data.toString().split("\n").filter(Boolean);
134
+ for (const line of lines) {
135
+ console.log(`[vite] ${line}`);
136
+ }
137
+ });
138
+ vite.stderr.on("data", (data) => {
139
+ const lines = data.toString().split("\n").filter(Boolean);
140
+ for (const line of lines) {
141
+ console.error(`[vite] ${line}`);
142
+ }
143
+ });
144
+ vite.on("error", (error) => {
121
145
  if (error.code === "ENOENT") {
122
146
  console.error("\nError: Could not start Vite dev server.\n");
123
147
  console.error("npm is not found in PATH. Ensure Node.js is properly installed.");
@@ -128,20 +152,51 @@ Examples:
128
152
  console.error(`\nThe API server is still running at http://localhost:${port}`);
129
153
  console.error("To fix Vite, ensure dependencies are installed: npm install");
130
154
  });
131
- viteProcess.on("close", (code) => {
132
- if (code !== 0 && code !== null) {
155
+ vite.on("close", (code) => {
156
+ if (!isShuttingDown && code !== 0 && code !== null) {
133
157
  console.error(`\n[vite] Process exited with code ${code}`);
134
158
  console.error("[vite] Check if vite is installed: npm install");
135
159
  }
136
160
  viteProcess = null;
137
161
  });
138
- console.log(`\nFrontend: http://localhost:5173`);
139
- console.log(`API proxy: /api/* -> http://localhost:${port}`);
140
- console.log("\nPress Ctrl+C to stop\n");
141
- }
142
- catch (error) {
143
- console.error("Failed to start development server:", error);
144
- process.exit(1);
162
+ return vite;
145
163
  }
164
+ // Reset terminal to normal state (tsx watch may leave it in raw mode)
165
+ const resetTerminal = () => {
166
+ if (process.stdin.isTTY) {
167
+ process.stdin.setRawMode(false);
168
+ }
169
+ // Write terminal reset sequences to restore normal behavior
170
+ process.stdout.write("\x1b[?1000l"); // Disable mouse tracking
171
+ process.stdout.write("\x1b[?25h"); // Show cursor
172
+ };
173
+ // Graceful shutdown handler
174
+ const shutdown = () => {
175
+ if (isShuttingDown)
176
+ return;
177
+ isShuttingDown = true;
178
+ // Reset terminal immediately
179
+ resetTerminal();
180
+ console.log("\nShutting down...");
181
+ if (workerProcess && !workerProcess.killed) {
182
+ workerProcess.kill("SIGTERM");
183
+ }
184
+ if (viteProcess && !viteProcess.killed) {
185
+ viteProcess.kill("SIGTERM");
186
+ }
187
+ // Give processes time to clean up, then force exit
188
+ setTimeout(() => {
189
+ resetTerminal(); // Reset again in case child processes changed it
190
+ process.exit(0);
191
+ }, 2000);
192
+ };
193
+ process.on("SIGINT", shutdown);
194
+ process.on("SIGTERM", shutdown);
195
+ // Start both processes
196
+ workerProcess = spawnWorker();
197
+ viteProcess = spawnViteDevServer();
198
+ console.log(`\nFrontend: http://localhost:5173`);
199
+ console.log(`API proxy: /api/* -> http://localhost:${port}`);
200
+ console.log("\nPress Ctrl+C to stop\n");
146
201
  });
147
202
  //# sourceMappingURL=dev.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,EAAgB,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMzE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,CAAC;KACrD,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;CAmBH,CACE;KACA,MAAM,CAAC,KAAK,EAAE,OAAmB,EAAE,EAAE;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAExC,kCAAkC;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CACX,sEAAsE,CACvE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,WAAW,GAAwB,IAAI,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAEtD,IAAI,CAAC;QACH,4CAA4C;QAC5C,yDAAyD;QACzD,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE1D,6CAA6C;QAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QAE/C,2EAA2E;QAC3E,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAErB,yBAAyB;QACzB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACnE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CACjD,uBAAuB,CACxB,CAAC;QAEF,wDAAwD;QACxD,MAAM,aAAa,EAAE,CAAC;QAEtB,kBAAkB;QAClB,aAAa,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,IAAI,aAAa,CAAC,CAAC;QACxD,CAAC;QAED,8BAA8B;QAC9B,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAClE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAE/D,oCAAoC;QACpC,SAAS,kBAAkB,CAAC,UAAkB;YAC5C,wDAAwD;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;gBAC1C,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;aAC1C,CAAC,CAAC;YAEH,iCAAiC;YACjC,gFAAgF;YAChF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBACvC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;YACD,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhC,oBAAoB;QACpB,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;QAEtD,KAAK,CAAC;YACJ,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI;SACL,CAAC,CAAC;QAEH,wBAAwB;QACxB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAEtC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;YACvD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,OAAO,CAAC,KAAK,CACX,iEAAiE,CAClE,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,CAAC,KAAK,CACX,yDAAyD,IAAI,EAAE,CAChE,CAAC;YACF,OAAO,CAAC,KAAK,CACX,6DAA6D,CAC9D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;YAC9C,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;gBAC3D,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAClE,CAAC;YACD,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * fling onboard - Interactive onboarding for first-time users
3
3
  */
4
4
  import { Command } from "commander";
5
+ import type { OnboardingIO } from "../utils/onboarding-io.js";
5
6
  /**
6
7
  * Result from the onboarding flow.
7
8
  */
@@ -9,9 +10,18 @@ export interface OnboardingResult {
9
10
  authenticated: boolean;
10
11
  setupProject: boolean;
11
12
  }
13
+ /**
14
+ * Options for running onboarding (mostly for testing).
15
+ */
16
+ export interface OnboardingOptions {
17
+ apiUrl?: string;
18
+ configDir?: string;
19
+ flingHome?: string;
20
+ }
12
21
  export type CredentialResult = "authenticated" | "skipped" | "failed" | "cancelled";
13
22
  /**
14
23
  * Prompt the user to authenticate.
24
+ * This is the public API that creates its own context using defaults.
15
25
  */
16
26
  export declare function promptCredentials(options?: {
17
27
  message?: string;
@@ -22,8 +32,6 @@ export declare function promptCredentials(options?: {
22
32
  * This can be called programmatically (from launch.ts) or via the command.
23
33
  * Returns whether the user authenticated and whether to set up the default project.
24
34
  */
25
- export declare function runOnboarding(options?: {
26
- apiUrl?: string;
27
- }): Promise<OnboardingResult>;
35
+ export declare function runOnboarding(io?: OnboardingIO, options?: OnboardingOptions): Promise<OnboardingResult>;
28
36
  export declare const onboardCommand: Command;
29
37
  //# sourceMappingURL=onboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/onboard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AA0ID,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AAEhB;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsD5B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuD5B;AAED,eAAO,MAAM,cAAc,SA0BvB,CAAC"}
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/onboard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAK9D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgOD,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AAuEhB;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAG5B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,EAAE,GAAE,YAAkC,EACtC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAiF3B;AAED,eAAO,MAAM,cAAc,SA0BvB,CAAC"}