skittles 1.3.1 → 1.5.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 (157) hide show
  1. package/dist/commands/clean.d.ts.map +1 -1
  2. package/dist/commands/clean.js +16 -9
  3. package/dist/commands/clean.js.map +1 -1
  4. package/dist/commands/compile.d.ts.map +1 -1
  5. package/dist/commands/compile.js +26 -31
  6. package/dist/commands/compile.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +97 -121
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/test.d.ts +7 -0
  11. package/dist/commands/test.d.ts.map +1 -0
  12. package/dist/commands/test.js +60 -0
  13. package/dist/commands/test.js.map +1 -0
  14. package/dist/compiler/analysis.d.ts.map +1 -1
  15. package/dist/compiler/analysis.js +17 -136
  16. package/dist/compiler/analysis.js.map +1 -1
  17. package/dist/compiler/class-parser.d.ts +25 -0
  18. package/dist/compiler/class-parser.d.ts.map +1 -0
  19. package/dist/compiler/class-parser.js +1040 -0
  20. package/dist/compiler/class-parser.js.map +1 -0
  21. package/dist/compiler/codegen-context.d.ts +10 -0
  22. package/dist/compiler/codegen-context.d.ts.map +1 -0
  23. package/dist/compiler/codegen-context.js +13 -0
  24. package/dist/compiler/codegen-context.js.map +1 -0
  25. package/dist/compiler/codegen.d.ts +6 -3
  26. package/dist/compiler/codegen.d.ts.map +1 -1
  27. package/dist/compiler/codegen.js +1449 -68
  28. package/dist/compiler/codegen.js.map +1 -1
  29. package/dist/compiler/compiler.d.ts +1 -0
  30. package/dist/compiler/compiler.d.ts.map +1 -1
  31. package/dist/compiler/compiler.js +432 -82
  32. package/dist/compiler/compiler.js.map +1 -1
  33. package/dist/compiler/constants.d.ts +25 -0
  34. package/dist/compiler/constants.d.ts.map +1 -0
  35. package/dist/compiler/constants.js +34 -0
  36. package/dist/compiler/constants.js.map +1 -0
  37. package/dist/compiler/expression-parser.d.ts +5 -0
  38. package/dist/compiler/expression-parser.d.ts.map +1 -0
  39. package/dist/compiler/expression-parser.js +1212 -0
  40. package/dist/compiler/expression-parser.js.map +1 -0
  41. package/dist/compiler/formatter.d.ts +9 -0
  42. package/dist/compiler/formatter.d.ts.map +1 -0
  43. package/dist/compiler/formatter.js +126 -0
  44. package/dist/compiler/formatter.js.map +1 -0
  45. package/dist/compiler/mutability.d.ts +66 -0
  46. package/dist/compiler/mutability.d.ts.map +1 -0
  47. package/dist/compiler/mutability.js +677 -0
  48. package/dist/compiler/mutability.js.map +1 -0
  49. package/dist/compiler/parser-context.d.ts +24 -0
  50. package/dist/compiler/parser-context.d.ts.map +1 -0
  51. package/dist/compiler/parser-context.js +25 -0
  52. package/dist/compiler/parser-context.js.map +1 -0
  53. package/dist/compiler/parser-utils.d.ts +49 -0
  54. package/dist/compiler/parser-utils.d.ts.map +1 -0
  55. package/dist/compiler/parser-utils.js +566 -0
  56. package/dist/compiler/parser-utils.js.map +1 -0
  57. package/dist/compiler/parser.d.ts +6 -16
  58. package/dist/compiler/parser.d.ts.map +1 -1
  59. package/dist/compiler/parser.js +222 -2123
  60. package/dist/compiler/parser.js.map +1 -1
  61. package/dist/compiler/solc.d.ts +6 -6
  62. package/dist/compiler/solc.d.ts.map +1 -1
  63. package/dist/compiler/solc.js +36 -59
  64. package/dist/compiler/solc.js.map +1 -1
  65. package/dist/compiler/statement-parser.d.ts +14 -0
  66. package/dist/compiler/statement-parser.d.ts.map +1 -0
  67. package/dist/compiler/statement-parser.js +1066 -0
  68. package/dist/compiler/statement-parser.js.map +1 -0
  69. package/dist/compiler/type-parser.d.ts +7 -0
  70. package/dist/compiler/type-parser.d.ts.map +1 -0
  71. package/dist/compiler/type-parser.js +239 -0
  72. package/dist/compiler/type-parser.js.map +1 -0
  73. package/dist/compiler/walker.d.ts +20 -0
  74. package/dist/compiler/walker.d.ts.map +1 -0
  75. package/dist/compiler/walker.js +124 -0
  76. package/dist/compiler/walker.js.map +1 -0
  77. package/dist/config/config.d.ts +1 -2
  78. package/dist/config/config.d.ts.map +1 -1
  79. package/dist/config/config.js +100 -15
  80. package/dist/config/config.js.map +1 -1
  81. package/dist/config/defaults.d.ts +3 -0
  82. package/dist/config/defaults.d.ts.map +1 -0
  83. package/dist/config/defaults.js +22 -0
  84. package/dist/config/defaults.js.map +1 -0
  85. package/dist/exports.d.ts +18 -4
  86. package/dist/exports.d.ts.map +1 -1
  87. package/dist/exports.js +3 -0
  88. package/dist/exports.js.map +1 -1
  89. package/dist/index.js +10 -2
  90. package/dist/index.js.map +1 -1
  91. package/dist/stdlib/contracts/access/Ownable.d.ts +33 -0
  92. package/dist/stdlib/contracts/access/Ownable.d.ts.map +1 -0
  93. package/dist/stdlib/contracts/access/Ownable.js +50 -0
  94. package/dist/stdlib/contracts/access/Ownable.js.map +1 -0
  95. package/dist/stdlib/contracts/index.d.ts +22 -0
  96. package/dist/stdlib/contracts/index.d.ts.map +1 -0
  97. package/dist/stdlib/contracts/index.js +25 -0
  98. package/dist/stdlib/contracts/index.js.map +1 -0
  99. package/dist/stdlib/contracts/security/Pausable.d.ts +27 -0
  100. package/dist/stdlib/contracts/security/Pausable.d.ts.map +1 -0
  101. package/dist/stdlib/contracts/security/Pausable.js +41 -0
  102. package/dist/stdlib/contracts/security/Pausable.js.map +1 -0
  103. package/dist/stdlib/contracts/security/ReentrancyGuard.d.ts +17 -0
  104. package/dist/stdlib/contracts/security/ReentrancyGuard.d.ts.map +1 -0
  105. package/dist/stdlib/contracts/security/ReentrancyGuard.js +25 -0
  106. package/dist/stdlib/contracts/security/ReentrancyGuard.js.map +1 -0
  107. package/dist/stdlib/contracts/token/ERC20.d.ts +64 -0
  108. package/dist/stdlib/contracts/token/ERC20.d.ts.map +1 -0
  109. package/dist/stdlib/contracts/token/ERC20.js +117 -0
  110. package/dist/stdlib/contracts/token/ERC20.js.map +1 -0
  111. package/dist/stdlib/contracts/token/ERC721.d.ts +80 -0
  112. package/dist/stdlib/contracts/token/ERC721.d.ts.map +1 -0
  113. package/dist/stdlib/contracts/token/ERC721.js +166 -0
  114. package/dist/stdlib/contracts/token/ERC721.js.map +1 -0
  115. package/dist/stdlib/resolver.d.ts +26 -0
  116. package/dist/stdlib/resolver.d.ts.map +1 -0
  117. package/dist/stdlib/resolver.js +103 -0
  118. package/dist/stdlib/resolver.js.map +1 -0
  119. package/dist/testing.d.ts +93 -0
  120. package/dist/testing.d.ts.map +1 -0
  121. package/dist/testing.js +143 -0
  122. package/dist/testing.js.map +1 -0
  123. package/dist/types/artifacts.d.ts +25 -0
  124. package/dist/types/artifacts.d.ts.map +1 -0
  125. package/dist/types/artifacts.js +2 -0
  126. package/dist/types/artifacts.js.map +1 -0
  127. package/dist/types/config.d.ts +25 -0
  128. package/dist/types/config.d.ts.map +1 -0
  129. package/dist/types/config.js +5 -0
  130. package/dist/types/config.js.map +1 -0
  131. package/dist/types/index.d.ts +4 -306
  132. package/dist/types/index.d.ts.map +1 -1
  133. package/dist/types/index.js +4 -23
  134. package/dist/types/index.js.map +1 -1
  135. package/dist/types/ir.d.ts +294 -0
  136. package/dist/types/ir.d.ts.map +1 -0
  137. package/dist/types/ir.js +21 -0
  138. package/dist/types/ir.js.map +1 -0
  139. package/dist/types/primitives.d.ts +6 -0
  140. package/dist/types/primitives.d.ts.map +1 -0
  141. package/dist/types/primitives.js +6 -0
  142. package/dist/types/primitives.js.map +1 -0
  143. package/dist/utils/regex.d.ts +5 -0
  144. package/dist/utils/regex.d.ts.map +1 -0
  145. package/dist/utils/regex.js +7 -0
  146. package/dist/utils/regex.js.map +1 -0
  147. package/package.json +18 -6
  148. package/stdlib/contracts/access/AccessControl.ts +103 -0
  149. package/stdlib/contracts/access/Ownable.ts +68 -0
  150. package/stdlib/contracts/constants.ts +3 -0
  151. package/stdlib/contracts/index.ts +33 -0
  152. package/stdlib/contracts/security/Pausable.ts +48 -0
  153. package/stdlib/contracts/security/ReentrancyGuard.ts +33 -0
  154. package/stdlib/contracts/token/ERC20.ts +196 -0
  155. package/stdlib/contracts/token/ERC20Permit.ts +81 -0
  156. package/stdlib/contracts/token/ERC20Votes.ts +92 -0
  157. package/stdlib/contracts/token/ERC721.ts +276 -0
