create-mn-app 0.0.6 → 0.1.0

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/README.md CHANGED
@@ -11,26 +11,47 @@ cd my-app
11
11
  npm run setup
12
12
  ```
13
13
 
14
- ## Features
15
-
16
- - ⚔ **Zero configuration** - Works out of the box with sensible defaults
17
- - šŸ”§ **Modern tooling** - TypeScript, hot reloading, auto-compilation
18
- - šŸ›”ļø **Best practices** - Secure wallet generation, proper project structure
19
- - šŸš€ **Fast setup** - From zero to working app in 60 seconds
20
- - šŸŽÆ **Developer friendly** - Clear error messages, helpful guides
14
+ ## ✨ Features
15
+
16
+ - šŸŽÆ **Interactive Setup** - Guided project creation with template selection
17
+ - šŸ“¦ **Smart Package Manager** - Auto-detects your preferred package manager (npm/yarn/pnpm/bun)
18
+ - šŸ„ **Health Checks** - Verify your environment is ready before development
19
+ - ⚔ **Zero Configuration** - Works out of the box with sensible defaults
20
+ - šŸ”§ **Modern Tooling** - TypeScript, hot reloading, auto-compilation
21
+ - šŸ›”ļø **Best Practices** - Secure wallet generation, proper project structure
22
+ - šŸš€ **Fast Setup** - From zero to working app in 60 seconds
23
+ - ļæ½ **Helpful Errors** - Clear error messages with actionable solutions
21
24
  - šŸ“¦ **ES Modules** - Modern JavaScript module system
22
- - 🐳 **Docker integration** - Automated proof server setup
25
+ - 🐳 **Docker Integration** - Automated proof server setup
26
+
27
+ ## šŸš€ Quick Start
23
28
 
24
- ## Quick Start
29
+ ### Interactive Mode (Recommended)
25
30
 
26
31
  ```bash
27
- # Create a new Midnight app
32
+ npx create-mn-app
33
+ ```
34
+
35
+ You'll be prompted to:
36
+
37
+ 1. **Enter your project name** - Choose a descriptive name for your app
38
+ 2. **Select a template** - Pick from available templates or see what's coming soon
39
+ 3. **Choose configuration** - Package manager, git, and other options
40
+
41
+ ### Command Line Mode
42
+
43
+ ```bash
44
+ # Create with defaults
28
45
  npx create-mn-app my-midnight-app
29
46
 
30
- # Navigate to your project
31
- cd my-midnight-app
47
+ # Create with specific template
48
+ npx create-mn-app my-app --template hello-world
49
+
50
+ # Use specific package manager
51
+ npx create-mn-app my-app --use-pnpm
32
52
 
33
- # Setup and deploy your contract
53
+ # Navigate and setup
54
+ cd my-app
34
55
  npm run setup
35
56
  ```
36
57
 
@@ -46,7 +67,7 @@ Your generated project includes:
46
67
  - šŸ“‹ **Environment Config** - `.env` file with network configuration
47
68
  - šŸ”„ **Git Ready** - Initialized git repository with proper `.gitignore`
48
69
 
49
- ## Available Commands
70
+ ## šŸ“š Available Commands
50
71
 
51
72
  Once your project is created, you can run:
52
73
 
@@ -58,6 +79,19 @@ Complete setup pipeline:
58
79
  2. Builds TypeScript to JavaScript
59
80
  3. Deploys contracts to the network
60
81
 
82
+ ### `npm run health-check`
83
+
84
+ šŸ„ Verify your development environment:
85
+
86
+ - āœ“ Node.js version (18+)
87
+ - āœ“ Docker availability
88
+ - āœ“ Environment configuration
89
+ - āœ“ Wallet setup
90
+ - āœ“ Dependencies installed
91
+ - āœ“ Project built correctly
92
+
93
+ Run this command before development to catch issues early!
94
+
61
95
  ### `npm run cli`
62
96
 
63
97
  Opens an interactive command-line interface to:
@@ -67,6 +101,10 @@ Opens an interactive command-line interface to:
67
101
  - Retrieve stored messages
68
102
  - Test contract functionality
69
103
 
104
+ ### `npm run check-balance`
105
+
106
+ Checks your wallet balance. Useful for verifying if test tokens from the faucet have arrived before deploying.
107
+
70
108
  ### `npm run compile`
71
109
 
72
110
  Compiles your Compact smart contracts from `contracts/` to `contracts/managed/`
@@ -79,10 +117,6 @@ Builds your TypeScript source code to JavaScript in the `dist/` directory
79
117
 
80
118
  Deploys your compiled contract to the Midnight testnet
81
119
 
82
- ### `npm run check-balance`
83
-
84
- Checks your wallet balance. Useful for verifying if test tokens from the faucet have arrived before deploying.
85
-
86
120
  ## Project Structure
87
121
 
88
122
  ```
@@ -104,9 +138,13 @@ my-midnight-app/
104
138
  └── nodemon.json
105
139
  ```
106
140
 
107
- ## Templates
141
+ ## šŸŽØ Templates
142
+
143
+ Choose from various templates to kickstart your Midnight project:
108
144
 
109
- ### Hello World (Default)
145
+ ### āœ… Available Now
146
+
147
+ #### **Hello World** (Default)
110
148
 
111
149
  A simple message storage contract demonstrating:
112
150
 
@@ -115,7 +153,29 @@ A simple message storage contract demonstrating:
115
153
  - Contract deployment
116
154
  - Interactive testing
117
155
 
118
- **More templates coming soon!**
156
+ ```bash
157
+ npx create-mn-app my-app --template hello-world
158
+ ```
159
+
160
+ ### šŸ”œ Coming Soon
161
+
162
+ #### **Counter**
163
+
164
+ Simple increment/decrement app demonstrating state management
165
+
166
+ #### **Bulletin Board (Bboard)**
167
+
168
+ Bulletin board with multi-user interactions and privacy patterns
169
+
170
+ #### **Decentralized Exchange (DEX)**
171
+
172
+ Decentralized exchange using OpenZeppelin FungibleToken
173
+
174
+ #### **Midnight Kitties**
175
+
176
+ Full stack DApp using NFT smart contract library (Crypto Kitties on Midnight)
177
+
178
+ _These templates are under development. Star the repo to stay updated!_
119
179
 
120
180
  ## Requirements
121
181
 
@@ -123,34 +183,70 @@ A simple message storage contract demonstrating:
123
183
  - **Docker** (for running the proof server)
124
184
  - **npm**, **yarn**, or **pnpm** package manager
125
185
 
126
- ## Package Manager Options
186
+ ## šŸ“¦ Package Manager Options
127
187
 
128
- You can use your preferred package manager:
188
+ The CLI automatically detects your preferred package manager! It checks:
189
+
190
+ 1. Lock files in your directory (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb)
191
+ 2. Environment variables set by your package manager
192
+ 3. Available package managers on your system
193
+
194
+ You can also explicitly specify:
129
195
 
130
196
  ```bash
