skittles 1.4.1 → 1.5.1

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 (123) 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 +76 -88
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/compiler/analysis.d.ts.map +1 -1
  11. package/dist/compiler/analysis.js +17 -136
  12. package/dist/compiler/analysis.js.map +1 -1
  13. package/dist/compiler/class-parser.d.ts +25 -0
  14. package/dist/compiler/class-parser.d.ts.map +1 -0
  15. package/dist/compiler/class-parser.js +1040 -0
  16. package/dist/compiler/class-parser.js.map +1 -0
  17. package/dist/compiler/codegen-context.d.ts +10 -0
  18. package/dist/compiler/codegen-context.d.ts.map +1 -0
  19. package/dist/compiler/codegen-context.js +13 -0
  20. package/dist/compiler/codegen-context.js.map +1 -0
  21. package/dist/compiler/codegen.d.ts +2 -0
  22. package/dist/compiler/codegen.d.ts.map +1 -1
  23. package/dist/compiler/codegen.js +895 -304
  24. package/dist/compiler/codegen.js.map +1 -1
  25. package/dist/compiler/compiler.d.ts +1 -0
  26. package/dist/compiler/compiler.d.ts.map +1 -1
  27. package/dist/compiler/compiler.js +339 -265
  28. package/dist/compiler/compiler.js.map +1 -1
  29. package/dist/compiler/constants.d.ts +25 -0
  30. package/dist/compiler/constants.d.ts.map +1 -0
  31. package/dist/compiler/constants.js +34 -0
  32. package/dist/compiler/constants.js.map +1 -0
  33. package/dist/compiler/expression-parser.d.ts +5 -0
  34. package/dist/compiler/expression-parser.d.ts.map +1 -0
  35. package/dist/compiler/expression-parser.js +1212 -0
  36. package/dist/compiler/expression-parser.js.map +1 -0
  37. package/dist/compiler/formatter.d.ts +9 -0
  38. package/dist/compiler/formatter.d.ts.map +1 -0
  39. package/dist/compiler/formatter.js +126 -0
  40. package/dist/compiler/formatter.js.map +1 -0
  41. package/dist/compiler/mutability.d.ts +66 -0
  42. package/dist/compiler/mutability.d.ts.map +1 -0
  43. package/dist/compiler/mutability.js +677 -0
  44. package/dist/compiler/mutability.js.map +1 -0
  45. package/dist/compiler/parser-context.d.ts +24 -0
  46. package/dist/compiler/parser-context.d.ts.map +1 -0
  47. package/dist/compiler/parser-context.js +25 -0
  48. package/dist/compiler/parser-context.js.map +1 -0
  49. package/dist/compiler/parser-utils.d.ts +49 -0
  50. package/dist/compiler/parser-utils.d.ts.map +1 -0
  51. package/dist/compiler/parser-utils.js +566 -0
  52. package/dist/compiler/parser-utils.js.map +1 -0
  53. package/dist/compiler/parser.d.ts +6 -16
  54. package/dist/compiler/parser.d.ts.map +1 -1
  55. package/dist/compiler/parser.js +161 -3375
  56. package/dist/compiler/parser.js.map +1 -1
  57. package/dist/compiler/solc.d.ts +6 -6
  58. package/dist/compiler/solc.d.ts.map +1 -1
  59. package/dist/compiler/solc.js +36 -59
  60. package/dist/compiler/solc.js.map +1 -1
  61. package/dist/compiler/statement-parser.d.ts +14 -0
  62. package/dist/compiler/statement-parser.d.ts.map +1 -0
  63. package/dist/compiler/statement-parser.js +1081 -0
  64. package/dist/compiler/statement-parser.js.map +1 -0
  65. package/dist/compiler/type-parser.d.ts +7 -0
  66. package/dist/compiler/type-parser.d.ts.map +1 -0
  67. package/dist/compiler/type-parser.js +239 -0
  68. package/dist/compiler/type-parser.js.map +1 -0
  69. package/dist/compiler/walker.d.ts +20 -0
  70. package/dist/compiler/walker.d.ts.map +1 -0
  71. package/dist/compiler/walker.js +124 -0
  72. package/dist/compiler/walker.js.map +1 -0
  73. package/dist/config/config.d.ts.map +1 -1
  74. package/dist/config/config.js +94 -3
  75. package/dist/config/config.js.map +1 -1
  76. package/dist/config/defaults.d.ts.map +1 -1
  77. package/dist/config/defaults.js +6 -0
  78. package/dist/config/defaults.js.map +1 -1
  79. package/dist/exports.d.ts +2 -0
  80. package/dist/exports.d.ts.map +1 -1
  81. package/dist/exports.js +3 -0
  82. package/dist/exports.js.map +1 -1
  83. package/dist/index.js +10 -2
  84. package/dist/index.js.map +1 -1
  85. package/dist/stdlib/resolver.d.ts +7 -0
  86. package/dist/stdlib/resolver.d.ts.map +1 -1
  87. package/dist/stdlib/resolver.js +31 -9
  88. package/dist/stdlib/resolver.js.map +1 -1
  89. package/dist/types/artifacts.d.ts +25 -0
  90. package/dist/types/artifacts.d.ts.map +1 -0
  91. package/dist/types/artifacts.js +2 -0
  92. package/dist/types/artifacts.js.map +1 -0
  93. package/dist/types/config.d.ts +25 -0
  94. package/dist/types/config.d.ts.map +1 -0
  95. package/dist/types/config.js +5 -0
  96. package/dist/types/config.js.map +1 -0
  97. package/dist/types/index.d.ts +4 -313
  98. package/dist/types/index.d.ts.map +1 -1
  99. package/dist/types/index.js +4 -23
  100. package/dist/types/index.js.map +1 -1
  101. package/dist/types/ir.d.ts +294 -0
  102. package/dist/types/ir.d.ts.map +1 -0
  103. package/dist/types/ir.js +21 -0
  104. package/dist/types/ir.js.map +1 -0
  105. package/dist/types/primitives.d.ts +6 -0
  106. package/dist/types/primitives.d.ts.map +1 -0
  107. package/dist/types/primitives.js +6 -0
  108. package/dist/types/primitives.js.map +1 -0
  109. package/dist/utils/regex.d.ts +5 -0
  110. package/dist/utils/regex.d.ts.map +1 -0
  111. package/dist/utils/regex.js +7 -0
  112. package/dist/utils/regex.js.map +1 -0
  113. package/package.json +8 -1
  114. package/stdlib/contracts/access/AccessControl.ts +103 -0
  115. package/stdlib/contracts/access/Ownable.ts +6 -5
  116. package/stdlib/contracts/constants.ts +3 -0
  117. package/stdlib/contracts/index.ts +6 -0
  118. package/stdlib/contracts/security/Pausable.ts +3 -3
  119. package/stdlib/contracts/security/ReentrancyGuard.ts +8 -5
  120. package/stdlib/contracts/token/ERC20.ts +17 -16
  121. package/stdlib/contracts/token/ERC20Permit.ts +81 -0
  122. package/stdlib/contracts/token/ERC20Votes.ts +92 -0
  123. package/stdlib/contracts/token/ERC721.ts +29 -28