@@ -1 +1 @@
1
- {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASrE"}
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrE"}
@@ -1,15 +1,22 @@
1
1
  import path from "path";
2
2
  import { removeDirectory } from "../utils/file.js";
3
- import { logSuccess, logInfo } from "../utils/console.js";
3
+ import { logSuccess, logInfo, logError } from "../utils/console.js";
4
4
  import { loadConfig } from "../config/config.js";
5
5
  export async function cleanCommand(projectRoot) {
6
- const config = await loadConfig(projectRoot);
7
- const outputDir = path.join(projectRoot, config.outputDir);
8
- const cacheDir = path.join(projectRoot, config.cacheDir);
9
- logInfo(`Removing output directory: ${config.outputDir}/`);
10
- removeDirectory(outputDir);
11
- logInfo(`Removing cache directory: ${config.cacheDir}/`);
12
- removeDirectory(cacheDir);
13
- logSuccess("Build artifacts cleaned");
6
+ try {
7
+ const config = await loadConfig(projectRoot);
8
+ const outputDir = path.join(projectRoot, config.outputDir);
9
+ const cacheDir = path.join(projectRoot, config.cacheDir);
10
+ logInfo(`Removing output directory: ${config.outputDir}/`);
11
+ removeDirectory(outputDir);
12
+ logInfo(`Removing cache directory: ${config.cacheDir}/`);
13
+ removeDirectory(cacheDir);
14
+ logSuccess("Build artifacts cleaned");
15
+ }
16
+ catch (err) {
17
+ const message = err instanceof Error ? err.message : "Unknown error occurred";
18
+ logError(message);
19
+ process.exit(1);
20
+ }
14
21
  }
15
22
  //# sourceMappingURL=clean.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzD,OAAO,CAAC,8BAA8B,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;IAC3D,eAAe,CAAC,SAAS,CAAC,CAAC;IAC3B,OAAO,CAAC,6BAA6B,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzD,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1B,UAAU,CAAC,yBAAyB,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzD,OAAO,CAAC,8BAA8B,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QAC3D,eAAe,CAAC,SAAS,CAAC,CAAC;QAC3B,OAAO,CAAC,6BAA6B,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzD,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1B,UAAU,CAAC,yBAAyB,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAChE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAOA,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BvE;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CA6B3E"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AA2DA,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAiC3E"}
@@ -4,8 +4,12 @@ import ora from "ora";
4
4
  import { loadConfig } from "../config/config.js";
5
5
  import { compile } from "../compiler/compiler.js";
6
6
  import { logSuccess, logError, logInfo } from "../utils/console.js";
7
- export async function compileCommand(projectRoot) {
8
- const spinner = ora({ text: "Loading configuration...", color: "cyan" }).start();
7
+ const DEBOUNCE_MS = 200;
8
+ async function executeCompilation(projectRoot, options) {
9
+ const spinner = ora({
10
+ text: "Loading configuration...",
11
+ color: "cyan",
12
+ }).start();
9
13
  try {
10
14
  const config = await loadConfig(projectRoot);
11
15
  spinner.text = "Compiling contracts...";
@@ -13,27 +17,40 @@ export async function compileCommand(projectRoot) {
13
17
  if (result.success) {
14
18
  spinner.succeed("Compilation complete");
15
19
  logSuccess(`${result.artifacts.length} contract(s) compiled successfully`);
20
+ return true;
16
21
  }
17
22
  else {
18
23
  spinner.fail("Compilation failed");
19
- for (const error of result.errors) {
20
- logError(error);
24
+ if (result.failedFiles > 0) {
25
+ logError(`${result.failedFiles} file(s) failed to compile`);
21
26
  }
22
- process.exit(1);
27
+ if (result.artifacts.length > 0) {
28
+ logSuccess(`${result.artifacts.length} contract(s) compiled successfully`);
29
+ }
30
+ if (options?.exitOnError) {
31
+ process.exit(1);
32
+ }
33
+ return false;
23
34
  }
24
35
  }
25
36
  catch (err) {
26
37
  spinner.fail("Compilation failed");
27
38
  const message = err instanceof Error ? err.message : "Unknown error occurred";
28
39
  logError(message);
29
- process.exit(1);
40
+ if (options?.exitOnError) {
41
+ process.exit(1);
42
+ }
43
+ return false;
30
44
  }
31
45
  }
46
+ export async function compileCommand(projectRoot) {
47
+ await executeCompilation(projectRoot, { exitOnError: true });
48
+ }
32
49
  export async function watchCompile(projectRoot) {
33
50
  const config = await loadConfig(projectRoot);
34
51
  const contractsDir = path.join(projectRoot, config.contractsDir);
35
52
  // Run initial compilation
36
- await runCompilation(projectRoot);
53
+ await executeCompilation(projectRoot);
37
54
  logInfo(`Watching for file changes in ${config.contractsDir}/...`);
38
55
  let debounceTimer = null;
39
56
  if (!fs.existsSync(contractsDir)) {
@@ -46,8 +63,8 @@ export async function watchCompile(projectRoot) {
46
63
  clearTimeout(debounceTimer);
47
64
  debounceTimer = setTimeout(() => {
48
65
  logInfo(`File changed: ${filename}`);
49
- runCompilation(projectRoot);
50
- }, 200);
66
+ void executeCompilation(projectRoot);
67
+ }, DEBOUNCE_MS);
51
68
  });
52
69
  return () => {
53
70
  if (debounceTimer)
@@ -55,26 +72,4 @@ export async function watchCompile(projectRoot) {
55
72
  watcher.close();
56
73
  };
57
74
  }
58
- async function runCompilation(projectRoot) {
59
- const spinner = ora({ text: "Compiling contracts...", color: "cyan" }).start();
60
- try {
61
- const config = await loadConfig(projectRoot);
62
- const result = await compile(projectRoot, config);
63
- if (result.success) {
64
- spinner.succeed("Compilation complete");
65
- logSuccess(`${result.artifacts.length} contract(s) compiled successfully`);
66
- }
67
- else {
68
- spinner.fail("Compilation failed");
69
- for (const error of result.errors) {
70
- logError(error);
71
- }
72
- }
73
- }
74
- catch (err) {
75
- spinner.fail("Compilation failed");
76
- const message = err instanceof Error ? err.message : "Unknown error occurred";
77
- logError(message);
78
- }
79
- }
80
75
  //# sourceMappingURL=compile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAqMA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA+Kf"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAgXA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -55,39 +55,23 @@ export default defineConfig({
55
55
  },
56
56
  });
