@lumerahq/cli 0.19.12 → 0.19.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-OGG5TR4Y.js → chunk-VOIZWYZD.js} +2 -2
- package/dist/{dev-EZTXUSD2.js → dev-PONRO7VN.js} +1 -1
- package/dist/index.js +9 -9
- package/dist/{init-QCNR4ULM.js → init-KJOWD2KQ.js} +9 -3
- package/dist/{resources-DPGY7KC3.js → resources-UZ3TNZ4K.js} +1 -1
- package/package.json +1 -1
- package/templates/default/AGENTS.md +4 -4
- package/templates/default/_gitignore +0 -1
- package/templates/default/package.json +4 -7
- package/templates/default/pnpm-lock.yaml +4083 -0
- package/templates/default/src/styles.css +95 -1
|
@@ -116,10 +116,10 @@ async function deploy(options) {
|
|
|
116
116
|
throw new Error(`Deploy failed: ${await res.text()}`);
|
|
117
117
|
}
|
|
118
118
|
const result = await res.json();
|
|
119
|
-
const launchUrl = result.launch_url
|
|
119
|
+
const launchUrl = result.launch_url;
|
|
120
120
|
console.log(pc.green(`
|
|
121
121
|
Deployed! ${launchUrl}`));
|
|
122
|
-
return {
|
|
122
|
+
return { launchUrl, version };
|
|
123
123
|
}
|
|
124
124
|
function isPortInUse(port, host = "127.0.0.1") {
|
|
125
125
|
return new Promise((resolve2) => {
|
package/dist/index.js
CHANGED
|
@@ -219,36 +219,36 @@ async function main() {
|
|
|
219
219
|
switch (command) {
|
|
220
220
|
// Resource commands
|
|
221
221
|
case "plan":
|
|
222
|
-
await import("./resources-
|
|
222
|
+
await import("./resources-UZ3TNZ4K.js").then((m) => m.plan(args.slice(1)));
|
|
223
223
|
break;
|
|
224
224
|
case "apply":
|
|
225
|
-
await import("./resources-
|
|
225
|
+
await import("./resources-UZ3TNZ4K.js").then((m) => m.apply(args.slice(1)));
|
|
226
226
|
break;
|
|
227
227
|
case "pull":
|
|
228
|
-
await import("./resources-
|
|
228
|
+
await import("./resources-UZ3TNZ4K.js").then((m) => m.pull(args.slice(1)));
|
|
229
229
|
break;
|
|
230
230
|
case "destroy":
|
|
231
|
-
await import("./resources-
|
|
231
|
+
await import("./resources-UZ3TNZ4K.js").then((m) => m.destroy(args.slice(1)));
|
|
232
232
|
break;
|
|
233
233
|
case "list":
|
|
234
|
-
await import("./resources-
|
|
234
|
+
await import("./resources-UZ3TNZ4K.js").then((m) => m.list(args.slice(1)));
|
|
235
235
|
break;
|
|
236
236
|
case "show":
|
|
237
|
-
await import("./resources-
|
|
237
|
+
await import("./resources-UZ3TNZ4K.js").then((m) => m.show(args.slice(1)));
|
|
238
238
|
break;
|
|
239
239
|
case "diff":
|
|
240
|
-
await import("./resources-
|
|
240
|
+
await import("./resources-UZ3TNZ4K.js").then((m) => m.diff(args.slice(1)));
|
|
241
241
|
break;
|
|
242
242
|
// Development
|
|
243
243
|
case "dev":
|
|
244
|
-
await import("./dev-
|
|
244
|
+
await import("./dev-PONRO7VN.js").then((m) => m.dev(args.slice(1)));
|
|
245
245
|
break;
|
|
246
246
|
case "run":
|
|
247
247
|
await import("./run-R6MO23U7.js").then((m) => m.run(args.slice(1)));
|
|
248
248
|
break;
|
|
249
249
|
// Project
|
|
250
250
|
case "init":
|
|
251
|
-
await import("./init-
|
|
251
|
+
await import("./init-KJOWD2KQ.js").then((m) => m.init(args.slice(1)));
|
|
252
252
|
break;
|
|
253
253
|
case "register":
|
|
254
254
|
await import("./register-QBRKXWNX.js").then((m) => m.register(args.slice(1)));
|
|
@@ -25,7 +25,7 @@ init_auth();
|
|
|
25
25
|
import pc from "picocolors";
|
|
26
26
|
import prompts from "prompts";
|
|
27
27
|
import { execSync } from "child_process";
|
|
28
|
-
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, readlinkSync, symlinkSync } from "fs";
|
|
28
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, readlinkSync, symlinkSync } from "fs";
|
|
29
29
|
import { join, resolve } from "path";
|
|
30
30
|
function toTitleCase(str) {
|
|
31
31
|
return str.split(/[-_]/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
@@ -41,6 +41,7 @@ function processTemplate(content, replacements) {
|
|
|
41
41
|
}
|
|
42
42
|
var TEMPLATE_EXCLUDE = /* @__PURE__ */ new Set(["template.json"]);
|
|
43
43
|
var TEMPLATE_RENAMES = /* @__PURE__ */ new Map([["_gitignore", ".gitignore"]]);
|
|
44
|
+
var TEMPLATE_RAW_COPY = /* @__PURE__ */ new Set(["pnpm-lock.yaml"]);
|
|
44
45
|
function copyDir(src, dest, replacements, isRoot = true) {
|
|
45
46
|
if (!existsSync(dest)) {
|
|
46
47
|
mkdirSync(dest, { recursive: true });
|
|
@@ -60,6 +61,10 @@ function copyDir(src, dest, replacements, isRoot = true) {
|
|
|
60
61
|
} else if (entry.isDirectory()) {
|
|
61
62
|
copyDir(srcPath, destPath, replacements, false);
|
|
62
63
|
} else {
|
|
64
|
+
if (TEMPLATE_RAW_COPY.has(entry.name)) {
|
|
65
|
+
copyFileSync(srcPath, destPath);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
63
68
|
const content = readFileSync(srcPath, "utf-8");
|
|
64
69
|
const processed = processTemplate(content, replacements);
|
|
65
70
|
writeFileSync(destPath, processed);
|
|
@@ -363,6 +368,7 @@ async function init(args) {
|
|
|
363
368
|
];
|
|
364
369
|
copyDir(templateDir, targetDir, replacements);
|
|
365
370
|
ensureClaudeInstructionsLink(targetDir);
|
|
371
|
+
const installCommand = existsSync(join(targetDir, "pnpm-lock.yaml")) ? "pnpm install --frozen-lockfile" : "pnpm install";
|
|
366
372
|
function listFiles(dir, prefix = "") {
|
|
367
373
|
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
368
374
|
const relativePath = prefix + entry.name;
|
|
@@ -405,7 +411,7 @@ async function init(args) {
|
|
|
405
411
|
if (opts.install) {
|
|
406
412
|
const stopInstall = spinner("Installing dependencies...");
|
|
407
413
|
try {
|
|
408
|
-
execSync(
|
|
414
|
+
execSync(installCommand, { cwd: targetDir, stdio: "ignore" });
|
|
409
415
|
stopInstall(pc.green("\u2713") + pc.dim(" Dependencies installed"));
|
|
410
416
|
} catch {
|
|
411
417
|
stopInstall(pc.yellow("\u26A0") + pc.dim(" Failed to install dependencies"));
|
|
@@ -453,7 +459,7 @@ async function init(args) {
|
|
|
453
459
|
console.log();
|
|
454
460
|
console.log(pc.cyan(` cd ${finalDirectory}`));
|
|
455
461
|
if (!opts.install) {
|
|
456
|
-
console.log(pc.cyan(
|
|
462
|
+
console.log(pc.cyan(` ${installCommand}`));
|
|
457
463
|
}
|
|
458
464
|
if (!registered) {
|
|
459
465
|
console.log(pc.cyan(" lumera login"));
|
package/package.json
CHANGED
|
@@ -55,11 +55,11 @@ For detailed technical reference (data models, relationships, design decisions),
|
|
|
55
55
|
|
|
56
56
|
### Installing components
|
|
57
57
|
|
|
58
|
-
Install shadcn components with `pnpm dlx` (the sandbox's default JS package manager):
|
|
58
|
+
Install shadcn components with `pnpm dlx` (the sandbox's default JS package manager). Match the sandbox-pinned shadcn version:
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
|
-
pnpm dlx shadcn@
|
|
62
|
-
pnpm dlx shadcn@
|
|
61
|
+
pnpm dlx shadcn@4.1.2 add button card dialog # Install specific components
|
|
62
|
+
pnpm dlx shadcn@4.1.2 add table input label select # Install more as needed
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
Components install into `src/components/ui/` and are fully editable.
|
|
@@ -126,7 +126,7 @@ const link = getShareableAppUrl(); // preserves current path/search/hash
|
|
|
126
126
|
const invoiceLink = buildShareableAppUrl('/invoices/123', { router: 'hash' });
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
When reporting a deployed app, use `launch_url`
|
|
129
|
+
When reporting a deployed app, use `launch_url` from the deploy response. Do not share `iframe_url`; it is only the internal iframe/static asset mount.
|
|
130
130
|
|
|
131
131
|
## Preview and Verification
|
|
132
132
|
|
|
@@ -27,26 +27,23 @@
|
|
|
27
27
|
"@lumerahq/ui": "^0.9.1",
|
|
28
28
|
"@tanstack/react-query": "^5.90.11",
|
|
29
29
|
"@tanstack/react-router": "1.155.0",
|
|
30
|
-
"@tanstack/router-plugin": "1.155.0",
|
|
31
|
-
"class-variance-authority": "^0.7.1",
|
|
32
30
|
"clsx": "^2.1.1",
|
|
33
31
|
"lucide-react": "^1.7.0",
|
|
34
|
-
"radix-ui": "^1.4.3",
|
|
35
|
-
"shadcn": "^4.1.2",
|
|
36
32
|
"tailwind-merge": "^3.4.0",
|
|
37
|
-
"tw-animate-css": "^1.4.0",
|
|
38
33
|
"react": "^19.2.0",
|
|
39
34
|
"react-dom": "^19.2.0",
|
|
40
|
-
"sonner": "^2.0.7"
|
|
41
|
-
"tailwindcss": "^4.2.2"
|
|
35
|
+
"sonner": "^2.0.7"
|
|
42
36
|
},
|
|
43
37
|
"devDependencies": {
|
|
44
38
|
"@biomejs/biome": "^2.4.10",
|
|
45
39
|
"@tailwindcss/vite": "^4.2.2",
|
|
46
40
|
"@tanstack/router-cli": "1.155.0",
|
|
41
|
+
"@tanstack/router-plugin": "1.155.0",
|
|
47
42
|
"@types/react": "^19.2.14",
|
|
48
43
|
"@types/react-dom": "^19.2.3",
|
|
49
44
|
"@vitejs/plugin-react": "^6.0.1",
|
|
45
|
+
"tailwindcss": "^4.2.2",
|
|
46
|
+
"tw-animate-css": "^1.4.0",
|
|
50
47
|
"typescript": "^6.0.2",
|
|
51
48
|
"vite": "^8.0.3"
|
|
52
49
|
}
|