@batijs/cli 0.0.16 → 0.0.17

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-YA6LQX6A.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-HAYHYJN6.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-2ZCYV5QA.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-4ZWXXBQR.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-VU2VJMMM.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-TPBRD2TI.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-YNWFSVHU.js} +3 -1
  21. package/dist/boilerplates/boilerplates.json +1 -1
  22. package/dist/index.d.ts +2 -1
  23. package/dist/index.js +217 -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-YA6LQX6A.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.17";
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-HAYHYJN6.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.17";
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-2ZCYV5QA.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.17";
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-4ZWXXBQR.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.17";
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.17",
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-VU2VJMMM.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.17";
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-TPBRD2TI.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.17";
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-YNWFSVHU.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.17";
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.17",
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,87 @@ 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
+ }
863
+ var defaultDef = {
864
+ project: {
865
+ type: "positional",
866
+ description: "Project directory",
867
+ required: true
868
+ }
869
+ };
870
+ function yn(value, default_) {
871
+ if (value === void 0 || value === null) {
872
+ return default_;
873
+ }
874
+ value = String(value).trim();
875
+ if (/^(?:y|yes|true|1|on)$/i.test(value)) {
876
+ return true;
877
+ }
878
+ if (/^(?:n|no|false|0|off)$/i.test(value)) {
879
+ return false;
880
+ }
881
+ return default_;
882
+ }
883
+ async function checkArguments(args) {
884
+ if (existsSync(args.project)) {
885
+ const stat = await lstat(args.project);
886
+ if (!stat.isDirectory()) {
887
+ console.error(
888
+ `${yellow2("\u26A0")} Target ${cyan2(args.project)} already exists but is not a directory. ${yellow2("Aborting")}.`
889
+ );
890
+ process.exit(2);
891
+ }
892
+ try {
893
+ await access(args.project, constants.W_OK);
894
+ } catch (_) {
895
+ console.error(
896
+ `${yellow2("\u26A0")} Target folder ${cyan2(args.project)} already exists but is not writable. ${yellow2("Aborting")}.`
897
+ );
898
+ process.exit(3);
899
+ }
900
+ if ((await readdir(args.project)).length > 0) {
901
+ console.error(
902
+ `${yellow2("\u26A0")} Target folder ${cyan2(
903
+ args.project
904
+ )} already exists and is not empty.
905
+ Continuing might erase existing files. ${yellow2("Aborting")}.`
906
+ );
907
+ process.exit(4);
908
+ }
909
+ }
910
+ }
717
911
  async function run() {
718
912
  const dir = boilerplatesDir();
719
913
  const boilerplates = await parseBoilerplates(dir);
@@ -724,16 +918,12 @@ async function run() {
724
918
  description: package_default.description
725
919
  },
726
920
  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)
921
+ {},
922
+ defaultDef,
923
+ ...Array.from(coreFlags.keys()).map((k) => toArg(k, findDescription(k, boilerplates)))
735
924
  ),
736
925
  async run({ args }) {
926
+ await checkArguments(args);
737
927
  const sources = [];
738
928
  const features = [];
739
929
  const flags = Object.entries(args).filter(([, val]) => val === true).map(([key]) => key);
@@ -751,12 +941,13 @@ async function run() {
751
941
  await main(
752
942
  {
753
943
  source: sources,
754
- dist: args.dist
944
+ dist: args.project
755
945
  },
756
946
  {
757
947
  BATI_MODULES: features
758
948
  }
759
949
  );
950
+ printOK(args.project, flags, boilerplates);
760
951
  }
761
952
  });
762
953
  await runMain(main2);
@@ -767,3 +958,6 @@ run().then(() => {
767
958
  console.error(e);
768
959
  process.exit(1);
769
960
  });
961
+ export {
962
+ yn as default
963
+ };
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.17",
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.17",
22
+ "@batijs/build": "0.0.17"
23
23
  },
24
24
  "dependencies": {
25
- "@batijs/core": "0.0.16"
25
+ "@batijs/core": "0.0.17"
26
26
  },
27
27
  "bin": "./dist/index.js",
28
28
  "exports": {