@devvmichael/create-stacks-app 0.1.0 โ 0.2.1
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 +186 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +11 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/utils/clarinet-installer.d.ts +17 -0
- package/dist/utils/clarinet-installer.d.ts.map +1 -0
- package/dist/utils/clarinet-installer.js +248 -0
- package/dist/utils/clarinet-installer.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +31 -17
- package/dist/utils/logger.js.map +1 -1
- package/package.json +1 -1
- package/templates/frontends/nextjs/template/package.json +12 -12
- package/templates/frontends/react/template/package.json +13 -13
- package/templates/frontends/vue/template/package.json +11 -11
package/README.md
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# @devvmichael/create-stacks-app
|
|
2
|
+
|
|
3
|
+
The fastest way to build full-stack applications on Stacks blockchain.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@devvmichael/create-stacks-app)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npx @devvmichael/create-stacks-app my-dapp
|
|
12
|
+
cd my-dapp
|
|
13
|
+
npm run dev
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Features
|
|
17
|
+
|
|
18
|
+
- ๐ **One-command project setup** - Get started in seconds
|
|
19
|
+
- ๐ **Smart contract templates** - Counter, Token (SIP-010), NFT (SIP-009)
|
|
20
|
+
- โ๏ธ **Modern frontend frameworks** - Next.js, React, or Vue
|
|
21
|
+
- ๐ **Pre-configured Stacks.js** - Wallet connect, contract calls ready to go
|
|
22
|
+
- ๐จ **Tailwind CSS styling** - Beautiful UI out of the box
|
|
23
|
+
- ๐งช **Testing setup included** - Clarinet SDK tests for contracts
|
|
24
|
+
- ๐ฆ **Deployment scripts** - One-command deploy to testnet/mainnet
|
|
25
|
+
|
|
26
|
+
## Installation
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Using npx (recommended)
|
|
30
|
+
npx @devvmichael/create-stacks-app my-dapp
|
|
31
|
+
|
|
32
|
+
# Or install globally
|
|
33
|
+
npm install -g @devvmichael/create-stacks-app
|
|
34
|
+
create-stacks-app my-dapp
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
### Interactive Mode
|
|
40
|
+
|
|
41
|
+
Simply run without arguments for interactive prompts:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx @devvmichael/create-stacks-app
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Command Line Options
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx @devvmichael/create-stacks-app my-dapp [options]
|
|
51
|
+
|
|
52
|
+
Options:
|
|
53
|
+
-t, --template <name> Frontend template: nextjs, react, vue (default: nextjs)
|
|
54
|
+
-c, --contracts <list> Contracts to include: counter,token,nft
|
|
55
|
+
--typescript Use TypeScript (default: true)
|
|
56
|
+
--no-typescript Use JavaScript
|
|
57
|
+
--tailwind Include Tailwind CSS (default: true)
|
|
58
|
+
--no-git Skip Git initialization
|
|
59
|
+
--package-manager <pm> Package manager: npm, pnpm, yarn (default: pnpm)
|
|
60
|
+
--skip-install Skip dependency installation
|
|
61
|
+
-y, --yes Skip prompts, use defaults
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Example Commands
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Create with all defaults
|
|
68
|
+
npx @devvmichael/create-stacks-app my-dapp -y
|
|
69
|
+
|
|
70
|
+
# Create with React and all contracts
|
|
71
|
+
npx @devvmichael/create-stacks-app my-dapp -t react -c counter,token,nft
|
|
72
|
+
|
|
73
|
+
# Create with npm instead of pnpm
|
|
74
|
+
npx @devvmichael/create-stacks-app my-dapp --package-manager npm
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Adding to Existing Projects
|
|
78
|
+
|
|
79
|
+
### Add a Contract
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Add a new contract
|
|
83
|
+
npx @devvmichael/create-stacks-app add contract my-contract
|
|
84
|
+
|
|
85
|
+
# Add a SIP-010 token contract
|
|
86
|
+
npx @devvmichael/create-stacks-app add contract my-token --sip010
|
|
87
|
+
|
|
88
|
+
# Add a SIP-009 NFT contract
|
|
89
|
+
npx @devvmichael/create-stacks-app add contract my-nft --sip009
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Add a Component
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx @devvmichael/create-stacks-app add component my-component
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Deployment
|
|
99
|
+
|
|
100
|
+
### Deploy to Testnet
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npm run deploy:testnet
|
|
104
|
+
# or
|
|
105
|
+
npx @devvmichael/create-stacks-app deploy testnet
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Deploy to Mainnet
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
npm run deploy:mainnet
|
|
112
|
+
# or
|
|
113
|
+
npx @devvmichael/create-stacks-app deploy mainnet
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Project Structure
|
|
117
|
+
|
|
118
|
+
Generated projects have the following structure:
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
my-dapp/
|
|
122
|
+
โโโ contracts/ # Clarity smart contracts
|
|
123
|
+
โ โโโ counter.clar
|
|
124
|
+
โโโ tests/ # Contract tests
|
|
125
|
+
โ โโโ counter.test.ts
|
|
126
|
+
โโโ frontend/ # Frontend application
|
|
127
|
+
โ โโโ app/ # Next.js app directory
|
|
128
|
+
โ โโโ components/ # React components
|
|
129
|
+
โ โโโ hooks/ # Stacks.js hooks
|
|
130
|
+
โ โโโ lib/ # Utilities and config
|
|
131
|
+
โโโ deployments/ # Deployment configurations
|
|
132
|
+
โโโ scripts/ # Utility scripts
|
|
133
|
+
โโโ Clarinet.toml # Clarinet configuration
|
|
134
|
+
โโโ package.json
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Smart Contract Templates
|
|
138
|
+
|
|
139
|
+
### Counter
|
|
140
|
+
|
|
141
|
+
Simple state management example demonstrating:
|
|
142
|
+
|
|
143
|
+
- Data variables
|
|
144
|
+
- Public functions
|
|
145
|
+
- Read-only functions
|
|
146
|
+
- Owner-only access control
|
|
147
|
+
|
|
148
|
+
### Token (SIP-010)
|
|
149
|
+
|
|
150
|
+
Full SIP-010 compliant fungible token with:
|
|
151
|
+
|
|
152
|
+
- Transfer, mint, and burn functionality
|
|
153
|
+
- Token URI support
|
|
154
|
+
- Owner administration
|
|
155
|
+
|
|
156
|
+
### NFT (SIP-009)
|
|
157
|
+
|
|
158
|
+
Full SIP-009 compliant NFT with:
|
|
159
|
+
|
|
160
|
+
- Mint and transfer
|
|
161
|
+
- Token metadata
|
|
162
|
+
- Built-in marketplace (list, buy, unlist)
|
|
163
|
+
|
|
164
|
+
## Requirements
|
|
165
|
+
|
|
166
|
+
- **Node.js** 18.0 or higher
|
|
167
|
+
- **pnpm** (recommended) or npm/yarn
|
|
168
|
+
- **Clarinet** - [Install here](https://github.com/hirosystems/clarinet)
|
|
169
|
+
|
|
170
|
+
## Contributing
|
|
171
|
+
|
|
172
|
+
Contributions are welcome! Please read our [Contributing Guide](../../CONTRIBUTING.md) first.
|
|
173
|
+
|
|
174
|
+
## Community
|
|
175
|
+
|
|
176
|
+
- [Stacks Discord](https://discord.gg/stacks)
|
|
177
|
+
- [Stacks Forum](https://forum.stacks.org)
|
|
178
|
+
- [Twitter @Stacks](https://twitter.com/stacks)
|
|
179
|
+
|
|
180
|
+
## Author
|
|
181
|
+
|
|
182
|
+
**Michael Ojekunle** - [@michojekunle](https://github.com/michojekunle)
|
|
183
|
+
|
|
184
|
+
## License
|
|
185
|
+
|
|
186
|
+
MIT ยฉ Michael Ojekunle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,mBAAmB,CAAC;AAqBtE,wBAAsB,aAAa,CACjC,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAiEf"}
|
package/dist/commands/create.js
CHANGED
|
@@ -6,6 +6,7 @@ import { runPrompts, getDefaultConfig } from "../prompts/project.js";
|
|
|
6
6
|
import { createProjectStructure, copyBaseFiles } from "../utils/filesystem.js";
|
|
7
7
|
import { initializeGit } from "../utils/git.js";
|
|
8
8
|
import { initializeClarinet, updateClarinetConfig } from "../utils/clarinet.js";
|
|
9
|
+
import { ensureClarinetInstalled } from "../utils/clarinet-installer.js";
|
|
9
10
|
import { installFrontendTemplate, installContracts, } from "../templates/installer.js";
|
|
10
11
|
import { installDependencies } from "../utils/package-manager.js";
|
|
11
12
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -13,6 +14,16 @@ const __dirname = path.dirname(__filename);
|
|
|
13
14
|
export async function createCommand(projectName, options) {
|
|
14
15
|
try {
|
|
15
16
|
showIntro();
|
|
17
|
+
// Check for Clarinet installation and prompt to install if needed
|
|
18
|
+
const clarinetReady = await ensureClarinetInstalled();
|
|
19
|
+
if (!clarinetReady) {
|
|
20
|
+
console.log();
|
|
21
|
+
logError("Clarinet is required to create a Stacks project.");
|
|
22
|
+
console.log(" Please install Clarinet and try again.");
|
|
23
|
+
console.log(" Visit: https://github.com/hirosystems/clarinet/releases");
|
|
24
|
+
console.log();
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
16
27
|
// Get project configuration
|
|
17
28
|
const config = await getProjectConfig(projectName, options);
|
|
18
29
|
// Validate project name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if Clarinet is installed on the system
|
|
3
|
+
*/
|
|
4
|
+
export declare function isClarinetInstalled(): Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Get the installed Clarinet version
|
|
7
|
+
*/
|
|
8
|
+
export declare function getClarinetVersion(): Promise<string | null>;
|
|
9
|
+
/**
|
|
10
|
+
* Prompt user to install Clarinet with platform-specific options
|
|
11
|
+
*/
|
|
12
|
+
export declare function promptClarinetInstall(): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Ensure Clarinet is installed, prompting for installation if needed
|
|
15
|
+
*/
|
|
16
|
+
export declare function ensureClarinetInstalled(): Promise<boolean>;
|
|
17
|
+
//# sourceMappingURL=clarinet-installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clarinet-installer.d.ts","sourceRoot":"","sources":["../../src/utils/clarinet-installer.ts"],"names":[],"mappings":"AA+DA;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO5D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOjE;AAgED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAuI9D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAYhE"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { exec, spawn } from "child_process";
|
|
2
|
+
import { promisify } from "util";
|
|
3
|
+
import inquirer from "inquirer";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import ora from "ora";
|
|
6
|
+
import { logger } from "./logger.js";
|
|
7
|
+
const execAsync = promisify(exec);
|
|
8
|
+
const CLARINET_INSTALL_METHODS = {
|
|
9
|
+
darwin: [
|
|
10
|
+
{
|
|
11
|
+
name: "Homebrew",
|
|
12
|
+
command: "brew install clarinet",
|
|
13
|
+
check: "brew --version",
|
|
14
|
+
description: "Install via Homebrew (recommended)",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "Manual",
|
|
18
|
+
command: "",
|
|
19
|
+
description: "Download binary manually from GitHub",
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
win32: [
|
|
23
|
+
{
|
|
24
|
+
name: "Winget",
|
|
25
|
+
command: "winget install -e --id HiroSystems.Clarinet",
|
|
26
|
+
check: "winget --version",
|
|
27
|
+
description: "Install via Windows Package Manager (recommended)",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "Manual",
|
|
31
|
+
command: "",
|
|
32
|
+
description: "Download MSI installer from GitHub",
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
linux: [
|
|
36
|
+
{
|
|
37
|
+
name: "Script",
|
|
38
|
+
command: "curl -sL https://raw.githubusercontent.com/hirosystems/clarinet/main/scripts/install.sh | bash",
|
|
39
|
+
description: "Install via official script (recommended)",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "Manual",
|
|
43
|
+
command: "",
|
|
44
|
+
description: "Download binary manually from GitHub",
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
const CLARINET_RELEASES_URL = "https://github.com/hirosystems/clarinet/releases/latest";
|
|
49
|
+
/**
|
|
50
|
+
* Check if Clarinet is installed on the system
|
|
51
|
+
*/
|
|
52
|
+
export async function isClarinetInstalled() {
|
|
53
|
+
try {
|
|
54
|
+
await execAsync("clarinet --version");
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get the installed Clarinet version
|
|
63
|
+
*/
|
|
64
|
+
export async function getClarinetVersion() {
|
|
65
|
+
try {
|
|
66
|
+
const { stdout } = await execAsync("clarinet --version");
|
|
67
|
+
return stdout.trim();
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if a package manager is available
|
|
75
|
+
*/
|
|
76
|
+
async function isPackageManagerAvailable(checkCommand) {
|
|
77
|
+
try {
|
|
78
|
+
await execAsync(checkCommand);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get the current platform
|
|
87
|
+
*/
|
|
88
|
+
function getPlatform() {
|
|
89
|
+
const platform = process.platform;
|
|
90
|
+
if (platform === "darwin" || platform === "win32" || platform === "linux") {
|
|
91
|
+
return platform;
|
|
92
|
+
}
|
|
93
|
+
// Default to linux for other Unix-like systems
|
|
94
|
+
return "linux";
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get platform display name
|
|
98
|
+
*/
|
|
99
|
+
function getPlatformName(platform) {
|
|
100
|
+
const names = {
|
|
101
|
+
darwin: "macOS",
|
|
102
|
+
win32: "Windows",
|
|
103
|
+
linux: "Linux",
|
|
104
|
+
};
|
|
105
|
+
return names[platform];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Execute installation command with real-time output
|
|
109
|
+
*/
|
|
110
|
+
async function executeInstall(command) {
|
|
111
|
+
return new Promise((resolve) => {
|
|
112
|
+
const isWindows = process.platform === "win32";
|
|
113
|
+
const shell = isWindows ? "cmd.exe" : "/bin/sh";
|
|
114
|
+
const shellFlag = isWindows ? "/c" : "-c";
|
|
115
|
+
const child = spawn(shell, [shellFlag, command], {
|
|
116
|
+
stdio: "inherit",
|
|
117
|
+
env: { ...process.env, FORCE_COLOR: "1" },
|
|
118
|
+
});
|
|
119
|
+
child.on("close", (code) => {
|
|
120
|
+
resolve(code === 0);
|
|
121
|
+
});
|
|
122
|
+
child.on("error", () => {
|
|
123
|
+
resolve(false);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Prompt user to install Clarinet with platform-specific options
|
|
129
|
+
*/
|
|
130
|
+
export async function promptClarinetInstall() {
|
|
131
|
+
const platform = getPlatform();
|
|
132
|
+
const platformName = getPlatformName(platform);
|
|
133
|
+
const methods = CLARINET_INSTALL_METHODS[platform];
|
|
134
|
+
console.log("");
|
|
135
|
+
logger.warning("Clarinet is required but not installed on your system.");
|
|
136
|
+
console.log("");
|
|
137
|
+
console.log(chalk.dim(` Clarinet is a Clarity smart contract development tool that provides`));
|
|
138
|
+
console.log(chalk.dim(` testing, debugging, and deployment capabilities for Stacks blockchain.`));
|
|
139
|
+
console.log("");
|
|
140
|
+
// Check which package managers are available
|
|
141
|
+
const availableMethods = [];
|
|
142
|
+
for (const method of methods) {
|
|
143
|
+
if (method.check) {
|
|
144
|
+
const available = await isPackageManagerAvailable(method.check);
|
|
145
|
+
availableMethods.push({ ...method, available });
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
availableMethods.push({ ...method, available: true });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const choices = [
|
|
152
|
+
...availableMethods
|
|
153
|
+
.filter((m) => m.available && m.command)
|
|
154
|
+
.map((m) => ({
|
|
155
|
+
name: `${m.name}: ${m.description}`,
|
|
156
|
+
value: m.command,
|
|
157
|
+
})),
|
|
158
|
+
{
|
|
159
|
+
name: "Open GitHub releases page (manual download)",
|
|
160
|
+
value: "open-github",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: "Skip for now (some features will be unavailable)",
|
|
164
|
+
value: "skip",
|
|
165
|
+
},
|
|
166
|
+
];
|
|
167
|
+
const { action } = await inquirer.prompt([
|
|
168
|
+
{
|
|
169
|
+
type: "list",
|
|
170
|
+
name: "action",
|
|
171
|
+
message: `How would you like to install Clarinet on ${platformName}?`,
|
|
172
|
+
choices,
|
|
173
|
+
},
|
|
174
|
+
]);
|
|
175
|
+
if (action === "skip") {
|
|
176
|
+
console.log("");
|
|
177
|
+
logger.info("Skipping Clarinet installation. You can install it later from:");
|
|
178
|
+
console.log(chalk.cyan(` ${CLARINET_RELEASES_URL}`));
|
|
179
|
+
console.log("");
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
if (action === "open-github") {
|
|
183
|
+
console.log("");
|
|
184
|
+
logger.info("Opening Clarinet releases page...");
|
|
185
|
+
console.log(chalk.cyan(` ${CLARINET_RELEASES_URL}`));
|
|
186
|
+
console.log("");
|
|
187
|
+
// Try to open the URL in the default browser
|
|
188
|
+
const openCommand = platform === "darwin"
|
|
189
|
+
? "open"
|
|
190
|
+
: platform === "win32"
|
|
191
|
+
? "start"
|
|
192
|
+
: "xdg-open";
|
|
193
|
+
try {
|
|
194
|
+
await execAsync(`${openCommand} ${CLARINET_RELEASES_URL}`);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Silently fail if we can't open the browser
|
|
198
|
+
}
|
|
199
|
+
const { installed } = await inquirer.prompt([
|
|
200
|
+
{
|
|
201
|
+
type: "confirm",
|
|
202
|
+
name: "installed",
|
|
203
|
+
message: "Have you finished installing Clarinet?",
|
|
204
|
+
default: false,
|
|
205
|
+
},
|
|
206
|
+
]);
|
|
207
|
+
if (installed) {
|
|
208
|
+
return await isClarinetInstalled();
|
|
209
|
+
}
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
// Execute the installation command
|
|
213
|
+
console.log("");
|
|
214
|
+
console.log(chalk.dim(` Running: ${action}`));
|
|
215
|
+
console.log("");
|
|
216
|
+
const spinner = ora("Installing Clarinet...").start();
|
|
217
|
+
spinner.stop();
|
|
218
|
+
const success = await executeInstall(action);
|
|
219
|
+
if (success) {
|
|
220
|
+
// Verify installation
|
|
221
|
+
const installed = await isClarinetInstalled();
|
|
222
|
+
if (installed) {
|
|
223
|
+
const version = await getClarinetVersion();
|
|
224
|
+
console.log("");
|
|
225
|
+
logger.success(`Clarinet installed successfully! ${chalk.dim(version || "")}`);
|
|
226
|
+
console.log("");
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
console.log("");
|
|
231
|
+
logger.error("Failed to install Clarinet automatically.");
|
|
232
|
+
console.log(chalk.dim(` Please install manually from: ${CLARINET_RELEASES_URL}`));
|
|
233
|
+
console.log("");
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Ensure Clarinet is installed, prompting for installation if needed
|
|
238
|
+
*/
|
|
239
|
+
export async function ensureClarinetInstalled() {
|
|
240
|
+
const installed = await isClarinetInstalled();
|
|
241
|
+
if (installed) {
|
|
242
|
+
const version = await getClarinetVersion();
|
|
243
|
+
logger.info(`Clarinet detected: ${chalk.dim(version || "unknown version")}`);
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
return await promptClarinetInstall();
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=clarinet-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clarinet-installer.js","sourceRoot":"","sources":["../../src/utils/clarinet-installer.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import type { ProjectConfig } from
|
|
1
|
+
import type { ProjectConfig } from "../types/index.js";
|
|
2
2
|
export declare function showIntro(): void;
|
|
3
3
|
export declare function showSuccess(config: ProjectConfig): void;
|
|
4
4
|
export declare function logStep(message: string): void;
|
|
5
5
|
export declare function logError(message: string): void;
|
|
6
6
|
export declare function logWarning(message: string): void;
|
|
7
|
+
export declare function logSuccess(message: string): void;
|
|
8
|
+
export declare function logInfo(message: string): void;
|
|
9
|
+
export declare const logger: {
|
|
10
|
+
info: typeof logInfo;
|
|
11
|
+
success: typeof logSuccess;
|
|
12
|
+
warning: typeof logWarning;
|
|
13
|
+
error: typeof logError;
|
|
14
|
+
step: typeof logStep;
|
|
15
|
+
};
|
|
7
16
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAgB,SAAS,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAgB,SAAS,IAAI,IAAI,CAOhC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CA+BvD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAGD,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,45 +1,59 @@
|
|
|
1
|
-
import chalk from
|
|
1
|
+
import chalk from "chalk";
|
|
2
2
|
export function showIntro() {
|
|
3
3
|
console.log();
|
|
4
|
-
console.log(chalk.cyan.bold(
|
|
5
|
-
console.log(chalk.gray(
|
|
4
|
+
console.log(chalk.cyan.bold(" Create Stacks App"));
|
|
5
|
+
console.log(chalk.gray(" Scaffold full-stack Stacks blockchain applications"));
|
|
6
6
|
console.log();
|
|
7
7
|
}
|
|
8
8
|
export function showSuccess(config) {
|
|
9
9
|
const { projectName, packageManager } = config;
|
|
10
|
-
const runCmd = packageManager ===
|
|
10
|
+
const runCmd = packageManager === "npm" ? "npm run" : packageManager;
|
|
11
11
|
console.log();
|
|
12
|
-
console.log(chalk.green(
|
|
12
|
+
console.log(chalk.green("โ") + " Success! Created " + chalk.bold(projectName));
|
|
13
13
|
console.log();
|
|
14
|
-
console.log(chalk.bold(
|
|
14
|
+
console.log(chalk.bold("Next steps:"));
|
|
15
15
|
console.log();
|
|
16
|
-
console.log(chalk.cyan(
|
|
17
|
-
console.log(chalk.cyan(
|
|
16
|
+
console.log(chalk.cyan(" 1.") + ` cd ${projectName}`);
|
|
17
|
+
console.log(chalk.cyan(" 2.") + ` ${runCmd} dev`);
|
|
18
18
|
console.log();
|
|
19
|
-
console.log(chalk.bold(
|
|
19
|
+
console.log(chalk.bold("Available commands:"));
|
|
20
20
|
console.log();
|
|
21
21
|
console.log(chalk.cyan(` ${runCmd} dev`));
|
|
22
|
-
console.log(
|
|
22
|
+
console.log(" Start development server with Clarinet devnet");
|
|
23
23
|
console.log();
|
|
24
24
|
console.log(chalk.cyan(` ${runCmd} test`));
|
|
25
|
-
console.log(
|
|
25
|
+
console.log(" Run contract tests");
|
|
26
26
|
console.log();
|
|
27
27
|
console.log(chalk.cyan(` ${runCmd} build`));
|
|
28
|
-
console.log(
|
|
28
|
+
console.log(" Build frontend for production");
|
|
29
29
|
console.log();
|
|
30
30
|
console.log(chalk.cyan(` ${runCmd} deploy:testnet`));
|
|
31
|
-
console.log(
|
|
31
|
+
console.log(" Deploy contracts to testnet");
|
|
32
32
|
console.log();
|
|
33
|
-
console.log(chalk.yellow(
|
|
33
|
+
console.log(chalk.yellow("Happy building! ๐"));
|
|
34
34
|
console.log();
|
|
35
35
|
}
|
|
36
36
|
export function logStep(message) {
|
|
37
|
-
console.log(chalk.cyan(
|
|
37
|
+
console.log(chalk.cyan("โ") + " " + message);
|
|
38
38
|
}
|
|
39
39
|
export function logError(message) {
|
|
40
|
-
console.error(chalk.red(
|
|
40
|
+
console.error(chalk.red("โ") + " " + message);
|
|
41
41
|
}
|
|
42
42
|
export function logWarning(message) {
|
|
43
|
-
console.warn(chalk.yellow(
|
|
43
|
+
console.warn(chalk.yellow("โ ") + " " + message);
|
|
44
44
|
}
|
|
45
|
+
export function logSuccess(message) {
|
|
46
|
+
console.log(chalk.green("โ") + " " + message);
|
|
47
|
+
}
|
|
48
|
+
export function logInfo(message) {
|
|
49
|
+
console.log(chalk.blue("โน") + " " + message);
|
|
50
|
+
}
|
|
51
|
+
// Logger object for cleaner API
|
|
52
|
+
export const logger = {
|
|
53
|
+
info: logInfo,
|
|
54
|
+
success: logSuccess,
|
|
55
|
+
warning: logWarning,
|
|
56
|
+
error: logError,
|
|
57
|
+
step: logStep,
|
|
58
|
+
};
|
|
45
59
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CACnE,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAqB;IAC/C,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAE/C,MAAM,MAAM,GAAG,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;IAErE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAClE,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,OAAO,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,QAAQ,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,iBAAiB,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,OAAO;CACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -9,21 +9,21 @@
|
|
|
9
9
|
"lint": "next lint"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@stacks/connect": "^
|
|
13
|
-
"@stacks/connect-react": "^
|
|
14
|
-
"@stacks/network": "^
|
|
15
|
-
"@stacks/transactions": "^
|
|
16
|
-
"next": "14.
|
|
17
|
-
"react": "^18.
|
|
18
|
-
"react-dom": "^18.
|
|
12
|
+
"@stacks/connect": "^8.2.4",
|
|
13
|
+
"@stacks/connect-react": "^23.1.4",
|
|
14
|
+
"@stacks/network": "^7.3.1",
|
|
15
|
+
"@stacks/transactions": "^7.3.1",
|
|
16
|
+
"next": "^14.2.21",
|
|
17
|
+
"react": "^18.3.1",
|
|
18
|
+
"react-dom": "^18.3.1"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@types/node": "^
|
|
21
|
+
"@types/node": "^22",
|
|
22
22
|
"@types/react": "^18",
|
|
23
23
|
"@types/react-dom": "^18",
|
|
24
|
-
"autoprefixer": "^10.
|
|
25
|
-
"postcss": "^8",
|
|
26
|
-
"tailwindcss": "^3.
|
|
27
|
-
"typescript": "^5"
|
|
24
|
+
"autoprefixer": "^10.4.20",
|
|
25
|
+
"postcss": "^8.4.49",
|
|
26
|
+
"tailwindcss": "^3.4.17",
|
|
27
|
+
"typescript": "^5.7.2"
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -10,20 +10,20 @@
|
|
|
10
10
|
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@stacks/connect": "^
|
|
14
|
-
"@stacks/network": "^
|
|
15
|
-
"@stacks/transactions": "^
|
|
16
|
-
"react": "^18.
|
|
17
|
-
"react-dom": "^18.
|
|
13
|
+
"@stacks/connect": "^8.2.4",
|
|
14
|
+
"@stacks/network": "^7.3.1",
|
|
15
|
+
"@stacks/transactions": "^7.3.1",
|
|
16
|
+
"react": "^18.3.1",
|
|
17
|
+
"react-dom": "^18.3.1"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@types/react": "^18.
|
|
21
|
-
"@types/react-dom": "^18.
|
|
22
|
-
"@vitejs/plugin-react": "^4.
|
|
23
|
-
"autoprefixer": "^10.4.
|
|
24
|
-
"postcss": "^8.4.
|
|
25
|
-
"tailwindcss": "^3.
|
|
26
|
-
"typescript": "^5.
|
|
27
|
-
"vite": "^
|
|
20
|
+
"@types/react": "^18.3.18",
|
|
21
|
+
"@types/react-dom": "^18.3.5",
|
|
22
|
+
"@vitejs/plugin-react": "^4.3.4",
|
|
23
|
+
"autoprefixer": "^10.4.20",
|
|
24
|
+
"postcss": "^8.4.49",
|
|
25
|
+
"tailwindcss": "^3.4.17",
|
|
26
|
+
"typescript": "^5.7.2",
|
|
27
|
+
"vite": "^6.1.0"
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -10,18 +10,18 @@
|
|
|
10
10
|
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@stacks/connect": "^
|
|
14
|
-
"@stacks/network": "^
|
|
15
|
-
"@stacks/transactions": "^
|
|
16
|
-
"vue": "^3.
|
|
13
|
+
"@stacks/connect": "^8.2.4",
|
|
14
|
+
"@stacks/network": "^7.3.1",
|
|
15
|
+
"@stacks/transactions": "^7.3.1",
|
|
16
|
+
"vue": "^3.5.13"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@vitejs/plugin-vue": "^
|
|
20
|
-
"autoprefixer": "^10.4.
|
|
21
|
-
"postcss": "^8.4.
|
|
22
|
-
"tailwindcss": "^3.
|
|
23
|
-
"typescript": "^5.
|
|
24
|
-
"vite": "^
|
|
25
|
-
"vue-tsc": "^
|
|
19
|
+
"@vitejs/plugin-vue": "^5.2.1",
|
|
20
|
+
"autoprefixer": "^10.4.20",
|
|
21
|
+
"postcss": "^8.4.49",
|
|
22
|
+
"tailwindcss": "^3.4.17",
|
|
23
|
+
"typescript": "^5.7.2",
|
|
24
|
+
"vite": "^6.1.0",
|
|
25
|
+
"vue-tsc": "^2.2.0"
|
|
26
26
|
}
|
|
27
27
|
}
|