create-mn-app 0.3.19 → 0.3.20

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.
Files changed (44) hide show
  1. package/README.md +51 -37
  2. package/dist/__tests__/error-handler.test.d.ts +2 -0
  3. package/dist/__tests__/error-handler.test.d.ts.map +1 -0
  4. package/dist/__tests__/error-handler.test.js +47 -0
  5. package/dist/__tests__/error-handler.test.js.map +1 -0
  6. package/dist/__tests__/package-manager.test.d.ts +2 -0
  7. package/dist/__tests__/package-manager.test.d.ts.map +1 -0
  8. package/dist/__tests__/package-manager.test.js +39 -0
  9. package/dist/__tests__/package-manager.test.js.map +1 -0
  10. package/dist/__tests__/template-manager.test.d.ts +2 -0
  11. package/dist/__tests__/template-manager.test.d.ts.map +1 -0
  12. package/dist/__tests__/template-manager.test.js +50 -0
  13. package/dist/__tests__/template-manager.test.js.map +1 -0
  14. package/dist/__tests__/templates.test.d.ts +2 -0
  15. package/dist/__tests__/templates.test.d.ts.map +1 -0
  16. package/dist/__tests__/templates.test.js +119 -0
  17. package/dist/__tests__/templates.test.js.map +1 -0
  18. package/dist/__tests__/validation.test.d.ts +2 -0
  19. package/dist/__tests__/validation.test.d.ts.map +1 -0
  20. package/dist/__tests__/validation.test.js +43 -0
  21. package/dist/__tests__/validation.test.js.map +1 -0
  22. package/dist/cli.js +13 -1
  23. package/dist/cli.js.map +1 -1
  24. package/dist/create-app.d.ts +3 -0
  25. package/dist/create-app.d.ts.map +1 -1
  26. package/dist/create-app.js +300 -102
  27. package/dist/create-app.js.map +1 -1
  28. package/dist/installers/package-installer.d.ts.map +1 -1
  29. package/dist/installers/package-installer.js.map +1 -1
  30. package/dist/utils/git-cloner.d.ts +2 -2
  31. package/dist/utils/git-cloner.d.ts.map +1 -1
  32. package/dist/utils/git-cloner.js +34 -13
  33. package/dist/utils/git-cloner.js.map +1 -1
  34. package/dist/utils/git-utils.d.ts.map +1 -1
  35. package/dist/utils/git-utils.js.map +1 -1
  36. package/dist/utils/setup-guide.d.ts +4 -14
  37. package/dist/utils/setup-guide.d.ts.map +1 -1
  38. package/dist/utils/setup-guide.js +50 -93
  39. package/dist/utils/setup-guide.js.map +1 -1
  40. package/dist/utils/templates.d.ts +27 -5
  41. package/dist/utils/templates.d.ts.map +1 -1
  42. package/dist/utils/templates.js +158 -2
  43. package/dist/utils/templates.js.map +1 -1
  44. package/package.json +18 -4
package/README.md CHANGED
@@ -33,55 +33,53 @@ The `setup` command:
33
33
 
34
34
  ## Templates
35
35
 
36
- ### Hello World (Default)
37
-
38
- Basic message storage contract demonstrating state management.
36
+ Templates are organized by category. The interactive flow guides you through category → template selection.
39
37
 
40
38
  ```bash
41
- npx create-mn-app my-app
42
- cd my-app
43
- npm run setup # starts proof server, compiles, deploys
44
- npm run cli # interact with deployed contract
39
+ npx create-mn-app my-app # interactive: pick category then template
40
+ npx create-mn-app my-app --list # list all templates grouped by category
45
41
  ```
46
42
 
47
- ### Counter
43
+ ### Contract
48
44
 
