flingit 0.0.12 → 0.0.13
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.
- package/README.md +8 -1
- package/dist/cli/commands/db.d.ts +11 -0
- package/dist/cli/commands/db.d.ts.map +1 -1
- package/dist/cli/commands/db.js +60 -48
- package/dist/cli/commands/db.js.map +1 -1
- package/dist/cli/commands/dev.d.ts +9 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +96 -100
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/feedback.d.ts +23 -0
- package/dist/cli/commands/feedback.d.ts.map +1 -1
- package/dist/cli/commands/feedback.js +60 -73
- package/dist/cli/commands/feedback.js.map +1 -1
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +96 -107
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/launch.d.ts +11 -1
- package/dist/cli/commands/launch.d.ts.map +1 -1
- package/dist/cli/commands/launch.js +32 -36
- package/dist/cli/commands/launch.js.map +1 -1
- package/dist/cli/commands/login.d.ts +30 -0
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +71 -58
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/logs.d.ts +39 -0
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +121 -90
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/onboard.d.ts +1 -1
- package/dist/cli/commands/onboard.d.ts.map +1 -1
- package/dist/cli/commands/onboard.js +94 -41
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts +43 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -1
- package/dist/cli/commands/plugin.js +229 -211
- package/dist/cli/commands/plugin.js.map +1 -1
- package/dist/cli/commands/project.d.ts +27 -0
- package/dist/cli/commands/project.d.ts.map +1 -1
- package/dist/cli/commands/project.js +101 -85
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/push.d.ts +39 -0
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +152 -118
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/storage.d.ts +32 -0
- package/dist/cli/commands/storage.d.ts.map +1 -1
- package/dist/cli/commands/storage.js +180 -140
- package/dist/cli/commands/storage.js.map +1 -1
- package/dist/cli/commands/tunnel.d.ts +41 -0
- package/dist/cli/commands/tunnel.d.ts.map +1 -0
- package/dist/cli/commands/tunnel.js +210 -0
- package/dist/cli/commands/tunnel.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +15 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +82 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/index.js +35 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/cli-io-impl.d.ts +64 -0
- package/dist/cli/utils/cli-io-impl.d.ts.map +1 -0
- package/dist/cli/utils/cli-io-impl.js +521 -0
- package/dist/cli/utils/cli-io-impl.js.map +1 -0
- package/dist/cli/utils/cli-io.d.ts +350 -0
- package/dist/cli/utils/cli-io.d.ts.map +1 -0
- package/dist/cli/utils/cli-io.js +13 -0
- package/dist/cli/utils/cli-io.js.map +1 -0
- package/dist/cli/utils/config.d.ts +60 -2
- package/dist/cli/utils/config.d.ts.map +1 -1
- package/dist/cli/utils/config.js +158 -37
- package/dist/cli/utils/config.js.map +1 -1
- package/dist/cli/utils/project.d.ts +60 -0
- package/dist/cli/utils/project.d.ts.map +1 -1
- package/dist/cli/utils/project.js +112 -2
- package/dist/cli/utils/project.js.map +1 -1
- package/dist/cli/utils/prompt-new-project.d.ts +1 -1
- package/dist/cli/utils/prompt-new-project.d.ts.map +1 -1
- package/dist/cli/utils/registry.d.ts +2 -2
- package/dist/cli/utils/registry.d.ts.map +1 -1
- package/dist/cli/utils/registry.js +13 -3
- package/dist/cli/utils/registry.js.map +1 -1
- package/dist/runtime/log.d.ts.map +1 -1
- package/dist/runtime/log.js +8 -4
- package/dist/runtime/log.js.map +1 -1
- package/dist/runtime/storage.js +1 -1
- package/dist/runtime/storage.js.map +1 -1
- package/package.json +3 -2
- package/templates/default/CLAUDE.md +1 -0
- package/templates/default/skills/fling/.hash +1 -0
- package/templates/default/skills/fling/SKILL.md +12 -4
- /package/templates/default/skills/{discord/SKILL.md → fling/DISCORD.md} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAuI9D;AAED,eAAO,MAAM,WAAW,SA+CpB,CAAC"}
|
|
@@ -2,89 +2,36 @@
|
|
|
2
2
|
* fling init - Scaffold a new project in the current directory
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
-
import {
|
|
6
|
-
import { join, dirname } from "node:path";
|
|
7
|
-
import { fileURLToPath } from "node:url";
|
|
8
|
-
import { registerProject } from "../utils/registry.js";
|
|
5
|
+
import { join } from "node:path";
|
|
9
6
|
import { generateRandomCode } from "../../shared/random-code.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const pkg = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
28
|
-
return {
|
|
29
|
-
name: pkg.name ?? "flingit",
|
|
30
|
-
version: pkg.version ?? "0.0.1",
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
return { name: "flingit", version: "0.0.1" };
|
|
7
|
+
import { createDefaultInitIO } from "../utils/cli-io-impl.js";
|
|
8
|
+
/**
|
|
9
|
+
* Run the init command logic.
|
|
10
|
+
* Extracted for testability via dependency injection.
|
|
11
|
+
*/
|
|
12
|
+
export function runInit(options, io) {
|
|
13
|
+
const cwd = io.process.cwd();
|
|
14
|
+
// Refuse to init in a non-empty directory
|
|
15
|
+
const existingFiles = io.file.readdir(cwd);
|
|
16
|
+
if (existingFiles.length > 0) {
|
|
17
|
+
io.console.error("Error: Directory is not empty.");
|
|
18
|
+
io.console.error("");
|
|
19
|
+
io.console.error("fling init requires an empty directory to avoid overwriting existing files.");
|
|
20
|
+
io.console.error("");
|
|
21
|
+
io.console.error("To create a new project:");
|
|
22
|
+
io.console.error(" mkdir my-project && cd my-project && fling init");
|
|
23
|
+
io.process.exit(1);
|
|
35
24
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
.option("--local", "Use local Fling package via file: reference (for development)")
|
|
40
|
-
.option("--no-local", "Use published package version (override development auto-detection)")
|
|
41
|
-
.addHelpText("after", `
|
|
42
|
-
Prerequisites:
|
|
43
|
-
- Node.js 22 or later
|
|
44
|
-
- Empty or new directory (run mkdir my-project && cd my-project first)
|
|
45
|
-
|
|
46
|
-
Creates:
|
|
47
|
-
index.html Vite entry HTML
|
|
48
|
-
vite.config.ts Vite configuration
|
|
49
|
-
tsconfig.json TypeScript root config
|
|
50
|
-
tsconfig.app.json React TypeScript config
|
|
51
|
-
tsconfig.worker.json Worker TypeScript config
|
|
52
|
-
src/worker/index.ts Backend API code
|
|
53
|
-
src/react-app/ React frontend code
|
|
54
|
-
public/ Static assets
|
|
55
|
-
package.json Project configuration with React, Vite deps
|
|
56
|
-
.nvmrc Node.js version (22)
|
|
57
|
-
CLAUDE.md Instructions for Claude Code
|
|
58
|
-
.claude/skills/ Claude skill files for Fling commands
|
|
59
|
-
.fling/ Local data directory (gitignored)
|
|
60
|
-
.fling/secrets Local secrets file (gitignored)
|
|
61
|
-
.fling/data/ SQLite database location (gitignored)
|
|
62
|
-
|
|
63
|
-
Next steps after init:
|
|
64
|
-
npm install Install dependencies
|
|
65
|
-
fling dev Start local development server
|
|
66
|
-
|
|
67
|
-
Example:
|
|
68
|
-
mkdir my-project && cd my-project
|
|
69
|
-
fling init
|
|
70
|
-
npm install
|
|
71
|
-
fling dev
|
|
72
|
-
`)
|
|
73
|
-
.action(async (options) => {
|
|
74
|
-
const cwd = process.cwd();
|
|
75
|
-
// Check if already initialized
|
|
76
|
-
if (existsSync(join(cwd, ".fling"))) {
|
|
77
|
-
console.log("Fling project already initialized in this directory.");
|
|
25
|
+
// Check if already initialized (redundant now but kept for clarity)
|
|
26
|
+
if (io.file.exists(join(cwd, ".fling"))) {
|
|
27
|
+
io.console.log("Fling project already initialized in this directory.");
|
|
78
28
|
return;
|
|
79
29
|
}
|
|
80
|
-
console.log("Initializing Fling project...\n");
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (!existsSync(templateDir)) {
|
|
86
|
-
console.error("Error: Could not find template directory at", templateDir);
|
|
87
|
-
process.exit(1);
|
|
30
|
+
io.console.log("Initializing Fling project...\n");
|
|
31
|
+
const templateDir = io.paths.templateDir;
|
|
32
|
+
if (!io.file.exists(templateDir)) {
|
|
33
|
+
io.console.error("Error: Could not find template directory at " + templateDir);
|
|
34
|
+
io.process.exit(1);
|
|
88
35
|
}
|
|
89
36
|
// Copy template files to project root
|
|
90
37
|
// We copy specific files to handle .gitignore specially
|
|
@@ -100,41 +47,44 @@ Example:
|
|
|
100
47
|
];
|
|
101
48
|
for (const { src, dest } of filesToCopy) {
|
|
102
49
|
const srcPath = join(templateDir, src);
|
|
103
|
-
if (
|
|
104
|
-
|
|
50
|
+
if (io.file.exists(srcPath)) {
|
|
51
|
+
io.file.copy(srcPath, join(cwd, dest));
|
|
105
52
|
}
|
|
106
53
|
}
|
|
107
54
|
// Copy src directory
|
|
108
55
|
const srcTemplateDir = join(templateDir, "src");
|
|
109
|
-
if (
|
|
110
|
-
|
|
56
|
+
if (io.file.exists(srcTemplateDir)) {
|
|
57
|
+
io.file.copy(srcTemplateDir, join(cwd, "src"), { recursive: true });
|
|
111
58
|
}
|
|
112
59
|
// Copy public directory (static assets for Vite)
|
|
113
60
|
const publicTemplateDir = join(templateDir, "public");
|
|
114
|
-
if (
|
|
115
|
-
|
|
61
|
+
if (io.file.exists(publicTemplateDir)) {
|
|
62
|
+
io.file.copy(publicTemplateDir, join(cwd, "public"), { recursive: true });
|
|
116
63
|
}
|
|
117
64
|
// Copy skills to .claude/skills/
|
|
118
65
|
const skillsTemplateDir = join(templateDir, "skills");
|
|
119
66
|
const skillsDestDir = join(cwd, ".claude", "skills");
|
|
120
|
-
if (
|
|
121
|
-
|
|
122
|
-
|
|
67
|
+
if (io.file.exists(skillsTemplateDir)) {
|
|
68
|
+
io.file.mkdir(skillsDestDir, { recursive: true });
|
|
69
|
+
io.file.copy(skillsTemplateDir, skillsDestDir, { recursive: true });
|
|
123
70
|
}
|
|
124
71
|
// Modify package.json with project name and fling dependency
|
|
125
72
|
const projectName = cwd.split("/").pop() ?? "fling-project";
|
|
126
|
-
const useLocal = options.local ?? isDevelopmentMode
|
|
127
|
-
const
|
|
128
|
-
const { name: packageName, version: packageVersion } = getPackageMeta();
|
|
129
|
-
const dependencyName = packageName || "flingit";
|
|
73
|
+
const useLocal = options.local ?? io.meta.isDevelopmentMode;
|
|
74
|
+
const dependencyName = io.meta.packageName || "flingit";
|
|
130
75
|
const dependencyVersion = useLocal
|
|
131
|
-
? `file:${flingRoot}`
|
|
132
|
-
: `^${packageVersion || "0.0.1"}`;
|
|
76
|
+
? `file:${io.paths.flingRoot}`
|
|
77
|
+
: `^${io.meta.packageVersion || "0.0.1"}`;
|
|
133
78
|
if (useLocal) {
|
|
134
|
-
console.log(`Using local Fling: ${flingRoot}\n`);
|
|
79
|
+
io.console.log(`Using local Fling: ${io.paths.flingRoot}\n`);
|
|
135
80
|
}
|
|
136
81
|
const packageJsonPath = join(cwd, "package.json");
|
|
137
|
-
const
|
|
82
|
+
const packageJsonContent = io.file.readFileString(packageJsonPath);
|
|
83
|
+
if (packageJsonContent === null) {
|
|
84
|
+
io.console.error("Error: package.json not found after copying template");
|
|
85
|
+
io.process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
138
88
|
packageJson.name = projectName;
|
|
139
89
|
packageJson.dependencies = packageJson.dependencies ?? {};
|
|
140
90
|
delete packageJson.dependencies["fling"];
|
|
@@ -142,26 +92,65 @@ Example:
|
|
|
142
92
|
// Generate unique project ID
|
|
143
93
|
const projectId = generateRandomCode();
|
|
144
94
|
packageJson.fling = { projectName: projectId };
|
|
145
|
-
|
|
95
|
+
io.file.writeFileString(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n");
|
|
146
96
|
// Create .fling directory
|
|
147
|
-
|
|
97
|
+
io.file.mkdir(join(cwd, ".fling", "data"), { recursive: true });
|
|
148
98
|
// Register project in the global registry
|
|
149
|
-
|
|
99
|
+
io.registry.register(cwd);
|
|
150
100
|
// Create empty secrets file with restricted permissions (owner read/write only)
|
|
151
|
-
|
|
101
|
+
io.file.writeFileString(join(cwd, ".fling", "secrets"), "# Fling secrets\n# Format: KEY=value\n", { mode: 0o600 });
|
|
152
102
|
// Handle .gitignore - copy template or append to existing
|
|
153
103
|
const gitignorePath = join(cwd, ".gitignore");
|
|
154
104
|
const gitignoreTemplate = join(templateDir, ".gitignore");
|
|
155
|
-
if (
|
|
105
|
+
if (io.file.exists(gitignorePath)) {
|
|
156
106
|
// Append Fling entries if not already present
|
|
157
|
-
const existing =
|
|
158
|
-
if (!existing.includes(".fling/secrets")) {
|
|
159
|
-
|
|
107
|
+
const existing = io.file.readFileString(gitignorePath);
|
|
108
|
+
if (existing !== null && !existing.includes(".fling/secrets")) {
|
|
109
|
+
io.file.writeFileString(gitignorePath, existing + "\n# Fling\n.fling/secrets\n.fling/data/\n");
|
|
160
110
|
}
|
|
161
111
|
}
|
|
162
|
-
else if (
|
|
163
|
-
|
|
112
|
+
else if (io.file.exists(gitignoreTemplate)) {
|
|
113
|
+
io.file.copy(gitignoreTemplate, gitignorePath);
|
|
164
114
|
}
|
|
165
|
-
console.log("This project is ready for your coding agent.");
|
|
115
|
+
io.console.log("This project is ready for your coding agent.");
|
|
116
|
+
}
|
|
117
|
+
export const initCommand = new Command("init")
|
|
118
|
+
.description("Create a new Fling project in the current directory")
|
|
119
|
+
.option("--local", "Use local Fling package via file: reference (for development)")
|
|
120
|
+
.option("--no-local", "Use published package version (override development auto-detection)")
|
|
121
|
+
.addHelpText("after", `
|
|
122
|
+
Prerequisites:
|
|
123
|
+
- Node.js 22 or later
|
|
124
|
+
- Empty or new directory (run mkdir my-project && cd my-project first)
|
|
125
|
+
|
|
126
|
+
Creates:
|
|
127
|
+
index.html Vite entry HTML
|
|
128
|
+
vite.config.ts Vite configuration
|
|
129
|
+
tsconfig.json TypeScript root config
|
|
130
|
+
tsconfig.app.json React TypeScript config
|
|
131
|
+
tsconfig.worker.json Worker TypeScript config
|
|
132
|
+
src/worker/index.ts Backend API code
|
|
133
|
+
src/react-app/ React frontend code
|
|
134
|
+
public/ Static assets
|
|
135
|
+
package.json Project configuration with React, Vite deps
|
|
136
|
+
.nvmrc Node.js version (22)
|
|
137
|
+
CLAUDE.md Instructions for Claude Code
|
|
138
|
+
.claude/skills/ Claude skill files for Fling commands
|
|
139
|
+
.fling/ Local data directory (gitignored)
|
|
140
|
+
.fling/secrets Local secrets file (gitignored)
|
|
141
|
+
.fling/data/ SQLite database location (gitignored)
|
|
142
|
+
|
|
143
|
+
Next steps after init:
|
|
144
|
+
npm install Install dependencies
|
|
145
|
+
fling dev Start local development server
|
|
146
|
+
|
|
147
|
+
Example:
|
|
148
|
+
mkdir my-project && cd my-project
|
|
149
|
+
fling init
|
|
150
|
+
npm install
|
|
151
|
+
fling dev
|
|
152
|
+
`)
|
|
153
|
+
.action((options) => {
|
|
154
|
+
runInit(options, createDefaultInitIO());
|
|
166
155
|
});
|
|
167
156
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,18 @@
|
|
|
5
5
|
* - Otherwise: show project selector or create-new flow
|
|
6
6
|
*/
|
|
7
7
|
import type { Command } from "commander";
|
|
8
|
+
import type { LaunchIO } from "../utils/cli-io.js";
|
|
9
|
+
/**
|
|
10
|
+
* Create a new Fling project in the given directory.
|
|
11
|
+
* Runs init, then npm install.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createProject(dir: string, io: LaunchIO): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Launch Claude Code in the given project directory.
|
|
16
|
+
*/
|
|
17
|
+
export declare function launchClaudeCode(projectDir: string, io: LaunchIO): void;
|
|
8
18
|
/**
|
|
9
19
|
* Launch Fling - the default action when running `fling` with no args.
|
|
10
20
|
*/
|
|
11
|
-
export declare function launch(program: Command): Promise<void>;
|
|
21
|
+
export declare function launch(program: Command, io?: LaunchIO): Promise<void>;
|
|
12
22
|
//# sourceMappingURL=launch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CA6BvE;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,OAAO,EAChB,EAAE,GAAE,QAAkC,GACrC,OAAO,CAAC,IAAI,CAAC,CA2Df"}
|
|
@@ -4,36 +4,33 @@
|
|
|
4
4
|
* - Inside a Fling project: auto-register and show Commander help
|
|
5
5
|
* - Otherwise: show project selector or create-new flow
|
|
6
6
|
*/
|
|
7
|
-
import { mkdirSync } from "node:fs";
|
|
8
|
-
import { spawn } from "node:child_process";
|
|
9
7
|
import * as p from "@clack/prompts";
|
|
10
8
|
import { initCommand } from "./init.js";
|
|
11
9
|
import { promptCredentials } from "./onboard.js";
|
|
12
10
|
import { findEnclosingProject, isProjectRoot } from "../utils/project.js";
|
|
13
11
|
import { registerProject, getValidProjects } from "../utils/registry.js";
|
|
14
12
|
import { isLoggedIn } from "../utils/config.js";
|
|
15
|
-
import { isClaudeCodeInstalled, getClaudeCodeNotInstalledError, } from "../utils/claude-code.js";
|
|
16
13
|
import { promptNewProject } from "../utils/prompt-new-project.js";
|
|
17
|
-
import { createDefaultLaunchIO } from "../utils/
|
|
14
|
+
import { createDefaultLaunchIO } from "../utils/cli-io-impl.js";
|
|
18
15
|
/**
|
|
19
16
|
* Create a new Fling project in the given directory.
|
|
20
17
|
* Runs init, then npm install.
|
|
21
18
|
*/
|
|
22
|
-
async function createProject(dir) {
|
|
23
|
-
console.log(`Creating your Fling project at ${dir}...\n`);
|
|
24
|
-
|
|
25
|
-
const originalCwd = process.cwd();
|
|
26
|
-
process.chdir(dir);
|
|
19
|
+
export async function createProject(dir, io) {
|
|
20
|
+
io.console.log(`Creating your Fling project at ${dir}...\n`);
|
|
21
|
+
io.file.mkdir(dir, { recursive: true });
|
|
22
|
+
const originalCwd = io.process.cwd();
|
|
23
|
+
io.process.chdir(dir);
|
|
27
24
|
try {
|
|
28
25
|
await initCommand.parseAsync([], { from: "user" });
|
|
29
26
|
}
|
|
30
27
|
finally {
|
|
31
|
-
process.chdir(originalCwd);
|
|
28
|
+
io.process.chdir(originalCwd);
|
|
32
29
|
}
|
|
33
|
-
console.log("");
|
|
34
|
-
console.log("Installing dependencies...\n");
|
|
30
|
+
io.console.log("");
|
|
31
|
+
io.console.log("Installing dependencies...\n");
|
|
35
32
|
await new Promise((resolve, reject) => {
|
|
36
|
-
const npm = spawn("npm", ["install"], {
|
|
33
|
+
const npm = io.spawn("npm", ["install"], {
|
|
37
34
|
cwd: dir,
|
|
38
35
|
stdio: "inherit",
|
|
39
36
|
});
|
|
@@ -47,43 +44,43 @@ async function createProject(dir) {
|
|
|
47
44
|
}
|
|
48
45
|
});
|
|
49
46
|
});
|
|
50
|
-
console.log("");
|
|
47
|
+
io.console.log("");
|
|
51
48
|
}
|
|
52
49
|
/**
|
|
53
50
|
* Launch Claude Code in the given project directory.
|
|
54
51
|
*/
|
|
55
|
-
function launchClaudeCode(projectDir) {
|
|
52
|
+
export function launchClaudeCode(projectDir, io) {
|
|
56
53
|
// Check for Claude Code before attempting to launch
|
|
57
|
-
if (!
|
|
58
|
-
console.error(
|
|
59
|
-
process.exit(1);
|
|
54
|
+
if (!io.claudeCode.isInstalled()) {
|
|
55
|
+
io.console.error(io.claudeCode.getNotInstalledError());
|
|
56
|
+
io.process.exit(1);
|
|
60
57
|
}
|
|
61
|
-
console.log(`Opening Claude Code in ${projectDir}...\n`);
|
|
62
|
-
const claude = spawn("claude", [], {
|
|
58
|
+
io.console.log(`Opening Claude Code in ${projectDir}...\n`);
|
|
59
|
+
const claude = io.spawn("claude", [], {
|
|
63
60
|
cwd: projectDir,
|
|
64
61
|
stdio: "inherit",
|
|
65
|
-
env: { ...process.env, PWD: projectDir },
|
|
62
|
+
env: { ...io.process.env, PWD: projectDir },
|
|
66
63
|
});
|
|
67
64
|
claude.on("error", (error) => {
|
|
68
65
|
// This should rarely happen now that we pre-check, but handle edge cases
|
|
69
66
|
if (error.code === "ENOENT") {
|
|
70
|
-
console.error(
|
|
71
|
-
process.exit(1);
|
|
67
|
+
io.console.error(io.claudeCode.getNotInstalledError());
|
|
68
|
+
io.process.exit(1);
|
|
72
69
|
}
|
|
73
70
|
else {
|
|
74
|
-
console.error(
|
|
75
|
-
process.exit(1);
|
|
71
|
+
io.console.error(`Error launching Claude Code: ${error}`);
|
|
72
|
+
io.process.exit(1);
|
|
76
73
|
}
|
|
77
74
|
});
|
|
78
75
|
claude.on("close", (code) => {
|
|
79
|
-
process.exit(code ?? 0);
|
|
76
|
+
io.process.exit(code ?? 0);
|
|
80
77
|
});
|
|
81
78
|
}
|
|
82
79
|
/**
|
|
83
80
|
* Launch Fling - the default action when running `fling` with no args.
|
|
84
81
|
*/
|
|
85
|
-
export async function launch(program) {
|
|
86
|
-
const cwd = process.cwd();
|
|
82
|
+
export async function launch(program, io = createDefaultLaunchIO()) {
|
|
83
|
+
const cwd = io.process.cwd();
|
|
87
84
|
// Step 1: Are we inside a Fling project?
|
|
88
85
|
const enclosingProject = findEnclosingProject(cwd);
|
|
89
86
|
if (enclosingProject) {
|
|
@@ -95,9 +92,9 @@ export async function launch(program) {
|
|
|
95
92
|
const projects = getValidProjects();
|
|
96
93
|
if (projects.length > 0) {
|
|
97
94
|
// Show project selector
|
|
98
|
-
const options = projects.map((
|
|
99
|
-
value:
|
|
100
|
-
label:
|
|
95
|
+
const options = projects.map((proj) => ({
|
|
96
|
+
value: proj,
|
|
97
|
+
label: proj,
|
|
101
98
|
}));
|
|
102
99
|
options.push({ value: "new", label: "Create new project" });
|
|
103
100
|
options.push({ value: "cancel", label: "Cancel" });
|
|
@@ -112,7 +109,7 @@ export async function launch(program) {
|
|
|
112
109
|
// Fall through to create-new flow
|
|
113
110
|
}
|
|
114
111
|
else {
|
|
115
|
-
launchClaudeCode(choice);
|
|
112
|
+
launchClaudeCode(choice, io);
|
|
116
113
|
return;
|
|
117
114
|
}
|
|
118
115
|
}
|
|
@@ -124,14 +121,13 @@ export async function launch(program) {
|
|
|
124
121
|
}
|
|
125
122
|
}
|
|
126
123
|
// Step 4: Create a new project
|
|
127
|
-
const
|
|
128
|
-
const dir = await promptNewProject(launchIO);
|
|
124
|
+
const dir = await promptNewProject(io);
|
|
129
125
|
if (!dir) {
|
|
130
126
|
return;
|
|
131
127
|
}
|
|
132
128
|
if (!isProjectRoot(dir)) {
|
|
133
|
-
await createProject(dir);
|
|
129
|
+
await createProject(dir, io);
|
|
134
130
|
}
|
|
135
|
-
launchClaudeCode(dir);
|
|
131
|
+
launchClaudeCode(dir, io);
|
|
136
132
|
}
|
|
137
133
|
//# sourceMappingURL=launch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/cli/commands/launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/cli/commands/launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,35 @@
|
|
|
2
2
|
* fling login - Store API token for the Fling platform
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
+
import { type PlatformFetchFn } from "../utils/config.js";
|
|
6
|
+
import { type ConsoleIO, type ProcessIOWithStdio, type SimplePromptIO } from "../utils/cli-io.js";
|
|
7
|
+
/**
|
|
8
|
+
* Token storage.
|
|
9
|
+
*/
|
|
10
|
+
export interface LoginTokenIO {
|
|
11
|
+
setToken(token: string): void;
|
|
12
|
+
clearToken(): void;
|
|
13
|
+
setApiUrl(url: string): void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Combined dependencies for login command.
|
|
17
|
+
*/
|
|
18
|
+
export interface LoginDeps {
|
|
19
|
+
console: ConsoleIO;
|
|
20
|
+
process: ProcessIOWithStdio;
|
|
21
|
+
user: SimplePromptIO;
|
|
22
|
+
token: LoginTokenIO;
|
|
23
|
+
isLoggedIn: () => boolean;
|
|
24
|
+
platformFetch: PlatformFetchFn;
|
|
25
|
+
}
|
|
26
|
+
export declare function createDefaultLoginDeps(): LoginDeps;
|
|
27
|
+
export declare const defaultLoginDeps: LoginDeps;
|
|
28
|
+
/**
|
|
29
|
+
* Run the login command.
|
|
30
|
+
* Exported for testing with injected dependencies.
|
|
31
|
+
*/
|
|
32
|
+
export declare function runLogin(tokenArg: string | undefined, options: {
|
|
33
|
+
apiUrl?: string;
|
|
34
|
+
}, deps?: LoginDeps): Promise<void>;
|
|
5
35
|
export declare const loginCommand: Command;
|
|
6
36
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAA8D,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOlG;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,IAAI,IAAI,CAAC;IACnB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,aAAa,EAAE,eAAe,CAAC;CAChC;AAMD,wBAAgB,sBAAsB,IAAI,SAAS,CAalD;AAED,eAAO,MAAM,gBAAgB,WAA2B,CAAC;AAMzD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5B,IAAI,GAAE,SAA4B,GACjC,OAAO,CAAC,IAAI,CAAC,CAkEf;AAED,eAAO,MAAM,YAAY,SAsBrB,CAAC"}
|