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/mops.ts
CHANGED
|
@@ -1,279 +1,302 @@
|
|
|
1
|
-
import process from
|
|
2
|
-
import path from
|
|
3
|
-
import fs from
|
|
4
|
-
import {Identity} from
|
|
5
|
-
import TOML from
|
|
6
|
-
import chalk from
|
|
7
|
-
import prompts from
|
|
8
|
-
import fetch from
|
|
9
|
-
|
|
10
|
-
import {decodeFile} from
|
|
11
|
-
import {Config, Dependency} from
|
|
12
|
-
import {mainActor, storageActor} from
|
|
13
|
-
import {getNetwork} from
|
|
14
|
-
import {getHighestVersion} from
|
|
15
|
-
import {getPackageId} from
|
|
16
|
-
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import { Identity } from "@icp-sdk/core/agent";
|
|
5
|
+
import TOML from "@iarna/toml";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import prompts from "prompts";
|
|
8
|
+
import fetch from "node-fetch";
|
|
9
|
+
|
|
10
|
+
import { decodeFile } from "./pem.js";
|
|
11
|
+
import { Config, Dependency } from "./types.js";
|
|
12
|
+
import { mainActor, storageActor } from "./api/actors.js";
|
|
13
|
+
import { getNetwork } from "./api/network.js";
|
|
14
|
+
import { getHighestVersion } from "./api/getHighestVersion.js";
|
|
15
|
+
import { getPackageId } from "./helpers/get-package-id.js";
|
|
17
16
|
|
|
18
17
|
if (!globalThis.fetch) {
|
|
19
|
-
|
|
18
|
+
globalThis.fetch = fetch as any;
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
// (!) make changes in pair with backend
|
|
23
|
-
export let apiVersion =
|
|
22
|
+
export let apiVersion = "1.3";
|
|
24
23
|
|
|
25
|
-
export let globalConfigDir =
|
|
26
|
-
export let globalCacheDir =
|
|
24
|
+
export let globalConfigDir = "";
|
|
25
|
+
export let globalCacheDir = "";
|
|
27
26
|
|
|
28
27
|
// OS specific dirs
|
|
29
|
-
if (process.platform ==
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
28
|
+
if (process.platform == "win32") {
|
|
29
|
+
globalConfigDir = path.join(process.env.LOCALAPPDATA || "", "mops/config");
|
|
30
|
+
globalCacheDir = path.join(process.env.LOCALAPPDATA || "", "mops/cache");
|
|
31
|
+
} else if (process.platform == "darwin") {
|
|
32
|
+
globalConfigDir = path.join(
|
|
33
|
+
process.env.HOME || "",
|
|
34
|
+
"Library/Application Support/mops",
|
|
35
|
+
);
|
|
36
|
+
globalCacheDir = path.join(process.env.HOME || "", "Library/Caches/mops");
|
|
37
|
+
} else {
|
|
38
|
+
globalConfigDir = path.join(process.env.HOME || "", ".config/mops");
|
|
39
|
+
globalCacheDir = path.join(process.env.HOME || "", ".cache/mops");
|
|
40
40
|
}
|
|
41
41
|
// XDG overrides
|
|
42
42
|
if (process.env.XDG_CONFIG_HOME) {
|
|
43
|
-
|
|
43
|
+
globalConfigDir = path.join(process.env.XDG_CONFIG_HOME, "mops");
|
|
44
44
|
}
|
|
45
45
|
if (process.env.XDG_CACHE_HOME) {
|
|
46
|
-
|
|
46
|
+
globalCacheDir = path.join(process.env.XDG_CACHE_HOME, "mops");
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
export function getNetworkFile()
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return networkFile;
|
|
49
|
+
export function getNetworkFile(): string | URL {
|
|
50
|
+
let networkFile: string | URL = "";
|
|
51
|
+
try {
|
|
52
|
+
networkFile = new URL("./network.txt", import.meta.url);
|
|
53
|
+
} catch {
|
|
54
|
+
networkFile = path.join(__dirname, "network.txt");
|
|
55
|
+
}
|
|
56
|
+
return networkFile;
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
export function setNetwork(network
|
|
61
|
-
|
|
59
|
+
export function setNetwork(network: string) {
|
|
60
|
+
fs.writeFileSync(getNetworkFile(), network);
|
|
62
61
|
}
|
|
63
62
|
|
|
64
|
-
export let getIdentity = async ()
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
63
|
+
export let getIdentity = async (): Promise<Identity | undefined> => {
|
|
64
|
+
let identityPem = path.resolve(globalConfigDir, "identity.pem");
|
|
65
|
+
let identityPemEncrypted = path.resolve(
|
|
66
|
+
globalConfigDir,
|
|
67
|
+
"identity.pem.encrypted",
|
|
68
|
+
);
|
|
69
|
+
if (fs.existsSync(identityPemEncrypted)) {
|
|
70
|
+
let res = await prompts({
|
|
71
|
+
type: "invisible",
|
|
72
|
+
name: "value",
|
|
73
|
+
message: "Enter password:",
|
|
74
|
+
});
|
|
75
|
+
try {
|
|
76
|
+
return decodeFile(identityPemEncrypted, res.value);
|
|
77
|
+
} catch (e) {
|
|
78
|
+
console.log(chalk.red("Error: ") + "Invalid password");
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (fs.existsSync(identityPem)) {
|
|
83
|
+
return decodeFile(identityPem);
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
85
86
|
};
|
|
86
87
|
|
|
87
|
-
export function getClosestConfigFile(dir = process.cwd())
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
export function getClosestConfigFile(dir = process.cwd()): string {
|
|
89
|
+
if (!path.basename(dir)) {
|
|
90
|
+
return "";
|
|
91
|
+
}
|
|
92
|
+
let configFile = path.join(dir, "mops.toml");
|
|
93
|
+
if (fs.existsSync(configFile)) {
|
|
94
|
+
return configFile;
|
|
95
|
+
}
|
|
96
|
+
return getClosestConfigFile(path.resolve(dir, ".."));
|
|
96
97
|
}
|
|
97
98
|
|
|
98
99
|
export function getRootDir() {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
let configFile = getClosestConfigFile();
|
|
101
|
+
if (!configFile) {
|
|
102
|
+
return "";
|
|
103
|
+
}
|
|
104
|
+
return path.dirname(configFile);
|
|
104
105
|
}
|
|
105
106
|
|
|
106
107
|
export function checkConfigFile(exit = false) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
108
|
+
let configFile = getClosestConfigFile();
|
|
109
|
+
if (!configFile) {
|
|
110
|
+
console.log(
|
|
111
|
+
chalk.red("Error: ") +
|
|
112
|
+
`Config file 'mops.toml' not found. Please run ${chalk.green("mops init")} first`,
|
|
113
|
+
);
|
|
114
|
+
if (exit) {
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
return true;
|
|
116
120
|
}
|
|
117
121
|
|
|
118
|
-
export function progressBar(step
|
|
119
|
-
|
|
120
|
-
|
|
122
|
+
export function progressBar(step: number, total: number) {
|
|
123
|
+
let done = Math.round((step / total) * 10);
|
|
124
|
+
return `[${":".repeat(done)}${" ".repeat(Math.max(0, 10 - done))}]`;
|
|
121
125
|
}
|
|
122
126
|
|
|
123
|
-
export function parseGithubURL(href
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
127
|
+
export function parseGithubURL(href: string) {
|
|
128
|
+
const url = new URL(href);
|
|
129
|
+
let branchAndSha = url.hash?.substring(1).split("@");
|
|
130
|
+
let branch = branchAndSha[0] || "master";
|
|
131
|
+
let commitHash = branchAndSha[1] || "";
|
|
132
|
+
let [org, gitName] = url.pathname.split("/").filter((path) => !!path);
|
|
133
|
+
org = org || "";
|
|
134
|
+
gitName = gitName || "";
|
|
135
|
+
|
|
136
|
+
if (gitName?.endsWith(".git")) {
|
|
137
|
+
gitName = gitName.substring(0, gitName.length - 4);
|
|
138
|
+
}
|
|
139
|
+
return { org, gitName, branch, commitHash };
|
|
136
140
|
}
|
|
137
141
|
|
|
138
|
-
export async function getGithubCommit(repo
|
|
139
|
-
|
|
140
|
-
|
|
142
|
+
export async function getGithubCommit(repo: string, ref: string): Promise<any> {
|
|
143
|
+
let res = await fetch(`https://api.github.com/repos/${repo}/commits/${ref}`);
|
|
144
|
+
let json: any = await res.json();
|
|
141
145
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
// try on main branch
|
|
147
|
+
if (json.message && ref === "master") {
|
|
148
|
+
res = await fetch(`https://api.github.com/repos/${repo}/commits/main`);
|
|
149
|
+
json = await res.json();
|
|
150
|
+
}
|
|
151
|
+
return json;
|
|
148
152
|
}
|
|
149
153
|
|
|
150
|
-
export function getDependencyType(version
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return 'mops';
|
|
162
|
-
}
|
|
154
|
+
export function getDependencyType(version: string) {
|
|
155
|
+
if (!version || typeof version !== "string") {
|
|
156
|
+
throw Error(`Invalid dependency value "${version}"`);
|
|
157
|
+
}
|
|
158
|
+
if (version.startsWith("https://github.com/")) {
|
|
159
|
+
return "github";
|
|
160
|
+
} else if (version.match(/^(\.?\.)?\//)) {
|
|
161
|
+
return "local";
|
|
162
|
+
} else {
|
|
163
|
+
return "mops";
|
|
164
|
+
}
|
|
163
165
|
}
|
|
164
166
|
|
|
165
|
-
export function parseDepValue(name
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
return {name, repo: '', version: value};
|
|
175
|
-
}
|
|
167
|
+
export function parseDepValue(name: string, value: string): Dependency {
|
|
168
|
+
let depType = getDependencyType(value);
|
|
169
|
+
if (depType === "github") {
|
|
170
|
+
return { name, repo: value, version: "" };
|
|
171
|
+
} else if (depType === "local") {
|
|
172
|
+
return { name, repo: "", path: value, version: "" };
|
|
173
|
+
} else {
|
|
174
|
+
return { name, repo: "", version: value };
|
|
175
|
+
}
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
-
export function readConfig(configFile = getClosestConfigFile())
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
export function readConfig(configFile = getClosestConfigFile()): Config {
|
|
179
|
+
let text = fs.readFileSync(configFile).toString();
|
|
180
|
+
let toml = TOML.parse(text);
|
|
181
181
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
182
|
+
let processDeps = (deps: any) => {
|
|
183
|
+
Object.entries(deps).forEach(([name, data]) => {
|
|
184
|
+
if (!data || typeof data !== "string") {
|
|
185
|
+
throw Error(`Invalid dependency value ${name} = "${data}"`);
|
|
186
|
+
}
|
|
187
|
+
deps[name] = parseDepValue(name, data);
|
|
188
|
+
});
|
|
189
|
+
};
|
|
190
190
|
|
|
191
|
-
|
|
192
|
-
|
|
191
|
+
processDeps(toml.dependencies || {});
|
|
192
|
+
processDeps(toml["dev-dependencies"] || {});
|
|
193
193
|
|
|
194
|
-
|
|
194
|
+
let config: Config = { ...toml };
|
|
195
195
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
196
|
+
Object.entries(config.requirements || {}).forEach(([name, value]) => {
|
|
197
|
+
if (name === "moc") {
|
|
198
|
+
config.requirements = config.requirements || {};
|
|
199
|
+
config.requirements.moc = value;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
202
|
|
|
203
|
-
|
|
203
|
+
return config;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
export function writeConfig(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
206
|
+
export function writeConfig(
|
|
207
|
+
config: Config,
|
|
208
|
+
configFile = getClosestConfigFile(),
|
|
209
|
+
) {
|
|
210
|
+
let resConfig: any = JSON.parse(JSON.stringify(config));
|
|
211
|
+
|
|
212
|
+
let deps = resConfig.dependencies || {};
|
|
213
|
+
Object.entries(config.dependencies || {}).forEach(
|
|
214
|
+
([name, { repo, path, version }]) => {
|
|
215
|
+
deps[name] = repo || path || version;
|
|
216
|
+
},
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
let devDeps = resConfig["dev-dependencies"] || {};
|
|
220
|
+
Object.entries(config["dev-dependencies"] || {}).forEach(
|
|
221
|
+
([name, { repo, path, version }]) => {
|
|
222
|
+
devDeps[name] = repo || path || version;
|
|
223
|
+
},
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
let text = TOML.stringify(resConfig).trim();
|
|
227
|
+
if (
|
|
228
|
+
fs.existsSync(configFile) &&
|
|
229
|
+
fs.readFileSync(configFile).toString().endsWith("\n")
|
|
230
|
+
) {
|
|
231
|
+
text += "\n";
|
|
232
|
+
}
|
|
233
|
+
fs.writeFileSync(configFile, text);
|
|
224
234
|
}
|
|
225
235
|
|
|
226
|
-
export function formatDir(name
|
|
227
|
-
|
|
236
|
+
export function formatDir(name: string, version: string) {
|
|
237
|
+
return path.join(getRootDir(), ".mops", getPackageId(name, version));
|
|
228
238
|
}
|
|
229
239
|
|
|
230
|
-
export function formatGithubDir(name
|
|
231
|
-
|
|
232
|
-
|
|
240
|
+
export function formatGithubDir(name: string, repo: string) {
|
|
241
|
+
const { branch, commitHash } = parseGithubURL(repo);
|
|
242
|
+
return path.join(
|
|
243
|
+
getRootDir(),
|
|
244
|
+
".mops/_github",
|
|
245
|
+
`${name}#${branch.replaceAll("/", "___")}` +
|
|
246
|
+
(commitHash ? `@${commitHash}` : ""),
|
|
247
|
+
);
|
|
233
248
|
}
|
|
234
249
|
|
|
235
|
-
export function readDfxJson()
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
250
|
+
export function readDfxJson(): any {
|
|
251
|
+
let dir = process.cwd();
|
|
252
|
+
let dfxJson = null;
|
|
253
|
+
for (let i = 0; i < 5; i++) {
|
|
254
|
+
let file = path.resolve(dir, "dfx.json");
|
|
255
|
+
if (fs.existsSync(file)) {
|
|
256
|
+
dfxJson = JSON.parse(fs.readFileSync(file).toString());
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
dir = path.resolve(dir, "..");
|
|
260
|
+
}
|
|
261
|
+
return dfxJson;
|
|
247
262
|
}
|
|
248
263
|
|
|
249
264
|
// warn on minor mismatch
|
|
250
265
|
// err on major mismatch
|
|
251
266
|
export async function checkApiCompatibility() {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
267
|
+
let actor = await mainActor();
|
|
268
|
+
let backendApiVer = await actor.getApiVersion();
|
|
269
|
+
if (backendApiVer.split(".")[0] !== apiVersion.split(".")[0]) {
|
|
270
|
+
console.log(
|
|
271
|
+
chalk.red("ERR: ") +
|
|
272
|
+
`CLI incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`,
|
|
273
|
+
);
|
|
274
|
+
console.log(
|
|
275
|
+
"Run " + chalk.greenBright("mops self update") + " to upgrade cli.",
|
|
276
|
+
);
|
|
277
|
+
return false;
|
|
278
|
+
} else if (backendApiVer.split(".")[1] !== apiVersion.split(".")[1]) {
|
|
279
|
+
console.log("-".repeat(50));
|
|
280
|
+
console.log(
|
|
281
|
+
chalk.yellow("WARN: ") +
|
|
282
|
+
`CLI probably incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`,
|
|
283
|
+
);
|
|
284
|
+
console.log(
|
|
285
|
+
"Recommended to run " +
|
|
286
|
+
chalk.greenBright("mops self update") +
|
|
287
|
+
" to upgrade cli.",
|
|
288
|
+
);
|
|
289
|
+
console.log("-".repeat(50));
|
|
290
|
+
}
|
|
291
|
+
return true;
|
|
266
292
|
}
|
|
267
293
|
|
|
268
294
|
export function version() {
|
|
269
|
-
|
|
270
|
-
|
|
295
|
+
let packageJson = JSON.parse(
|
|
296
|
+
fs.readFileSync(new URL("./package.json", import.meta.url)).toString(),
|
|
297
|
+
);
|
|
298
|
+
return packageJson.version;
|
|
271
299
|
}
|
|
272
300
|
|
|
273
301
|
// compatibility with older versions
|
|
274
|
-
export {
|
|
275
|
-
getNetwork,
|
|
276
|
-
mainActor,
|
|
277
|
-
storageActor,
|
|
278
|
-
getHighestVersion,
|
|
279
|
-
};
|
|
302
|
+
export { getNetwork, mainActor, storageActor, getHighestVersion };
|
package/notify-installs.ts
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
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
|
|
|
5
|
-
export async function notifyInstalls(installedDeps
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export async function notifyInstalls(installedDeps: Record<string, string>) {
|
|
6
|
+
let packages = Object.entries(installedDeps)
|
|
7
|
+
.filter(([_, version]) => getDependencyType(version) === "mops")
|
|
8
|
+
.map(([name, version]) => [getDepName(name), version] as [string, string]);
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
if (packages.length) {
|
|
11
|
+
let actor = await mainActor();
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
13
|
+
try {
|
|
14
|
+
await actor.notifyInstalls(packages);
|
|
15
|
+
} catch (err) {
|
|
16
|
+
// console.error('Failed to notify installs:', err);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
package/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": "dist/bin/mops.js",
|
|
@@ -15,33 +15,39 @@
|
|
|
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"
|
|
29
30
|
},
|
|
30
31
|
"scripts": {
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
32
|
+
"mops": "tsx ./environments/nodejs/cli",
|
|
33
|
+
"build": "run-s prepare bundle",
|
|
34
|
+
"build:wasm": "run-s build:wasm:nodejs build:wasm:web",
|
|
35
|
+
"build:wasm:nodejs": "wasm-pack build wasm --target nodejs --out-dir pkg/nodejs && rm wasm/pkg/nodejs/.gitignore",
|
|
36
|
+
"build:wasm:web": "wasm-pack build wasm --target web --out-dir pkg/web && rm wasm/pkg/web/.gitignore",
|
|
37
|
+
"dist": "npm run build:wasm && tsc && mkdir -p dist/wasm && cp -r wasm/pkg dist/wasm",
|
|
38
|
+
"bundle": "rm -rf ./bundle && bun build ./environments/web/cli.ts --outdir ./bundle --target node --minify --external @napi-rs/lzma --external fsevents --format esm --define '__dirname=import.meta.dirname' && run-s bundle:fix bundle:copy bundle:package-json bundle:tar",
|
|
34
39
|
"bundle:fix": "rexreplace 'new URL\\(\"\\.\\./templates' 'new URL(\"./templates' bundle/cli.js && rexreplace 'resolve\\(\".*?/xhr-sync-worker\\.js\"\\)' 'resolve(\"./xhr-sync-worker.js\")' bundle/cli.js && rexreplace '\"import.meta.dirname\",\"wasm_bg.wasm\"' 'import.meta.dirname || new URL(\".\", import.meta.url).pathname,\"wasm_bg.wasm\"' bundle/cli.js",
|
|
35
40
|
"bundle:copy": "cp -r commands/bench bundle && cp -r bin declarations templates package.json bundle && cp -r node_modules/prettier-plugin-motoko/wasm/pkg/nodejs/wasm_bg.wasm node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js bundle",
|
|
36
41
|
"bundle:package-json": "tsx bundle-package-json.ts",
|
|
37
42
|
"bundle:tar": "rm -f bundle/cli.tgz && touch -t 200101010101 bundle/cli.tgz && find bundle -exec touch -d '1970-01-01 00:00:00' {} + && tar --sort name --exclude bundle/cli.tgz -cvf - bundle | gzip -n > bundle/cli.tgz",
|
|
38
43
|
"copy": "cp -r commands/bench dist/commands && cp -r declarations templates package.json bin dist | true",
|
|
39
|
-
"prepare": "rm -rf dist &&
|
|
44
|
+
"prepare": "rm -rf dist && run-s dist copy fix-dist",
|
|
40
45
|
"fix-dist": "tsx ./fix-dist.ts",
|
|
41
46
|
"release": "tsx release-cli.ts",
|
|
42
47
|
"check": "tsc --project tsconfig.json --noEmit",
|
|
43
48
|
"tsc": "tsc",
|
|
44
|
-
"esbuild": "esbuild"
|
|
49
|
+
"esbuild": "esbuild",
|
|
50
|
+
"test": "NODE_OPTIONS=\"--experimental-vm-modules\" jest"
|
|
45
51
|
},
|
|
46
52
|
"dependencies": {
|
|
47
53
|
"@iarna/toml": "2.2.5",
|
|
@@ -103,8 +109,11 @@
|
|
|
103
109
|
"@types/tar": "6.1.13",
|
|
104
110
|
"esbuild": "0.23.1",
|
|
105
111
|
"eslint": "8.57.0",
|
|
112
|
+
"npm-run-all": "4.1.5",
|
|
106
113
|
"rexreplace": "7.1.13",
|
|
114
|
+
"ts-jest": "29.4.5",
|
|
107
115
|
"tsx": "4.19.2",
|
|
108
|
-
"typescript": "5.9.2"
|
|
116
|
+
"typescript": "5.9.2",
|
|
117
|
+
"wasm-pack": "0.13.1"
|
|
109
118
|
}
|
|
110
119
|
}
|