49
- Increment/decrement counter with zkProofs. Cloned from [midnightntwrk/example-counter](https://github.com/midnightntwrk/example-counter).
45
+ | Template | Description |
46
+ | -------- | ----------- |
47
+ | `hello-world` (default) | Basic message storage contract demonstrating state management |
50
48
 
51
49
  ```bash
52
- npx create-mn-app my-app --template counter
50
+ npx create-mn-app my-app
53
51
  cd my-app
54
- npm install
55
- # follow displayed instructions
52
+ npm run setup # starts proof server, compiles, deploys
53
+ npm run cli # interact with deployed contract
56
54
  ```
57
55
 
58
- Requires Compact compiler - the CLI will check and offer to install it.
56
+ ### Full DApp
59
57
 
60
- ### Bulletin Board (Bboard)
61
-
62
- Multi-user bulletin board with privacy patterns. Includes CLI and Web UI. Cloned from [midnightntwrk/example-bboard](https://github.com/midnightntwrk/example-bboard).
58
+ | Template | Description |
59
+ | -------- | ----------- |
60
+ | `counter` | Increment/decrement app with zkProofs ([source](https://github.com/midnightntwrk/example-counter)) |
61
+ | `bboard` | Multi-user bulletin board with privacy patterns ([source](https://github.com/midnightntwrk/example-bboard)) |
62
+ | `dex` | Decentralized exchange using FungibleToken *(coming soon)* |
63
+ | `midnight-kitties` | NFT-based full stack DApp *(coming soon)* |
63
64
 
64
65
  ```bash
66
+ npx create-mn-app my-app --template counter
65
67
  npx create-mn-app my-app --template bboard
66
- cd my-app
67
- npm install
68
- # follow displayed instructions
69
68
  ```
70
69
 
71
- Requires Compact compiler and Lace wallet extension (for Web UI).
70
+ Requires Compact compiler the CLI will check and offer to install it.
72
71
 
73
- ### Coming Soon
72
+ ### Connector
74
73
 
75
- - DEX - Decentralized exchange using FungibleToken
76
- - Midnight Kitties - NFT-based full stack DApp
74
+ Integration examples and patterns *(coming soon)*.
77
75
 
78
76
  ## Requirements
79
77
 
80
- | Requirement | Version | Notes |
81
- | ---------------- | ------- | -------------------------------------------- |
82
- | Node.js | 22+ | Required for all templates |
83
- | Docker | Latest | Runs proof server |
84
- | Compact Compiler | 0.23.0+ | Counter template only (auto-install offered) |
78
+ | Requirement | Version | Notes |
79
+ | ---------------- | ------- | -------------------------------------------------- |
80
+ | Node.js | 22+ | Required for all templates |
81
+ | Docker | Latest | Runs proof server |
82
+ | Compact Compiler | 0.28.0+ | Counter and Bboard templates (auto-install offered)|
85
83
 
86
84
  ## CLI Options
87
85
 
@@ -89,15 +87,31 @@ Requires Compact compiler and Lace wallet extension (for Web UI).
89
87
  npx create-mn-app [project-name] [options]
90
88
  ```
91
89
 
92
- | Option | Description |
93
- | ------------------------- | ---------------------------------- |
94
- | `-t, --template <name>` | Template: `hello-world`, `counter` |
95
- | `--use-npm/yarn/pnpm/bun` | Force package manager |
96
- | `--skip-install` | Skip dependency installation |
97
- | `--skip-git` | Skip git initialization |
98
- | `--verbose` | Show detailed output |
99
- | `-h, --help` | Show help |
100
- | `-V, --version` | Show version |
90
+ | Option | Description |
91
+ | ------------------------- | ---------------------------------------------------- |
92
+ | `-t, --template <name>` | Template: `hello-world`, `counter`, `bboard` |
93
+ | `--list` | List all available templates grouped by category |
94
+ | `-y, --yes` | Accept all defaults (non-interactive mode) |
95
+ | `--dry-run` | Preview what will be created without writing files |
96
+ | `--from <owner/repo>` | Create from a custom GitHub repository |
97
+ | `--use-npm/yarn/pnpm/bun` | Force package manager |
98
+ | `--skip-install` | Skip dependency installation |
99
+ | `--skip-git` | Skip git initialization |
100
+ | `--verbose` | Show detailed output |
101
+ | `-h, --help` | Show help |
102
+ | `-V, --version` | Show version |
103
+
104
+ ### Non-Interactive / CI Mode
105
+
106
+ Use `-y` or set `CI=true` / `GITHUB_ACTIONS=true` to skip all prompts:
107
+
108
+ ```bash
109
+ npx create-mn-app my-app -y -t counter # defaults, no prompts
110
+ CI=true npx create-mn-app my-app # auto-detected in CI
111
+
112
+ npx create-mn-app my-app --dry-run # preview without writing files
113
+ npx create-mn-app my-app --from user/repo # clone any GitHub repo
114
+ ```
101
115
 
102
116
  ## Project Structure
103
117
 
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=error-handler.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/error-handler.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const error_handler_1 = require("../utils/error-handler");
5
+ (0, vitest_1.describe)("ErrorHandler.formatError", () => {
6
+ (0, vitest_1.it)("formats error with context", () => {
7
+ const result = error_handler_1.ErrorHandler.formatError(new Error("something failed"), "creating app");
8
+ (0, vitest_1.expect)(result).toContain("something failed");
9
+ (0, vitest_1.expect)(result).toContain("creating app");
10
+ });
11
+ (0, vitest_1.it)("formats error without context", () => {
12
+ const result = error_handler_1.ErrorHandler.formatError(new Error("oops"));
13
+ (0, vitest_1.expect)(result).toContain("oops");
14
+ (0, vitest_1.expect)(result).toContain("Error");
15
+ });
16
+ });
17
+ (0, vitest_1.describe)("ErrorHandler.suggestSolution", () => {
18
+ (0, vitest_1.it)("suggests permission fixes for EACCES errors", () => {
19
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
20
+ error_handler_1.ErrorHandler.suggestSolution(new Error("EACCES: permission denied"));
21
+ const output = consoleSpy.mock.calls.map((c) => c[0]).join("\n");
22
+ (0, vitest_1.expect)(output).toContain("npm permissions");
23
+ consoleSpy.mockRestore();
24
+ });
25
+ (0, vitest_1.it)("suggests network fixes for timeout errors", () => {
26
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
27
+ error_handler_1.ErrorHandler.suggestSolution(new Error("network timeout occurred"));
28
+ const output = consoleSpy.mock.calls.map((c) => c[0]).join("\n");
29
+ (0, vitest_1.expect)(output).toContain("internet connection");
30
+ consoleSpy.mockRestore();
31
+ });
32
+ (0, vitest_1.it)("suggests Docker fixes for docker errors", () => {
33
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
34
+ error_handler_1.ErrorHandler.suggestSolution(new Error("docker daemon not running"));
35
+ const output = consoleSpy.mock.calls.map((c) => c[0]).join("\n");
36
+ (0, vitest_1.expect)(output).toContain("Docker");
37
+ consoleSpy.mockRestore();
38
+ });
39
+ (0, vitest_1.it)("suggests generic fixes for unknown errors", () => {
40
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
41
+ error_handler_1.ErrorHandler.suggestSolution(new Error("unexpected error xyz"));
42
+ const output = consoleSpy.mock.calls.map((c) => c[0]).join("\n");
43
+ (0, vitest_1.expect)(output).toContain("--verbose");
44
+ consoleSpy.mockRestore();
45
+ });
46
+ });
47
+ //# sourceMappingURL=error-handler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.test.js","sourceRoot":"","sources":["../../src/__tests__/error-handler.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=package-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/package-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const package_manager_1 = require("../utils/package-manager");
5
+ (0, vitest_1.describe)("getPackageManagerInfo", () => {
6
+ (0, vitest_1.it)("returns correct info for npm", () => {
7
+ const info = (0, package_manager_1.getPackageManagerInfo)("npm");
8
+ (0, vitest_1.expect)(info.name).toBe("npm");
9
+ (0, vitest_1.expect)(info.lockFile).toBe("package-lock.json");
10
+ (0, vitest_1.expect)(info.installCommand).toBe("npm install");
11
+ (0, vitest_1.expect)(info.runCommand).toBe("npm run");
12
+ (0, vitest_1.expect)(info.addCommand).toBe("npm install");
13
+ });
14
+ (0, vitest_1.it)("returns correct info for yarn", () => {
15
+ const info = (0, package_manager_1.getPackageManagerInfo)("yarn");
16
+ (0, vitest_1.expect)(info.name).toBe("yarn");
17
+ (0, vitest_1.expect)(info.lockFile).toBe("yarn.lock");
18
+ (0, vitest_1.expect)(info.installCommand).toBe("yarn");
19
+ (0, vitest_1.expect)(info.runCommand).toBe("yarn");
20
+ (0, vitest_1.expect)(info.addCommand).toBe("yarn add");
21
+ });
22
+ (0, vitest_1.it)("returns correct info for pnpm", () => {
23
+ const info = (0, package_manager_1.getPackageManagerInfo)("pnpm");
24
+ (0, vitest_1.expect)(info.name).toBe("pnpm");
25
+ (0, vitest_1.expect)(info.lockFile).toBe("pnpm-lock.yaml");
26
+ (0, vitest_1.expect)(info.installCommand).toBe("pnpm install");
27
+ (0, vitest_1.expect)(info.runCommand).toBe("pnpm");
28
+ (0, vitest_1.expect)(info.addCommand).toBe("pnpm add");
29
+ });
30
+ (0, vitest_1.it)("returns correct info for bun", () => {
31
+ const info = (0, package_manager_1.getPackageManagerInfo)("bun");
32
+ (0, vitest_1.expect)(info.name).toBe("bun");
33
+ (0, vitest_1.expect)(info.lockFile).toBe("bun.lockb");
34
+ (0, vitest_1.expect)(info.installCommand).toBe("bun install");
35
+ (0, vitest_1.expect)(info.runCommand).toBe("bun run");
36
+ (0, vitest_1.expect)(info.addCommand).toBe("bun add");
37
+ });
38
+ });
39
+ //# sourceMappingURL=package-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/package-manager.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,8DAAiE;AAEjE,IAAA,iBAAQ,EAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAA,WAAE,EAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,IAAA,uCAAqB,EAAC,KAAK,CAAC,CAAC;QAC1C,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAA,eAAM,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,IAAA,uCAAqB,EAAC,MAAM,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAA,eAAM,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,IAAA,eAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAA,eAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,IAAA,uCAAqB,EAAC,MAAM,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAA,eAAM,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7C,IAAA,eAAM,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,IAAA,eAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAA,eAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,IAAA,uCAAqB,EAAC,KAAK,CAAC,CAAC;QAC1C,IAAA,eAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAA,eAAM,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=template-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/template-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
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 vitest_1 = require("vitest");
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const template_manager_1 = require("../utils/template-manager");
11
+ (0, vitest_1.describe)("TemplateManager", () => {
12
+ const tmpDirs = [];
13
+ function createTmpDir() {
14
+ const dir = fs_extra_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), "mn-test-"));
15
+ tmpDirs.push(dir);
16
+ return dir;
17
+ }
18
+ (0, vitest_1.afterEach)(async () => {
19
+ for (const dir of tmpDirs) {
20
+ await fs_extra_1.default.remove(dir);
21
+ }
22
+ tmpDirs.length = 0;
23
+ });
24
+ (0, vitest_1.it)("scaffolds hello-world template with variable interpolation", async () => {
25
+ const targetDir = createTmpDir();
26
+ const manager = new template_manager_1.TemplateManager("hello-world");
27
+ await manager.scaffold(targetDir, "test-project");
28
+ // Check key files exist
29
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, "package.json"))).toBe(true);
30
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, "tsconfig.json"))).toBe(true);
31
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, ".gitignore"))).toBe(true);
32
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, "README.md"))).toBe(true);
33
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, "contracts", "hello-world.compact"))).toBe(true);
34
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, "src", "deploy.ts"))).toBe(true);
35
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, "src", "cli.ts"))).toBe(true);
36
+ // Check .template files are NOT present (should be stripped)
37
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, "package.json.template"))).toBe(false);
38
+ // Check variable interpolation in package.json
39
+ const pkg = JSON.parse(fs_extra_1.default.readFileSync(path_1.default.join(targetDir, "package.json"), "utf-8"));
40
+ (0, vitest_1.expect)(pkg.name).toBe("test-project");
41
+ });
42
+ (0, vitest_1.it)("renames _gitignore to .gitignore", async () => {
43
+ const targetDir = createTmpDir();
44
+ const manager = new template_manager_1.TemplateManager("hello-world");
45
+ await manager.scaffold(targetDir, "my-app");
46
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, ".gitignore"))).toBe(true);
47
+ (0, vitest_1.expect)(fs_extra_1.default.existsSync(path_1.default.join(targetDir, "_gitignore"))).toBe(false);
48
+ });
49
+ });
50
+ //# sourceMappingURL=template-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/template-manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=templates.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/templates.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const templates_1 = require("../utils/templates");
5
+ (0, vitest_1.describe)("getAllTemplates", () => {
6
+ (0, vitest_1.it)("returns all templates including coming soon", () => {
7
+ const templates = (0, templates_1.getAllTemplates)();
8
+ (0, vitest_1.expect)(templates.length).toBeGreaterThanOrEqual(5);
9
+ (0, vitest_1.expect)(templates.some((t) => t.comingSoon)).toBe(true);
10
+ });
11
+ });
12
+ (0, vitest_1.describe)("getAvailableTemplates", () => {
13
+ (0, vitest_1.it)("returns only available templates", () => {
14
+ const templates = (0, templates_1.getAvailableTemplates)();
15
+ (0, vitest_1.expect)(templates.length).toBeGreaterThan(0);
16
+ (0, vitest_1.expect)(templates.every((t) => t.available)).toBe(true);
17
+ });
18
+ (0, vitest_1.it)("does not include coming soon templates", () => {
19
+ const templates = (0, templates_1.getAvailableTemplates)();
20
+ (0, vitest_1.expect)(templates.every((t) => !t.comingSoon)).toBe(true);
21
+ });
22
+ });
23
+ (0, vitest_1.describe)("getTemplate", () => {
24
+ (0, vitest_1.it)("returns template by name", () => {
25
+ const template = (0, templates_1.getTemplate)("hello-world");
26
+ (0, vitest_1.expect)(template).toBeDefined();
27
+ (0, vitest_1.expect)(template.name).toBe("hello-world");
28
+ (0, vitest_1.expect)(template.type).toBe("bundled");
29
+ });
30
+ (0, vitest_1.it)("returns remote template by name", () => {
31
+ const template = (0, templates_1.getTemplate)("counter");
32
+ (0, vitest_1.expect)(template).toBeDefined();
33
+ (0, vitest_1.expect)(template.type).toBe("remote");
34
+ (0, vitest_1.expect)(template.repo).toBeDefined();
35
+ });
36
+ (0, vitest_1.it)("returns undefined for unknown template", () => {
37
+ (0, vitest_1.expect)((0, templates_1.getTemplate)("nonexistent")).toBeUndefined();
38
+ });
39
+ });
40
+ (0, vitest_1.describe)("isValidTemplate", () => {
41
+ (0, vitest_1.it)("returns true for available templates", () => {
42
+ (0, vitest_1.expect)((0, templates_1.isValidTemplate)("hello-world")).toBe(true);
43
+ (0, vitest_1.expect)((0, templates_1.isValidTemplate)("counter")).toBe(true);
44
+ });
45
+ (0, vitest_1.it)("returns false for coming soon templates", () => {
46
+ (0, vitest_1.expect)((0, templates_1.isValidTemplate)("dex")).toBe(false);
47
+ (0, vitest_1.expect)((0, templates_1.isValidTemplate)("midnight-kitties")).toBe(false);
48
+ });
49
+ (0, vitest_1.it)("returns false for nonexistent templates", () => {
50
+ (0, vitest_1.expect)((0, templates_1.isValidTemplate)("nonexistent")).toBe(false);
51
+ });
52
+ });
53
+ (0, vitest_1.describe)("getCategories", () => {
54
+ (0, vitest_1.it)("returns all defined categories including empty ones", () => {
55
+ const categories = (0, templates_1.getCategories)();
56
+ (0, vitest_1.expect)(categories).toContain("contract");
57
+ (0, vitest_1.expect)(categories).toContain("dapp");
58
+ (0, vitest_1.expect)(categories).toContain("connector");
59
+ });
60
+ });
61
+ (0, vitest_1.describe)("getTemplatesByCategory", () => {
62
+ (0, vitest_1.it)("returns contract templates", () => {
63
+ const templates = (0, templates_1.getTemplatesByCategory)("contract");
64
+ (0, vitest_1.expect)(templates.length).toBeGreaterThan(0);
65
+ (0, vitest_1.expect)(templates.every((t) => t.category === "contract")).toBe(true);
66
+ });
67
+ (0, vitest_1.it)("returns dapp templates", () => {
68
+ const templates = (0, templates_1.getTemplatesByCategory)("dapp");
69
+ (0, vitest_1.expect)(templates.length).toBeGreaterThan(0);
70
+ (0, vitest_1.expect)(templates.every((t) => t.category === "dapp")).toBe(true);
71
+ });
72
+ (0, vitest_1.it)("returns empty array for category with no templates", () => {
73
+ const templates = (0, templates_1.getTemplatesByCategory)("connector");
74
+ (0, vitest_1.expect)(templates).toEqual([]);
75
+ });
76
+ });
77
+ (0, vitest_1.describe)("getCategoryDisplay", () => {
78
+ (0, vitest_1.it)("returns display info for contract category", () => {
79
+ const info = (0, templates_1.getCategoryDisplay)("contract");
80
+ (0, vitest_1.expect)(info.title).toBeTruthy();
81
+ (0, vitest_1.expect)(info.description).toBeTruthy();
82
+ });
83
+ (0, vitest_1.it)("returns display info for dapp category", () => {
84
+ const info = (0, templates_1.getCategoryDisplay)("dapp");
85
+ (0, vitest_1.expect)(info.title).toBeTruthy();
86
+ (0, vitest_1.expect)(info.description).toBeTruthy();
87
+ });
88
+ (0, vitest_1.it)("returns display info for connector category", () => {
89
+ const info = (0, templates_1.getCategoryDisplay)("connector");
90
+ (0, vitest_1.expect)(info.title).toBeTruthy();
91
+ (0, vitest_1.expect)(info.description).toBeTruthy();
92
+ });
93
+ });
94
+ (0, vitest_1.describe)("template structure", () => {
95
+ (0, vitest_1.it)("all templates have required fields", () => {
96
+ const templates = (0, templates_1.getAllTemplates)();
97
+ for (const t of templates) {
98
+ (0, vitest_1.expect)(t.name).toBeTruthy();
99
+ (0, vitest_1.expect)(t.display).toBeTruthy();
100
+ (0, vitest_1.expect)(t.description).toBeTruthy();
101
+ (0, vitest_1.expect)(typeof t.available).toBe("boolean");
102
+ (0, vitest_1.expect)(["bundled", "remote"]).toContain(t.type);
103
+ (0, vitest_1.expect)(["contract", "dapp", "connector"]).toContain(t.category);
104
+ }
105
+ });
106
+ (0, vitest_1.it)("remote templates have a repo", () => {
107
+ const templates = (0, templates_1.getAllTemplates)().filter((t) => t.type === "remote");
108
+ for (const t of templates) {
109
+ (0, vitest_1.expect)(t.repo).toBeTruthy();
110
+ }
111
+ });
112
+ (0, vitest_1.it)("templates with compact compiler requirement have a version", () => {
113
+ const templates = (0, templates_1.getAllTemplates)().filter((t) => t.requiresCompactCompiler);
114
+ for (const t of templates) {
115
+ (0, vitest_1.expect)(t.compactVersion).toBeTruthy();
116
+ }
117
+ });
118
+ });
119
+ //# sourceMappingURL=templates.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../src/__tests__/templates.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/validation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const validation_1 = require("../utils/validation");
5
+ (0, vitest_1.describe)("validateProjectName", () => {
6
+ (0, vitest_1.it)("accepts valid kebab-case names", () => {
7
+ (0, vitest_1.expect)((0, validation_1.validateProjectName)("my-midnight-app")).toEqual({ valid: true });
8
+ (0, vitest_1.expect)((0, validation_1.validateProjectName)("hello-world")).toEqual({ valid: true });
9
+ (0, vitest_1.expect)((0, validation_1.validateProjectName)("test")).toEqual({ valid: true });
10
+ });
11
+ (0, vitest_1.it)("accepts names with numbers", () => {
12
+ (0, vitest_1.expect)((0, validation_1.validateProjectName)("app-v2")).toEqual({ valid: true });
13
+ (0, vitest_1.expect)((0, validation_1.validateProjectName)("my-app-123")).toEqual({ valid: true });
14
+ });
15
+ (0, vitest_1.it)("rejects uppercase letters", () => {
16
+ const result = (0, validation_1.validateProjectName)("MyApp");
17
+ (0, vitest_1.expect)(result.valid).toBe(false);
18
+ (0, vitest_1.expect)(result.problems).toBeDefined();
19
+ (0, vitest_1.expect)(result.problems.some((p) => p.includes("uppercase"))).toBe(true);
20
+ });
21
+ (0, vitest_1.it)("rejects empty names", () => {
22
+ const result = (0, validation_1.validateProjectName)("");
23
+ (0, vitest_1.expect)(result.valid).toBe(false);
24
+ (0, vitest_1.expect)(result.problems).toBeDefined();
25
+ });
26
+ (0, vitest_1.it)("rejects names starting with a dot", () => {
27
+ const result = (0, validation_1.validateProjectName)(".hidden-app");
28
+ (0, vitest_1.expect)(result.valid).toBe(false);
29
+ });
30
+ (0, vitest_1.it)("rejects names starting with underscore", () => {
31
+ const result = (0, validation_1.validateProjectName)("_private-app");
32
+ (0, vitest_1.expect)(result.valid).toBe(false);
33
+ });
34
+ (0, vitest_1.it)("rejects names with spaces", () => {
35
+ const result = (0, validation_1.validateProjectName)("my app");
36
+ (0, vitest_1.expect)(result.valid).toBe(false);
37
+ });
38
+ (0, vitest_1.it)("rejects names with special characters", () => {
39
+ const result = (0, validation_1.validateProjectName)("my@app");
40
+ (0, vitest_1.expect)(result.valid).toBe(false);
41
+ });
42
+ });
43
+ //# sourceMappingURL=validation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../src/__tests__/validation.test.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -55,6 +55,7 @@ const chalk_1 = __importDefault(require("chalk"));
55
55
  const update_notifier_1 = __importDefault(require("update-notifier"));
56
56
  const create_app_1 = require("./create-app");
57
57
  const error_handler_1 = require("./utils/error-handler");
58
+ const templates_1 = require("./utils/templates");
58
59
  const path = __importStar(require("path"));
59
60
  const fs = __importStar(require("fs"));
60
61
  const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "../package.json"), "utf-8"));
@@ -78,8 +79,19 @@ program
78
79
  .option("--skip-install", "Skip package installation")
79
80
  .option("--skip-git", "Skip git repository initialization")
80
81
  .option("--verbose", "Show detailed output")
82
+ .option("--list", "List all available templates")
83
+ .option("-y, --yes", "Accept all defaults (non-interactive mode)")
84
+ .option("--dry-run", "Preview what will be created without writing files")
85
+ .option("--from <repo>", "Create from a custom GitHub repository (e.g., user/repo)")
81
86
  .action(async (projectDirectory, options) => {
82
- console.log(chalk_1.default.bold.cyan("\ncreate-mn-app") + chalk_1.default.gray(` v${pkg.version}\n`));
87
+ console.log();
88
+ console.log(chalk_1.default.bgCyan(chalk_1.default.black(" create-mn-app ")) +
89
+ chalk_1.default.dim(` v${pkg.version}`));
90
+ console.log();
91
+ if (options.list) {
92
+ (0, templates_1.listTemplates)();
93
+ return;
94
+ }
83
95
  try {
84
96
  await (0, create_app_1.createApp)(projectDirectory, options);
85
97
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,yCAAyC;AACzC,sCAAsC;AACtC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,kDAAkD;AAClD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjC,yCAAoC;AACpC,kDAA0B;AAC1B,sEAA6C;AAC7C,6CAAyC;AACzC,yDAAqD;AACrD,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAClE,CAAC;AAEF,oBAAoB;AACpB,IAAA,yBAAc,EAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;IACvE,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,2DAA2D;AAC3D,4BAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAElC,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,QAAQ,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAClE,MAAM,CACL,uBAAuB,EACvB,uEAAuE,CACxE;KACA,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACzC,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC;KAC3C,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACzC,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;KACrD,MAAM,CAAC,YAAY,EAAE,oCAAoC,CAAC;KAC1D,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE;IAC1C,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,CACtE,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,IAAA,sBAAS,EAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CACX,4BAAY,CAAC,WAAW,CACtB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACzD,cAAc,CACf,CACF,CAAC;QAEF,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,4BAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC1C,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,9 @@ export interface CreateAppOptions {
7
7
  skipInstall?: boolean;
8
8
  skipGit?: boolean;
9
9
  verbose?: boolean;
10
+ yes?: boolean;
11
+ dryRun?: boolean;
12
+ from?: string;
10
13
  }
11
14
  export declare function createApp(projectDirectory: string | undefined, options: CreateAppOptions): Promise<void>;
12
15
  //# sourceMappingURL=create-app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"AA0CA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAyBD,wBAAsB,SAAS,CAC7B,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA2Kf"}
1
+ {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../src/create-app.ts"],"names":[],"mappings":"AAoEA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAyBD,wBAAsB,SAAS,CAC7B,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAqRf"}