57
57
  `;
58
- const EXAMPLE_CONTRACT = `import { address, msg, SkittlesEvent, Indexed } from "skittles";
58
+ const EXAMPLE_CONTRACT = `import { address, msg } from "skittles";
59
+ import { ERC20 } from "skittles/contracts";
59
60
 
60
- export class Token {
61
- Transfer: SkittlesEvent<{
62
- from: Indexed<address>;
63
- to: Indexed<address>;
64
- value: number;
65
- }>;
66
-
67
- public name: string = "MyToken";
68
- public symbol: string = "MTK";
69
- public totalSupply: number = 0;
70
- private balances: Record<address, number> = {};
61
+ export class Token extends ERC20 {
62
+ private _owner: address;
71
63
 
72
64
  constructor(initialSupply: number) {
73
- this.totalSupply = initialSupply;
74
- this.balances[msg.sender] = initialSupply;
75
- }
76
-
77
- public balanceOf(account: address): number {
78
- return this.balances[account];
65
+ super("MyToken", "MTK");
66
+ this._owner = msg.sender;
67
+ this._mint(msg.sender, initialSupply);
79
68
  }
80
69
 
81
- public transfer(to: address, amount: number): boolean {
82
- const sender: address = msg.sender;
83
- console.log("transfer", sender, to, amount);
84
- if (this.balances[sender] < amount) {
85
- throw new Error("Insufficient balance");
70
+ public mint(to: address, amount: number): void {
71
+ if (msg.sender != this._owner) {
72
+ throw new Error("Caller is not the owner");
86
73
  }
87
- this.balances[sender] -= amount;
88
- this.balances[to] += amount;
89
- this.Transfer.emit(sender, to, amount);
90
- return true;
74
+ this._mint(to, amount);
91
75
  }
92
76
  }
93
77
  `;
