ic-mops 1.12.0 → 2.0.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/.DS_Store +0 -0
- package/.eslintrc.json +7 -7
- package/CHANGELOG.md +6 -0
- package/api/actors.ts +41 -37
- package/api/downloadPackageFiles.ts +75 -61
- package/api/getHighestVersion.ts +5 -5
- package/api/index.ts +4 -4
- package/api/network.ts +19 -21
- package/api/resolveVersion.ts +14 -11
- package/bin/mops.js +1 -1
- package/bundle/bench/bench-canister.mo +109 -101
- package/bundle/bench/user-bench.mo +6 -6
- package/bundle/bin/mops.js +1 -1
- package/bundle/cli.js +797 -792
- package/bundle/cli.tgz +0 -0
- package/bundle/package.json +6 -5
- package/bundle/templates/mops-publish.yml +3 -3
- package/bundle/templates/mops-test.yml +3 -3
- package/bundle/templates/src/lib.mo +13 -13
- package/bundle/templates/test/lib.test.mo +2 -2
- package/bundle-package-json.ts +8 -8
- package/cache.ts +80 -65
- package/check-requirements.ts +49 -45
- package/cli.ts +577 -376
- package/commands/add.ts +142 -129
- package/commands/available-updates.ts +55 -41
- package/commands/bench/bench-canister.mo +114 -108
- package/commands/bench/user-bench.mo +6 -6
- package/commands/bench-replica.ts +146 -118
- package/commands/bench.ts +563 -497
- package/commands/build.ts +177 -0
- package/commands/bump.ts +68 -57
- package/commands/check-candid.ts +24 -0
- package/commands/docs-coverage.ts +124 -102
- package/commands/docs.ts +118 -108
- package/commands/format.ts +171 -155
- package/commands/init.ts +301 -275
- package/commands/install/install-all.ts +75 -62
- package/commands/install/install-dep.ts +43 -28
- package/commands/install/install-deps.ts +23 -15
- package/commands/install/install-local-dep.ts +42 -34
- package/commands/install/install-mops-dep.ts +154 -123
- package/commands/install/sync-local-cache.ts +39 -35
- package/commands/maintainer.ts +109 -99
- package/commands/outdated.ts +30 -24
- package/commands/owner.ts +107 -99
- package/commands/publish.ts +534 -443
- package/commands/remove.ts +119 -89
- package/commands/replica.ts +391 -316
- package/commands/search.ts +42 -36
- package/commands/self.ts +63 -56
- package/commands/sources.ts +66 -49
- package/commands/sync.ts +92 -75
- package/commands/template.ts +145 -102
- package/commands/test/mmf1.ts +146 -119
- package/commands/test/reporters/compact-reporter.ts +87 -84
- package/commands/test/reporters/files-reporter.ts +56 -51
- package/commands/test/reporters/reporter.ts +12 -6
- package/commands/test/reporters/silent-reporter.ts +58 -59
- package/commands/test/reporters/verbose-reporter.ts +66 -54
- package/commands/test/test.ts +498 -401
- package/commands/test/utils.ts +72 -67
- package/commands/toolchain/index.ts +363 -322
- package/commands/toolchain/moc.ts +78 -50
- package/commands/toolchain/pocket-ic.ts +41 -34
- package/commands/toolchain/toolchain-utils.ts +92 -72
- package/commands/toolchain/wasmtime.ts +37 -34
- package/commands/update.ts +82 -64
- package/commands/user.ts +90 -81
- package/commands/watch/deployer.ts +188 -152
- package/commands/watch/error-checker.ts +90 -80
- package/commands/watch/formatter.ts +72 -60
- package/commands/watch/generator.ts +116 -96
- package/commands/watch/globMoFiles.ts +13 -13
- package/commands/watch/parseDfxJson.ts +63 -57
- package/commands/watch/tester.ts +83 -65
- package/commands/watch/warning-checker.ts +149 -136
- package/commands/watch/watch.ts +123 -95
- package/dist/api/actors.d.ts +4 -4
- package/dist/api/actors.js +8 -8
- package/dist/api/downloadPackageFiles.d.ts +2 -2
- package/dist/api/downloadPackageFiles.js +10 -10
- package/dist/api/getHighestVersion.js +1 -1
- package/dist/api/index.d.ts +4 -4
- package/dist/api/index.js +4 -4
- package/dist/api/network.js +9 -9
- package/dist/api/resolveVersion.js +3 -3
- package/dist/bin/mops.js +1 -1
- package/dist/bundle-package-json.js +8 -8
- package/dist/cache.js +22 -17
- package/dist/check-requirements.js +11 -11
- package/dist/cli.js +283 -186
- package/dist/commands/add.d.ts +1 -1
- package/dist/commands/add.js +40 -37
- package/dist/commands/available-updates.d.ts +1 -1
- package/dist/commands/available-updates.js +18 -12
- package/dist/commands/bench/bench-canister.mo +114 -108
- package/dist/commands/bench/user-bench.mo +6 -6
- package/dist/commands/bench-replica.d.ts +4 -4
- package/dist/commands/bench-replica.js +45 -34
- package/dist/commands/bench.d.ts +5 -5
- package/dist/commands/bench.js +134 -118
- package/dist/commands/build.d.ts +7 -0
- package/dist/commands/build.js +121 -0
- package/dist/commands/bump.js +27 -18
- package/dist/commands/check-candid.d.ts +4 -0
- package/dist/commands/check-candid.js +15 -0
- package/dist/commands/docs-coverage.d.ts +1 -1
- package/dist/commands/docs-coverage.js +45 -31
- package/dist/commands/docs.d.ts +1 -1
- package/dist/commands/docs.js +39 -38
- package/dist/commands/format.js +31 -27
- package/dist/commands/init.js +102 -92
- package/dist/commands/install/install-all.d.ts +2 -2
- package/dist/commands/install/install-all.js +23 -21
- package/dist/commands/install/install-dep.d.ts +1 -1
- package/dist/commands/install/install-dep.js +21 -8
- package/dist/commands/install/install-deps.d.ts +1 -1
- package/dist/commands/install/install-deps.js +1 -1
- package/dist/commands/install/install-local-dep.js +11 -9
- package/dist/commands/install/install-mops-dep.d.ts +1 -1
- package/dist/commands/install/install-mops-dep.js +32 -27
- package/dist/commands/install/sync-local-cache.js +10 -10
- package/dist/commands/maintainer.js +21 -21
- package/dist/commands/outdated.js +12 -8
- package/dist/commands/owner.js +21 -21
- package/dist/commands/publish.js +148 -128
- package/dist/commands/remove.d.ts +1 -1
- package/dist/commands/remove.js +42 -30
- package/dist/commands/replica.d.ts +7 -7
- package/dist/commands/replica.js +85 -57
- package/dist/commands/search.js +15 -13
- package/dist/commands/self.js +31 -28
- package/dist/commands/sources.d.ts +5 -1
- package/dist/commands/sources.js +23 -17
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.js +38 -25
- package/dist/commands/template.js +66 -56
- package/dist/commands/test/mmf1.d.ts +3 -3
- package/dist/commands/test/mmf1.js +33 -31
- package/dist/commands/test/reporters/compact-reporter.d.ts +3 -3
- package/dist/commands/test/reporters/compact-reporter.js +19 -15
- package/dist/commands/test/reporters/files-reporter.d.ts +3 -3
- package/dist/commands/test/reporters/files-reporter.js +18 -14
- package/dist/commands/test/reporters/reporter.d.ts +2 -2
- package/dist/commands/test/reporters/silent-reporter.d.ts +3 -3
- package/dist/commands/test/reporters/silent-reporter.js +4 -4
- package/dist/commands/test/reporters/verbose-reporter.d.ts +3 -3
- package/dist/commands/test/reporters/verbose-reporter.js +17 -13
- package/dist/commands/test/test.d.ts +4 -4
- package/dist/commands/test/test.js +134 -112
- package/dist/commands/test/utils.d.ts +3 -3
- package/dist/commands/test/utils.js +17 -17
- package/dist/commands/toolchain/index.d.ts +1 -1
- package/dist/commands/toolchain/index.js +81 -69
- package/dist/commands/toolchain/moc.d.ts +1 -1
- package/dist/commands/toolchain/moc.js +48 -24
- package/dist/commands/toolchain/pocket-ic.js +12 -12
- package/dist/commands/toolchain/toolchain-utils.d.ts +2 -0
- package/dist/commands/toolchain/toolchain-utils.js +32 -23
- package/dist/commands/toolchain/wasmtime.js +11 -11
- package/dist/commands/update.d.ts +1 -1
- package/dist/commands/update.js +18 -14
- package/dist/commands/user.js +31 -28
- package/dist/commands/watch/deployer.d.ts +4 -4
- package/dist/commands/watch/deployer.js +45 -36
- package/dist/commands/watch/error-checker.d.ts +2 -2
- package/dist/commands/watch/error-checker.js +27 -27
- package/dist/commands/watch/formatter.d.ts +4 -4
- package/dist/commands/watch/formatter.js +17 -17
- package/dist/commands/watch/generator.d.ts +3 -3
- package/dist/commands/watch/generator.js +28 -23
- package/dist/commands/watch/globMoFiles.js +8 -8
- package/dist/commands/watch/parseDfxJson.d.ts +2 -2
- package/dist/commands/watch/parseDfxJson.js +9 -9
- package/dist/commands/watch/tester.d.ts +4 -4
- package/dist/commands/watch/tester.js +23 -21
- package/dist/commands/watch/warning-checker.d.ts +3 -3
- package/dist/commands/watch/warning-checker.js +36 -36
- package/dist/commands/watch/watch.js +45 -32
- package/dist/environments/nodejs/cli.d.ts +1 -0
- package/dist/environments/nodejs/cli.js +4 -0
- package/dist/environments/web/cli.d.ts +1 -0
- package/dist/environments/web/cli.js +4 -0
- package/dist/error.d.ts +1 -0
- package/dist/error.js +5 -0
- package/dist/fix-dist.js +5 -5
- package/dist/helpers/find-changelog-entry.js +8 -5
- package/dist/helpers/get-dep-name.js +2 -2
- package/dist/helpers/get-dfx-version.js +4 -4
- package/dist/helpers/get-moc-path.js +8 -7
- package/dist/helpers/get-moc-version.js +10 -7
- package/dist/helpers/get-package-id.js +2 -2
- package/dist/helpers/is-candid-compatible.d.ts +1 -0
- package/dist/helpers/is-candid-compatible.js +20 -0
- package/dist/integrity.d.ts +1 -1
- package/dist/integrity.js +47 -38
- package/dist/jest.config.d.ts +11 -0
- package/dist/jest.config.js +14 -0
- package/dist/mops.d.ts +6 -6
- package/dist/mops.js +87 -80
- package/dist/notify-installs.js +4 -4
- package/dist/package.json +9 -5
- package/dist/pem.d.ts +3 -3
- package/dist/pem.js +20 -12
- package/dist/release-cli.js +20 -20
- package/dist/resolve-packages.d.ts +1 -1
- package/dist/resolve-packages.js +52 -36
- package/dist/templates/mops-publish.yml +3 -3
- package/dist/templates/mops-test.yml +3 -3
- package/dist/templates/src/lib.mo +13 -13
- package/dist/templates/test/lib.test.mo +2 -2
- package/dist/templates.js +1 -1
- package/dist/tests/cli.test.d.ts +1 -0
- package/dist/tests/cli.test.js +63 -0
- package/dist/types.d.ts +14 -4
- package/dist/vessel.d.ts +2 -2
- package/dist/vessel.js +41 -34
- package/dist/wasm/pkg/bundler/package.json +20 -0
- package/dist/wasm/pkg/bundler/wasm.d.ts +3 -0
- package/dist/wasm/pkg/bundler/wasm.js +5 -0
- package/dist/wasm/pkg/bundler/wasm_bg.js +93 -0
- package/dist/wasm/pkg/bundler/wasm_bg.wasm +0 -0
- package/dist/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
- package/dist/wasm/pkg/nodejs/package.json +14 -0
- package/dist/wasm/pkg/nodejs/wasm.d.ts +3 -0
- package/dist/wasm/pkg/nodejs/wasm.js +98 -0
- package/dist/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
- package/dist/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
- package/dist/wasm/pkg/web/package.json +18 -0
- package/dist/wasm/pkg/web/wasm.d.ts +35 -0
- package/dist/wasm/pkg/web/wasm.js +191 -0
- package/dist/wasm/pkg/web/wasm_bg.wasm +0 -0
- package/dist/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
- package/dist/wasm.d.ts +5 -0
- package/dist/wasm.js +10 -0
- package/environments/nodejs/cli.ts +6 -0
- package/environments/web/cli.ts +6 -0
- package/error.ts +6 -0
- package/fix-dist.ts +5 -5
- package/global.d.ts +3 -3
- package/helpers/find-changelog-entry.ts +26 -23
- package/helpers/get-dep-name.ts +5 -5
- package/helpers/get-dfx-version.ts +8 -9
- package/helpers/get-moc-path.ts +25 -26
- package/helpers/get-moc-version.ts +21 -19
- package/helpers/get-package-id.ts +4 -4
- package/helpers/is-candid-compatible.ts +22 -0
- package/integrity.ts +270 -236
- package/jest.config.js +14 -0
- package/mops.ts +238 -215
- package/notify-installs.ts +16 -17
- package/package.json +19 -10
- package/parallel.ts +28 -24
- package/pem.ts +55 -47
- package/release-cli.ts +73 -39
- package/resolve-packages.ts +231 -189
- package/templates/mops-publish.yml +3 -3
- package/templates/mops-test.yml +3 -3
- package/templates/src/lib.mo +13 -13
- package/templates/test/lib.test.mo +2 -2
- package/templates.ts +4 -4
- package/tests/__snapshots__/cli.test.ts.snap +202 -0
- package/tests/build/error/candid/bar.did +3 -0
- package/tests/build/error/dfx.json +12 -0
- package/tests/build/error/mops.toml +9 -0
- package/tests/build/error/src/Bar.mo +5 -0
- package/tests/build/error/src/Foo.mo +5 -0
- package/tests/build/success/.dfx/local/canister_ids.json +17 -0
- package/tests/build/success/.dfx/local/canisters/bar/bar.did +3 -0
- package/tests/build/success/.dfx/local/canisters/bar/bar.most +4 -0
- package/tests/build/success/.dfx/local/canisters/bar/bar.wasm +0 -0
- package/tests/build/success/.dfx/local/canisters/bar/constructor.did +3 -0
- package/tests/build/success/.dfx/local/canisters/bar/index.js +42 -0
- package/tests/build/success/.dfx/local/canisters/bar/init_args.txt +1 -0
- package/tests/build/success/.dfx/local/canisters/bar/service.did +3 -0
- package/tests/build/success/.dfx/local/canisters/bar/service.did.d.ts +7 -0
- package/tests/build/success/.dfx/local/canisters/bar/service.did.js +4 -0
- package/tests/build/success/.dfx/local/canisters/foo/constructor.did +3 -0
- package/tests/build/success/.dfx/local/canisters/foo/foo.did +3 -0
- package/tests/build/success/.dfx/local/canisters/foo/foo.most +4 -0
- package/tests/build/success/.dfx/local/canisters/foo/foo.wasm +0 -0
- package/tests/build/success/.dfx/local/canisters/foo/index.js +42 -0
- package/tests/build/success/.dfx/local/canisters/foo/init_args.txt +1 -0
- package/tests/build/success/.dfx/local/canisters/foo/service.did +3 -0
- package/tests/build/success/.dfx/local/canisters/foo/service.did.d.ts +7 -0
- package/tests/build/success/.dfx/local/canisters/foo/service.did.js +4 -0
- package/tests/build/success/.dfx/local/lsp/ucwa4-rx777-77774-qaada-cai.did +3 -0
- package/tests/build/success/.dfx/local/lsp/ulvla-h7777-77774-qaacq-cai.did +3 -0
- package/tests/build/success/.dfx/local/network-id +4 -0
- package/tests/build/success/candid/bar.did +3 -0
- package/tests/build/success/dfx.json +12 -0
- package/tests/build/success/mops.toml +9 -0
- package/tests/build/success/src/Bar.mo +5 -0
- package/tests/build/success/src/Foo.mo +5 -0
- package/tests/check-candid/a.did +3 -0
- package/tests/check-candid/b.did +5 -0
- package/tests/check-candid/c.did +3 -0
- package/tests/cli.test.ts +82 -0
- package/tsconfig.json +26 -19
- package/types.ts +41 -31
- package/vessel.ts +219 -187
- package/wasm/Cargo.lock +1475 -0
- package/wasm/Cargo.toml +28 -0
- package/wasm/pkg/bundler/package.json +20 -0
- package/wasm/pkg/bundler/wasm.d.ts +3 -0
- package/wasm/pkg/bundler/wasm.js +5 -0
- package/wasm/pkg/bundler/wasm_bg.js +93 -0
- package/wasm/pkg/bundler/wasm_bg.wasm +0 -0
- package/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
- package/wasm/pkg/nodejs/package.json +14 -0
- package/wasm/pkg/nodejs/wasm.d.ts +3 -0
- package/wasm/pkg/nodejs/wasm.js +98 -0
- package/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
- package/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
- package/wasm/pkg/web/package.json +18 -0
- package/wasm/pkg/web/wasm.d.ts +35 -0
- package/wasm/pkg/web/wasm.js +191 -0
- package/wasm/pkg/web/wasm_bg.wasm +0 -0
- package/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
- package/wasm/src/lib.rs +17 -0
- package/wasm.ts +16 -0
|
@@ -1,348 +1,389 @@
|
|
|
1
|
-
import process from
|
|
2
|
-
import path from
|
|
3
|
-
import fs from
|
|
4
|
-
import os from
|
|
5
|
-
import {execSync} from
|
|
6
|
-
import chalk from
|
|
7
|
-
import prompts from
|
|
8
|
-
import {createLogUpdate} from
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import { execSync } from "node:child_process";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import prompts from "prompts";
|
|
8
|
+
import { createLogUpdate } from "log-update";
|
|
9
|
+
import {
|
|
10
|
+
checkConfigFile,
|
|
11
|
+
getClosestConfigFile,
|
|
12
|
+
getRootDir,
|
|
13
|
+
globalCacheDir,
|
|
14
|
+
readConfig,
|
|
15
|
+
writeConfig,
|
|
16
|
+
} from "../../mops.js";
|
|
17
|
+
import { Tool } from "../../types.js";
|
|
18
|
+
import { checkRequirements } from "../../check-requirements.js";
|
|
19
|
+
import * as moc from "./moc.js";
|
|
20
|
+
import * as pocketIc from "./pocket-ic.js";
|
|
21
|
+
import * as wasmtime from "./wasmtime.js";
|
|
22
|
+
|
|
23
|
+
function getToolUtils(tool: Tool) {
|
|
24
|
+
if (tool === "moc") {
|
|
25
|
+
return moc;
|
|
26
|
+
} else if (tool === "pocket-ic") {
|
|
27
|
+
return pocketIc;
|
|
28
|
+
} else if (tool === "wasmtime") {
|
|
29
|
+
return wasmtime;
|
|
30
|
+
} else {
|
|
31
|
+
console.error(`Unknown tool '${tool}'`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
30
34
|
}
|
|
31
35
|
|
|
32
|
-
async function ensureToolchainInited({strict = true} = {}) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
36
|
+
async function ensureToolchainInited({ strict = true } = {}) {
|
|
37
|
+
// auto init in CI
|
|
38
|
+
if (process.env.CI) {
|
|
39
|
+
await init({ silent: true });
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// for non-stict perform check only if dfx.json exists and moc is listed in [toolchain] section
|
|
44
|
+
let rootDir = getRootDir();
|
|
45
|
+
let config = readConfig();
|
|
46
|
+
if (
|
|
47
|
+
!strict &&
|
|
48
|
+
(!config.toolchain?.moc ||
|
|
49
|
+
(rootDir && !fs.existsSync(path.join(rootDir, "dfx.json"))))
|
|
50
|
+
) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
let res = execSync("which moc-wrapper").toString().trim();
|
|
56
|
+
if (res && process.env.DFX_MOC_PATH === "moc-wrapper") {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
} catch {}
|
|
60
|
+
console.error(
|
|
61
|
+
'Toolchain management is not initialized. Run "mops toolchain init"',
|
|
62
|
+
);
|
|
63
|
+
process.exit(1);
|
|
55
64
|
}
|
|
56
65
|
|
|
57
66
|
// update shell config files to set DFX_MOC_PATH to moc-wrapper
|
|
58
|
-
async function init({reset = false, silent = false} = {}) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
67
|
+
async function init({ reset = false, silent = false } = {}) {
|
|
68
|
+
if (process.platform == "win32") {
|
|
69
|
+
console.error("Windows is not supported. Please use WSL");
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
let res = execSync("which mocv").toString().trim();
|
|
75
|
+
if (res) {
|
|
76
|
+
console.error(
|
|
77
|
+
"Mops is not compatible with mocv. Please uninstall mocv and try again.",
|
|
78
|
+
);
|
|
79
|
+
console.log("Steps to uninstall mocv:");
|
|
80
|
+
console.log('1. Run "mocv reset"');
|
|
81
|
+
console.log('2. Run "npm uninstall -g mocv"');
|
|
82
|
+
console.log(
|
|
83
|
+
'TIP: Alternative to "mocv use <version>" is "mops toolchain use moc <version>" (installs moc only for current project)',
|
|
84
|
+
);
|
|
85
|
+
console.log("TIP: More details at https://docs.mops.one/cli/toolchain");
|
|
86
|
+
if (!process.env.CI || !silent) {
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
} catch {}
|
|
91
|
+
|
|
92
|
+
let zshrc = path.join(os.homedir(), ".zshrc");
|
|
93
|
+
let bashrc = path.join(os.homedir(), ".bashrc");
|
|
94
|
+
let bashProfile = path.join(os.homedir(), ".bash_profile");
|
|
95
|
+
let zprofile = path.join(os.homedir(), ".zprofile");
|
|
96
|
+
|
|
97
|
+
let shellConfigFiles = [
|
|
98
|
+
bashrc,
|
|
99
|
+
zshrc,
|
|
100
|
+
bashProfile,
|
|
101
|
+
zprofile,
|
|
102
|
+
process.env.GITHUB_ENV || "",
|
|
103
|
+
]
|
|
104
|
+
.map((x) => x)
|
|
105
|
+
.filter((file) => {
|
|
106
|
+
return fs.existsSync(file);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
if (shellConfigFiles.length === 0) {
|
|
110
|
+
console.error(
|
|
111
|
+
"Shell config files not found: .bashrc, .zshrc, .bash_profile, .zprofile",
|
|
112
|
+
);
|
|
113
|
+
console.log(
|
|
114
|
+
'TIP: You can add "export DFX_MOC_PATH=moc-wrapper" to your shell config file manually to initialize Mops toolchain',
|
|
115
|
+
);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// update all existing shell config files
|
|
120
|
+
for (let shellConfigFile of shellConfigFiles) {
|
|
121
|
+
let text = fs.readFileSync(shellConfigFile).toString();
|
|
122
|
+
let setDfxMocPathLine = "\nexport DFX_MOC_PATH=moc-wrapper";
|
|
123
|
+
|
|
124
|
+
let newLines = [setDfxMocPathLine];
|
|
125
|
+
|
|
126
|
+
let oldLines = [
|
|
127
|
+
// legacy mocv lines
|
|
128
|
+
`\nexport DFX_MOC_PATH=${path.join(path.join(os.homedir(), ".cache/mocv"), "versions/current")}/moc`,
|
|
129
|
+
'\nexport DFX_MOC_PATH="$HOME/.cache/mocv/versions/current/moc"',
|
|
130
|
+
// new
|
|
131
|
+
setDfxMocPathLine,
|
|
132
|
+
];
|
|
133
|
+
|
|
134
|
+
// remove old lines
|
|
135
|
+
for (let oldLine of oldLines) {
|
|
136
|
+
text = text.replace(oldLine, "");
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (text.endsWith("\n\n")) {
|
|
140
|
+
text = text.trimEnd() + "\n";
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// insert new lines
|
|
144
|
+
if (!reset) {
|
|
145
|
+
if (!text.endsWith("\n")) {
|
|
146
|
+
text += "\n";
|
|
147
|
+
}
|
|
148
|
+
for (let newLine of newLines) {
|
|
149
|
+
if (shellConfigFile === process.env.GITHUB_ENV) {
|
|
150
|
+
newLine = newLine.replace("export ", "");
|
|
151
|
+
}
|
|
152
|
+
text += newLine;
|
|
153
|
+
}
|
|
154
|
+
text += "\n";
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
fs.writeFileSync(shellConfigFile, text);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (!silent) {
|
|
161
|
+
console.log(chalk.green("Success!"));
|
|
162
|
+
console.log("Restart terminal to apply changes");
|
|
163
|
+
}
|
|
142
164
|
}
|
|
143
165
|
|
|
144
|
-
async function download(
|
|
145
|
-
|
|
146
|
-
|
|
166
|
+
async function download(
|
|
167
|
+
tool: Tool,
|
|
168
|
+
version: string,
|
|
169
|
+
{ silent = false, verbose = false } = {},
|
|
170
|
+
) {
|
|
171
|
+
let toolUtils = getToolUtils(tool);
|
|
172
|
+
let logUpdate = createLogUpdate(process.stdout, { showCursor: true });
|
|
147
173
|
|
|
148
|
-
|
|
174
|
+
silent || logUpdate("Installing", tool, version);
|
|
149
175
|
|
|
150
|
-
|
|
176
|
+
await toolUtils.download(version, { silent, verbose });
|
|
151
177
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
178
|
+
if (verbose) {
|
|
179
|
+
logUpdate.done();
|
|
180
|
+
} else if (!silent) {
|
|
181
|
+
logUpdate.clear();
|
|
182
|
+
}
|
|
158
183
|
}
|
|
159
184
|
|
|
160
|
-
async function installAll({silent = false, verbose = false} = {}) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
185
|
+
async function installAll({ silent = false, verbose = false } = {}) {
|
|
186
|
+
let config = readConfig();
|
|
187
|
+
|
|
188
|
+
if (!config.toolchain) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
let logUpdate = createLogUpdate(process.stdout, { showCursor: true });
|
|
193
|
+
|
|
194
|
+
let log = (...args: string[]) => {
|
|
195
|
+
if (silent) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (verbose) {
|
|
199
|
+
console.log(...args);
|
|
200
|
+
} else {
|
|
201
|
+
logUpdate(...args);
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
log("Installing toolchain...");
|
|
206
|
+
|
|
207
|
+
if (config.toolchain?.moc) {
|
|
208
|
+
await download("moc", config.toolchain.moc, { silent, verbose });
|
|
209
|
+
}
|
|
210
|
+
if (config.toolchain?.wasmtime) {
|
|
211
|
+
await download("wasmtime", config.toolchain.wasmtime, { silent, verbose });
|
|
212
|
+
}
|
|
213
|
+
if (config.toolchain?.["pocket-ic"]) {
|
|
214
|
+
await download("pocket-ic", config.toolchain["pocket-ic"], {
|
|
215
|
+
silent,
|
|
216
|
+
verbose,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (!silent) {
|
|
221
|
+
logUpdate.clear();
|
|
222
|
+
console.log(chalk.green("Toolchain installed"));
|
|
223
|
+
}
|
|
197
224
|
}
|
|
198
225
|
|
|
199
|
-
async function promptVersion(tool
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
226
|
+
async function promptVersion(tool: Tool): Promise<string> {
|
|
227
|
+
let config = readConfig();
|
|
228
|
+
config.toolchain = config.toolchain || {};
|
|
229
|
+
let current = config.toolchain[tool];
|
|
230
|
+
|
|
231
|
+
let toolUtils = getToolUtils(tool);
|
|
232
|
+
let releases = await toolUtils.getReleases();
|
|
233
|
+
let versions = releases.map((item: { tag_name: any }) => item.tag_name);
|
|
234
|
+
let currentIndex = versions.indexOf(current);
|
|
235
|
+
|
|
236
|
+
let res = await prompts({
|
|
237
|
+
type: "select",
|
|
238
|
+
name: "version",
|
|
239
|
+
message: `Select ${tool} version`,
|
|
240
|
+
choices: releases.map(
|
|
241
|
+
(
|
|
242
|
+
release: { published_at: string | number | Date; tag_name: string },
|
|
243
|
+
i: any,
|
|
244
|
+
) => {
|
|
245
|
+
let date = new Date(release.published_at).toLocaleDateString(
|
|
246
|
+
undefined,
|
|
247
|
+
{ year: "numeric", month: "short", day: "numeric" },
|
|
248
|
+
);
|
|
249
|
+
return {
|
|
250
|
+
title:
|
|
251
|
+
release.tag_name +
|
|
252
|
+
chalk.gray(
|
|
253
|
+
` ${date}${currentIndex === i ? chalk.italic(" (current)") : ""}`,
|
|
254
|
+
),
|
|
255
|
+
value: release.tag_name,
|
|
256
|
+
};
|
|
257
|
+
},
|
|
258
|
+
),
|
|
259
|
+
initial: currentIndex == -1 ? 0 : currentIndex,
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
return res.version;
|
|
224
263
|
}
|
|
225
264
|
|
|
226
265
|
// download binary and set version in mops.toml
|
|
227
|
-
async function use(tool
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
}
|
|
266
|
+
async function use(tool: Tool, version?: string) {
|
|
267
|
+
if (tool === "moc") {
|
|
268
|
+
await ensureToolchainInited();
|
|
269
|
+
}
|
|
270
|
+
if (!version) {
|
|
271
|
+
version = await promptVersion(tool);
|
|
272
|
+
}
|
|
273
|
+
if (!version) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (version === "latest") {
|
|
277
|
+
version = await getToolUtils(tool).getLatestReleaseTag();
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
await download(tool, version);
|
|
281
|
+
|
|
282
|
+
let config = readConfig();
|
|
283
|
+
config.toolchain = config.toolchain || {};
|
|
284
|
+
|
|
285
|
+
let oldVersion = config.toolchain[tool];
|
|
286
|
+
|
|
287
|
+
config.toolchain[tool] = version;
|
|
288
|
+
writeConfig(config);
|
|
289
|
+
|
|
290
|
+
await checkRequirements();
|
|
291
|
+
|
|
292
|
+
if (oldVersion === version) {
|
|
293
|
+
console.log(`${tool} ${version} is already installed`);
|
|
294
|
+
} else {
|
|
295
|
+
console.log(chalk.green(`Installed ${tool} ${version}`));
|
|
296
|
+
}
|
|
259
297
|
}
|
|
260
298
|
|
|
261
299
|
// download latest binary and set version in mops.toml
|
|
262
|
-
async function update(tool
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
300
|
+
async function update(tool?: Tool) {
|
|
301
|
+
if (tool === "moc") {
|
|
302
|
+
await ensureToolchainInited();
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
let config = readConfig();
|
|
306
|
+
config.toolchain = config.toolchain || {};
|
|
307
|
+
|
|
308
|
+
let tools = tool ? [tool] : (Object.keys(config.toolchain) as Tool[]);
|
|
309
|
+
|
|
310
|
+
for (let tool of tools) {
|
|
311
|
+
if (!config.toolchain[tool]) {
|
|
312
|
+
console.error(
|
|
313
|
+
`Tool '${tool}' is not defined in [toolchain] section in mops.toml`,
|
|
314
|
+
);
|
|
315
|
+
process.exit(1);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
let toolUtils = getToolUtils(tool);
|
|
319
|
+
let version = await toolUtils.getLatestReleaseTag();
|
|
320
|
+
|
|
321
|
+
await download(tool, version);
|
|
322
|
+
|
|
323
|
+
let oldVersion = config.toolchain[tool];
|
|
324
|
+
config.toolchain[tool] = version;
|
|
325
|
+
writeConfig(config);
|
|
326
|
+
|
|
327
|
+
if (tool === "moc") {
|
|
328
|
+
await checkRequirements();
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
if (oldVersion === version) {
|
|
332
|
+
console.log(`Latest ${tool} ${version} is already installed`);
|
|
333
|
+
} else {
|
|
334
|
+
console.log(chalk.green(`Installed ${tool} ${version}`));
|
|
335
|
+
}
|
|
336
|
+
}
|
|
298
337
|
}
|
|
299
338
|
|
|
300
339
|
// return current version from mops.toml
|
|
301
|
-
async function bin(tool
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
340
|
+
async function bin(tool: Tool, { fallback = false } = {}): Promise<string> {
|
|
341
|
+
let hasConfig = getClosestConfigFile();
|
|
342
|
+
|
|
343
|
+
// fallback to dfx moc
|
|
344
|
+
if (!hasConfig) {
|
|
345
|
+
if (tool === "moc" && fallback) {
|
|
346
|
+
return execSync("dfx cache show").toString().trim() + "/moc";
|
|
347
|
+
}
|
|
348
|
+
checkConfigFile();
|
|
349
|
+
process.exit(1);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
let config = readConfig();
|
|
353
|
+
let version = config.toolchain?.[tool];
|
|
354
|
+
|
|
355
|
+
if (version) {
|
|
356
|
+
if (tool === "moc") {
|
|
357
|
+
await ensureToolchainInited();
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
await download(tool, version, { silent: true });
|
|
361
|
+
|
|
362
|
+
if (tool === "moc") {
|
|
363
|
+
return path.join(globalCacheDir, "moc", version, tool);
|
|
364
|
+
} else {
|
|
365
|
+
return path.join(globalCacheDir, tool, version, tool);
|
|
366
|
+
}
|
|
367
|
+
} else {
|
|
368
|
+
// fallback to dfx moc
|
|
369
|
+
if (tool === "moc" && fallback) {
|
|
370
|
+
return execSync("dfx cache show").toString().trim() + "/moc";
|
|
371
|
+
}
|
|
372
|
+
console.error(
|
|
373
|
+
`Tool '${tool}' is not defined in [toolchain] section in mops.toml`,
|
|
374
|
+
);
|
|
375
|
+
console.log(
|
|
376
|
+
`Run ${chalk.green(`mops toolchain use ${tool}`)} to install it`,
|
|
377
|
+
);
|
|
378
|
+
process.exit(1);
|
|
379
|
+
}
|
|
339
380
|
}
|
|
340
381
|
|
|
341
382
|
export let toolchain = {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
};
|
|
383
|
+
init,
|
|
384
|
+
use,
|
|
385
|
+
update,
|
|
386
|
+
bin,
|
|
387
|
+
installAll,
|
|
388
|
+
ensureToolchainInited,
|
|
389
|
+
};
|