decocms 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +373 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add/add.d.ts +7 -0
- package/dist/commands/add/add.d.ts.map +1 -0
- package/dist/commands/add/add.js +90 -0
- package/dist/commands/add/add.js.map +1 -0
- package/dist/commands/auth/login.d.ts +2 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +125 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/whoami.d.ts +2 -0
- package/dist/commands/auth/whoami.d.ts.map +1 -0
- package/dist/commands/auth/whoami.js +51 -0
- package/dist/commands/auth/whoami.js.map +1 -0
- package/dist/commands/config/configure.d.ts +2 -0
- package/dist/commands/config/configure.d.ts.map +1 -0
- package/dist/commands/config/configure.js +51 -0
- package/dist/commands/config/configure.js.map +1 -0
- package/dist/commands/create/create.d.ts +3 -0
- package/dist/commands/create/create.d.ts.map +1 -0
- package/dist/commands/create/create.js +238 -0
- package/dist/commands/create/create.js.map +1 -0
- package/dist/commands/dev/dev.d.ts +8 -0
- package/dist/commands/dev/dev.d.ts.map +1 -0
- package/dist/commands/dev/dev.js +64 -0
- package/dist/commands/dev/dev.js.map +1 -0
- package/dist/commands/dev/link.d.ts +8 -0
- package/dist/commands/dev/link.d.ts.map +1 -0
- package/dist/commands/dev/link.js +124 -0
- package/dist/commands/dev/link.js.map +1 -0
- package/dist/commands/gen/gen.d.ts +11 -0
- package/dist/commands/gen/gen.d.ts.map +1 -0
- package/dist/commands/gen/gen.js +341 -0
- package/dist/commands/gen/gen.js.map +1 -0
- package/dist/commands/hosting/deploy.d.ts +19 -0
- package/dist/commands/hosting/deploy.d.ts.map +1 -0
- package/dist/commands/hosting/deploy.js +194 -0
- package/dist/commands/hosting/deploy.js.map +1 -0
- package/dist/commands/hosting/list.d.ts +6 -0
- package/dist/commands/hosting/list.d.ts.map +1 -0
- package/dist/commands/hosting/list.js +26 -0
- package/dist/commands/hosting/list.js.map +1 -0
- package/dist/commands/hosting/promote.d.ts +11 -0
- package/dist/commands/hosting/promote.d.ts.map +1 -0
- package/dist/commands/hosting/promote.js +153 -0
- package/dist/commands/hosting/promote.js.map +1 -0
- package/dist/commands/update/update.d.ts +4 -0
- package/dist/commands/update/update.d.ts.map +1 -0
- package/dist/commands/update/update.js +242 -0
- package/dist/commands/update/update.js.map +1 -0
- package/dist/commands/update/upgrade.d.ts +4 -0
- package/dist/commands/update/upgrade.d.ts.map +1 -0
- package/dist/commands/update/upgrade.js +157 -0
- package/dist/commands/update/upgrade.js.map +1 -0
- package/dist/lib/config.d.ts +309 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +262 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +10 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +16 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/fs.d.ts +40 -0
- package/dist/lib/fs.d.ts.map +1 -0
- package/dist/lib/fs.js +162 -0
- package/dist/lib/fs.js.map +1 -0
- package/dist/lib/mcp.d.ts +34 -0
- package/dist/lib/mcp.d.ts.map +1 -0
- package/dist/lib/mcp.js +19 -0
- package/dist/lib/mcp.js.map +1 -0
- package/dist/lib/parse-binding-tool.d.ts +12 -0
- package/dist/lib/parse-binding-tool.d.ts.map +1 -0
- package/dist/lib/parse-binding-tool.js +15 -0
- package/dist/lib/parse-binding-tool.js.map +1 -0
- package/dist/lib/prompt-ide-setup.d.ts +27 -0
- package/dist/lib/prompt-ide-setup.d.ts.map +1 -0
- package/dist/lib/prompt-ide-setup.js +158 -0
- package/dist/lib/prompt-ide-setup.js.map +1 -0
- package/dist/lib/prompt-integrations.d.ts +7 -0
- package/dist/lib/prompt-integrations.d.ts.map +1 -0
- package/dist/lib/prompt-integrations.js +84 -0
- package/dist/lib/prompt-integrations.js.map +1 -0
- package/dist/lib/prompt-workspace.d.ts +2 -0
- package/dist/lib/prompt-workspace.d.ts.map +1 -0
- package/dist/lib/prompt-workspace.js +93 -0
- package/dist/lib/prompt-workspace.js.map +1 -0
- package/dist/lib/runtime.d.ts +5 -0
- package/dist/lib/runtime.d.ts.map +1 -0
- package/dist/lib/runtime.js +15 -0
- package/dist/lib/runtime.js.map +1 -0
- package/dist/lib/session.d.ts +39 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +124 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/slugify.d.ts +13 -0
- package/dist/lib/slugify.d.ts.map +1 -0
- package/dist/lib/slugify.js +27 -0
- package/dist/lib/slugify.js.map +1 -0
- package/dist/lib/supabase.d.ts +5 -0
- package/dist/lib/supabase.d.ts.map +1 -0
- package/dist/lib/supabase.js +19 -0
- package/dist/lib/supabase.js.map +1 -0
- package/dist/lib/wrangler.d.ts +9 -0
- package/dist/lib/wrangler.d.ts.map +1 -0
- package/dist/lib/wrangler.js +118 -0
- package/dist/lib/wrangler.js.map +1 -0
- package/dist/rules/deco-chat.mdc +902 -0
- package/package.json +79 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { createServer } from "http";
|
|
2
|
+
import { URL } from "url";
|
|
3
|
+
import { spawn } from "child_process";
|
|
4
|
+
import { AUTH_PORT_CLI, DECO_CHAT_LOGIN } from "../../lib/constants.js";
|
|
5
|
+
import { saveSession } from "../../lib/session.js";
|
|
6
|
+
import { createClient } from "../../lib/supabase.js";
|
|
7
|
+
import process from "node:process";
|
|
8
|
+
export const loginCommand = () => {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
let timeout;
|
|
11
|
+
const server = createServer(async (req, res) => {
|
|
12
|
+
const url = new URL(req.url, `http://localhost:${AUTH_PORT_CLI}`);
|
|
13
|
+
// Convert IncomingMessage headers to Headers object
|
|
14
|
+
const headers = new Headers();
|
|
15
|
+
for (const [key, value] of Object.entries(req.headers)) {
|
|
16
|
+
if (value) {
|
|
17
|
+
headers.set(key, Array.isArray(value) ? value.join(", ") : value);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const { client, responseHeaders } = createClient(headers);
|
|
21
|
+
if (url.pathname === "/login/oauth") {
|
|
22
|
+
const credentials = {
|
|
23
|
+
provider: (url.searchParams.get("provider") ??
|
|
24
|
+
"google"),
|
|
25
|
+
options: { redirectTo: new URL("/auth/callback/oauth", url).href },
|
|
26
|
+
};
|
|
27
|
+
const { data } = await client.auth.signInWithOAuth(credentials);
|
|
28
|
+
if (data.url) {
|
|
29
|
+
// Convert Headers to plain object
|
|
30
|
+
const responseHeadersObj = {};
|
|
31
|
+
responseHeaders.forEach((value, key) => {
|
|
32
|
+
responseHeadersObj[key] = value;
|
|
33
|
+
});
|
|
34
|
+
res.writeHead(302, {
|
|
35
|
+
Location: data.url,
|
|
36
|
+
...responseHeadersObj,
|
|
37
|
+
});
|
|
38
|
+
res.end();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
res.writeHead(500);
|
|
42
|
+
res.end("Error redirecting to OAuth provider");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (url.pathname === "/auth/callback/oauth") {
|
|
46
|
+
const code = url.searchParams.get("code");
|
|
47
|
+
if (!code) {
|
|
48
|
+
res.writeHead(400);
|
|
49
|
+
res.end("No code found");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const { data, error } = await client.auth.exchangeCodeForSession(code);
|
|
53
|
+
if (error || !data?.session) {
|
|
54
|
+
res.writeHead(400);
|
|
55
|
+
res.end(error?.message ?? "Unknown error");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Save session data securely
|
|
59
|
+
try {
|
|
60
|
+
await saveSession(data);
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
console.error("Failed to save session data:", e);
|
|
64
|
+
}
|
|
65
|
+
// Clear the timeout since login was successful
|
|
66
|
+
if (timeout) {
|
|
67
|
+
clearTimeout(timeout);
|
|
68
|
+
}
|
|
69
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
70
|
+
res.end(`<!DOCTYPE html>
|
|
71
|
+
<html>
|
|
72
|
+
<head>
|
|
73
|
+
<title>Authentication Complete</title>
|
|
74
|
+
</head>
|
|
75
|
+
<body>
|
|
76
|
+
<h1>Authentication Complete</h1>
|
|
77
|
+
<p>You can close this window now.</p>
|
|
78
|
+
<script>
|
|
79
|
+
window.close();
|
|
80
|
+
</script>
|
|
81
|
+
</body>
|
|
82
|
+
</html>`);
|
|
83
|
+
// Close server after successful authentication
|
|
84
|
+
server.close(() => resolve());
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
res.writeHead(404);
|
|
88
|
+
res.end("Not found");
|
|
89
|
+
});
|
|
90
|
+
server.listen(AUTH_PORT_CLI, () => {
|
|
91
|
+
// Try to open browser with OS-appropriate command
|
|
92
|
+
const browserCommands = {
|
|
93
|
+
linux: "xdg-open",
|
|
94
|
+
darwin: "open",
|
|
95
|
+
win32: "start",
|
|
96
|
+
freebsd: "xdg-open",
|
|
97
|
+
openbsd: "xdg-open",
|
|
98
|
+
sunos: "xdg-open",
|
|
99
|
+
aix: "open",
|
|
100
|
+
};
|
|
101
|
+
const browser = process.env.BROWSER ?? browserCommands[process.platform] ?? "open";
|
|
102
|
+
console.log("š Starting authentication process...");
|
|
103
|
+
console.log("Opening browser for login...\n");
|
|
104
|
+
// Windows requires using cmd.exe because 'start' is a built-in command
|
|
105
|
+
const command = process.platform === "win32" && browser === "start"
|
|
106
|
+
? spawn("cmd", ["/c", "start", DECO_CHAT_LOGIN], { detached: true })
|
|
107
|
+
: spawn(browser, [DECO_CHAT_LOGIN], { detached: true });
|
|
108
|
+
command.unref(); // Don't keep process alive
|
|
109
|
+
// Handle potential browser opening failures
|
|
110
|
+
command.on("error", () => {
|
|
111
|
+
console.log("ā ļø Could not automatically open browser");
|
|
112
|
+
});
|
|
113
|
+
// Always show the fallback URL
|
|
114
|
+
timeout = setTimeout(() => {
|
|
115
|
+
console.log("š If your browser didn't open automatically, please click the following link:");
|
|
116
|
+
console.log(`\n ${DECO_CHAT_LOGIN}\n`);
|
|
117
|
+
console.log("Waiting for authentication to complete...\n");
|
|
118
|
+
}, 1000); // Small delay to let browser opening attempt complete
|
|
119
|
+
});
|
|
120
|
+
server.on("error", (err) => {
|
|
121
|
+
reject(err);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/whoami.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,qBAiDzB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readSession } from "../../lib/session.js";
|
|
2
|
+
import { createClient } from "../../lib/supabase.js";
|
|
3
|
+
export const whoamiCommand = async () => {
|
|
4
|
+
try {
|
|
5
|
+
const session = await readSession();
|
|
6
|
+
if (!session || !session.access_token || !session.refresh_token) {
|
|
7
|
+
console.log("ā Not logged in. Run `deco login` to authenticate.\n");
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const { client: supabase } = createClient();
|
|
11
|
+
// Set the session so we can get the user
|
|
12
|
+
const { error: setSessionError } = await supabase.auth.setSession({
|
|
13
|
+
access_token: session.access_token,
|
|
14
|
+
refresh_token: session.refresh_token,
|
|
15
|
+
});
|
|
16
|
+
if (setSessionError) {
|
|
17
|
+
console.log("ā Session expired or invalid. Please log in again.\n");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const { data, error } = await supabase.auth.getUser();
|
|
21
|
+
if (error || !data?.user) {
|
|
22
|
+
console.log("ā Could not retrieve user info. Please log in again.\n");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const user = data.user;
|
|
26
|
+
// Pretty print user info
|
|
27
|
+
console.log("š¤ User Info:");
|
|
28
|
+
console.log(` š» ID: ${user.id}`);
|
|
29
|
+
console.log(` š§ Email: ${user.email ?? "-"}`);
|
|
30
|
+
if (user.user_metadata?.full_name) {
|
|
31
|
+
console.log(` š Name: ${user.user_metadata.full_name}`);
|
|
32
|
+
}
|
|
33
|
+
if (user.user_metadata?.avatar_url) {
|
|
34
|
+
console.log(` š¼ļø Avatar: ${user.user_metadata.avatar_url}`);
|
|
35
|
+
}
|
|
36
|
+
console.log("");
|
|
37
|
+
if (session.workspace) {
|
|
38
|
+
console.log(`š¢ Current Workspace: \u001b[1m${session.workspace}\u001b[0m\n`);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log("ā ļø No workspace selected.\n");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
const message = typeof err === "object" && err && "message" in err
|
|
46
|
+
? err.message
|
|
47
|
+
: String(err);
|
|
48
|
+
console.error("ā Error reading session:", message);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/commands/auth/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IACtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;QAC5C,yCAAyC;QACzC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAChE,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QACH,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACtD,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,yBAAyB;QACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CACT,mCAAmC,OAAO,CAAC,SAAS,aAAa,CAClE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GACX,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG;YAChD,CAAC,CAAE,GAA2B,CAAC,OAAO;YACtC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../../src/commands/config/configure.ts"],"names":[],"mappings":"AAeA,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,iBAqDrD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import inquirer from "inquirer";
|
|
2
|
+
import { getConfig, readWranglerConfig, writeWranglerConfig, } from "../../lib/config.js";
|
|
3
|
+
import { promptWorkspace } from "../../lib/prompt-workspace.js";
|
|
4
|
+
import { promptIntegrations } from "../../lib/prompt-integrations.js";
|
|
5
|
+
import { promptIDESetup, writeIDEConfig } from "../../lib/prompt-ide-setup.js";
|
|
6
|
+
import { genEnv } from "../gen/gen.js";
|
|
7
|
+
import { promises as fs } from "fs";
|
|
8
|
+
import { join } from "path";
|
|
9
|
+
import process from "node:process";
|
|
10
|
+
export async function configureCommand(local) {
|
|
11
|
+
const currentConfig = await getConfig({ inlineOptions: { local } }).catch(() => ({}));
|
|
12
|
+
const wranglerConfig = await readWranglerConfig();
|
|
13
|
+
const defaultApp = typeof wranglerConfig.name === "string" ? wranglerConfig.name : "my-app";
|
|
14
|
+
const { app } = await inquirer.prompt([
|
|
15
|
+
{
|
|
16
|
+
type: "input",
|
|
17
|
+
name: "app",
|
|
18
|
+
message: "Enter app name:",
|
|
19
|
+
default: defaultApp,
|
|
20
|
+
},
|
|
21
|
+
]);
|
|
22
|
+
// Use the proper workspace prompt
|
|
23
|
+
const workspace = await promptWorkspace(local, currentConfig.workspace);
|
|
24
|
+
// Add MCP configuration
|
|
25
|
+
const mcpConfig = await promptIDESetup({ workspace, app });
|
|
26
|
+
// Add integrations
|
|
27
|
+
const bindings = await promptIntegrations(local, workspace);
|
|
28
|
+
// Generate environment variables file
|
|
29
|
+
const envContent = await genEnv({ workspace, local, bindings });
|
|
30
|
+
// Write IDE config
|
|
31
|
+
if (mcpConfig) {
|
|
32
|
+
await writeIDEConfig(mcpConfig);
|
|
33
|
+
}
|
|
34
|
+
// Write both app name (top-level) and deco config in one go
|
|
35
|
+
await writeWranglerConfig({
|
|
36
|
+
name: app,
|
|
37
|
+
deco: {
|
|
38
|
+
...wranglerConfig.deco,
|
|
39
|
+
workspace,
|
|
40
|
+
bindings: [...bindings, ...(wranglerConfig.deco?.bindings ?? [])],
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
// Write environment types file
|
|
44
|
+
const outputPath = join(process.cwd(), "deco.gen.ts");
|
|
45
|
+
await fs.writeFile(outputPath, envContent);
|
|
46
|
+
console.log(`ā
Environment types written to: ${outputPath}`);
|
|
47
|
+
console.log(`ā
Configuration saved:`);
|
|
48
|
+
console.log(` App: ${app}`);
|
|
49
|
+
console.log(` Workspace: ${workspace}`);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=configure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/commands/config/configure.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAEL,SAAS,EACT,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAe;IACpD,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CACvE,GAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,CAC5B,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAClD,MAAM,UAAU,GACd,OAAO,cAAc,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE3E,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE,UAAU;SACpB;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAExE,wBAAwB;IACxB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAE3D,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAE5D,sCAAsC;IACtC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEhE,mBAAmB;IACnB,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,4DAA4D;IAC5D,MAAM,mBAAmB,CAAC;QACxB,IAAI,EAAE,GAAG;QACT,IAAI,EAAE;YACJ,GAAG,cAAc,CAAC,IAAI;YACtB,SAAS;YACT,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;SAClE;KACF,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,mCAAmC,UAAU,EAAE,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/create/create.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,MAAM,EAGZ,MAAM,qBAAqB,CAAC;AAsM7B,wBAAsB,aAAa,CACjC,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,GAAE,OAAO,CAAC,MAAM,CAAM,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwHf"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import inquirer from "inquirer";
|
|
2
|
+
import { promises as fs } from "fs";
|
|
3
|
+
import { spawn } from "child_process";
|
|
4
|
+
import { dirname, join } from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
import { copy, ensureDir } from "../../lib/fs.js";
|
|
7
|
+
import { readWranglerConfig, writeWranglerConfig, } from "../../lib/config.js";
|
|
8
|
+
import { slugify } from "../../lib/slugify.js";
|
|
9
|
+
import { promptWorkspace } from "../../lib/prompt-workspace.js";
|
|
10
|
+
import { genEnv } from "../gen/gen.js";
|
|
11
|
+
import { promptIDESetup, writeIDEConfig } from "../../lib/prompt-ide-setup.js";
|
|
12
|
+
import process from "node:process";
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
const DEFAULT_TEMPLATE = {
|
|
16
|
+
name: "Deco MCP app",
|
|
17
|
+
description: "A Deco MCP app",
|
|
18
|
+
repo: "deco-cx/deco-create",
|
|
19
|
+
branch: "main",
|
|
20
|
+
wranglerRoot: "server",
|
|
21
|
+
pathsToIgnore: [".cursorindexingignore", ".specstory", "plans"],
|
|
22
|
+
};
|
|
23
|
+
function runCommand(command, args, cwd) {
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
const process = spawn(command, args, {
|
|
26
|
+
cwd,
|
|
27
|
+
stdio: "pipe",
|
|
28
|
+
});
|
|
29
|
+
process.on("close", (code) => {
|
|
30
|
+
resolve(code === 0);
|
|
31
|
+
});
|
|
32
|
+
process.on("error", () => {
|
|
33
|
+
resolve(false);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const PATHS_TO_IGNORE_ALWAYS = [".git"];
|
|
38
|
+
async function downloadTemplate(template, targetDir) {
|
|
39
|
+
// For the base template, use the local copy
|
|
40
|
+
if (template.name === "base") {
|
|
41
|
+
const templatePath = join(__dirname, "../../../template/base");
|
|
42
|
+
await ensureDir(targetDir);
|
|
43
|
+
await copy(templatePath, targetDir, { overwrite: true });
|
|
44
|
+
console.log(`ā
Template '${template.name}' copied successfully!`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// For remote templates, use git clone
|
|
48
|
+
const tempDir = join(process.cwd(), `.temp-${Date.now()}`);
|
|
49
|
+
try {
|
|
50
|
+
const success = await runCommand("git", [
|
|
51
|
+
"clone",
|
|
52
|
+
"--depth",
|
|
53
|
+
"1",
|
|
54
|
+
"--branch",
|
|
55
|
+
template.branch || "main",
|
|
56
|
+
`https://github.com/${template.repo}.git`,
|
|
57
|
+
tempDir,
|
|
58
|
+
]);
|
|
59
|
+
if (!success) {
|
|
60
|
+
throw new Error(`Failed to clone template repository: ${template.repo}`);
|
|
61
|
+
}
|
|
62
|
+
const pathsToIgnore = [
|
|
63
|
+
...(template.pathsToIgnore || []),
|
|
64
|
+
...PATHS_TO_IGNORE_ALWAYS,
|
|
65
|
+
];
|
|
66
|
+
for (const path of pathsToIgnore) {
|
|
67
|
+
const pathToRemove = join(tempDir, path);
|
|
68
|
+
const isDirectory = await fs
|
|
69
|
+
.stat(pathToRemove)
|
|
70
|
+
.then((stat) => stat.isDirectory());
|
|
71
|
+
await fs
|
|
72
|
+
.rm(pathToRemove, isDirectory ? { recursive: true, force: true } : { force: true })
|
|
73
|
+
.catch(() => {
|
|
74
|
+
console.warn(`Failed to remove ${path} from the original template: ${pathToRemove}`);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const templatePath = join(tempDir, template.path || "");
|
|
78
|
+
try {
|
|
79
|
+
await fs.access(templatePath);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
throw new Error(`Template '${template.name}' not found in repository`);
|
|
83
|
+
}
|
|
84
|
+
await ensureDir(targetDir);
|
|
85
|
+
await copy(templatePath, targetDir, { overwrite: true });
|
|
86
|
+
console.log(`ā
Template '${template.name}' downloaded successfully!`);
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
await fs.rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function customizeTemplate({ targetDir, projectName, workspace, wranglerRoot, }) {
|
|
93
|
+
const packageJsonPath = join(targetDir, "package.json");
|
|
94
|
+
try {
|
|
95
|
+
const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
|
|
96
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
97
|
+
packageJson.name = projectName;
|
|
98
|
+
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.warn("ā ļø Could not customize package.json:", error instanceof Error ? error.message : String(error));
|
|
102
|
+
}
|
|
103
|
+
// Write config file with project name and workspace
|
|
104
|
+
if (workspace) {
|
|
105
|
+
try {
|
|
106
|
+
// Read current config from target directory
|
|
107
|
+
const currentConfig = await readWranglerConfig(wranglerRoot || targetDir);
|
|
108
|
+
// For now, use empty bindings - we can enhance this later with prompt integrations
|
|
109
|
+
const bindings = [];
|
|
110
|
+
// Merge with new project name and workspace - preserve all existing config
|
|
111
|
+
const newConfig = {
|
|
112
|
+
...currentConfig,
|
|
113
|
+
name: projectName,
|
|
114
|
+
scope: workspace,
|
|
115
|
+
deco: {
|
|
116
|
+
...currentConfig.deco,
|
|
117
|
+
workspace,
|
|
118
|
+
bindings,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
// Write the new config file
|
|
122
|
+
await writeWranglerConfig(newConfig, wranglerRoot || targetDir);
|
|
123
|
+
// Generate environment variables file
|
|
124
|
+
const envContent = await genEnv({
|
|
125
|
+
workspace: workspace,
|
|
126
|
+
local: false,
|
|
127
|
+
bindings: newConfig.deco.bindings || [],
|
|
128
|
+
});
|
|
129
|
+
const outputPath = join(wranglerRoot || targetDir, "deco.gen.ts");
|
|
130
|
+
await fs.writeFile(outputPath, envContent);
|
|
131
|
+
console.log(`ā
Environment types written to: ${outputPath}`);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.warn("ā ļø Could not update config file:", error instanceof Error ? error.message : String(error));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export async function createCommand(projectName, config = {}) {
|
|
139
|
+
try {
|
|
140
|
+
const selectedTemplate = DEFAULT_TEMPLATE;
|
|
141
|
+
const finalProjectName = slugify(projectName ||
|
|
142
|
+
(await inquirer.prompt([
|
|
143
|
+
{
|
|
144
|
+
type: "input",
|
|
145
|
+
name: "projectName",
|
|
146
|
+
message: "Enter project name:",
|
|
147
|
+
validate: (value) => {
|
|
148
|
+
if (!value.trim()) {
|
|
149
|
+
return "Project name cannot be empty";
|
|
150
|
+
}
|
|
151
|
+
if (!/^[a-z0-9-]+$/.test(value)) {
|
|
152
|
+
return "Project name can only contain lowercase letters, numbers, and hyphens";
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
])).projectName);
|
|
158
|
+
// Prompt user to select workspace
|
|
159
|
+
let workspace = config?.workspace;
|
|
160
|
+
try {
|
|
161
|
+
workspace = await promptWorkspace(config?.local, workspace);
|
|
162
|
+
console.log(`š Selected workspace: ${workspace}`);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
console.error(error);
|
|
166
|
+
console.warn("ā ļø Could not select workspace. Please run 'deco login' to authenticate for a better experience.");
|
|
167
|
+
// Continue without workspace
|
|
168
|
+
}
|
|
169
|
+
const targetDir = join(process.cwd(), finalProjectName);
|
|
170
|
+
try {
|
|
171
|
+
await fs.access(targetDir);
|
|
172
|
+
const { overwrite } = await inquirer.prompt([
|
|
173
|
+
{
|
|
174
|
+
type: "list",
|
|
175
|
+
name: "overwrite",
|
|
176
|
+
message: `Directory '${finalProjectName}' already exists. Overwrite?`,
|
|
177
|
+
choices: ["No", "Yes"],
|
|
178
|
+
},
|
|
179
|
+
]);
|
|
180
|
+
if (overwrite === "No") {
|
|
181
|
+
console.log("ā Project creation cancelled.");
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
await fs.rm(targetDir, { recursive: true });
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Directory doesn't exist, that's fine
|
|
188
|
+
}
|
|
189
|
+
const wranglerRoot = join(targetDir, selectedTemplate.wranglerRoot || "");
|
|
190
|
+
const { initGit } = await inquirer.prompt([
|
|
191
|
+
{
|
|
192
|
+
type: "list",
|
|
193
|
+
name: "initGit",
|
|
194
|
+
message: "Initialize a git repository?",
|
|
195
|
+
choices: ["No", "Yes"],
|
|
196
|
+
},
|
|
197
|
+
]);
|
|
198
|
+
// Prompt user to install MCP configuration for IDE
|
|
199
|
+
const mcpResult = workspace
|
|
200
|
+
? await promptIDESetup({ workspace, app: finalProjectName }, targetDir)
|
|
201
|
+
: null;
|
|
202
|
+
console.log(`š¦ Downloading template '${selectedTemplate.name}'...`);
|
|
203
|
+
await downloadTemplate(selectedTemplate, targetDir);
|
|
204
|
+
if (mcpResult) {
|
|
205
|
+
await writeIDEConfig(mcpResult);
|
|
206
|
+
}
|
|
207
|
+
await customizeTemplate({
|
|
208
|
+
targetDir,
|
|
209
|
+
projectName: finalProjectName,
|
|
210
|
+
workspace,
|
|
211
|
+
wranglerRoot,
|
|
212
|
+
});
|
|
213
|
+
if (initGit === "Yes") {
|
|
214
|
+
try {
|
|
215
|
+
const success = await runCommand("git", ["init"], targetDir);
|
|
216
|
+
if (success) {
|
|
217
|
+
console.log(`ā
Git repository initialized in '${finalProjectName}'`);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
console.warn("ā ļø Failed to initialize git repository");
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
console.warn("ā ļø Could not initialize git repository:", error instanceof Error ? error.message : String(error));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
console.log(`\nš Project '${finalProjectName}' created successfully!`);
|
|
228
|
+
console.log(`\nNext steps:`);
|
|
229
|
+
console.log(` cd ${finalProjectName}`);
|
|
230
|
+
console.log(` npm install`);
|
|
231
|
+
console.log(` npm run dev`);
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
console.error("ā Failed to create project:", error instanceof Error ? error.message : String(error));
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/create/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/commands/dev/dev.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CAAC,EAAE;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE3E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
|
+
import { getConfig, readWranglerConfig } from "../../lib/config.js";
|
|
3
|
+
import { ensureDevEnvironment } from "../../lib/wrangler.js";
|
|
4
|
+
import { link } from "./link.js";
|
|
5
|
+
import process from "node:process";
|
|
6
|
+
export async function devCommand(opts) {
|
|
7
|
+
try {
|
|
8
|
+
// 1. Ensure development environment is set up
|
|
9
|
+
console.log("š§ Setting up development environment...");
|
|
10
|
+
await ensureDevEnvironment(opts);
|
|
11
|
+
// 2. Get configuration
|
|
12
|
+
const _config = await getConfig().catch(() => ({
|
|
13
|
+
workspace: "default",
|
|
14
|
+
bindings: [],
|
|
15
|
+
local: false,
|
|
16
|
+
enable_workflows: true,
|
|
17
|
+
}));
|
|
18
|
+
const wranglerConfig = await readWranglerConfig();
|
|
19
|
+
const app = typeof wranglerConfig.name === "string" ? wranglerConfig.name : "my-app";
|
|
20
|
+
console.log(`š¦ Starting development server for '${app}'...`);
|
|
21
|
+
// 3. TODO: Check/setup MCP configuration when we port those utilities
|
|
22
|
+
// const latest = await hasMCPPreferences(config.workspace, app);
|
|
23
|
+
// if (!latest) {
|
|
24
|
+
// const mcpConfig = await promptIDESetup({
|
|
25
|
+
// workspace: config.workspace,
|
|
26
|
+
// app,
|
|
27
|
+
// });
|
|
28
|
+
// if (mcpConfig) {
|
|
29
|
+
// await writeIDEConfig(mcpConfig);
|
|
30
|
+
// }
|
|
31
|
+
// }
|
|
32
|
+
// 4. Start development server with tunnel integration
|
|
33
|
+
console.log("š Starting development server with tunnel...");
|
|
34
|
+
// Use link command with wrangler dev as subprocess
|
|
35
|
+
await link({
|
|
36
|
+
port: 8787,
|
|
37
|
+
onBeforeRegister: () => {
|
|
38
|
+
console.log("š Starting Wrangler development server...");
|
|
39
|
+
const wranglerProcess = spawn("npx", ["wrangler", "dev"], {
|
|
40
|
+
stdio: "inherit",
|
|
41
|
+
shell: true,
|
|
42
|
+
});
|
|
43
|
+
// Handle process termination
|
|
44
|
+
const cleanup = () => {
|
|
45
|
+
console.log("\nā¹ļø Stopping development server...");
|
|
46
|
+
wranglerProcess.kill("SIGINT");
|
|
47
|
+
process.exit(0);
|
|
48
|
+
};
|
|
49
|
+
process.on("SIGINT", cleanup);
|
|
50
|
+
process.on("SIGTERM", cleanup);
|
|
51
|
+
wranglerProcess.on("error", (error) => {
|
|
52
|
+
console.error("ā Failed to start Wrangler:", error.message);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
});
|
|
55
|
+
return wranglerProcess;
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error("ā Development server failed:", error instanceof Error ? error.message : String(error));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/commands/dev/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,OAAO,MAAM,cAAc,CAAC;AASnC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA2B;IAC1D,IAAI,CAAC;QACH,8CAA8C;QAC9C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEjC,uBAAuB;QACvB,MAAM,OAAO,GAAG,MAAM,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7C,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,KAAK;YACZ,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC,CAAC;QAEJ,MAAM,cAAc,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAClD,MAAM,GAAG,GACP,OAAO,cAAc,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;QAE3E,OAAO,CAAC,GAAG,CAAC,uCAAuC,GAAG,MAAM,CAAC,CAAC;QAE9D,sEAAsE;QACtE,iEAAiE;QACjE,iBAAiB;QACjB,6CAA6C;QAC7C,mCAAmC;QACnC,WAAW;QACX,QAAQ;QACR,qBAAqB;QACrB,uCAAuC;QACvC,MAAM;QACN,IAAI;QAEJ,sDAAsD;QACtD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAE7D,mDAAmD;QACnD,MAAM,IAAI,CAAC;YACT,IAAI,EAAE,IAAI;YACV,gBAAgB,EAAE,GAAG,EAAE;gBACrB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;gBAE1D,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;oBACxD,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;gBAEH,6BAA6B;gBAC7B,MAAM,OAAO,GAAG,GAAG,EAAE;oBACnB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;oBACpD,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC;gBAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAE/B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACpC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;gBAEH,OAAO,eAAe,CAAC;YACzB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,8BAA8B,EAC9B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ChildProcess } from "child_process";
|
|
2
|
+
interface LinkOptions {
|
|
3
|
+
port?: number;
|
|
4
|
+
onBeforeRegister?: () => void | ChildProcess;
|
|
5
|
+
}
|
|
6
|
+
export declare const link: ({ port, onBeforeRegister, }?: LinkOptions) => Promise<void>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/commands/dev/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,eAAe,CAAC;AAWpD,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,IAAI,GAAG,YAAY,CAAC;CAC9C;AA6ID,eAAO,MAAM,IAAI,GAAU,8BAGxB,WAAgB,kBAWlB,CAAC"}
|