@clarigen/cli 0.3.4 → 0.3.6
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/clarinet-config.js +16 -2
- package/package.json +5 -3
- package/src/clarinet-config.ts +29 -11
package/dist/clarinet-config.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getClarinetAccounts = exports.getContractsFromClarinet = exports.getClarinetConfig = exports.getClarinetDevConfig = void 0;
|
|
3
|
+
exports.getClarinetAccounts = exports.sortClarinetContracts = exports.getContractsFromClarinet = exports.getClarinetConfig = exports.getClarinetDevConfig = void 0;
|
|
4
4
|
const j_toml_1 = require("@ltd/j-toml");
|
|
5
5
|
const path_1 = require("path");
|
|
6
6
|
const promises_1 = require("fs/promises");
|
|
7
7
|
const wallet_sdk_1 = require("@stacks/wallet-sdk");
|
|
8
|
+
const toposort_1 = require("toposort");
|
|
8
9
|
async function getClarinetDevConfig(folder) {
|
|
9
10
|
const baseConfigPath = path_1.resolve(folder, 'settings', 'Devnet.toml');
|
|
10
11
|
const configContents = await promises_1.readFile(baseConfigPath, { encoding: 'utf-8' });
|
|
@@ -24,7 +25,9 @@ exports.getClarinetConfig = getClarinetConfig;
|
|
|
24
25
|
async function getContractsFromClarinet(folder, accounts) {
|
|
25
26
|
const clarinetConfig = await getClarinetConfig(folder);
|
|
26
27
|
const deployerAddress = accounts.deployer.address;
|
|
27
|
-
const
|
|
28
|
+
const sortedContracts = sortClarinetContracts(clarinetConfig.contracts);
|
|
29
|
+
const contracts = sortedContracts.map(contractName => {
|
|
30
|
+
const info = clarinetConfig.contracts[contractName];
|
|
28
31
|
const file = info.path.replace(/^contracts\//, '');
|
|
29
32
|
return {
|
|
30
33
|
file,
|
|
@@ -34,6 +37,17 @@ async function getContractsFromClarinet(folder, accounts) {
|
|
|
34
37
|
return contracts;
|
|
35
38
|
}
|
|
36
39
|
exports.getContractsFromClarinet = getContractsFromClarinet;
|
|
40
|
+
function sortClarinetContracts(contractsConfig) {
|
|
41
|
+
const edges = [];
|
|
42
|
+
const nodes = [];
|
|
43
|
+
Object.entries(contractsConfig).forEach(([contractName, info]) => {
|
|
44
|
+
nodes.push(contractName);
|
|
45
|
+
info.depends_on.forEach((dependency) => edges.push([contractName, dependency]));
|
|
46
|
+
});
|
|
47
|
+
const sorted = toposort_1.array(nodes, edges).reverse();
|
|
48
|
+
return sorted;
|
|
49
|
+
}
|
|
50
|
+
exports.sortClarinetContracts = sortClarinetContracts;
|
|
37
51
|
async function getClarinetAccounts(folder) {
|
|
38
52
|
const devConfig = await getClarinetDevConfig(folder);
|
|
39
53
|
const accountEntries = await Promise.all(Object.entries(devConfig.accounts).map(async ([key, info]) => {
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@clarigen/cli",
|
|
3
3
|
"description": "A CLI for generating a Typescript interface for a Clarity contract.",
|
|
4
4
|
"author": "Hank Stoever",
|
|
5
|
-
"version": "0.3.
|
|
5
|
+
"version": "0.3.6",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"files": [
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@oclif/dev-cli": "^1.26.0",
|
|
42
42
|
"@oclif/errors": "^1.3.4",
|
|
43
|
+
"@types/toposort": "2.0.3",
|
|
43
44
|
"@vercel/ncc": "0.27.0",
|
|
44
45
|
"oclif": "^1.16.1",
|
|
45
46
|
"ts-node": "^9.1.1"
|
|
@@ -54,10 +55,11 @@
|
|
|
54
55
|
"@stacks/wallet-sdk": "1.0.0-wallet-sdk.4",
|
|
55
56
|
"chalk": "4.1.0",
|
|
56
57
|
"chokidar": "3.5.1",
|
|
57
|
-
"ora": "5.4.0"
|
|
58
|
+
"ora": "5.4.0",
|
|
59
|
+
"toposort": "2.0.2"
|
|
58
60
|
},
|
|
59
61
|
"publishConfig": {
|
|
60
62
|
"access": "public"
|
|
61
63
|
},
|
|
62
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "b438736c231e6d6adf20a8e384f03bf522be6a64"
|
|
63
65
|
}
|
package/src/clarinet-config.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { resolve } from 'path';
|
|
|
3
3
|
import { readFile } from 'fs/promises';
|
|
4
4
|
import { ConfigContract } from './config';
|
|
5
5
|
import { generateWallet, getStxAddress } from '@stacks/wallet-sdk';
|
|
6
|
+
import { array as toposort } from 'toposort';
|
|
6
7
|
|
|
7
8
|
interface ClarinetConfigAccount {
|
|
8
9
|
mnemonic: string;
|
|
@@ -30,13 +31,17 @@ export async function getClarinetDevConfig(
|
|
|
30
31
|
return config;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
|
-
interface
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
export interface ClarinetContract {
|
|
35
|
+
path: string;
|
|
36
|
+
depends_on: string[];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface ClarinetContracts {
|
|
40
|
+
[name: string]: ClarinetContract;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface ClarinetConfig {
|
|
44
|
+
contracts: ClarinetContracts;
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
export async function getClarinetConfig(folder: string) {
|
|
@@ -57,18 +62,31 @@ export async function getContractsFromClarinet(
|
|
|
57
62
|
): Promise<ConfigContract[]> {
|
|
58
63
|
const clarinetConfig = await getClarinetConfig(folder);
|
|
59
64
|
const deployerAddress = accounts.deployer.address;
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
const sortedContracts = sortClarinetContracts(clarinetConfig.contracts);
|
|
66
|
+
const contracts: ConfigContract[] = sortedContracts.map(contractName => {
|
|
67
|
+
const info = clarinetConfig.contracts[contractName];
|
|
63
68
|
const file = info.path.replace(/^contracts\//, '');
|
|
64
69
|
return {
|
|
65
70
|
file,
|
|
66
71
|
address: deployerAddress,
|
|
67
72
|
};
|
|
68
|
-
})
|
|
73
|
+
})
|
|
69
74
|
return contracts;
|
|
70
75
|
}
|
|
71
76
|
|
|
77
|
+
export function sortClarinetContracts(contractsConfig: ClarinetContracts) {
|
|
78
|
+
const edges: [string, string][] = [];
|
|
79
|
+
const nodes: string[] = [];
|
|
80
|
+
Object.entries(contractsConfig).forEach(([contractName, info]) => {
|
|
81
|
+
nodes.push(contractName);
|
|
82
|
+
info.depends_on.forEach((dependency) =>
|
|
83
|
+
edges.push([contractName, dependency])
|
|
84
|
+
);
|
|
85
|
+
});
|
|
86
|
+
const sorted = toposort(nodes, edges).reverse();
|
|
87
|
+
return sorted;
|
|
88
|
+
}
|
|
89
|
+
|
|
72
90
|
export interface ClarinetAccount extends ClarinetConfigAccount {
|
|
73
91
|
address: string;
|
|
74
92
|
}
|