@@ -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":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,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,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,GAAG,wBAAwB,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAElD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACxC,UAAU,CACR,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,oCAAoC,CAC/D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnC,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;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnC,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;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAEjE,0BAA0B;IAC1B,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IAElC,OAAO,CAAC,gCAAgC,MAAM,CAAC,YAAY,MAAM,CAAC,CAAC;IAEnE,IAAI,aAAa,GAAyC,IAAI,CAAC;IAE/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QAC/E,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAEnD,IAAI,aAAa;YAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QAC/C,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,OAAO,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;YACrC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE;QACV,IAAI,aAAa;YAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,WAAmB;IAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAE/E,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,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACxC,UAAU,CACR,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,oCAAoC,CAC/D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnC,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAChE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;AACH,CAAC"}
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":"AAyLA,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"}
@@ -120,6 +120,28 @@ describe("Token", function () {
120
120
  });
121
121
  });
122
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
+ };
123
145
  /**
124
146
  * Detect which package manager is in use based on lock files.
125
147
  */
@@ -139,37 +161,35 @@ function buildPackageJson(projectName) {
139
161
  version: "1.0.0",
140
162
  private: true,
141
163
  type: "module",
142
- scripts: {
143
- compile: "skittles compile",
144
- build: "skittles compile && hardhat build",
145
- clean: "skittles clean",
146
- test: "skittles compile && hardhat test",
147
- },
164
+ scripts: { ...DEFAULT_SCRIPTS },
148
165
  dependencies: {
149
166
  skittles: "latest",
150
167
  },
151
- devDependencies: {
152
- "@nomicfoundation/hardhat-ethers": "^4.0.0",
153
- "@nomicfoundation/hardhat-ethers-chai-matchers": "^3.0.0",
154
- "@nomicfoundation/hardhat-mocha": "^3.0.0",
155
- "@nomicfoundation/hardhat-network-helpers": "^3.0.0",
156
- "@nomicfoundation/hardhat-typechain": "^3.0.0",
157
- chai: "^5.1.2",
158
- ethers: "^6.16.0",
159
- hardhat: "^3.0.0",
160
- mocha: "^11.0.0",
161
- "@types/mocha": "^10.0.0",
162
- },
168
+ devDependencies: { ...REQUIRED_DEV_DEPS },
163
169
  engines: {
164
170
  node: ">=22.0.0",
165
171
  },
166
172
  }, null, 2);
