ic-mops 1.12.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.DS_Store +0 -0
- package/.eslintrc.json +7 -7
- package/CHANGELOG.md +6 -0
- package/api/actors.ts +41 -37
- package/api/downloadPackageFiles.ts +75 -61
- package/api/getHighestVersion.ts +5 -5
- package/api/index.ts +4 -4
- package/api/network.ts +19 -21
- package/api/resolveVersion.ts +14 -11
- package/bin/mops.js +1 -1
- package/bundle/bench/bench-canister.mo +109 -101
- package/bundle/bench/user-bench.mo +6 -6
- package/bundle/bin/mops.js +1 -1
- package/bundle/cli.js +797 -792
- package/bundle/cli.tgz +0 -0
- package/bundle/package.json +6 -5
- package/bundle/templates/mops-publish.yml +3 -3
- package/bundle/templates/mops-test.yml +3 -3
- package/bundle/templates/src/lib.mo +13 -13
- package/bundle/templates/test/lib.test.mo +2 -2
- package/bundle-package-json.ts +8 -8
- package/cache.ts +80 -65
- package/check-requirements.ts +49 -45
- package/cli.ts +577 -376
- package/commands/add.ts +142 -129
- package/commands/available-updates.ts +55 -41
- package/commands/bench/bench-canister.mo +114 -108
- package/commands/bench/user-bench.mo +6 -6
- package/commands/bench-replica.ts +146 -118
- package/commands/bench.ts +563 -497
- package/commands/build.ts +177 -0
- package/commands/bump.ts +68 -57
- package/commands/check-candid.ts +24 -0
- package/commands/docs-coverage.ts +124 -102
- package/commands/docs.ts +118 -108
- package/commands/format.ts +171 -155
- package/commands/init.ts +301 -275
- package/commands/install/install-all.ts +75 -62
- package/commands/install/install-dep.ts +43 -28
- package/commands/install/install-deps.ts +23 -15
- package/commands/install/install-local-dep.ts +42 -34
- package/commands/install/install-mops-dep.ts +154 -123
- package/commands/install/sync-local-cache.ts +39 -35
- package/commands/maintainer.ts +109 -99
- package/commands/outdated.ts +30 -24
- package/commands/owner.ts +107 -99
- package/commands/publish.ts +534 -443
- package/commands/remove.ts +119 -89
- package/commands/replica.ts +391 -316
- package/commands/search.ts +42 -36
- package/commands/self.ts +63 -56
- package/commands/sources.ts +66 -49
- package/commands/sync.ts +92 -75
- package/commands/template.ts +145 -102
- package/commands/test/mmf1.ts +146 -119
- package/commands/test/reporters/compact-reporter.ts +87 -84
- package/commands/test/reporters/files-reporter.ts +56 -51
- package/commands/test/reporters/reporter.ts +12 -6
- package/commands/test/reporters/silent-reporter.ts +58 -59
- package/commands/test/reporters/verbose-reporter.ts +66 -54
- package/commands/test/test.ts +498 -401
- package/commands/test/utils.ts +72 -67
- package/commands/toolchain/index.ts +363 -322
- package/commands/toolchain/moc.ts +78 -50
- package/commands/toolchain/pocket-ic.ts +41 -34
- package/commands/toolchain/toolchain-utils.ts +92 -72
- package/commands/toolchain/wasmtime.ts +37 -34
- package/commands/update.ts +82 -64
- package/commands/user.ts +90 -81
- package/commands/watch/deployer.ts +188 -152
- package/commands/watch/error-checker.ts +90 -80
- package/commands/watch/formatter.ts +72 -60
- package/commands/watch/generator.ts +116 -96
- package/commands/watch/globMoFiles.ts +13 -13
- package/commands/watch/parseDfxJson.ts +63 -57
- package/commands/watch/tester.ts +83 -65
- package/commands/watch/warning-checker.ts +149 -136
- package/commands/watch/watch.ts +123 -95
- package/dist/api/actors.d.ts +4 -4
- package/dist/api/actors.js +8 -8
- package/dist/api/downloadPackageFiles.d.ts +2 -2
- package/dist/api/downloadPackageFiles.js +10 -10
- package/dist/api/getHighestVersion.js +1 -1
- package/dist/api/index.d.ts +4 -4
- package/dist/api/index.js +4 -4
- package/dist/api/network.js +9 -9
- package/dist/api/resolveVersion.js +3 -3
- package/dist/bin/mops.js +1 -1
- package/dist/bundle-package-json.js +8 -8
- package/dist/cache.js +22 -17
- package/dist/check-requirements.js +11 -11
- package/dist/cli.js +283 -186
- package/dist/commands/add.d.ts +1 -1
- package/dist/commands/add.js +40 -37
- package/dist/commands/available-updates.d.ts +1 -1
- package/dist/commands/available-updates.js +18 -12
- package/dist/commands/bench/bench-canister.mo +114 -108
- package/dist/commands/bench/user-bench.mo +6 -6
- package/dist/commands/bench-replica.d.ts +4 -4
- package/dist/commands/bench-replica.js +45 -34
- package/dist/commands/bench.d.ts +5 -5
- package/dist/commands/bench.js +134 -118
- package/dist/commands/build.d.ts +7 -0
- package/dist/commands/build.js +121 -0
- package/dist/commands/bump.js +27 -18
- package/dist/commands/check-candid.d.ts +4 -0
- package/dist/commands/check-candid.js +15 -0
- package/dist/commands/docs-coverage.d.ts +1 -1
- package/dist/commands/docs-coverage.js +45 -31
- package/dist/commands/docs.d.ts +1 -1
- package/dist/commands/docs.js +39 -38
- package/dist/commands/format.js +31 -27
- package/dist/commands/init.js +102 -92
- package/dist/commands/install/install-all.d.ts +2 -2
- package/dist/commands/install/install-all.js +23 -21
- package/dist/commands/install/install-dep.d.ts +1 -1
- package/dist/commands/install/install-dep.js +21 -8
- package/dist/commands/install/install-deps.d.ts +1 -1
- package/dist/commands/install/install-deps.js +1 -1
- package/dist/commands/install/install-local-dep.js +11 -9
- package/dist/commands/install/install-mops-dep.d.ts +1 -1
- package/dist/commands/install/install-mops-dep.js +32 -27
- package/dist/commands/install/sync-local-cache.js +10 -10
- package/dist/commands/maintainer.js +21 -21
- package/dist/commands/outdated.js +12 -8
- package/dist/commands/owner.js +21 -21
- package/dist/commands/publish.js +148 -128
- package/dist/commands/remove.d.ts +1 -1
- package/dist/commands/remove.js +42 -30
- package/dist/commands/replica.d.ts +7 -7
- package/dist/commands/replica.js +85 -57
- package/dist/commands/search.js +15 -13
- package/dist/commands/self.js +31 -28
- package/dist/commands/sources.d.ts +5 -1
- package/dist/commands/sources.js +23 -17
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.js +38 -25
- package/dist/commands/template.js +66 -56
- package/dist/commands/test/mmf1.d.ts +3 -3
- package/dist/commands/test/mmf1.js +33 -31
- package/dist/commands/test/reporters/compact-reporter.d.ts +3 -3
- package/dist/commands/test/reporters/compact-reporter.js +19 -15
- package/dist/commands/test/reporters/files-reporter.d.ts +3 -3
- package/dist/commands/test/reporters/files-reporter.js +18 -14
- package/dist/commands/test/reporters/reporter.d.ts +2 -2
- package/dist/commands/test/reporters/silent-reporter.d.ts +3 -3
- package/dist/commands/test/reporters/silent-reporter.js +4 -4
- package/dist/commands/test/reporters/verbose-reporter.d.ts +3 -3
- package/dist/commands/test/reporters/verbose-reporter.js +17 -13
- package/dist/commands/test/test.d.ts +4 -4
- package/dist/commands/test/test.js +134 -112
- package/dist/commands/test/utils.d.ts +3 -3
- package/dist/commands/test/utils.js +17 -17
- package/dist/commands/toolchain/index.d.ts +1 -1
- package/dist/commands/toolchain/index.js +81 -69
- package/dist/commands/toolchain/moc.d.ts +1 -1
- package/dist/commands/toolchain/moc.js +48 -24
- package/dist/commands/toolchain/pocket-ic.js +12 -12
- package/dist/commands/toolchain/toolchain-utils.d.ts +2 -0
- package/dist/commands/toolchain/toolchain-utils.js +32 -23
- package/dist/commands/toolchain/wasmtime.js +11 -11
- package/dist/commands/update.d.ts +1 -1
- package/dist/commands/update.js +18 -14
- package/dist/commands/user.js +31 -28
- package/dist/commands/watch/deployer.d.ts +4 -4
- package/dist/commands/watch/deployer.js +45 -36
- package/dist/commands/watch/error-checker.d.ts +2 -2
- package/dist/commands/watch/error-checker.js +27 -27
- package/dist/commands/watch/formatter.d.ts +4 -4
- package/dist/commands/watch/formatter.js +17 -17
- package/dist/commands/watch/generator.d.ts +3 -3
- package/dist/commands/watch/generator.js +28 -23
- package/dist/commands/watch/globMoFiles.js +8 -8
- package/dist/commands/watch/parseDfxJson.d.ts +2 -2
- package/dist/commands/watch/parseDfxJson.js +9 -9
- package/dist/commands/watch/tester.d.ts +4 -4
- package/dist/commands/watch/tester.js +23 -21
- package/dist/commands/watch/warning-checker.d.ts +3 -3
- package/dist/commands/watch/warning-checker.js +36 -36
- package/dist/commands/watch/watch.js +45 -32
- package/dist/environments/nodejs/cli.d.ts +1 -0
- package/dist/environments/nodejs/cli.js +4 -0
- package/dist/environments/web/cli.d.ts +1 -0
- package/dist/environments/web/cli.js +4 -0
- package/dist/error.d.ts +1 -0
- package/dist/error.js +5 -0
- package/dist/fix-dist.js +5 -5
- package/dist/helpers/find-changelog-entry.js +8 -5
- package/dist/helpers/get-dep-name.js +2 -2
- package/dist/helpers/get-dfx-version.js +4 -4
- package/dist/helpers/get-moc-path.js +8 -7
- package/dist/helpers/get-moc-version.js +10 -7
- package/dist/helpers/get-package-id.js +2 -2
- package/dist/helpers/is-candid-compatible.d.ts +1 -0
- package/dist/helpers/is-candid-compatible.js +20 -0
- package/dist/integrity.d.ts +1 -1
- package/dist/integrity.js +47 -38
- package/dist/jest.config.d.ts +11 -0
- package/dist/jest.config.js +14 -0
- package/dist/mops.d.ts +6 -6
- package/dist/mops.js +87 -80
- package/dist/notify-installs.js +4 -4
- package/dist/package.json +9 -5
- package/dist/pem.d.ts +3 -3
- package/dist/pem.js +20 -12
- package/dist/release-cli.js +20 -20
- package/dist/resolve-packages.d.ts +1 -1
- package/dist/resolve-packages.js +52 -36
- package/dist/templates/mops-publish.yml +3 -3
- package/dist/templates/mops-test.yml +3 -3
- package/dist/templates/src/lib.mo +13 -13
- package/dist/templates/test/lib.test.mo +2 -2
- package/dist/templates.js +1 -1
- package/dist/tests/cli.test.d.ts +1 -0
- package/dist/tests/cli.test.js +63 -0
- package/dist/types.d.ts +14 -4
- package/dist/vessel.d.ts +2 -2
- package/dist/vessel.js +41 -34
- package/dist/wasm/pkg/bundler/package.json +20 -0
- package/dist/wasm/pkg/bundler/wasm.d.ts +3 -0
- package/dist/wasm/pkg/bundler/wasm.js +5 -0
- package/dist/wasm/pkg/bundler/wasm_bg.js +93 -0
- package/dist/wasm/pkg/bundler/wasm_bg.wasm +0 -0
- package/dist/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
- package/dist/wasm/pkg/nodejs/package.json +14 -0
- package/dist/wasm/pkg/nodejs/wasm.d.ts +3 -0
- package/dist/wasm/pkg/nodejs/wasm.js +98 -0
- package/dist/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
- package/dist/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
- package/dist/wasm/pkg/web/package.json +18 -0
- package/dist/wasm/pkg/web/wasm.d.ts +35 -0
- package/dist/wasm/pkg/web/wasm.js +191 -0
- package/dist/wasm/pkg/web/wasm_bg.wasm +0 -0
- package/dist/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
- package/dist/wasm.d.ts +5 -0
- package/dist/wasm.js +10 -0
- package/environments/nodejs/cli.ts +6 -0
- package/environments/web/cli.ts +6 -0
- package/error.ts +6 -0
- package/fix-dist.ts +5 -5
- package/global.d.ts +3 -3
- package/helpers/find-changelog-entry.ts +26 -23
- package/helpers/get-dep-name.ts +5 -5
- package/helpers/get-dfx-version.ts +8 -9
- package/helpers/get-moc-path.ts +25 -26
- package/helpers/get-moc-version.ts +21 -19
- package/helpers/get-package-id.ts +4 -4
- package/helpers/is-candid-compatible.ts +22 -0
- package/integrity.ts +270 -236
- package/jest.config.js +14 -0
- package/mops.ts +238 -215
- package/notify-installs.ts +16 -17
- package/package.json +19 -10
- package/parallel.ts +28 -24
- package/pem.ts +55 -47
- package/release-cli.ts +73 -39
- package/resolve-packages.ts +231 -189
- package/templates/mops-publish.yml +3 -3
- package/templates/mops-test.yml +3 -3
- package/templates/src/lib.mo +13 -13
- package/templates/test/lib.test.mo +2 -2
- package/templates.ts +4 -4
- package/tests/__snapshots__/cli.test.ts.snap +202 -0
- package/tests/build/error/candid/bar.did +3 -0
- package/tests/build/error/dfx.json +12 -0
- package/tests/build/error/mops.toml +9 -0
- package/tests/build/error/src/Bar.mo +5 -0
- package/tests/build/error/src/Foo.mo +5 -0
- package/tests/build/success/.dfx/local/canister_ids.json +17 -0
- package/tests/build/success/.dfx/local/canisters/bar/bar.did +3 -0
- package/tests/build/success/.dfx/local/canisters/bar/bar.most +4 -0
- package/tests/build/success/.dfx/local/canisters/bar/bar.wasm +0 -0
- package/tests/build/success/.dfx/local/canisters/bar/constructor.did +3 -0
- package/tests/build/success/.dfx/local/canisters/bar/index.js +42 -0
- package/tests/build/success/.dfx/local/canisters/bar/init_args.txt +1 -0
- package/tests/build/success/.dfx/local/canisters/bar/service.did +3 -0
- package/tests/build/success/.dfx/local/canisters/bar/service.did.d.ts +7 -0
- package/tests/build/success/.dfx/local/canisters/bar/service.did.js +4 -0
- package/tests/build/success/.dfx/local/canisters/foo/constructor.did +3 -0
- package/tests/build/success/.dfx/local/canisters/foo/foo.did +3 -0
- package/tests/build/success/.dfx/local/canisters/foo/foo.most +4 -0
- package/tests/build/success/.dfx/local/canisters/foo/foo.wasm +0 -0
- package/tests/build/success/.dfx/local/canisters/foo/index.js +42 -0
- package/tests/build/success/.dfx/local/canisters/foo/init_args.txt +1 -0
- package/tests/build/success/.dfx/local/canisters/foo/service.did +3 -0
- package/tests/build/success/.dfx/local/canisters/foo/service.did.d.ts +7 -0
- package/tests/build/success/.dfx/local/canisters/foo/service.did.js +4 -0
- package/tests/build/success/.dfx/local/lsp/ucwa4-rx777-77774-qaada-cai.did +3 -0
- package/tests/build/success/.dfx/local/lsp/ulvla-h7777-77774-qaacq-cai.did +3 -0
- package/tests/build/success/.dfx/local/network-id +4 -0
- package/tests/build/success/candid/bar.did +3 -0
- package/tests/build/success/dfx.json +12 -0
- package/tests/build/success/mops.toml +9 -0
- package/tests/build/success/src/Bar.mo +5 -0
- package/tests/build/success/src/Foo.mo +5 -0
- package/tests/check-candid/a.did +3 -0
- package/tests/check-candid/b.did +5 -0
- package/tests/check-candid/c.did +3 -0
- package/tests/cli.test.ts +82 -0
- package/tsconfig.json +26 -19
- package/types.ts +41 -31
- package/vessel.ts +219 -187
- package/wasm/Cargo.lock +1475 -0
- package/wasm/Cargo.toml +28 -0
- package/wasm/pkg/bundler/package.json +20 -0
- package/wasm/pkg/bundler/wasm.d.ts +3 -0
- package/wasm/pkg/bundler/wasm.js +5 -0
- package/wasm/pkg/bundler/wasm_bg.js +93 -0
- package/wasm/pkg/bundler/wasm_bg.wasm +0 -0
- package/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
- package/wasm/pkg/nodejs/package.json +14 -0
- package/wasm/pkg/nodejs/wasm.d.ts +3 -0
- package/wasm/pkg/nodejs/wasm.js +98 -0
- package/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
- package/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
- package/wasm/pkg/web/package.json +18 -0
- package/wasm/pkg/web/wasm.d.ts +35 -0
- package/wasm/pkg/web/wasm.js +191 -0
- package/wasm/pkg/web/wasm_bg.wasm +0 -0
- package/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
- package/wasm/src/lib.rs +17 -0
- package/wasm.ts +16 -0
package/dist/commands/bump.js
CHANGED
|
@@ -1,30 +1,39 @@
|
|
|
1
|
-
import process from
|
|
2
|
-
import prompts from
|
|
3
|
-
import chalk from
|
|
4
|
-
import { checkConfigFile, readConfig, writeConfig } from
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import prompts from "prompts";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { checkConfigFile, readConfig, writeConfig } from "../mops.js";
|
|
5
5
|
export async function bump(part) {
|
|
6
6
|
if (!checkConfigFile()) {
|
|
7
7
|
return;
|
|
8
8
|
}
|
|
9
|
-
if (part && ![
|
|
10
|
-
console.log(chalk.red(
|
|
9
|
+
if (part && !["major", "minor", "patch"].includes(part)) {
|
|
10
|
+
console.log(chalk.red("Unknown version part. Available parts: major, minor, patch"));
|
|
11
11
|
process.exit(1);
|
|
12
12
|
}
|
|
13
13
|
let config = readConfig();
|
|
14
14
|
if (!config.package) {
|
|
15
|
-
console.log(chalk.red(
|
|
15
|
+
console.log(chalk.red("No [package] section found in mops.toml."));
|
|
16
16
|
process.exit(1);
|
|
17
17
|
}
|
|
18
18
|
console.log(`Current version: ${chalk.yellow.bold(config.package.version)}`);
|
|
19
19
|
if (!part) {
|
|
20
20
|
let res = await prompts({
|
|
21
|
-
type:
|
|
22
|
-
name:
|
|
23
|
-
message:
|
|
21
|
+
type: "select",
|
|
22
|
+
name: "part",
|
|
23
|
+
message: "Select new version:",
|
|
24
24
|
choices: [
|
|
25
|
-
{
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
{
|
|
26
|
+
title: `${updateVersion(config.package.version, "major")} ${chalk.dim("(major, breaking changes)")}`,
|
|
27
|
+
value: "major",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
title: `${updateVersion(config.package.version, "minor")} ${chalk.dim("(minor, new features)")}`,
|
|
31
|
+
value: "minor",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
title: `${updateVersion(config.package.version, "patch")} ${chalk.dim("(patch, bug fixes)")}`,
|
|
35
|
+
value: "patch",
|
|
36
|
+
},
|
|
28
37
|
],
|
|
29
38
|
initial: 2,
|
|
30
39
|
});
|
|
@@ -38,14 +47,14 @@ export async function bump(part) {
|
|
|
38
47
|
console.log(`Updated version: ${chalk.green.bold(config.package.version)}`);
|
|
39
48
|
}
|
|
40
49
|
function updateVersion(version, part) {
|
|
41
|
-
let parts = version.split(
|
|
42
|
-
let idx = [
|
|
50
|
+
let parts = version.split(".");
|
|
51
|
+
let idx = ["major", "minor", "patch"].indexOf(part);
|
|
43
52
|
if (!parts[idx]) {
|
|
44
53
|
throw new Error(`Invalid version part: ${part}`);
|
|
45
54
|
}
|
|
46
|
-
parts[idx] = String(parseInt(parts[idx] ||
|
|
55
|
+
parts[idx] = String(parseInt(parts[idx] || "0") + 1);
|
|
47
56
|
for (let i = idx + 1; i < parts.length; i++) {
|
|
48
|
-
parts[i] =
|
|
57
|
+
parts[i] = "0";
|
|
49
58
|
}
|
|
50
|
-
return parts.join(
|
|
59
|
+
return parts.join(".");
|
|
51
60
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { isCandidCompatible } from "../helpers/is-candid-compatible.js";
|
|
3
|
+
import { cliError } from "../error.js";
|
|
4
|
+
export async function checkCandid(newPath, originalPath) {
|
|
5
|
+
try {
|
|
6
|
+
const compatible = await isCandidCompatible(newPath, originalPath);
|
|
7
|
+
if (!compatible) {
|
|
8
|
+
cliError("✖ Candid compatibility check failed");
|
|
9
|
+
}
|
|
10
|
+
console.log(chalk.green("✓ Candid compatibility check passed"));
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
cliError(`Error while checking Candid compatibility${error?.message ? `\n${error.message}` : ""}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,51 +1,55 @@
|
|
|
1
|
-
import { readFileSync } from
|
|
2
|
-
import chalk from
|
|
3
|
-
import { globSync } from
|
|
4
|
-
import { JSDOM } from
|
|
5
|
-
import { docs } from
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { globSync } from "glob";
|
|
4
|
+
import { JSDOM } from "jsdom";
|
|
5
|
+
import { docs } from "./docs.js";
|
|
6
6
|
export async function docsCoverage(options = {}) {
|
|
7
|
-
let docsDir =
|
|
7
|
+
let docsDir = ".mops/.docs";
|
|
8
8
|
let { source, reporter, threshold } = {
|
|
9
|
-
source:
|
|
10
|
-
reporter:
|
|
9
|
+
source: "src",
|
|
10
|
+
reporter: "files",
|
|
11
11
|
threshold: 0,
|
|
12
12
|
...options,
|
|
13
13
|
};
|
|
14
14
|
await docs({
|
|
15
15
|
source,
|
|
16
16
|
output: docsDir,
|
|
17
|
-
format:
|
|
17
|
+
format: "html",
|
|
18
18
|
silent: true,
|
|
19
19
|
});
|
|
20
|
-
let files = globSync(`${docsDir}/**/*.html`, {
|
|
20
|
+
let files = globSync(`${docsDir}/**/*.html`, {
|
|
21
|
+
ignore: [`${docsDir}/**/index.html`],
|
|
22
|
+
});
|
|
21
23
|
let coverages = [];
|
|
22
24
|
for (let file of files) {
|
|
23
25
|
let coverage = docFileCoverage(file);
|
|
24
26
|
coverages.push(coverage);
|
|
25
|
-
if (reporter ===
|
|
27
|
+
if (reporter === "silent") {
|
|
26
28
|
continue;
|
|
27
29
|
}
|
|
28
|
-
if (reporter !==
|
|
30
|
+
if (reporter !== "compact" &&
|
|
31
|
+
(reporter !== "missing" || coverage.coverage < 100)) {
|
|
29
32
|
console.log(`• ${coverage.file} ${colorizeCoverage(coverage.coverage)}`);
|
|
30
33
|
}
|
|
31
|
-
if (reporter ===
|
|
34
|
+
if (reporter === "missing" && coverage.coverage < 100) {
|
|
32
35
|
for (let item of coverage.items) {
|
|
33
36
|
if (!item.covered) {
|
|
34
|
-
console.log(` ${item.covered ? chalk.green(
|
|
37
|
+
console.log(` ${item.covered ? chalk.green("✓") : chalk.red("✖")} ${item.id} ${chalk.gray(item.type)}`);
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
|
-
else if (reporter ===
|
|
41
|
+
else if (reporter === "verbose") {
|
|
39
42
|
for (let item of coverage.items) {
|
|
40
|
-
console.log(` ${item.covered ? chalk.green(
|
|
43
|
+
console.log(` ${item.covered ? chalk.green("✓") : chalk.red("✖")} ${item.id} ${chalk.gray(item.type)}`);
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
|
-
if (reporter !==
|
|
45
|
-
console.log(
|
|
47
|
+
if (reporter !== "compact" && reporter !== "silent") {
|
|
48
|
+
console.log("-".repeat(50));
|
|
46
49
|
}
|
|
47
|
-
let totalCoverage = coverages.reduce((acc, coverage) => acc + coverage.coverage, 0) /
|
|
48
|
-
|
|
50
|
+
let totalCoverage = coverages.reduce((acc, coverage) => acc + coverage.coverage, 0) /
|
|
51
|
+
(coverages.length || 1);
|
|
52
|
+
if (reporter !== "silent") {
|
|
49
53
|
console.log(`Documentation coverage: ${colorizeCoverage(totalCoverage)}`);
|
|
50
54
|
}
|
|
51
55
|
if (threshold > 0 && totalCoverage < threshold) {
|
|
@@ -54,33 +58,43 @@ export async function docsCoverage(options = {}) {
|
|
|
54
58
|
return totalCoverage;
|
|
55
59
|
}
|
|
56
60
|
function docFileCoverage(file) {
|
|
57
|
-
let dom = new JSDOM(readFileSync(file,
|
|
58
|
-
let module = dom.window.document.querySelector(
|
|
61
|
+
let dom = new JSDOM(readFileSync(file, "utf-8"));
|
|
62
|
+
let module = dom.window.document.querySelector("h1")?.textContent || "";
|
|
59
63
|
let moduleFile = `${module}.mo`;
|
|
60
|
-
let items = [...dom.window.document.querySelectorAll(
|
|
61
|
-
let id = h4.getAttribute(
|
|
62
|
-
let type = h4.className
|
|
64
|
+
let items = [...dom.window.document.querySelectorAll("h4")].map((h4) => {
|
|
65
|
+
let id = h4.getAttribute("id")?.replace("type.", "");
|
|
66
|
+
let type = h4.className
|
|
67
|
+
.replace("-declaration", "")
|
|
68
|
+
.replace("function", "func");
|
|
63
69
|
let definition = h4.textContent;
|
|
64
|
-
let comment = h4.parentElement?.querySelector(
|
|
65
|
-
return {
|
|
70
|
+
let comment = h4.parentElement?.querySelector("p + p")?.textContent;
|
|
71
|
+
return {
|
|
72
|
+
file: moduleFile,
|
|
73
|
+
id,
|
|
74
|
+
type,
|
|
75
|
+
definition,
|
|
76
|
+
comment,
|
|
77
|
+
covered: (comment || "").length >= 5,
|
|
78
|
+
};
|
|
66
79
|
});
|
|
67
80
|
let coverage = 0;
|
|
68
81
|
if (!items.length) {
|
|
69
82
|
coverage = 100;
|
|
70
83
|
}
|
|
71
84
|
else {
|
|
72
|
-
coverage =
|
|
85
|
+
coverage =
|
|
86
|
+
(items.filter((item) => item.covered).length / items.length) * 100;
|
|
73
87
|
}
|
|
74
88
|
return { file: moduleFile, coverage, items };
|
|
75
89
|
}
|
|
76
90
|
function colorizeCoverage(coverage) {
|
|
77
91
|
if (coverage >= 90) {
|
|
78
|
-
return chalk.green(coverage.toFixed(2) +
|
|
92
|
+
return chalk.green(coverage.toFixed(2) + "%");
|
|
79
93
|
}
|
|
80
94
|
else if (coverage >= 50) {
|
|
81
|
-
return chalk.yellow(coverage.toFixed(2) +
|
|
95
|
+
return chalk.yellow(coverage.toFixed(2) + "%");
|
|
82
96
|
}
|
|
83
97
|
else {
|
|
84
|
-
return chalk.red(coverage.toFixed(2) +
|
|
98
|
+
return chalk.red(coverage.toFixed(2) + "%");
|
|
85
99
|
}
|
|
86
100
|
}
|
package/dist/commands/docs.d.ts
CHANGED
package/dist/commands/docs.js
CHANGED
|
@@ -1,39 +1,40 @@
|
|
|
1
|
-
import process from
|
|
2
|
-
import { spawn } from
|
|
3
|
-
import fs from
|
|
4
|
-
import path from
|
|
5
|
-
import chalk from
|
|
6
|
-
import { globSync } from
|
|
7
|
-
import { deleteSync } from
|
|
8
|
-
import { create as createTar } from
|
|
9
|
-
import streamToPromise from
|
|
10
|
-
import { getRootDir } from
|
|
11
|
-
import { toolchain } from
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import { globSync } from "glob";
|
|
7
|
+
import { deleteSync } from "del";
|
|
8
|
+
import { create as createTar } from "tar";
|
|
9
|
+
import streamToPromise from "stream-to-promise";
|
|
10
|
+
import { getRootDir } from "../mops.js";
|
|
11
|
+
import { toolchain } from "./toolchain/index.js";
|
|
12
12
|
let moDocPath;
|
|
13
13
|
export async function docs(options = {}) {
|
|
14
14
|
let { source, output, format, silent, archive } = {
|
|
15
|
-
source:
|
|
16
|
-
output:
|
|
17
|
-
format:
|
|
15
|
+
source: "src",
|
|
16
|
+
output: ".mops/.docs",
|
|
17
|
+
format: "adoc",
|
|
18
18
|
silent: false,
|
|
19
19
|
archive: false,
|
|
20
20
|
...options,
|
|
21
21
|
};
|
|
22
|
-
if (format ===
|
|
23
|
-
format =
|
|
22
|
+
if (format === "md") {
|
|
23
|
+
format = "plain";
|
|
24
24
|
}
|
|
25
25
|
let rootDir = getRootDir();
|
|
26
26
|
let docsDir = path.join(rootDir, output);
|
|
27
27
|
let docsDirRelative = path.relative(process.cwd(), docsDir);
|
|
28
28
|
deleteSync([docsDir], { force: true });
|
|
29
29
|
// detect mocv (legacy)
|
|
30
|
-
if (process.env.DFX_MOC_PATH &&
|
|
31
|
-
|
|
30
|
+
if (process.env.DFX_MOC_PATH &&
|
|
31
|
+
process.env.DFX_MOC_PATH.includes("mocv/versions")) {
|
|
32
|
+
moDocPath = process.env.DFX_MOC_PATH.replace(/\/moc$/, "/mo-doc");
|
|
32
33
|
}
|
|
33
34
|
else {
|
|
34
35
|
// fallbacks to dfx moc if not specified in config
|
|
35
|
-
let mocPath = await toolchain.bin(
|
|
36
|
-
moDocPath = mocPath.replace(/\/moc$/,
|
|
36
|
+
let mocPath = await toolchain.bin("moc", { fallback: true });
|
|
37
|
+
moDocPath = mocPath.replace(/\/moc$/, "/mo-doc");
|
|
37
38
|
}
|
|
38
39
|
// generate docs
|
|
39
40
|
await new Promise((resolve) => {
|
|
@@ -43,37 +44,39 @@ export async function docs(options = {}) {
|
|
|
43
44
|
`--format=${format}`,
|
|
44
45
|
]);
|
|
45
46
|
// stdout
|
|
46
|
-
proc.stdout.on(
|
|
47
|
+
proc.stdout.on("data", (data) => {
|
|
47
48
|
let text = data.toString().trim();
|
|
48
|
-
let failedText =
|
|
49
|
+
let failedText = "Failed to extract documentation";
|
|
49
50
|
if (text.includes(failedText)) {
|
|
50
|
-
silent ||
|
|
51
|
+
silent ||
|
|
52
|
+
console.log(text.replaceAll(failedText, chalk.yellow("Warning: ") + failedText));
|
|
51
53
|
}
|
|
52
|
-
silent || console.log(
|
|
54
|
+
silent || console.log("stdout", text);
|
|
53
55
|
});
|
|
54
56
|
// stderr
|
|
55
|
-
let stderr =
|
|
56
|
-
proc.stderr.on(
|
|
57
|
+
let stderr = "";
|
|
58
|
+
proc.stderr.on("data", (data) => {
|
|
57
59
|
let text = data.toString().trim();
|
|
58
|
-
if (text.includes(
|
|
59
|
-
console.log(chalk.red(
|
|
60
|
+
if (text.includes("syntax error")) {
|
|
61
|
+
console.log(chalk.red("Error:"), text);
|
|
60
62
|
process.exit(1);
|
|
61
63
|
}
|
|
62
|
-
if (text.includes(
|
|
64
|
+
if (text.includes("No such file or directory") ||
|
|
65
|
+
text.includes("Couldn't find a module expression")) {
|
|
63
66
|
silent || console.log(text);
|
|
64
67
|
return;
|
|
65
68
|
}
|
|
66
69
|
stderr += text;
|
|
67
70
|
});
|
|
68
71
|
// exit
|
|
69
|
-
proc.on(
|
|
72
|
+
proc.on("exit", (code) => {
|
|
70
73
|
// if no source files found
|
|
71
74
|
if (code === 2 && !stderr) {
|
|
72
75
|
resolve();
|
|
73
76
|
return;
|
|
74
77
|
}
|
|
75
78
|
if (code !== 0) {
|
|
76
|
-
console.log(chalk.red(
|
|
79
|
+
console.log(chalk.red("Error:"), code, stderr);
|
|
77
80
|
process.exit(1);
|
|
78
81
|
}
|
|
79
82
|
resolve();
|
|
@@ -81,20 +84,18 @@ export async function docs(options = {}) {
|
|
|
81
84
|
});
|
|
82
85
|
// create archive
|
|
83
86
|
if (archive) {
|
|
84
|
-
let ignore = [
|
|
85
|
-
|
|
86
|
-
`${docsDir}/test/**/*`,
|
|
87
|
-
];
|
|
88
|
-
let files = globSync(`${docsDir}/**/*.adoc`, { ignore }).map(f => path.relative(docsDir, f));
|
|
87
|
+
let ignore = [`${docsDir}/**/*.test.adoc`, `${docsDir}/test/**/*`];
|
|
88
|
+
let files = globSync(`${docsDir}/**/*.adoc`, { ignore }).map((f) => path.relative(docsDir, f));
|
|
89
89
|
files.sort();
|
|
90
90
|
if (files.length) {
|
|
91
91
|
let stream = createTar({
|
|
92
92
|
cwd: docsDir,
|
|
93
93
|
gzip: true,
|
|
94
94
|
portable: true,
|
|
95
|
-
}, files).pipe(fs.createWriteStream(path.join(docsDir,
|
|
95
|
+
}, files).pipe(fs.createWriteStream(path.join(docsDir, "docs.tgz")));
|
|
96
96
|
await streamToPromise(stream);
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
|
-
silent ||
|
|
99
|
+
silent ||
|
|
100
|
+
console.log(`${chalk.green("Documentation generated")} at ${docsDirRelative}`);
|
|
100
101
|
}
|
package/dist/commands/format.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import fs from
|
|
2
|
-
import path from
|
|
3
|
-
import { globSync } from
|
|
4
|
-
import chalk from
|
|
5
|
-
import * as prettier from
|
|
6
|
-
import motokoPlugin from
|
|
7
|
-
import { getRootDir } from
|
|
8
|
-
import { absToRel } from
|
|
9
|
-
import { parallel } from
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { globSync } from "glob";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import * as prettier from "prettier";
|
|
6
|
+
import motokoPlugin from "prettier-plugin-motoko";
|
|
7
|
+
import { getRootDir } from "../mops.js";
|
|
8
|
+
import { absToRel } from "./test/utils.js";
|
|
9
|
+
import { parallel } from "../parallel.js";
|
|
10
10
|
let ignore = [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
"**/node_modules/**",
|
|
12
|
+
"**/.mops/**",
|
|
13
|
+
"**/.vessel/**",
|
|
14
|
+
"**/.git/**",
|
|
15
|
+
"**/dist/**",
|
|
16
16
|
];
|
|
17
17
|
let globConfig = {
|
|
18
18
|
nocase: true,
|
|
@@ -21,7 +21,7 @@ let globConfig = {
|
|
|
21
21
|
export async function format(filter, options = {}, signal, onProgress) {
|
|
22
22
|
let startTime = Date.now();
|
|
23
23
|
let rootDir = getRootDir();
|
|
24
|
-
let globStr =
|
|
24
|
+
let globStr = "**/*.mo";
|
|
25
25
|
if (filter) {
|
|
26
26
|
globStr = `**/*${filter}*.mo`;
|
|
27
27
|
}
|
|
@@ -49,7 +49,7 @@ export async function format(filter, options = {}, signal, onProgress) {
|
|
|
49
49
|
return getResult(false);
|
|
50
50
|
}
|
|
51
51
|
if (!options.silent) {
|
|
52
|
-
console.log(
|
|
52
|
+
console.log("No *.mo files found");
|
|
53
53
|
}
|
|
54
54
|
return getResult(false);
|
|
55
55
|
}
|
|
@@ -76,30 +76,34 @@ export async function format(filter, options = {}, signal, onProgress) {
|
|
|
76
76
|
// }
|
|
77
77
|
// add motoko parser plugin
|
|
78
78
|
Object.assign(prettierConfig, {
|
|
79
|
-
parser:
|
|
79
|
+
parser: "motoko-tt-parse",
|
|
80
80
|
plugins: [motokoPlugin],
|
|
81
81
|
filepath: file,
|
|
82
82
|
});
|
|
83
83
|
// check file
|
|
84
|
-
let code = await fs.readFile(file,
|
|
84
|
+
let code = await fs.readFile(file, "utf8");
|
|
85
85
|
let formatted = await prettier.format(code, prettierConfig);
|
|
86
86
|
let ok = formatted === code;
|
|
87
87
|
invalidFiles += Number(!ok);
|
|
88
88
|
if (options.check) {
|
|
89
89
|
if (ok) {
|
|
90
|
-
options.silent ||
|
|
90
|
+
options.silent ||
|
|
91
|
+
console.log(`${chalk.green("✓")} ${absToRel(file)} ${chalk.gray("valid")}`);
|
|
91
92
|
}
|
|
92
93
|
else {
|
|
93
|
-
options.silent ||
|
|
94
|
+
options.silent ||
|
|
95
|
+
console.log(`${chalk.red("✖")} ${absToRel(file)} ${chalk.gray("invalid")}`);
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
else {
|
|
97
99
|
if (ok) {
|
|
98
|
-
options.silent ||
|
|
100
|
+
options.silent ||
|
|
101
|
+
console.log(`${chalk.green("✓")} ${absToRel(file)} ${chalk.gray("valid")}`);
|
|
99
102
|
}
|
|
100
103
|
else {
|
|
101
104
|
await fs.writeFile(file, formatted);
|
|
102
|
-
options.silent ||
|
|
105
|
+
options.silent ||
|
|
106
|
+
console.log(`${chalk.yellow("*")} ${absToRel(file)} ${chalk.gray("formatted")}`);
|
|
103
107
|
}
|
|
104
108
|
}
|
|
105
109
|
checkedFiles += 1;
|
|
@@ -110,9 +114,9 @@ export async function format(filter, options = {}, signal, onProgress) {
|
|
|
110
114
|
return getResult(false);
|
|
111
115
|
}
|
|
112
116
|
if (!options.silent) {
|
|
113
|
-
console.log(
|
|
114
|
-
let plural = (n) => n === 1 ?
|
|
115
|
-
let str = `Checked ${chalk.gray(files.length)} file${plural(files.length)} in ${chalk.gray(((Date.now() - startTime) / 1000).toFixed(2) +
|
|
117
|
+
console.log("-".repeat(50));
|
|
118
|
+
let plural = (n) => (n === 1 ? "" : "s");
|
|
119
|
+
let str = `Checked ${chalk.gray(files.length)} file${plural(files.length)} in ${chalk.gray(((Date.now() - startTime) / 1000).toFixed(2) + "s")}`;
|
|
116
120
|
if (invalidFiles) {
|
|
117
121
|
str += options.check
|
|
118
122
|
? `, invalid ${chalk.redBright(invalidFiles)} file${plural(invalidFiles)}`
|
|
@@ -120,11 +124,11 @@ export async function format(filter, options = {}, signal, onProgress) {
|
|
|
120
124
|
}
|
|
121
125
|
console.log(str);
|
|
122
126
|
if (!invalidFiles) {
|
|
123
|
-
console.log(chalk.green(
|
|
127
|
+
console.log(chalk.green("✓ All files have valid formatting"));
|
|
124
128
|
}
|
|
125
129
|
}
|
|
126
130
|
if (options.check && invalidFiles && !options.silent) {
|
|
127
|
-
console.log(`${
|
|
131
|
+
console.log(`${`Run '${chalk.yellow("mops format" + (filter ? ` ${filter}` : ""))}' to format your code`}`);
|
|
128
132
|
return getResult(false);
|
|
129
133
|
}
|
|
130
134
|
return getResult(true);
|