@batijs/cli 0.0.16 → 0.0.18

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.
Files changed (26) hide show
  1. package/dist/boilerplates/@batijs/edgedb/$package.json.js +14 -0
  2. package/dist/boilerplates/@batijs/edgedb/chunk-package-2Z6PXHRM.js +62 -0
  3. package/dist/boilerplates/@batijs/edgedb/dbschema/default.esdl +3 -0
  4. package/dist/boilerplates/@batijs/edgedb/dbschema/futures.esdl +4 -0
  5. package/dist/boilerplates/@batijs/edgedb/dbschema/migrations/.gitkeep +0 -0
  6. package/dist/boilerplates/@batijs/edgedb/edgedb.toml +2 -0
  7. package/dist/boilerplates/@batijs/express/$package.json.js +1 -1
  8. package/dist/boilerplates/@batijs/express/{chunk-package-HRILG4TQ.js → chunk-package-RDNZJ22Z.js} +3 -1
  9. package/dist/boilerplates/@batijs/express/express-entry.ts +3 -6
  10. package/dist/boilerplates/@batijs/hattip/$package.json.js +1 -1
  11. package/dist/boilerplates/@batijs/hattip/{chunk-package-KVSS22VL.js → chunk-package-JJB3RM2B.js} +3 -1
  12. package/dist/boilerplates/@batijs/prisma/$package.json.js +12 -0
  13. package/dist/boilerplates/@batijs/{telefunc/chunk-package-HXQQJK43.js → prisma/chunk-package-5AMPDDOP.js} +4 -2
  14. package/dist/boilerplates/@batijs/shared/package.json +1 -1
  15. package/dist/boilerplates/@batijs/solid/$package.json.js +1 -1
  16. package/dist/boilerplates/@batijs/solid/{chunk-package-2LOKPJ4I.js → chunk-package-5RG4GTPJ.js} +3 -1
  17. package/dist/boilerplates/@batijs/tailwindcss/$package.json.js +1 -1
  18. package/dist/boilerplates/@batijs/tailwindcss/{chunk-package-HDKLLEO4.js → chunk-package-TZXDG6BD.js} +3 -1
  19. package/dist/boilerplates/@batijs/telefunc/$package.json.js +1 -1
  20. package/dist/boilerplates/@batijs/telefunc/{chunk-package-OY545CFU.js → chunk-package-SHTX7U2W.js} +3 -1
  21. package/dist/boilerplates/boilerplates.json +1 -1
  22. package/dist/index.d.ts +2 -1
  23. package/dist/index.js +221 -23
  24. package/package.json +5 -5
  25. /package/dist/boilerplates/@batijs/{telefunc → prisma}/$.env.js +0 -0
  26. /package/dist/boilerplates/@batijs/{telefunc → prisma}/prisma/schema.prisma +0 -0
