create-mn-app 0.0.6
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 +239 -0
- package/bin/create-midnight-app.js +47 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +35 -0
- package/dist/cli.js.map +1 -0
- package/dist/create-app.d.ts +10 -0
- package/dist/create-app.d.ts.map +1 -0
- package/dist/create-app.js +186 -0
- package/dist/create-app.js.map +1 -0
- package/dist/installers/package-installer.d.ts +8 -0
- package/dist/installers/package-installer.d.ts.map +1 -0
- package/dist/installers/package-installer.js +62 -0
- package/dist/installers/package-installer.js.map +1 -0
- package/dist/installers/proof-server-setup.d.ts +6 -0
- package/dist/installers/proof-server-setup.d.ts.map +1 -0
- package/dist/installers/proof-server-setup.js +54 -0
- package/dist/installers/proof-server-setup.js.map +1 -0
- package/dist/installers/wallet-generator.d.ts +4 -0
- package/dist/installers/wallet-generator.d.ts.map +1 -0
- package/dist/installers/wallet-generator.js +64 -0
- package/dist/installers/wallet-generator.js.map +1 -0
- package/dist/test.d.ts +2 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +53 -0
- package/dist/test.js.map +1 -0
- package/dist/utils/git-utils.d.ts +6 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +51 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/template-manager.d.ts +7 -0
- package/dist/utils/template-manager.d.ts.map +1 -0
- package/dist/utils/template-manager.js +61 -0
- package/dist/utils/template-manager.js.map +1 -0
- package/dist/utils/validation.d.ts +6 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +32 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +60 -0
- package/templates/hello-world/README.md.template +99 -0
- package/templates/hello-world/_env.template +0 -0
- package/templates/hello-world/_gitignore +52 -0
- package/templates/hello-world/contracts/hello-world.compact.template +12 -0
- package/templates/hello-world/nodemon.json.template +7 -0
- package/templates/hello-world/package.json.template +51 -0
- package/templates/hello-world/src/check-balance.ts.template +107 -0
- package/templates/hello-world/src/cli.ts.template +194 -0
- package/templates/hello-world/src/deploy.ts.template +218 -0
- package/templates/hello-world/src/providers/midnight-providers.ts.template +46 -0
- package/templates/hello-world/src/utils/environment.ts.template +51 -0
- package/templates/hello-world/tsconfig.json.template +20 -0
package/README.md
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# create-mn-app 🌙
|
|
2
|
+
|
|
3
|
+
Create Midnight Network applications with zero configuration.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/create-mn-app)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npx create-mn-app my-app
|
|
10
|
+
cd my-app
|
|
11
|
+
npm run setup
|
|
12
|
+
```
|
|
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
|
|
21
|
+
- 📦 **ES Modules** - Modern JavaScript module system
|
|
22
|
+
- 🐳 **Docker integration** - Automated proof server setup
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Create a new Midnight app
|
|
28
|
+
npx create-mn-app my-midnight-app
|
|
29
|
+
|
|
30
|
+
# Navigate to your project
|
|
31
|
+
cd my-midnight-app
|
|
32
|
+
|
|
33
|
+
# Setup and deploy your contract
|
|
34
|
+
npm run setup
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## What's Included?
|
|
38
|
+
|
|
39
|
+
Your generated project includes:
|
|
40
|
+
|
|
41
|
+
- 📝 **Hello World Contract** - A simple Compact contract to get started
|
|
42
|
+
- 🔐 **Wallet Setup** - Auto-generated wallet with secure seed phrase
|
|
43
|
+
- 🛠️ **Development Environment** - Pre-configured TypeScript, nodemon, and build tools
|
|
44
|
+
- 📚 **Provider Setup** - Midnight network providers (indexer, proof, state, ZK config)
|
|
45
|
+
- 🎨 **Interactive CLI** - Test your contracts with a user-friendly command-line interface
|
|
46
|
+
- 📋 **Environment Config** - `.env` file with network configuration
|
|
47
|
+
- 🔄 **Git Ready** - Initialized git repository with proper `.gitignore`
|
|
48
|
+
|
|
49
|
+
## Available Commands
|
|
50
|
+
|
|
51
|
+
Once your project is created, you can run:
|
|
52
|
+
|
|
53
|
+
### `npm run setup`
|
|
54
|
+
|
|
55
|
+
Complete setup pipeline:
|
|
56
|
+
|
|
57
|
+
1. Compiles Compact contracts
|
|
58
|
+
2. Builds TypeScript to JavaScript
|
|
59
|
+
3. Deploys contracts to the network
|
|
60
|
+
|
|
61
|
+
### `npm run cli`
|
|
62
|
+
|
|
63
|
+
Opens an interactive command-line interface to:
|
|
64
|
+
|
|
65
|
+
- Connect your wallet
|
|
66
|
+
- Store messages in the contract
|
|
67
|
+
- Retrieve stored messages
|
|
68
|
+
- Test contract functionality
|
|
69
|
+
|
|
70
|
+
### `npm run compile`
|
|
71
|
+
|
|
72
|
+
Compiles your Compact smart contracts from `contracts/` to `contracts/managed/`
|
|
73
|
+
|
|
74
|
+
### `npm run build`
|
|
75
|
+
|
|
76
|
+
Builds your TypeScript source code to JavaScript in the `dist/` directory
|
|
77
|
+
|
|
78
|
+
### `npm run deploy`
|
|
79
|
+
|
|
80
|
+
Deploys your compiled contract to the Midnight testnet
|
|
81
|
+
|
|
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
|
+
## Project Structure
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
my-midnight-app/
|
|
90
|
+
├── contracts/
|
|
91
|
+
│ ├── hello-world.compact # Your Compact smart contract
|
|
92
|
+
│ └── managed/ # Compiled contract output
|
|
93
|
+
├── src/
|
|
94
|
+
│ ├── cli.ts # Interactive CLI application
|
|
95
|
+
│ ├── deploy.ts # Contract deployment script
|
|
96
|
+
│ ├── providers/
|
|
97
|
+
│ │ └── midnight-providers.ts # Network provider configuration
|
|
98
|
+
│ └── utils/
|
|
99
|
+
│ └── environment.ts # Environment management
|
|
100
|
+
├── .env # Environment variables & wallet seed
|
|
101
|
+
├── .gitignore
|
|
102
|
+
├── package.json
|
|
103
|
+
├── tsconfig.json
|
|
104
|
+
└── nodemon.json
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Templates
|
|
108
|
+
|
|
109
|
+
### Hello World (Default)
|
|
110
|
+
|
|
111
|
+
A simple message storage contract demonstrating:
|
|
112
|
+
|
|
113
|
+
- State management
|
|
114
|
+
- Public and private data
|
|
115
|
+
- Contract deployment
|
|
116
|
+
- Interactive testing
|
|
117
|
+
|
|
118
|
+
**More templates coming soon!**
|
|
119
|
+
|
|
120
|
+
## Requirements
|
|
121
|
+
|
|
122
|
+
- **Node.js** 18.0.0 or higher
|
|
123
|
+
- **Docker** (for running the proof server)
|
|
124
|
+
- **npm**, **yarn**, or **pnpm** package manager
|
|
125
|
+
|
|
126
|
+
## Package Manager Options
|
|
127
|
+
|
|
128
|
+
You can use your preferred package manager:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# npm (default)
|
|
132
|
+
npx create-mn-app my-app
|
|
133
|
+
|
|
134
|
+
# Yarn
|
|
135
|
+
npx create-mn-app my-app --yarn
|
|
136
|
+
|
|
137
|
+
# pnpm
|
|
138
|
+
npx create-mn-app my-app --pnpm
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Usage Options
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
npx create-mn-app [project-name] [options]
|
|
145
|
+
|
|
146
|
+
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
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Environment Configuration
|
|
157
|
+
|
|
158
|
+
Your `.env` file contains important configuration:
|
|
159
|
+
|
|
160
|
+
```env
|
|
161
|
+
# Wallet Configuration
|
|
162
|
+
WALLET_SEED=your-generated-seed-phrase
|
|
163
|
+
|
|
164
|
+
# Network Configuration
|
|
165
|
+
MIDNIGHT_NETWORK=testnet
|
|
166
|
+
INDEXER_URL=https://indexer.testnet.midnight.network
|
|
167
|
+
INDEXER_WS_URL=wss://indexer.testnet.midnight.network
|
|
168
|
+
PROOF_SERVER_URL=http://localhost:6300
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
⚠️ **Important**: Never commit your `.env` file or share your wallet seed phrase!
|
|
172
|
+
|
|
173
|
+
## Troubleshooting
|
|
174
|
+
|
|
175
|
+
### Waiting for faucet funds
|
|
176
|
+
|
|
177
|
+
If your deployment is waiting for funds from the testnet faucet:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Option 1: Let the script wait (it will auto-detect funds)
|
|
181
|
+
# Just leave it running after requesting from the faucet
|
|
182
|
+
|
|
183
|
+
# Option 2: Stop and check manually
|
|
184
|
+
# Press Ctrl+C to stop, then:
|
|
185
|
+
npm run check-balance
|
|
186
|
+
|
|
187
|
+
# Once funded, deploy:
|
|
188
|
+
npm run deploy
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
💡 **Note**: Faucet transactions typically take 2-5 minutes to process.
|
|
192
|
+
|
|
193
|
+
### Port 6300 already in use
|
|
194
|
+
|
|
195
|
+
If you see "Bind for 0.0.0.0:6300 failed: port is already allocated":
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Stop the existing proof server
|
|
199
|
+
docker ps
|
|
200
|
+
docker stop <container-id>
|
|
201
|
+
|
|
202
|
+
# Or run on a different port (update .env accordingly)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Module resolution errors
|
|
206
|
+
|
|
207
|
+
Make sure you're using Node.js 18+ and the project was created with the latest version:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
node --version
|
|
211
|
+
npx create-mn-app@latest my-app
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Docker not running
|
|
215
|
+
|
|
216
|
+
Ensure Docker Desktop is running before starting the development server:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
docker --version
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Learn More
|
|
223
|
+
|
|
224
|
+
- 📖 [Midnight Documentation](https://docs.midnight.network)
|
|
225
|
+
- 🚀 [Getting Started Guide](https://docs.midnight.network/getting-started)
|
|
226
|
+
- 💬 [Midnight Discord Community](https://discord.gg/midnight)
|
|
227
|
+
- 🐙 [GitHub Repository](https://github.com/Olanetsoft/create-midnight-app)
|
|
228
|
+
|
|
229
|
+
## Contributing
|
|
230
|
+
|
|
231
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
232
|
+
|
|
233
|
+
## License
|
|
234
|
+
|
|
235
|
+
MIT © [Olanetsoft](https://github.com/Olanetsoft)
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
Built with ❤️ for the Midnight Network community 🌙✨
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { spawn } = require("cross-spawn");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const semver = require("semver");
|
|
6
|
+
|
|
7
|
+
// Check Node.js version
|
|
8
|
+
const currentNodeVersion = process.versions.node;
|
|
9
|
+
|
|
10
|
+
if (!semver.satisfies(currentNodeVersion, ">=18.0.0")) {
|
|
11
|
+
console.error(
|
|
12
|
+
"\x1b[31m" + // Red
|
|
13
|
+
"You are running Node " +
|
|
14
|
+
currentNodeVersion +
|
|
15
|
+
".\n" +
|
|
16
|
+
"Create Midnight App requires Node 18 or higher.\n" +
|
|
17
|
+
"Please update your version of Node." +
|
|
18
|
+
"\x1b[0m" // Reset
|
|
19
|
+
);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Run the main CLI
|
|
24
|
+
const result = spawn.sync(
|
|
25
|
+
process.execPath,
|
|
26
|
+
[path.resolve(__dirname, "../dist/cli.js"), ...process.argv.slice(2)],
|
|
27
|
+
{ stdio: "inherit" }
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
if (result.signal) {
|
|
31
|
+
if (result.signal === "SIGKILL") {
|
|
32
|
+
console.log(
|
|
33
|
+
"The build failed because the process exited too early. " +
|
|
34
|
+
"This probably means the system ran out of memory or someone called " +
|
|
35
|
+
"`kill -9` on the process."
|
|
36
|
+
);
|
|
37
|
+
} else if (result.signal === "SIGTERM") {
|
|
38
|
+
console.log(
|
|
39
|
+
"The build failed because the process exited too early. " +
|
|
40
|
+
"Someone might have called `kill` or `killall`, or the system could " +
|
|
41
|
+
"be shutting down."
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
process.exit(result.status || 0);
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
const commander_1 = require("commander");
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const create_app_1 = require("./create-app");
|
|
9
|
+
const program = new commander_1.Command();
|
|
10
|
+
program
|
|
11
|
+
.name("create-midnight-app")
|
|
12
|
+
.description("Create a new Midnight Network application")
|
|
13
|
+
.version("1.0.0")
|
|
14
|
+
.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("--skip-install", "Skip package installation")
|
|
19
|
+
.option("--skip-git", "Skip git repository initialization")
|
|
20
|
+
.option("--verbose", "Show detailed output")
|
|
21
|
+
.action(async (projectDirectory, options) => {
|
|
22
|
+
console.log(chalk_1.default.blue.bold("🌙 Create Midnight App\n"));
|
|
23
|
+
try {
|
|
24
|
+
await (0, create_app_1.createApp)(projectDirectory, options);
|
|
25
|
+
}
|
|
26
|
+
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));
|
|
30
|
+
}
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
program.parse();
|
|
35
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface CreateAppOptions {
|
|
2
|
+
template: string;
|
|
3
|
+
useNpm?: boolean;
|
|
4
|
+
usePnpm?: boolean;
|
|
5
|
+
skipInstall?: boolean;
|
|
6
|
+
skipGit?: boolean;
|
|
7
|
+
verbose?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function createApp(projectDirectory: string | undefined, options: CreateAppOptions): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=create-app.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
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.createApp = createApp;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const ora_1 = __importDefault(require("ora"));
|
|
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");
|
|
18
|
+
async function createApp(projectDirectory, options) {
|
|
19
|
+
let projectName = projectDirectory;
|
|
20
|
+
// Interactive mode if no project name provided
|
|
21
|
+
if (!projectName) {
|
|
22
|
+
const response = await (0, prompts_1.default)({
|
|
23
|
+
type: "text",
|
|
24
|
+
name: "projectName",
|
|
25
|
+
message: "What is your project named?",
|
|
26
|
+
initial: "my-midnight-app",
|
|
27
|
+
validate: (value) => {
|
|
28
|
+
const validation = (0, validation_1.validateProjectName)(value);
|
|
29
|
+
return validation.valid || validation.problems[0];
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
if (!response.projectName) {
|
|
33
|
+
console.log(chalk_1.default.yellow("\n✖ Operation cancelled."));
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
projectName = response.projectName;
|
|
37
|
+
}
|
|
38
|
+
const validation = (0, validation_1.validateProjectName)(projectName);
|
|
39
|
+
if (!validation.valid) {
|
|
40
|
+
console.error(chalk_1.default.red(`✖ Invalid project name: ${validation.problems[0]}`));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
const projectPath = path_1.default.resolve(projectName);
|
|
44
|
+
// Check if directory exists
|
|
45
|
+
if (fs_extra_1.default.existsSync(projectPath)) {
|
|
46
|
+
const { overwrite } = await (0, prompts_1.default)({
|
|
47
|
+
type: "confirm",
|
|
48
|
+
name: "overwrite",
|
|
49
|
+
message: `Directory ${chalk_1.default.cyan(projectName)} already exists. Overwrite?`,
|
|
50
|
+
initial: false,
|
|
51
|
+
});
|
|
52
|
+
if (!overwrite) {
|
|
53
|
+
console.log(chalk_1.default.yellow("✖ Operation cancelled."));
|
|
54
|
+
process.exit(0);
|
|
55
|
+
}
|
|
56
|
+
await fs_extra_1.default.remove(projectPath);
|
|
57
|
+
}
|
|
58
|
+
console.log(`Creating a new Midnight app in ${chalk_1.default.green(projectPath)}.\n`);
|
|
59
|
+
// Main creation process
|
|
60
|
+
await createProject(projectPath, projectName, options);
|
|
61
|
+
// Success message and instructions
|
|
62
|
+
console.log();
|
|
63
|
+
console.log(chalk_1.default.green.bold("━".repeat(60)));
|
|
64
|
+
console.log(chalk_1.default.green.bold("🎉 Success! Your Midnight app is ready."));
|
|
65
|
+
console.log(chalk_1.default.green.bold("━".repeat(60)));
|
|
66
|
+
console.log();
|
|
67
|
+
console.log(chalk_1.default.white.bold("📂 Project created at:"));
|
|
68
|
+
console.log(` ${chalk_1.default.cyan(projectPath)}`);
|
|
69
|
+
console.log();
|
|
70
|
+
console.log(chalk_1.default.white.bold("🚀 Next Steps:"));
|
|
71
|
+
console.log();
|
|
72
|
+
console.log(chalk_1.default.yellow(" 1.") + " Navigate to your project:");
|
|
73
|
+
console.log(` ${chalk_1.default.cyan(`cd ${projectName}`)}`);
|
|
74
|
+
console.log();
|
|
75
|
+
console.log(chalk_1.default.yellow(" 2.") + " Setup and deploy your contract:");
|
|
76
|
+
console.log(` ${chalk_1.default.cyan("npm run setup")}`);
|
|
77
|
+
console.log();
|
|
78
|
+
console.log(chalk_1.default.white.bold("📚 Available Commands:"));
|
|
79
|
+
console.log();
|
|
80
|
+
console.log(` ${chalk_1.default.cyan("npm run setup")}`);
|
|
81
|
+
console.log(chalk_1.default.gray(" Compile contract, build, and deploy"));
|
|
82
|
+
console.log();
|
|
83
|
+
console.log(` ${chalk_1.default.cyan("npm run cli")}`);
|
|
84
|
+
console.log(chalk_1.default.gray(" Interactive CLI to test your contract"));
|
|
85
|
+
console.log();
|
|
86
|
+
console.log(` ${chalk_1.default.cyan("npm run compile")}`);
|
|
87
|
+
console.log(chalk_1.default.gray(" Compile Compact contracts"));
|
|
88
|
+
console.log();
|
|
89
|
+
console.log(` ${chalk_1.default.cyan("npm run build")}`);
|
|
90
|
+
console.log(chalk_1.default.gray(" Build TypeScript to JavaScript"));
|
|
91
|
+
console.log();
|
|
92
|
+
console.log(chalk_1.default.green.bold("━".repeat(60)));
|
|
93
|
+
console.log();
|
|
94
|
+
console.log(chalk_1.default.magenta("💡 Tips:"));
|
|
95
|
+
console.log(chalk_1.default.gray(" • Make sure Docker is running for the proof server"));
|
|
96
|
+
console.log(chalk_1.default.gray(" • Check .env for your wallet seed and network config"));
|
|
97
|
+
console.log(chalk_1.default.gray(" • Visit https://docs.midnight.network for documentation"));
|
|
98
|
+
console.log();
|
|
99
|
+
console.log(chalk_1.default.white("Happy coding! ") + chalk_1.default.yellow("🌙✨"));
|
|
100
|
+
console.log();
|
|
101
|
+
}
|
|
102
|
+
async function createProject(projectPath, projectName, options) {
|
|
103
|
+
const packageManager = options.usePnpm
|
|
104
|
+
? "pnpm"
|
|
105
|
+
: options.useNpm
|
|
106
|
+
? "npm"
|
|
107
|
+
: "yarn";
|
|
108
|
+
// Create project directory
|
|
109
|
+
await fs_extra_1.default.ensureDir(projectPath);
|
|
110
|
+
process.chdir(projectPath);
|
|
111
|
+
// Initialize template
|
|
112
|
+
const templateSpinner = (0, ora_1.default)("Creating project structure...").start();
|
|
113
|
+
try {
|
|
114
|
+
const templateManager = new template_manager_1.TemplateManager(options.template);
|
|
115
|
+
await templateManager.scaffold(projectPath, projectName);
|
|
116
|
+
templateSpinner.succeed("Project structure created");
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
templateSpinner.fail("Failed to create project structure");
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
// Generate wallet
|
|
123
|
+
const walletSpinner = (0, ora_1.default)("Generating secure wallet...").start();
|
|
124
|
+
try {
|
|
125
|
+
const walletGenerator = new wallet_generator_1.WalletGenerator();
|
|
126
|
+
const walletSeed = await walletGenerator.generate(projectPath);
|
|
127
|
+
walletSpinner.succeed(`Wallet generated (seed: ${walletSeed.substring(0, 8)}...)`);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
walletSpinner.fail("Failed to generate wallet");
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
// Install dependencies
|
|
134
|
+
if (!options.skipInstall) {
|
|
135
|
+
const installSpinner = (0, ora_1.default)(`Installing dependencies with ${packageManager}...`).start();
|
|
136
|
+
try {
|
|
137
|
+
const installer = new package_installer_1.PackageInstaller(packageManager);
|
|
138
|
+
await installer.install(projectPath);
|
|
139
|
+
installSpinner.succeed("Dependencies installed");
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
installSpinner.fail("Failed to install dependencies");
|
|
143
|
+
console.log(chalk_1.default.yellow("\n⚠ You can install dependencies manually by running:"));
|
|
144
|
+
console.log(chalk_1.default.cyan(` ${packageManager} install`));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Initialize git
|
|
148
|
+
if (!options.skipGit) {
|
|
149
|
+
const gitSpinner = (0, ora_1.default)("Initializing git repository...").start();
|
|
150
|
+
try {
|
|
151
|
+
await git_utils_1.GitUtils.init(projectPath);
|
|
152
|
+
gitSpinner.succeed("Git repository initialized");
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
gitSpinner.warn("Git repository initialization skipped");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Check Docker for proof server
|
|
159
|
+
const proofSpinner = (0, ora_1.default)("Checking Docker for proof server...").start();
|
|
160
|
+
try {
|
|
161
|
+
const proofSetup = new proof_server_setup_1.ProofServerSetup();
|
|
162
|
+
const isAvailable = await proofSetup.verify();
|
|
163
|
+
if (isAvailable) {
|
|
164
|
+
proofSpinner.succeed("Docker is ready for proof server");
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
proofSpinner.warn("Docker not available - install it to use proof server");
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
proofSpinner.warn("Docker check failed - install Docker to use proof server");
|
|
172
|
+
}
|
|
173
|
+
// Compile initial contract
|
|
174
|
+
if (!options.skipInstall) {
|
|
175
|
+
const compileSpinner = (0, ora_1.default)("Compiling initial contract...").start();
|
|
176
|
+
try {
|
|
177
|
+
const installer = new package_installer_1.PackageInstaller(packageManager);
|
|
178
|
+
await installer.runScript(projectPath, "compile");
|
|
179
|
+
compileSpinner.succeed("Contract compiled successfully");
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
compileSpinner.warn('Contract compilation skipped - run "npm run compile" manually');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=create-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app.js","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":";;;;;AAqBA,8BA2GC;AAhID,gDAAwB;AACxB,wDAA0B;AAC1B,kDAA0B;AAC1B,8CAAsB;AACtB,sDAA8B;AAC9B,mDAAyD;AACzD,sEAAkE;AAClE,+DAA2D;AAC3D,oEAAgE;AAChE,wEAAmE;AACnE,iDAA6C;AAWtC,KAAK,UAAU,SAAS,CAC7B,gBAAoC,EACpC,OAAyB;IAEzB,IAAI,WAAW,GAAG,gBAAgB,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,gCAAmB,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,MAAM,UAAU,GAAG,IAAA,gCAAmB,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;IAE7E,wBAAwB;IACxB,MAAM,aAAa,CAAC,WAAW,EAAE,WAAY,EAAE,OAAO,CAAC,CAAC;IAExD,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,eAAe,CAAC,EAAE,CAAC,CAAC;IACnD,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,eAAe,CAAC,EAAE,CAAC,CAAC;IAChD,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,aAAa,CAAC,EAAE,CAAC,CAAC;IAC9C,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,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAClD,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,eAAe,CAAC,EAAE,CAAC,CAAC;IAChD,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,OAAyB;IAEzB,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO;QACpC,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,MAAM;YAChB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,MAAM,CAAC;IAEX,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,kCAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9D,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,kCAAe,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,oCAAgB,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,cAAc,UAAU,CAAC,CAAC,CAAC;QACzD,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,oBAAQ,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,qCAAgB,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,oCAAgB,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,+DAA+D,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class PackageInstaller {
|
|
2
|
+
private packageManager;
|
|
3
|
+
constructor(packageManager: "npm" | "yarn" | "pnpm");
|
|
4
|
+
install(projectPath: string): Promise<void>;
|
|
5
|
+
runScript(projectPath: string, script: string): Promise<void>;
|
|
6
|
+
static detectPackageManager(): "npm" | "yarn" | "pnpm";
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=package-installer.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PackageInstaller = void 0;
|
|
4
|
+
const cross_spawn_1 = require("cross-spawn");
|
|
5
|
+
class PackageInstaller {
|
|
6
|
+
constructor(packageManager) {
|
|
7
|
+
this.packageManager = packageManager;
|
|
8
|
+
}
|
|
9
|
+
async install(projectPath) {
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
const child = (0, cross_spawn_1.spawn)(this.packageManager, ["install"], {
|
|
12
|
+
cwd: projectPath,
|
|
13
|
+
stdio: "pipe",
|
|
14
|
+
});
|
|
15
|
+
let output = "";
|
|
16
|
+
child.stdout?.on("data", (data) => {
|
|
17
|
+
output += data.toString();
|
|
18
|
+
});
|
|
19
|
+
child.stderr?.on("data", (data) => {
|
|
20
|
+
output += data.toString();
|
|
21
|
+
});
|
|
22
|
+
child.on("close", (code) => {
|
|
23
|
+
if (code === 0) {
|
|
24
|
+
resolve();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
reject(new Error(`Package installation failed with code ${code}:\n${output}`));
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
child.on("error", reject);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async runScript(projectPath, script) {
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
const args = this.packageManager === "npm" ? ["run", script] : [script];
|
|
36
|
+
const child = (0, cross_spawn_1.spawn)(this.packageManager, args, {
|
|
37
|
+
cwd: projectPath,
|
|
38
|
+
stdio: "pipe",
|
|
39
|
+
});
|
|
40
|
+
child.on("close", (code) => {
|
|
41
|
+
if (code === 0) {
|
|
42
|
+
resolve();
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
reject(new Error(`Script "${script}" failed with code ${code}`));
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
child.on("error", reject);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
static detectPackageManager() {
|
|
52
|
+
if (process.env.npm_config_user_agent?.includes("yarn")) {
|
|
53
|
+
return "yarn";
|
|
54
|
+
}
|
|
55
|
+
if (process.env.npm_config_user_agent?.includes("pnpm")) {
|
|
56
|
+
return "pnpm";
|
|
57
|
+
}
|
|
58
|
+
return "npm";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.PackageInstaller = PackageInstaller;
|
|
62
|
+
//# sourceMappingURL=package-installer.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof-server-setup.d.ts","sourceRoot":"","sources":["../../src/installers/proof-server-setup.ts"],"names":[],"mappings":"AAEA,qBAAa,gBAAgB;IACrB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;YAelB,iBAAiB;YAgBjB,2BAA2B;CA0B1C"}
|