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,9 +1,9 @@
|
|
|
1
|
-
import { execSync } from
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
2
|
export function getDfxVersion() {
|
|
3
3
|
try {
|
|
4
|
-
let res = execSync(
|
|
5
|
-
return res.trim().split(
|
|
4
|
+
let res = execSync("dfx --version").toString();
|
|
5
|
+
return res.trim().split("dfx ")[1] || "";
|
|
6
6
|
}
|
|
7
7
|
catch { }
|
|
8
|
-
return
|
|
8
|
+
return "";
|
|
9
9
|
}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
|
-
import process from
|
|
2
|
-
import { execFileSync } from
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import { execFileSync } from "node:child_process";
|
|
3
3
|
export function getMocPath(throwIfNotFound = false) {
|
|
4
4
|
let mocPath = process.env.DFX_MOC_PATH;
|
|
5
5
|
if (!mocPath) {
|
|
6
6
|
try {
|
|
7
|
-
mocPath =
|
|
7
|
+
mocPath =
|
|
8
|
+
execFileSync("dfx", ["cache", "show"]).toString().trim() + "/moc";
|
|
8
9
|
}
|
|
9
10
|
catch (e) {
|
|
10
|
-
mocPath =
|
|
11
|
+
mocPath = "";
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
if (!mocPath) {
|
|
14
|
-
mocPath =
|
|
15
|
+
mocPath = "moc";
|
|
15
16
|
}
|
|
16
17
|
if (throwIfNotFound) {
|
|
17
18
|
try {
|
|
18
|
-
execFileSync(mocPath, [
|
|
19
|
+
execFileSync(mocPath, ["--version"]);
|
|
19
20
|
}
|
|
20
21
|
catch (e) {
|
|
21
22
|
console.error(e);
|
|
22
|
-
throw new Error(
|
|
23
|
+
throw new Error("moc not found");
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
return mocPath;
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import { execFileSync } from
|
|
2
|
-
import { getMocPath } from
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { getMocPath } from "./get-moc-path.js";
|
|
3
3
|
export function getMocVersion(throwOnError = false) {
|
|
4
4
|
let mocPath = getMocPath(false);
|
|
5
5
|
if (!mocPath) {
|
|
6
|
-
return
|
|
6
|
+
return "";
|
|
7
7
|
}
|
|
8
8
|
try {
|
|
9
|
-
let match = execFileSync(mocPath, [
|
|
10
|
-
|
|
9
|
+
let match = execFileSync(mocPath, ["--version"])
|
|
10
|
+
.toString()
|
|
11
|
+
.trim()
|
|
12
|
+
.match(/Motoko compiler ([^\s]+) .*/);
|
|
13
|
+
return match?.[1] || "";
|
|
11
14
|
}
|
|
12
15
|
catch (e) {
|
|
13
16
|
if (throwOnError) {
|
|
14
17
|
console.error(e);
|
|
15
|
-
throw new Error(
|
|
18
|
+
throw new Error("moc not found");
|
|
16
19
|
}
|
|
17
|
-
return
|
|
20
|
+
return "";
|
|
18
21
|
}
|
|
19
22
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isCandidCompatible(newPath: string, originalPath: string): Promise<boolean>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { readFile, access } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { getWasmBindings } from "../wasm.js";
|
|
4
|
+
export async function isCandidCompatible(newPath, originalPath) {
|
|
5
|
+
try {
|
|
6
|
+
await access(newPath);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
throw new Error(`Candid file not found: ${newPath}`);
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
await access(originalPath);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
throw new Error(`Candid file not found: ${originalPath}`);
|
|
16
|
+
}
|
|
17
|
+
const newText = await readFile(path.resolve(newPath), "utf8");
|
|
18
|
+
const originalText = await readFile(path.resolve(originalPath), "utf8");
|
|
19
|
+
return getWasmBindings().is_candid_compatible(newText, originalText);
|
|
20
|
+
}
|
package/dist/integrity.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ type LockFileV3 = {
|
|
|
15
15
|
deps: Record<string, string>;
|
|
16
16
|
};
|
|
17
17
|
type LockFile = LockFileV1 | LockFileV2 | LockFileV3;
|
|
18
|
-
export declare function checkIntegrity(lock?:
|
|
18
|
+
export declare function checkIntegrity(lock?: "check" | "update" | "ignore"): Promise<void>;
|
|
19
19
|
export declare function getLocalFileHash(fileId: string): string;
|
|
20
20
|
export declare function checkRemote(): Promise<void>;
|
|
21
21
|
export declare function readLockFile(): LockFile | null;
|
package/dist/integrity.js
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import process from
|
|
2
|
-
import fs from
|
|
3
|
-
import path from
|
|
4
|
-
import { sha256 } from
|
|
5
|
-
import { bytesToHex } from
|
|
6
|
-
import { getDependencyType, getRootDir, readConfig } from
|
|
7
|
-
import { mainActor } from
|
|
8
|
-
import { resolvePackages } from
|
|
9
|
-
import { getPackageId } from
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { sha256 } from "@noble/hashes/sha256";
|
|
5
|
+
import { bytesToHex } from "@noble/hashes/utils";
|
|
6
|
+
import { getDependencyType, getRootDir, readConfig } from "./mops.js";
|
|
7
|
+
import { mainActor } from "./api/actors.js";
|
|
8
|
+
import { resolvePackages } from "./resolve-packages.js";
|
|
9
|
+
import { getPackageId } from "./helpers/get-package-id.js";
|
|
10
10
|
export async function checkIntegrity(lock) {
|
|
11
11
|
let force = !!lock;
|
|
12
|
-
if (!lock &&
|
|
13
|
-
|
|
12
|
+
if (!lock &&
|
|
13
|
+
!process.env["CI"] &&
|
|
14
|
+
fs.existsSync(path.join(getRootDir(), "mops.lock"))) {
|
|
15
|
+
lock = "update";
|
|
14
16
|
}
|
|
15
17
|
if (!lock) {
|
|
16
|
-
lock = process.env[
|
|
18
|
+
lock = process.env["CI"] ? "check" : "ignore";
|
|
17
19
|
}
|
|
18
|
-
if (lock ===
|
|
20
|
+
if (lock === "update") {
|
|
19
21
|
await updateLockFile();
|
|
20
22
|
await checkLockFile(force);
|
|
21
23
|
}
|
|
22
|
-
else if (lock ===
|
|
24
|
+
else if (lock === "check") {
|
|
23
25
|
await checkLockFile(force);
|
|
24
26
|
}
|
|
25
27
|
}
|
|
@@ -32,14 +34,14 @@ async function getFileHashesFromRegistry() {
|
|
|
32
34
|
async function getResolvedMopsPackageIds() {
|
|
33
35
|
let resolvedPackages = await resolvePackages();
|
|
34
36
|
let packageIds = Object.entries(resolvedPackages)
|
|
35
|
-
.filter(([_, version]) => getDependencyType(version) ===
|
|
37
|
+
.filter(([_, version]) => getDependencyType(version) === "mops")
|
|
36
38
|
.map(([name, version]) => getPackageId(name, version));
|
|
37
39
|
return packageIds;
|
|
38
40
|
}
|
|
39
41
|
// get hash of local file from '.mops' dir by fileId
|
|
40
42
|
export function getLocalFileHash(fileId) {
|
|
41
43
|
let rootDir = getRootDir();
|
|
42
|
-
let file = path.join(rootDir,
|
|
44
|
+
let file = path.join(rootDir, ".mops", fileId);
|
|
43
45
|
if (!fs.existsSync(file)) {
|
|
44
46
|
console.error(`Missing file ${fileId} in .mops dir`);
|
|
45
47
|
process.exit(1);
|
|
@@ -48,16 +50,22 @@ export function getLocalFileHash(fileId) {
|
|
|
48
50
|
return bytesToHex(sha256(fileData));
|
|
49
51
|
}
|
|
50
52
|
function getMopsTomlHash() {
|
|
51
|
-
return bytesToHex(sha256(fs.readFileSync(getRootDir() +
|
|
53
|
+
return bytesToHex(sha256(fs.readFileSync(getRootDir() + "/mops.toml")));
|
|
52
54
|
}
|
|
53
55
|
function getMopsTomlDepsHash() {
|
|
54
56
|
let config = readConfig();
|
|
55
57
|
let deps = config.dependencies || {};
|
|
56
|
-
let devDeps = config[
|
|
58
|
+
let devDeps = config["dev-dependencies"] || {};
|
|
57
59
|
let allDeps = { ...deps, ...devDeps };
|
|
58
60
|
// sort allDeps by key
|
|
59
|
-
let sortedDeps = Object.keys(allDeps)
|
|
60
|
-
|
|
61
|
+
let sortedDeps = Object.keys(allDeps)
|
|
62
|
+
.sort()
|
|
63
|
+
.reduce((acc, key) => {
|
|
64
|
+
acc[key] =
|
|
65
|
+
allDeps[key]?.version ||
|
|
66
|
+
allDeps[key]?.repo ||
|
|
67
|
+
allDeps[key]?.path ||
|
|
68
|
+
"";
|
|
61
69
|
return acc;
|
|
62
70
|
}, {});
|
|
63
71
|
return bytesToHex(sha256(JSON.stringify(sortedDeps)));
|
|
@@ -71,7 +79,7 @@ export async function checkRemote() {
|
|
|
71
79
|
let remoteHash = new Uint8Array(hash);
|
|
72
80
|
let localHash = getLocalFileHash(fileId);
|
|
73
81
|
if (localHash !== bytesToHex(remoteHash)) {
|
|
74
|
-
console.error(
|
|
82
|
+
console.error("Integrity check failed.");
|
|
75
83
|
console.error(`Mismatched hash for ${fileId}: ${localHash} vs ${bytesToHex(remoteHash)}`);
|
|
76
84
|
process.exit(1);
|
|
77
85
|
}
|
|
@@ -80,7 +88,7 @@ export async function checkRemote() {
|
|
|
80
88
|
}
|
|
81
89
|
export function readLockFile() {
|
|
82
90
|
let rootDir = getRootDir();
|
|
83
|
-
let lockFile = path.join(rootDir,
|
|
91
|
+
let lockFile = path.join(rootDir, "mops.lock");
|
|
84
92
|
if (fs.existsSync(lockFile)) {
|
|
85
93
|
return JSON.parse(fs.readFileSync(lockFile).toString());
|
|
86
94
|
}
|
|
@@ -91,7 +99,8 @@ export function checkLockFileLight() {
|
|
|
91
99
|
let existingLockFileJson = readLockFile();
|
|
92
100
|
if (existingLockFileJson) {
|
|
93
101
|
let mopsTomlDepsHash = getMopsTomlDepsHash();
|
|
94
|
-
if (existingLockFileJson.version === 3 &&
|
|
102
|
+
if (existingLockFileJson.version === 3 &&
|
|
103
|
+
mopsTomlDepsHash === existingLockFileJson.mopsTomlDepsHash) {
|
|
95
104
|
return true;
|
|
96
105
|
}
|
|
97
106
|
}
|
|
@@ -117,18 +126,18 @@ export async function updateLockFile() {
|
|
|
117
126
|
}, {}),
|
|
118
127
|
};
|
|
119
128
|
let rootDir = getRootDir();
|
|
120
|
-
let lockFile = path.join(rootDir,
|
|
129
|
+
let lockFile = path.join(rootDir, "mops.lock");
|
|
121
130
|
fs.writeFileSync(lockFile, JSON.stringify(lockFileJson, null, 2));
|
|
122
131
|
}
|
|
123
132
|
// compare hashes of local files with hashes from the lock file
|
|
124
133
|
export async function checkLockFile(force = false) {
|
|
125
134
|
let supportedVersions = [1, 2, 3];
|
|
126
135
|
let rootDir = getRootDir();
|
|
127
|
-
let lockFile = path.join(rootDir,
|
|
136
|
+
let lockFile = path.join(rootDir, "mops.lock");
|
|
128
137
|
// check if lock file exists
|
|
129
138
|
if (!fs.existsSync(lockFile)) {
|
|
130
139
|
if (force) {
|
|
131
|
-
console.error(
|
|
140
|
+
console.error("Missing lock file. Run `mops install` to generate it.");
|
|
132
141
|
process.exit(1);
|
|
133
142
|
}
|
|
134
143
|
return;
|
|
@@ -137,16 +146,16 @@ export async function checkLockFile(force = false) {
|
|
|
137
146
|
let packageIds = await getResolvedMopsPackageIds();
|
|
138
147
|
// check lock file version
|
|
139
148
|
if (!supportedVersions.includes(lockFileJsonGeneric.version)) {
|
|
140
|
-
console.error(
|
|
141
|
-
console.error(`Invalid lock file version: ${lockFileJsonGeneric.version}. Supported versions: ${supportedVersions.join(
|
|
149
|
+
console.error("Integrity check failed");
|
|
150
|
+
console.error(`Invalid lock file version: ${lockFileJsonGeneric.version}. Supported versions: ${supportedVersions.join(", ")}`);
|
|
142
151
|
process.exit(1);
|
|
143
152
|
}
|
|
144
153
|
let lockFileJson = lockFileJsonGeneric;
|
|
145
154
|
// V1: check mops.toml hash
|
|
146
155
|
if (lockFileJson.version === 1) {
|
|
147
156
|
if (lockFileJson.mopsTomlHash !== getMopsTomlHash()) {
|
|
148
|
-
console.error(
|
|
149
|
-
console.error(
|
|
157
|
+
console.error("Integrity check failed");
|
|
158
|
+
console.error("Mismatched mops.toml hash");
|
|
150
159
|
console.error(`Locked hash: ${lockFileJson.mopsTomlHash}`);
|
|
151
160
|
console.error(`Actual hash: ${getMopsTomlHash()}`);
|
|
152
161
|
process.exit(1);
|
|
@@ -155,8 +164,8 @@ export async function checkLockFile(force = false) {
|
|
|
155
164
|
// V2, V3: check mops.toml deps hash
|
|
156
165
|
if (lockFileJson.version === 2 || lockFileJson.version === 3) {
|
|
157
166
|
if (lockFileJson.mopsTomlDepsHash !== getMopsTomlDepsHash()) {
|
|
158
|
-
console.error(
|
|
159
|
-
console.error(
|
|
167
|
+
console.error("Integrity check failed");
|
|
168
|
+
console.error("Mismatched mops.toml dependencies hash");
|
|
160
169
|
console.error(`Locked hash: ${lockFileJson.mopsTomlDepsHash}`);
|
|
161
170
|
console.error(`Actual hash: ${getMopsTomlDepsHash()}`);
|
|
162
171
|
process.exit(1);
|
|
@@ -168,7 +177,7 @@ export async function checkLockFile(force = false) {
|
|
|
168
177
|
let resolvedDeps = await resolvePackages();
|
|
169
178
|
for (let name of Object.keys(resolvedDeps)) {
|
|
170
179
|
if (lockedDeps[name] !== resolvedDeps[name]) {
|
|
171
|
-
console.error(
|
|
180
|
+
console.error("Integrity check failed");
|
|
172
181
|
console.error(`Mismatched package ${name}`);
|
|
173
182
|
console.error(`Locked: ${lockedDeps[name]}`);
|
|
174
183
|
console.error(`Actual: ${resolvedDeps[name]}`);
|
|
@@ -178,14 +187,14 @@ export async function checkLockFile(force = false) {
|
|
|
178
187
|
}
|
|
179
188
|
// check number of packages
|
|
180
189
|
if (Object.keys(lockFileJson.hashes).length !== packageIds.length) {
|
|
181
|
-
console.error(
|
|
190
|
+
console.error("Integrity check failed");
|
|
182
191
|
console.error(`Mismatched number of resolved packages: ${JSON.stringify(Object.keys(lockFileJson.hashes).length)} vs ${JSON.stringify(packageIds.length)}`);
|
|
183
192
|
process.exit(1);
|
|
184
193
|
}
|
|
185
194
|
// check if resolved packages are in the lock file
|
|
186
195
|
for (let packageId of packageIds) {
|
|
187
196
|
if (!(packageId in lockFileJson.hashes)) {
|
|
188
|
-
console.error(
|
|
197
|
+
console.error("Integrity check failed");
|
|
189
198
|
console.error(`Missing package ${packageId} in lock file`);
|
|
190
199
|
process.exit(1);
|
|
191
200
|
}
|
|
@@ -193,21 +202,21 @@ export async function checkLockFile(force = false) {
|
|
|
193
202
|
for (let [packageId, hashes] of Object.entries(lockFileJson.hashes)) {
|
|
194
203
|
// check if package is in resolved packages
|
|
195
204
|
if (!packageIds.includes(packageId)) {
|
|
196
|
-
console.error(
|
|
205
|
+
console.error("Integrity check failed");
|
|
197
206
|
console.error(`Package ${packageId} in lock file but not in resolved packages`);
|
|
198
207
|
process.exit(1);
|
|
199
208
|
}
|
|
200
209
|
for (let [fileId, lockedHash] of Object.entries(hashes)) {
|
|
201
210
|
// check if file belongs to package
|
|
202
211
|
if (!fileId.startsWith(packageId)) {
|
|
203
|
-
console.error(
|
|
212
|
+
console.error("Integrity check failed");
|
|
204
213
|
console.error(`File ${fileId} in lock file does not belong to package ${packageId}`);
|
|
205
214
|
process.exit(1);
|
|
206
215
|
}
|
|
207
216
|
// local file hash vs hash from lock file
|
|
208
217
|
let localHash = getLocalFileHash(fileId);
|
|
209
218
|
if (lockedHash !== localHash) {
|
|
210
|
-
console.error(
|
|
219
|
+
console.error("Integrity check failed");
|
|
211
220
|
console.error(`Mismatched hash for ${fileId}`);
|
|
212
221
|
console.error(`Locked hash: ${lockedHash}`);
|
|
213
222
|
console.error(`Actual hash: ${localHash}`);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** @type {import("jest").Config} **/
|
|
2
|
+
export default {
|
|
3
|
+
preset: "ts-jest/presets/default-esm",
|
|
4
|
+
testPathIgnorePatterns: [
|
|
5
|
+
"<rootDir>/node_modules/",
|
|
6
|
+
"<rootDir>/dist/",
|
|
7
|
+
"<rootDir>/bundle/",
|
|
8
|
+
"<rootDir>/commands/"
|
|
9
|
+
],
|
|
10
|
+
transform: {
|
|
11
|
+
"^.+\\.tsx?$": ["ts-jest", { useESM: true }],
|
|
12
|
+
},
|
|
13
|
+
testTimeout: 60000,
|
|
14
|
+
};
|
package/dist/mops.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Identity } from
|
|
2
|
-
import { Config, Dependency } from
|
|
3
|
-
import { mainActor, storageActor } from
|
|
4
|
-
import { getNetwork } from
|
|
5
|
-
import { getHighestVersion } from
|
|
1
|
+
import { Identity } from "@icp-sdk/core/agent";
|
|
2
|
+
import { Config, Dependency } from "./types.js";
|
|
3
|
+
import { mainActor, storageActor } from "./api/actors.js";
|
|
4
|
+
import { getNetwork } from "./api/network.js";
|
|
5
|
+
import { getHighestVersion } from "./api/getHighestVersion.js";
|
|
6
6
|
export declare let apiVersion: string;
|
|
7
7
|
export declare let globalConfigDir: string;
|
|
8
8
|
export declare let globalCacheDir: string;
|
|
@@ -29,4 +29,4 @@ export declare function formatGithubDir(name: string, repo: string): string;
|
|
|
29
29
|
export declare function readDfxJson(): any;
|
|
30
30
|
export declare function checkApiCompatibility(): Promise<boolean>;
|
|
31
31
|
export declare function version(): any;
|
|
32
|
-
export { getNetwork, mainActor, storageActor, getHighestVersion
|
|
32
|
+
export { getNetwork, mainActor, storageActor, getHighestVersion };
|