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/.DS_Store
CHANGED
|
Binary file
|
package/.eslintrc.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
2
|
+
"env": {
|
|
3
|
+
"node": true
|
|
4
|
+
},
|
|
5
|
+
"parserOptions": {
|
|
6
|
+
"sourceType": "module"
|
|
7
|
+
}
|
|
8
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Mops CLI Changelog
|
|
2
2
|
|
|
3
|
+
## Next
|
|
4
|
+
- `mops publish` add support for subheadings in changelog (by @f0i)
|
|
5
|
+
- `mops toolchain` now downloads `moc.js` in addition to `moc` binary
|
|
6
|
+
- New `mops build` subcommand (alternative to `dfx build`)
|
|
7
|
+
- `core` package used in place of `base` for benchmarks
|
|
8
|
+
|
|
3
9
|
## 1.12.0
|
|
4
10
|
- Add pinned dependencies support to `mops update` and `mops outdated` commands
|
|
5
11
|
- Add support for pocket-ic v9
|
package/api/actors.ts
CHANGED
|
@@ -1,53 +1,57 @@
|
|
|
1
|
-
import {Actor, HttpAgent, Identity} from
|
|
2
|
-
import {Principal} from
|
|
1
|
+
import { Actor, HttpAgent, Identity } from "@icp-sdk/core/agent";
|
|
2
|
+
import { Principal } from "@icp-sdk/core/principal";
|
|
3
3
|
|
|
4
|
-
import {_SERVICE, idlFactory} from
|
|
5
|
-
import {idlFactory as storageIdlFactory} from
|
|
6
|
-
import {_SERVICE as _STORAGE_SERVICE} from
|
|
4
|
+
import { _SERVICE, idlFactory } from "../declarations/main/main.did.js";
|
|
5
|
+
import { idlFactory as storageIdlFactory } from "../declarations/storage/storage.did.js";
|
|
6
|
+
import { _SERVICE as _STORAGE_SERVICE } from "../declarations/storage/storage.did.js";
|
|
7
7
|
|
|
8
|
-
import {getEndpoint} from
|
|
9
|
-
import {getNetwork} from
|
|
8
|
+
import { getEndpoint } from "./network.js";
|
|
9
|
+
import { getNetwork } from "./network.js";
|
|
10
10
|
|
|
11
11
|
let agentPromiseByPrincipal = new Map<string, Promise<HttpAgent>>();
|
|
12
12
|
|
|
13
|
-
let getAgent = async (identity
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
let getAgent = async (identity?: Identity): Promise<HttpAgent> => {
|
|
14
|
+
let principal = identity ? identity?.getPrincipal().toText() : "";
|
|
15
|
+
let agentPromise = agentPromiseByPrincipal.get(principal);
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
if (!agentPromise) {
|
|
18
|
+
let network = getNetwork();
|
|
19
|
+
let host = getEndpoint(network).host;
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
agentPromise = HttpAgent.create({
|
|
22
|
+
host,
|
|
23
|
+
identity,
|
|
24
|
+
shouldFetchRootKey: network === "local",
|
|
25
|
+
verifyQuerySignatures:
|
|
26
|
+
process.env.MOPS_VERIFY_QUERY_SIGNATURES !== "false",
|
|
27
|
+
shouldSyncTime: true,
|
|
28
|
+
});
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
agentPromiseByPrincipal.set(principal, agentPromise);
|
|
31
|
+
}
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
return agentPromise;
|
|
33
34
|
};
|
|
34
35
|
|
|
35
|
-
export let mainActor = async (identity
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
export let mainActor = async (identity?: Identity): Promise<_SERVICE> => {
|
|
37
|
+
let agent = await getAgent(identity);
|
|
38
|
+
let network = getNetwork();
|
|
39
|
+
let canisterId = getEndpoint(network).canisterId;
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
return Actor.createActor(idlFactory, {
|
|
42
|
+
agent,
|
|
43
|
+
canisterId,
|
|
44
|
+
});
|
|
44
45
|
};
|
|
45
46
|
|
|
46
|
-
export let storageActor = async (
|
|
47
|
-
|
|
47
|
+
export let storageActor = async (
|
|
48
|
+
storageId: Principal,
|
|
49
|
+
identity?: Identity,
|
|
50
|
+
): Promise<_STORAGE_SERVICE> => {
|
|
51
|
+
let agent = await getAgent(identity);
|
|
48
52
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
return Actor.createActor(storageIdlFactory, {
|
|
54
|
+
agent,
|
|
55
|
+
canisterId: storageId,
|
|
56
|
+
});
|
|
53
57
|
};
|
|
@@ -1,81 +1,95 @@
|
|
|
1
|
-
import {Principal} from
|
|
2
|
-
import {mainActor, storageActor} from
|
|
3
|
-
import {resolveVersion} from
|
|
4
|
-
import {parallel} from
|
|
5
|
-
import {Storage} from
|
|
1
|
+
import { Principal } from "@icp-sdk/core/principal";
|
|
2
|
+
import { mainActor, storageActor } from "./actors.js";
|
|
3
|
+
import { resolveVersion } from "./resolveVersion.js";
|
|
4
|
+
import { parallel } from "../parallel.js";
|
|
5
|
+
import { Storage } from "../declarations/storage/storage.did.js";
|
|
6
6
|
|
|
7
|
-
export async function downloadPackageFiles(
|
|
8
|
-
|
|
7
|
+
export async function downloadPackageFiles(
|
|
8
|
+
pkg: string,
|
|
9
|
+
version = "",
|
|
10
|
+
threads = 8,
|
|
11
|
+
onLoad = (_fileIds: string[], _fileId: string) => {},
|
|
12
|
+
): Promise<Map<string, Array<number>>> {
|
|
13
|
+
version = await resolveVersion(pkg, version);
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
let { storageId, fileIds } = await getPackageFilesInfo(pkg, version);
|
|
16
|
+
let storage = await storageActor(storageId);
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
let filesData = new Map<string, Array<number>>();
|
|
19
|
+
await parallel(threads, fileIds, async (fileId: string) => {
|
|
20
|
+
let { path, data } = await downloadFile(storage, fileId);
|
|
21
|
+
filesData.set(path, data);
|
|
22
|
+
onLoad(fileIds, fileId);
|
|
23
|
+
});
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
return filesData;
|
|
21
26
|
}
|
|
22
27
|
|
|
23
28
|
// get package files meta
|
|
24
|
-
export async function getPackageFilesInfo(
|
|
25
|
-
|
|
29
|
+
export async function getPackageFilesInfo(
|
|
30
|
+
pkg: string,
|
|
31
|
+
version: string,
|
|
32
|
+
): Promise<{ storageId: Principal; fileIds: string[] }> {
|
|
33
|
+
let actor = await mainActor();
|
|
26
34
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
let [packageDetailsRes, fileIds] = await Promise.all([
|
|
36
|
+
actor.getPackageDetails(pkg, version),
|
|
37
|
+
getFileIds(pkg, version),
|
|
38
|
+
]);
|
|
31
39
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
if ("err" in packageDetailsRes) {
|
|
41
|
+
throw packageDetailsRes.err;
|
|
42
|
+
}
|
|
43
|
+
let packageDetails = packageDetailsRes.ok;
|
|
36
44
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
45
|
+
return {
|
|
46
|
+
storageId: packageDetails.publication.storage,
|
|
47
|
+
fileIds,
|
|
48
|
+
};
|
|
41
49
|
}
|
|
42
50
|
|
|
43
51
|
// get package files ids
|
|
44
|
-
export async function getFileIds(
|
|
45
|
-
|
|
46
|
-
|
|
52
|
+
export async function getFileIds(
|
|
53
|
+
pkg: string,
|
|
54
|
+
version: string,
|
|
55
|
+
): Promise<string[]> {
|
|
56
|
+
let actor = await mainActor();
|
|
57
|
+
let fileIdsRes = await actor.getFileIds(pkg, version);
|
|
47
58
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
59
|
+
if ("err" in fileIdsRes) {
|
|
60
|
+
throw fileIdsRes.err;
|
|
61
|
+
}
|
|
62
|
+
let filesIds = fileIdsRes.ok;
|
|
52
63
|
|
|
53
|
-
|
|
64
|
+
return filesIds;
|
|
54
65
|
}
|
|
55
66
|
|
|
56
67
|
// download single file
|
|
57
|
-
export async function downloadFile(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
export async function downloadFile(
|
|
69
|
+
storage: Storage | string,
|
|
70
|
+
fileId: string,
|
|
71
|
+
): Promise<{ path: string; data: Array<number> }> {
|
|
72
|
+
if (typeof storage === "string") {
|
|
73
|
+
storage = await storageActor(Principal.fromText(storage));
|
|
74
|
+
}
|
|
75
|
+
let fileMetaRes = await storage.getFileMeta(fileId);
|
|
76
|
+
if ("err" in fileMetaRes) {
|
|
77
|
+
throw fileMetaRes.err;
|
|
78
|
+
}
|
|
79
|
+
let fileMeta = fileMetaRes.ok;
|
|
66
80
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
81
|
+
let data: Array<number> = [];
|
|
82
|
+
for (let i = 0n; i < fileMeta.chunkCount; i++) {
|
|
83
|
+
let chunkRes = await storage.downloadChunk(fileId, i);
|
|
84
|
+
if ("err" in chunkRes) {
|
|
85
|
+
throw chunkRes.err;
|
|
86
|
+
}
|
|
87
|
+
let chunk = chunkRes.ok;
|
|
88
|
+
data = [...data, ...chunk];
|
|
89
|
+
}
|
|
76
90
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
91
|
+
return {
|
|
92
|
+
path: fileMeta.path,
|
|
93
|
+
data: data,
|
|
94
|
+
};
|
|
95
|
+
}
|
package/api/getHighestVersion.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {mainActor} from
|
|
1
|
+
import { mainActor } from "./actors.js";
|
|
2
2
|
|
|
3
|
-
export async function getHighestVersion(pkgName
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
3
|
+
export async function getHighestVersion(pkgName: string) {
|
|
4
|
+
let actor = await mainActor();
|
|
5
|
+
return actor.getHighestVersion(pkgName);
|
|
6
|
+
}
|
package/api/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {mainActor, storageActor} from
|
|
2
|
-
export {downloadPackageFiles} from
|
|
3
|
-
export {getEndpoint, getNetwork} from
|
|
4
|
-
export {resolveVersion} from
|
|
1
|
+
export { mainActor, storageActor } from "./actors.js";
|
|
2
|
+
export { downloadPackageFiles } from "./downloadPackageFiles.js";
|
|
3
|
+
export { getEndpoint, getNetwork } from "./network.js";
|
|
4
|
+
export { resolveVersion } from "./resolveVersion.js";
|
package/api/network.ts
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
export function getNetwork() {
|
|
2
|
-
|
|
2
|
+
return globalThis.MOPS_NETWORK || "ic";
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
export function getEndpoint(network
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
}
|
|
5
|
+
export function getEndpoint(network: string) {
|
|
6
|
+
if (network === "staging") {
|
|
7
|
+
return {
|
|
8
|
+
host: "https://icp-api.io",
|
|
9
|
+
canisterId: "2d2zu-vaaaa-aaaak-qb6pq-cai",
|
|
10
|
+
};
|
|
11
|
+
} else if (network === "ic") {
|
|
12
|
+
return {
|
|
13
|
+
host: "https://icp-api.io",
|
|
14
|
+
canisterId: "oknww-riaaa-aaaam-qaf6a-cai",
|
|
15
|
+
};
|
|
16
|
+
} else {
|
|
17
|
+
return {
|
|
18
|
+
host: "http://127.0.0.1:4943",
|
|
19
|
+
canisterId: "2d2zu-vaaaa-aaaak-qb6pq-cai",
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
package/api/resolveVersion.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import {getHighestVersion} from
|
|
1
|
+
import { getHighestVersion } from "./getHighestVersion.js";
|
|
2
2
|
|
|
3
|
-
export async function resolveVersion(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
export async function resolveVersion(
|
|
4
|
+
pkg: string,
|
|
5
|
+
version = "",
|
|
6
|
+
): Promise<string> {
|
|
7
|
+
if (!version) {
|
|
8
|
+
let versionRes = await getHighestVersion(pkg);
|
|
9
|
+
if ("err" in versionRes) {
|
|
10
|
+
throw versionRes.err;
|
|
11
|
+
}
|
|
12
|
+
version = versionRes.ok;
|
|
13
|
+
}
|
|
14
|
+
return version;
|
|
15
|
+
}
|
package/bin/mops.js
CHANGED
|
@@ -10,104 +10,112 @@ import Bench "mo:bench";
|
|
|
10
10
|
|
|
11
11
|
import UserBench "./user-bench"; // file path will be replaced with the *.bench.mo file path
|
|
12
12
|
|
|
13
|
-
persistent actor class() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
13
|
+
persistent actor class () {
|
|
14
|
+
type BenchResult = {
|
|
15
|
+
instructions : Int;
|
|
16
|
+
rts_mutator_instructions : Int;
|
|
17
|
+
stable_memory_size : Int;
|
|
18
|
+
rts_stable_memory_size : Int;
|
|
19
|
+
rts_logical_stable_memory_size : Int;
|
|
20
|
+
rts_collector_instructions : Int;
|
|
21
|
+
rts_heap_size : Int;
|
|
22
|
+
rts_memory_size : Int;
|
|
23
|
+
rts_total_allocation : Int;
|
|
24
|
+
rts_reclaimed : Int;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
transient var benchOpt : ?Bench.Bench = null;
|
|
28
|
+
|
|
29
|
+
public func init() : async Bench.BenchSchema {
|
|
30
|
+
let bench = UserBench.init();
|
|
31
|
+
benchOpt := ?bench;
|
|
32
|
+
// ignore ExperimentalStableMemory.grow(1);
|
|
33
|
+
ignore Region.grow(Region.new(), 1);
|
|
34
|
+
bench.getSchema();
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
public query func getSchema() : async Bench.BenchSchema {
|
|
38
|
+
let ?bench = benchOpt else Debug.trap("bench not initialized");
|
|
39
|
+
bench.getSchema();
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
func _getStats() : BenchResult {
|
|
43
|
+
{
|
|
44
|
+
instructions = 0;
|
|
45
|
+
rts_heap_size = Prim.rts_heap_size();
|
|
46
|
+
stable_memory_size = Int64.toInt(Int64.fromNat64(ExperimentalStableMemory.size())) * 65536;
|
|
47
|
+
rts_stable_memory_size = Prim.rts_stable_memory_size();
|
|
48
|
+
rts_logical_stable_memory_size = Prim.rts_logical_stable_memory_size();
|
|
49
|
+
rts_memory_size = Prim.rts_memory_size();
|
|
50
|
+
rts_total_allocation = Prim.rts_total_allocation();
|
|
51
|
+
rts_reclaimed = Prim.rts_reclaimed();
|
|
52
|
+
rts_mutator_instructions = Prim.rts_mutator_instructions();
|
|
53
|
+
rts_collector_instructions = Prim.rts_collector_instructions();
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
func _diffStats(before : BenchResult, after : BenchResult) : BenchResult {
|
|
58
|
+
{
|
|
59
|
+
instructions = after.instructions - before.instructions;
|
|
60
|
+
rts_heap_size = after.rts_heap_size - before.rts_heap_size;
|
|
61
|
+
stable_memory_size = after.stable_memory_size - before.stable_memory_size;
|
|
62
|
+
rts_stable_memory_size = after.rts_stable_memory_size - before.rts_stable_memory_size;
|
|
63
|
+
rts_logical_stable_memory_size = after.rts_logical_stable_memory_size - before.rts_logical_stable_memory_size;
|
|
64
|
+
rts_memory_size = after.rts_memory_size - before.rts_memory_size;
|
|
65
|
+
rts_total_allocation = after.rts_total_allocation - before.rts_total_allocation;
|
|
66
|
+
rts_reclaimed = after.rts_reclaimed - before.rts_reclaimed;
|
|
67
|
+
rts_mutator_instructions = after.rts_mutator_instructions - before.rts_mutator_instructions;
|
|
68
|
+
rts_collector_instructions = after.rts_collector_instructions - before.rts_collector_instructions;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
func _runCell(rowIndex : Nat, colIndex : Nat) : BenchResult {
|
|
73
|
+
let ?bench = benchOpt else Debug.trap("bench not initialized");
|
|
74
|
+
let statsBefore = _getStats();
|
|
75
|
+
|
|
76
|
+
let instructions = Nat64.toNat(
|
|
77
|
+
ExperimentalInternetComputer.countInstructions(
|
|
78
|
+
func() {
|
|
79
|
+
bench.runCell(rowIndex, colIndex);
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
let statsAfter = _getStats();
|
|
85
|
+
_diffStats(statsBefore, { statsAfter with instructions });
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
func _runCellAwait(rowIndex : Nat, colIndex : Nat) : async BenchResult {
|
|
89
|
+
let ?bench = benchOpt else Debug.trap("bench not initialized");
|
|
90
|
+
let statsBefore = _getStats();
|
|
91
|
+
|
|
92
|
+
let instructions = Nat64.toNat(
|
|
93
|
+
ExperimentalInternetComputer.countInstructions(
|
|
94
|
+
func() {
|
|
95
|
+
bench.runCell(rowIndex, colIndex);
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
await (func() : async () {})();
|
|
101
|
+
|
|
102
|
+
let statsAfter = _getStats();
|
|
103
|
+
_diffStats(statsBefore, { statsAfter with instructions });
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
public query func getStats() : async BenchResult {
|
|
107
|
+
_getStats();
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
public query func runCellQuery(rowIndex : Nat, colIndex : Nat) : async BenchResult {
|
|
111
|
+
_runCell(rowIndex, colIndex);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
public func runCellUpdate(rowIndex : Nat, colIndex : Nat) : async BenchResult {
|
|
115
|
+
_runCell(rowIndex, colIndex);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
public func runCellUpdateAwait(rowIndex : Nat, colIndex : Nat) : async BenchResult {
|
|
119
|
+
await _runCellAwait(rowIndex, colIndex);
|
|
120
|
+
};
|
|
121
|
+
};
|
|
@@ -2,9 +2,9 @@ import Bench "mo:bench";
|
|
|
2
2
|
|
|
3
3
|
// placeholder file that will be replaced with the *.bench.mo file
|
|
4
4
|
module {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
5
|
+
public func init() : Bench.Bench {
|
|
6
|
+
let bench = Bench.Bench();
|
|
7
|
+
// benchmark code goes here...
|
|
8
|
+
bench;
|
|
9
|
+
};
|
|
10
|
+
};
|
package/bundle/bin/mops.js
CHANGED