create-rsbuild 1.0.1-beta.0 → 1.0.1-beta.1

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/index.js CHANGED
@@ -38,12 +38,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
38
38
  mod
39
39
  ));
40
40
 
41
- // ../../node_modules/.pnpm/@modern-js+module-tools@2.54.6_eslint@9.6.0_typescript@5.5.2/node_modules/@modern-js/module-tools/shims/esm.js
41
+ // ../../node_modules/.pnpm/@modern-js+module-tools@2.55.0_eslint@9.6.0_typescript@5.5.2/node_modules/@modern-js/module-tools/shims/esm.js
42
42
  import { fileURLToPath } from "url";
43
43
  import path from "path";
44
44
  var getFilename, getDirname, __dirname;
45
45
  var init_esm = __esm({
46
- "../../node_modules/.pnpm/@modern-js+module-tools@2.54.6_eslint@9.6.0_typescript@5.5.2/node_modules/@modern-js/module-tools/shims/esm.js"() {
46
+ "../../node_modules/.pnpm/@modern-js+module-tools@2.55.0_eslint@9.6.0_typescript@5.5.2/node_modules/@modern-js/module-tools/shims/esm.js"() {
47
47
  "use strict";
48
48
  getFilename = () => fileURLToPath(import.meta.url);
49
49
  getDirname = () => path.dirname(getFilename());
@@ -276,6 +276,229 @@ var require_cjs = __commonJS({
276
276
  }
277
277
  });
278
278
 
279
+ // ../../node_modules/.pnpm/minimist@1.2.8/node_modules/minimist/index.js
280
+ var require_minimist = __commonJS({
281
+ "../../node_modules/.pnpm/minimist@1.2.8/node_modules/minimist/index.js"(exports, module) {
282
+ "use strict";
283
+ init_esm();
284
+ function hasKey(obj, keys) {
285
+ var o2 = obj;
286
+ keys.slice(0, -1).forEach(function(key2) {
287
+ o2 = o2[key2] || {};
288
+ });
289
+ var key = keys[keys.length - 1];
290
+ return key in o2;
291
+ }
292
+ function isNumber(x3) {
293
+ if (typeof x3 === "number") {
294
+ return true;
295
+ }
296
+ if (/^0x[0-9a-f]+$/i.test(x3)) {
297
+ return true;
298
+ }
299
+ return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x3);
300
+ }
301
+ function isConstructorOrProto(obj, key) {
302
+ return key === "constructor" && typeof obj[key] === "function" || key === "__proto__";
303
+ }
304
+ module.exports = function(args, opts) {
305
+ if (!opts) {
306
+ opts = {};
307
+ }
308
+ var flags = {
309
+ bools: {},
310
+ strings: {},
311
+ unknownFn: null
312
+ };
313
+ if (typeof opts.unknown === "function") {
314
+ flags.unknownFn = opts.unknown;
315
+ }
316
+ if (typeof opts.boolean === "boolean" && opts.boolean) {
317
+ flags.allBools = true;
318
+ } else {
319
+ [].concat(opts.boolean).filter(Boolean).forEach(function(key2) {
320
+ flags.bools[key2] = true;
321
+ });
322
+ }
323
+ var aliases = {};
324
+ function aliasIsBoolean(key2) {
325
+ return aliases[key2].some(function(x3) {
326
+ return flags.bools[x3];
327
+ });
328
+ }
329
+ Object.keys(opts.alias || {}).forEach(function(key2) {
330
+ aliases[key2] = [].concat(opts.alias[key2]);
331
+ aliases[key2].forEach(function(x3) {
332
+ aliases[x3] = [key2].concat(aliases[key2].filter(function(y3) {
333
+ return x3 !== y3;
334
+ }));
335
+ });
336
+ });
337
+ [].concat(opts.string).filter(Boolean).forEach(function(key2) {
338
+ flags.strings[key2] = true;
339
+ if (aliases[key2]) {
340
+ [].concat(aliases[key2]).forEach(function(k2) {
341
+ flags.strings[k2] = true;
342
+ });
343
+ }
344
+ });
345
+ var defaults = opts.default || {};
346
+ var argv = { _: [] };
347
+ function argDefined(key2, arg2) {
348
+ return flags.allBools && /^--[^=]+$/.test(arg2) || flags.strings[key2] || flags.bools[key2] || aliases[key2];
349
+ }
350
+ function setKey(obj, keys, value2) {
351
+ var o2 = obj;
352
+ for (var i2 = 0; i2 < keys.length - 1; i2++) {
353
+ var key2 = keys[i2];
354
+ if (isConstructorOrProto(o2, key2)) {
355
+ return;
356
+ }
357
+ if (o2[key2] === void 0) {
358
+ o2[key2] = {};
359
+ }
360
+ if (o2[key2] === Object.prototype || o2[key2] === Number.prototype || o2[key2] === String.prototype) {
361
+ o2[key2] = {};
362
+ }
363
+ if (o2[key2] === Array.prototype) {
364
+ o2[key2] = [];
365
+ }
366
+ o2 = o2[key2];
367
+ }
368
+ var lastKey = keys[keys.length - 1];
369
+ if (isConstructorOrProto(o2, lastKey)) {
370
+ return;
371
+ }
372
+ if (o2 === Object.prototype || o2 === Number.prototype || o2 === String.prototype) {
373
+ o2 = {};
374
+ }
375
+ if (o2 === Array.prototype) {
376
+ o2 = [];
377
+ }
378
+ if (o2[lastKey] === void 0 || flags.bools[lastKey] || typeof o2[lastKey] === "boolean") {
379
+ o2[lastKey] = value2;
380
+ } else if (Array.isArray(o2[lastKey])) {
381
+ o2[lastKey].push(value2);
382
+ } else {
383
+ o2[lastKey] = [o2[lastKey], value2];
384
+ }
385
+ }
386
+ function setArg(key2, val, arg2) {
387
+ if (arg2 && flags.unknownFn && !argDefined(key2, arg2)) {
388
+ if (flags.unknownFn(arg2) === false) {
389
+ return;
390
+ }
391
+ }
392
+ var value2 = !flags.strings[key2] && isNumber(val) ? Number(val) : val;
393
+ setKey(argv, key2.split("."), value2);
394
+ (aliases[key2] || []).forEach(function(x3) {
395
+ setKey(argv, x3.split("."), value2);
396
+ });
397
+ }
398
+ Object.keys(flags.bools).forEach(function(key2) {
399
+ setArg(key2, defaults[key2] === void 0 ? false : defaults[key2]);
400
+ });
401
+ var notFlags = [];
402
+ if (args.indexOf("--") !== -1) {
403
+ notFlags = args.slice(args.indexOf("--") + 1);
404
+ args = args.slice(0, args.indexOf("--"));
405
+ }
406
+ for (var i = 0; i < args.length; i++) {
407
+ var arg = args[i];
408
+ var key;
409
+ var next;
410
+ if (/^--.+=/.test(arg)) {
411
+ var m2 = arg.match(/^--([^=]+)=([\s\S]*)$/);
412
+ key = m2[1];
413
+ var value = m2[2];
414
+ if (flags.bools[key]) {
415
+ value = value !== "false";
416
+ }
417
+ setArg(key, value, arg);
418
+ } else if (/^--no-.+/.test(arg)) {
419
+ key = arg.match(/^--no-(.+)/)[1];
420
+ setArg(key, false, arg);
421
+ } else if (/^--.+/.test(arg)) {
422
+ key = arg.match(/^--(.+)/)[1];
423
+ next = args[i + 1];
424
+ if (next !== void 0 && !/^(-|--)[^-]/.test(next) && !flags.bools[key] && !flags.allBools && (aliases[key] ? !aliasIsBoolean(key) : true)) {
425
+ setArg(key, next, arg);
426
+ i += 1;
427
+ } else if (/^(true|false)$/.test(next)) {
428
+ setArg(key, next === "true", arg);
429
+ i += 1;
430
+ } else {
431
+ setArg(key, flags.strings[key] ? "" : true, arg);
432
+ }
433
+ } else if (/^-[^-]+/.test(arg)) {
434
+ var letters = arg.slice(1, -1).split("");
435
+ var broken = false;
436
+ for (var j2 = 0; j2 < letters.length; j2++) {
437
+ next = arg.slice(j2 + 2);
438
+ if (next === "-") {
439
+ setArg(letters[j2], next, arg);
440
+ continue;
441
+ }
442
+ if (/[A-Za-z]/.test(letters[j2]) && next[0] === "=") {
443
+ setArg(letters[j2], next.slice(1), arg);
444
+ broken = true;
445
+ break;
446
+ }
447
+ if (/[A-Za-z]/.test(letters[j2]) && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
448
+ setArg(letters[j2], next, arg);
449
+ broken = true;
450
+ break;
451
+ }
452
+ if (letters[j2 + 1] && letters[j2 + 1].match(/\W/)) {
453
+ setArg(letters[j2], arg.slice(j2 + 2), arg);
454
+ broken = true;
455
+ break;
456
+ } else {
457
+ setArg(letters[j2], flags.strings[letters[j2]] ? "" : true, arg);
458
+ }
459
+ }
460
+ key = arg.slice(-1)[0];
461
+ if (!broken && key !== "-") {
462
+ if (args[i + 1] && !/^(-|--)[^-]/.test(args[i + 1]) && !flags.bools[key] && (aliases[key] ? !aliasIsBoolean(key) : true)) {
463
+ setArg(key, args[i + 1], arg);
464
+ i += 1;
465
+ } else if (args[i + 1] && /^(true|false)$/.test(args[i + 1])) {
466
+ setArg(key, args[i + 1] === "true", arg);
467
+ i += 1;
468
+ } else {
469
+ setArg(key, flags.strings[key] ? "" : true, arg);
470
+ }
471
+ }
472
+ } else {
473
+ if (!flags.unknownFn || flags.unknownFn(arg) !== false) {
474
+ argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg));
475
+ }
476
+ if (opts.stopEarly) {
477
+ argv._.push.apply(argv._, args.slice(i + 1));
478
+ break;
479
+ }
480
+ }
481
+ }
482
+ Object.keys(defaults).forEach(function(k2) {
483
+ if (!hasKey(argv, k2.split("."))) {
484
+ setKey(argv, k2.split("."), defaults[k2]);
485
+ (aliases[k2] || []).forEach(function(x3) {
486
+ setKey(argv, x3.split("."), defaults[k2]);
487
+ });
488
+ }
489
+ });
490
+ if (opts["--"]) {
491
+ argv["--"] = notFlags.slice();
492
+ } else {
493
+ notFlags.forEach(function(k2) {
494
+ argv._.push(k2);
495
+ });
496
+ }
497
+ return argv;
498
+ };
499
+ }
500
+ });
501
+
279
502
  // src/index.ts
