create-esa-stack 0.1.11 โ†’ 0.1.13

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/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.1.13] - 2026-02-06
9
+
10
+ ### Added
11
+ - **Zod**: Added optional integration for Zod (TypeScript-first schema validation). Installs `zod`.
12
+
13
+ ### Removed
14
+ - **RxDB**: Removed RxDB from the stack.
15
+
16
+ ## [0.1.12] - 2026-01-28
17
+
18
+ ### Added
19
+ - **RxDB**: Added optional integration for RxDB (Local-first, NoSQL database). Installs `rxdb` and `rxjs`.
20
+
8
21
  ## [0.1.11] - 2026-01-24
9
22
 
10
23
  ### Added
package/README.md CHANGED
@@ -26,6 +26,7 @@ During setup, you can interactively choose to add:
26
26
  - ๐Ÿ“ง **Resend** - The best API for sending emails.
27
27
  - โœ‰๏ธ **React Email** - Build emails using React components.
28
28
  - โšก **Supabase** - Open Source Firebase alternative (Auth, DB, Realtime).
29
+ - ๐Ÿงฉ **Zod** - TypeScript-first schema validation with static type inference.
29
30
  - ๐Ÿงช **Testing Tools** - Vitest & React Testing Library (Unit/Integration testing).
30
31
  - ๐Ÿ“š **Storybook** - Frontend workshop for UI development (Includes testing setup).
31
32
 
@@ -70,6 +71,7 @@ The CLI will guide you through the setup:
70
71
  - *Install Resend?* (Default: No)
71
72
  - *Install React Email?* (Default: No)
72
73
  - *Install Supabase?* (Default: Yes)
74
+ - *Install Zod?* (Default: Yes)
73
75
  - *Install Storybook?* (Default: No)
74
76
  - *If Yes*: Sets up Storybook environment.
75
77
  - *If No*: Asks to install *Testing Tools (Vitest)* separately.
@@ -92,6 +94,7 @@ pnpm create esa-stack <project-name> [options]
92
94
  | `--resend` / `--no-resend` | Install Resend | No |
93
95
  | `--react-email` / `--no-react-email` | Install React Email | No |
94
96
  | `--supabase` / `--no-supabase` | Install Supabase | Yes |
97
+ | `--zod` / `--no-zod` | Install Zod | Yes |
95
98
  | `--storybook` / `--no-storybook` | Install Storybook | No |
96
99
  | `--testing` / `--no-testing` | Install Vitest + RTL | Yes |
97
100
  | `--default`, `-y` | Skip prompts and use defaults | - |