@@ -114,6 +98,11 @@ describe("Token", function () {
114
98
  expect(await token.name()).to.equal("MyToken");
115
99
  });
116
100
 
101
+ it("assigns initial supply to deployer", async function () {
102
+ const { token, owner } = await networkHelpers.loadFixture(deployTokenFixture);
103
+ expect(await token.balanceOf(owner.address)).to.equal(INITIAL_SUPPLY);
104
+ });
105
+
117
106
  it("emits Transfer event when transferring tokens", async function () {
118
107
  const { token, owner, alice } = await networkHelpers.loadFixture(deployTokenFixture);
119
108
  const amount = 100n;
@@ -123,15 +112,36 @@ describe("Token", function () {
123
112
  .withArgs(owner.address, alice.address, amount);
124
113
  });
125
114
 
126
- it("reverts on insufficient balance", async function () {
127
- const { token, tokenAsAlice, bob } = await networkHelpers.loadFixture(deployTokenFixture);
128
-
129
- await expect(
130
- tokenAsAlice.transfer(bob.address, 999_999_999n)
131
- ).to.be.revertedWith("Insufficient balance");
115
+ it("allows owner to mint new tokens", async function () {
116
+ const { token, alice } = await networkHelpers.loadFixture(deployTokenFixture);
117
+ const mintAmount = 500n;
118
+ await (await token.mint(alice.address, mintAmount)).wait();
119
+ expect(await token.balanceOf(alice.address)).to.equal(mintAmount);
132
120
  });
133
121
  });
134
122
  `;
123
+ /**
124
+ * Shared dependency and script definitions used by both buildPackageJson
125
+ * and the existing package.json merge logic.
126
+ */
127
+ const DEFAULT_SCRIPTS = {
128
+ compile: "skittles compile",
129
+ build: "skittles compile && hardhat build",
130
+ clean: "skittles clean",
131
+ test: "skittles compile && hardhat test",
132
+ };
133
+ const REQUIRED_DEV_DEPS = {
134
+ "@nomicfoundation/hardhat-ethers": "^4.0.0",
135
+ "@nomicfoundation/hardhat-ethers-chai-matchers": "^3.0.0",
136
+ "@nomicfoundation/hardhat-mocha": "^3.0.0",
137
+ "@nomicfoundation/hardhat-network-helpers": "^3.0.0",
138
+ "@nomicfoundation/hardhat-typechain": "^3.0.0",
139
+ chai: "^5.1.2",
140
+ ethers: "^6.16.0",
141
+ hardhat: "^3.0.0",
142
+ mocha: "^11.0.0",
143
+ "@types/mocha": "^10.0.0",
144
+ };
135
145
  /**
136
146
  * Detect which package manager is in use based on lock files.
137
147
  */
@@ -151,37 +161,35 @@ function buildPackageJson(projectName) {
151
161
  version: "1.0.0",
152
162
  private: true,
153
163
  type: "module",
154
- scripts: {
155
- compile: "skittles compile",
156
- build: "skittles compile && hardhat build",
157
- clean: "skittles clean",
158
- test: "skittles compile && hardhat test",
159
- },
164
+ scripts: { ...DEFAULT_SCRIPTS },
160
165
  dependencies: {
161
166
  skittles: "latest",
162
167
  },
163
- devDependencies: {
164
- "@nomicfoundation/hardhat-ethers": "^4.0.0",
165
- "@nomicfoundation/hardhat-ethers-chai-matchers": "^3.0.0",
166
- "@nomicfoundation/hardhat-mocha": "^3.0.0",
167
- "@nomicfoundation/hardhat-network-helpers": "^3.0.0",
168
- "@nomicfoundation/hardhat-typechain": "^3.0.0",
169
- chai: "^5.1.2",
170
- ethers: "^6.16.0",
171
- hardhat: "^3.0.0",
172
- mocha: "^11.0.0",
173
- "@types/mocha": "^10.0.0",
174
- },
168
+ devDependencies: { ...REQUIRED_DEV_DEPS },
175
169
  engines: {
176
170
  node: ">=22.0.0",
177
171
  },
178
172
  }, null, 2);
179
173
  }
180
- export async function initCommand(projectRoot, options = {}) {
181
- const { install = true } = options;
182
- logInfo("Initializing new Skittles project...");
174
+ /**
175
+ * Write a file if it does not already exist, logging the result.
176
+ * If the file exists, a warning is logged. Otherwise the file is written
177
+ * and a success message is logged.
178
+ */
179
+ function writeIfNotExists(filePath, content, description) {
180
+ if (fs.existsSync(filePath)) {
181
+ logWarning(`${description} already exists, skipping`);
182
+ }
183
+ else {
184
+ writeFile(filePath, content);
185
+ logSuccess(`Created ${description}`);
186
+ }
187
+ }
188
+ /**
189
+ * Create or update package.json with required dependencies and scripts.
190
+ */
191
+ function initPackageJson(projectRoot) {
183
192
  const projectName = path.basename(projectRoot);
184
- // Create package.json (or update existing)
185
193
  const packageJsonPath = path.join(projectRoot, "package.json");
186
194
  if (fs.existsSync(packageJsonPath)) {
187
195
  try {
@@ -193,19 +201,7 @@ export async function initCommand(projectRoot, options = {}) {
193
201
  }
194
202
  if (!pkg.devDependencies)
195
203
  pkg.devDependencies = {};
196
- const requiredDevDeps = {
197
- "@nomicfoundation/hardhat-ethers": "^4.0.0",
198
- "@nomicfoundation/hardhat-ethers-chai-matchers": "^3.0.0",
199
- "@nomicfoundation/hardhat-mocha": "^3.0.0",
200
- "@nomicfoundation/hardhat-network-helpers": "^3.0.0",
201
- "@nomicfoundation/hardhat-typechain": "^3.0.0",
202
- chai: "^5.1.2",
203
- ethers: "^6.16.0",
204
- hardhat: "^3.0.0",
205
- mocha: "^11.0.0",
206
- "@types/mocha": "^10.0.0",
207
- };
208
- for (const [dep, version] of Object.entries(requiredDevDeps)) {
204
+ for (const [dep, version] of Object.entries(REQUIRED_DEV_DEPS)) {
209
205
  if (!pkg.devDependencies[dep] && !pkg.dependencies?.[dep]) {
210
206
  pkg.devDependencies[dep] = version;
211
207
  updated = true;
@@ -219,13 +215,7 @@ export async function initCommand(projectRoot, options = {}) {
219
215
  }
220
216
  if (!pkg.scripts)
221
217
  pkg.scripts = {};
222
- const defaultScripts = {
223
- compile: "skittles compile",
224
- build: "skittles compile && hardhat build",
225
- clean: "skittles clean",
226
- test: "skittles compile && hardhat test",
227
- };
228
- for (const [name, cmd] of Object.entries(defaultScripts)) {
218
+ for (const [name, cmd] of Object.entries(DEFAULT_SCRIPTS)) {
229
219
  if (!pkg.scripts[name]) {
230
220
  pkg.scripts[name] = cmd;
231
221
  updated = true;
@@ -236,8 +226,9 @@ export async function initCommand(projectRoot, options = {}) {
236
226
  logSuccess("Updated package.json");
237
227
  }
238
228
  }
239
- catch {
240
- logWarning("Could not update existing package.json, creating a new one");
229
+ catch (err) {
230
+ const message = err instanceof Error ? err.message : "Unknown error";
231
+ logWarning(`Could not update existing package.json (${message}), creating a new one`);
241
232
  writeFile(packageJsonPath, buildPackageJson(projectName) + "\n");
242
233
  logSuccess("Created package.json");
243
234
  }
@@ -246,59 +237,26 @@ export async function initCommand(projectRoot, options = {}) {
246
237
  writeFile(packageJsonPath, buildPackageJson(projectName) + "\n");
247
238
  logSuccess("Created package.json");
248
239
  }
249
- // Create contracts directory
240
+ }
241
+ /**
242
+ * Create project directories and scaffold example files.
243
+ */
244
+ function initProjectFiles(projectRoot) {
245
+ // Create directories
250
246
  const contractsDir = path.join(projectRoot, "contracts");
251
247
  ensureDirectory(contractsDir);
252
248
  logSuccess("Created contracts/ directory");
253
- // Create test directory
254
249
  const testDir = path.join(projectRoot, "test");
255
250
  ensureDirectory(testDir);
256
251
  logSuccess("Created test/ directory");
257
- // Write config file
258
- const configPath = path.join(projectRoot, "skittles.config.json");
259
- if (fs.existsSync(configPath)) {
260
- logWarning("skittles.config.json already exists, skipping");
261
- }
262
- else {
263
- writeFile(configPath, CONFIG_TEMPLATE + "\n");
264
- logSuccess("Created skittles.config.json");
265
- }
266
252
  // Write example contract
267
- const examplePath = path.join(contractsDir, "Token.ts");
268
- if (fs.existsSync(examplePath)) {
269
- logWarning("contracts/Token.ts already exists, skipping");
270
- }
271
- else {
272
- writeFile(examplePath, EXAMPLE_CONTRACT);
273
- logSuccess("Created contracts/Token.ts");
274
- }
253
+ writeIfNotExists(path.join(contractsDir, "Token.ts"), EXAMPLE_CONTRACT, "contracts/Token.ts");
275
254
  // Write example test
276
- const exampleTestPath = path.join(testDir, "Token.test.ts");
277
- if (fs.existsSync(exampleTestPath)) {
278
- logWarning("test/Token.test.ts already exists, skipping");
279
- }
280
- else {
281
- writeFile(exampleTestPath, EXAMPLE_TEST);
282
- logSuccess("Created test/Token.test.ts");
283
- }
255
+ writeIfNotExists(path.join(testDir, "Token.test.ts"), EXAMPLE_TEST, "test/Token.test.ts");
284
256
  // Write tsconfig.json
285
- const tsconfigPath = path.join(projectRoot, "tsconfig.json");
286
- if (fs.existsSync(tsconfigPath)) {
287
- logWarning("tsconfig.json already exists, skipping");
288
- }
289
- else {
290
- writeFile(tsconfigPath, TSCONFIG_TEMPLATE + "\n");
291
- logSuccess("Created tsconfig.json");
292
- }
257
+ writeIfNotExists(path.join(projectRoot, "tsconfig.json"), TSCONFIG_TEMPLATE + "\n", "tsconfig.json");
293
258
  // Write hardhat.config.ts
294
- const hardhatConfigPath = path.join(projectRoot, "hardhat.config.ts");
295
- if (fs.existsSync(hardhatConfigPath)) {
296
- logWarning("hardhat.config.ts already exists, skipping");
297
- }
298
- else {
299
- writeFile(hardhatConfigPath, HARDHAT_CONFIG_TEMPLATE);
300
- logSuccess("Created hardhat.config.ts");
301
- }
259
+ writeIfNotExists(path.join(projectRoot, "hardhat.config.ts"), HARDHAT_CONFIG_TEMPLATE, "hardhat.config.ts");
302
260
  // Update .gitignore
303
261
  const gitignorePath = path.join(projectRoot, ".gitignore");
304
262
  const gitignoreEntries = [
@@ -322,7 +280,17 @@ export async function initCommand(projectRoot, options = {}) {
322
280
  writeFile(gitignorePath, gitignoreEntries.join("\n") + "\n");
323
281
  logSuccess("Created .gitignore");
324
282
  }
325
- // Install dependencies
283
+ }
284
+ /**
285
+ * Write the skittles.config.json file.
286
+ */
287
+ function initConfig(projectRoot) {
288
+ writeIfNotExists(path.join(projectRoot, "skittles.config.json"), CONFIG_TEMPLATE + "\n", "skittles.config.json");
289
+ }
290
+ /**
291
+ * Install project dependencies using the detected package manager.
292
+ */
293
+ function installDependencies(projectRoot, install) {
326
294
  const pm = detectPackageManager(projectRoot);
327
295
  if (install) {
328
296
  logInfo(`Installing dependencies with ${pm}...`);
@@ -342,6 +310,14 @@ export async function initCommand(projectRoot, options = {}) {
342
310
  else {
343
311
  logInfo(`Skipping dependency installation. Run \`${pm} install\` manually.`);
344
312
  }