131
- # npm (default)
132
- npx create-mn-app my-app
197
+ # npm
198
+ npx create-mn-app my-app --use-npm
133
199
 
134
200
  # Yarn
135
- npx create-mn-app my-app --yarn
201
+ npx create-mn-app my-app --use-yarn
136
202
 
137
203
  # pnpm
138
- npx create-mn-app my-app --pnpm
204
+ npx create-mn-app my-app --use-pnpm
205
+
206
+ # Bun
207
+ npx create-mn-app my-app --use-bun
139
208
  ```
140
209
 
141
- ## Usage Options
210
+ All commands in the success message will use your chosen package manager! šŸŽ‰
211
+
212
+ ## āš™ļø CLI Options
142
213
 
143
214
  ```bash
144
215
  npx create-mn-app [project-name] [options]
145
216
 
217
+ Arguments:
218
+ project-name Name of your project (interactive prompt if omitted)
219
+
146
220
  Options:
147
- --template <name> Specify a template (default: hello-world)
148
- --yarn Use Yarn as package manager
149
- --pnpm Use pnpm as package manager
150
- --npm Use npm as package manager
151
- --skip-install Skip dependency installation
152
- --skip-git Skip git initialization
153
- -h, --help Display help information
221
+ -t, --template <name> Template to use (hello-world, counter, bboard, dex, midnight-kitties)
222
+ --use-npm Use npm as package manager
223
+ --use-yarn Use Yarn as package manager
224
+ --use-pnpm Use pnpm as package manager
225
+ --use-bun Use bun as package manager
226
+ --skip-install Skip dependency installation
227
+ --skip-git Skip git initialization
228
+ --verbose Show detailed output including stack traces
229
+ -h, --help Display help information
230
+ -V, --version Display version number
231
+ ```
232
+
233
+ ### Examples
234
+
235
+ ```bash
236
+ # Interactive mode (recommended)
237
+ npx create-mn-app
238
+
239
+ # With project name
240
+ npx create-mn-app my-midnight-dapp
241
+
242
+ # Specific template and package manager
243
+ npx create-mn-app my-dex --template dex --use-pnpm
244
+
245
+ # Skip installation (for CI/CD)
246
+ npx create-mn-app my-app --skip-install --skip-git
247
+
248
+ # Verbose output for debugging
249
+ npx create-mn-app my-app --verbose
154
250
  ```
155
251
 
156
252
  ## Environment Configuration
@@ -170,7 +266,34 @@ PROOF_SERVER_URL=http://localhost:6300
170
266
 
171
267
  āš ļø **Important**: Never commit your `.env` file or share your wallet seed phrase!
172
268
 
173
- ## Troubleshooting
269
+ ## šŸ”§ Troubleshooting
270
+
271
+ ### Node.js version error
272
+
273
+ If you see "Node.js Version Error":
274
+
275
+ ```bash
276
+ # Check your version
277
+ node --version
278
+
279
+ # Install Node.js 18+ from https://nodejs.org
280
+ # Or use nvm:
281
+ nvm install --lts
282
+ nvm use --lts
283
+ ```
284
+
285
+ The CLI automatically checks for Node.js 18+ before running!
286
+
287
+ ### Environment issues
288
+
289
+ Run the health check to diagnose problems:
290
+
291
+ ```bash
292
+ cd my-app
293
+ npm run health-check
294
+ ```
295
+
296
+ This will show you exactly what needs to be fixed. ✨
174
297
 
175
298
  ### Waiting for faucet funds
176
299
 
@@ -217,6 +340,21 @@ Ensure Docker Desktop is running before starting the development server:
217
340
 
218
341
  ```bash
219
342
  docker --version