package/dist/cli.js CHANGED
@@ -19,7 +19,7 @@ var __toESM = (mod, isNodeMode, target) => {
19
19
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
20
20
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
21
21
 
22
- // node_modules/.pnpm/sisteransi@1.0.5/node_modules/sisteransi/src/index.js
22
+ // ../../node_modules/.bun/sisteransi@1.0.5/node_modules/sisteransi/src/index.js
23
23
  var require_src = __commonJS((exports, module) => {
24
24
  var ESC = "\x1B";
25
25
  var CSI = `${ESC}[`;
@@ -77,7 +77,7 @@ var require_src = __commonJS((exports, module) => {
77
77
  module.exports = { cursor, scroll, erase, beep };
78
78
  });
79
79
 
80
- // node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js
80
+ // ../../node_modules/.bun/picocolors@1.1.1/node_modules/picocolors/picocolors.js
81
81
  var require_picocolors = __commonJS((exports, module) => {
82
82
  var p = process || {};
83
83
  var argv = p.argv || [];
@@ -147,7 +147,7 @@ var require_picocolors = __commonJS((exports, module) => {
147
147
  module.exports.createColors = createColors;
148
148
  });
149
149
 
150
- // node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/error.js
150
+ // ../../node_modules/.bun/commander@14.0.2/node_modules/commander/lib/error.js
151
151
  var require_error = __commonJS((exports) => {
152
152
  class CommanderError extends Error {
153
153
  constructor(exitCode, code, message) {
@@ -171,7 +171,7 @@ var require_error = __commonJS((exports) => {
171
171
  exports.InvalidArgumentError = InvalidArgumentError;
172
172
  });
173
173
 
174
- // node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/argument.js
174
+ // ../../node_modules/.bun/commander@14.0.2/node_modules/commander/lib/argument.js
175
175
  var require_argument = __commonJS((exports) => {
176
176
  var { InvalidArgumentError } = require_error();
177
177
 
@@ -251,7 +251,7 @@ var require_argument = __commonJS((exports) => {
251
251
  exports.humanReadableArgName = humanReadableArgName;
252
252
  });
253
253
 
254
- // node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/help.js
254
+ // ../../node_modules/.bun/commander@14.0.2/node_modules/commander/lib/help.js
255
255
  var require_help = __commonJS((exports) => {
256
256
  var { humanReadableArgName } = require_argument();
257
257
 
@@ -608,7 +608,7 @@ ${itemIndentStr}`);
608
608
  exports.stripColor = stripColor;
609
609
  });
610
610
 
611
- // node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/option.js
611
+ // ../../node_modules/.bun/commander@14.0.2/node_modules/commander/lib/option.js
612
612
  var require_option = __commonJS((exports) => {
613
613
  var { InvalidArgumentError } = require_error();
614
614
 
@@ -792,7 +792,7 @@ var require_option = __commonJS((exports) => {
792
792
  exports.DualOptions = DualOptions;
793
793
  });
794
794
 
795
- // node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/suggestSimilar.js
795
+ // ../../node_modules/.bun/commander@14.0.2/node_modules/commander/lib/suggestSimilar.js
796
796
  var require_suggestSimilar = __commonJS((exports) => {
797
797
  var maxDistance = 3;
798
798
  function editDistance(a3, b3) {
@@ -865,7 +865,7 @@ var require_suggestSimilar = __commonJS((exports) => {
865
865
  exports.suggestSimilar = suggestSimilar;
866
866
  });
867
867
 
868
- // node_modules/.pnpm/commander@14.0.2/node_modules/commander/lib/command.js
868
+ // ../../node_modules/.bun/commander@14.0.2/node_modules/commander/lib/command.js
869
869
  var require_command = __commonJS((exports) => {
870
870
  var EventEmitter = __require("node:events").EventEmitter;
871
871
  var childProcess = __require("node:child_process");
@@ -2220,7 +2220,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
2220
2220
  exports.useColor = useColor;
2221
2221
  });
2222
2222
 
2223
- // node_modules/.pnpm/commander@14.0.2/node_modules/commander/index.js
2223
+ // ../../node_modules/.bun/commander@14.0.2/node_modules/commander/index.js
2224
2224
  var require_commander = __commonJS((exports) => {
2225
2225
  var { Argument } = require_argument();
2226
2226
  var { Command } = require_command();
@@ -2240,7 +2240,7 @@ var require_commander = __commonJS((exports) => {
2240
2240
  exports.InvalidOptionArgumentError = InvalidArgumentError;
2241
2241
  });
2242
2242
 
2243
- // node_modules/.pnpm/@clack+core@0.3.5/node_modules/@clack/core/dist/index.mjs
2243
+ // ../../node_modules/.bun/@clack+core@0.3.5/node_modules/@clack/core/dist/index.mjs
2244
2244
  var import_sisteransi = __toESM(require_src(), 1);
2245
2245
  var import_picocolors = __toESM(require_picocolors(), 1);
2246
2246
  import { stdin as $, stdout as k } from "node:process";
@@ -2612,7 +2612,7 @@ function OD({ input: e = $, output: u = k, overwrite: F = true, hideCursor: t =
2612
2612
  };
2613
2613
  }
2614
2614
 
2615
- // node_modules/.pnpm/@clack+prompts@0.8.2/node_modules/@clack/prompts/dist/index.mjs
2615
+ // ../../node_modules/.bun/@clack+prompts@0.8.2/node_modules/@clack/prompts/dist/index.mjs
2616
2616
  var import_picocolors2 = __toESM(require_picocolors(), 1);
2617
2617
  var import_sisteransi2 = __toESM(require_src(), 1);
2618
2618
  import h from "node:process";
@@ -2739,7 +2739,7 @@ var _2 = () => {
2739
2739
  } };
2740
2740
  };
2741
2741
 
2742
- // node_modules/.pnpm/commander@14.0.2/node_modules/commander/esm.mjs
2742
+ // ../../node_modules/.bun/commander@14.0.2/node_modules/commander/esm.mjs
2743
2743
  var import__ = __toESM(require_commander(), 1);
2744
2744
  var {
2745
2745
  program,
@@ -2775,7 +2775,7 @@ function getVersion() {
2775
2775
  async function main() {
2776
2776
  const program2 = new Command;
2777
2777
  const version = getVersion();
2778
- program2.name("create-esa-stack").description("CLI tool to scaffold Next.js projects with ESA's preferred tech stack").version(version).argument("[project-name]", "Name of the project directory").option("--shadcn", "Install shadcn/ui").option("--no-shadcn", "Do not install shadcn/ui").option("--tanstack-query", "Install TanStack Query").option("--no-tanstack-query", "Do not install TanStack Query").option("--next-third-parties", "Install @next/third-parties").option("--no-next-third-parties", "Do not install @next/third-parties").option("--resend", "Install Resend").option("--no-resend", "Do not install Resend").option("--react-email", "Install React Email").option("--no-react-email", "Do not install React Email").option("--supabase", "Install Supabase").option("--no-supabase", "Do not install Supabase").option("--storybook", "Install Storybook").option("--no-storybook", "Do not install Storybook").option("--testing", "Install Testing tools (Vitest + RTL)").option("--no-testing", "Do not install Testing tools").option("-y, --default", "Skip prompts and use default values").parse(process.argv);
2778
+ program2.name("create-esa-stack").description("CLI tool to scaffold Next.js projects with ESA's preferred tech stack").version(version).argument("[project-name]", "Name of the project directory").option("--shadcn", "Install shadcn/ui").option("--no-shadcn", "Do not install shadcn/ui").option("--tanstack-query", "Install TanStack Query").option("--no-tanstack-query", "Do not install TanStack Query").option("--next-third-parties", "Install @next/third-parties").option("--no-next-third-parties", "Do not install @next/third-parties").option("--resend", "Install Resend").option("--no-resend", "Do not install Resend").option("--react-email", "Install React Email").option("--no-react-email", "Do not install React Email").option("--supabase", "Install Supabase").option("--no-supabase", "Do not install Supabase").option("--storybook", "Install Storybook").option("--no-storybook", "Do not install Storybook").option("--testing", "Install Testing tools (Vitest + RTL)").option("--no-testing", "Do not install Testing tools").option("--zod", "Install Zod").option("--no-zod", "Do not install Zod").option("-y, --default", "Skip prompts and use default values").parse(process.argv);
2779
2779
  const options = program2.opts();
2780
2780
  const [cliProjectName] = program2.args;
2781
2781
  const useDefaults = !!options.default;
@@ -2840,6 +2840,7 @@ async function main() {
2840
2840
  const installResend = await resolveOption(options.resend, false, "Do you want to install Resend?");
2841
2841
  const installReactEmail = await resolveOption(options.reactEmail, false, "Do you want to install React Email?");
2842
2842
  const installSupabase = await resolveOption(options.supabase, true, "Do you want to install Supabase?");
2843
+ const installZod = await resolveOption(options.zod, true, "Do you want to install Zod?");
2843
2844
  const installStorybook = await resolveOption(options.storybook, false, "Do you want to install Storybook?");
2844
2845
  let installTesting = false;
2845
2846
  if (installStorybook) {
@@ -2924,6 +2925,17 @@ Setting up Supabase...`);
2924
2925
  console.log("Installing supabase CLI...");
2925
2926
  execSync("pnpm add supabase -D -E", { stdio: "inherit", cwd: projectPath });
2926
2927
  }
2928
+ if (installZod) {
2929
+ console.log(`
2930
+ Setting up Zod...`);
2931
+ const hasNodeModules = existsSync(join(projectPath, "node_modules"));
2932
+ if (!hasNodeModules) {
2933
+ console.log("Installing dependencies...");
2934
+ execSync("pnpm install", { stdio: "inherit", cwd: projectPath });
2935
+ }
2936
+ console.log("Installing zod...");
2937
+ execSync("pnpm add zod", { stdio: "inherit", cwd: projectPath });
2938
+ }
2927
2939
  if (installTesting) {
2928
2940
  console.log(`
2929
2941
  Setting up Testing tools...`);
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "create-esa-stack",
3
- "version": "0.1.11",
4
- "description": "CLI tool to scaffold Next.js projects with ESA's preferred tech stack",
3
+ "version": "0.1.13",
4
+ "description": "CLI tool to scaffold Next.js projects with esa's preferred tech stack",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "create-esa-stack": "./dist/cli.js"
8
8
  },
9
9
  "scripts": {
10
+ "publish": "npm publish",
10
11
  "build": "bun build ./src/cli.ts --outdir ./dist --target node --format esm",
11
12
  "dev": "bun run ./src/cli.ts",
12
13
  "prepublishOnly": "bun run build"
@@ -29,7 +30,11 @@
29
30
  "shadcn",
30
31
  "tanstack-query"
31
32
  ],
32
- "author": "ESA Stack",
33
+ "author": {
34
+ "email": "mikhaelesaa@gmail.com",
35
+ "name": "mikhaelesa",
36
+ "url": "https://mikhael-esa.framer.website/"
37
+ },
33
38
  "license": "MIT",
34
39
  "repository": {
35
40
  "type": "git",
@@ -49,9 +54,6 @@
49
54
  "@clack/prompts": "^0.8.2",
50
55
  "commander": "^14.0.2"
51
56
  },
52
- "devDependencies": {
53
- "@types/bun": "latest"
54
- },
55
57
  "engines": {
56
58
  "node": ">=18.0.0"
57
59
  }