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 +13 -0
- package/README.md +3 -0
- package/dist/cli.js +25 -13
- package/package.json +8 -6
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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.
|
|
4
|
-
"description": "CLI tool to scaffold Next.js projects with
|
|
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":
|
|
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
|
}
|