create-fhevm-example 1.2.2 → 1.3.0

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 (65) hide show
  1. package/README.md +74 -148
  2. package/dist/scripts/add-mode.d.ts +8 -0
  3. package/dist/scripts/add-mode.d.ts.map +1 -0
  4. package/dist/{add-mode.js → scripts/add-mode.js} +81 -58
  5. package/dist/scripts/builders.d.ts +20 -0
  6. package/dist/scripts/builders.d.ts.map +1 -0
  7. package/dist/scripts/builders.js +160 -0
  8. package/dist/{config.d.ts → scripts/config.d.ts} +24 -3
  9. package/dist/scripts/config.d.ts.map +1 -0
  10. package/dist/scripts/config.js +465 -0
  11. package/dist/scripts/doctor.d.ts +3 -0
  12. package/dist/scripts/doctor.d.ts.map +1 -0
  13. package/dist/scripts/doctor.js +157 -0
  14. package/dist/scripts/generate-config.d.ts +9 -0
  15. package/dist/scripts/generate-config.d.ts.map +1 -0
  16. package/dist/scripts/generate-config.js +315 -0
  17. package/dist/scripts/generate-docs.d.ts +9 -0
  18. package/dist/scripts/generate-docs.d.ts.map +1 -0
  19. package/dist/scripts/generate-docs.js +189 -0
  20. package/dist/scripts/index.d.ts +12 -0
  21. package/dist/scripts/index.d.ts.map +1 -0
  22. package/dist/scripts/index.js +360 -0
  23. package/dist/scripts/maintenance.d.ts +12 -0
  24. package/dist/scripts/maintenance.d.ts.map +1 -0
  25. package/dist/scripts/maintenance.js +320 -0
  26. package/dist/{ui.d.ts → scripts/ui.d.ts} +0 -1
  27. package/dist/scripts/ui.d.ts.map +1 -0
  28. package/dist/scripts/ui.js +197 -0
  29. package/dist/scripts/utils.d.ts +79 -0
  30. package/dist/scripts/utils.d.ts.map +1 -0
  31. package/dist/scripts/utils.js +504 -0
  32. package/package.json +24 -12
  33. package/dist/add-mode.d.ts +0 -21
  34. package/dist/add-mode.d.ts.map +0 -1
  35. package/dist/add-mode.js.map +0 -1
  36. package/dist/builders.d.ts +0 -30
  37. package/dist/builders.d.ts.map +0 -1
  38. package/dist/builders.js +0 -195
  39. package/dist/builders.js.map +0 -1
  40. package/dist/commands.d.ts +0 -19
  41. package/dist/commands.d.ts.map +0 -1
  42. package/dist/commands.js +0 -91
  43. package/dist/commands.js.map +0 -1
  44. package/dist/config.d.ts.map +0 -1
  45. package/dist/config.js +0 -403
  46. package/dist/config.js.map +0 -1
  47. package/dist/constants.d.ts +0 -16
  48. package/dist/constants.d.ts.map +0 -1
  49. package/dist/constants.js +0 -40
  50. package/dist/constants.js.map +0 -1
  51. package/dist/index.d.ts +0 -20
  52. package/dist/index.d.ts.map +0 -1
  53. package/dist/index.js +0 -337
  54. package/dist/index.js.map +0 -1
  55. package/dist/prompts.d.ts +0 -26
  56. package/dist/prompts.d.ts.map +0 -1
  57. package/dist/prompts.js +0 -79
  58. package/dist/prompts.js.map +0 -1
  59. package/dist/ui.d.ts.map +0 -1
  60. package/dist/ui.js +0 -155
  61. package/dist/ui.js.map +0 -1
  62. package/dist/utils.d.ts +0 -99
  63. package/dist/utils.d.ts.map +0 -1
  64. package/dist/utils.js +0 -285
  65. package/dist/utils.js.map +0 -1
