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 +174 -36
- package/dist/cli.js +20 -9
- package/dist/cli.js.map +1 -1
- package/dist/create-app.d.ts +3 -1
- package/dist/create-app.d.ts.map +1 -1
- package/dist/create-app.js +95 -28
- package/dist/create-app.js.map +1 -1
- package/dist/installers/package-installer.d.ts +1 -1
- package/dist/installers/package-installer.d.ts.map +1 -1
- package/dist/installers/package-installer.js.map +1 -1
- package/dist/utils/error-handler.d.ts +27 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +116 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/package-manager.d.ts +21 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +108 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/templates.d.ts +25 -0
- package/dist/utils/templates.d.ts.map +1 -0
- package/dist/utils/templates.js +69 -0
- package/dist/utils/templates.js.map +1 -0
- package/package.json +2 -2
- package/templates/hello-world/package.json.template +1 -0
- package/templates/hello-world/src/health-check.ts.template +127 -0
package/README.md
CHANGED
|
@@ -11,26 +11,47 @@ cd my-app
|
|
|
11
11
|
npm run setup
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
## Features
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
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
|
|
25
|
+
- š³ **Docker Integration** - Automated proof server setup
|
|
26
|
+
|
|
27
|
+
## š Quick Start
|
|
23
28
|
|
|
24
|
-
|
|
29
|
+
### Interactive Mode (Recommended)
|
|
25
30
|
|
|
26
31
|
```bash
|
|
27
|
-
|
|
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
|
-
#
|
|
31
|
-
|
|
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
|
-
#
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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>
|
|
148
|
-
--
|
|
149
|
-
--
|
|
150
|
-
--
|
|
151
|
-
--
|
|
152
|
-
--skip-
|
|
153
|
-
-
|
|
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
|
|
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
|
|
16
|
+
.version("0.1.0")
|
|
14
17
|
.argument("[project-directory]", "Directory name for your project")
|
|
15
|
-
.option("-t, --template <name>", "Template to use
|
|
16
|
-
.option("--use-npm", "Use npm
|
|
17
|
-
.option("--use-
|
|
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,
|
|
29
|
+
await (0, create_app_js_1.createApp)(projectDirectory, options);
|
|
25
30
|
}
|
|
26
31
|
catch (error) {
|
|
27
|
-
console.error(
|
|
28
|
-
|
|
29
|
-
|
|
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,
|
|
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"}
|
package/dist/create-app.d.ts
CHANGED
package/dist/create-app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/create-app.js
CHANGED
|
@@ -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
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
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,
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(` ${
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
249
|
+
compileSpinner.warn(`Contract compilation skipped - run "${pmInfo.runCommand} compile" manually`);
|
|
183
250
|
}
|
|
184
251
|
}
|
|
185
252
|
}
|
package/dist/create-app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-app.js","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"create-app.js","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":";;;;;AAiCA,8BA4LC;AA7ND,gDAAwB;AACxB,wDAA0B;AAC1B,kDAA0B;AAC1B,8CAAsB;AACtB,sDAA8B;AAC9B,yDAA4D;AAC5D,4EAAqE;AACrE,qEAA8D;AAC9D,0EAAmE;AACnE,8EAAsE;AACtE,uDAAgD;AAChD,mEAIoC;AACpC,uDAI8B;AAavB,KAAK,UAAU,SAAS,CAC7B,gBAAoC,EACpC,OAAyB;IAEzB,IAAI,WAAW,GAAG,gBAAgB,CAAC;IACnC,IAAI,gBAAgB,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC;IACzD,IAAI,cAA8B,CAAC;IAEnC,+CAA+C;IAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAAC;YAC7B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE,iBAAiB;YAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,MAAM,UAAU,GAAG,IAAA,mCAAmB,EAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC;YACrD,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;IACrC,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,IAAA,8BAAe,GAAE,CAAC;QACvC,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/C,KAAK,EAAE,CAAC,CAAC,UAAU;gBACjB,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBAC/C,CAAC,CAAC,CAAC,CAAC,OAAO;YACb,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;QAEJ,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAAC;YAC7B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACvC,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC,IAAA,8BAAe,EAAC,gBAAgB,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAA,0BAAW,EAAC,gBAAgB,CAAC,CAAC;QAC/C,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,eAAe,gBAAgB,mBAAmB,CAAC,CAC9D,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACvD,IAAA,8BAAe,GAAE;iBACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;iBAC1B,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACb,OAAO,CAAC,GAAG,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,gBAAgB,cAAc,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;SAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,cAAc,GAAG,MAAM,CAAC;IAC1B,CAAC;SAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,cAAc,GAAG,MAAM,CAAC;IAC1B,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,IAAA,yCAAoB,GAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,+BAA+B,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAC1E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,0CAAqB,EAAC,cAAc,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,IAAA,mCAAmB,EAAC,WAAY,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,2BAA2B,UAAU,CAAC,QAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAChE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,WAAY,CAAC,CAAC;IAE/C,4BAA4B;IAC5B,IAAI,kBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,iBAAO,EAAC;YAClC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,aAAa,eAAK,CAAC,IAAI,CAC9B,WAAW,CACZ,6BAA6B;YAC9B,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,kBAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,eAAK,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,wBAAwB;IACxB,MAAM,aAAa,CACjB,WAAW,EACX,WAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,OAAO,CACR,CAAC;IAEF,mCAAmC;IACnC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,MAAM,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,4BAA4B,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,QAAQ,eAAK,CAAC,IAAI,CAAC,MAAM,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,kCAAkC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,QAAQ,eAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,eAAe,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CACpE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CACtE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CACzE,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,WAAmB,EACnB,WAAmB,EACnB,QAAgB,EAChB,cAA8B,EAC9B,OAAyB;IAEzB,MAAM,MAAM,GAAG,IAAA,0CAAqB,EAAC,cAAc,CAAC,CAAC;IAErD,2BAA2B;IAC3B,MAAM,kBAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE3B,sBAAsB;IACtB,MAAM,eAAe,GAAG,IAAA,aAAG,EAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,qCAAe,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,eAAe,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACzD,eAAe,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAe,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC;IACd,CAAC;IAED,kBAAkB;IAClB,MAAM,aAAa,GAAG,IAAA,aAAG,EAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,qCAAe,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/D,aAAa,CAAC,OAAO,CACnB,2BAA2B,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAC5D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,cAAc,GAAG,IAAA,aAAG,EACxB,gCAAgC,cAAc,KAAK,CACpD,CAAC,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,uCAAgB,CAAC,cAAc,CAAC,CAAC;YACvD,MAAM,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACrC,cAAc,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CACtE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,IAAA,aAAG,EAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,uBAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjC,UAAU,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,YAAY,GAAG,IAAA,aAAG,EAAC,qCAAqC,CAAC,CAAC,KAAK,EAAE,CAAC;IACxE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,wCAAgB,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;QAC9C,IAAI,WAAW,EAAE,CAAC;YAChB,YAAY,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CACf,uDAAuD,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,IAAI,CACf,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,cAAc,GAAG,IAAA,aAAG,EAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;QACpE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,uCAAgB,CAAC,cAAc,CAAC,CAAC;YACvD,MAAM,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAClD,cAAc,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,IAAI,CACjB,uCAAuC,MAAM,CAAC,UAAU,oBAAoB,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -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;
|
|
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,
|
|
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
|
|
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.
|
|
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
|
+
});
|