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.
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +16 -9
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +26 -31
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +97 -121
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/test.d.ts +7 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +60 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/compiler/analysis.d.ts.map +1 -1
- package/dist/compiler/analysis.js +17 -136
- package/dist/compiler/analysis.js.map +1 -1
- package/dist/compiler/class-parser.d.ts +25 -0
- package/dist/compiler/class-parser.d.ts.map +1 -0
- package/dist/compiler/class-parser.js +1040 -0
- package/dist/compiler/class-parser.js.map +1 -0
- package/dist/compiler/codegen-context.d.ts +10 -0
- package/dist/compiler/codegen-context.d.ts.map +1 -0
- package/dist/compiler/codegen-context.js +13 -0
- package/dist/compiler/codegen-context.js.map +1 -0
- package/dist/compiler/codegen.d.ts +6 -3
- package/dist/compiler/codegen.d.ts.map +1 -1
- package/dist/compiler/codegen.js +1449 -68
- package/dist/compiler/codegen.js.map +1 -1
- package/dist/compiler/compiler.d.ts +1 -0
- package/dist/compiler/compiler.d.ts.map +1 -1
- package/dist/compiler/compiler.js +432 -82
- package/dist/compiler/compiler.js.map +1 -1
- package/dist/compiler/constants.d.ts +25 -0
- package/dist/compiler/constants.d.ts.map +1 -0
- package/dist/compiler/constants.js +34 -0
- package/dist/compiler/constants.js.map +1 -0
- package/dist/compiler/expression-parser.d.ts +5 -0
- package/dist/compiler/expression-parser.d.ts.map +1 -0
- package/dist/compiler/expression-parser.js +1212 -0
- package/dist/compiler/expression-parser.js.map +1 -0
- package/dist/compiler/formatter.d.ts +9 -0
- package/dist/compiler/formatter.d.ts.map +1 -0
- package/dist/compiler/formatter.js +126 -0
- package/dist/compiler/formatter.js.map +1 -0
- package/dist/compiler/mutability.d.ts +66 -0
- package/dist/compiler/mutability.d.ts.map +1 -0
- package/dist/compiler/mutability.js +677 -0
- package/dist/compiler/mutability.js.map +1 -0
- package/dist/compiler/parser-context.d.ts +24 -0
- package/dist/compiler/parser-context.d.ts.map +1 -0
- package/dist/compiler/parser-context.js +25 -0
- package/dist/compiler/parser-context.js.map +1 -0
- package/dist/compiler/parser-utils.d.ts +49 -0
- package/dist/compiler/parser-utils.d.ts.map +1 -0
- package/dist/compiler/parser-utils.js +566 -0
- package/dist/compiler/parser-utils.js.map +1 -0
- package/dist/compiler/parser.d.ts +6 -16
- package/dist/compiler/parser.d.ts.map +1 -1
- package/dist/compiler/parser.js +222 -2123
- package/dist/compiler/parser.js.map +1 -1
- package/dist/compiler/solc.d.ts +6 -6
- package/dist/compiler/solc.d.ts.map +1 -1
- package/dist/compiler/solc.js +36 -59
- package/dist/compiler/solc.js.map +1 -1
- package/dist/compiler/statement-parser.d.ts +14 -0
- package/dist/compiler/statement-parser.d.ts.map +1 -0
- package/dist/compiler/statement-parser.js +1066 -0
- package/dist/compiler/statement-parser.js.map +1 -0
- package/dist/compiler/type-parser.d.ts +7 -0
- package/dist/compiler/type-parser.d.ts.map +1 -0
- package/dist/compiler/type-parser.js +239 -0
- package/dist/compiler/type-parser.js.map +1 -0
- package/dist/compiler/walker.d.ts +20 -0
- package/dist/compiler/walker.d.ts.map +1 -0
- package/dist/compiler/walker.js +124 -0
- package/dist/compiler/walker.js.map +1 -0
- package/dist/config/config.d.ts +1 -2
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +100 -15
- package/dist/config/config.js.map +1 -1
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +22 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/exports.d.ts +18 -4
- package/dist/exports.d.ts.map +1 -1
- package/dist/exports.js +3 -0
- package/dist/exports.js.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/stdlib/contracts/access/Ownable.d.ts +33 -0
- package/dist/stdlib/contracts/access/Ownable.d.ts.map +1 -0
- package/dist/stdlib/contracts/access/Ownable.js +50 -0
- package/dist/stdlib/contracts/access/Ownable.js.map +1 -0
- package/dist/stdlib/contracts/index.d.ts +22 -0
- package/dist/stdlib/contracts/index.d.ts.map +1 -0
- package/dist/stdlib/contracts/index.js +25 -0
- package/dist/stdlib/contracts/index.js.map +1 -0
- package/dist/stdlib/contracts/security/Pausable.d.ts +27 -0
- package/dist/stdlib/contracts/security/Pausable.d.ts.map +1 -0
- package/dist/stdlib/contracts/security/Pausable.js +41 -0
- package/dist/stdlib/contracts/security/Pausable.js.map +1 -0
- package/dist/stdlib/contracts/security/ReentrancyGuard.d.ts +17 -0
- package/dist/stdlib/contracts/security/ReentrancyGuard.d.ts.map +1 -0
- package/dist/stdlib/contracts/security/ReentrancyGuard.js +25 -0
- package/dist/stdlib/contracts/security/ReentrancyGuard.js.map +1 -0
- package/dist/stdlib/contracts/token/ERC20.d.ts +64 -0
- package/dist/stdlib/contracts/token/ERC20.d.ts.map +1 -0
- package/dist/stdlib/contracts/token/ERC20.js +117 -0
- package/dist/stdlib/contracts/token/ERC20.js.map +1 -0
- package/dist/stdlib/contracts/token/ERC721.d.ts +80 -0
- package/dist/stdlib/contracts/token/ERC721.d.ts.map +1 -0
- package/dist/stdlib/contracts/token/ERC721.js +166 -0
- package/dist/stdlib/contracts/token/ERC721.js.map +1 -0
- package/dist/stdlib/resolver.d.ts +26 -0
- package/dist/stdlib/resolver.d.ts.map +1 -0
- package/dist/stdlib/resolver.js +103 -0
- package/dist/stdlib/resolver.js.map +1 -0
- package/dist/testing.d.ts +93 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +143 -0
- package/dist/testing.js.map +1 -0
- package/dist/types/artifacts.d.ts +25 -0
- package/dist/types/artifacts.d.ts.map +1 -0
- package/dist/types/artifacts.js +2 -0
- package/dist/types/artifacts.js.map +1 -0
- package/dist/types/config.d.ts +25 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +4 -306
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -23
- package/dist/types/index.js.map +1 -1
- package/dist/types/ir.d.ts +294 -0
- package/dist/types/ir.d.ts.map +1 -0
- package/dist/types/ir.js +21 -0
- package/dist/types/ir.js.map +1 -0
- package/dist/types/primitives.d.ts +6 -0
- package/dist/types/primitives.d.ts.map +1 -0
- package/dist/types/primitives.js +6 -0
- package/dist/types/primitives.js.map +1 -0
- package/dist/utils/regex.d.ts +5 -0
- package/dist/utils/regex.d.ts.map +1 -0
- package/dist/utils/regex.js +7 -0
- package/dist/utils/regex.js.map +1 -0
- package/package.json +18 -6
- package/stdlib/contracts/access/AccessControl.ts +103 -0
- package/stdlib/contracts/access/Ownable.ts +68 -0
- package/stdlib/contracts/constants.ts +3 -0
- package/stdlib/contracts/index.ts +33 -0
- package/stdlib/contracts/security/Pausable.ts +48 -0
- package/stdlib/contracts/security/ReentrancyGuard.ts +33 -0
- package/stdlib/contracts/token/ERC20.ts +196 -0
- package/stdlib/contracts/token/ERC20Permit.ts +81 -0
- package/stdlib/contracts/token/ERC20Votes.ts +92 -0
- 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,
|
|
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"}
|
package/dist/commands/clean.js
CHANGED
|
@@ -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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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;
|
|
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":"
|
|
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"}
|
package/dist/commands/compile.js
CHANGED
|
@@ -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
|
-
|
|
8
|
-
|
|
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
|
-
|
|
20
|
-
logError(
|
|
24
|
+
if (result.failedFiles > 0) {
|
|
25
|
+
logError(`${result.failedFiles} file(s) failed to compile`);
|
|
21
26
|
}
|
|
22
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
50
|
-
},
|
|
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,
|
|
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":"
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -55,39 +55,23 @@ export default defineConfig({
|
|
|
55
55
|
},
|
|
56
56
|
});
|
|
57
57
|
`;
|
|
58
|
-
const EXAMPLE_CONTRACT = `import { address, msg
|
|
58
|
+
const EXAMPLE_CONTRACT = `import { address, msg } from "skittles";
|
|
59
|
+
import { ERC20 } from "skittles/contracts";
|
|
59
60
|
|
|
60
|
-
export class Token {
|
|
61
|
-
|
|
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
|
-
|
|
74
|
-
this.
|
|
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
|
|
82
|
-
|
|
83
|
-
|
|
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.
|
|
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("
|
|
127
|
-
const { token,
|
|
128
|
-
|
|
129
|
-
await
|
|
130
|
-
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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"}
|