package/dist/utils.d.ts DELETED
@@ -1,99 +0,0 @@
1
- /**
2
- * Utility functions for creating FHEVM example projects
3
- */
4
- /**
5
- * Prompt result type (value or cancellation symbol)
6
- */
7
- export type PromptResult<T> = T | symbol;
8
- /**
9
- * Example name type
10
- */
11
- export type ExampleName = string;
12
- /**
13
- * Category name type
14
- */
15
- export type CategoryName = string;
16
- /**
17
- * Project mode type
18
- */
19
- export type ProjectMode = "single" | "category";
20
- /**
21
- * Simple folder icon for all categories
22
- */
23
- export declare const CATEGORY_ICON = "\uD83D\uDCC1";
24
- /**
25
- * Display order for example categories in the interactive prompt
26
- */
27
- export declare const CATEGORY_ORDER: string[];
28
- /**
29
- * Content for test/types.ts file
30
- */
31
- export declare const TEST_TYPES_CONTENT = "import type { HardhatEthersSigner } from \"@nomicfoundation/hardhat-ethers/signers\";\n\n/**\n * Common signers interface used across test files\n */\nexport interface Signers {\n owner: HardhatEthersSigner;\n alice: HardhatEthersSigner;\n}\n";
32
- /**
33
- * Centralized error messages
34
- */
35
- export declare const ERROR_MESSAGES: {
36
- EXAMPLE_REQUIRED: string;
37
- BOTH_SPECIFIED: string;
38
- UNKNOWN_EXAMPLE: (name: string) => string;
39
- UNKNOWN_CATEGORY: (name: string) => string;
40
- DIR_EXISTS: (path: string) => string;
41
- NOT_HARDHAT: string;
42
- CONFIG_NOT_FOUND: string;
43
- CONTRACT_NAME_FAILED: string;
44
- };
45
- /**
46
- * Standardized logging functions
47
- */
48
- export declare const log: {
49
- success: (msg: string) => void;
50
- error: (msg: string) => void;
51
- info: (msg: string) => void;
52
- dim: (msg: string) => void;
53
- message: (msg: string) => void;
54
- };
55
- /**
56
- * Validates that an example exists
57
- */
58
- export declare function validateExample(name: string): void;
59
- /**
60
- * Validates that a category exists
61
- */
62
- export declare function validateCategory(name: string): void;
63
- /**
64
- * Validates that a directory doesn't exist
65
- */
66
- export declare function validateDirectoryNotExists(dirPath: string): void;
67
- /**
68
- * Get contract name from file path
69
- */
70
- export declare function getContractName(contractPath: string): string | null;
71
- /**
72
- * Recursively copy directory
73
- */
74
- export declare function copyDirectoryRecursive(src: string, dest: string): void;
75
- /**
76
- * Download file from GitHub repository
77
- */
78
- export declare function downloadFileFromGitHub(filePath: string, outputPath: string): Promise<void>;
79
- /**
80
- * Clone template repository to temporary directory
81
- */
82
- export declare function cloneTemplate(tempDir: string): Promise<string>;
83
- /**
84
- * Initialize git submodule for template
85
- */
86
- export declare function initSubmodule(repoPath: string): Promise<void>;
87
- /**
88
- * Run a shell command
89
- */
90
- export declare function runCommand(cmd: string, args: string[], cwd: string): Promise<string>;
91
- /**
92
- * Extract test results from npm test output
93
- */
94
- export declare function extractTestResults(output: string): string | null;
95
- /**
96
- * Generate deploy script
97
- */
98
- export declare function generateDeployScript(contractName: string): string;
99
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAMhD;;GAEG;AACH,eAAO,MAAM,aAAa,iBAAO,CAAC;AAElC;;GAEG;AACH,eAAO,MAAM,cAAc,UAS1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,yPAS9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;;4BAGD,MAAM;6BACL,MAAM;uBACZ,MAAM;;;;CAI1B,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,GAAG;mBACC,MAAM;iBACR,MAAM;gBACP,MAAM;eACP,MAAM;mBACF,MAAM;CACtB,CAAC;AAMF;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIhE;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAqBtE;AAMD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCpE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BnE;AAMD;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAchE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAqBjE"}
package/dist/utils.js DELETED
@@ -1,285 +0,0 @@
1
- /**
2
- * Utility functions for creating FHEVM example projects
3
- */
4
- import * as fs from "fs";
5
- import * as path from "path";
6
- import { spawn } from "child_process";
7
- import pc from "picocolors";
8
- import { REPO_URL, REPO_BRANCH, TEMPLATE_SUBMODULE_PATH, EXAMPLES, CATEGORIES, } from "./config.js";
9
- // =============================================================================
10
- // Constants
11
- // =============================================================================
12
- /**
13
- * Simple folder icon for all categories
14
- */
15
- export const CATEGORY_ICON = "📁";
16
- /**
17
- * Display order for example categories in the interactive prompt
18
- */
19
- export const CATEGORY_ORDER = [
20
- "Basic",
21
- "Basic - Encryption",
22
- "Basic - Decryption",
23
- "Basic - FHE Operations",
24
- "Concepts",
25
- "Gaming",
26
- "Openzeppelin",
27
- "Advanced",
28
- ];
29
- /**
30
- * Content for test/types.ts file
31
- */
32
- export const TEST_TYPES_CONTENT = `import type { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";
33
-
34
- /**
35
- * Common signers interface used across test files
36
- */
37
- export interface Signers {
38
- owner: HardhatEthersSigner;
39
- alice: HardhatEthersSigner;
40
- }
41
- `;
42
- /**
43
- * Centralized error messages
44
- */
45
- export const ERROR_MESSAGES = {
46
- EXAMPLE_REQUIRED: "Error: Either --example or --category is required",
47
- BOTH_SPECIFIED: "Error: Cannot use both --example and --category",
48
- UNKNOWN_EXAMPLE: (name) => `Error: Unknown example "${name}"`,
49
- UNKNOWN_CATEGORY: (name) => `Error: Unknown category "${name}"`,
50
- DIR_EXISTS: (path) => `Error: Directory already exists: ${path}`,
51
- NOT_HARDHAT: "This directory does not contain a valid Hardhat project.",
52
- CONFIG_NOT_FOUND: "hardhat.config.ts or hardhat.config.js not found",
53
- CONTRACT_NAME_FAILED: "Could not extract contract name",
54
- };
55
- // =============================================================================
56
- // Logging Utility
57
- // =============================================================================
58
- /**
59
- * Standardized logging functions
60
- */
61
- export const log = {
62
- success: (msg) => console.log(pc.green(msg)),
63
- error: (msg) => console.error(pc.red(msg)),
64
- info: (msg) => console.log(pc.cyan(msg)),
65
- dim: (msg) => console.log(pc.dim(msg)),
66
- message: (msg) => console.log(msg),
67
- };
68
- // =============================================================================
69
- // Validation Functions
70
- // =============================================================================
71
- /**
72
- * Validates that an example exists
73
- */
74
- export function validateExample(name) {
75
- if (!EXAMPLES[name]) {
76
- throw new Error(ERROR_MESSAGES.UNKNOWN_EXAMPLE(name));
77
- }
78
- }
79
- /**
80
- * Validates that a category exists
81
- */
82
- export function validateCategory(name) {
83
- if (!CATEGORIES[name]) {
84
- throw new Error(ERROR_MESSAGES.UNKNOWN_CATEGORY(name));
85
- }
86
- }
87
- /**
88
- * Validates that a directory doesn't exist
89
- */
90
- export function validateDirectoryNotExists(dirPath) {
91
- if (fs.existsSync(dirPath)) {
92
- throw new Error(ERROR_MESSAGES.DIR_EXISTS(dirPath));
93
- }
94
- }
95
- // =============================================================================
96
- // File System Utilities
97
- // =============================================================================
98
- /**
99
- * Get contract name from file path
100
- */
101
- export function getContractName(contractPath) {
102
- const match = contractPath.match(/([^/]+)\.sol$/);
103
- return match ? match[1] : null;
104
- }
105
- /**
106
- * Recursively copy directory
107
- */
108
- export function copyDirectoryRecursive(src, dest) {
109
- if (!fs.existsSync(dest)) {
110
- fs.mkdirSync(dest, { recursive: true });
111
- }
112
- const entries = fs.readdirSync(src, { withFileTypes: true });
113
- for (const entry of entries) {
114
- const srcPath = path.join(src, entry.name);
115
- const destPath = path.join(dest, entry.name);
116
- if (entry.isDirectory()) {
117
- // Skip node_modules and .git
118
- if (entry.name === "node_modules" || entry.name === ".git") {
119
- continue;
120
- }
121
- copyDirectoryRecursive(srcPath, destPath);
122
- }
123
- else {
124
- fs.copyFileSync(srcPath, destPath);
125
- }
126
- }
127
- }
128
- // =============================================================================
129
- // GitHub Repository Utilities
130
- // =============================================================================
131
- /**
132
- * Download file from GitHub repository
133
- */
134
- export async function downloadFileFromGitHub(filePath, outputPath) {
135
- // Extract owner and repo from REPO_URL
136
- const urlParts = REPO_URL.replace("https://github.com/", "").split("/");
137
- const owner = urlParts[0];
138
- const repo = urlParts[1];
139
- const url = `https://raw.githubusercontent.com/${owner}/${repo}/${REPO_BRANCH}/${filePath}`;
140
- const response = await fetch(url);
141
- if (!response.ok) {
142
- throw new Error(`Failed to download ${filePath}: ${response.statusText}`);
143
- }
144
- const content = await response.text();
145
- // Ensure directory exists
146
- const dir = path.dirname(outputPath);
147
- if (!fs.existsSync(dir)) {
148
- fs.mkdirSync(dir, { recursive: true });
149
- }
150
- fs.writeFileSync(outputPath, content);
151
- }
152
- /**
153
- * Clone template repository to temporary directory
154
- */
155
- export async function cloneTemplate(tempDir) {
156
- const templatePath = path.join(tempDir, "template");
157
- return new Promise((resolve, reject) => {
158
- const cloneUrl = `${REPO_URL}.git`;
159
- const args = [
160
- "clone",
161
- "--depth=1",
162
- "--branch",
163
- REPO_BRANCH,
164
- "--single-branch",
165
- cloneUrl,
166
- templatePath,
167
- ];
168
- const child = spawn("git", args, {
169
- stdio: "pipe",
170
- });
171
- let stderr = "";
172
- child.stderr?.on("data", (data) => {
173
- stderr += data.toString();
174
- });
175
- child.on("close", (code) => {
176
- if (code === 0) {
177
- resolve(templatePath);
178
- }
179
- else {
180
- reject(new Error(`Git clone failed: ${stderr}`));
181
- }
182
- });
183
- child.on("error", reject);
184
- });
185
- }
186
- /**
187
- * Initialize git submodule for template
188
- */
189
- export async function initSubmodule(repoPath) {
190
- return new Promise((resolve, reject) => {
191
- const child = spawn("git", ["submodule", "update", "--init", "--recursive", TEMPLATE_SUBMODULE_PATH], {
192
- cwd: repoPath,
193
- stdio: "pipe",
194
- });
195
- let stderr = "";
196
- child.stderr?.on("data", (data) => {
197
- stderr += data.toString();
198
- });
199
- child.on("close", (code) => {
200
- if (code === 0) {
201
- resolve();
202
- }
203
- else {
204
- reject(new Error(`Submodule init failed: ${stderr}`));
205
- }
206
- });
207
- child.on("error", reject);
208
- });
209
- }
210
- // =============================================================================
211
- // Command Execution Utilities
212
- // =============================================================================
213
- /**
214
- * Run a shell command
215
- */
216
- export function runCommand(cmd, args, cwd) {
217
- return new Promise((resolve, reject) => {
218
- const child = spawn(cmd, args, {
219
- cwd,
220
- shell: true,
221
- stdio: "pipe",
222
- });
223
- let stdout = "";
224
- let stderr = "";
225
- child.stdout?.on("data", (data) => {
226
- stdout += data.toString();
227
- });
228
- child.stderr?.on("data", (data) => {
229
- stderr += data.toString();
230
- });
231
- child.on("close", (code) => {
232
- if (code === 0) {
233
- resolve(stdout);
234
- }
235
- else {
236
- reject(new Error(stderr || stdout || `Command failed with code ${code}`));
237
- }
238
- });
239
- child.on("error", reject);
240
- });
241
- }
242
- /**
243
- * Extract test results from npm test output
244
- */
245
- export function extractTestResults(output) {
246
- const passingMatch = output.match(/(\d+)\s+passing/);
247
- const failingMatch = output.match(/(\d+)\s+failing/);
248
- if (passingMatch) {
249
- const passing = passingMatch[1];
250
- const failing = failingMatch ? failingMatch[1] : "0";
251
- if (failing === "0") {
252
- return `${passing} tests passing ✓`;
253
- }
254
- else {
255
- return `${passing} passing, ${failing} failing`;
256
- }
257
- }
258
- return null;
259
- }
260
- /**
261
- * Generate deploy script
262
- */
263
- export function generateDeployScript(contractName) {
264
- return `import { DeployFunction } from "hardhat-deploy/types";
265
- import { HardhatRuntimeEnvironment } from "hardhat/types";
266
-
267
- const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
268
- const { deployer } = await hre.getNamedAccounts();
269
- const { deploy } = hre.deployments;
270
-
271
- const deployed = await deploy("${contractName}", {
272
- from: deployer,
273
- args: [],
274
- log: true,
275
- });
276
-
277
- console.log(\`${contractName} contract deployed at: \${deployed.address}\`);
278
- };
279
-
280
- export default func;
281
- func.id = "deploy_${contractName.toLowerCase()}";
282
- func.tags = ["${contractName}"];
283
- `;
284
- }
285
- //# sourceMappingURL=utils.js.map
package/dist/utils.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}