343
+
344
+ # If not installed, get it from:
345
+ # https://docker.com
346
+ ```
347
+
348
+ ### Permission errors
349
+
350
+ If you encounter EACCES errors:
351
+
352
+ ```bash
353
+ # Fix npm permissions (recommended)
354
+ # See: https://docs.npmjs.com/resolving-eacces-permissions-errors
355
+
356
+ # Or use a version manager like nvm (better solution)
357
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
220
358
  ```
221
359
 
222
360
  ## Learn More
package/dist/cli.js CHANGED
@@ -5,28 +5,39 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const commander_1 = require("commander");
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
- const create_app_1 = require("./create-app");
8
+ const create_app_js_1 = require("./create-app.js");
9
+ const error_handler_js_1 = require("./utils/error-handler.js");
9
10
  const program = new commander_1.Command();
11
+ // Check Node.js version before anything else
12
+ error_handler_js_1.ErrorHandler.checkNodeVersion(18);
10
13
  program
11
14
  .name("create-midnight-app")
12
15
  .description("Create a new Midnight Network application")
13
- .version("1.0.0")
16
+ .version("0.1.0")
14
17
  .argument("[project-directory]", "Directory name for your project")
15
- .option("-t, --template <name>", "Template to use", "hello-world")
16
- .option("--use-npm", "Use npm instead of yarn")
17
- .option("--use-pnpm", "Use pnpm instead of yarn")
18
+ .option("-t, --template <name>", "Template to use (hello-world, counter, bboard, dex, midnight-kitties)")
19
+ .option("--use-npm", "Use npm explicitly")
20
+ .option("--use-yarn", "Use yarn explicitly")
21
+ .option("--use-pnpm", "Use pnpm explicitly")
22
+ .option("--use-bun", "Use bun explicitly")
18
23
  .option("--skip-install", "Skip package installation")
19
24
  .option("--skip-git", "Skip git repository initialization")
20
25
  .option("--verbose", "Show detailed output")
21
26
  .action(async (projectDirectory, options) => {
22
27
  console.log(chalk_1.default.blue.bold("šŸŒ™ Create Midnight App\n"));
23
28
  try {
24
- await (0, create_app_1.createApp)(projectDirectory, options);
29
+ await (0, create_app_js_1.createApp)(projectDirectory, options);
25
30
  }
26
31
  catch (error) {
27
- console.error(chalk_1.default.red("āœ– Error creating app:"), error instanceof Error ? error.message : error);
28
- if (options.verbose && error instanceof Error) {
29
- console.error(chalk_1.default.gray(error.stack));
32
+ console.error();
33
+ console.error(error_handler_js_1.ErrorHandler.formatError(error instanceof Error ? error : new Error(String(error)), "creating app"));
34
+ if (error instanceof Error) {
35
+ error_handler_js_1.ErrorHandler.suggestSolution(error);
36
+ if (options.verbose && error.stack) {
37
+ console.error(chalk_1.default.gray("Stack trace:"));
38
+ console.error(chalk_1.default.gray(error.stack));
39
+ console.error();
40
+ }
30
41
  }
31
42
  process.exit(1);
32
43
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,6CAAyC;AAEzC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,qBAAqB,CAAC;KAC3B,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAClE,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,aAAa,CAAC;KACjE,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;KAC9C,MAAM,CAAC,YAAY,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;KACrD,MAAM,CAAC,YAAY,EAAE,oCAAoC,CAAC;KAC1D,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE;IAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,IAAA,sBAAS,EAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAClC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC9C,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,mDAA4C;AAC5C,+DAAwD;AAExD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,6CAA6C;AAC7C,+BAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAElC,OAAO;KACJ,IAAI,CAAC,qBAAqB,CAAC;KAC3B,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAClE,MAAM,CACL,uBAAuB,EACvB,uEAAuE,CACxE;KACA,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACzC,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC;KAC3C,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACzC,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;KACrD,MAAM,CAAC,YAAY,EAAE,oCAAoC,CAAC;KAC1D,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE;IAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,IAAA,yBAAS,EAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CACX,+BAAY,CAAC,WAAW,CACtB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACzD,cAAc,CACf,CACF,CAAC;QAEF,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,+BAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC1C,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1,7 +1,9 @@
1
1
  export interface CreateAppOptions {
2
- template: string;
2
+ template?: string;
3
3
  useNpm?: boolean;
4
+ useYarn?: boolean;
4
5
  usePnpm?: boolean;
6
+ useBun?: boolean;
5
7
  skipInstall?: boolean;
6
8
  skipGit?: boolean;
7
9
  verbose?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,SAAS,CAC7B,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAwGf"}
1
+ {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,SAAS,CAC7B,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAyLf"}
@@ -9,14 +9,18 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
9
9
  const chalk_1 = __importDefault(require("chalk"));
10
10
  const ora_1 = __importDefault(require("ora"));
11
11
  const prompts_1 = __importDefault(require("prompts"));
12
- const validation_1 = require("./utils/validation");
13
- const package_installer_1 = require("./installers/package-installer");
14
- const template_manager_1 = require("./utils/template-manager");
15
- const wallet_generator_1 = require("./installers/wallet-generator");
16
- const proof_server_setup_1 = require("./installers/proof-server-setup");
17
- const git_utils_1 = require("./utils/git-utils");
12
+ const validation_js_1 = require("./utils/validation.js");
13
+ const package_installer_js_1 = require("./installers/package-installer.js");
14
+ const template_manager_js_1 = require("./utils/template-manager.js");
15
+ const wallet_generator_js_1 = require("./installers/wallet-generator.js");
16
+ const proof_server_setup_js_1 = require("./installers/proof-server-setup.js");
17
+ const git_utils_js_1 = require("./utils/git-utils.js");
18
+ const package_manager_js_1 = require("./utils/package-manager.js");
19
+ const templates_js_1 = require("./utils/templates.js");
18
20
  async function createApp(projectDirectory, options) {
19
21
  let projectName = projectDirectory;
22
+ let selectedTemplate = options.template || "hello-world";
23
+ let packageManager;
20
24
  // Interactive mode if no project name provided
21
25
  if (!projectName) {
22
26
  const response = await (0, prompts_1.default)({
@@ -25,7 +29,7 @@ async function createApp(projectDirectory, options) {
25
29
  message: "What is your project named?",
26
30
  initial: "my-midnight-app",
27
31
  validate: (value) => {
28
- const validation = (0, validation_1.validateProjectName)(value);
32
+ const validation = (0, validation_js_1.validateProjectName)(value);
29
33
  return validation.valid || validation.problems[0];
30
34
  },
31
35
  });
@@ -35,7 +39,66 @@ async function createApp(projectDirectory, options) {
35
39
  }
36
40
  projectName = response.projectName;
37
41
  }
38
- const validation = (0, validation_1.validateProjectName)(projectName);
42
+ // Template selection if not provided
43
+ if (!options.template) {
44
+ const allTemplates = (0, templates_js_1.getAllTemplates)();
45
+ const templateChoices = allTemplates.map((t) => ({
46
+ title: t.comingSoon
47
+ ? `${t.display} ${chalk_1.default.gray("(Coming Soon)")}`
48
+ : t.display,
49
+ value: t.name,
50
+ description: t.description,
51
+ disabled: !t.available,
52
+ }));
53
+ const response = await (0, prompts_1.default)({
54
+ type: "select",
55
+ name: "template",
56
+ message: "Which template would you like to use?",
57
+ choices: templateChoices,
58
+ initial: 0,
59
+ });
60
+ if (!response.template) {
61
+ console.log(chalk_1.default.yellow("\nāœ– Operation cancelled."));
62
+ process.exit(0);
63
+ }
64
+ selectedTemplate = response.template;
65
+ }
66
+ // Validate template
67
+ if (!(0, templates_js_1.isValidTemplate)(selectedTemplate)) {
68
+ const template = (0, templates_js_1.getTemplate)(selectedTemplate);
69
+ if (template && template.comingSoon) {
70
+ console.error(chalk_1.default.red(`āœ– Template "${selectedTemplate}" is coming soon!`));
71
+ console.log(chalk_1.default.yellow("\nšŸ“¢ Available templates:"));
72
+ (0, templates_js_1.getAllTemplates)()
73
+ .filter((t) => t.available)
74
+ .forEach((t) => {
75
+ console.log(` • ${chalk_1.default.cyan(t.name)} - ${t.description}`);
76
+ });
77
+ }
78
+ else {
79
+ console.error(chalk_1.default.red(`āœ– Template "${selectedTemplate}" not found.`));
80
+ }
81
+ process.exit(1);
82
+ }
83
+ // Detect or select package manager
84
+ if (options.useNpm) {
85
+ packageManager = "npm";
86
+ }
87
+ else if (options.useYarn) {
88
+ packageManager = "yarn";
89
+ }
90
+ else if (options.usePnpm) {
91
+ packageManager = "pnpm";
92
+ }
93
+ else if (options.useBun) {
94
+ packageManager = "bun";
95
+ }
96
+ else {
97
+ packageManager = (0, package_manager_js_1.detectPackageManager)();
98
+ console.log(chalk_1.default.gray(`ℹ Detected package manager: ${chalk_1.default.cyan(packageManager)}\n`));
99
+ }
100
+ const pmInfo = (0, package_manager_js_1.getPackageManagerInfo)(packageManager);
101
+ const validation = (0, validation_js_1.validateProjectName)(projectName);
39
102
  if (!validation.valid) {
40
103
  console.error(chalk_1.default.red(`āœ– Invalid project name: ${validation.problems[0]}`));
41
104
  process.exit(1);
@@ -56,8 +119,10 @@ async function createApp(projectDirectory, options) {
56
119
  await fs_extra_1.default.remove(projectPath);
57
120
  }
58
121
  console.log(`Creating a new Midnight app in ${chalk_1.default.green(projectPath)}.\n`);
122
+ console.log(chalk_1.default.gray(`Template: ${chalk_1.default.cyan(selectedTemplate)}`));
123
+ console.log();
59
124
  // Main creation process
60
- await createProject(projectPath, projectName, options);
125
+ await createProject(projectPath, projectName, selectedTemplate, packageManager, options);
61
126
  // Success message and instructions
62
127
  console.log();
63
128
  console.log(chalk_1.default.green.bold("━".repeat(60)));
@@ -73,20 +138,26 @@ async function createApp(projectDirectory, options) {
73
138
  console.log(` ${chalk_1.default.cyan(`cd ${projectName}`)}`);
74
139
  console.log();
75
140
  console.log(chalk_1.default.yellow(" 2.") + " Setup and deploy your contract:");
76
- console.log(` ${chalk_1.default.cyan("npm run setup")}`);
141
+ console.log(` ${chalk_1.default.cyan(`${pmInfo.runCommand} setup`)}`);
77
142
  console.log();
78
143
  console.log(chalk_1.default.white.bold("šŸ“š Available Commands:"));
79
144
  console.log();
80
- console.log(` ${chalk_1.default.cyan("npm run setup")}`);
145
+ console.log(` ${chalk_1.default.cyan(`${pmInfo.runCommand} setup`)}`);
81
146
  console.log(chalk_1.default.gray(" Compile contract, build, and deploy"));
82
147
  console.log();
83
- console.log(` ${chalk_1.default.cyan("npm run cli")}`);
148
+ console.log(` ${chalk_1.default.cyan(`${pmInfo.runCommand} cli`)}`);
84
149
  console.log(chalk_1.default.gray(" Interactive CLI to test your contract"));
85
150
  console.log();
86
- console.log(` ${chalk_1.default.cyan("npm run compile")}`);
151
+ console.log(` ${chalk_1.default.cyan(`${pmInfo.runCommand} check-balance`)}`);
152
+ console.log(chalk_1.default.gray(" Check your wallet balance"));
153
+ console.log();
154
+ console.log(` ${chalk_1.default.cyan(`${pmInfo.runCommand} health-check`)}`);
155
+ console.log(chalk_1.default.gray(" Verify your environment setup"));
156
+ console.log();
157
+ console.log(` ${chalk_1.default.cyan(`${pmInfo.runCommand} compile`)}`);
87
158
  console.log(chalk_1.default.gray(" Compile Compact contracts"));
88
159
  console.log();
89
- console.log(` ${chalk_1.default.cyan("npm run build")}`);
160
+ console.log(` ${chalk_1.default.cyan(`${pmInfo.runCommand} build`)}`);
90
161
  console.log(chalk_1.default.gray(" Build TypeScript to JavaScript"));
91
162
  console.log();
92
163
  console.log(chalk_1.default.green.bold("━".repeat(60)));
@@ -99,19 +170,15 @@ async function createApp(projectDirectory, options) {
99
170
  console.log(chalk_1.default.white("Happy coding! ") + chalk_1.default.yellow("šŸŒ™āœØ"));
100
171
  console.log();
101
172
  }
102
- async function createProject(projectPath, projectName, options) {
103
- const packageManager = options.usePnpm
104
- ? "pnpm"
105
- : options.useNpm
106
- ? "npm"
107
- : "yarn";
173
+ async function createProject(projectPath, projectName, template, packageManager, options) {
174
+ const pmInfo = (0, package_manager_js_1.getPackageManagerInfo)(packageManager);
108
175
  // Create project directory
109
176
  await fs_extra_1.default.ensureDir(projectPath);
110
177
  process.chdir(projectPath);
111
178
  // Initialize template
112
179
  const templateSpinner = (0, ora_1.default)("Creating project structure...").start();
113
180
  try {
114
- const templateManager = new template_manager_1.TemplateManager(options.template);
181
+ const templateManager = new template_manager_js_1.TemplateManager(template);
115
182
  await templateManager.scaffold(projectPath, projectName);
116
183
  templateSpinner.succeed("Project structure created");
117
184
  }
@@ -122,7 +189,7 @@ async function createProject(projectPath, projectName, options) {
122
189
  // Generate wallet
123
190
  const walletSpinner = (0, ora_1.default)("Generating secure wallet...").start();
124
191
  try {
125
- const walletGenerator = new wallet_generator_1.WalletGenerator();
192
+ const walletGenerator = new wallet_generator_js_1.WalletGenerator();
126
193
  const walletSeed = await walletGenerator.generate(projectPath);
127
194
  walletSpinner.succeed(`Wallet generated (seed: ${walletSeed.substring(0, 8)}...)`);
128
195
  }
@@ -134,21 +201,21 @@ async function createProject(projectPath, projectName, options) {
134
201
  if (!options.skipInstall) {
135
202
  const installSpinner = (0, ora_1.default)(`Installing dependencies with ${packageManager}...`).start();
136
203
  try {
137
- const installer = new package_installer_1.PackageInstaller(packageManager);
204
+ const installer = new package_installer_js_1.PackageInstaller(packageManager);
138
205
  await installer.install(projectPath);
139
206
  installSpinner.succeed("Dependencies installed");
140
207
  }
141
208
  catch (error) {
142
209
  installSpinner.fail("Failed to install dependencies");
143
210
  console.log(chalk_1.default.yellow("\n⚠ You can install dependencies manually by running:"));
144
- console.log(chalk_1.default.cyan(` ${packageManager} install`));
211
+ console.log(chalk_1.default.cyan(` ${pmInfo.installCommand}`));
145
212
  }
146
213
  }
147
214
  // Initialize git
148
215
  if (!options.skipGit) {
149
216
  const gitSpinner = (0, ora_1.default)("Initializing git repository...").start();
150
217
  try {
151
- await git_utils_1.GitUtils.init(projectPath);
218
+ await git_utils_js_1.GitUtils.init(projectPath);
152
219
  gitSpinner.succeed("Git repository initialized");
153
220
  }
154
221
  catch (error) {
@@ -158,7 +225,7 @@ async function createProject(projectPath, projectName, options) {
158
225
  // Check Docker for proof server
159
226
  const proofSpinner = (0, ora_1.default)("Checking Docker for proof server...").start();
160
227
  try {
161
- const proofSetup = new proof_server_setup_1.ProofServerSetup();
228
+ const proofSetup = new proof_server_setup_js_1.ProofServerSetup();
162
229
  const isAvailable = await proofSetup.verify();
163
230
  if (isAvailable) {
164
231
  proofSpinner.succeed("Docker is ready for proof server");
@@ -174,12 +241,12 @@ async function createProject(projectPath, projectName, options) {
174
241
  if (!options.skipInstall) {
175
242
  const compileSpinner = (0, ora_1.default)("Compiling initial contract...").start();
176
243
  try {
177
- const installer = new package_installer_1.PackageInstaller(packageManager);
244
+ const installer = new package_installer_js_1.PackageInstaller(packageManager);
178
245
  await installer.runScript(projectPath, "compile");
179
246
  compileSpinner.succeed("Contract compiled successfully");
180
247
  }
181
248
  catch (error) {
182
- compileSpinner.warn('Contract compilation skipped - run "npm run compile" manually');
249
+ compileSpinner.warn(`Contract compilation skipped - run "${pmInfo.runCommand} compile" manually`);
183
250
  }
184
251
  }
185
252
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create-app.js","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-app.js","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export declare class PackageInstaller {
2
2
  private packageManager;
3
- constructor(packageManager: "npm" | "yarn" | "pnpm");
3
+ constructor(packageManager: "npm" | "yarn" | "pnpm" | "bun");
4
4
  install(projectPath: string): Promise<void>;
5
5
  runScript(projectPath: string, script: string): Promise<void>;
6
6
  static detectPackageManager(): "npm" | "yarn" | "pnpm";
@@ -1 +1 @@
1
- {"version":3,"file":"package-installer.d.ts","sourceRoot":"","sources":["../../src/installers/package-installer.ts"],"names":[],"mappings":"AAGA,qBAAa,gBAAgB;IACf,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM;IAErD,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC3C,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE,MAAM,CAAC,oBAAoB,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM;CASvD"}
1
+ {"version":3,"file":"package-installer.d.ts","sourceRoot":"","sources":["../../src/installers/package-installer.ts"],"names":[],"mappings":"AAGA,qBAAa,gBAAgB;IACf,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK;IAE7D,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC3C,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE,MAAM,CAAC,oBAAoB,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM;CASvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-installer.js","sourceRoot":"","sources":["../../src/installers/package-installer.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AAGpC,MAAa,gBAAgB;IAC3B,YAAoB,cAAuC;QAAvC,mBAAc,GAAd,cAAc,CAAyB;IAAG,CAAC;IAE/D,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,IAAA,mBAAK,EAAC,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,EAAE;gBACpD,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CACJ,IAAI,KAAK,CACP,yCAAyC,IAAI,MAAM,MAAM,EAAE,CAC5D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,WAAmB,EAAE,MAAc;QACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAExE,MAAM,KAAK,GAAG,IAAA,mBAAK,EAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;gBAC7C,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,MAAM,sBAAsB,IAAI,EAAE,CAAC,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,oBAAoB;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAjED,4CAiEC"}
1
+ {"version":3,"file":"package-installer.js","sourceRoot":"","sources":["../../src/installers/package-installer.ts"],"names":[],"mappings":";;;AAAA,6CAAoC;AAGpC,MAAa,gBAAgB;IAC3B,YAAoB,cAA+C;QAA/C,mBAAc,GAAd,cAAc,CAAiC;IAAG,CAAC;IAEvE,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,IAAA,mBAAK,EAAC,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,EAAE;gBACpD,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CACJ,IAAI,KAAK,CACP,yCAAyC,IAAI,MAAM,MAAM,EAAE,CAC5D,CACF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,WAAmB,EAAE,MAAc;QACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAExE,MAAM,KAAK,GAAG,IAAA,mBAAK,EAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;gBAC7C,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,MAAM,sBAAsB,IAAI,EAAE,CAAC,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,oBAAoB;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAjED,4CAiEC"}
@@ -0,0 +1,27 @@
1
+ export declare class ErrorHandler {
2
+ /**
3
+ * Check if Node.js version meets requirements
4
+ */
5
+ static checkNodeVersion(minVersion?: number): void;
6
+ /**
7
+ * Check if Docker is available
8
+ */
9
+ static checkDocker(): boolean;
10
+ /**
11
+ * Format error with helpful context
12
+ */
13
+ static formatError(error: Error, context?: string): string;
14
+ /**
15
+ * Suggest solutions based on error type
16
+ */
17
+ static suggestSolution(error: Error): void;
18
+ /**
19
+ * Display warning message
20
+ */
21
+ static warn(message: string, details?: string): void;
22
+ /**
23
+ * Display info message
24
+ */
25
+ static info(message: string, details?: string): void;
26
+ }
27
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAGA,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,UAAU,GAAE,MAAW,GAAG,IAAI;IAyBtD;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,OAAO;IAS7B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAc1D;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAiD1C;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IASpD;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAQrD"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ErrorHandler = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const child_process_1 = require("child_process");
9
+ class ErrorHandler {
10
+ /**
11
+ * Check if Node.js version meets requirements
12
+ */
13
+ static checkNodeVersion(minVersion = 18) {
14
+ const version = process.version;
15
+ const major = parseInt(version.slice(1).split(".")[0]);
16
+ if (major < minVersion) {
17
+ console.error(chalk_1.default.red.bold("\nāœ– Node.js Version Error\n"));
18
+ console.error(chalk_1.default.white(`You are using Node.js ${version}, but this tool requires Node.js ${minVersion} or higher.`));
19
+ console.error();
20
+ console.error(chalk_1.default.yellow("šŸ“– How to fix:"));
21
+ console.error(chalk_1.default.gray(" 1. Visit https://nodejs.org/ to download the latest version"));
22
+ console.error(chalk_1.default.gray(" 2. Or use nvm: nvm install --lts"));
23
+ console.error(chalk_1.default.gray(" 3. Then run this command again"));
24
+ console.error();
25
+ process.exit(1);
26
+ }
27
+ }
28
+ /**
29
+ * Check if Docker is available
30
+ */
31
+ static checkDocker() {
32
+ try {
33
+ (0, child_process_1.execSync)("docker --version", { stdio: "ignore" });
34
+ return true;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ /**
41
+ * Format error with helpful context
42
+ */
43
+ static formatError(error, context) {
44
+ let message = chalk_1.default.red.bold("āœ– Error");
45
+ if (context) {
46
+ message += chalk_1.default.red(` (${context})`);
47
+ }
48
+ message += "\n\n";
49
+ message += chalk_1.default.white(error.message);
50
+ message += "\n";
51
+ return message;
52
+ }
53
+ /**
54
+ * Suggest solutions based on error type
55
+ */
56
+ static suggestSolution(error) {
57
+ const errorMsg = error.message.toLowerCase();
58
+ console.error();
59
+ console.error(chalk_1.default.yellow.bold("šŸ’” Possible Solutions:\n"));
60
+ if (errorMsg.includes("eacces") || errorMsg.includes("permission")) {
61
+ console.error(chalk_1.default.gray(" • Try running with sudo (not recommended)"));
62
+ console.error(chalk_1.default.gray(" • Fix npm permissions: https://docs.npmjs.com/resolving-eacces-permissions-errors"));
63
+ console.error(chalk_1.default.gray(" • Use a version manager like nvm"));
64
+ }
65
+ else if (errorMsg.includes("enoent") || errorMsg.includes("not found")) {
66
+ console.error(chalk_1.default.gray(" • Check if the file or command exists"));
67
+ console.error(chalk_1.default.gray(" • Verify your PATH environment variable"));
68
+ console.error(chalk_1.default.gray(" • Try reinstalling the required dependencies"));
69
+ }
70
+ else if (errorMsg.includes("network") || errorMsg.includes("timeout")) {
71
+ console.error(chalk_1.default.gray(" • Check your internet connection"));
72
+ console.error(chalk_1.default.gray(" • Try again in a few moments"));
73
+ console.error(chalk_1.default.gray(" • Check if npm registry is accessible"));
74
+ }
75
+ else if (errorMsg.includes("compile") || errorMsg.includes("syntax")) {
76
+ console.error(chalk_1.default.gray(" • Check for typos in your Compact contracts"));
77
+ console.error(chalk_1.default.gray(" • Verify contract syntax is valid"));
78
+ console.error(chalk_1.default.gray(" • Review Compact documentation"));
79
+ }
80
+ else if (errorMsg.includes("docker")) {
81
+ console.error(chalk_1.default.gray(" • Make sure Docker Desktop is running"));
82
+ console.error(chalk_1.default.gray(" • Install Docker from https://docker.com"));
83
+ console.error(chalk_1.default.gray(" • Check Docker service status"));
84
+ }
85
+ else {
86
+ console.error(chalk_1.default.gray(" • Check the error message above for details"));
87
+ console.error(chalk_1.default.gray(" • Try running with --verbose for more information"));
88
+ console.error(chalk_1.default.gray(" • Visit https://docs.midnight.network for help"));
89
+ }
90
+ console.error();
91
+ }
92
+ /**
93
+ * Display warning message
94
+ */
95
+ static warn(message, details) {
96
+ console.warn(chalk_1.default.yellow.bold("⚠ Warning"));
97
+ console.warn(chalk_1.default.white(message));
98
+ if (details) {
99
+ console.warn(chalk_1.default.gray(details));
100
+ }
101
+ console.warn();
102
+ }
103
+ /**
104
+ * Display info message
105
+ */
106
+ static info(message, details) {
107
+ console.log(chalk_1.default.blue.bold("ℹ Info"));
108
+ console.log(chalk_1.default.white(message));
109
+ if (details) {
110
+ console.log(chalk_1.default.gray(details));
111
+ }
112
+ console.log();
113
+ }
114
+ }
115
+ exports.ErrorHandler = ErrorHandler;
116
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type PackageManager = "npm" | "yarn" | "pnpm" | "bun";
2
+ export interface PackageManagerInfo {
3
+ name: PackageManager;
4
+ lockFile: string;
5
+ installCommand: string;
6
+ runCommand: string;
7
+ addCommand: string;
8
+ }
9
+ /**
10
+ * Detect package manager from current directory lockfiles
11
+ */
12
+ export declare function detectPackageManager(cwd?: string): PackageManager;
13
+ /**
14
+ * Get package manager info
15
+ */
16
+ export declare function getPackageManagerInfo(pm: PackageManager): PackageManagerInfo;
17
+ /**
18
+ * Check if a package manager is available
19
+ */
20
+ export declare function isPackageManagerAvailable(pm: PackageManager): boolean;
21
+ //# sourceMappingURL=package-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAiCD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAsB,GAC1B,cAAc,CA4ChB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,cAAc,GAAG,kBAAkB,CAE5E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAOrE"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectPackageManager = detectPackageManager;
7
+ exports.getPackageManagerInfo = getPackageManagerInfo;
8
+ exports.isPackageManagerAvailable = isPackageManagerAvailable;
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const child_process_1 = require("child_process");
12
+ const packageManagers = {
13
+ npm: {
14
+ name: "npm",
15
+ lockFile: "package-lock.json",
16
+ installCommand: "npm install",
17
+ runCommand: "npm run",
18
+ addCommand: "npm install",
19
+ },
20
+ yarn: {
21
+ name: "yarn",
22
+ lockFile: "yarn.lock",
23
+ installCommand: "yarn",
24
+ runCommand: "yarn",
25
+ addCommand: "yarn add",
26
+ },
27
+ pnpm: {
28
+ name: "pnpm",
29
+ lockFile: "pnpm-lock.yaml",
30
+ installCommand: "pnpm install",
31
+ runCommand: "pnpm",
32
+ addCommand: "pnpm add",
33
+ },
34
+ bun: {
35
+ name: "bun",
36
+ lockFile: "bun.lockb",
37
+ installCommand: "bun install",
38
+ runCommand: "bun run",
39
+ addCommand: "bun add",
40
+ },
41
+ };
42
+ /**
43
+ * Detect package manager from current directory lockfiles
44
+ */
45
+ function detectPackageManager(cwd = process.cwd()) {
46
+ // Check for lockfiles in current directory
47
+ for (const [pm, info] of Object.entries(packageManagers)) {
48
+ if (fs_extra_1.default.existsSync(path_1.default.join(cwd, info.lockFile))) {
49
+ return pm;
50
+ }
51
+ }
52
+ // Check parent directory (useful when running from project root)
53
+ const parentDir = path_1.default.dirname(cwd);
54
+ if (parentDir !== cwd) {
55
+ for (const [pm, info] of Object.entries(packageManagers)) {
56
+ if (fs_extra_1.default.existsSync(path_1.default.join(parentDir, info.lockFile))) {
57
+ return pm;
58
+ }
59
+ }
60
+ }
61
+ // Check user agent (npm_config_user_agent is set by package managers)
62
+ const userAgent = process.env.npm_config_user_agent || "";
63
+ if (userAgent.includes("bun"))
64
+ return "bun";
65
+ if (userAgent.includes("pnpm"))
66
+ return "pnpm";
67
+ if (userAgent.includes("yarn"))
68
+ return "yarn";
69
+ if (userAgent.includes("npm"))
70
+ return "npm";
71
+ // Check if package managers are available
72
+ try {
73
+ (0, child_process_1.execSync)("pnpm --version", { stdio: "ignore" });
74
+ return "pnpm";
75
+ }
76
+ catch { }
77
+ try {
78
+ (0, child_process_1.execSync)("yarn --version", { stdio: "ignore" });
79
+ return "yarn";
80
+ }
81
+ catch { }
82
+ try {
83
+ (0, child_process_1.execSync)("bun --version", { stdio: "ignore" });
84
+ return "bun";
85
+ }
86
+ catch { }
87
+ // Default to npm (always available with Node.js)
88
+ return "npm";
89
+ }
90
+ /**
91
+ * Get package manager info
92
+ */
93
+ function getPackageManagerInfo(pm) {
94
+ return packageManagers[pm];
95
+ }
96
+ /**
97
+ * Check if a package manager is available
98
+ */
99
+ function isPackageManagerAvailable(pm) {
100
+ try {
101
+ (0, child_process_1.execSync)(`${pm} --version`, { stdio: "ignore" });
102
+ return true;
103
+ }
104
+ catch {
105
+ return false;
106
+ }
107
+ }
108
+ //# sourceMappingURL=package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface Template {
2
+ name: string;
3
+ display: string;
4
+ description: string;
5
+ available: boolean;
6
+ comingSoon?: boolean;
7
+ }
8
+ export declare const templates: Template[];
9
+ /**
10
+ * Get available templates for selection
11
+ */
12
+ export declare function getAvailableTemplates(): Template[];
13
+ /**
14
+ * Get all templates including coming soon
15
+ */
16
+ export declare function getAllTemplates(): Template[];
17
+ /**
18
+ * Get template by name
19
+ */
20
+ export declare function getTemplate(name: string): Template | undefined;
21
+ /**
22
+ * Validate template name
23
+ */
24
+ export declare function isValidTemplate(name: string): boolean;
25
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,SAAS,EAAE,QAAQ,EAsC/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,EAAE,CAElD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,EAAE,CAE5C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrD"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.templates = void 0;
4
+ exports.getAvailableTemplates = getAvailableTemplates;
5
+ exports.getAllTemplates = getAllTemplates;
6
+ exports.getTemplate = getTemplate;
7
+ exports.isValidTemplate = isValidTemplate;
8
+ exports.templates = [
9
+ {
10
+ name: "hello-world",
11
+ display: "Hello World",
12
+ description: "Simple starter template with basic contract deployment",
13
+ available: true,
14
+ },
15
+ {
16
+ name: "counter",
17
+ display: "Counter",
18
+ description: "Simple increment/decrement app demonstrating state management",
19
+ available: false,
20
+ comingSoon: true,
21
+ },
22
+ {
23
+ name: "bboard",
24
+ display: "Bulletin Board (Bboard)",
25
+ description: "Bulletin board with multi-user interactions and privacy patterns",
26
+ available: false,
27
+ comingSoon: true,
28
+ },
29
+ {
30
+ name: "dex",
31
+ display: "Decentralized Exchange (DEX)",
32
+ description: "Decentralized exchange using OpenZeppelin FungibleToken",
33
+ available: false,
34
+ comingSoon: true,
35
+ },
36
+ {
37
+ name: "midnight-kitties",
38
+ display: "Midnight Kitties",
39
+ description: "Full stack DApp using NFT smart contract library (Crypto Kitties on Midnight)",
40
+ available: false,
41
+ comingSoon: true,
42
+ },
43
+ ];
44
+ /**
45
+ * Get available templates for selection
46
+ */
47
+ function getAvailableTemplates() {
48
+ return exports.templates.filter((t) => t.available);
49
+ }
50
+ /**
51
+ * Get all templates including coming soon
52
+ */
53
+ function getAllTemplates() {
54
+ return exports.templates;
55
+ }
56
+ /**
57
+ * Get template by name
58
+ */
59
+ function getTemplate(name) {
60
+ return exports.templates.find((t) => t.name === name);
61
+ }
62
+ /**
63
+ * Validate template name
64
+ */
65
+ function isValidTemplate(name) {
66
+ const template = getTemplate(name);
67
+ return template !== undefined && template.available;
68
+ }
69
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":";;;AAmDA,sDAEC;AAKD,0CAEC;AAKD,kCAEC;AAKD,0CAGC;AAnEY,QAAA,SAAS,GAAe;IACnC;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,wDAAwD;QACrE,SAAS,EAAE,IAAI;KAChB;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,SAAS;QAClB,WAAW,EACT,+DAA+D;QACjE,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,yBAAyB;QAClC,WAAW,EACT,kEAAkE;QACpE,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,8BAA8B;QACvC,WAAW,EAAE,yDAAyD;QACtE,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EACT,+EAA+E;QACjF,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI;KACjB;CACF,CAAC;AAEF;;GAEG;AACH,SAAgB,qBAAqB;IACnC,OAAO,iBAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,OAAO,iBAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,IAAY;IACtC,OAAO,iBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC;AACtD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-mn-app",
3
- "version": "0.0.6",
3
+ "version": "0.1.0",
4
4
  "description": "Create Midnight Network applications with zero configuration",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -46,7 +46,7 @@
46
46
  "@types/fs-extra": "^11.0.1",
47
47
  "@types/mustache": "^4.2.2",
48
48
  "@types/node": "^20.0.0",
49
- "@types/prompts": "^2.4.4",
49
+ "@types/prompts": "^2.4.9",
50
50
  "@types/validate-npm-package-name": "^4.0.2",
51
51
  "typescript": "^5.0.0"
52
52
  },
@@ -14,6 +14,7 @@
14
14
  "deploy": "node dist/deploy.js",
15
15
  "cli": "node dist/cli.js",
16
16
  "check-balance": "npm run build && node dist/check-balance.js",
17
+ "health-check": "npm run build && node dist/health-check.js",
17
18
  "reset": "rm -rf contracts/managed deployment.json dist && npm run compile",
18
19
  "validate": "tsc --noEmit && npm run compile",
19
20
  "clean": "rm -rf dist contracts/managed deployment.json",
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+ import { execSync } from "child_process";
3
+ import fs from "fs";
4
+ import chalk from "chalk";
5
+
6
+ interface HealthCheck {
7
+ name: string;
8
+ check: () => Promise<boolean>;
9
+ message: string;
10
+ error?: string;
11
+ }
12
+
13
+ const checks: HealthCheck[] = [
14
+ {
15
+ name: "Node.js Version",
16
+ message: "Checking Node.js version (>= 18.0.0)...",
17
+ check: async () => {
18
+ const version = process.version;
19
+ const major = parseInt(version.slice(1).split(".")[0]);
20
+ return major >= 18;
21
+ },
22
+ error: "Node.js 18 or higher is required. Please upgrade Node.js.",
23
+ },
24
+ {
25
+ name: "Docker",
26
+ message: "Checking Docker availability...",
27
+ check: async () => {
28
+ try {
29
+ execSync("docker --version", { stdio: "ignore" });
30
+ return true;
31
+ } catch {
32
+ return false;
33
+ }
34
+ },
35
+ error: "Docker is not installed or not running. Install Docker to use the proof server.",
36
+ },
37
+ {
38
+ name: "Environment File",
39
+ message: "Checking .env configuration...",
40
+ check: async () => {
41
+ return fs.existsSync(".env");
42
+ },
43
+ error: ".env file not found. Run 'npm run setup' first.",
44
+ },
45
+ {
46
+ name: "Wallet Seed",
47
+ message: "Checking wallet configuration...",
48
+ check: async () => {
49
+ if (!fs.existsSync(".env")) return false;
50
+ const envContent = fs.readFileSync(".env", "utf-8");
51
+ return envContent.includes("WALLET_SEED=");
52
+ },
53
+ error: "WALLET_SEED not found in .env. Run 'npm run setup' to generate a wallet.",
54
+ },
55
+ {
56
+ name: "Dependencies",
57
+ message: "Checking node_modules...",
58
+ check: async () => {
59
+ return fs.existsSync("node_modules");
60
+ },
61
+ error: "Dependencies not installed. Run 'npm install' first.",
62
+ },
63
+ {
64
+ name: "Contract Compilation",
65
+ message: "Checking compiled contracts...",
66
+ check: async () => {
67
+ return fs.existsSync("dist") || fs.existsSync("build");
68
+ },
69
+ error: "Project not built. Run 'npm run compile' and 'npm run build'.",
70
+ },
71
+ ];
72
+
73
+ async function runHealthCheck() {
74
+ console.log(chalk.blue.bold("\nšŸ„ Midnight App Health Check\n"));
75
+
76
+ let passed = 0;
77
+ let failed = 0;
78
+
79
+ for (const check of checks) {
80
+ process.stdout.write(chalk.gray(`ā³ ${check.message} `));
81
+
82
+ try {
83
+ const result = await check.check();
84
+
85
+ if (result) {
86
+ console.log(chalk.green("āœ“ Passed"));
87
+ passed++;
88
+ } else {
89
+ console.log(chalk.red("āœ— Failed"));
90
+ if (check.error) {
91
+ console.log(chalk.yellow(` ${check.error}`));
92
+ }
93
+ failed++;
94
+ }
95
+ } catch (error) {
96
+ console.log(chalk.red("āœ— Error"));
97
+ console.log(chalk.yellow(` ${check.error || "Unknown error"}`));
98
+ failed++;
99
+ }
100
+ }
101
+
102
+ console.log();
103
+ console.log(chalk.bold("━".repeat(60)));
104
+ console.log(
105
+ chalk.bold(
106
+ `Results: ${chalk.green(`${passed} passed`)} | ${chalk.red(`${failed} failed`)}`
107
+ )
108
+ );
109
+ console.log(chalk.bold("━".repeat(60)));
110
+
111
+ if (failed === 0) {
112
+ console.log(chalk.green.bold("\nāœ“ All checks passed! Your environment is ready.\n"));
113
+ process.exit(0);
114
+ } else {
115
+ console.log(
116
+ chalk.yellow.bold(
117
+ "\n⚠ Some checks failed. Please fix the issues above before continuing.\n"
118
+ )
119
+ );
120
+ process.exit(1);
121
+ }
122
+ }
123
+
124
+ runHealthCheck().catch((error) => {
125
+ console.error(chalk.red("\nāœ— Health check failed:"), error.message);
126
+ process.exit(1);
127
+ });