313
+ }
314
+ export async function initCommand(projectRoot, options = {}) {
315
+ const { install = true } = options;
316
+ logInfo("Initializing new Skittles project...");
317
+ initPackageJson(projectRoot);
318
+ initProjectFiles(projectRoot);
319
+ initConfig(projectRoot);
320
+ installDependencies(projectRoot, install);
345
321
  logSuccess("Skittles project initialized!");
346
322
  logInfo("");
347
323
  logInfo("Next steps:");
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEhF,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CACpC;IACE,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,WAAW;CACvB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CACtC;IACE,eAAe,EAAE;QACf,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,UAAU;QAClB,gBAAgB,EAAE,UAAU;QAC5B,GAAG,EAAE,CAAC,QAAQ,CAAC;QACf,MAAM,EAAE,IAAI;QACZ,4BAA4B,EAAE,KAAK;QACnC,wBAAwB,EAAE,KAAK;QAC/B,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,gCAAgC,EAAE,IAAI;QACtC,iBAAiB,EAAE,IAAI;QACvB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,GAAG;KACb;IACD,OAAO,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,YAAY,CAAC;IACtD,OAAO,EAAE,CAAC,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC;CACxD,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AAEF,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B/B,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;CAmBxB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CpB,CAAC;AAEF;;;GAGG;AACH,MAAM,eAAe,GAA2B;IAC9C,OAAO,EAAE,kBAAkB;IAC3B,KAAK,EAAE,mCAAmC;IAC1C,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,kCAAkC;CACzC,CAAC;AAEF,MAAM,iBAAiB,GAA2B;IAChD,iCAAiC,EAAE,QAAQ;IAC3C,+CAA+C,EAAE,QAAQ;IACzD,gCAAgC,EAAE,QAAQ;IAC1C,0CAA0C,EAAE,QAAQ;IACpD,oCAAoC,EAAE,QAAQ;IAC9C,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,SAAS;IAChB,cAAc,EAAE,SAAS;CAC1B,CAAC;AAEF;;GAEG;AACH,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACtE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE,GAAG,eAAe,EAAE;QAC/B,YAAY,EAAE;YACZ,QAAQ,EAAE,QAAQ;SACnB;QACD,eAAe,EAAE,EAAE,GAAG,iBAAiB,EAAE;QACzC,OAAO,EAAE;YACP,IAAI,EAAE,UAAU;SACjB;KACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,QAAgB,EAChB,OAAe,EACf,WAAmB;IAEnB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,UAAU,CAAC,GAAG,WAAW,2BAA2B,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7B,UAAU,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,WAAmB;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAE/D,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,eAAe;gBAAE,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC;YACnD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1D,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;oBACnC,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,YAAY;gBAAE,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAC/B,GAAG,CAAC,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACrC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,OAAO;gBAAE,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;YACnC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;oBACxB,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAChE,UAAU,CAAC,sBAAsB,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,UAAU,CACR,2CAA2C,OAAO,uBAAuB,CAC1E,CAAC;YACF,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;YACjE,UAAU,CAAC,sBAAsB,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;QACjE,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,qBAAqB;IACrB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACzD,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9B,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/C,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAEtC,yBAAyB;IACzB,gBAAgB,CACd,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EACnC,gBAAgB,EAChB,oBAAoB,CACrB,CAAC;IAEF,qBAAqB;IACrB,gBAAgB,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EACnC,YAAY,EACZ,oBAAoB,CACrB,CAAC;IAEF,sBAAsB;IACtB,gBAAgB,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EACvC,iBAAiB,GAAG,IAAI,EACxB,eAAe,CAChB,CAAC;IAEF,0BAA0B;IAC1B,gBAAgB,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAC3C,uBAAuB,EACvB,mBAAmB,CACpB,CAAC;IAEF,oBAAoB;IACpB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG;QACvB,OAAO;QACP,QAAQ;QACR,eAAe;QACf,YAAY;QACZ,QAAQ;QACR,WAAW;QACX,kBAAkB;KACnB,CAAC;IAEF,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACjE,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,aAAa,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7D,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,WAAmB;IACrC,gBAAgB,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,EAC9C,eAAe,GAAG,IAAI,EACtB,sBAAsB,CACvB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,WAAmB,EACnB,OAAgB;IAEhB,MAAM,EAAE,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE;gBACxB,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YACH,UAAU,CAAC,wBAAwB,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,QAAQ,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,0CAA0C,EAAE,UAAU,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CACL,2CAA2C,EAAE,sBAAsB,CACpE,CAAC;IACJ,CAAC;AACH,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,WAAmB,EACnB,UAAuB,EAAE;IAEzB,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACnC,OAAO,CAAC,sCAAsC,CAAC,CAAC;IAEhD,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7B,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC9B,UAAU,CAAC,WAAW,CAAC,CAAC;IACxB,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE1C,UAAU,CAAC,+BAA+B,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,CAAC,aAAa,CAAC,CAAC;IACvB,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/B,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The `skittles test` command.
3
+ * 1. Compiles all contracts (same as `skittles compile`)
4
+ * 2. Runs hardhat test
5
+ */
6
+ export declare function testCommand(projectRoot: string, watch: boolean): Promise<void>;
7
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAmBA;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
@@ -0,0 +1,60 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { spawn } from "child_process";
4
+ import { loadConfig } from "../config/config.js";
5
+ import { compile } from "../compiler/compiler.js";
6
+ import { logSuccess, logError, logInfo } from "../utils/console.js";
7
+ /**
8
+ * Resolve the path to a locally installed binary in node_modules/.bin.
9
+ * Returns the binary name as a fallback if not found locally.
10
+ */
11
+ function resolveLocalBin(projectRoot, bin) {
12
+ const localPath = path.join(projectRoot, "node_modules", ".bin", bin);
13
+ if (fs.existsSync(localPath)) {
14
+ return localPath;
15
+ }
16
+ return bin;
17
+ }
18
+ /**
19
+ * The `skittles test` command.
20
+ * 1. Compiles all contracts (same as `skittles compile`)
21
+ * 2. Runs hardhat test
22
+ */
23
+ export async function testCommand(projectRoot, watch) {
24
+ // Step 1: Compile contracts
25
+ logInfo("Compiling contracts before running tests...");
26
+ try {
27
+ const config = await loadConfig(projectRoot);
28
+ const result = await compile(projectRoot, config);
29
+ if (!result.success) {
30
+ for (const error of result.errors) {
31
+ logError(error);
32
+ }
33
+ process.exit(1);
34
+ }
35
+ logSuccess(`${result.artifacts.length} contract(s) compiled successfully`);
36
+ }
37
+ catch (err) {
38
+ const message = err instanceof Error ? err.message : "Unknown error occurred";
39
+ logError(`Compilation failed: ${message}`);
40
+ process.exit(1);
41
+ }
42
+ // Step 2: Run hardhat test using the locally installed binary
43
+ logInfo(watch ? "Starting tests in watch mode..." : "Running tests...");
44
+ const hardhatBin = resolveLocalBin(projectRoot, "hardhat");
45
+ const args = watch ? ["test", "--watch"] : ["test"];
46
+ const child = spawn(hardhatBin, args, {
47
+ cwd: projectRoot,
48
+ stdio: "inherit",
49
+ shell: true,
50
+ });
51
+ child.on("close", (code) => {
52
+ process.exit(code ?? 0);
53
+ });
54
+ child.on("error", (err) => {
55
+ logError(`Failed to start hardhat: ${err.message}`);
56
+ logInfo("Make sure hardhat is installed: npm install --save-dev hardhat");
57
+ process.exit(1);
58
+ });
59
+ }
60
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEpE;;;GAGG;AACH,SAAS,eAAe,CAAC,WAAmB,EAAE,GAAW;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACtE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,WAAmB,EACnB,KAAc;IAEd,4BAA4B;IAC5B,OAAO,CAAC,6CAA6C,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,UAAU,CACR,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,oCAAoC,CAC/D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAChE,QAAQ,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8DAA8D;IAC9D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAExE,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;QACpC,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,QAAQ,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CACL,gEAAgE,CACjE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/compiler/analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEtG;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,gBAAgB,GAAG,mBAAmB,EAC1C,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAQV"}
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/compiler/analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAG3B;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,gBAAgB,GAAG,mBAAmB,EAC1C,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAeV"}