@@ -0,0 +1,14 @@
1
+ // files/$package.json.ts
2
+ import { addDependency, loadAsJson } from "@batijs/core";
3
+ async function getPackageJson(currentContent) {
4
+ const packageJson = await loadAsJson(currentContent);
5
+ packageJson.scripts["edgedb:generate-queries"] = "@edgedb/generate queries";
6
+ packageJson.scripts["edgedb:generate-edgeql-js"] = "@edgedb/generate edgeql-js";
7
+ return addDependency(packageJson, await import("./chunk-package-2Z6PXHRM.js"), {
8
+ devDependencies: ["@edgedb/generate"],
9
+ dependencies: ["edgedb"]
10
+ });
11
+ }
12
+ export {
13
+ getPackageJson as default
14
+ };
@@ -0,0 +1,62 @@
1
+ // package.json
2
+ var name = "@batijs/edgedb";
3
+ var private2 = true;
4
+ var version = "0.0.18";
5
+ var description = "";
6
+ var type = "module";
7
+ var scripts = {
8
+ build: "tsup"
9
+ };
10
+ var keywords = [];
11
+ var author = "";
12
+ var license = "MIT";
13
+ var devDependencies = {
14
+ "@batijs/tsup": "workspace:*",
15
+ "@edgedb/generate": "^0.1.1",
16
+ "@prisma/client": "^4.14.0",
17
+ "@types/node": "^16.18.27",
18
+ edgedb: "^1.2.2"
19
+ };
20
+ var dependencies = {
21
+ "@batijs/core": "workspace:*"
22
+ };
23
+ var files = [
24
+ "dist/"
25
+ ];
26
+ var bati = {
27
+ flag: "edgedb",
28
+ name: "EdgeDB",
29
+ homepage: "https://www.edgedb.com",
30
+ boilerplate: "./dist/files"
31
+ };
32
+ var package_default = {
33
+ name,
34
+ private: private2,
35
+ version,
36
+ description,
37
+ type,
38
+ scripts,
39
+ keywords,
40
+ author,
41
+ license,
42
+ devDependencies,
43
+ dependencies,
44
+ files,
45
+ bati
46
+ };
47
+ export {
48
+ author,
49
+ bati,
50
+ package_default as default,
51
+ dependencies,
52
+ description,
53
+ devDependencies,
54
+ files,
55
+ keywords,
56
+ license,
57
+ name,
58
+ private2 as private,
59
+ scripts,
60
+ type,
61
+ version
62
+ };
@@ -0,0 +1,3 @@
1
+ module default {
2
+
3
+ };
@@ -0,0 +1,4 @@
1
+ # Disable the application of access policies within access policies
2
+ # themselves. This behavior will become the default in EdgeDB 3.0.
3
+ # See: https://www.edgedb.com/docs/reference/ddl/access_policies#nonrecursive
4
+ using future nonrecursive_access_policies;
@@ -0,0 +1,2 @@
1
+ [edgedb]
2
+ server-version = "2.15"
@@ -4,7 +4,7 @@ async function getPackageJson(currentContent, meta) {
4
4
  const packageJson = await loadAsJson(currentContent);
5
5
  packageJson.scripts.dev = "tsx ./express-entry.ts";
6
6
  packageJson.scripts.build = "vite build";
7
- return addDependency(packageJson, await import("./chunk-package-HRILG4TQ.js"), {
7
+ return addDependency(packageJson, await import("./chunk-package-RDNZJ22Z.js"), {
8
8
  devDependencies: ["@types/express"],
9
9
  dependencies: [
10
10
  "@hattip/adapter-node",
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var name = "@batijs/express";
3
3
  var private2 = true;
4
- var version = "0.0.16";
4
+ var version = "0.0.18";
5
5
  var description = "";
6
6
  var type = "module";
7
7
  var scripts = {
@@ -31,6 +31,8 @@ var files = [
31
31
  ];
32
32
  var bati = {
33
33
  flag: "express",
34
+ name: "Express",
35
+ homepage: "https://expressjs.com",
34
36
  boilerplate: "./dist/files"
35
37
  };
36
38
  var package_default = {
@@ -113,12 +113,9 @@ async function startServer() {
113
113
  const pageContext = await renderPage(pageContextInit);
114
114
  if (pageContext.httpResponse === null) return next();
115
115
 
116
- if ((pageContext as Record<string, unknown>)._isStream) {
117
- pageContext.httpResponse.pipe(res);
118
- } else {
119
- const { body, statusCode, contentType } = pageContext.httpResponse;
120
- res.status(statusCode).type(contentType).send(body);
121
- }
116
+ const { statusCode, contentType } = pageContext.httpResponse;
117
+ res.status(statusCode).type(contentType);
118
+ pageContext.httpResponse.pipe(res);
122
119
  });
123
120
 
124
121
  app.listen(process.env.PORT ? parseInt(process.env.PORT) : 3000, "localhost", () => {
@@ -7,7 +7,7 @@ async function getPackageJson(currentContent, meta) {
7
7
  if (packageJson.scripts.preview) {
8
8
  delete packageJson.scripts.preview;
9
9
  }
10
- return addDependency(packageJson, await import("./chunk-package-KVSS22VL.js"), {
10
+ return addDependency(packageJson, await import("./chunk-package-JJB3RM2B.js"), {
11
11
  devDependencies: ["@hattip/vite", "@hattip/adapter-node"],
12
12
  dependencies: [
13
13
  "@hattip/router",
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var name = "@batijs/hattip";
3
3
  var private2 = true;
4
- var version = "0.0.16";
4
+ var version = "0.0.18";
5
5
  var description = "";
6
6
  var type = "module";
7
7
  var scripts = {
@@ -31,6 +31,8 @@ var files = [
31
31
  ];
32
32
  var bati = {
33
33
  flag: "hattip",
34
+ name: "Hattip",
35
+ homepage: "https://github.com/hattipjs/hattip",
34
36
  boilerplate: "./dist/files"
35
37
  };
36
38
  var package_default = {
@@ -0,0 +1,12 @@
1
+ // files/$package.json.ts
2
+ import { addDependency, loadAsJson } from "@batijs/core";
3
+ async function getPackageJson(currentContent) {
4
+ const packageJson = await loadAsJson(currentContent);
5
+ return addDependency(packageJson, await import("./chunk-package-5AMPDDOP.js"), {
6
+ devDependencies: ["prisma"],
7
+ dependencies: ["@prisma/client"]
8
+ });
9
+ }
10
+ export {
11
+ getPackageJson as default
12
+ };
@@ -1,7 +1,7 @@
1
1
  // package.json
2
- var name = "@batijs/telefunc";
2
+ var name = "@batijs/prisma";
3
3
  var private2 = true;
4
- var version = "0.0.16";
4
+ var version = "0.0.18";
5
5
  var description = "";
6
6
  var type = "module";
7
7
  var scripts = {
@@ -24,6 +24,8 @@ var files = [
24
24
  ];
25
25
  var bati = {
26
26
  flag: "prisma",
27
+ name: "Prisma",
28
+ homepage: "https://www.prisma.io",
27
29
  boilerplate: "./dist/files"
28
30
  };
29
31
  var package_default = {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "my-app",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -2,7 +2,7 @@
2
2
  import { addDependency, loadAsJson } from "@batijs/core";
3
3
  async function getPackageJson(currentContent) {
4
4
  const packageJson = await loadAsJson(currentContent);
5
- return addDependency(packageJson, await import("./chunk-package-2LOKPJ4I.js"), {
5
+ return addDependency(packageJson, await import("./chunk-package-5RG4GTPJ.js"), {
6
6
  devDependencies: ["vite"],
7
7
  dependencies: ["cross-fetch", "solid-js", "vike-solid"]
8
8
  });
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var name = "@batijs/solid";
3
3
  var private2 = true;
4
- var version = "0.0.16";
4
+ var version = "0.0.18";
5
5
  var description = "";
6
6
  var type = "module";
7
7
  var scripts = {
@@ -30,6 +30,8 @@ var files = [
30
30
  ];
31
31
  var bati = {
32
32
  flag: "solid",
33
+ name: "SolidJS",
34
+ homepage: "https://www.solidjs.com",
33
35
  boilerplate: "./dist/files"
34
36
  };
35
37
  var package_default = {
@@ -2,7 +2,7 @@
2
2
  import { addDependency, loadAsJson } from "@batijs/core";
3
3
  async function getPackageJson(currentContent, meta) {
4
4
  const packageJson = await loadAsJson(currentContent);
5
- return addDependency(packageJson, await import("./chunk-package-HDKLLEO4.js"), {
5
+ return addDependency(packageJson, await import("./chunk-package-TZXDG6BD.js"), {
6
6
  devDependencies: ["tailwindcss", "postcss", "autoprefixer"]
7
7
  });
8
8
  }
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var name = "@batijs/tailwindcss";
3
3
  var private2 = true;
4
- var version = "0.0.16";
4
+ var version = "0.0.18";
5
5
  var description = "";
6
6
  var type = "module";
7
7
  var scripts = {
@@ -27,6 +27,8 @@ var files = [
27
27
  ];
28
28
  var bati = {
29
29
  flag: "tailwindcss",
30
+ name: "TailwindCSS",
31
+ homepage: "https://tailwindcss.com",
30
32
  boilerplate: "./dist/files"
31
33
  };
32
34
  var package_default = {
@@ -2,7 +2,7 @@
2
2
  import { addDependency, loadAsJson } from "@batijs/core";
3
3
  async function getPackageJson(currentContent) {
4
4
  const packageJson = await loadAsJson(currentContent);
5
- return addDependency(packageJson, await import("./chunk-package-OY545CFU.js"), {
5
+ return addDependency(packageJson, await import("./chunk-package-SHTX7U2W.js"), {
6
6
  dependencies: ["telefunc"]
7
7
  });
8
8
  }
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var name = "@batijs/telefunc";
3
3
  var private2 = true;
4
- var version = "0.0.16";
4
+ var version = "0.0.18";
5
5
  var description = "";
6
6
  var type = "module";
7
7
  var scripts = {
@@ -25,6 +25,8 @@ var files = [
25
25
  ];
26
26
  var bati = {
27
27
  flag: "telefunc",
28
+ name: "Telefunc",
29
+ homepage: "https://telefunc.com",
28
30
  boilerplate: "./dist/files"
29
31
  };
30
32
  var package_default = {
@@ -1 +1 @@
1
- [{"config":{"flag":"express","boilerplate":"./dist/files"},"folder":"@batijs/express"},{"config":{"flag":"hattip","boilerplate":"./dist/files"},"folder":"@batijs/hattip"},{"config":{"flag":"prisma","boilerplate":"./dist/files"},"folder":"@batijs/telefunc"},{"config":{"boilerplate":"./files"},"folder":"@batijs/shared"},{"config":{"flag":"solid","boilerplate":"./dist/files"},"folder":"@batijs/solid"},{"config":{"flag":"tailwindcss","boilerplate":"./dist/files"},"folder":"@batijs/tailwindcss"},{"config":{"flag":"telefunc","boilerplate":"./dist/files"},"folder":"@batijs/telefunc"}]
1
+ [{"config":{"flag":"authjs","name":"Auth.js","homepage":"https://authjs.dev"},"folder":"@batijs/authjs","description":""},{"config":{"flag":"edgedb","name":"EdgeDB","homepage":"https://www.edgedb.com","boilerplate":"./dist/files"},"folder":"@batijs/edgedb","description":""},{"config":{"flag":"express","name":"Express","homepage":"https://expressjs.com","boilerplate":"./dist/files"},"folder":"@batijs/express","description":""},{"config":{"flag":"hattip","name":"Hattip","homepage":"https://github.com/hattipjs/hattip","boilerplate":"./dist/files"},"folder":"@batijs/hattip","description":""},{"config":{"flag":"prisma","name":"Prisma","homepage":"https://www.prisma.io","boilerplate":"./dist/files"},"folder":"@batijs/prisma","description":""},{"config":{"boilerplate":"./files"},"folder":"@batijs/shared","description":""},{"config":{"flag":"solid","name":"SolidJS","homepage":"https://www.solidjs.com","boilerplate":"./dist/files"},"folder":"@batijs/solid","description":""},{"config":{"flag":"tailwindcss","name":"TailwindCSS","homepage":"https://tailwindcss.com","boilerplate":"./dist/files"},"folder":"@batijs/tailwindcss","description":""},{"config":{"flag":"telefunc","name":"Telefunc","homepage":"https://telefunc.com","boilerplate":"./dist/files"},"folder":"@batijs/telefunc","description":""}]
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
+ declare function yn(value: unknown, default_?: boolean): boolean | undefined;
1
2
 
2
- export { }
3
+ export { yn as default };
package/dist/index.js CHANGED
@@ -476,7 +476,7 @@ var colors = {
476
476
  bgWhiteBright: init(107, 49)
477
477
  };
478
478
  var createColors = ({ useColor = isColorSupported } = {}) => useColor ? colors : Object.keys(colors).reduce(
479
- (colors2, key) => ({ ...colors2, [key]: String }),
479
+ (colors3, key) => ({ ...colors3, [key]: String }),
480
480
  {}
481
481
  );
482
482
  var {
@@ -597,13 +597,13 @@ function transformFileAfterExec(filepath, fileContent) {
597
597
  throw new Error(`Unsupported extension ${ext} (${filepath})`);
598
598
  }
599
599
  }
600
- async function fileContainsVikeMeta(filepath) {
600
+ async function fileContainsBatiMeta(filepath) {
601
601
  const code = await readFile(filepath, { encoding: "utf-8" });
602
602
  return code.includes("import.meta.BATI_");
603
603
  }
604
604
  async function main(options, meta) {
605
605
  const sources = Array.isArray(options.source) ? options.source : [options.source];
606
- const targets = /* @__PURE__ */ new Map();
606
+ const targets = /* @__PURE__ */ new Set();
607
607
  for (const source of sources) {
608
608
  for await (const p of walk(source, meta)) {
609
609
  const target = toDist(p, source, options.dist);
@@ -611,15 +611,21 @@ async function main(options, meta) {
611
611
  if (parsed.name.match(reIgnoreFile)) {
612
612
  continue;
613
613
  } else if (parsed.name.startsWith("$") && parsed.ext.match(/\.tsx?$/)) {
614
- throw new Error(`Typescript file needs to be compiled before it can be executed: '${p}'`);
614
+ throw new Error(
615
+ `Typescript file needs to be compiled before it can be executed: '${p}'.
616
+ Please report this issue to https://github.com/magne4000/bati`
617
+ );
615
618
  } else if (parsed.name.startsWith("$") && parsed.ext.match(/\.jsx?$/)) {
616
619
  const f = await import(p);
617
- const fileContent = transformFileAfterExec(target, await f.default(targets.get(target), meta));
620
+ const fileContent = transformFileAfterExec(
621
+ target,
622
+ await f.default(targets.has(target) ? () => readFile(target, { encoding: "utf-8" }) : void 0, meta)
623
+ );
618
624
  if (fileContent !== null) {
619
625
  await safeWriteFile(target, fileContent);
620
626
  }
621
- targets.set(target, () => fileContent);
622
- } else if (parsed.ext.match(/\.[tj]sx?$/) && await fileContainsVikeMeta(p)) {
627
+ targets.add(target);
628
+ } else if (parsed.ext.match(/\.[tj]sx?$/) && await fileContainsBatiMeta(p)) {
623
629
  const mod = await loadFile(p);
624
630
  const fileContent = await transformAndGenerate(mod.$ast, meta, {
625
631
  filepath: p
@@ -627,10 +633,10 @@ async function main(options, meta) {
627
633
  if (fileContent) {
628
634
  await safeWriteFile(target, fileContent);
629
635
  }
630
- targets.set(target, () => fileContent);
636
+ targets.add(target);
631
637
  } else {
632
638
  await safeCopyFile(p, target);
633
- targets.set(target, () => readFile(p, { encoding: "utf-8" }));
639
+ targets.add(target);
634
640
  }
635
641
  }
636
642
  }
@@ -639,8 +645,8 @@ async function main(options, meta) {
639
645
  // package.json
640
646
  var package_default = {
641
647
  name: "@batijs/cli",
642
- version: "0.0.16",
643
- description: "",
648
+ version: "0.0.18",
649
+ description: "Scaffold typescript projects with ease and modularity",
644
650
  type: "module",
645
651
  scripts: {
646
652
  prerelease: "rm -rf ./dist",
@@ -690,7 +696,124 @@ import { flags as coreFlags } from "@batijs/core";
690
696
  import { existsSync } from "fs";
691
697
  import { fileURLToPath } from "url";
692
698
  import { dirname, join } from "path";
693
- import { readFile as readFile2 } from "fs/promises";
699
+ import { access, constants, lstat, readdir, readFile as readFile2 } from "fs/promises";
700
+
701
+ // ../../node_modules/.pnpm/colorette@2.0.20/node_modules/colorette/index.js
702
+ import * as tty2 from "tty";
703
+ var {
704
+ env: env2 = {},
705
+ argv: argv2 = [],
706
+ platform: platform2 = ""
707
+ } = typeof process === "undefined" ? {} : process;
708
+ var isDisabled2 = "NO_COLOR" in env2 || argv2.includes("--no-color");
709
+ var isForced2 = "FORCE_COLOR" in env2 || argv2.includes("--color");
710
+ var isWindows2 = platform2 === "win32";
711
+ var isDumbTerminal2 = env2.TERM === "dumb";
712
+ var isCompatibleTerminal2 = tty2 && tty2.isatty && tty2.isatty(1) && env2.TERM && !isDumbTerminal2;
713
+ var isCI2 = "CI" in env2 && ("GITHUB_ACTIONS" in env2 || "GITLAB_CI" in env2 || "CIRCLECI" in env2);
714
+ var isColorSupported2 = !isDisabled2 && (isForced2 || isWindows2 && !isDumbTerminal2 || isCompatibleTerminal2 || isCI2);
715
+ var replaceClose2 = (index, string, close, replace, head = string.substring(0, index) + replace, tail = string.substring(index + close.length), next = tail.indexOf(close)) => head + (next < 0 ? tail : replaceClose2(next, tail, close, replace));
716
+ var clearBleed2 = (index, string, open, close, replace) => index < 0 ? open + string + close : open + replaceClose2(index, string, close, replace) + close;
717
+ var filterEmpty2 = (open, close, replace = open, at = open.length + 1) => (string) => string || !(string === "" || string === void 0) ? clearBleed2(
718
+ ("" + string).indexOf(close, at),
719
+ string,
720
+ open,
721
+ close,
722
+ replace
723
+ ) : "";
724
+ var init2 = (open, close, replace) => filterEmpty2(`\x1B[${open}m`, `\x1B[${close}m`, replace);
725
+ var colors2 = {
726
+ reset: init2(0, 0),
727
+ bold: init2(1, 22, "\x1B[22m\x1B[1m"),
728
+ dim: init2(2, 22, "\x1B[22m\x1B[2m"),
729
+ italic: init2(3, 23),
730
+ underline: init2(4, 24),
731
+ inverse: init2(7, 27),
732
+ hidden: init2(8, 28),
733
+ strikethrough: init2(9, 29),
734
+ black: init2(30, 39),
735
+ red: init2(31, 39),
736
+ green: init2(32, 39),
737
+ yellow: init2(33, 39),
738
+ blue: init2(34, 39),
739
+ magenta: init2(35, 39),
740
+ cyan: init2(36, 39),
741
+ white: init2(37, 39),
742
+ gray: init2(90, 39),
743
+ bgBlack: init2(40, 49),
744
+ bgRed: init2(41, 49),
745
+ bgGreen: init2(42, 49),
746
+ bgYellow: init2(43, 49),
747
+ bgBlue: init2(44, 49),
748
+ bgMagenta: init2(45, 49),
749
+ bgCyan: init2(46, 49),
750
+ bgWhite: init2(47, 49),
751
+ blackBright: init2(90, 39),
752
+ redBright: init2(91, 39),
753
+ greenBright: init2(92, 39),
754
+ yellowBright: init2(93, 39),
755
+ blueBright: init2(94, 39),
756
+ magentaBright: init2(95, 39),
757
+ cyanBright: init2(96, 39),
758
+ whiteBright: init2(97, 39),
759
+ bgBlackBright: init2(100, 49),
760
+ bgRedBright: init2(101, 49),
761
+ bgGreenBright: init2(102, 49),
762
+ bgYellowBright: init2(103, 49),
763
+ bgBlueBright: init2(104, 49),
764
+ bgMagentaBright: init2(105, 49),
765
+ bgCyanBright: init2(106, 49),
766
+ bgWhiteBright: init2(107, 49)
767
+ };
768
+ var createColors2 = ({ useColor = isColorSupported2 } = {}) => useColor ? colors2 : Object.keys(colors2).reduce(
769
+ (colors3, key) => ({ ...colors3, [key]: String }),
770
+ {}
771
+ );
772
+ var {
773
+ reset: reset2,
774
+ bold: bold2,
775
+ dim: dim2,
776
+ italic: italic2,
777
+ underline: underline2,
778
+ inverse: inverse2,
779
+ hidden: hidden2,
780
+ strikethrough: strikethrough2,
781
+ black: black2,
782
+ red: red2,
783
+ green: green2,
784
+ yellow: yellow2,
785
+ blue: blue2,
786
+ magenta: magenta2,
787
+ cyan: cyan2,
788
+ white: white2,
789
+ gray: gray2,
790
+ bgBlack: bgBlack2,
791
+ bgRed: bgRed2,
792
+ bgGreen: bgGreen2,
793
+ bgYellow: bgYellow2,
794
+ bgBlue: bgBlue2,
795
+ bgMagenta: bgMagenta2,
796
+ bgCyan: bgCyan2,
797
+ bgWhite: bgWhite2,
798
+ blackBright: blackBright2,
799
+ redBright: redBright2,
800
+ greenBright: greenBright2,
801
+ yellowBright: yellowBright2,
802
+ blueBright: blueBright2,
803
+ magentaBright: magentaBright2,
804
+ cyanBright: cyanBright2,
805
+ whiteBright: whiteBright2,
806
+ bgBlackBright: bgBlackBright2,
807
+ bgRedBright: bgRedBright2,
808
+ bgGreenBright: bgGreenBright2,
809
+ bgYellowBright: bgYellowBright2,
810
+ bgBlueBright: bgBlueBright2,
811
+ bgMagentaBright: bgMagentaBright2,
812
+ bgCyanBright: bgCyanBright2,
813
+ bgWhiteBright: bgWhiteBright2
814
+ } = createColors2();
815
+
816
+ // index.ts
694
817
  var __filename = fileURLToPath(import.meta.url);
695
818
  var __dirname = dirname(__filename);
696
819
  function boilerplatesDir() {
@@ -704,16 +827,91 @@ function boilerplatesDir() {
704
827
  async function parseBoilerplates(dir) {
705
828
  return JSON.parse(await readFile2(join(dir, "boilerplates.json"), "utf-8"));
706
829
  }
707
- function toArg(flag) {
830
+ function toArg(flag, description) {
708
831
  if (!flag)
709
832
  return {};
710
833
  return {
711
834
  [flag]: {
712
835
  type: "boolean",
713
- required: false
836
+ required: false,
837
+ description
714
838
  }
715
839
  };
716
840
  }
841
+ function findDescription(key, boilerplates) {
842
+ const bl = boilerplates.find((b) => b.config.flag === key);
843
+ if (!bl)
844
+ return;
845
+ if (bl.description) {
846
+ return bl.description;
847
+ } else if (bl.config.name && bl.config.homepage) {
848
+ return `Include ${bl.config.name} - ${bl.config.homepage}`;
849
+ } else if (bl.config.name) {
850
+ return `Include ${bl.config.name}`;
851
+ }
852
+ }
853
+ function printOK(dist, flags, boilerplates) {
854
+ console.log(bold2(`${green2("\u2713")} Project created at ${cyan2(dist)} with:`));
855
+ console.log(` - ${green2("Typescript")}`);
856
+ for (const key of flags) {
857
+ const bl = boilerplates.find((b) => b.config.flag === key);
858
+ if (!bl || !bl.config.name)
859
+ continue;
860
+ console.log(` - ${green2(bl.config.name)}`);
861
+ }
862
+ console.log("\n" + bold2(`${blue2("\u2192")} Next steps:`));
863
+ console.log(` ${gray2("$")} cd ${dist}`);
864
+ console.log(` ${gray2("$")} pnpm install`);
865
+ console.log(` ${gray2("$")} pnpm run dev`);
866
+ }
867
+ var defaultDef = {
868
+ project: {
869
+ type: "positional",
870
+ description: "Project directory",
871
+ required: true
872
+ }
873
+ };
874
+ function yn(value, default_) {
875
+ if (value === void 0 || value === null) {
876
+ return default_;
877
+ }
878
+ value = String(value).trim();
879
+ if (/^(?:y|yes|true|1|on)$/i.test(value)) {
880
+ return true;
881
+ }
882
+ if (/^(?:n|no|false|0|off)$/i.test(value)) {
883
+ return false;
884
+ }
885
+ return default_;
886
+ }
887
+ async function checkArguments(args) {
888
+ if (existsSync(args.project)) {
889
+ const stat = await lstat(args.project);
890
+ if (!stat.isDirectory()) {
891
+ console.error(
892
+ `${yellow2("\u26A0")} Target ${cyan2(args.project)} already exists but is not a directory. ${yellow2("Aborting")}.`
893
+ );
894
+ process.exit(2);
895
+ }
896
+ try {
897
+ await access(args.project, constants.W_OK);
898
+ } catch (_) {
899
+ console.error(
900
+ `${yellow2("\u26A0")} Target folder ${cyan2(args.project)} already exists but is not writable. ${yellow2("Aborting")}.`
901
+ );
902
+ process.exit(3);
903
+ }
904
+ if ((await readdir(args.project)).length > 0) {
905
+ console.error(
906
+ `${yellow2("\u26A0")} Target folder ${cyan2(
907
+ args.project
908
+ )} already exists and is not empty.
909
+ Continuing might erase existing files. ${yellow2("Aborting")}.`
910
+ );
911
+ process.exit(4);
912
+ }
913
+ }
914
+ }
717
915
  async function run() {
718
916
  const dir = boilerplatesDir();
719
917
  const boilerplates = await parseBoilerplates(dir);
@@ -724,16 +922,12 @@ async function run() {
724
922
  description: package_default.description
725
923
  },
726
924
  args: Object.assign(
727
- {
728
- dist: {
729
- type: "positional",
730
- description: "Dist folder",
731
- required: true
732
- }
733
- },
734
- ...Array.from(coreFlags.keys()).map(toArg)
925
+ {},
926
+ defaultDef,
927
+ ...Array.from(coreFlags.keys()).map((k) => toArg(k, findDescription(k, boilerplates)))
735
928
  ),
736
929
  async run({ args }) {
930
+ await checkArguments(args);
737
931
  const sources = [];
738
932
  const features = [];
739
933
  const flags = Object.entries(args).filter(([, val]) => val === true).map(([key]) => key);
@@ -751,12 +945,13 @@ async function run() {
751
945
  await main(
752
946
  {
753
947
  source: sources,
754
- dist: args.dist
948
+ dist: args.project
755
949
  },
756
950
  {
757
951
  BATI_MODULES: features
758
952
  }
759
953
  );
954
+ printOK(args.project, flags, boilerplates);
760
955
  }
761
956
  });
762
957
  await runMain(main2);
@@ -767,3 +962,6 @@ run().then(() => {
767
962
  console.error(e);
768
963
  process.exit(1);
769
964
  });
965
+ export {
966
+ yn as default
967
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@batijs/cli",
3
- "version": "0.0.16",
4
- "description": "",
3
+ "version": "0.0.18",
4
+ "description": "Scaffold typescript projects with ease and modularity",
5
5
  "type": "module",
6
6
  "keywords": [],
7
7
  "author": "",
@@ -18,11 +18,11 @@
18
18
  "typescript": "^5.0.4",
19
19
  "vitest": "^0.31.0",
20
20
  "wait-for-localhost": "^4.0.1",
21
- "@batijs/build": "0.0.16",
22
- "@batijs/tsup": "0.0.16"
21
+ "@batijs/tsup": "0.0.18",
22
+ "@batijs/build": "0.0.18"
23
23
  },
24
24
  "dependencies": {
25
- "@batijs/core": "0.0.16"
25
+ "@batijs/core": "0.0.18"
26
26
  },
27
27
  "bin": "./dist/index.js",
28
28
  "exports": {