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
package/dist/mops.js
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import process from
|
|
2
|
-
import path from
|
|
3
|
-
import fs from
|
|
4
|
-
import TOML from
|
|
5
|
-
import chalk from
|
|
6
|
-
import prompts from
|
|
7
|
-
import fetch from
|
|
8
|
-
import { decodeFile } from
|
|
9
|
-
import { mainActor, storageActor } from
|
|
10
|
-
import { getNetwork } from
|
|
11
|
-
import { getHighestVersion } from
|
|
12
|
-
import { getPackageId } from
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import TOML from "@iarna/toml";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import prompts from "prompts";
|
|
7
|
+
import fetch from "node-fetch";
|
|
8
|
+
import { decodeFile } from "./pem.js";
|
|
9
|
+
import { mainActor, storageActor } from "./api/actors.js";
|
|
10
|
+
import { getNetwork } from "./api/network.js";
|
|
11
|
+
import { getHighestVersion } from "./api/getHighestVersion.js";
|
|
12
|
+
import { getPackageId } from "./helpers/get-package-id.js";
|
|
13
13
|
if (!globalThis.fetch) {
|
|
14
14
|
globalThis.fetch = fetch;
|
|
15
15
|
}
|
|
16
16
|
// (!) make changes in pair with backend
|
|
17
|
-
export let apiVersion =
|
|
18
|
-
export let globalConfigDir =
|
|
19
|
-
export let globalCacheDir =
|
|
17
|
+
export let apiVersion = "1.3";
|
|
18
|
+
export let globalConfigDir = "";
|
|
19
|
+
export let globalCacheDir = "";
|
|
20
20
|
// OS specific dirs
|
|
21
|
-
if (process.platform ==
|
|
22
|
-
globalConfigDir = path.join(process.env.LOCALAPPDATA ||
|
|
23
|
-
globalCacheDir = path.join(process.env.LOCALAPPDATA ||
|
|
21
|
+
if (process.platform == "win32") {
|
|
22
|
+
globalConfigDir = path.join(process.env.LOCALAPPDATA || "", "mops/config");
|
|
23
|
+
globalCacheDir = path.join(process.env.LOCALAPPDATA || "", "mops/cache");
|
|
24
24
|
}
|
|
25
|
-
else if (process.platform ==
|
|
26
|
-
globalConfigDir = path.join(process.env.HOME ||
|
|
27
|
-
globalCacheDir = path.join(process.env.HOME ||
|
|
25
|
+
else if (process.platform == "darwin") {
|
|
26
|
+
globalConfigDir = path.join(process.env.HOME || "", "Library/Application Support/mops");
|
|
27
|
+
globalCacheDir = path.join(process.env.HOME || "", "Library/Caches/mops");
|
|
28
28
|
}
|
|
29
29
|
else {
|
|
30
|
-
globalConfigDir = path.join(process.env.HOME ||
|
|
31
|
-
globalCacheDir = path.join(process.env.HOME ||
|
|
30
|
+
globalConfigDir = path.join(process.env.HOME || "", ".config/mops");
|
|
31
|
+
globalCacheDir = path.join(process.env.HOME || "", ".cache/mops");
|
|
32
32
|
}
|
|
33
33
|
// XDG overrides
|
|
34
34
|
if (process.env.XDG_CONFIG_HOME) {
|
|
35
|
-
globalConfigDir = path.join(process.env.XDG_CONFIG_HOME,
|
|
35
|
+
globalConfigDir = path.join(process.env.XDG_CONFIG_HOME, "mops");
|
|
36
36
|
}
|
|
37
37
|
if (process.env.XDG_CACHE_HOME) {
|
|
38
|
-
globalCacheDir = path.join(process.env.XDG_CACHE_HOME,
|
|
38
|
+
globalCacheDir = path.join(process.env.XDG_CACHE_HOME, "mops");
|
|
39
39
|
}
|
|
40
40
|
export function getNetworkFile() {
|
|
41
|
-
let networkFile =
|
|
41
|
+
let networkFile = "";
|
|
42
42
|
try {
|
|
43
|
-
networkFile = new URL(
|
|
43
|
+
networkFile = new URL("./network.txt", import.meta.url);
|
|
44
44
|
}
|
|
45
45
|
catch {
|
|
46
|
-
networkFile = path.join(__dirname,
|
|
46
|
+
networkFile = path.join(__dirname, "network.txt");
|
|
47
47
|
}
|
|
48
48
|
return networkFile;
|
|
49
49
|
}
|
|
@@ -51,19 +51,19 @@ export function setNetwork(network) {
|
|
|
51
51
|
fs.writeFileSync(getNetworkFile(), network);
|
|
52
52
|
}
|
|
53
53
|
export let getIdentity = async () => {
|
|
54
|
-
let identityPem = path.resolve(globalConfigDir,
|
|
55
|
-
let identityPemEncrypted = path.resolve(globalConfigDir,
|
|
54
|
+
let identityPem = path.resolve(globalConfigDir, "identity.pem");
|
|
55
|
+
let identityPemEncrypted = path.resolve(globalConfigDir, "identity.pem.encrypted");
|
|
56
56
|
if (fs.existsSync(identityPemEncrypted)) {
|
|
57
57
|
let res = await prompts({
|
|
58
|
-
type:
|
|
59
|
-
name:
|
|
60
|
-
message:
|
|
58
|
+
type: "invisible",
|
|
59
|
+
name: "value",
|
|
60
|
+
message: "Enter password:",
|
|
61
61
|
});
|
|
62
62
|
try {
|
|
63
63
|
return decodeFile(identityPemEncrypted, res.value);
|
|
64
64
|
}
|
|
65
65
|
catch (e) {
|
|
66
|
-
console.log(chalk.red(
|
|
66
|
+
console.log(chalk.red("Error: ") + "Invalid password");
|
|
67
67
|
process.exit(1);
|
|
68
68
|
}
|
|
69
69
|
}
|
|
@@ -74,25 +74,26 @@ export let getIdentity = async () => {
|
|
|
74
74
|
};
|
|
75
75
|
export function getClosestConfigFile(dir = process.cwd()) {
|
|
76
76
|
if (!path.basename(dir)) {
|
|
77
|
-
return
|
|
77
|
+
return "";
|
|
78
78
|
}
|
|
79
|
-
let configFile = path.join(dir,
|
|
79
|
+
let configFile = path.join(dir, "mops.toml");
|
|
80
80
|
if (fs.existsSync(configFile)) {
|
|
81
81
|
return configFile;
|
|
82
82
|
}
|
|
83
|
-
return getClosestConfigFile(path.resolve(dir,
|
|
83
|
+
return getClosestConfigFile(path.resolve(dir, ".."));
|
|
84
84
|
}
|
|
85
85
|
export function getRootDir() {
|
|
86
86
|
let configFile = getClosestConfigFile();
|
|
87
87
|
if (!configFile) {
|
|
88
|
-
return
|
|
88
|
+
return "";
|
|
89
89
|
}
|
|
90
90
|
return path.dirname(configFile);
|
|
91
91
|
}
|
|
92
92
|
export function checkConfigFile(exit = false) {
|
|
93
93
|
let configFile = getClosestConfigFile();
|
|
94
94
|
if (!configFile) {
|
|
95
|
-
console.log(chalk.red(
|
|
95
|
+
console.log(chalk.red("Error: ") +
|
|
96
|
+
`Config file 'mops.toml' not found. Please run ${chalk.green("mops init")} first`);
|
|
96
97
|
if (exit) {
|
|
97
98
|
process.exit(1);
|
|
98
99
|
}
|
|
@@ -101,18 +102,18 @@ export function checkConfigFile(exit = false) {
|
|
|
101
102
|
return true;
|
|
102
103
|
}
|
|
103
104
|
export function progressBar(step, total) {
|
|
104
|
-
let done = Math.round(step / total * 10);
|
|
105
|
-
return `[${
|
|
105
|
+
let done = Math.round((step / total) * 10);
|
|
106
|
+
return `[${":".repeat(done)}${" ".repeat(Math.max(0, 10 - done))}]`;
|
|
106
107
|
}
|
|
107
108
|
export function parseGithubURL(href) {
|
|
108
109
|
const url = new URL(href);
|
|
109
|
-
let branchAndSha = url.hash?.substring(1).split(
|
|
110
|
-
let branch = branchAndSha[0] ||
|
|
111
|
-
let commitHash = branchAndSha[1] ||
|
|
112
|
-
let [org, gitName] = url.pathname.split(
|
|
113
|
-
org = org ||
|
|
114
|
-
gitName = gitName ||
|
|
115
|
-
if (gitName?.endsWith(
|
|
110
|
+
let branchAndSha = url.hash?.substring(1).split("@");
|
|
111
|
+
let branch = branchAndSha[0] || "master";
|
|
112
|
+
let commitHash = branchAndSha[1] || "";
|
|
113
|
+
let [org, gitName] = url.pathname.split("/").filter((path) => !!path);
|
|
114
|
+
org = org || "";
|
|
115
|
+
gitName = gitName || "";
|
|
116
|
+
if (gitName?.endsWith(".git")) {
|
|
116
117
|
gitName = gitName.substring(0, gitName.length - 4);
|
|
117
118
|
}
|
|
118
119
|
return { org, gitName, branch, commitHash };
|
|
@@ -121,36 +122,36 @@ export async function getGithubCommit(repo, ref) {
|
|
|
121
122
|
let res = await fetch(`https://api.github.com/repos/${repo}/commits/${ref}`);
|
|
122
123
|
let json = await res.json();
|
|
123
124
|
// try on main branch
|
|
124
|
-
if (json.message && ref ===
|
|
125
|
+
if (json.message && ref === "master") {
|
|
125
126
|
res = await fetch(`https://api.github.com/repos/${repo}/commits/main`);
|
|
126
127
|
json = await res.json();
|
|
127
128
|
}
|
|
128
129
|
return json;
|
|
129
130
|
}
|
|
130
131
|
export function getDependencyType(version) {
|
|
131
|
-
if (!version || typeof version !==
|
|
132
|
+
if (!version || typeof version !== "string") {
|
|
132
133
|
throw Error(`Invalid dependency value "${version}"`);
|
|
133
134
|
}
|
|
134
|
-
if (version.startsWith(
|
|
135
|
-
return
|
|
135
|
+
if (version.startsWith("https://github.com/")) {
|
|
136
|
+
return "github";
|
|
136
137
|
}
|
|
137
138
|
else if (version.match(/^(\.?\.)?\//)) {
|
|
138
|
-
return
|
|
139
|
+
return "local";
|
|
139
140
|
}
|
|
140
141
|
else {
|
|
141
|
-
return
|
|
142
|
+
return "mops";
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
145
|
export function parseDepValue(name, value) {
|
|
145
146
|
let depType = getDependencyType(value);
|
|
146
|
-
if (depType ===
|
|
147
|
-
return { name, repo: value, version:
|
|
147
|
+
if (depType === "github") {
|
|
148
|
+
return { name, repo: value, version: "" };
|
|
148
149
|
}
|
|
149
|
-
else if (depType ===
|
|
150
|
-
return { name, repo:
|
|
150
|
+
else if (depType === "local") {
|
|
151
|
+
return { name, repo: "", path: value, version: "" };
|
|
151
152
|
}
|
|
152
153
|
else {
|
|
153
|
-
return { name, repo:
|
|
154
|
+
return { name, repo: "", version: value };
|
|
154
155
|
}
|
|
155
156
|
}
|
|
156
157
|
export function readConfig(configFile = getClosestConfigFile()) {
|
|
@@ -158,17 +159,17 @@ export function readConfig(configFile = getClosestConfigFile()) {
|
|
|
158
159
|
let toml = TOML.parse(text);
|
|
159
160
|
let processDeps = (deps) => {
|
|
160
161
|
Object.entries(deps).forEach(([name, data]) => {
|
|
161
|
-
if (!data || typeof data !==
|
|
162
|
+
if (!data || typeof data !== "string") {
|
|
162
163
|
throw Error(`Invalid dependency value ${name} = "${data}"`);
|
|
163
164
|
}
|
|
164
165
|
deps[name] = parseDepValue(name, data);
|
|
165
166
|
});
|
|
166
167
|
};
|
|
167
168
|
processDeps(toml.dependencies || {});
|
|
168
|
-
processDeps(toml[
|
|
169
|
+
processDeps(toml["dev-dependencies"] || {});
|
|
169
170
|
let config = { ...toml };
|
|
170
171
|
Object.entries(config.requirements || {}).forEach(([name, value]) => {
|
|
171
|
-
if (name ===
|
|
172
|
+
if (name === "moc") {
|
|
172
173
|
config.requirements = config.requirements || {};
|
|
173
174
|
config.requirements.moc = value;
|
|
174
175
|
}
|
|
@@ -181,33 +182,35 @@ export function writeConfig(config, configFile = getClosestConfigFile()) {
|
|
|
181
182
|
Object.entries(config.dependencies || {}).forEach(([name, { repo, path, version }]) => {
|
|
182
183
|
deps[name] = repo || path || version;
|
|
183
184
|
});
|
|
184
|
-
let devDeps = resConfig[
|
|
185
|
-
Object.entries(config[
|
|
185
|
+
let devDeps = resConfig["dev-dependencies"] || {};
|
|
186
|
+
Object.entries(config["dev-dependencies"] || {}).forEach(([name, { repo, path, version }]) => {
|
|
186
187
|
devDeps[name] = repo || path || version;
|
|
187
188
|
});
|
|
188
189
|
let text = TOML.stringify(resConfig).trim();
|
|
189
|
-
if (fs.existsSync(configFile) &&
|
|
190
|
-
|
|
190
|
+
if (fs.existsSync(configFile) &&
|
|
191
|
+
fs.readFileSync(configFile).toString().endsWith("\n")) {
|
|
192
|
+
text += "\n";
|
|
191
193
|
}
|
|
192
194
|
fs.writeFileSync(configFile, text);
|
|
193
195
|
}
|
|
194
196
|
export function formatDir(name, version) {
|
|
195
|
-
return path.join(getRootDir(),
|
|
197
|
+
return path.join(getRootDir(), ".mops", getPackageId(name, version));
|
|
196
198
|
}
|
|
197
199
|
export function formatGithubDir(name, repo) {
|
|
198
200
|
const { branch, commitHash } = parseGithubURL(repo);
|
|
199
|
-
return path.join(getRootDir(),
|
|
201
|
+
return path.join(getRootDir(), ".mops/_github", `${name}#${branch.replaceAll("/", "___")}` +
|
|
202
|
+
(commitHash ? `@${commitHash}` : ""));
|
|
200
203
|
}
|
|
201
204
|
export function readDfxJson() {
|
|
202
205
|
let dir = process.cwd();
|
|
203
206
|
let dfxJson = null;
|
|
204
207
|
for (let i = 0; i < 5; i++) {
|
|
205
|
-
let file = path.resolve(dir,
|
|
208
|
+
let file = path.resolve(dir, "dfx.json");
|
|
206
209
|
if (fs.existsSync(file)) {
|
|
207
210
|
dfxJson = JSON.parse(fs.readFileSync(file).toString());
|
|
208
211
|
break;
|
|
209
212
|
}
|
|
210
|
-
dir = path.resolve(dir,
|
|
213
|
+
dir = path.resolve(dir, "..");
|
|
211
214
|
}
|
|
212
215
|
return dfxJson;
|
|
213
216
|
}
|
|
@@ -216,22 +219,26 @@ export function readDfxJson() {
|
|
|
216
219
|
export async function checkApiCompatibility() {
|
|
217
220
|
let actor = await mainActor();
|
|
218
221
|
let backendApiVer = await actor.getApiVersion();
|
|
219
|
-
if (backendApiVer.split(
|
|
220
|
-
console.log(chalk.red(
|
|
221
|
-
|
|
222
|
+
if (backendApiVer.split(".")[0] !== apiVersion.split(".")[0]) {
|
|
223
|
+
console.log(chalk.red("ERR: ") +
|
|
224
|
+
`CLI incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`);
|
|
225
|
+
console.log("Run " + chalk.greenBright("mops self update") + " to upgrade cli.");
|
|
222
226
|
return false;
|
|
223
227
|
}
|
|
224
|
-
else if (backendApiVer.split(
|
|
225
|
-
console.log(
|
|
226
|
-
console.log(chalk.yellow(
|
|
227
|
-
|
|
228
|
-
console.log(
|
|
228
|
+
else if (backendApiVer.split(".")[1] !== apiVersion.split(".")[1]) {
|
|
229
|
+
console.log("-".repeat(50));
|
|
230
|
+
console.log(chalk.yellow("WARN: ") +
|
|
231
|
+
`CLI probably incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`);
|
|
232
|
+
console.log("Recommended to run " +
|
|
233
|
+
chalk.greenBright("mops self update") +
|
|
234
|
+
" to upgrade cli.");
|
|
235
|
+
console.log("-".repeat(50));
|
|
229
236
|
}
|
|
230
237
|
return true;
|
|
231
238
|
}
|
|
232
239
|
export function version() {
|
|
233
|
-
let packageJson = JSON.parse(fs.readFileSync(new URL(
|
|
240
|
+
let packageJson = JSON.parse(fs.readFileSync(new URL("./package.json", import.meta.url)).toString());
|
|
234
241
|
return packageJson.version;
|
|
235
242
|
}
|
|
236
243
|
// compatibility with older versions
|
|
237
|
-
export { getNetwork, mainActor, storageActor, getHighestVersion
|
|
244
|
+
export { getNetwork, mainActor, storageActor, getHighestVersion };
|
package/dist/notify-installs.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { getDependencyType } from
|
|
2
|
-
import { mainActor } from
|
|
3
|
-
import { getDepName } from
|
|
1
|
+
import { getDependencyType } from "./mops.js";
|
|
2
|
+
import { mainActor } from "./api/actors.js";
|
|
3
|
+
import { getDepName } from "./helpers/get-dep-name.js";
|
|
4
4
|
export async function notifyInstalls(installedDeps) {
|
|
5
5
|
let packages = Object.entries(installedDeps)
|
|
6
|
-
.filter(([_, version]) => getDependencyType(version) ===
|
|
6
|
+
.filter(([_, version]) => getDependencyType(version) === "mops")
|
|
7
7
|
.map(([name, version]) => [getDepName(name), version]);
|
|
8
8
|
if (packages.length) {
|
|
9
9
|
let actor = await mainActor();
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ic-mops",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"mops": "bin/mops.js",
|
|
@@ -15,14 +15,15 @@
|
|
|
15
15
|
"!build.sh",
|
|
16
16
|
"!DEVELOPMENT.md",
|
|
17
17
|
"!.mops",
|
|
18
|
-
"/templates"
|
|
18
|
+
"/templates",
|
|
19
|
+
"/wasm"
|
|
19
20
|
],
|
|
20
21
|
"homepage": "https://mops.one",
|
|
21
22
|
"repository": {
|
|
22
23
|
"type": "git",
|
|
23
|
-
"url": "https://github.com/
|
|
24
|
+
"url": "https://github.com/caffeinelabs/mops.git"
|
|
24
25
|
},
|
|
25
|
-
"author": "
|
|
26
|
+
"author": "DFINITY",
|
|
26
27
|
"license": "MIT",
|
|
27
28
|
"engines": {
|
|
28
29
|
"node": ">=18.0.0"
|
|
@@ -87,8 +88,11 @@
|
|
|
87
88
|
"@types/tar": "6.1.13",
|
|
88
89
|
"esbuild": "0.23.1",
|
|
89
90
|
"eslint": "8.57.0",
|
|
91
|
+
"npm-run-all": "4.1.5",
|
|
90
92
|
"rexreplace": "7.1.13",
|
|
93
|
+
"ts-jest": "29.4.5",
|
|
91
94
|
"tsx": "4.19.2",
|
|
92
|
-
"typescript": "5.9.2"
|
|
95
|
+
"typescript": "5.9.2",
|
|
96
|
+
"wasm-pack": "0.13.1"
|
|
93
97
|
}
|
|
94
98
|
}
|
package/dist/pem.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Buffer } from
|
|
2
|
-
import { Ed25519KeyIdentity } from
|
|
3
|
-
import { Secp256k1KeyIdentity } from
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import { Ed25519KeyIdentity } from "@icp-sdk/core/identity";
|
|
3
|
+
import { Secp256k1KeyIdentity } from "@icp-sdk/core/identity/secp256k1";
|
|
4
4
|
export declare function decodeFile(file: string, password?: string): Secp256k1KeyIdentity | Ed25519KeyIdentity;
|
|
5
5
|
export declare function encrypt(buffer: Buffer, password: string): Buffer<ArrayBuffer>;
|
package/dist/pem.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import fs from
|
|
2
|
-
import { Buffer } from
|
|
3
|
-
import crypto from
|
|
4
|
-
import { Ed25519KeyIdentity } from
|
|
5
|
-
import { Secp256k1KeyIdentity } from
|
|
6
|
-
import pemfile from
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { Buffer } from "node:buffer";
|
|
3
|
+
import crypto from "node:crypto";
|
|
4
|
+
import { Ed25519KeyIdentity } from "@icp-sdk/core/identity";
|
|
5
|
+
import { Secp256k1KeyIdentity } from "@icp-sdk/core/identity/secp256k1";
|
|
6
|
+
import pemfile from "pem-file";
|
|
7
7
|
export function decodeFile(file, password) {
|
|
8
8
|
let rawKey = fs.readFileSync(file);
|
|
9
9
|
if (password) {
|
|
@@ -13,21 +13,25 @@ export function decodeFile(file, password) {
|
|
|
13
13
|
}
|
|
14
14
|
function decode(rawKey) {
|
|
15
15
|
let buf = pemfile.decode(rawKey);
|
|
16
|
-
if (rawKey.includes(
|
|
16
|
+
if (rawKey.includes("EC PRIVATE KEY")) {
|
|
17
17
|
if (buf.length != 118) {
|
|
18
|
-
throw
|
|
18
|
+
throw "expecting byte length 118 but got " + buf.length;
|
|
19
19
|
}
|
|
20
20
|
return Secp256k1KeyIdentity.fromSecretKey(buf.subarray(7, 39));
|
|
21
21
|
}
|
|
22
22
|
if (buf.length != 85) {
|
|
23
|
-
throw
|
|
23
|
+
throw "expecting byte length 85 but got " + buf.length;
|
|
24
24
|
}
|
|
25
25
|
let secretKey = Buffer.concat([buf.subarray(16, 48)]);
|
|
26
26
|
return Ed25519KeyIdentity.fromSecretKey(secretKey);
|
|
27
27
|
}
|
|
28
|
-
let algorithm =
|
|
28
|
+
let algorithm = "aes-256-ctr";
|
|
29
29
|
export function encrypt(buffer, password) {
|
|
30
|
-
let key = crypto
|
|
30
|
+
let key = crypto
|
|
31
|
+
.createHash("sha256")
|
|
32
|
+
.update(password)
|
|
33
|
+
.digest("base64")
|
|
34
|
+
.slice(0, 32);
|
|
31
35
|
// Create an initialization vector
|
|
32
36
|
let iv = crypto.randomBytes(16);
|
|
33
37
|
// Create a new cipher using the algorithm, key, and iv
|
|
@@ -37,7 +41,11 @@ export function encrypt(buffer, password) {
|
|
|
37
41
|
return result;
|
|
38
42
|
}
|
|
39
43
|
function decrypt(encrypted, password) {
|
|
40
|
-
let key = crypto
|
|
44
|
+
let key = crypto
|
|
45
|
+
.createHash("sha256")
|
|
46
|
+
.update(password)
|
|
47
|
+
.digest("base64")
|
|
48
|
+
.slice(0, 32);
|
|
41
49
|
// Get the iv: the first 16 bytes
|
|
42
50
|
let iv = encrypted.subarray(0, 16);
|
|
43
51
|
// Get the rest
|
package/dist/release-cli.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
/* eslint-disable no-undef */
|
|
2
|
-
import fs from
|
|
3
|
-
import path from
|
|
4
|
-
import { URL } from
|
|
5
|
-
import { execSync } from
|
|
6
|
-
import semver from
|
|
7
|
-
import { sha256 } from
|
|
8
|
-
import { bytesToHex } from
|
|
9
|
-
import { findChangelogEntry } from
|
|
10
|
-
let __dirname = new URL(
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { URL } from "node:url";
|
|
5
|
+
import { execSync } from "node:child_process";
|
|
6
|
+
import semver from "semver";
|
|
7
|
+
import { sha256 } from "@noble/hashes/sha256";
|
|
8
|
+
import { bytesToHex } from "@noble/hashes/utils";
|
|
9
|
+
import { findChangelogEntry } from "./helpers/find-changelog-entry.js";
|
|
10
|
+
let __dirname = new URL(".", import.meta.url).pathname;
|
|
11
11
|
// build using Docker
|
|
12
|
-
execSync(
|
|
13
|
-
let commitHash = process.env.COMMIT_HASH || execSync(
|
|
14
|
-
let version = JSON.parse(fs.readFileSync(path.resolve(__dirname,
|
|
12
|
+
execSync("./build.sh", { stdio: "inherit", cwd: __dirname });
|
|
13
|
+
let commitHash = process.env.COMMIT_HASH || execSync("git rev-parse HEAD").toString().trim();
|
|
14
|
+
let version = JSON.parse(fs.readFileSync(path.resolve(__dirname, "package.json"), "utf8")).version;
|
|
15
15
|
let major = semver.parse(version)?.major;
|
|
16
|
-
let tag = semver.parse(version)?.prerelease[0] ||
|
|
17
|
-
let releaseNotes = findChangelogEntry(fs.readFileSync(path.resolve(__dirname,
|
|
18
|
-
let data = fs.readFileSync(path.resolve(__dirname,
|
|
16
|
+
let tag = semver.parse(version)?.prerelease[0] || "latest";
|
|
17
|
+
let releaseNotes = findChangelogEntry(fs.readFileSync(path.resolve(__dirname, "CHANGELOG.md"), "utf8"), version);
|
|
18
|
+
let data = fs.readFileSync(path.resolve(__dirname, "bundle/cli.tgz"));
|
|
19
19
|
let hash = bytesToHex(sha256(data));
|
|
20
20
|
let size = data.byteLength;
|
|
21
21
|
console.log(`Commit hash of release: ${commitHash}`);
|
|
22
|
-
fs.cpSync(path.resolve(__dirname,
|
|
22
|
+
fs.cpSync(path.resolve(__dirname, "bundle/cli.tgz"), path.resolve(__dirname, `../cli-releases/versions/${version}.tgz`), { force: false, errorOnExist: true });
|
|
23
23
|
fs.cpSync(path.resolve(__dirname, `../cli-releases/versions/${version}.tgz`), path.resolve(__dirname, `../cli-releases/versions/${tag}.tgz`), { force: true, errorOnExist: false, recursive: true });
|
|
24
24
|
fs.cpSync(path.resolve(__dirname, `../cli-releases/versions/${version}.tgz`), path.resolve(__dirname, `../cli-releases/versions/${major}.tgz`), { force: true, errorOnExist: false, recursive: true });
|
|
25
25
|
fs.writeFileSync(path.resolve(__dirname, `../cli-releases/tags/${tag}`), version);
|
|
26
26
|
console.log(`Release '${version}' created with tag '${tag}'`);
|
|
27
|
-
if (!fs.existsSync(path.resolve(__dirname,
|
|
28
|
-
fs.writeFileSync(path.resolve(__dirname,
|
|
27
|
+
if (!fs.existsSync(path.resolve(__dirname, "../cli-releases/releases.json"))) {
|
|
28
|
+
fs.writeFileSync(path.resolve(__dirname, "../cli-releases/releases.json"), JSON.stringify({ tags: {}, versions: {} }, null, 2));
|
|
29
29
|
}
|
|
30
|
-
let releases = JSON.parse(fs.readFileSync(path.resolve(__dirname,
|
|
30
|
+
let releases = JSON.parse(fs.readFileSync(path.resolve(__dirname, "../cli-releases/releases.json"), "utf8"));
|
|
31
31
|
releases.tags[tag] = version;
|
|
32
32
|
releases.versions[version] = {
|
|
33
33
|
time: new Date().getTime(),
|
|
@@ -37,4 +37,4 @@ releases.versions[version] = {
|
|
|
37
37
|
url: `https://cli.mops.one/versions/${version}.tgz`,
|
|
38
38
|
hash,
|
|
39
39
|
};
|
|
40
|
-
fs.writeFileSync(path.resolve(__dirname,
|
|
40
|
+
fs.writeFileSync(path.resolve(__dirname, "../cli-releases/releases.json"), JSON.stringify(releases, null, 2));
|