@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 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
+ [![npm version](https://badge.fury.io/js/@devvmichael%2Fcreate-stacks-app.svg)](https://www.npmjs.com/package/@devvmichael/create-stacks-app)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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;AAoBtE,wBAAsB,aAAa,CACjC,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAsDf"}
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"}
@@ -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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"}
@@ -1,7 +1,16 @@
1
- import type { ProjectConfig } from '../types/index.js';
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,CAKhC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CA6BvD;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"}
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"}
@@ -1,45 +1,59 @@
1
- import chalk from 'chalk';
1
+ import chalk from "chalk";
2
2
  export function showIntro() {
3
3
  console.log();
4
- console.log(chalk.cyan.bold(' Create Stacks App'));
5
- console.log(chalk.gray(' Scaffold full-stack Stacks blockchain applications'));
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 === 'npm' ? 'npm run' : packageManager;
10
+ const runCmd = packageManager === "npm" ? "npm run" : packageManager;
11
11
  console.log();
12
- console.log(chalk.green('โœ“') + ' Success! Created ' + chalk.bold(projectName));
12
+ console.log(chalk.green("โœ“") + " Success! Created " + chalk.bold(projectName));
13
13
  console.log();
14
- console.log(chalk.bold('Next steps:'));
14
+ console.log(chalk.bold("Next steps:"));
15
15
  console.log();
16
- console.log(chalk.cyan(' 1.') + ` cd ${projectName}`);
17
- console.log(chalk.cyan(' 2.') + ` ${runCmd} dev`);
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('Available commands:'));
19
+ console.log(chalk.bold("Available commands:"));
20
20
  console.log();
21
21
  console.log(chalk.cyan(` ${runCmd} dev`));
22
- console.log(' Start development server with Clarinet devnet');
22
+ console.log(" Start development server with Clarinet devnet");
23
23
  console.log();
24
24
  console.log(chalk.cyan(` ${runCmd} test`));
25
- console.log(' Run contract tests');
25
+ console.log(" Run contract tests");
26
26
  console.log();
27
27
  console.log(chalk.cyan(` ${runCmd} build`));
28
- console.log(' Build frontend for production');
28
+ console.log(" Build frontend for production");
29
29
  console.log();
30
30
  console.log(chalk.cyan(` ${runCmd} deploy:testnet`));
31
- console.log(' Deploy contracts to testnet');
31
+ console.log(" Deploy contracts to testnet");
32
32
  console.log();
33
- console.log(chalk.yellow('Happy building! ๐Ÿš€'));
33
+ console.log(chalk.yellow("Happy building! ๐Ÿš€"));
34
34
  console.log();
35
35
  }
36
36
  export function logStep(message) {
37
- console.log(chalk.cyan('โ—‹') + ' ' + message);
37
+ console.log(chalk.cyan("โ—‹") + " " + message);
38
38
  }
39
39
  export function logError(message) {
40
- console.error(chalk.red('โœ–') + ' ' + message);
40
+ console.error(chalk.red("โœ–") + " " + message);
41
41
  }
42
42
  export function logWarning(message) {
43
- console.warn(chalk.yellow('โš ') + ' ' + message);
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
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devvmichael/create-stacks-app",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Scaffold full-stack Stacks blockchain applications",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -9,21 +9,21 @@
9
9
  "lint": "next lint"
10
10
  },
11
11
  "dependencies": {
12
- "@stacks/connect": "^7.8.2",
13
- "@stacks/connect-react": "^21.1.1",
14
- "@stacks/network": "^6.13.0",
15
- "@stacks/transactions": "^6.13.1",
16
- "next": "14.1.0",
17
- "react": "^18.2.0",
18
- "react-dom": "^18.2.0"
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": "^20",
21
+ "@types/node": "^22",
22
22
  "@types/react": "^18",
23
23
  "@types/react-dom": "^18",
24
- "autoprefixer": "^10.0.1",
25
- "postcss": "^8",
26
- "tailwindcss": "^3.3.0",
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": "^7.8.2",
14
- "@stacks/network": "^6.13.0",
15
- "@stacks/transactions": "^6.13.1",
16
- "react": "^18.2.0",
17
- "react-dom": "^18.2.0"
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.2.43",
21
- "@types/react-dom": "^18.2.17",
22
- "@vitejs/plugin-react": "^4.2.1",
23
- "autoprefixer": "^10.4.16",
24
- "postcss": "^8.4.32",
25
- "tailwindcss": "^3.3.6",
26
- "typescript": "^5.3.3",
27
- "vite": "^5.0.10"
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": "^7.8.2",
14
- "@stacks/network": "^6.13.0",
15
- "@stacks/transactions": "^6.13.1",
16
- "vue": "^3.4.0"
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": "^4.5.2",
20
- "autoprefixer": "^10.4.16",
21
- "postcss": "^8.4.32",
22
- "tailwindcss": "^3.3.6",
23
- "typescript": "^5.3.3",
24
- "vite": "^5.0.10",
25
- "vue-tsc": "^1.8.25"
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
  }