167
173
  }
168
- export async function initCommand(projectRoot, options = {}) {
169
- const { install = true } = options;
170
- 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) {
171
192
  const projectName = path.basename(projectRoot);
172
- // Create package.json (or update existing)
173
193
  const packageJsonPath = path.join(projectRoot, "package.json");
174
194
  if (fs.existsSync(packageJsonPath)) {
175
195
  try {
@@ -181,19 +201,7 @@ export async function initCommand(projectRoot, options = {}) {
181
201
  }
182
202
  if (!pkg.devDependencies)
183
203
  pkg.devDependencies = {};
184
- const requiredDevDeps = {
185
- "@nomicfoundation/hardhat-ethers": "^4.0.0",
186
- "@nomicfoundation/hardhat-ethers-chai-matchers": "^3.0.0",
187
- "@nomicfoundation/hardhat-mocha": "^3.0.0",
188
- "@nomicfoundation/hardhat-network-helpers": "^3.0.0",
189
- "@nomicfoundation/hardhat-typechain": "^3.0.0",
190
- chai: "^5.1.2",
191
- ethers: "^6.16.0",
192
- hardhat: "^3.0.0",
193
- mocha: "^11.0.0",
194
- "@types/mocha": "^10.0.0",
195
- };
196
- for (const [dep, version] of Object.entries(requiredDevDeps)) {
204
+ for (const [dep, version] of Object.entries(REQUIRED_DEV_DEPS)) {
197
205
  if (!pkg.devDependencies[dep] && !pkg.dependencies?.[dep]) {
198
206
  pkg.devDependencies[dep] = version;
199
207
  updated = true;
@@ -207,13 +215,7 @@ export async function initCommand(projectRoot, options = {}) {
207
215
  }
208
216
  if (!pkg.scripts)
209
217
  pkg.scripts = {};
210
- const defaultScripts = {
211
- compile: "skittles compile",
212
- build: "skittles compile && hardhat build",
213
- clean: "skittles clean",
214
- test: "skittles compile && hardhat test",
215
- };
216
- for (const [name, cmd] of Object.entries(defaultScripts)) {
218
+ for (const [name, cmd] of Object.entries(DEFAULT_SCRIPTS)) {
217
219
  if (!pkg.scripts[name]) {
218
220
  pkg.scripts[name] = cmd;
219
221
  updated = true;
@@ -224,8 +226,9 @@ export async function initCommand(projectRoot, options = {}) {
224
226
  logSuccess("Updated package.json");
225
227
  }
226
228
  }
227
- catch {
228
- 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`);
229
232
  writeFile(packageJsonPath, buildPackageJson(projectName) + "\n");
230
233
  logSuccess("Created package.json");
231
234
  }
@@ -234,59 +237,26 @@ export async function initCommand(projectRoot, options = {}) {
234
237
  writeFile(packageJsonPath, buildPackageJson(projectName) + "\n");
235
238
  logSuccess("Created package.json");
236
239
  }
237
- // Create contracts directory
240
+ }
241
+ /**
242
+ * Create project directories and scaffold example files.
243
+ */
244
+ function initProjectFiles(projectRoot) {
245
+ // Create directories
238
246
  const contractsDir = path.join(projectRoot, "contracts");
239
247
  ensureDirectory(contractsDir);
240
248
  logSuccess("Created contracts/ directory");
241
- // Create test directory
242
249
  const testDir = path.join(projectRoot, "test");
243
250
  ensureDirectory(testDir);
244
251
  logSuccess("Created test/ directory");
245
- // Write config file
246
- const configPath = path.join(projectRoot, "skittles.config.json");
247
- if (fs.existsSync(configPath)) {
248
- logWarning("skittles.config.json already exists, skipping");
249
- }
250
- else {
251
- writeFile(configPath, CONFIG_TEMPLATE + "\n");
252
- logSuccess("Created skittles.config.json");
253
- }
254
252
  // Write example contract
255
- const examplePath = path.join(contractsDir, "Token.ts");
256
- if (fs.existsSync(examplePath)) {
257
- logWarning("contracts/Token.ts already exists, skipping");
258
- }
259
- else {
260
- writeFile(examplePath, EXAMPLE_CONTRACT);
261
- logSuccess("Created contracts/Token.ts");
262
- }
253
+ writeIfNotExists(path.join(contractsDir, "Token.ts"), EXAMPLE_CONTRACT, "contracts/Token.ts");
263
254
  // Write example test
264
- const exampleTestPath = path.join(testDir, "Token.test.ts");
265
- if (fs.existsSync(exampleTestPath)) {
266
- logWarning("test/Token.test.ts already exists, skipping");
267
- }
268
- else {
269
- writeFile(exampleTestPath, EXAMPLE_TEST);
270
- logSuccess("Created test/Token.test.ts");
271
- }
255
+ writeIfNotExists(path.join(testDir, "Token.test.ts"), EXAMPLE_TEST, "test/Token.test.ts");
272
256
  // Write tsconfig.json
273
- const tsconfigPath = path.join(projectRoot, "tsconfig.json");
274
- if (fs.existsSync(tsconfigPath)) {
275
- logWarning("tsconfig.json already exists, skipping");
276
- }
277
- else {
278
- writeFile(tsconfigPath, TSCONFIG_TEMPLATE + "\n");
279
- logSuccess("Created tsconfig.json");
280
- }
257
+ writeIfNotExists(path.join(projectRoot, "tsconfig.json"), TSCONFIG_TEMPLATE + "\n", "tsconfig.json");
281
258
  // Write hardhat.config.ts
282
- const hardhatConfigPath = path.join(projectRoot, "hardhat.config.ts");
283
- if (fs.existsSync(hardhatConfigPath)) {
284
- logWarning("hardhat.config.ts already exists, skipping");
285
- }
286
- else {
287
- writeFile(hardhatConfigPath, HARDHAT_CONFIG_TEMPLATE);
288
- logSuccess("Created hardhat.config.ts");
289
- }
259
+ writeIfNotExists(path.join(projectRoot, "hardhat.config.ts"), HARDHAT_CONFIG_TEMPLATE, "hardhat.config.ts");
290
260
  // Update .gitignore
291
261
  const gitignorePath = path.join(projectRoot, ".gitignore");
292
262
  const gitignoreEntries = [
@@ -310,7 +280,17 @@ export async function initCommand(projectRoot, options = {}) {
310
280
  writeFile(gitignorePath, gitignoreEntries.join("\n") + "\n");
311
281
  logSuccess("Created .gitignore");
312
282
  }
313
- // 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) {
314
294
  const pm = detectPackageManager(projectRoot);
315
295
  if (install) {
316
296
  logInfo(`Installing dependencies with ${pm}...`);
@@ -330,6 +310,14 @@ export async function initCommand(projectRoot, options = {}) {
330
310
  else {
331
311
  logInfo(`Skipping dependency installation. Run \`${pm} install\` manually.`);
332
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);
333
321
  logSuccess("Skittles project initialized!");
334
322
  logInfo("");
335
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":"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"}
@@ -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"}
@@ -1,3 +1,4 @@
1
+ import { walkStatements } from "./walker.js";
1
2
  /**
2
3
  * Analyze a function body for unreachable code and unused local variables.
3
4
  * Returns an array of warning strings.
@@ -51,8 +52,6 @@ function walkNestedBlocks(stmt, visitor) {
51
52
  visitor(stmt.body);
52
53
  break;
53
54
  case "while":
54
- visitor(stmt.body);
55
- break;
56
55
  case "do-while":
57
56
  visitor(stmt.body);
58
57
  break;
@@ -89,146 +88,28 @@ function checkUnusedVariables(statements, parameterNames, contractName, function
89
88
  }
90
89
  /**
91
90
  * Walk all statements recursively, collecting declared variable names
92
- * and used identifier names.
91
+ * and used identifier names via the shared AST walker.
93
92
  */
94
93
  function walkAllStatements(stmts, declared, used) {
95
- for (const stmt of stmts) {
96
- switch (stmt.kind) {
97
- case "variable-declaration":
94
+ walkStatements(stmts, {
95
+ visitStatement(stmt) {
96
+ if (stmt.kind === "variable-declaration") {
98
97
  declared.add(stmt.name);
99
- if (stmt.initializer)
100
- collectUsedIdentifiers(stmt.initializer, used);
101
- break;
102
- case "return":
103
- if (stmt.value)
104
- collectUsedIdentifiers(stmt.value, used);
105
- break;
106
- case "expression":
107
- collectUsedIdentifiers(stmt.expression, used);
108
- break;
109
- case "if":
110
- collectUsedIdentifiers(stmt.condition, used);
111
- walkAllStatements(stmt.thenBody, declared, used);
112
- if (stmt.elseBody)
113
- walkAllStatements(stmt.elseBody, declared, used);
114
- break;
115
- case "for":
116
- if (stmt.initializer) {
117
- if (stmt.initializer.kind === "variable-declaration") {
118
- declared.add(stmt.initializer.name);
119
- if (stmt.initializer.initializer)
120
- collectUsedIdentifiers(stmt.initializer.initializer, used);
121
- }
122
- else {
123
- collectUsedIdentifiers(stmt.initializer.expression, used);
124
- }
125
- }
126
- if (stmt.condition)
127
- collectUsedIdentifiers(stmt.condition, used);
128
- if (stmt.incrementor)
129
- collectUsedIdentifiers(stmt.incrementor, used);
130
- walkAllStatements(stmt.body, declared, used);
131
- break;
132
- case "while":
133
- collectUsedIdentifiers(stmt.condition, used);
134
- walkAllStatements(stmt.body, declared, used);
135
- break;
136
- case "do-while":
137
- collectUsedIdentifiers(stmt.condition, used);
138
- walkAllStatements(stmt.body, declared, used);
139
- break;
140
- case "revert":
141
- if (stmt.message)
142
- collectUsedIdentifiers(stmt.message, used);
143
- if (stmt.customErrorArgs) {
144
- for (const arg of stmt.customErrorArgs) {
145
- collectUsedIdentifiers(arg, used);
146
- }
147
- }
148
- break;
149
- case "emit":
150
- for (const arg of stmt.args) {
151
- collectUsedIdentifiers(arg, used);
152
- }
153
- break;
154
- case "switch":
155
- collectUsedIdentifiers(stmt.discriminant, used);
156
- for (const c of stmt.cases) {
157
- if (c.value)
158
- collectUsedIdentifiers(c.value, used);
159
- walkAllStatements(c.body, declared, used);
160
- }
161
- break;
162
- case "delete":
163
- collectUsedIdentifiers(stmt.target, used);
164
- break;
165
- case "try-catch":
166
- collectUsedIdentifiers(stmt.call, used);
167
- if (stmt.returnVarName)
168
- declared.add(stmt.returnVarName);
169
- walkAllStatements(stmt.successBody, declared, used);
170
- walkAllStatements(stmt.catchBody, declared, used);
171
- break;
172
- case "console-log":
173
- for (const arg of stmt.args) {
174
- collectUsedIdentifiers(arg, used);
175
- }
176
- break;
177
- }
178
- }
179
- }
180
- /**
181
- * Collect all identifier names used in an expression.
182
- */
183
- function collectUsedIdentifiers(expr, used) {
184
- switch (expr.kind) {
185
- case "identifier":
186
- used.add(expr.name);
187
- break;
188
- case "binary":
189
- collectUsedIdentifiers(expr.left, used);
190
- collectUsedIdentifiers(expr.right, used);
191
- break;
192
- case "unary":
193
- collectUsedIdentifiers(expr.operand, used);
194
- break;
195
- case "assignment":
196
- collectUsedIdentifiers(expr.target, used);
197
- collectUsedIdentifiers(expr.value, used);
198
- break;
199
- case "call":
200
- collectUsedIdentifiers(expr.callee, used);
201
- for (const arg of expr.args) {
202
- collectUsedIdentifiers(arg, used);
203
98
  }
204
- break;
205
- case "property-access":
206
- collectUsedIdentifiers(expr.object, used);
207
- break;
208
- case "element-access":
209
- collectUsedIdentifiers(expr.object, used);
210
- collectUsedIdentifiers(expr.index, used);
211
- break;
212
- case "conditional":
213
- collectUsedIdentifiers(expr.condition, used);
214
- collectUsedIdentifiers(expr.whenTrue, used);
215
- collectUsedIdentifiers(expr.whenFalse, used);
216
- break;
217
- case "new":
218
- for (const arg of expr.args) {
219
- collectUsedIdentifiers(arg, used);
99
+ if (stmt.kind === "tuple-destructuring") {
100
+ for (const n of stmt.names)
101
+ if (n !== null)
102
+ declared.add(n);
220
103
  }
221
- break;
222
- case "object-literal":
223
- for (const prop of expr.properties) {
224
- collectUsedIdentifiers(prop.value, used);
104
+ if (stmt.kind === "try-catch" && stmt.returnVarName) {
105
+ declared.add(stmt.returnVarName);
225
106
  }
226
- break;
227
- case "tuple-literal":
228
- for (const elem of expr.elements) {
229
- collectUsedIdentifiers(elem, used);
107
+ },
108
+ visitExpression(expr) {
109
+ if (expr.kind === "identifier") {
110
+ used.add(expr.name);
230
111
  }
231
- break;
232
- }
112
+ },
113
+ });
233
114
  }
234
115
  //# sourceMappingURL=analysis.js.map