280
503
  init_esm();
281
504
  import fs from "fs";
@@ -846,6 +1069,7 @@ function me() {
846
1069
 
847
1070
  // src/index.ts
848
1071
  var import_deepmerge = __toESM(require_cjs());
1072
+ var import_minimist = __toESM(require_minimist());
849
1073
 
850
1074
  // ../../node_modules/.pnpm/rslog@1.2.2/node_modules/rslog/dist/index.mjs
851
1075
  init_esm();
@@ -1161,42 +1385,38 @@ function isEmptyDir(path3) {
1161
1385
  const files = fs.readdirSync(path3);
1162
1386
  return files.length === 0 || files.length === 1 && files[0] === ".git";
1163
1387
  }
1164
- async function main() {
1165
- console.log("");
1166
- logger.greet("◆ Create Rsbuild Project");
1167
- const cwd = process.cwd();
1168
- const pkgInfo = pkgFromUserAgent(process.env.npm_config_user_agent);
1169
- const pkgManager = pkgInfo ? pkgInfo.name : "npm";
1170
- const packageRoot = path2.resolve(__dirname, "..");
1171
- const packageJsonPath = path2.join(packageRoot, "package.json");
1172
- const { version } = __require(packageJsonPath);
1173
- const projectName = checkCancel(
1174
- await te({
1175
- message: "Project name or path",
1176
- placeholder: "rsbuild-project",
1177
- defaultValue: "rsbuild-project",
1178
- validate(value) {
1179
- if (value.length === 0) {
1180
- return "Project name is required";
1181
- }
1182
- }
1183
- })
1184
- );
1185
- const { targetDir, packageName } = formatProjectName(projectName);
1186
- const distFolder = path2.isAbsolute(targetDir) ? targetDir : path2.join(cwd, targetDir);
1187
- if (fs.existsSync(distFolder) && !isEmptyDir(distFolder)) {
1188
- const option = checkCancel(
1189
- await ie({
1190
- message: `"${targetDir}" is not empty, please choose:`,
1191
- options: [
1192
- { value: "yes", label: "Continue and override files" },
1193
- { value: "no", label: "Cancel operation" }
1194
- ]
1195
- })
1196
- );
1197
- if (option === "no") {
1198
- cancelAndExit();
1199
- }
1388
+ function logHelpMessage() {
1389
+ logger.log(`
1390
+ Usage: create-rsbuild [options]
1391
+
1392
+ Options:
1393
+
1394
+ -h, --help display help for command
1395
+ -d, --dir create project in specified directory
1396
+ -t, --template specify the template to use
1397
+ --tools select additional tools (biome, eslint, prettier)
1398
+ --override override files in target directory
1399
+
1400
+ Templates:
1401
+
1402
+ react react-ts
1403
+ vue3 vue3-ts
1404
+ vue2 vue2-ts
1405
+ lit lit-ts
1406
+ preact preact-ts
1407
+ svelte svelte-ts
1408
+ solid solid-ts
1409
+ vanilla vanilla-ts
1410
+ `);
1411
+ }
1412
+ async function getTemplate({ template }) {
1413
+ if (template) {
1414
+ const pair = template.split("-");
1415
+ const language2 = pair[1] ?? "js";
1416
+ return {
1417
+ framework: pair[0],
1418
+ language: language2
1419
+ };
1200
1420
  }
1201
1421
  const framework = checkCancel(
1202
1422
  await ie({
@@ -1222,7 +1442,19 @@ async function main() {
1222
1442
  ]
1223
1443
  })
1224
1444
  );
1225
- const tools = checkCancel(
1445
+ return {
1446
+ framework,
1447
+ language
1448
+ };
1449
+ }
1450
+ async function getTools({ tools, dir, template }) {
1451
+ if (tools) {
1452
+ return Array.isArray(tools) ? tools : [tools];
1453
+ }
1454
+ if (dir && template) {
1455
+ return [];
1456
+ }
1457
+ return checkCancel(
1226
1458
  await ae({
1227
1459
  message: "Select additional tools (press enter to continue)",
1228
1460
  options: [
@@ -1233,6 +1465,53 @@ async function main() {
1233
1465
  required: false
1234
1466
  })
1235
1467
  );
1468
+ }
1469
+ async function main() {
1470
+ const argv = (0, import_minimist.default)(process.argv.slice(2), {
1471
+ alias: { h: "help", d: "dir", t: "template" }
1472
+ });
1473
+ console.log("");
1474
+ logger.greet("◆ Create Rsbuild Project");
1475
+ if (argv.help) {
1476
+ logHelpMessage();
1477
+ return;
1478
+ }
1479
+ const cwd = process.cwd();
1480
+ const pkgInfo = pkgFromUserAgent(process.env.npm_config_user_agent);
1481
+ const pkgManager = pkgInfo ? pkgInfo.name : "npm";
1482
+ const packageRoot = path2.resolve(__dirname, "..");
1483
+ const packageJsonPath = path2.join(packageRoot, "package.json");
1484
+ const { version } = __require(packageJsonPath);
1485
+ const projectName = argv.dir ?? checkCancel(
1486
+ await te({
1487
+ message: "Project name or path",
1488
+ placeholder: "rsbuild-project",
1489
+ defaultValue: "rsbuild-project",
1490
+ validate(value) {
1491
+ if (value.length === 0) {
1492
+ return "Project name is required";
1493
+ }
1494
+ }
1495
+ })
1496
+ );
1497
+ const { targetDir, packageName } = formatProjectName(projectName);
1498
+ const distFolder = path2.isAbsolute(targetDir) ? targetDir : path2.join(cwd, targetDir);
1499
+ if (!argv.override && fs.existsSync(distFolder) && !isEmptyDir(distFolder)) {
1500
+ const option = checkCancel(
1501
+ await ie({
1502
+ message: `"${targetDir}" is not empty, please choose:`,
1503
+ options: [
1504
+ { value: "yes", label: "Continue and override files" },
1505
+ { value: "no", label: "Cancel operation" }
1506
+ ]
1507
+ })
1508
+ );
1509
+ if (option === "no") {
1510
+ cancelAndExit();
1511
+ }
1512
+ }
1513
+ const { framework, language } = await getTemplate(argv);
1514
+ const tools = await getTools(argv);
1236
1515
  const srcFolder = path2.join(packageRoot, `template-${framework}-${language}`);
1237
1516
  const commonFolder = path2.join(packageRoot, "template-common");
1238
1517
  copyFolder(commonFolder, distFolder, version);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-rsbuild",
3
- "version": "1.0.1-beta.0",
3
+ "version": "1.0.1-beta.1",
4
4
  "description": "Create a new Rsbuild project",
5
5
  "homepage": "https://rsbuild.dev",
6
6
  "repository": {
@@ -27,8 +27,10 @@
27
27
  ],
28
28
  "devDependencies": {
29
29
  "@clack/prompts": "^0.7.0",
30
+ "@types/minimist": "^1.2.5",
30
31
  "@types/node": "18.x",
31
32
  "deepmerge": "^4.3.1",
33
+ "minimist": "^1.2.8",
32
34
  "rslog": "^1.2.2",
33
35
  "typescript": "^5.5.2"
34
36
  },
@@ -7,8 +7,10 @@
7
7
  "build": "rsbuild build",
8
8
  "preview": "rsbuild preview"
9
9
  },
10
- "devDependencies": {
11
- "@rsbuild/core": "workspace:*",
10
+ "dependencies": {
12
11
  "lit": "^3.1.4"
12
+ },
13
+ "devDependencies": {
14
+ "@rsbuild/core": "workspace:*"
13
15
  }
14
16
  }
@@ -7,9 +7,11 @@
7
7
  "build": "rsbuild build",
8
8
  "preview": "rsbuild preview"
9
9
  },
10
+ "dependencies": {
11
+ "lit": "^3.1.4"
12
+ },
10
13
  "devDependencies": {
11
14
  "@rsbuild/core": "workspace:*",
12
- "lit": "^3.1.4",
13
15
  "typescript": "^5.5.2"
14
16
  }
15
17
  }