@kardoe/quickback 0.4.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/dist/commands/compile.d.ts +18 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +144 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/create.d.ts +18 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +669 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +383 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +190 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +7 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +19 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/whoami.d.ts +7 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +37 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +140 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +82 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +59 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth.d.ts +44 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +85 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/compiler-stubs.d.ts +66 -0
- package/dist/lib/compiler-stubs.d.ts.map +1 -0
- package/dist/lib/compiler-stubs.js +75 -0
- package/dist/lib/compiler-stubs.js.map +1 -0
- package/dist/lib/file-loader.d.ts +73 -0
- package/dist/lib/file-loader.d.ts.map +1 -0
- package/dist/lib/file-loader.js +291 -0
- package/dist/lib/file-loader.js.map +1 -0
- package/dist/lib/file-writer.d.ts +33 -0
- package/dist/lib/file-writer.d.ts.map +1 -0
- package/dist/lib/file-writer.js +110 -0
- package/dist/lib/file-writer.js.map +1 -0
- package/dist/lib/helpers.d.ts +39 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +299 -0
- package/dist/lib/helpers.js.map +1 -0
- package/dist/lib/shell.d.ts +15 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +32 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/templates/registry.d.ts +36 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +143 -0
- package/dist/templates/registry.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
export function validateBindingName(name) {
|
|
2
|
+
if (!name || name.trim().length === 0)
|
|
3
|
+
return "Please enter a binding name";
|
|
4
|
+
if (!/^[A-Z0-9_]+$/.test(name))
|
|
5
|
+
return "Use ONLY A-Z, 0-9, and underscores";
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
export function updateJSON(filePath, mutator) {
|
|
9
|
+
const { readFileSync, writeFileSync } = require("fs");
|
|
10
|
+
const json = JSON.parse(readFileSync(filePath, "utf8"));
|
|
11
|
+
const next = mutator(json);
|
|
12
|
+
writeFileSync(filePath, JSON.stringify(next, null, 2));
|
|
13
|
+
}
|
|
14
|
+
export function extractFirstBlock(toml, header) {
|
|
15
|
+
const re = new RegExp(`(\\[\\[${header}\\]\\][\\s\\S]*?)(?=\\n\\[\\[|$)`);
|
|
16
|
+
const match = re.exec(toml);
|
|
17
|
+
if (!match)
|
|
18
|
+
return null;
|
|
19
|
+
return { block: match[1], start: match.index, end: match.index + match[1].length };
|
|
20
|
+
}
|
|
21
|
+
export function updateD1Block(toml, binding, dbName) {
|
|
22
|
+
const found = extractFirstBlock(toml, "d1_databases");
|
|
23
|
+
if (!found)
|
|
24
|
+
return toml;
|
|
25
|
+
let block = found.block;
|
|
26
|
+
if (/binding\s*=\s*"[^"]+"/.test(block)) {
|
|
27
|
+
block = block.replace(/binding\s*=\s*"[^"]+"/, `binding = "${binding}"`);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
block = block.replace(/\[\[d1_databases\]\]/, `[[d1_databases]]\nbinding = "${binding}"`);
|
|
31
|
+
}
|
|
32
|
+
if (/database_name\s*=\s*"[^"]+"/.test(block)) {
|
|
33
|
+
block = block.replace(/database_name\s*=\s*"[^"]+"/, `database_name = "${dbName}"`);
|
|
34
|
+
}
|
|
35
|
+
return toml.slice(0, found.start) + block + toml.slice(found.end);
|
|
36
|
+
}
|
|
37
|
+
export function appendOrReplaceKvNamespaceBlock(toml, binding, id) {
|
|
38
|
+
const kvBlockRegex = /\[\[kv_namespaces\]\][\s\S]*?(?=(\n\[\[|$))/g;
|
|
39
|
+
const blocks = toml.match(kvBlockRegex) || [];
|
|
40
|
+
const newBlock = [
|
|
41
|
+
"[[kv_namespaces]]",
|
|
42
|
+
`binding = "${binding}"`,
|
|
43
|
+
id ? `id = "${id}"` : `id = "YOUR_KV_NAMESPACE_ID"`,
|
|
44
|
+
].join("\n");
|
|
45
|
+
const existingIndex = blocks.findIndex(b => b.includes(`binding = "${binding}"`));
|
|
46
|
+
if (existingIndex >= 0) {
|
|
47
|
+
const existing = blocks[existingIndex];
|
|
48
|
+
return toml.replace(existing, newBlock);
|
|
49
|
+
}
|
|
50
|
+
return toml.trimEnd() + "\n\n" + newBlock + "\n";
|
|
51
|
+
}
|
|
52
|
+
export function appendOrReplaceR2Block(toml, binding, bucketName) {
|
|
53
|
+
const r2BlockRegex = /\[\[r2_buckets\]\][\s\S]*?(?=(\n\[\[|$))/g;
|
|
54
|
+
const blocks = toml.match(r2BlockRegex) || [];
|
|
55
|
+
const newBlock = ["[[r2_buckets]]", `binding = "${binding}"`, `bucket_name = "${bucketName}"`].join("\n");
|
|
56
|
+
const existingIndex = blocks.findIndex(b => b.includes(`binding = "${binding}"`));
|
|
57
|
+
if (existingIndex >= 0) {
|
|
58
|
+
const existing = blocks[existingIndex];
|
|
59
|
+
return toml.replace(existing, newBlock);
|
|
60
|
+
}
|
|
61
|
+
return toml.trimEnd() + "\n\n" + newBlock + "\n";
|
|
62
|
+
}
|
|
63
|
+
export function appendOrReplaceHyperdriveBlock(toml, binding, id, database, connectionString) {
|
|
64
|
+
const blockRegex = /\[\[hyperdrive\]\][\s\S]*?(?=(\n\[\[|$))/g;
|
|
65
|
+
const blocks = toml.match(blockRegex) || [];
|
|
66
|
+
// Use provided connection string or fallback to proper local defaults
|
|
67
|
+
let localConnectionString = connectionString || "postgresql://postgres:password@localhost:5432/postgres";
|
|
68
|
+
if (!connectionString && database === "hyperdrive-mysql") {
|
|
69
|
+
localConnectionString = "mysql://root:password@localhost:3306/mysql";
|
|
70
|
+
}
|
|
71
|
+
const placeholderId = id || "YOUR_HYPERDRIVE_ID";
|
|
72
|
+
const newBlock = [
|
|
73
|
+
"[[hyperdrive]]",
|
|
74
|
+
`binding = "${binding}"`,
|
|
75
|
+
`id = "${placeholderId}"`,
|
|
76
|
+
`localConnectionString = "${localConnectionString}"`,
|
|
77
|
+
].join("\n");
|
|
78
|
+
const existingIndex = blocks.findIndex(b => b.includes(`binding = "${binding}"`));
|
|
79
|
+
if (existingIndex >= 0) {
|
|
80
|
+
const existing = blocks[existingIndex];
|
|
81
|
+
return toml.replace(existing, newBlock);
|
|
82
|
+
}
|
|
83
|
+
return toml.trimEnd() + "\n\n" + newBlock + "\n";
|
|
84
|
+
}
|
|
85
|
+
export function parseWranglerToml(tomlContent) {
|
|
86
|
+
const databases = [];
|
|
87
|
+
// Parse D1 databases
|
|
88
|
+
const d1Regex = /\[\[d1_databases\]\]\s*\n([^[]*?)(?=\n\[|\n$|$)/g;
|
|
89
|
+
let d1Match;
|
|
90
|
+
while ((d1Match = d1Regex.exec(tomlContent)) !== null) {
|
|
91
|
+
const block = d1Match[1];
|
|
92
|
+
const bindingRegex = /binding\s*=\s*"([^"]+)"/;
|
|
93
|
+
const nameRegex = /database_name\s*=\s*"([^"]+)"/;
|
|
94
|
+
const idRegex = /database_id\s*=\s*"([^"]+)"/;
|
|
95
|
+
const bindingMatch = bindingRegex.exec(block);
|
|
96
|
+
const nameMatch = nameRegex.exec(block);
|
|
97
|
+
const idMatch = idRegex.exec(block);
|
|
98
|
+
if (bindingMatch) {
|
|
99
|
+
databases.push({
|
|
100
|
+
type: "d1",
|
|
101
|
+
binding: bindingMatch[1],
|
|
102
|
+
name: nameMatch?.[1],
|
|
103
|
+
id: idMatch?.[1],
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Parse Hyperdrive databases
|
|
108
|
+
const hyperdriveRegex = /\[\[hyperdrive\]\]\s*\n([^[]*?)(?=\n\[|\n$|$)/g;
|
|
109
|
+
let hyperdriveMatch;
|
|
110
|
+
while ((hyperdriveMatch = hyperdriveRegex.exec(tomlContent)) !== null) {
|
|
111
|
+
const block = hyperdriveMatch[1];
|
|
112
|
+
const bindingRegex = /binding\s*=\s*"([^"]+)"/;
|
|
113
|
+
const idRegex = /id\s*=\s*"([^"]+)"/;
|
|
114
|
+
const bindingMatch = bindingRegex.exec(block);
|
|
115
|
+
const idMatch = idRegex.exec(block);
|
|
116
|
+
if (bindingMatch) {
|
|
117
|
+
databases.push({
|
|
118
|
+
type: "hyperdrive",
|
|
119
|
+
binding: bindingMatch[1],
|
|
120
|
+
id: idMatch?.[1],
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
databases,
|
|
126
|
+
hasMultipleDatabases: databases.length > 1,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// Functions to extract IDs from wrangler command responses
|
|
130
|
+
export function extractD1DatabaseId(wranglerOutput) {
|
|
131
|
+
try {
|
|
132
|
+
// Look for TOML format: database_id = "uuid"
|
|
133
|
+
const tomlRegex = /database_id\s*=\s*"([^"]+)"/;
|
|
134
|
+
const tomlMatch = tomlRegex.exec(wranglerOutput);
|
|
135
|
+
if (tomlMatch) {
|
|
136
|
+
return tomlMatch[1];
|
|
137
|
+
}
|
|
138
|
+
// Look for JSON response with database_id
|
|
139
|
+
const jsonRegex = /\{[\s\S]*"database_id":\s*"([^"]+)"[\s\S]*\}/;
|
|
140
|
+
const jsonMatch = jsonRegex.exec(wranglerOutput);
|
|
141
|
+
if (jsonMatch) {
|
|
142
|
+
return jsonMatch[1];
|
|
143
|
+
}
|
|
144
|
+
// Parse table format from `wrangler d1 info` command
|
|
145
|
+
// The ID appears in the first row of the table without a label
|
|
146
|
+
const lines = wranglerOutput.split("\n");
|
|
147
|
+
for (const line of lines) {
|
|
148
|
+
// Look for a line that contains a UUID (36 characters with hyphens)
|
|
149
|
+
const uuidRegex = /│\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\s*│/i;
|
|
150
|
+
const uuidMatch = uuidRegex.exec(line);
|
|
151
|
+
if (uuidMatch) {
|
|
152
|
+
return uuidMatch[1];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
export function extractKvNamespaceId(wranglerOutput) {
|
|
162
|
+
try {
|
|
163
|
+
// Look for TOML format: id = "uuid"
|
|
164
|
+
const tomlRegex = /id\s*=\s*"([^"]+)"/;
|
|
165
|
+
const tomlMatch = tomlRegex.exec(wranglerOutput);
|
|
166
|
+
if (tomlMatch) {
|
|
167
|
+
return tomlMatch[1];
|
|
168
|
+
}
|
|
169
|
+
// Fallback: Look for JSON response with id field in KV context
|
|
170
|
+
const jsonRegex = /"id":\s*"([a-f0-9]+)"/;
|
|
171
|
+
const jsonMatch = jsonRegex.exec(wranglerOutput);
|
|
172
|
+
if (jsonMatch) {
|
|
173
|
+
return jsonMatch[1];
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
export function extractHyperdriveId(wranglerOutput) {
|
|
182
|
+
try {
|
|
183
|
+
// Look for TOML format: id = "uuid"
|
|
184
|
+
const tomlRegex = /id\s*=\s*"([^"]+)"/;
|
|
185
|
+
const tomlMatch = tomlRegex.exec(wranglerOutput);
|
|
186
|
+
if (tomlMatch) {
|
|
187
|
+
return tomlMatch[1];
|
|
188
|
+
}
|
|
189
|
+
// Fallback: Look for Hyperdrive ID in text format: "id: uuid"
|
|
190
|
+
const textRegex = /id:\s*([a-f0-9-]+)/i;
|
|
191
|
+
const textMatch = textRegex.exec(wranglerOutput);
|
|
192
|
+
if (textMatch) {
|
|
193
|
+
return textMatch[1];
|
|
194
|
+
}
|
|
195
|
+
// Fallback: Look for JSON response with id field
|
|
196
|
+
const jsonRegex = /\{[\s\S]*"id":\s*"([^"]+)"[\s\S]*\}/;
|
|
197
|
+
const jsonMatch = jsonRegex.exec(wranglerOutput);
|
|
198
|
+
if (jsonMatch) {
|
|
199
|
+
return jsonMatch[1];
|
|
200
|
+
}
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Functions to update TOML with extracted IDs
|
|
208
|
+
export function updateD1BlockWithId(toml, binding, dbName, databaseId) {
|
|
209
|
+
const found = extractFirstBlock(toml, "d1_databases");
|
|
210
|
+
if (!found)
|
|
211
|
+
return toml;
|
|
212
|
+
let block = found.block;
|
|
213
|
+
// Update binding
|
|
214
|
+
if (/binding\s*=\s*"[^"]+"/.test(block)) {
|
|
215
|
+
block = block.replace(/binding\s*=\s*"[^"]+"/, `binding = "${binding}"`);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
block = block.replace(/\[\[d1_databases\]\]/, `[[d1_databases]]\nbinding = "${binding}"`);
|
|
219
|
+
}
|
|
220
|
+
// Update database_name
|
|
221
|
+
if (/database_name\s*=\s*"[^"]+"/.test(block)) {
|
|
222
|
+
block = block.replace(/database_name\s*=\s*"[^"]+"/, `database_name = "${dbName}"`);
|
|
223
|
+
}
|
|
224
|
+
// Update database_id
|
|
225
|
+
if (/database_id\s*=\s*"[^"]+"/.test(block)) {
|
|
226
|
+
block = block.replace(/database_id\s*=\s*"[^"]+"/, `database_id = "${databaseId}"`);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
// Add database_id after database_name
|
|
230
|
+
block = block.replace(/database_name\s*=\s*"[^"]+"/, `database_name = "${dbName}"\ndatabase_id = "${databaseId}"`);
|
|
231
|
+
}
|
|
232
|
+
return toml.slice(0, found.start) + block + toml.slice(found.end);
|
|
233
|
+
}
|
|
234
|
+
export function updateKvBlockWithId(toml, binding, namespaceId) {
|
|
235
|
+
// Use the existing appendOrReplaceKvNamespaceBlock but ensure it updates the ID
|
|
236
|
+
return appendOrReplaceKvNamespaceBlock(toml, binding, namespaceId);
|
|
237
|
+
}
|
|
238
|
+
export function updateHyperdriveBlockWithId(toml, binding, hyperdriveId, connectionString) {
|
|
239
|
+
const found = extractFirstBlock(toml, "hyperdrive");
|
|
240
|
+
if (!found)
|
|
241
|
+
return toml;
|
|
242
|
+
let block = found.block;
|
|
243
|
+
// Update id field
|
|
244
|
+
if (/id\s*=\s*"[^"]+"/.test(block)) {
|
|
245
|
+
block = block.replace(/id\s*=\s*"[^"]+"/, `id = "${hyperdriveId}"`);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// Add id after binding
|
|
249
|
+
block = block.replace(/binding\s*=\s*"[^"]+"/, `binding = "${binding}"\nid = "${hyperdriveId}"`);
|
|
250
|
+
}
|
|
251
|
+
// Update localConnectionString if provided
|
|
252
|
+
if (connectionString) {
|
|
253
|
+
if (/localConnectionString\s*=\s*"[^"]+"/.test(block)) {
|
|
254
|
+
block = block.replace(/localConnectionString\s*=\s*"[^"]+"/, `localConnectionString = "${connectionString}"`);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// Add localConnectionString after id
|
|
258
|
+
block = block.replace(/id\s*=\s*"[^"]+"/, `id = "${hyperdriveId}"\nlocalConnectionString = "${connectionString}"`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return toml.slice(0, found.start) + block + toml.slice(found.end);
|
|
262
|
+
}
|
|
263
|
+
export function initializeGitRepository(projectPath) {
|
|
264
|
+
const { spawnSync } = require("child_process");
|
|
265
|
+
// Check if git is available
|
|
266
|
+
const gitCheck = spawnSync("git", ["--version"], { stdio: "pipe", encoding: "utf8" });
|
|
267
|
+
if (gitCheck.status !== 0) {
|
|
268
|
+
return { success: false, error: "Git is not installed or not available in PATH" };
|
|
269
|
+
}
|
|
270
|
+
// Initialize git repository
|
|
271
|
+
const initResult = spawnSync("git", ["init"], {
|
|
272
|
+
cwd: projectPath,
|
|
273
|
+
stdio: "pipe",
|
|
274
|
+
encoding: "utf8",
|
|
275
|
+
});
|
|
276
|
+
if (initResult.status !== 0) {
|
|
277
|
+
return { success: false, error: `Failed to initialize git repository: ${initResult.stderr}` };
|
|
278
|
+
}
|
|
279
|
+
// Add all files to staging
|
|
280
|
+
const addResult = spawnSync("git", ["add", "."], {
|
|
281
|
+
cwd: projectPath,
|
|
282
|
+
stdio: "pipe",
|
|
283
|
+
encoding: "utf8",
|
|
284
|
+
});
|
|
285
|
+
if (addResult.status !== 0) {
|
|
286
|
+
return { success: false, error: `Failed to add files to git: ${addResult.stderr}` };
|
|
287
|
+
}
|
|
288
|
+
// Create initial commit
|
|
289
|
+
const commitResult = spawnSync("git", ["commit", "-m", "Initial commit"], {
|
|
290
|
+
cwd: projectPath,
|
|
291
|
+
stdio: "pipe",
|
|
292
|
+
encoding: "utf8",
|
|
293
|
+
});
|
|
294
|
+
if (commitResult.status !== 0) {
|
|
295
|
+
return { success: false, error: `Failed to create initial commit: ${commitResult.stderr}` };
|
|
296
|
+
}
|
|
297
|
+
return { success: true };
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/lib/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell Utility
|
|
3
|
+
*
|
|
4
|
+
* Run shell commands with proper error handling
|
|
5
|
+
*/
|
|
6
|
+
export interface RunCommandOptions {
|
|
7
|
+
cwd?: string;
|
|
8
|
+
silent?: boolean;
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Run a shell command and return a promise
|
|
13
|
+
*/
|
|
14
|
+
export declare function runCommand(cmd: string, options?: RunCommandOptions): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/lib/shell.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5F"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell Utility
|
|
3
|
+
*
|
|
4
|
+
* Run shell commands with proper error handling
|
|
5
|
+
*/
|
|
6
|
+
import { spawn } from 'child_process';
|
|
7
|
+
/**
|
|
8
|
+
* Run a shell command and return a promise
|
|
9
|
+
*/
|
|
10
|
+
export async function runCommand(cmd, options = {}) {
|
|
11
|
+
const { cwd = process.cwd(), silent = false, env } = options;
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const proc = spawn(cmd, {
|
|
14
|
+
cwd,
|
|
15
|
+
stdio: silent ? 'pipe' : 'inherit',
|
|
16
|
+
shell: true,
|
|
17
|
+
env: env || process.env,
|
|
18
|
+
});
|
|
19
|
+
proc.on('close', (code) => {
|
|
20
|
+
if (code === 0) {
|
|
21
|
+
resolve();
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
reject(new Error(`Command failed with exit code ${code}: ${cmd}`));
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
proc.on('error', (err) => {
|
|
28
|
+
reject(new Error(`Failed to run command: ${cmd}\n${err.message}`));
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/lib/shell.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAQtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,UAA6B,EAAE;IAC3E,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAE7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE;YACtB,GAAG;YACH,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAClC,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,GAAG,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Registry
|
|
3
|
+
*
|
|
4
|
+
* Defines available project templates for quickback create command.
|
|
5
|
+
* The server is the source of truth for templates and tiers.
|
|
6
|
+
* This local registry serves as a fallback when offline.
|
|
7
|
+
*/
|
|
8
|
+
import { type TemplateInfo } from '../lib/api-client.js';
|
|
9
|
+
export interface TemplateDefinition {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
category: "auth" | "saas" | "api" | "payments";
|
|
13
|
+
tags: string[];
|
|
14
|
+
author: string;
|
|
15
|
+
version: string;
|
|
16
|
+
includes: string[];
|
|
17
|
+
preset: string;
|
|
18
|
+
requiresCloudflare: boolean;
|
|
19
|
+
tier: 'free' | 'pro';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fetch templates from server (with caching)
|
|
23
|
+
*/
|
|
24
|
+
export declare function fetchServerTemplates(): Promise<Record<string, TemplateInfo>>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if a template requires pro tier
|
|
27
|
+
*/
|
|
28
|
+
export declare function isProTemplate(templateName: string): Promise<boolean>;
|
|
29
|
+
export declare const TEMPLATE_REGISTRY: Record<string, TemplateDefinition>;
|
|
30
|
+
export declare const TEMPLATE_ALIASES: Record<string, string>;
|
|
31
|
+
export declare function getTemplate(nameOrAlias: string): TemplateDefinition | undefined;
|
|
32
|
+
export declare function listTemplates(): TemplateDefinition[];
|
|
33
|
+
export declare function listTemplateNames(): string[];
|
|
34
|
+
export declare function listAliases(): Record<string, string>;
|
|
35
|
+
export declare function formatTemplateList(): string;
|
|
36
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;CACxB;AAKD;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAYlF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAY1E;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAgEhE,CAAC;AAGF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQnD,CAAC;AAEF,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAG/E;AAED,wBAAgB,aAAa,IAAI,kBAAkB,EAAE,CAEpD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEpD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAgB3C"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Registry
|
|
3
|
+
*
|
|
4
|
+
* Defines available project templates for quickback create command.
|
|
5
|
+
* The server is the source of truth for templates and tiers.
|
|
6
|
+
* This local registry serves as a fallback when offline.
|
|
7
|
+
*/
|
|
8
|
+
import { fetchTemplates } from '../lib/api-client.js';
|
|
9
|
+
// Cache for server templates
|
|
10
|
+
let serverTemplatesCache = null;
|
|
11
|
+
/**
|
|
12
|
+
* Fetch templates from server (with caching)
|
|
13
|
+
*/
|
|
14
|
+
export async function fetchServerTemplates() {
|
|
15
|
+
if (serverTemplatesCache) {
|
|
16
|
+
return serverTemplatesCache;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
serverTemplatesCache = await fetchTemplates();
|
|
20
|
+
return serverTemplatesCache;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Fallback to local registry
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if a template requires pro tier
|
|
29
|
+
*/
|
|
30
|
+
export async function isProTemplate(templateName) {
|
|
31
|
+
const serverTemplates = await fetchServerTemplates();
|
|
32
|
+
const resolved = TEMPLATE_ALIASES[templateName] || templateName;
|
|
33
|
+
// Check server first
|
|
34
|
+
if (serverTemplates[resolved]) {
|
|
35
|
+
return serverTemplates[resolved].tier === 'pro';
|
|
36
|
+
}
|
|
37
|
+
// Fallback to local
|
|
38
|
+
const local = TEMPLATE_REGISTRY[resolved];
|
|
39
|
+
return local?.tier === 'pro';
|
|
40
|
+
}
|
|
41
|
+
export const TEMPLATE_REGISTRY = {
|
|
42
|
+
// Free tier templates
|
|
43
|
+
"betterauth-d1-cloudflare": {
|
|
44
|
+
name: "Better Auth + D1 + Cloudflare",
|
|
45
|
+
description: "Authentication with Better Auth, D1 database, deployed to Cloudflare Workers",
|
|
46
|
+
category: "auth",
|
|
47
|
+
tags: ["auth", "cloudflare", "d1", "hono"],
|
|
48
|
+
author: "quickback",
|
|
49
|
+
version: "1.0.0",
|
|
50
|
+
includes: ["betterauth", "d1", "hono", "drizzle"],
|
|
51
|
+
preset: "cloudflare",
|
|
52
|
+
requiresCloudflare: true,
|
|
53
|
+
tier: "free",
|
|
54
|
+
},
|
|
55
|
+
"betterauth-sqlite-bun": {
|
|
56
|
+
name: "Better Auth + SQLite + Bun",
|
|
57
|
+
description: "Local development with Better Auth, SQLite database, running on Bun",
|
|
58
|
+
category: "auth",
|
|
59
|
+
tags: ["auth", "bun", "sqlite", "local"],
|
|
60
|
+
author: "quickback",
|
|
61
|
+
version: "1.0.0",
|
|
62
|
+
includes: ["betterauth", "better-sqlite3", "hono", "drizzle"],
|
|
63
|
+
preset: "bun",
|
|
64
|
+
requiresCloudflare: false,
|
|
65
|
+
tier: "free",
|
|
66
|
+
},
|
|
67
|
+
// Pro tier templates
|
|
68
|
+
"betterauth-libsql-turso": {
|
|
69
|
+
name: "Better Auth + LibSQL + Turso",
|
|
70
|
+
description: "Authentication with Better Auth, Turso/LibSQL database",
|
|
71
|
+
category: "auth",
|
|
72
|
+
tags: ["auth", "turso", "libsql", "edge"],
|
|
73
|
+
author: "quickback",
|
|
74
|
+
version: "1.0.0",
|
|
75
|
+
includes: ["betterauth", "libsql", "hono", "drizzle"],
|
|
76
|
+
preset: "turso",
|
|
77
|
+
requiresCloudflare: false,
|
|
78
|
+
tier: "pro",
|
|
79
|
+
},
|
|
80
|
+
// Future templates (placeholders for marketplace)
|
|
81
|
+
"b2bsaas-cloudflare": {
|
|
82
|
+
name: "B2B SaaS Starter",
|
|
83
|
+
description: "Full B2B SaaS with auth, organizations, billing hooks, email",
|
|
84
|
+
category: "saas",
|
|
85
|
+
tags: ["saas", "b2b", "stripe", "cloudflare", "teams"],
|
|
86
|
+
author: "quickback",
|
|
87
|
+
version: "0.1.0",
|
|
88
|
+
includes: ["betterauth", "organizations", "stripe", "resend", "d1", "r2"],
|
|
89
|
+
preset: "cloudflare",
|
|
90
|
+
requiresCloudflare: true,
|
|
91
|
+
tier: "pro",
|
|
92
|
+
},
|
|
93
|
+
"api-minimal-bun": {
|
|
94
|
+
name: "Minimal API (no auth)",
|
|
95
|
+
description: "Lightweight API with just database and routes, no authentication",
|
|
96
|
+
category: "api",
|
|
97
|
+
tags: ["api", "minimal", "bun", "sqlite"],
|
|
98
|
+
author: "quickback",
|
|
99
|
+
version: "1.0.0",
|
|
100
|
+
includes: ["hono", "drizzle", "better-sqlite3"],
|
|
101
|
+
preset: "bun",
|
|
102
|
+
requiresCloudflare: false,
|
|
103
|
+
tier: "free",
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
// Aliases for common shortcuts
|
|
107
|
+
export const TEMPLATE_ALIASES = {
|
|
108
|
+
"cloudflare": "betterauth-d1-cloudflare",
|
|
109
|
+
"cf": "betterauth-d1-cloudflare",
|
|
110
|
+
"bun": "betterauth-sqlite-bun",
|
|
111
|
+
"local": "betterauth-sqlite-bun",
|
|
112
|
+
"turso": "betterauth-libsql-turso",
|
|
113
|
+
"saas": "b2bsaas-cloudflare",
|
|
114
|
+
"minimal": "api-minimal-bun",
|
|
115
|
+
};
|
|
116
|
+
export function getTemplate(nameOrAlias) {
|
|
117
|
+
const resolved = TEMPLATE_ALIASES[nameOrAlias] || nameOrAlias;
|
|
118
|
+
return TEMPLATE_REGISTRY[resolved];
|
|
119
|
+
}
|
|
120
|
+
export function listTemplates() {
|
|
121
|
+
return Object.values(TEMPLATE_REGISTRY);
|
|
122
|
+
}
|
|
123
|
+
export function listTemplateNames() {
|
|
124
|
+
return Object.keys(TEMPLATE_REGISTRY);
|
|
125
|
+
}
|
|
126
|
+
export function listAliases() {
|
|
127
|
+
return TEMPLATE_ALIASES;
|
|
128
|
+
}
|
|
129
|
+
export function formatTemplateList() {
|
|
130
|
+
const lines = ["Available templates:\n"];
|
|
131
|
+
for (const [id, template] of Object.entries(TEMPLATE_REGISTRY)) {
|
|
132
|
+
lines.push(` ${id}`);
|
|
133
|
+
lines.push(` ${template.description}`);
|
|
134
|
+
lines.push(` Tags: ${template.tags.join(", ")}`);
|
|
135
|
+
lines.push("");
|
|
136
|
+
}
|
|
137
|
+
lines.push("Aliases:");
|
|
138
|
+
for (const [alias, target] of Object.entries(TEMPLATE_ALIASES)) {
|
|
139
|
+
lines.push(` ${alias} -> ${target}`);
|
|
140
|
+
}
|
|
141
|
+
return lines.join("\n");
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kardoe/quickback",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "CLI for Quickback - one-shot backend generator",
|
|
5
|
+
"author": "Paul Stenhouse",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"quickback": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist/**/*"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"dev": "tsc --watch",
|
|
18
|
+
"test": "bun test",
|
|
19
|
+
"typecheck": "tsc --noEmit"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"dev": "^0.1.3",
|
|
23
|
+
"esbuild": "^0.27.2",
|
|
24
|
+
"ora": "^9.0.0",
|
|
25
|
+
"picocolors": "^1.0.0",
|
|
26
|
+
"prompts": "^2.4.2"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^22.7.5",
|
|
30
|
+
"@types/prompts": "^2.4.9",
|
|
31
|
+
"bun-types": "^1.3.5",
|
|
32
|
+
"typescript": "^5.5.4"
|
|
33
|
+
},
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=18.0.0"
|
|
36
|
+
}
|
|
37
|
+
}
|