@vobs/cli 1.2.1 โ 1.3.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/banner.cjs +31 -7
- package/dist/banner.cjs.map +1 -1
- package/dist/banner.js +5 -3
- package/dist/banner.js.map +1 -1
- package/dist/cli.cjs +130 -98
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +65 -40
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.cjs +63 -49
- package/dist/commands/add.cjs.map +1 -1
- package/dist/commands/add.js +14 -9
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/build.cjs +50 -19
- package/dist/commands/build.cjs.map +1 -1
- package/dist/commands/build.js +9 -6
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/dev.cjs +50 -19
- package/dist/commands/dev.cjs.map +1 -1
- package/dist/commands/dev.js +9 -6
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/generate.cjs +76 -63
- package/dist/commands/generate.cjs.map +1 -1
- package/dist/commands/generate.js +24 -18
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/index.cjs +136 -100
- package/dist/commands/index.cjs.map +1 -1
- package/dist/commands/index.js +66 -39
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.cjs +89 -71
- package/dist/commands/init.cjs.map +1 -1
- package/dist/commands/init.js +28 -17
- package/dist/commands/init.js.map +1 -1
- package/dist/index.cjs +187 -132
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +94 -48
- package/dist/index.js.map +1 -1
- package/dist/repl.cjs +139 -111
- package/dist/repl.cjs.map +1 -1
- package/dist/repl.js +67 -46
- package/dist/repl.js.map +1 -1
- package/dist/start.cjs +151 -114
- package/dist/start.cjs.map +1 -1
- package/dist/start.js +76 -48
- package/dist/start.js.map +1 -1
- package/dist/types.cjs +18 -2
- package/dist/types.cjs.map +1 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/file.cjs +67 -34
- package/dist/utils/file.cjs.map +1 -1
- package/dist/utils/file.js +18 -12
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/logger.cjs +56 -22
- package/dist/utils/logger.cjs.map +1 -1
- package/dist/utils/logger.js +11 -5
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pm.cjs +41 -16
- package/dist/utils/pm.cjs.map +1 -1
- package/dist/utils/pm.js +10 -7
- package/dist/utils/pm.js.map +1 -1
- package/package.json +1 -1
package/dist/repl.js
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import { createInterface } from 'readline/promises';
|
|
2
|
-
import { stdout, stdin } from 'process';
|
|
3
|
-
import pc2 from 'picocolors';
|
|
4
|
-
import { dirname, resolve } from 'path';
|
|
5
|
-
import { execSync } from 'child_process';
|
|
6
|
-
import * as p from '@clack/prompts';
|
|
7
|
-
import { readFileSync, mkdirSync, writeFileSync, existsSync } from 'fs';
|
|
8
|
-
import { fileURLToPath } from 'url';
|
|
9
|
-
import Handlebars from 'handlebars';
|
|
10
|
-
|
|
11
1
|
var __defProp = Object.defineProperty;
|
|
12
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
3
|
|
|
4
|
+
// packages/cli/src/repl.ts
|
|
5
|
+
import { createInterface } from "readline/promises";
|
|
6
|
+
import { stdin, stdout } from "process";
|
|
7
|
+
import pc2 from "picocolors";
|
|
8
|
+
|
|
14
9
|
// packages/cli/src/banner.ts
|
|
15
10
|
var BANNER_LINE1 = "\u{1D5E9}\u{1D5E2}\u{1D5D5}\u{1D5E6} \u{1D5D6}\u{1D5DF}\u{1D5DC} \u{1D603}\u{1D7ED}.\u{1D7EC}";
|
|
16
11
|
var BANNER_TAGLINE = "Signals First \xB7 Zero Re-renders \xB7 Ultra Lightweight";
|
|
@@ -31,34 +26,48 @@ function showBanner() {
|
|
|
31
26
|
console.log(`${INDENT}${BANNER_LINE1}`);
|
|
32
27
|
}
|
|
33
28
|
__name(showBanner, "showBanner");
|
|
29
|
+
|
|
30
|
+
// packages/cli/src/commands/init.ts
|
|
31
|
+
import { resolve as resolve3 } from "path";
|
|
32
|
+
import { execSync as execSync2 } from "child_process";
|
|
33
|
+
import * as p from "@clack/prompts";
|
|
34
|
+
|
|
35
|
+
// packages/cli/src/utils/logger.ts
|
|
36
|
+
import pc from "picocolors";
|
|
34
37
|
function timestamp() {
|
|
35
|
-
return
|
|
38
|
+
return pc.dim(`[${(/* @__PURE__ */ new Date()).toLocaleTimeString()}]`);
|
|
36
39
|
}
|
|
37
40
|
__name(timestamp, "timestamp");
|
|
38
41
|
function info(msg) {
|
|
39
|
-
console.log(`${timestamp()} ${
|
|
42
|
+
console.log(`${timestamp()} ${pc.cyan("\u2139")} ${msg}`);
|
|
40
43
|
}
|
|
41
44
|
__name(info, "info");
|
|
42
45
|
function success(msg) {
|
|
43
|
-
console.log(`${timestamp()} ${
|
|
46
|
+
console.log(`${timestamp()} ${pc.green("\u2714")} ${msg}`);
|
|
44
47
|
}
|
|
45
48
|
__name(success, "success");
|
|
46
49
|
function warn(msg) {
|
|
47
|
-
console.log(`${timestamp()} ${
|
|
50
|
+
console.log(`${timestamp()} ${pc.yellow("\u26A0")} ${msg}`);
|
|
48
51
|
}
|
|
49
52
|
__name(warn, "warn");
|
|
50
53
|
function error(msg) {
|
|
51
|
-
console.error(`${timestamp()} ${
|
|
54
|
+
console.error(`${timestamp()} ${pc.red("\u2716")} ${msg}`);
|
|
52
55
|
}
|
|
53
56
|
__name(error, "error");
|
|
54
57
|
function step(msg) {
|
|
55
58
|
console.log(`
|
|
56
|
-
${
|
|
59
|
+
${pc.bold(pc.cyan(msg))}`);
|
|
57
60
|
}
|
|
58
61
|
__name(step, "step");
|
|
59
62
|
var logger = { info, success, warn, error, step };
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
|
|
64
|
+
// packages/cli/src/utils/file.ts
|
|
65
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync } from "fs";
|
|
66
|
+
import { resolve, dirname } from "path";
|
|
67
|
+
import { fileURLToPath } from "url";
|
|
68
|
+
import Handlebars from "handlebars";
|
|
69
|
+
var __dirname = dirname(fileURLToPath(import.meta.url));
|
|
70
|
+
var TEMPLATES_ROOT = resolve(__dirname, "..", "templates");
|
|
62
71
|
function getTemplatesDir() {
|
|
63
72
|
return TEMPLATES_ROOT;
|
|
64
73
|
}
|
|
@@ -82,8 +91,8 @@ function ensureDir(dir) {
|
|
|
82
91
|
}
|
|
83
92
|
__name(ensureDir, "ensureDir");
|
|
84
93
|
async function copyDirRecursive(srcDir, destDir, context) {
|
|
85
|
-
const { readdirSync } = await import(
|
|
86
|
-
const { join } = await import(
|
|
94
|
+
const { readdirSync } = await import("fs");
|
|
95
|
+
const { join } = await import("path");
|
|
87
96
|
const entries = readdirSync(srcDir, { withFileTypes: true });
|
|
88
97
|
for (const entry of entries) {
|
|
89
98
|
const srcPath = join(srcDir, entry.name);
|
|
@@ -109,11 +118,16 @@ async function scaffoldProject(targetDir, context) {
|
|
|
109
118
|
await copyDirRecursive(templateDir, targetDir, context);
|
|
110
119
|
}
|
|
111
120
|
__name(scaffoldProject, "scaffoldProject");
|
|
121
|
+
|
|
122
|
+
// packages/cli/src/utils/pm.ts
|
|
123
|
+
import { existsSync as existsSync2 } from "fs";
|
|
124
|
+
import { resolve as resolve2 } from "path";
|
|
125
|
+
import { execSync } from "child_process";
|
|
112
126
|
function detectPackageManager(targetDir) {
|
|
113
127
|
if (targetDir) {
|
|
114
|
-
if (
|
|
115
|
-
if (
|
|
116
|
-
if (
|
|
128
|
+
if (existsSync2(resolve2(targetDir, "pnpm-lock.yaml"))) return "pnpm";
|
|
129
|
+
if (existsSync2(resolve2(targetDir, "yarn.lock"))) return "yarn";
|
|
130
|
+
if (existsSync2(resolve2(targetDir, "package-lock.json"))) return "npm";
|
|
117
131
|
}
|
|
118
132
|
const userAgent = process.env.npm_config_user_agent || "";
|
|
119
133
|
if (userAgent.startsWith("pnpm")) return "pnpm";
|
|
@@ -145,7 +159,7 @@ async function initCommand(options) {
|
|
|
145
159
|
p.cancel("Cancelled");
|
|
146
160
|
return;
|
|
147
161
|
}
|
|
148
|
-
const targetDir = options.targetDir ||
|
|
162
|
+
const targetDir = options.targetDir || resolve3(process.cwd(), projectName);
|
|
149
163
|
const packageManager = options.packageManager || await p.select({
|
|
150
164
|
message: "Package manager:",
|
|
151
165
|
options: [
|
|
@@ -188,7 +202,7 @@ async function initCommand(options) {
|
|
|
188
202
|
if (initGit) {
|
|
189
203
|
logger.step("Initializing git repository...");
|
|
190
204
|
try {
|
|
191
|
-
|
|
205
|
+
execSync2("git init", { cwd: targetDir, stdio: "ignore" });
|
|
192
206
|
logger.success("Git repository initialized");
|
|
193
207
|
} catch {
|
|
194
208
|
logger.warn("Git not found, skipping git init");
|
|
@@ -200,56 +214,60 @@ async function initCommand(options) {
|
|
|
200
214
|
`);
|
|
201
215
|
}
|
|
202
216
|
__name(initCommand, "initCommand");
|
|
217
|
+
|
|
218
|
+
// packages/cli/src/commands/generate.ts
|
|
219
|
+
import { resolve as resolve4 } from "path";
|
|
220
|
+
import * as p2 from "@clack/prompts";
|
|
203
221
|
async function generateCommand(options) {
|
|
204
|
-
const type = options.type || await
|
|
222
|
+
const type = options.type || await p2.select({
|
|
205
223
|
message: "What to generate?",
|
|
206
224
|
options: [
|
|
207
225
|
{ value: "component", label: "Component" },
|
|
208
226
|
{ value: "page", label: "Page" }
|
|
209
227
|
]
|
|
210
228
|
});
|
|
211
|
-
if (
|
|
212
|
-
|
|
229
|
+
if (p2.isCancel(type)) {
|
|
230
|
+
p2.cancel("Cancelled");
|
|
213
231
|
return;
|
|
214
232
|
}
|
|
215
|
-
const name = options.name || await
|
|
233
|
+
const name = options.name || await p2.text({
|
|
216
234
|
message: "Name:",
|
|
217
235
|
placeholder: type === "component" ? "Button" : "AboutPage",
|
|
218
236
|
validate: /* @__PURE__ */ __name((v) => !v ? "Name is required" : void 0, "validate")
|
|
219
237
|
});
|
|
220
|
-
if (
|
|
221
|
-
|
|
238
|
+
if (p2.isCancel(name)) {
|
|
239
|
+
p2.cancel("Cancelled");
|
|
222
240
|
return;
|
|
223
241
|
}
|
|
224
242
|
const templatesDir = getTemplatesDir();
|
|
225
243
|
if (type === "component") {
|
|
226
|
-
const targetDir = options.targetDir ||
|
|
244
|
+
const targetDir = options.targetDir || resolve4(process.cwd(), "src/components");
|
|
227
245
|
ensureDir(targetDir);
|
|
228
246
|
const context = {
|
|
229
247
|
name: toPascalCase(name),
|
|
230
248
|
kebabName: toKebabCase(name)
|
|
231
249
|
};
|
|
232
250
|
const content = renderTemplate(
|
|
233
|
-
|
|
251
|
+
resolve4(templatesDir, "component.hbs"),
|
|
234
252
|
context
|
|
235
253
|
);
|
|
236
254
|
const filename = `${context.name}.tsx`;
|
|
237
255
|
writeFile(targetDir, filename, content);
|
|
238
|
-
logger.success(`Created ${type} at ${
|
|
256
|
+
logger.success(`Created ${type} at ${resolve4(targetDir, filename)}`);
|
|
239
257
|
} else {
|
|
240
|
-
const targetDir = options.targetDir ||
|
|
258
|
+
const targetDir = options.targetDir || resolve4(process.cwd(), "src/pages");
|
|
241
259
|
ensureDir(targetDir);
|
|
242
260
|
const context = {
|
|
243
261
|
name: toPascalCase(name),
|
|
244
262
|
path: `/${toKebabCase(name)}`
|
|
245
263
|
};
|
|
246
264
|
const content = renderTemplate(
|
|
247
|
-
|
|
265
|
+
resolve4(templatesDir, "page.hbs"),
|
|
248
266
|
context
|
|
249
267
|
);
|
|
250
268
|
const filename = `${context.name}.tsx`;
|
|
251
269
|
writeFile(targetDir, filename, content);
|
|
252
|
-
logger.success(`Created ${type} at ${
|
|
270
|
+
logger.success(`Created ${type} at ${resolve4(targetDir, filename)}`);
|
|
253
271
|
}
|
|
254
272
|
}
|
|
255
273
|
__name(generateCommand, "generateCommand");
|
|
@@ -261,22 +279,25 @@ function toKebabCase(str) {
|
|
|
261
279
|
return str.replace(/([A-Z])/g, "-$1").toLowerCase().replace(/^-/, "").replace(/[^a-z0-9-]/g, "-").replace(/--+/g, "-").replace(/^-|-$/g, "");
|
|
262
280
|
}
|
|
263
281
|
__name(toKebabCase, "toKebabCase");
|
|
282
|
+
|
|
283
|
+
// packages/cli/src/commands/add.ts
|
|
284
|
+
import * as p3 from "@clack/prompts";
|
|
264
285
|
async function addCommand(options) {
|
|
265
|
-
const pkg = options.package || await
|
|
286
|
+
const pkg = options.package || await p3.text({
|
|
266
287
|
message: "Package to add:",
|
|
267
288
|
placeholder: "@vobs/ui",
|
|
268
289
|
validate: /* @__PURE__ */ __name((v) => !v ? "Package name is required" : void 0, "validate")
|
|
269
290
|
});
|
|
270
|
-
if (
|
|
271
|
-
|
|
291
|
+
if (p3.isCancel(pkg)) {
|
|
292
|
+
p3.cancel("Cancelled");
|
|
272
293
|
return;
|
|
273
294
|
}
|
|
274
|
-
const isDev = options.dev ?? await
|
|
295
|
+
const isDev = options.dev ?? await p3.confirm({
|
|
275
296
|
message: "Save as dev dependency?",
|
|
276
297
|
initialValue: false
|
|
277
298
|
});
|
|
278
|
-
if (
|
|
279
|
-
|
|
299
|
+
if (p3.isCancel(isDev)) {
|
|
300
|
+
p3.cancel("Cancelled");
|
|
280
301
|
return;
|
|
281
302
|
}
|
|
282
303
|
const pm = detectPackageManager(process.cwd());
|
|
@@ -403,7 +424,7 @@ function splitArgs(line) {
|
|
|
403
424
|
return out;
|
|
404
425
|
}
|
|
405
426
|
__name(splitArgs, "splitArgs");
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
427
|
+
export {
|
|
428
|
+
startRepl
|
|
429
|
+
};
|
|
409
430
|
//# sourceMappingURL=repl.js.map
|
package/dist/repl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/banner.ts","../src/utils/logger.ts","../src/utils/file.ts","../src/utils/pm.ts","../src/commands/init.ts","../src/commands/generate.ts","../src/commands/add.ts","../src/repl.ts"],"names":["pc","__dirname","existsSync","resolve","execSync","p2","p3"],"mappings":"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","file":"repl.js","sourcesContent":["/**\n * VOBS CLI Banner โ Mathematical Bold Sans-Serif\n * ๐ฉ๐ข๐๐ฆ ๐๐๐ ๐๐ญ.๐ฌ\n * Signals First ยท Zero Re-renders ยท Ultra Lightweight\n *\n * The banner is left-aligned with a fixed indent rather than horizontally\n * centered. Centering depends on the terminal column width and per-glyph\n * render width, neither of which is reliably knowable, so it drifts as the\n * window resizes. Fixed indent is stable across any terminal size.\n */\n\nconst BANNER_LINE1 = '๐ฉ๐ข๐๐ฆ ๐๐๐ ๐๐ญ.๐ฌ'\nconst BANNER_TAGLINE = 'Signals First ยท Zero Re-renders ยท Ultra Lightweight'\n\n/** Fixed left indent applied to every banner line (2 spaces). */\nconst INDENT = ' '\nconst DIM = '\\x1b[2m'\nconst RESET = '\\x1b[0m'\n\n/** Show full banner (used for logo command, --help) */\nexport function showLogo(): void {\n console.log()\n console.log()\n console.log(`${INDENT}${BANNER_LINE1}`)\n console.log()\n console.log(`${INDENT}${DIM}${BANNER_TAGLINE}${RESET}`)\n console.log()\n console.log()\n}\n\n/** Show single-line version banner (used for --version) */\nexport function showBanner(): void {\n console.log(`${INDENT}${BANNER_LINE1}`)\n}\n\n/** Show the dev server start banner */\nexport function showDevBanner(): void {\n console.log()\n console.log(`${INDENT}${BANNER_LINE1}`)\n console.log()\n}","import pc from 'picocolors'\n\nfunction timestamp(): string {\n return pc.dim(`[${new Date().toLocaleTimeString()}]`)\n}\n\nexport function info(msg: string): void {\n console.log(`${timestamp()} ${pc.cyan('โน')} ${msg}`)\n}\n\nexport function success(msg: string): void {\n console.log(`${timestamp()} ${pc.green('โ')} ${msg}`)\n}\n\nexport function warn(msg: string): void {\n console.log(`${timestamp()} ${pc.yellow('โ ')} ${msg}`)\n}\n\nexport function error(msg: string): void {\n console.error(`${timestamp()} ${pc.red('โ')} ${msg}`)\n}\n\nexport function step(msg: string): void {\n console.log(`\\n ${pc.bold(pc.cyan(msg))}`)\n}\n\nexport const logger = { info, success, warn, error, step }","import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs'\nimport { resolve, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport Handlebars from 'handlebars'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst TEMPLATES_ROOT = resolve(__dirname, '..', 'templates')\n\n/** Get the absolute path to the templates directory */\nexport function getTemplatesDir(): string {\n return TEMPLATES_ROOT\n}\n\n/** Read a template file and compile it with Handlebars */\nexport function renderTemplate(\n templatePath: string,\n context: Record<string, unknown>\n): string {\n const source = readFileSync(templatePath, 'utf-8')\n const template = Handlebars.compile(source)\n return template(context)\n}\n\n/** Write a file, creating parent directories if needed */\nexport function writeFile(dir: string, filename: string, content: string): void {\n const filePath = resolve(dir, filename)\n mkdirSync(dirname(filePath), { recursive: true })\n writeFileSync(filePath, content, 'utf-8')\n}\n\n/** Ensure a directory exists */\nexport function ensureDir(dir: string): void {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n}\n\n/** Check if a path exists */\nexport function pathExists(path: string): boolean {\n return existsSync(path)\n}\n\n/** Copy a template directory recursively, rendering each .hbs file */\nasync function copyDirRecursive(srcDir: string, destDir: string, context: Record<string, unknown>): Promise<void> {\n const { readdirSync } = await import('node:fs')\n const { join } = await import('node:path')\n\n const entries = readdirSync(srcDir, { withFileTypes: true })\n\n for (const entry of entries) {\n const srcPath = join(srcDir, entry.name)\n const isHbs = entry.name.endsWith('.hbs')\n const destName = isHbs ? entry.name.slice(0, -4) : entry.name\n const destPath = join(destDir, destName)\n\n if (entry.isDirectory()) {\n ensureDir(destPath)\n await copyDirRecursive(srcPath, destPath, context)\n } else if (isHbs) {\n const content = renderTemplate(srcPath, context)\n writeFile(destDir, destName, content)\n } else {\n const content = readFileSync(srcPath, 'utf-8')\n writeFile(destDir, destName, content)\n }\n }\n}\n\n/** Scaffold a project from the basic template */\nexport async function scaffoldProject(\n targetDir: string,\n context: Record<string, unknown>\n): Promise<void> {\n const templateDir = resolve(TEMPLATES_ROOT, 'basic')\n ensureDir(targetDir)\n await copyDirRecursive(templateDir, targetDir, context)\n}","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { execSync } from 'node:child_process'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn'\n\n/** Detect the package manager to use */\nexport function detectPackageManager(targetDir?: string): PackageManager {\n // Check if a specific package manager is locked\n if (targetDir) {\n if (existsSync(resolve(targetDir, 'pnpm-lock.yaml'))) return 'pnpm'\n if (existsSync(resolve(targetDir, 'yarn.lock'))) return 'yarn'\n if (existsSync(resolve(targetDir, 'package-lock.json'))) return 'npm'\n }\n\n // Check for global preference\n const userAgent = process.env.npm_config_user_agent || ''\n if (userAgent.startsWith('pnpm')) return 'pnpm'\n if (userAgent.startsWith('yarn')) return 'yarn'\n if (userAgent.startsWith('npm')) return 'npm'\n\n // Default to pnpm\n return 'pnpm'\n}\n\n/** Install dependencies in a directory */\nexport function installDependencies(targetDir: string, pm: PackageManager): void {\n const cmd = pm === 'yarn' ? 'yarn' : `${pm} install`\n execSync(cmd, { cwd: targetDir, stdio: 'inherit' })\n}\n\n/** Add a package as a dependency */\nexport function addPackage(targetDir: string, pm: PackageManager, pkg: string, dev: boolean): void {\n const installFlag = dev ? '-D' : ''\n const cmd = pm === 'npm'\n ? `npm install ${installFlag} ${pkg}`\n : pm === 'yarn'\n ? `yarn add ${installFlag} ${pkg}`\n : `pnpm add ${installFlag} ${pkg}`\n\n execSync(cmd, { cwd: targetDir, stdio: 'inherit' })\n}","import { resolve } from 'node:path'\nimport { execSync } from 'node:child_process'\nimport * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { scaffoldProject } from '../utils/file.js'\nimport { installDependencies } from '../utils/pm.js'\nimport type { InitOptions } from '../types.js'\n\nexport async function initCommand(options: Partial<InitOptions>): Promise<void> {\n const projectName = options.name || (await p.text({\n message: 'Project name:',\n placeholder: 'my-vobs-app',\n validate: (v) => !v ? 'Project name is required' : undefined\n })) as string\n\n if (p.isCancel(projectName)) {\n p.cancel('Cancelled')\n return\n }\n\n const targetDir = options.targetDir || resolve(process.cwd(), projectName)\n\n const packageManager = options.packageManager || (await p.select({\n message: 'Package manager:',\n options: [\n { value: 'pnpm', label: 'pnpm' },\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' }\n ]\n })) as 'pnpm' | 'npm' | 'yarn'\n\n if (p.isCancel(packageManager)) {\n p.cancel('Cancelled')\n return\n }\n\n const useTypescript = options.typescript ?? (await p.confirm({\n message: 'Use TypeScript?',\n initialValue: true\n })) as boolean\n\n if (p.isCancel(useTypescript)) {\n p.cancel('Cancelled')\n return\n }\n\n const initGit = options.git ?? (await p.confirm({\n message: 'Initialize a git repository?',\n initialValue: true\n })) as boolean\n\n if (p.isCancel(initGit)) {\n p.cancel('Cancelled')\n return\n }\n\n logger.step(`Creating project ${projectName}...`)\n\n await scaffoldProject(targetDir, {\n name: projectName,\n packageName: projectName.toLowerCase().replace(/\\s+/g, '-'),\n typescript: useTypescript,\n vobsVersion: '1.0.0'\n })\n\n logger.success('Project scaffolded')\n\n logger.step('Installing dependencies...')\n installDependencies(targetDir, packageManager)\n logger.success('Dependencies installed')\n\n if (initGit) {\n logger.step('Initializing git repository...')\n try {\n execSync('git init', { cwd: targetDir, stdio: 'ignore' })\n logger.success('Git repository initialized')\n } catch {\n logger.warn('Git not found, skipping git init')\n }\n }\n\n logger.step('Done!')\n console.log(`\\n ${packageManager === 'pnpm' ? 'pnpm' : packageManager === 'yarn' ? 'yarn' : 'npm run'} dev\\n`)\n}","import { resolve } from 'node:path'\nimport * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { renderTemplate, writeFile, getTemplatesDir, ensureDir } from '../utils/file.js'\nimport type { GenerateOptions, ComponentTemplateContext, PageTemplateContext } from '../types.js'\n\nexport async function generateCommand(options: Partial<GenerateOptions>): Promise<void> {\n const type = options.type || (await p.select({\n message: 'What to generate?',\n options: [\n { value: 'component', label: 'Component' },\n { value: 'page', label: 'Page' }\n ]\n })) as 'component' | 'page'\n\n if (p.isCancel(type)) {\n p.cancel('Cancelled')\n return\n }\n\n const name = options.name || (await p.text({\n message: 'Name:',\n placeholder: type === 'component' ? 'Button' : 'AboutPage',\n validate: (v) => !v ? 'Name is required' : undefined\n })) as string\n\n if (p.isCancel(name)) {\n p.cancel('Cancelled')\n return\n }\n\n const templatesDir = getTemplatesDir()\n\n if (type === 'component') {\n const targetDir = options.targetDir || resolve(process.cwd(), 'src/components')\n ensureDir(targetDir)\n\n const context: ComponentTemplateContext = {\n name: toPascalCase(name),\n kebabName: toKebabCase(name)\n }\n\n const content = renderTemplate(\n resolve(templatesDir, 'component.hbs'),\n context as unknown as Record<string, unknown>\n )\n\n const filename = `${context.name}.tsx`\n writeFile(targetDir, filename, content)\n logger.success(`Created ${type} at ${resolve(targetDir, filename)}`)\n } else {\n const targetDir = options.targetDir || resolve(process.cwd(), 'src/pages')\n ensureDir(targetDir)\n\n const context: PageTemplateContext = {\n name: toPascalCase(name),\n path: `/${toKebabCase(name)}`\n }\n\n const content = renderTemplate(\n resolve(templatesDir, 'page.hbs'),\n context as unknown as Record<string, unknown>\n )\n\n const filename = `${context.name}.tsx`\n writeFile(targetDir, filename, content)\n logger.success(`Created ${type} at ${resolve(targetDir, filename)}`)\n }\n}\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[^a-zA-Z0-9]/g, ' ')\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('')\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/--+/g, '-')\n .replace(/^-|-$/g, '')\n}","import * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { detectPackageManager, addPackage } from '../utils/pm.js'\nimport type { AddOptions } from '../types.js'\n\nexport async function addCommand(options: Partial<AddOptions>): Promise<void> {\n const pkg = options.package || (await p.text({\n message: 'Package to add:',\n placeholder: '@vobs/ui',\n validate: (v) => !v ? 'Package name is required' : undefined\n })) as string\n\n if (p.isCancel(pkg)) {\n p.cancel('Cancelled')\n return\n }\n\n const isDev = options.dev ?? (await p.confirm({\n message: 'Save as dev dependency?',\n initialValue: false\n })) as boolean\n\n if (p.isCancel(isDev)) {\n p.cancel('Cancelled')\n return\n }\n\n const pm = detectPackageManager(process.cwd())\n\n logger.step(`Installing ${pkg}...`)\n addPackage(process.cwd(), pm, pkg, isDev)\n\n logger.success(`Installed ${pkg}`)\n console.log(`\\n Import it in your code:\\n`)\n console.log(` import { ... } from '${pkg}'`)\n console.log()\n}","import { createInterface } from 'node:readline/promises'\nimport { stdin, stdout } from 'node:process'\nimport pc from 'picocolors'\nimport { showLogo, showBanner } from './banner.js'\nimport { initCommand } from './commands/init.js'\nimport { generateCommand } from './commands/generate.js'\nimport { addCommand } from './commands/add.js'\n\n/**\n * Interactive REPL shell. Runs `vobs` with no arguments and stays in CLI\n * mode accepting repeated commands until the user types `exit` / `quit`\n * or presses Ctrl+C / Ctrl+D.\n */\nexport async function startRepl(): Promise<void> {\n showLogo()\n\n const rl = createInterface({\n input: stdin,\n output: stdout,\n prompt: ` ${pc.magenta('โฏ')} `,\n terminal: true\n })\n\n rl.prompt()\n\n for await (const rawLine of rl) {\n const line = rawLine.trim()\n\n if (!line) {\n rl.prompt()\n continue\n }\n\n // Split into args, honoring simple double quotes\n const args = splitArgs(line)\n\n try {\n await dispatch(args)\n } catch (err) {\n console.error(` ${pc.red('โ')} ${err instanceof Error ? err.message : String(err)}`)\n }\n\n rl.prompt()\n }\n}\n\ntype Command = (args: string[]) => Promise<void>\n\n/** Internal command table for the REPL */\nconst TABLE: Record<string, { cmd: Command; help: string }> = {\n help: {\n cmd: async () => {\n console.log(` ${pc.bold('Available commands:')}`)\n console.log(` ${pc.dim('exit|quit')} Leave the interactive CLI`)\n console.log(` ${pc.dim('clear')} Clear the screen`)\n console.log(` ${pc.dim('logo')} Re-print the banner`)\n console.log(` ${pc.dim('version')} Show version`)\n console.log(` ${pc.dim('init <name>')} Create a new vobs project`)\n console.log(` ${pc.dim('generate <name>')} Generate a component/page`)\n console.log(` ${pc.dim('add <package>')} Add a package`)\n console.log(` ${pc.dim('dev|build')} Use \\`vobs dev\\` / \\`vobs build\\` in a terminal`)\n },\n help: ''\n },\n logo: { cmd: async () => showLogo(), help: '' },\n version: { cmd: async () => showBanner(), help: '' },\n clear: {\n cmd: async () => {\n process.stdout.write('\\x1Bc')\n },\n help: ''\n },\n exit: { cmd: async () => process.exit(0), help: '' },\n quit: { cmd: async () => process.exit(0), help: '' },\n init: {\n cmd: async (args) => {\n await initCommand({\n name: args[0],\n targetDir: undefined,\n packageManager: undefined,\n typescript: true,\n git: true\n })\n },\n help: ''\n },\n generate: {\n cmd: async (args) => {\n await generateCommand({\n name: args[0],\n type: undefined,\n targetDir: undefined\n })\n },\n help: ''\n },\n g: {\n cmd: async (args) => {\n await generateCommand({\n name: args[0],\n type: undefined,\n targetDir: undefined\n })\n },\n help: ''\n },\n add: {\n cmd: async (args) => {\n await addCommand({ package: args[0], dev: args.includes('-D') || args.includes('--dev') })\n },\n help: ''\n }\n}\n\n/** Dispatch a parsed command line to the internal table */\nasync function dispatch(args: string[]): Promise<void> {\n const name = args[0]\n const rest = args.slice(1)\n\n if (!name) return\n\n const entry = TABLE[name]\n if (entry) {\n await entry.cmd(rest)\n return\n }\n\n console.log(` ${pc.yellow('โ ')} Unknown command: ${pc.bold(String(name))}. Type ${pc.cyan('help')} to see options.`)\n}\n\n/** Minimal tokenizer supporting double-quoted arguments */\nfunction splitArgs(line: string): string[] {\n const out: string[] = []\n const re = /[^\\s\"']+|\"([^\"]*)\"|'([^']*)'/g\n let m: RegExpExecArray | null\n while ((m = re.exec(line)) !== null) {\n out.push(m[1] ?? m[2] ?? m[0])\n }\n return out\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/repl.ts","../src/banner.ts","../src/commands/init.ts","../src/utils/logger.ts","../src/utils/file.ts","../src/utils/pm.ts","../src/commands/generate.ts","../src/commands/add.ts"],"sourcesContent":["import { createInterface } from 'node:readline/promises'\nimport { stdin, stdout } from 'node:process'\nimport pc from 'picocolors'\nimport { showLogo, showBanner } from './banner.js'\nimport { initCommand } from './commands/init.js'\nimport { generateCommand } from './commands/generate.js'\nimport { addCommand } from './commands/add.js'\n\n/**\n * Interactive REPL shell. Runs `vobs` with no arguments and stays in CLI\n * mode accepting repeated commands until the user types `exit` / `quit`\n * or presses Ctrl+C / Ctrl+D.\n */\nexport async function startRepl(): Promise<void> {\n showLogo()\n\n const rl = createInterface({\n input: stdin,\n output: stdout,\n prompt: ` ${pc.magenta('โฏ')} `,\n terminal: true\n })\n\n rl.prompt()\n\n for await (const rawLine of rl) {\n const line = rawLine.trim()\n\n if (!line) {\n rl.prompt()\n continue\n }\n\n // Split into args, honoring simple double quotes\n const args = splitArgs(line)\n\n try {\n await dispatch(args)\n } catch (err) {\n console.error(` ${pc.red('โ')} ${err instanceof Error ? err.message : String(err)}`)\n }\n\n rl.prompt()\n }\n}\n\ntype Command = (args: string[]) => Promise<void>\n\n/** Internal command table for the REPL */\nconst TABLE: Record<string, { cmd: Command; help: string }> = {\n help: {\n cmd: async () => {\n console.log(` ${pc.bold('Available commands:')}`)\n console.log(` ${pc.dim('exit|quit')} Leave the interactive CLI`)\n console.log(` ${pc.dim('clear')} Clear the screen`)\n console.log(` ${pc.dim('logo')} Re-print the banner`)\n console.log(` ${pc.dim('version')} Show version`)\n console.log(` ${pc.dim('init <name>')} Create a new vobs project`)\n console.log(` ${pc.dim('generate <name>')} Generate a component/page`)\n console.log(` ${pc.dim('add <package>')} Add a package`)\n console.log(` ${pc.dim('dev|build')} Use \\`vobs dev\\` / \\`vobs build\\` in a terminal`)\n },\n help: ''\n },\n logo: { cmd: async () => showLogo(), help: '' },\n version: { cmd: async () => showBanner(), help: '' },\n clear: {\n cmd: async () => {\n process.stdout.write('\\x1Bc')\n },\n help: ''\n },\n exit: { cmd: async () => process.exit(0), help: '' },\n quit: { cmd: async () => process.exit(0), help: '' },\n init: {\n cmd: async (args) => {\n await initCommand({\n name: args[0],\n targetDir: undefined,\n packageManager: undefined,\n typescript: true,\n git: true\n })\n },\n help: ''\n },\n generate: {\n cmd: async (args) => {\n await generateCommand({\n name: args[0],\n type: undefined,\n targetDir: undefined\n })\n },\n help: ''\n },\n g: {\n cmd: async (args) => {\n await generateCommand({\n name: args[0],\n type: undefined,\n targetDir: undefined\n })\n },\n help: ''\n },\n add: {\n cmd: async (args) => {\n await addCommand({ package: args[0], dev: args.includes('-D') || args.includes('--dev') })\n },\n help: ''\n }\n}\n\n/** Dispatch a parsed command line to the internal table */\nasync function dispatch(args: string[]): Promise<void> {\n const name = args[0]\n const rest = args.slice(1)\n\n if (!name) return\n\n const entry = TABLE[name]\n if (entry) {\n await entry.cmd(rest)\n return\n }\n\n console.log(` ${pc.yellow('โ ')} Unknown command: ${pc.bold(String(name))}. Type ${pc.cyan('help')} to see options.`)\n}\n\n/** Minimal tokenizer supporting double-quoted arguments */\nfunction splitArgs(line: string): string[] {\n const out: string[] = []\n const re = /[^\\s\"']+|\"([^\"]*)\"|'([^']*)'/g\n let m: RegExpExecArray | null\n while ((m = re.exec(line)) !== null) {\n out.push(m[1] ?? m[2] ?? m[0])\n }\n return out\n}","/**\n * VOBS CLI Banner โ Mathematical Bold Sans-Serif\n * ๐ฉ๐ข๐๐ฆ ๐๐๐ ๐๐ญ.๐ฌ\n * Signals First ยท Zero Re-renders ยท Ultra Lightweight\n *\n * The banner is left-aligned with a fixed indent rather than horizontally\n * centered. Centering depends on the terminal column width and per-glyph\n * render width, neither of which is reliably knowable, so it drifts as the\n * window resizes. Fixed indent is stable across any terminal size.\n */\n\nconst BANNER_LINE1 = '๐ฉ๐ข๐๐ฆ ๐๐๐ ๐๐ญ.๐ฌ'\nconst BANNER_TAGLINE = 'Signals First ยท Zero Re-renders ยท Ultra Lightweight'\n\n/** Fixed left indent applied to every banner line (2 spaces). */\nconst INDENT = ' '\nconst DIM = '\\x1b[2m'\nconst RESET = '\\x1b[0m'\n\n/** Show full banner (used for logo command, --help) */\nexport function showLogo(): void {\n console.log()\n console.log()\n console.log(`${INDENT}${BANNER_LINE1}`)\n console.log()\n console.log(`${INDENT}${DIM}${BANNER_TAGLINE}${RESET}`)\n console.log()\n console.log()\n}\n\n/** Show single-line version banner (used for --version) */\nexport function showBanner(): void {\n console.log(`${INDENT}${BANNER_LINE1}`)\n}\n\n/** Show the dev server start banner */\nexport function showDevBanner(): void {\n console.log()\n console.log(`${INDENT}${BANNER_LINE1}`)\n console.log()\n}","import { resolve } from 'node:path'\nimport { execSync } from 'node:child_process'\nimport * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { scaffoldProject } from '../utils/file.js'\nimport { installDependencies } from '../utils/pm.js'\nimport type { InitOptions } from '../types.js'\n\nexport async function initCommand(options: Partial<InitOptions>): Promise<void> {\n const projectName = options.name || (await p.text({\n message: 'Project name:',\n placeholder: 'my-vobs-app',\n validate: (v) => !v ? 'Project name is required' : undefined\n })) as string\n\n if (p.isCancel(projectName)) {\n p.cancel('Cancelled')\n return\n }\n\n const targetDir = options.targetDir || resolve(process.cwd(), projectName)\n\n const packageManager = options.packageManager || (await p.select({\n message: 'Package manager:',\n options: [\n { value: 'pnpm', label: 'pnpm' },\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' }\n ]\n })) as 'pnpm' | 'npm' | 'yarn'\n\n if (p.isCancel(packageManager)) {\n p.cancel('Cancelled')\n return\n }\n\n const useTypescript = options.typescript ?? (await p.confirm({\n message: 'Use TypeScript?',\n initialValue: true\n })) as boolean\n\n if (p.isCancel(useTypescript)) {\n p.cancel('Cancelled')\n return\n }\n\n const initGit = options.git ?? (await p.confirm({\n message: 'Initialize a git repository?',\n initialValue: true\n })) as boolean\n\n if (p.isCancel(initGit)) {\n p.cancel('Cancelled')\n return\n }\n\n logger.step(`Creating project ${projectName}...`)\n\n await scaffoldProject(targetDir, {\n name: projectName,\n packageName: projectName.toLowerCase().replace(/\\s+/g, '-'),\n typescript: useTypescript,\n vobsVersion: '1.0.0'\n })\n\n logger.success('Project scaffolded')\n\n logger.step('Installing dependencies...')\n installDependencies(targetDir, packageManager)\n logger.success('Dependencies installed')\n\n if (initGit) {\n logger.step('Initializing git repository...')\n try {\n execSync('git init', { cwd: targetDir, stdio: 'ignore' })\n logger.success('Git repository initialized')\n } catch {\n logger.warn('Git not found, skipping git init')\n }\n }\n\n logger.step('Done!')\n console.log(`\\n ${packageManager === 'pnpm' ? 'pnpm' : packageManager === 'yarn' ? 'yarn' : 'npm run'} dev\\n`)\n}","import pc from 'picocolors'\n\nfunction timestamp(): string {\n return pc.dim(`[${new Date().toLocaleTimeString()}]`)\n}\n\nexport function info(msg: string): void {\n console.log(`${timestamp()} ${pc.cyan('โน')} ${msg}`)\n}\n\nexport function success(msg: string): void {\n console.log(`${timestamp()} ${pc.green('โ')} ${msg}`)\n}\n\nexport function warn(msg: string): void {\n console.log(`${timestamp()} ${pc.yellow('โ ')} ${msg}`)\n}\n\nexport function error(msg: string): void {\n console.error(`${timestamp()} ${pc.red('โ')} ${msg}`)\n}\n\nexport function step(msg: string): void {\n console.log(`\\n ${pc.bold(pc.cyan(msg))}`)\n}\n\nexport const logger = { info, success, warn, error, step }","import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs'\nimport { resolve, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport Handlebars from 'handlebars'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst TEMPLATES_ROOT = resolve(__dirname, '..', 'templates')\n\n/** Get the absolute path to the templates directory */\nexport function getTemplatesDir(): string {\n return TEMPLATES_ROOT\n}\n\n/** Read a template file and compile it with Handlebars */\nexport function renderTemplate(\n templatePath: string,\n context: Record<string, unknown>\n): string {\n const source = readFileSync(templatePath, 'utf-8')\n const template = Handlebars.compile(source)\n return template(context)\n}\n\n/** Write a file, creating parent directories if needed */\nexport function writeFile(dir: string, filename: string, content: string): void {\n const filePath = resolve(dir, filename)\n mkdirSync(dirname(filePath), { recursive: true })\n writeFileSync(filePath, content, 'utf-8')\n}\n\n/** Ensure a directory exists */\nexport function ensureDir(dir: string): void {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n}\n\n/** Check if a path exists */\nexport function pathExists(path: string): boolean {\n return existsSync(path)\n}\n\n/** Copy a template directory recursively, rendering each .hbs file */\nasync function copyDirRecursive(srcDir: string, destDir: string, context: Record<string, unknown>): Promise<void> {\n const { readdirSync } = await import('node:fs')\n const { join } = await import('node:path')\n\n const entries = readdirSync(srcDir, { withFileTypes: true })\n\n for (const entry of entries) {\n const srcPath = join(srcDir, entry.name)\n const isHbs = entry.name.endsWith('.hbs')\n const destName = isHbs ? entry.name.slice(0, -4) : entry.name\n const destPath = join(destDir, destName)\n\n if (entry.isDirectory()) {\n ensureDir(destPath)\n await copyDirRecursive(srcPath, destPath, context)\n } else if (isHbs) {\n const content = renderTemplate(srcPath, context)\n writeFile(destDir, destName, content)\n } else {\n const content = readFileSync(srcPath, 'utf-8')\n writeFile(destDir, destName, content)\n }\n }\n}\n\n/** Scaffold a project from the basic template */\nexport async function scaffoldProject(\n targetDir: string,\n context: Record<string, unknown>\n): Promise<void> {\n const templateDir = resolve(TEMPLATES_ROOT, 'basic')\n ensureDir(targetDir)\n await copyDirRecursive(templateDir, targetDir, context)\n}","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { execSync } from 'node:child_process'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn'\n\n/** Detect the package manager to use */\nexport function detectPackageManager(targetDir?: string): PackageManager {\n // Check if a specific package manager is locked\n if (targetDir) {\n if (existsSync(resolve(targetDir, 'pnpm-lock.yaml'))) return 'pnpm'\n if (existsSync(resolve(targetDir, 'yarn.lock'))) return 'yarn'\n if (existsSync(resolve(targetDir, 'package-lock.json'))) return 'npm'\n }\n\n // Check for global preference\n const userAgent = process.env.npm_config_user_agent || ''\n if (userAgent.startsWith('pnpm')) return 'pnpm'\n if (userAgent.startsWith('yarn')) return 'yarn'\n if (userAgent.startsWith('npm')) return 'npm'\n\n // Default to pnpm\n return 'pnpm'\n}\n\n/** Install dependencies in a directory */\nexport function installDependencies(targetDir: string, pm: PackageManager): void {\n const cmd = pm === 'yarn' ? 'yarn' : `${pm} install`\n execSync(cmd, { cwd: targetDir, stdio: 'inherit' })\n}\n\n/** Add a package as a dependency */\nexport function addPackage(targetDir: string, pm: PackageManager, pkg: string, dev: boolean): void {\n const installFlag = dev ? '-D' : ''\n const cmd = pm === 'npm'\n ? `npm install ${installFlag} ${pkg}`\n : pm === 'yarn'\n ? `yarn add ${installFlag} ${pkg}`\n : `pnpm add ${installFlag} ${pkg}`\n\n execSync(cmd, { cwd: targetDir, stdio: 'inherit' })\n}","import { resolve } from 'node:path'\nimport * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { renderTemplate, writeFile, getTemplatesDir, ensureDir } from '../utils/file.js'\nimport type { GenerateOptions, ComponentTemplateContext, PageTemplateContext } from '../types.js'\n\nexport async function generateCommand(options: Partial<GenerateOptions>): Promise<void> {\n const type = options.type || (await p.select({\n message: 'What to generate?',\n options: [\n { value: 'component', label: 'Component' },\n { value: 'page', label: 'Page' }\n ]\n })) as 'component' | 'page'\n\n if (p.isCancel(type)) {\n p.cancel('Cancelled')\n return\n }\n\n const name = options.name || (await p.text({\n message: 'Name:',\n placeholder: type === 'component' ? 'Button' : 'AboutPage',\n validate: (v) => !v ? 'Name is required' : undefined\n })) as string\n\n if (p.isCancel(name)) {\n p.cancel('Cancelled')\n return\n }\n\n const templatesDir = getTemplatesDir()\n\n if (type === 'component') {\n const targetDir = options.targetDir || resolve(process.cwd(), 'src/components')\n ensureDir(targetDir)\n\n const context: ComponentTemplateContext = {\n name: toPascalCase(name),\n kebabName: toKebabCase(name)\n }\n\n const content = renderTemplate(\n resolve(templatesDir, 'component.hbs'),\n context as unknown as Record<string, unknown>\n )\n\n const filename = `${context.name}.tsx`\n writeFile(targetDir, filename, content)\n logger.success(`Created ${type} at ${resolve(targetDir, filename)}`)\n } else {\n const targetDir = options.targetDir || resolve(process.cwd(), 'src/pages')\n ensureDir(targetDir)\n\n const context: PageTemplateContext = {\n name: toPascalCase(name),\n path: `/${toKebabCase(name)}`\n }\n\n const content = renderTemplate(\n resolve(templatesDir, 'page.hbs'),\n context as unknown as Record<string, unknown>\n )\n\n const filename = `${context.name}.tsx`\n writeFile(targetDir, filename, content)\n logger.success(`Created ${type} at ${resolve(targetDir, filename)}`)\n }\n}\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[^a-zA-Z0-9]/g, ' ')\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('')\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/--+/g, '-')\n .replace(/^-|-$/g, '')\n}","import * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { detectPackageManager, addPackage } from '../utils/pm.js'\nimport type { AddOptions } from '../types.js'\n\nexport async function addCommand(options: Partial<AddOptions>): Promise<void> {\n const pkg = options.package || (await p.text({\n message: 'Package to add:',\n placeholder: '@vobs/ui',\n validate: (v) => !v ? 'Package name is required' : undefined\n })) as string\n\n if (p.isCancel(pkg)) {\n p.cancel('Cancelled')\n return\n }\n\n const isDev = options.dev ?? (await p.confirm({\n message: 'Save as dev dependency?',\n initialValue: false\n })) as boolean\n\n if (p.isCancel(isDev)) {\n p.cancel('Cancelled')\n return\n }\n\n const pm = detectPackageManager(process.cwd())\n\n logger.step(`Installing ${pkg}...`)\n addPackage(process.cwd(), pm, pkg, isDev)\n\n logger.success(`Installed ${pkg}`)\n console.log(`\\n Import it in your code:\\n`)\n console.log(` import { ... } from '${pkg}'`)\n console.log()\n}"],"mappings":"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","names":["pc","resolve","execSync","existsSync","resolve","existsSync","resolve","resolve","execSync","resolve","p","resolve","p","pc"]}
|