@vobs/cli 1.2.0 → 1.2.2
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 +5 -1
package/dist/commands/index.cjs
CHANGED
|
@@ -1,94 +1,111 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Object.keys(e).forEach(function (k) {
|
|
20
|
-
if (k !== 'default') {
|
|
21
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
22
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
get: function () { return e[k]; }
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
});
|
|
1
|
+
var __VOBS_CJS_FILE_URL = require("url").pathToFileURL(__filename).href;
|
|
2
|
+
"use strict";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
28
19
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
+
mod
|
|
29
|
+
));
|
|
30
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
var
|
|
35
|
-
|
|
32
|
+
// packages/cli/src/commands/index.ts
|
|
33
|
+
var commands_exports = {};
|
|
34
|
+
__export(commands_exports, {
|
|
35
|
+
addCommand: () => addCommand,
|
|
36
|
+
buildCommand: () => buildCommand,
|
|
37
|
+
devCommand: () => devCommand,
|
|
38
|
+
generateCommand: () => generateCommand,
|
|
39
|
+
initCommand: () => initCommand
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(commands_exports);
|
|
36
42
|
|
|
37
|
-
|
|
38
|
-
var
|
|
43
|
+
// packages/cli/src/commands/init.ts
|
|
44
|
+
var import_node_path3 = require("path");
|
|
45
|
+
var import_node_child_process2 = require("child_process");
|
|
46
|
+
var p = __toESM(require("@clack/prompts"), 1);
|
|
47
|
+
|
|
48
|
+
// packages/cli/src/utils/logger.ts
|
|
49
|
+
var import_picocolors = __toESM(require("picocolors"), 1);
|
|
39
50
|
function timestamp() {
|
|
40
|
-
return
|
|
51
|
+
return import_picocolors.default.dim(`[${(/* @__PURE__ */ new Date()).toLocaleTimeString()}]`);
|
|
41
52
|
}
|
|
42
53
|
__name(timestamp, "timestamp");
|
|
43
54
|
function info(msg) {
|
|
44
|
-
console.log(`${timestamp()} ${
|
|
55
|
+
console.log(`${timestamp()} ${import_picocolors.default.cyan("\u2139")} ${msg}`);
|
|
45
56
|
}
|
|
46
57
|
__name(info, "info");
|
|
47
58
|
function success(msg) {
|
|
48
|
-
console.log(`${timestamp()} ${
|
|
59
|
+
console.log(`${timestamp()} ${import_picocolors.default.green("\u2714")} ${msg}`);
|
|
49
60
|
}
|
|
50
61
|
__name(success, "success");
|
|
51
62
|
function warn(msg) {
|
|
52
|
-
console.log(`${timestamp()} ${
|
|
63
|
+
console.log(`${timestamp()} ${import_picocolors.default.yellow("\u26A0")} ${msg}`);
|
|
53
64
|
}
|
|
54
65
|
__name(warn, "warn");
|
|
55
66
|
function error(msg) {
|
|
56
|
-
console.error(`${timestamp()} ${
|
|
67
|
+
console.error(`${timestamp()} ${import_picocolors.default.red("\u2716")} ${msg}`);
|
|
57
68
|
}
|
|
58
69
|
__name(error, "error");
|
|
59
70
|
function step(msg) {
|
|
60
71
|
console.log(`
|
|
61
|
-
${
|
|
72
|
+
${import_picocolors.default.bold(import_picocolors.default.cyan(msg))}`);
|
|
62
73
|
}
|
|
63
74
|
__name(step, "step");
|
|
64
75
|
var logger = { info, success, warn, error, step };
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
|
|
77
|
+
// packages/cli/src/utils/file.ts
|
|
78
|
+
var import_node_fs = require("fs");
|
|
79
|
+
var import_node_path = require("path");
|
|
80
|
+
var import_node_url = require("url");
|
|
81
|
+
var import_handlebars = __toESM(require("handlebars"), 1);
|
|
82
|
+
var __dirname = (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__VOBS_CJS_FILE_URL));
|
|
83
|
+
var TEMPLATES_ROOT = (0, import_node_path.resolve)(__dirname, "..", "templates");
|
|
67
84
|
function getTemplatesDir() {
|
|
68
85
|
return TEMPLATES_ROOT;
|
|
69
86
|
}
|
|
70
87
|
__name(getTemplatesDir, "getTemplatesDir");
|
|
71
88
|
function renderTemplate(templatePath, context) {
|
|
72
|
-
const source =
|
|
73
|
-
const template =
|
|
89
|
+
const source = (0, import_node_fs.readFileSync)(templatePath, "utf-8");
|
|
90
|
+
const template = import_handlebars.default.compile(source);
|
|
74
91
|
return template(context);
|
|
75
92
|
}
|
|
76
93
|
__name(renderTemplate, "renderTemplate");
|
|
77
94
|
function writeFile(dir, filename, content) {
|
|
78
|
-
const filePath =
|
|
79
|
-
|
|
80
|
-
|
|
95
|
+
const filePath = (0, import_node_path.resolve)(dir, filename);
|
|
96
|
+
(0, import_node_fs.mkdirSync)((0, import_node_path.dirname)(filePath), { recursive: true });
|
|
97
|
+
(0, import_node_fs.writeFileSync)(filePath, content, "utf-8");
|
|
81
98
|
}
|
|
82
99
|
__name(writeFile, "writeFile");
|
|
83
100
|
function ensureDir(dir) {
|
|
84
|
-
if (!
|
|
85
|
-
|
|
101
|
+
if (!(0, import_node_fs.existsSync)(dir)) {
|
|
102
|
+
(0, import_node_fs.mkdirSync)(dir, { recursive: true });
|
|
86
103
|
}
|
|
87
104
|
}
|
|
88
105
|
__name(ensureDir, "ensureDir");
|
|
89
106
|
async function copyDirRecursive(srcDir, destDir, context) {
|
|
90
|
-
const { readdirSync } = await import(
|
|
91
|
-
const { join } = await import(
|
|
107
|
+
const { readdirSync } = await import("fs");
|
|
108
|
+
const { join } = await import("path");
|
|
92
109
|
const entries = readdirSync(srcDir, { withFileTypes: true });
|
|
93
110
|
for (const entry of entries) {
|
|
94
111
|
const srcPath = join(srcDir, entry.name);
|
|
@@ -102,23 +119,28 @@ async function copyDirRecursive(srcDir, destDir, context) {
|
|
|
102
119
|
const content = renderTemplate(srcPath, context);
|
|
103
120
|
writeFile(destDir, destName, content);
|
|
104
121
|
} else {
|
|
105
|
-
const content =
|
|
122
|
+
const content = (0, import_node_fs.readFileSync)(srcPath, "utf-8");
|
|
106
123
|
writeFile(destDir, destName, content);
|
|
107
124
|
}
|
|
108
125
|
}
|
|
109
126
|
}
|
|
110
127
|
__name(copyDirRecursive, "copyDirRecursive");
|
|
111
128
|
async function scaffoldProject(targetDir, context) {
|
|
112
|
-
const templateDir =
|
|
129
|
+
const templateDir = (0, import_node_path.resolve)(TEMPLATES_ROOT, "basic");
|
|
113
130
|
ensureDir(targetDir);
|
|
114
131
|
await copyDirRecursive(templateDir, targetDir, context);
|
|
115
132
|
}
|
|
116
133
|
__name(scaffoldProject, "scaffoldProject");
|
|
134
|
+
|
|
135
|
+
// packages/cli/src/utils/pm.ts
|
|
136
|
+
var import_node_fs2 = require("fs");
|
|
137
|
+
var import_node_path2 = require("path");
|
|
138
|
+
var import_node_child_process = require("child_process");
|
|
117
139
|
function detectPackageManager(targetDir) {
|
|
118
140
|
if (targetDir) {
|
|
119
|
-
if (
|
|
120
|
-
if (
|
|
121
|
-
if (
|
|
141
|
+
if ((0, import_node_fs2.existsSync)((0, import_node_path2.resolve)(targetDir, "pnpm-lock.yaml"))) return "pnpm";
|
|
142
|
+
if ((0, import_node_fs2.existsSync)((0, import_node_path2.resolve)(targetDir, "yarn.lock"))) return "yarn";
|
|
143
|
+
if ((0, import_node_fs2.existsSync)((0, import_node_path2.resolve)(targetDir, "package-lock.json"))) return "npm";
|
|
122
144
|
}
|
|
123
145
|
const userAgent = process.env.npm_config_user_agent || "";
|
|
124
146
|
if (userAgent.startsWith("pnpm")) return "pnpm";
|
|
@@ -129,29 +151,29 @@ function detectPackageManager(targetDir) {
|
|
|
129
151
|
__name(detectPackageManager, "detectPackageManager");
|
|
130
152
|
function installDependencies(targetDir, pm) {
|
|
131
153
|
const cmd = pm === "yarn" ? "yarn" : `${pm} install`;
|
|
132
|
-
|
|
154
|
+
(0, import_node_child_process.execSync)(cmd, { cwd: targetDir, stdio: "inherit" });
|
|
133
155
|
}
|
|
134
156
|
__name(installDependencies, "installDependencies");
|
|
135
157
|
function addPackage(targetDir, pm, pkg, dev) {
|
|
136
158
|
const installFlag = dev ? "-D" : "";
|
|
137
159
|
const cmd = pm === "npm" ? `npm install ${installFlag} ${pkg}` : pm === "yarn" ? `yarn add ${installFlag} ${pkg}` : `pnpm add ${installFlag} ${pkg}`;
|
|
138
|
-
|
|
160
|
+
(0, import_node_child_process.execSync)(cmd, { cwd: targetDir, stdio: "inherit" });
|
|
139
161
|
}
|
|
140
162
|
__name(addPackage, "addPackage");
|
|
141
163
|
|
|
142
164
|
// packages/cli/src/commands/init.ts
|
|
143
165
|
async function initCommand(options) {
|
|
144
|
-
const projectName = options.name || await
|
|
166
|
+
const projectName = options.name || await p.text({
|
|
145
167
|
message: "Project name:",
|
|
146
168
|
placeholder: "my-vobs-app",
|
|
147
169
|
validate: /* @__PURE__ */ __name((v) => !v ? "Project name is required" : void 0, "validate")
|
|
148
170
|
});
|
|
149
|
-
if (
|
|
150
|
-
|
|
171
|
+
if (p.isCancel(projectName)) {
|
|
172
|
+
p.cancel("Cancelled");
|
|
151
173
|
return;
|
|
152
174
|
}
|
|
153
|
-
const targetDir = options.targetDir ||
|
|
154
|
-
const packageManager = options.packageManager || await
|
|
175
|
+
const targetDir = options.targetDir || (0, import_node_path3.resolve)(process.cwd(), projectName);
|
|
176
|
+
const packageManager = options.packageManager || await p.select({
|
|
155
177
|
message: "Package manager:",
|
|
156
178
|
options: [
|
|
157
179
|
{ value: "pnpm", label: "pnpm" },
|
|
@@ -159,24 +181,24 @@ async function initCommand(options) {
|
|
|
159
181
|
{ value: "yarn", label: "yarn" }
|
|
160
182
|
]
|
|
161
183
|
});
|
|
162
|
-
if (
|
|
163
|
-
|
|
184
|
+
if (p.isCancel(packageManager)) {
|
|
185
|
+
p.cancel("Cancelled");
|
|
164
186
|
return;
|
|
165
187
|
}
|
|
166
|
-
const useTypescript = options.typescript ?? await
|
|
188
|
+
const useTypescript = options.typescript ?? await p.confirm({
|
|
167
189
|
message: "Use TypeScript?",
|
|
168
190
|
initialValue: true
|
|
169
191
|
});
|
|
170
|
-
if (
|
|
171
|
-
|
|
192
|
+
if (p.isCancel(useTypescript)) {
|
|
193
|
+
p.cancel("Cancelled");
|
|
172
194
|
return;
|
|
173
195
|
}
|
|
174
|
-
const initGit = options.git ?? await
|
|
196
|
+
const initGit = options.git ?? await p.confirm({
|
|
175
197
|
message: "Initialize a git repository?",
|
|
176
198
|
initialValue: true
|
|
177
199
|
});
|
|
178
|
-
if (
|
|
179
|
-
|
|
200
|
+
if (p.isCancel(initGit)) {
|
|
201
|
+
p.cancel("Cancelled");
|
|
180
202
|
return;
|
|
181
203
|
}
|
|
182
204
|
logger.step(`Creating project ${projectName}...`);
|
|
@@ -193,7 +215,7 @@ async function initCommand(options) {
|
|
|
193
215
|
if (initGit) {
|
|
194
216
|
logger.step("Initializing git repository...");
|
|
195
217
|
try {
|
|
196
|
-
|
|
218
|
+
(0, import_node_child_process2.execSync)("git init", { cwd: targetDir, stdio: "ignore" });
|
|
197
219
|
logger.success("Git repository initialized");
|
|
198
220
|
} catch {
|
|
199
221
|
logger.warn("Git not found, skipping git init");
|
|
@@ -205,9 +227,12 @@ async function initCommand(options) {
|
|
|
205
227
|
`);
|
|
206
228
|
}
|
|
207
229
|
__name(initCommand, "initCommand");
|
|
230
|
+
|
|
231
|
+
// packages/cli/src/commands/dev.ts
|
|
232
|
+
var import_vite = require("vite");
|
|
208
233
|
async function devCommand(options) {
|
|
209
234
|
logger.info("Starting dev server...");
|
|
210
|
-
const server = await
|
|
235
|
+
const server = await (0, import_vite.createServer)({
|
|
211
236
|
configFile: options.config,
|
|
212
237
|
server: {
|
|
213
238
|
port: options.port,
|
|
@@ -219,9 +244,12 @@ async function devCommand(options) {
|
|
|
219
244
|
logger.success("Dev server is running");
|
|
220
245
|
}
|
|
221
246
|
__name(devCommand, "devCommand");
|
|
247
|
+
|
|
248
|
+
// packages/cli/src/commands/build.ts
|
|
249
|
+
var import_vite2 = require("vite");
|
|
222
250
|
async function buildCommand(options) {
|
|
223
251
|
logger.info("Building for production...");
|
|
224
|
-
await
|
|
252
|
+
await (0, import_vite2.build)({
|
|
225
253
|
configFile: options.config,
|
|
226
254
|
build: {
|
|
227
255
|
outDir: options.outDir
|
|
@@ -231,56 +259,60 @@ async function buildCommand(options) {
|
|
|
231
259
|
logger.success("Build complete");
|
|
232
260
|
}
|
|
233
261
|
__name(buildCommand, "buildCommand");
|
|
262
|
+
|
|
263
|
+
// packages/cli/src/commands/generate.ts
|
|
264
|
+
var import_node_path4 = require("path");
|
|
265
|
+
var p2 = __toESM(require("@clack/prompts"), 1);
|
|
234
266
|
async function generateCommand(options) {
|
|
235
|
-
const type = options.type || await
|
|
267
|
+
const type = options.type || await p2.select({
|
|
236
268
|
message: "What to generate?",
|
|
237
269
|
options: [
|
|
238
270
|
{ value: "component", label: "Component" },
|
|
239
271
|
{ value: "page", label: "Page" }
|
|
240
272
|
]
|
|
241
273
|
});
|
|
242
|
-
if (
|
|
243
|
-
|
|
274
|
+
if (p2.isCancel(type)) {
|
|
275
|
+
p2.cancel("Cancelled");
|
|
244
276
|
return;
|
|
245
277
|
}
|
|
246
|
-
const name = options.name || await
|
|
278
|
+
const name = options.name || await p2.text({
|
|
247
279
|
message: "Name:",
|
|
248
280
|
placeholder: type === "component" ? "Button" : "AboutPage",
|
|
249
281
|
validate: /* @__PURE__ */ __name((v) => !v ? "Name is required" : void 0, "validate")
|
|
250
282
|
});
|
|
251
|
-
if (
|
|
252
|
-
|
|
283
|
+
if (p2.isCancel(name)) {
|
|
284
|
+
p2.cancel("Cancelled");
|
|
253
285
|
return;
|
|
254
286
|
}
|
|
255
287
|
const templatesDir = getTemplatesDir();
|
|
256
288
|
if (type === "component") {
|
|
257
|
-
const targetDir = options.targetDir ||
|
|
289
|
+
const targetDir = options.targetDir || (0, import_node_path4.resolve)(process.cwd(), "src/components");
|
|
258
290
|
ensureDir(targetDir);
|
|
259
291
|
const context = {
|
|
260
292
|
name: toPascalCase(name),
|
|
261
293
|
kebabName: toKebabCase(name)
|
|
262
294
|
};
|
|
263
295
|
const content = renderTemplate(
|
|
264
|
-
|
|
296
|
+
(0, import_node_path4.resolve)(templatesDir, "component.hbs"),
|
|
265
297
|
context
|
|
266
298
|
);
|
|
267
299
|
const filename = `${context.name}.tsx`;
|
|
268
300
|
writeFile(targetDir, filename, content);
|
|
269
|
-
logger.success(`Created ${type} at ${
|
|
301
|
+
logger.success(`Created ${type} at ${(0, import_node_path4.resolve)(targetDir, filename)}`);
|
|
270
302
|
} else {
|
|
271
|
-
const targetDir = options.targetDir ||
|
|
303
|
+
const targetDir = options.targetDir || (0, import_node_path4.resolve)(process.cwd(), "src/pages");
|
|
272
304
|
ensureDir(targetDir);
|
|
273
305
|
const context = {
|
|
274
306
|
name: toPascalCase(name),
|
|
275
307
|
path: `/${toKebabCase(name)}`
|
|
276
308
|
};
|
|
277
309
|
const content = renderTemplate(
|
|
278
|
-
|
|
310
|
+
(0, import_node_path4.resolve)(templatesDir, "page.hbs"),
|
|
279
311
|
context
|
|
280
312
|
);
|
|
281
313
|
const filename = `${context.name}.tsx`;
|
|
282
314
|
writeFile(targetDir, filename, content);
|
|
283
|
-
logger.success(`Created ${type} at ${
|
|
315
|
+
logger.success(`Created ${type} at ${(0, import_node_path4.resolve)(targetDir, filename)}`);
|
|
284
316
|
}
|
|
285
317
|
}
|
|
286
318
|
__name(generateCommand, "generateCommand");
|
|
@@ -292,22 +324,25 @@ function toKebabCase(str) {
|
|
|
292
324
|
return str.replace(/([A-Z])/g, "-$1").toLowerCase().replace(/^-/, "").replace(/[^a-z0-9-]/g, "-").replace(/--+/g, "-").replace(/^-|-$/g, "");
|
|
293
325
|
}
|
|
294
326
|
__name(toKebabCase, "toKebabCase");
|
|
327
|
+
|
|
328
|
+
// packages/cli/src/commands/add.ts
|
|
329
|
+
var p3 = __toESM(require("@clack/prompts"), 1);
|
|
295
330
|
async function addCommand(options) {
|
|
296
|
-
const pkg = options.package || await
|
|
331
|
+
const pkg = options.package || await p3.text({
|
|
297
332
|
message: "Package to add:",
|
|
298
333
|
placeholder: "@vobs/ui",
|
|
299
334
|
validate: /* @__PURE__ */ __name((v) => !v ? "Package name is required" : void 0, "validate")
|
|
300
335
|
});
|
|
301
|
-
if (
|
|
302
|
-
|
|
336
|
+
if (p3.isCancel(pkg)) {
|
|
337
|
+
p3.cancel("Cancelled");
|
|
303
338
|
return;
|
|
304
339
|
}
|
|
305
|
-
const isDev = options.dev ?? await
|
|
340
|
+
const isDev = options.dev ?? await p3.confirm({
|
|
306
341
|
message: "Save as dev dependency?",
|
|
307
342
|
initialValue: false
|
|
308
343
|
});
|
|
309
|
-
if (
|
|
310
|
-
|
|
344
|
+
if (p3.isCancel(isDev)) {
|
|
345
|
+
p3.cancel("Cancelled");
|
|
311
346
|
return;
|
|
312
347
|
}
|
|
313
348
|
const pm = detectPackageManager(process.cwd());
|
|
@@ -321,11 +356,12 @@ async function addCommand(options) {
|
|
|
321
356
|
console.log();
|
|
322
357
|
}
|
|
323
358
|
__name(addCommand, "addCommand");
|
|
324
|
-
|
|
325
|
-
exports
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
359
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
360
|
+
0 && (module.exports = {
|
|
361
|
+
addCommand,
|
|
362
|
+
buildCommand,
|
|
363
|
+
devCommand,
|
|
364
|
+
generateCommand,
|
|
365
|
+
initCommand
|
|
366
|
+
});
|
|
331
367
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/logger.ts","../../src/utils/file.ts","../../src/utils/pm.ts","../../src/commands/init.ts","../../src/commands/dev.ts","../../src/commands/build.ts","../../src/commands/generate.ts","../../src/commands/add.ts"],"names":["pc","__dirname","dirname","fileURLToPath","resolve","readFileSync","Handlebars","mkdirSync","writeFileSync","existsSync","execSync","p","createServer","build","p2","p3"],"mappings":"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","file":"index.cjs","sourcesContent":["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 { createServer } from 'vite'\nimport { logger } from '../utils/logger.js'\nimport type { DevOptions } from '../types.js'\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n logger.info('Starting dev server...')\n\n const server = await createServer({\n configFile: options.config,\n server: {\n port: options.port,\n open: options.open\n }\n })\n\n await server.listen()\n server.printUrls()\n logger.success('Dev server is running')\n}","import { build } from 'vite'\nimport { logger } from '../utils/logger.js'\nimport type { BuildOptions } from '../types.js'\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n logger.info('Building for production...')\n\n await build({\n configFile: options.config,\n build: {\n outDir: options.outDir\n },\n mode: options.mode || 'production'\n })\n\n logger.success('Build complete')\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}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/commands/index.ts","../../src/commands/init.ts","../../src/utils/logger.ts","../../src/utils/file.ts","../../src/utils/pm.ts","../../src/commands/dev.ts","../../src/commands/build.ts","../../src/commands/generate.ts","../../src/commands/add.ts"],"sourcesContent":["export { initCommand } from './init.js'\nexport { devCommand } from './dev.js'\nexport { buildCommand } from './build.js'\nexport { generateCommand } from './generate.js'\nexport { addCommand } from './add.js'","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 { createServer } from 'vite'\nimport { logger } from '../utils/logger.js'\nimport type { DevOptions } from '../types.js'\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n logger.info('Starting dev server...')\n\n const server = await createServer({\n configFile: options.config,\n server: {\n port: options.port,\n open: options.open\n }\n })\n\n await server.listen()\n server.printUrls()\n logger.success('Dev server is running')\n}","import { build } from 'vite'\nimport { logger } from '../utils/logger.js'\nimport type { BuildOptions } from '../types.js'\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n logger.info('Building for production...')\n\n await build({\n configFile: options.config,\n build: {\n outDir: options.outDir\n },\n mode: options.mode || 'production'\n })\n\n logger.success('Build complete')\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":["import_node_path","import_node_child_process","pc","Handlebars","import_node_fs","import_node_path","import_vite","import_node_path","p","p"]}
|