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
@@ -0,0 +1,504 @@
1
+ "use strict";
2
+ /**
3
+ * Utility functions for FHEVM Example Factory CLI
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.log = exports.ERROR_MESSAGES = exports.TEST_TYPES_CONTENT = exports.CATEGORY_ORDER = exports.FHEVM_DEPENDENCIES = exports.EXCLUDE_DIRS = exports.MAX_DESCRIPTION_LENGTH = exports.TEMPLATE_DIR_NAME = exports.CATEGORY_ICON = void 0;
43
+ exports.handleError = handleError;
44
+ exports.getRootDir = getRootDir;
45
+ exports.getTemplateDir = getTemplateDir;
46
+ exports.getContractName = getContractName;
47
+ exports.copyDirectoryRecursive = copyDirectoryRecursive;
48
+ exports.toKebabCase = toKebabCase;
49
+ exports.contractNameToExampleName = contractNameToExampleName;
50
+ exports.contractNameToTitle = contractNameToTitle;
51
+ exports.formatCategoryName = formatCategoryName;
52
+ exports.validateExample = validateExample;
53
+ exports.validateCategory = validateCategory;
54
+ exports.validateDirectoryNotExists = validateDirectoryNotExists;
55
+ exports.cleanupTemplate = cleanupTemplate;
56
+ exports.generateDeployScript = generateDeployScript;
57
+ exports.generateGitBookMarkdown = generateGitBookMarkdown;
58
+ exports.downloadFileFromGitHub = downloadFileFromGitHub;
59
+ exports.cloneTemplate = cloneTemplate;
60
+ exports.initSubmodule = initSubmodule;
61
+ exports.updateProjectPackageJson = updateProjectPackageJson;
62
+ exports.runCommand = runCommand;
63
+ exports.runCommandWithStatus = runCommandWithStatus;
64
+ exports.extractTestResults = extractTestResults;
65
+ exports.extractErrorMessage = extractErrorMessage;
66
+ const fs = __importStar(require("fs"));
67
+ const path = __importStar(require("path"));
68
+ const child_process_1 = require("child_process");
69
+ const picocolors_1 = __importDefault(require("picocolors"));
70
+ const config_1 = require("./config");
71
+ exports.CATEGORY_ICON = "📁";
72
+ /** Template directory name within the cloned repo */
73
+ exports.TEMPLATE_DIR_NAME = "fhevm-hardhat-template";
74
+ /** Maximum description length for UI display */
75
+ exports.MAX_DESCRIPTION_LENGTH = 80;
76
+ /** Directories to exclude when copying template */
77
+ exports.EXCLUDE_DIRS = [
78
+ "node_modules",
79
+ "artifacts",
80
+ "cache",
81
+ "coverage",
82
+ "types",
83
+ "dist",
84
+ ".git",
85
+ ];
86
+ /** FHEVM package versions for --add mode */
87
+ exports.FHEVM_DEPENDENCIES = {
88
+ dependencies: {
89
+ "encrypted-types": "^0.0.4",
90
+ "@fhevm/solidity": "^0.9.1",
91
+ },
92
+ devDependencies: {
93
+ "@fhevm/hardhat-plugin": "^0.3.0-1",
94
+ "@zama-fhe/relayer-sdk": "^0.3.0-5",
95
+ },
96
+ };
97
+ exports.CATEGORY_ORDER = [
98
+ "Basic - Encryption",
99
+ "Basic - Decryption",
100
+ "Basic - FHE Operations",
101
+ "Concepts",
102
+ "Gaming",
103
+ "Openzeppelin",
104
+ "Advanced",
105
+ ];
106
+ exports.TEST_TYPES_CONTENT = `import type { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";
107
+
108
+ /**
109
+ * Common signers interface used across test files
110
+ */
111
+ export interface Signers {
112
+ owner: HardhatEthersSigner;
113
+ alice: HardhatEthersSigner;
114
+ }
115
+ `;
116
+ exports.ERROR_MESSAGES = {
117
+ EXAMPLE_REQUIRED: "Error: Either --example or --category is required",
118
+ BOTH_SPECIFIED: "Error: Cannot use both --example and --category",
119
+ UNKNOWN_EXAMPLE: (name) => `Error: Unknown example "${name}"`,
120
+ UNKNOWN_CATEGORY: (name) => `Error: Unknown category "${name}"`,
121
+ DIR_EXISTS: (path) => `Error: Directory already exists: ${path}`,
122
+ NOT_HARDHAT: "This directory does not contain a valid Hardhat project.",
123
+ CONFIG_NOT_FOUND: "hardhat.config.ts or hardhat.config.js not found",
124
+ CONTRACT_NAME_FAILED: "Could not extract contract name",
125
+ };
126
+ // =============================================================================
127
+ // Logging Utility
128
+ // =============================================================================
129
+ exports.log = {
130
+ success: (msg) => console.log(picocolors_1.default.green(msg)),
131
+ error: (msg) => console.error(picocolors_1.default.red(msg)),
132
+ info: (msg) => console.log(picocolors_1.default.cyan(msg)),
133
+ dim: (msg) => console.log(picocolors_1.default.dim(msg)),
134
+ message: (msg) => console.log(msg),
135
+ };
136
+ /**
137
+ * Standardized error handler for CLI - logs error and exits
138
+ */
139
+ function handleError(error, exitCode = 1) {
140
+ const message = error instanceof Error ? error.message : String(error);
141
+ exports.log.error(message);
142
+ process.exit(exitCode);
143
+ }
144
+ // =============================================================================
145
+ // File System Utilities
146
+ // =============================================================================
147
+ /** Resolves root directory of the project */
148
+ function getRootDir() {
149
+ return path.resolve(__dirname, "..");
150
+ }
151
+ function getTemplateDir() {
152
+ return path.join(getRootDir(), exports.TEMPLATE_DIR_NAME);
153
+ }
154
+ /** Extracts contract name from file path or content */
155
+ function getContractName(contractPathOrContent) {
156
+ let content;
157
+ if (contractPathOrContent.includes("contract ") ||
158
+ contractPathOrContent.includes("pragma solidity")) {
159
+ content = contractPathOrContent;
160
+ }
161
+ else {
162
+ const fullPath = contractPathOrContent.startsWith("/")
163
+ ? contractPathOrContent
164
+ : path.join(getRootDir(), contractPathOrContent);
165
+ if (!fs.existsSync(fullPath)) {
166
+ const match = contractPathOrContent.match(/([^/]+)\.sol$/);
167
+ return match ? match[1] : null;
168
+ }
169
+ content = fs.readFileSync(fullPath, "utf-8");
170
+ }
171
+ const match = content.match(/^\s*contract\s+(\w+)(?:\s+is\s+|\s*\{)/m);
172
+ return match ? match[1] : null;
173
+ }
174
+ /** Copies directory recursively, excluding specified directories */
175
+ function copyDirectoryRecursive(source, destination, excludeDirs = exports.EXCLUDE_DIRS) {
176
+ if (!fs.existsSync(destination)) {
177
+ fs.mkdirSync(destination, { recursive: true });
178
+ }
179
+ const items = fs.readdirSync(source);
180
+ items.forEach((item) => {
181
+ const sourcePath = path.join(source, item);
182
+ const destPath = path.join(destination, item);
183
+ const stat = fs.statSync(sourcePath);
184
+ if (stat.isDirectory()) {
185
+ if (excludeDirs.includes(item)) {
186
+ return;
187
+ }
188
+ copyDirectoryRecursive(sourcePath, destPath, excludeDirs);
189
+ }
190
+ else {
191
+ fs.copyFileSync(sourcePath, destPath);
192
+ }
193
+ });
194
+ }
195
+ // =============================================================================
196
+ // Naming Utilities
197
+ // =============================================================================
198
+ function toKebabCase(str) {
199
+ return str
200
+ .replace(/([a-z])([A-Z])/g, "$1-$2")
201
+ .replace(/([0-9])([A-Z])/g, "$1-$2")
202
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1-$2")
203
+ .toLowerCase();
204
+ }
205
+ function contractNameToExampleName(contractName) {
206
+ return toKebabCase(contractName);
207
+ }
208
+ function contractNameToTitle(contractName) {
209
+ return contractName
210
+ .replace(/([a-z])([A-Z])/g, "$1 $2")
211
+ .replace(/([0-9])([A-Z])/g, "$1 $2")
212
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2");
213
+ }
214
+ function formatCategoryName(folderName) {
215
+ return folderName
216
+ .replace(/\bfhe\b/gi, "FHE")
217
+ .replace(/-/g, " ")
218
+ .replace(/\b\w/g, (char) => char.toUpperCase());
219
+ }
220
+ // =============================================================================
221
+ // Validation Functions
222
+ // =============================================================================
223
+ function validateExample(name) {
224
+ if (!config_1.EXAMPLES[name]) {
225
+ throw new Error(exports.ERROR_MESSAGES.UNKNOWN_EXAMPLE(name));
226
+ }
227
+ }
228
+ function validateCategory(name) {
229
+ if (!config_1.CATEGORIES[name]) {
230
+ throw new Error(exports.ERROR_MESSAGES.UNKNOWN_CATEGORY(name));
231
+ }
232
+ }
233
+ function validateDirectoryNotExists(dirPath) {
234
+ if (fs.existsSync(dirPath)) {
235
+ throw new Error(exports.ERROR_MESSAGES.DIR_EXISTS(dirPath));
236
+ }
237
+ }
238
+ // =============================================================================
239
+ // Template Utilities
240
+ // =============================================================================
241
+ function cleanupTemplate(outputDir) {
242
+ const gitDir = path.join(outputDir, ".git");
243
+ if (fs.existsSync(gitDir)) {
244
+ fs.rmSync(gitDir, { recursive: true, force: true });
245
+ }
246
+ const templateContract = path.join(outputDir, "contracts", "FHECounter.sol");
247
+ if (fs.existsSync(templateContract)) {
248
+ fs.unlinkSync(templateContract);
249
+ }
250
+ const contractsGitkeep = path.join(outputDir, "contracts", ".gitkeep");
251
+ if (fs.existsSync(contractsGitkeep)) {
252
+ fs.unlinkSync(contractsGitkeep);
253
+ }
254
+ const testDir = path.join(outputDir, "test");
255
+ if (fs.existsSync(testDir)) {
256
+ fs.readdirSync(testDir).forEach((file) => {
257
+ if (file.endsWith(".ts") || file === ".gitkeep") {
258
+ fs.unlinkSync(path.join(testDir, file));
259
+ }
260
+ });
261
+ }
262
+ const configPath = path.join(outputDir, "hardhat.config.ts");
263
+ if (fs.existsSync(configPath)) {
264
+ let configContent = fs.readFileSync(configPath, "utf-8");
265
+ configContent = configContent.replace(/import "\.\/tasks\/FHECounter";\n?/g, "");
266
+ fs.writeFileSync(configPath, configContent);
267
+ }
268
+ const oldTaskFile = path.join(outputDir, "tasks", "FHECounter.ts");
269
+ if (fs.existsSync(oldTaskFile)) {
270
+ fs.unlinkSync(oldTaskFile);
271
+ }
272
+ fs.writeFileSync(path.join(outputDir, "test", "types.ts"), exports.TEST_TYPES_CONTENT);
273
+ }
274
+ function generateDeployScript(contractName) {
275
+ return `import { DeployFunction } from "hardhat-deploy/types";
276
+ import { HardhatRuntimeEnvironment } from "hardhat/types";
277
+
278
+ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
279
+ const { deployer } = await hre.getNamedAccounts();
280
+ const { deploy } = hre.deployments;
281
+
282
+ const deployed = await deploy("${contractName}", {
283
+ from: deployer,
284
+ args: [],
285
+ log: true,
286
+ });
287
+
288
+ console.log(\`${contractName} contract deployed at: \${deployed.address}\`);
289
+ };
290
+
291
+ export default func;
292
+ func.id = "deploy_${contractName.toLowerCase()}";
293
+ func.tags = ["${contractName}"];
294
+ `;
295
+ }
296
+ function generateGitBookMarkdown(description, contractContent, testContent, contractName, testFileName) {
297
+ let markdown = `${description}\n\n`;
298
+ markdown += `{% hint style="info" %}\n`;
299
+ markdown += `To run this example correctly, make sure the files are placed in the following directories:\n\n`;
300
+ markdown += `- \`.sol\` file → \`<your-project-root-dir>/contracts/\`\n`;
301
+ markdown += `- \`.ts\` file → \`<your-project-root-dir>/test/\`\n\n`;
302
+ markdown += `This ensures Hardhat can compile and test your contracts as expected.\n`;
303
+ markdown += `{% endhint %}\n\n`;
304
+ markdown += `{% tabs %}\n\n`;
305
+ markdown += `{% tab title="${contractName}.sol" %}\n\n`;
306
+ markdown += `\`\`\`solidity\n`;
307
+ markdown += contractContent;
308
+ markdown += `\n\`\`\`\n\n`;
309
+ markdown += `{% endtab %}\n\n`;
310
+ markdown += `{% tab title="${testFileName}" %}\n\n`;
311
+ markdown += `\`\`\`typescript\n`;
312
+ markdown += testContent;
313
+ markdown += `\n\`\`\`\n\n`;
314
+ markdown += `{% endtab %}\n\n`;
315
+ markdown += `{% endtabs %}\n`;
316
+ return markdown;
317
+ }
318
+ // =============================================================================
319
+ // GitHub Repository Utilities
320
+ // =============================================================================
321
+ /** Downloads a file from GitHub repository */
322
+ async function downloadFileFromGitHub(filePath, outputPath) {
323
+ const urlParts = config_1.REPO_URL.replace("https://github.com/", "").split("/");
324
+ const owner = urlParts[0];
325
+ const repo = urlParts[1];
326
+ const url = `https://raw.githubusercontent.com/${owner}/${repo}/${config_1.REPO_BRANCH}/${filePath}`;
327
+ const response = await fetch(url);
328
+ if (!response.ok) {
329
+ throw new Error(`Failed to download ${filePath}: ${response.statusText}`);
330
+ }
331
+ const content = await response.text();
332
+ const dir = path.dirname(outputPath);
333
+ if (!fs.existsSync(dir)) {
334
+ fs.mkdirSync(dir, { recursive: true });
335
+ }
336
+ fs.writeFileSync(outputPath, content);
337
+ }
338
+ /** Clones the template repository to temp directory */
339
+ async function cloneTemplate(tempDir) {
340
+ const templatePath = path.join(tempDir, "template");
341
+ return new Promise((resolve, reject) => {
342
+ const cloneUrl = `${config_1.REPO_URL}.git`;
343
+ const args = [
344
+ "clone",
345
+ "--depth=1",
346
+ "--branch",
347
+ config_1.REPO_BRANCH,
348
+ "--single-branch",
349
+ cloneUrl,
350
+ templatePath,
351
+ ];
352
+ const child = (0, child_process_1.spawn)("git", args, {
353
+ stdio: "pipe",
354
+ });
355
+ let stderr = "";
356
+ child.stderr?.on("data", (data) => {
357
+ stderr += data.toString();
358
+ });
359
+ child.on("close", (code) => {
360
+ if (code === 0) {
361
+ resolve(templatePath);
362
+ }
363
+ else {
364
+ reject(new Error(`Git clone failed: ${stderr}`));
365
+ }
366
+ });
367
+ child.on("error", reject);
368
+ });
369
+ }
370
+ /** Initializes git submodule for the template */
371
+ async function initSubmodule(repoPath) {
372
+ return new Promise((resolve, reject) => {
373
+ const child = (0, child_process_1.spawn)("git", ["submodule", "update", "--init", "--recursive", exports.TEMPLATE_DIR_NAME], {
374
+ cwd: repoPath,
375
+ stdio: "pipe",
376
+ });
377
+ let stderr = "";
378
+ child.stderr?.on("data", (data) => {
379
+ stderr += data.toString();
380
+ });
381
+ child.on("close", (code) => {
382
+ if (code === 0) {
383
+ resolve();
384
+ }
385
+ else {
386
+ reject(new Error(`Submodule init failed: ${stderr}`));
387
+ }
388
+ });
389
+ child.on("error", reject);
390
+ });
391
+ }
392
+ // =============================================================================
393
+ // Package.json Utilities
394
+ // =============================================================================
395
+ /** Updates package.json with project name, description, and npm dependencies */
396
+ function updateProjectPackageJson(outputDir, projectName, description, npmDependencies) {
397
+ const packageJsonPath = path.join(outputDir, "package.json");
398
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
399
+ packageJson.name = projectName;
400
+ if (description) {
401
+ packageJson.description = description;
402
+ }
403
+ if (npmDependencies && Object.keys(npmDependencies).length > 0) {
404
+ if (!packageJson.dependencies) {
405
+ packageJson.dependencies = {};
406
+ }
407
+ Object.assign(packageJson.dependencies, npmDependencies);
408
+ }
409
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
410
+ }
411
+ // =============================================================================
412
+ // Command Execution Utilities
413
+ // =============================================================================
414
+ /** Executes a command and returns output */
415
+ function runCommand(cmd, args, cwd) {
416
+ return new Promise((resolve, reject) => {
417
+ const child = (0, child_process_1.spawn)(cmd, args, {
418
+ cwd,
419
+ shell: true,
420
+ stdio: "pipe",
421
+ });
422
+ let stdout = "";
423
+ let stderr = "";
424
+ child.stdout?.on("data", (data) => {
425
+ stdout += data.toString();
426
+ });
427
+ child.stderr?.on("data", (data) => {
428
+ stderr += data.toString();
429
+ });
430
+ child.on("close", (code) => {
431
+ if (code === 0) {
432
+ resolve(stdout);
433
+ }
434
+ else {
435
+ reject(new Error(stderr || stdout || `Command failed with code ${code}`));
436
+ }
437
+ });
438
+ child.on("error", reject);
439
+ });
440
+ }
441
+ function runCommandWithStatus(cmd, args, cwd) {
442
+ return new Promise((resolve) => {
443
+ let output = "";
444
+ const proc = (0, child_process_1.spawn)(cmd, args, {
445
+ cwd,
446
+ shell: true,
447
+ stdio: ["ignore", "pipe", "pipe"],
448
+ });
449
+ proc.stdout?.on("data", (data) => {
450
+ output += data.toString();
451
+ });
452
+ proc.stderr?.on("data", (data) => {
453
+ output += data.toString();
454
+ });
455
+ proc.on("close", (code) => {
456
+ resolve({ success: code === 0, output });
457
+ });
458
+ proc.on("error", (err) => {
459
+ output += err.message;
460
+ resolve({ success: false, output });
461
+ });
462
+ });
463
+ }
464
+ function extractTestResults(output) {
465
+ const passingMatch = output.match(/(\d+)\s+passing/);
466
+ const failingMatch = output.match(/(\d+)\s+failing/);
467
+ if (passingMatch) {
468
+ const passing = passingMatch[1];
469
+ const failing = failingMatch ? failingMatch[1] : "0";
470
+ if (failing === "0") {
471
+ return `${passing} tests passing ✓`;
472
+ }
473
+ else {
474
+ return `${passing} passing, ${failing} failing`;
475
+ }
476
+ }
477
+ return null;
478
+ }
479
+ function extractErrorMessage(output) {
480
+ const lines = output.split("\n");
481
+ const errorLines = [];
482
+ for (const line of lines) {
483
+ if (line.includes("Error:") || line.includes("error:")) {
484
+ errorLines.push(line.trim());
485
+ }
486
+ if (line.includes("TypeError") || line.includes("SyntaxError")) {
487
+ errorLines.push(line.trim());
488
+ }
489
+ if (line.includes("AssertionError") || line.includes("expected")) {
490
+ errorLines.push(line.trim());
491
+ }
492
+ if (line.includes("revert") || line.includes("reverted")) {
493
+ errorLines.push(line.trim());
494
+ }
495
+ if (line.includes("HardhatError") || line.includes("ENOENT")) {
496
+ errorLines.push(line.trim());
497
+ }
498
+ }
499
+ if (errorLines.length > 0) {
500
+ return errorLines.slice(0, 5).join("\n");
501
+ }
502
+ const nonEmptyLines = lines.filter((l) => l.trim().length > 0);
503
+ return nonEmptyLines.slice(-5).join("\n");
504
+ }
package/package.json CHANGED
@@ -1,19 +1,30 @@
1
1
  {
2
2
  "name": "create-fhevm-example",
3
- "version": "1.2.2",
4
- "description": "Create FHEVM example projects with a single command",
5
- "type": "module",
3
+ "version": "1.3.0",
4
+ "description": "Create FHEVM example projects with a single command - A comprehensive toolkit for building privacy-preserving smart contracts",
6
5
  "bin": {
7
- "create-fhevm-example": "./dist/index.js"
6
+ "create-fhevm-example": "./dist/scripts/index.js"
8
7
  },
8
+ "main": "./dist/scripts/index.js",
9
9
  "files": [
10
10
  "dist"
11
11
  ],
12
12
  "scripts": {
13
13
  "build": "tsc",
14
- "dev": "tsc --watch",
15
- "update:config": "npx ts-node --esm scripts/update-config.ts",
16
- "prepublishOnly": "npm run update:config && npm run build"
14
+ "create": "LOCAL_DEV=1 npx ts-node scripts/index.ts",
15
+ "create:example": "npx ts-node scripts/index.ts --example",
16
+ "create:category": "npx ts-node scripts/index.ts --category",
17
+ "create:docs": "npx ts-node scripts/generate-docs.ts",
18
+ "test:all": "npx ts-node scripts/maintenance.ts test-all",
19
+ "generate:config": "npx ts-node scripts/generate-config.ts",
20
+ "doctor": "npx ts-node scripts/doctor.ts",
21
+ "help:create": "npx ts-node scripts/index.ts --help",
22
+ "help:docs": "npx ts-node scripts/generate-docs.ts --help",
23
+ "help:test": "npx ts-node scripts/maintenance.ts test-all --help",
24
+
25
+ "prepublishOnly": "npm run build",
26
+ "prepack": "mv README.md GITHUB_README.md && cp NPM_README.md README.md",
27
+ "postpack": "mv GITHUB_README.md README.md"
17
28
  },
18
29
  "keywords": [
19
30
  "fhevm",
@@ -22,19 +33,20 @@
22
33
  "blockchain",
23
34
  "examples",
24
35
  "cli",
36
+ "scaffold",
25
37
  "create",
26
- "scaffold"
38
+ "privacy",
39
+ "fhe"
27
40
  ],
28
- "author": "Zama",
41
+ "author": "Necip Akgz",
29
42
  "license": "BSD-3-Clause-Clear",
30
43
  "engines": {
31
44
  "node": ">=20"
32
45
  },
33
- "homepage": "https://github.com/NecipAkgz/fhevm-example-factory/tree/main/packages/create-fhevm-example#readme",
46
+ "homepage": "https://necips-organization-1.gitbook.io",
34
47
  "repository": {
35
48
  "type": "git",
36
- "url": "https://github.com/NecipAkgz/fhevm-example-factory",
37
- "directory": "packages/create-fhevm-example"
49
+ "url": "https://github.com/NecipAkgz/fhevm-example-factory"
38
50
  },
39
51
  "dependencies": {
40
52
  "@clack/prompts": "^0.11.0",
@@ -1,21 +0,0 @@
1
- /**
2
- * Detects if the target directory is a valid Hardhat project
3
- */
4
- export declare function detectHardhatProject(targetDir: string): boolean;
5
- /**
6
- * Updates package.json with FHEVM dependencies
7
- */
8
- export declare function updatePackageJson(targetDir: string): void;
9
- /**
10
- * Updates hardhat.config.ts/js with FHEVM plugin import
11
- */
12
- export declare function updateHardhatConfig(targetDir: string): void;
13
- /**
14
- * Adds example contract and test files to the project
15
- */
16
- export declare function addExampleFiles(exampleName: string, targetDir: string): Promise<void>;
17
- /**
18
- * Main function to add FHEVM capabilities to an existing Hardhat project
19
- */
20
- export declare function runAddMode(targetDir?: string): Promise<void>;
21
- //# sourceMappingURL=add-mode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-mode.d.ts","sourceRoot":"","sources":["../src/add-mode.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAqB/D;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAsBzD;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CA4C3D;AAMD;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA+If;AAMD;;GAEG;AACH,wBAAsB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFlE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-mode.js","sourceRoot":"","sources":["../src/add-mode.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Project Builders
3
- *
4
- * Creates single example and category projects from templates.
5
- * Similar to main project's create-example.ts and create-category.ts
6
- */
7
- /**
8
- * Cleans up template-specific files after copying
9
- * Similar to cleanupTemplate() in main project's shared/utils.ts
10
- */
11
- export declare function cleanupTemplate(outputDir: string): void;
12
- /**
13
- * Creates a single example project from the template
14
- *
15
- * Steps:
16
- * 1. Copy template directory and clean up
17
- * 2. Download contract and test files from GitHub
18
- * 3. Update package.json and deploy scripts
19
- */
20
- export declare function createSingleExample(exampleName: string, outputDir: string, tempRepoPath: string): Promise<void>;
21
- /**
22
- * Creates a category project with multiple examples
23
- *
24
- * Steps:
25
- * 1. Copy template directory and clean up
26
- * 2. Download all contracts and tests for the category
27
- * 3. Update package.json
28
- */
29
- export declare function createCategoryProject(categoryName: string, outputDir: string, tempRepoPath: string): Promise<void>;
30
- //# sourceMappingURL=builders.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAmDvD;AAoED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAgDf;AAMD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CA4Df"}