create-mn-app 0.3.18 → 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 +52 -26
  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 -10
  37. package/dist/utils/setup-guide.d.ts.map +1 -1
  38. package/dist/utils/setup-guide.js +52 -44
  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 +161 -3
  43. package/dist/utils/templates.js.map +1 -1
  44. package/package.json +18 -4
package/README.md CHANGED
@@ -33,9 +33,18 @@ The `setup` command:
33
33
 
34
34
  ## Templates
35
35
 
36
- ### Hello World (Default)
36
+ Templates are organized by category. The interactive flow guides you through category → template selection.
37
37
 
38
- Basic message storage contract demonstrating state management.
38
+ ```bash
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
41
+ ```
42
+
43
+ ### Contract
44
+
45
+ | Template | Description |
46
+ | -------- | ----------- |
47
+ | `hello-world` (default) | Basic message storage contract demonstrating state management |
39
48
 
40
49
  ```bash
41
50
  npx create-mn-app my-app
@@ -44,32 +53,33 @@ npm run setup # starts proof server, compiles, deploys
44
53
  npm run cli # interact with deployed contract
45
54
  ```
46
55
 
47
- ### Counter
56
+ ### Full DApp
48
57
 
49
- Increment/decrement counter with zkProofs. Cloned from [midnightntwrk/example-counter](https://github.com/midnightntwrk/example-counter).
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)* |
50
64
 
51
65
  ```bash
52
66
  npx create-mn-app my-app --template counter
53
- cd my-app
54
- npm install
55
- # follow displayed instructions
67
+ npx create-mn-app my-app --template bboard
56
68
  ```
57
69
 
58
- Requires Compact compiler - the CLI will check and offer to install it.
70
+ Requires Compact compiler the CLI will check and offer to install it.
59
71
 
60
- ### Coming Soon
72
+ ### Connector
61
73
 
62
- - Bulletin Board - Multi-user interactions with privacy patterns
63
- - DEX - Decentralized exchange using FungibleToken
64
- - Midnight Kitties - NFT-based full stack DApp
74
+ Integration examples and patterns *(coming soon)*.
65
75
 
66
76
  ## Requirements
67
77
 
68
- | Requirement | Version | Notes |
69
- | ---------------- | ------- | -------------------------------------------- |
70
- | Node.js | 22+ | Required for all templates |
71
- | Docker | Latest | Runs proof server |
72
- | 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)|
73
83
 
74
84
  ## CLI Options
75
85
 
@@ -77,15 +87,31 @@ Requires Compact compiler - the CLI will check and offer to install it.
77
87
  npx create-mn-app [project-name] [options]
78
88
  ```
79
89
 
80
- | Option | Description |
81
- | ------------------------- | ---------------------------------- |
82
- | `-t, --template <name>` | Template: `hello-world`, `counter` |
83
- | `--use-npm/yarn/pnpm/bun` | Force package manager |
84
- | `--skip-install` | Skip dependency installation |
85
- | `--skip-git` | Skip git initialization |
86
- | `--verbose` | Show detailed output |
87
- | `-h, --help` | Show help |
88
- | `-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
+ ```
89
115
 
90
116
  ## Project Structure
91
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":"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"}
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"}