ic-mops 1.11.1 → 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.
Files changed (352) hide show
  1. package/.DS_Store +0 -0
  2. package/.eslintrc.json +7 -7
  3. package/CHANGELOG.md +15 -0
  4. package/api/actors.ts +41 -37
  5. package/api/downloadPackageFiles.ts +75 -61
  6. package/api/getHighestVersion.ts +5 -5
  7. package/api/index.ts +4 -4
  8. package/api/network.ts +19 -21
  9. package/api/resolveVersion.ts +14 -11
  10. package/bin/mops.js +1 -1
  11. package/bun.lock +234 -198
  12. package/bundle/bench/bench-canister.mo +2 -2
  13. package/bundle/bench/user-bench.mo +0 -4
  14. package/bundle/bin/mops.js +1 -1
  15. package/bundle/cli.js +1000 -924
  16. package/bundle/cli.tgz +0 -0
  17. package/bundle/declarations/bench/bench.did +3 -3
  18. package/bundle/declarations/bench/bench.did.d.ts +3 -3
  19. package/bundle/declarations/bench/index.d.ts +3 -3
  20. package/bundle/declarations/bench/index.js +1 -1
  21. package/bundle/declarations/main/index.d.ts +3 -3
  22. package/bundle/declarations/main/index.js +1 -1
  23. package/bundle/declarations/main/main.did +78 -121
  24. package/bundle/declarations/main/main.did.d.ts +48 -98
  25. package/bundle/declarations/main/main.did.js +53 -107
  26. package/bundle/declarations/storage/index.d.ts +3 -3
  27. package/bundle/declarations/storage/index.js +4 -4
  28. package/bundle/declarations/storage/storage.did.d.ts +3 -3
  29. package/bundle/package.json +6 -5
  30. package/bundle/templates/mops-publish.yml +3 -3
  31. package/bundle/templates/mops-test.yml +3 -3
  32. package/bundle-package-json.ts +8 -8
  33. package/cache.ts +80 -65
  34. package/check-requirements.ts +49 -45
  35. package/cli.ts +577 -376
  36. package/commands/add.ts +142 -129
  37. package/commands/available-updates.ts +55 -28
  38. package/commands/bench/bench-canister.mo +114 -108
  39. package/commands/bench/user-bench.mo +6 -6
  40. package/commands/bench-replica.ts +146 -106
  41. package/commands/bench.ts +563 -497
  42. package/commands/build.ts +177 -0
  43. package/commands/bump.ts +68 -57
  44. package/commands/check-candid.ts +24 -0
  45. package/commands/docs-coverage.ts +124 -102
  46. package/commands/docs.ts +118 -108
  47. package/commands/format.ts +171 -155
  48. package/commands/init.ts +301 -275
  49. package/commands/install/install-all.ts +75 -62
  50. package/commands/install/install-dep.ts +43 -28
  51. package/commands/install/install-deps.ts +23 -15
  52. package/commands/install/install-local-dep.ts +42 -34
  53. package/commands/install/install-mops-dep.ts +154 -123
  54. package/commands/install/sync-local-cache.ts +39 -35
  55. package/commands/maintainer.ts +109 -99
  56. package/commands/outdated.ts +31 -18
  57. package/commands/owner.ts +107 -99
  58. package/commands/publish.ts +534 -443
  59. package/commands/remove.ts +119 -89
  60. package/commands/replica.ts +391 -303
  61. package/commands/search.ts +42 -36
  62. package/commands/self.ts +63 -56
  63. package/commands/sources.ts +66 -49
  64. package/commands/sync.ts +92 -75
  65. package/commands/template.ts +145 -102
  66. package/commands/test/mmf1.ts +146 -119
  67. package/commands/test/reporters/compact-reporter.ts +87 -84
  68. package/commands/test/reporters/files-reporter.ts +56 -51
  69. package/commands/test/reporters/reporter.ts +12 -6
  70. package/commands/test/reporters/silent-reporter.ts +58 -59
  71. package/commands/test/reporters/verbose-reporter.ts +66 -54
  72. package/commands/test/test.ts +497 -460
  73. package/commands/test/utils.ts +85 -6
  74. package/commands/toolchain/index.ts +363 -322
  75. package/commands/toolchain/moc.ts +78 -50
  76. package/commands/toolchain/pocket-ic.ts +41 -34
  77. package/commands/toolchain/toolchain-utils.ts +92 -72
  78. package/commands/toolchain/wasmtime.ts +37 -34
  79. package/commands/update.ts +91 -56
  80. package/commands/user.ts +90 -81
  81. package/commands/watch/deployer.ts +188 -152
  82. package/commands/watch/error-checker.ts +90 -80
  83. package/commands/watch/formatter.ts +72 -60
  84. package/commands/watch/generator.ts +116 -96
  85. package/commands/watch/globMoFiles.ts +13 -13
  86. package/commands/watch/parseDfxJson.ts +63 -57
  87. package/commands/watch/tester.ts +83 -65
  88. package/commands/watch/warning-checker.ts +149 -136
  89. package/commands/watch/watch.ts +123 -95
  90. package/declarations/bench/bench.did.d.ts +3 -3
  91. package/declarations/bench/index.d.ts +3 -3
  92. package/declarations/bench/index.js +1 -1
  93. package/declarations/main/index.d.ts +3 -3
  94. package/declarations/main/index.js +1 -1
  95. package/declarations/main/main.did.d.ts +3 -3
  96. package/declarations/storage/index.d.ts +3 -3
  97. package/declarations/storage/index.js +4 -4
  98. package/declarations/storage/storage.did.d.ts +3 -3
  99. package/dist/api/actors.d.ts +4 -4
  100. package/dist/api/actors.js +8 -8
  101. package/dist/api/downloadPackageFiles.d.ts +2 -2
  102. package/dist/api/downloadPackageFiles.js +10 -10
  103. package/dist/api/getHighestVersion.js +1 -1
  104. package/dist/api/index.d.ts +4 -4
  105. package/dist/api/index.js +4 -4
  106. package/dist/api/network.js +9 -9
  107. package/dist/api/resolveVersion.js +3 -3
  108. package/dist/bin/mops.js +1 -1
  109. package/dist/bundle-package-json.js +8 -8
  110. package/dist/cache.js +22 -17
  111. package/dist/check-requirements.js +11 -11
  112. package/dist/cli.js +283 -186
  113. package/dist/commands/add.d.ts +1 -1
  114. package/dist/commands/add.js +41 -38
  115. package/dist/commands/available-updates.d.ts +1 -1
  116. package/dist/commands/available-updates.js +32 -14
  117. package/dist/commands/bench/bench-canister.mo +114 -108
  118. package/dist/commands/bench/user-bench.mo +6 -6
  119. package/dist/commands/bench-replica.d.ts +6 -5
  120. package/dist/commands/bench-replica.js +58 -36
  121. package/dist/commands/bench.d.ts +5 -5
  122. package/dist/commands/bench.js +134 -118
  123. package/dist/commands/build.d.ts +7 -0
  124. package/dist/commands/build.js +121 -0
  125. package/dist/commands/bump.js +27 -18
  126. package/dist/commands/check-candid.d.ts +4 -0
  127. package/dist/commands/check-candid.js +15 -0
  128. package/dist/commands/docs-coverage.d.ts +1 -1
  129. package/dist/commands/docs-coverage.js +45 -31
  130. package/dist/commands/docs.d.ts +1 -1
  131. package/dist/commands/docs.js +39 -38
  132. package/dist/commands/format.js +31 -27
  133. package/dist/commands/init.js +102 -92
  134. package/dist/commands/install/install-all.d.ts +2 -2
  135. package/dist/commands/install/install-all.js +23 -21
  136. package/dist/commands/install/install-dep.d.ts +1 -1
  137. package/dist/commands/install/install-dep.js +21 -8
  138. package/dist/commands/install/install-deps.d.ts +1 -1
  139. package/dist/commands/install/install-deps.js +1 -1
  140. package/dist/commands/install/install-local-dep.js +11 -9
  141. package/dist/commands/install/install-mops-dep.d.ts +1 -1
  142. package/dist/commands/install/install-mops-dep.js +32 -27
  143. package/dist/commands/install/sync-local-cache.js +10 -10
  144. package/dist/commands/maintainer.js +21 -21
  145. package/dist/commands/outdated.js +16 -6
  146. package/dist/commands/owner.js +21 -21
  147. package/dist/commands/publish.js +148 -128
  148. package/dist/commands/remove.d.ts +1 -1
  149. package/dist/commands/remove.js +42 -30
  150. package/dist/commands/replica.d.ts +9 -8
  151. package/dist/commands/replica.js +105 -65
  152. package/dist/commands/search.js +15 -13
  153. package/dist/commands/self.js +31 -28
  154. package/dist/commands/sources.d.ts +5 -1
  155. package/dist/commands/sources.js +23 -17
  156. package/dist/commands/sync.d.ts +1 -1
  157. package/dist/commands/sync.js +38 -25
  158. package/dist/commands/template.js +66 -56
  159. package/dist/commands/test/mmf1.d.ts +3 -3
  160. package/dist/commands/test/mmf1.js +33 -31
  161. package/dist/commands/test/reporters/compact-reporter.d.ts +3 -3
  162. package/dist/commands/test/reporters/compact-reporter.js +19 -15
  163. package/dist/commands/test/reporters/files-reporter.d.ts +3 -3
  164. package/dist/commands/test/reporters/files-reporter.js +18 -14
  165. package/dist/commands/test/reporters/reporter.d.ts +2 -2
  166. package/dist/commands/test/reporters/silent-reporter.d.ts +3 -3
  167. package/dist/commands/test/reporters/silent-reporter.js +4 -4
  168. package/dist/commands/test/reporters/verbose-reporter.d.ts +3 -3
  169. package/dist/commands/test/reporters/verbose-reporter.js +17 -13
  170. package/dist/commands/test/test.d.ts +4 -4
  171. package/dist/commands/test/test.js +151 -181
  172. package/dist/commands/test/utils.d.ts +6 -0
  173. package/dist/commands/test/utils.js +63 -2
  174. package/dist/commands/toolchain/index.d.ts +1 -1
  175. package/dist/commands/toolchain/index.js +81 -69
  176. package/dist/commands/toolchain/moc.d.ts +1 -1
  177. package/dist/commands/toolchain/moc.js +48 -24
  178. package/dist/commands/toolchain/pocket-ic.js +12 -12
  179. package/dist/commands/toolchain/toolchain-utils.d.ts +2 -0
  180. package/dist/commands/toolchain/toolchain-utils.js +32 -23
  181. package/dist/commands/toolchain/wasmtime.js +11 -11
  182. package/dist/commands/update.d.ts +1 -1
  183. package/dist/commands/update.js +30 -12
  184. package/dist/commands/user.js +31 -28
  185. package/dist/commands/watch/deployer.d.ts +4 -4
  186. package/dist/commands/watch/deployer.js +45 -36
  187. package/dist/commands/watch/error-checker.d.ts +2 -2
  188. package/dist/commands/watch/error-checker.js +27 -27
  189. package/dist/commands/watch/formatter.d.ts +4 -4
  190. package/dist/commands/watch/formatter.js +17 -17
  191. package/dist/commands/watch/generator.d.ts +3 -3
  192. package/dist/commands/watch/generator.js +28 -23
  193. package/dist/commands/watch/globMoFiles.js +8 -8
  194. package/dist/commands/watch/parseDfxJson.d.ts +2 -2
  195. package/dist/commands/watch/parseDfxJson.js +9 -9
  196. package/dist/commands/watch/tester.d.ts +4 -4
  197. package/dist/commands/watch/tester.js +23 -21
  198. package/dist/commands/watch/warning-checker.d.ts +3 -3
  199. package/dist/commands/watch/warning-checker.js +36 -36
  200. package/dist/commands/watch/watch.js +45 -32
  201. package/dist/declarations/bench/bench.did.d.ts +3 -3
  202. package/dist/declarations/bench/index.d.ts +3 -3
  203. package/dist/declarations/bench/index.js +1 -1
  204. package/dist/declarations/main/index.d.ts +3 -3
  205. package/dist/declarations/main/index.js +1 -1
  206. package/dist/declarations/main/main.did.d.ts +3 -3
  207. package/dist/declarations/storage/index.d.ts +3 -3
  208. package/dist/declarations/storage/index.js +4 -4
  209. package/dist/declarations/storage/storage.did.d.ts +3 -3
  210. package/dist/environments/nodejs/cli.d.ts +1 -0
  211. package/dist/environments/nodejs/cli.js +4 -0
  212. package/dist/environments/web/cli.d.ts +1 -0
  213. package/dist/environments/web/cli.js +4 -0
  214. package/dist/error.d.ts +1 -0
  215. package/dist/error.js +5 -0
  216. package/dist/fix-dist.js +5 -5
  217. package/dist/helpers/find-changelog-entry.js +8 -5
  218. package/dist/helpers/get-dep-name.d.ts +1 -0
  219. package/dist/helpers/get-dep-name.js +4 -1
  220. package/dist/helpers/get-dfx-version.js +4 -4
  221. package/dist/helpers/get-moc-path.js +8 -7
  222. package/dist/helpers/get-moc-version.js +10 -7
  223. package/dist/helpers/get-package-id.js +2 -2
  224. package/dist/helpers/is-candid-compatible.d.ts +1 -0
  225. package/dist/helpers/is-candid-compatible.js +20 -0
  226. package/dist/integrity.d.ts +1 -1
  227. package/dist/integrity.js +47 -38
  228. package/dist/jest.config.d.ts +11 -0
  229. package/dist/jest.config.js +14 -0
  230. package/dist/mops.d.ts +6 -6
  231. package/dist/mops.js +87 -80
  232. package/dist/notify-installs.js +4 -4
  233. package/dist/package.json +11 -10
  234. package/dist/pem.d.ts +3 -3
  235. package/dist/pem.js +20 -12
  236. package/dist/release-cli.js +20 -20
  237. package/dist/resolve-packages.d.ts +1 -1
  238. package/dist/resolve-packages.js +52 -36
  239. package/dist/templates/mops-publish.yml +3 -3
  240. package/dist/templates/mops-test.yml +3 -3
  241. package/dist/templates/src/lib.mo +13 -13
  242. package/dist/templates/test/lib.test.mo +2 -2
  243. package/dist/templates.js +1 -1
  244. package/dist/tests/cli.test.d.ts +1 -0
  245. package/dist/tests/cli.test.js +63 -0
  246. package/dist/types.d.ts +14 -4
  247. package/dist/vessel.d.ts +2 -2
  248. package/dist/vessel.js +41 -34
  249. package/dist/wasm/pkg/bundler/package.json +20 -0
  250. package/dist/wasm/pkg/bundler/wasm.d.ts +3 -0
  251. package/dist/wasm/pkg/bundler/wasm.js +5 -0
  252. package/dist/wasm/pkg/bundler/wasm_bg.js +93 -0
  253. package/dist/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  254. package/dist/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  255. package/dist/wasm/pkg/nodejs/package.json +14 -0
  256. package/dist/wasm/pkg/nodejs/wasm.d.ts +3 -0
  257. package/dist/wasm/pkg/nodejs/wasm.js +98 -0
  258. package/dist/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  259. package/dist/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  260. package/dist/wasm/pkg/web/package.json +18 -0
  261. package/dist/wasm/pkg/web/wasm.d.ts +35 -0
  262. package/dist/wasm/pkg/web/wasm.js +191 -0
  263. package/dist/wasm/pkg/web/wasm_bg.wasm +0 -0
  264. package/dist/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  265. package/dist/wasm.d.ts +5 -0
  266. package/dist/wasm.js +10 -0
  267. package/environments/nodejs/cli.ts +6 -0
  268. package/environments/web/cli.ts +6 -0
  269. package/error.ts +6 -0
  270. package/fix-dist.ts +5 -5
  271. package/global.d.ts +3 -3
  272. package/helpers/find-changelog-entry.ts +26 -23
  273. package/helpers/get-dep-name.ts +7 -3
  274. package/helpers/get-dfx-version.ts +8 -9
  275. package/helpers/get-moc-path.ts +25 -26
  276. package/helpers/get-moc-version.ts +21 -19
  277. package/helpers/get-package-id.ts +4 -4
  278. package/helpers/is-candid-compatible.ts +22 -0
  279. package/integrity.ts +270 -236
  280. package/jest.config.js +14 -0
  281. package/mops.ts +238 -215
  282. package/notify-installs.ts +16 -17
  283. package/package.json +21 -15
  284. package/parallel.ts +28 -24
  285. package/pem.ts +55 -47
  286. package/release-cli.ts +73 -39
  287. package/resolve-packages.ts +231 -189
  288. package/templates/mops-publish.yml +3 -3
  289. package/templates/mops-test.yml +3 -3
  290. package/templates/src/lib.mo +13 -13
  291. package/templates/test/lib.test.mo +2 -2
  292. package/templates.ts +4 -4
  293. package/tests/__snapshots__/cli.test.ts.snap +202 -0
  294. package/tests/build/error/candid/bar.did +3 -0
  295. package/tests/build/error/dfx.json +12 -0
  296. package/tests/build/error/mops.toml +9 -0
  297. package/tests/build/error/src/Bar.mo +5 -0
  298. package/tests/build/error/src/Foo.mo +5 -0
  299. package/tests/build/success/.dfx/local/canister_ids.json +17 -0
  300. package/tests/build/success/.dfx/local/canisters/bar/bar.did +3 -0
  301. package/tests/build/success/.dfx/local/canisters/bar/bar.most +4 -0
  302. package/tests/build/success/.dfx/local/canisters/bar/bar.wasm +0 -0
  303. package/tests/build/success/.dfx/local/canisters/bar/constructor.did +3 -0
  304. package/tests/build/success/.dfx/local/canisters/bar/index.js +42 -0
  305. package/tests/build/success/.dfx/local/canisters/bar/init_args.txt +1 -0
  306. package/tests/build/success/.dfx/local/canisters/bar/service.did +3 -0
  307. package/tests/build/success/.dfx/local/canisters/bar/service.did.d.ts +7 -0
  308. package/tests/build/success/.dfx/local/canisters/bar/service.did.js +4 -0
  309. package/tests/build/success/.dfx/local/canisters/foo/constructor.did +3 -0
  310. package/tests/build/success/.dfx/local/canisters/foo/foo.did +3 -0
  311. package/tests/build/success/.dfx/local/canisters/foo/foo.most +4 -0
  312. package/tests/build/success/.dfx/local/canisters/foo/foo.wasm +0 -0
  313. package/tests/build/success/.dfx/local/canisters/foo/index.js +42 -0
  314. package/tests/build/success/.dfx/local/canisters/foo/init_args.txt +1 -0
  315. package/tests/build/success/.dfx/local/canisters/foo/service.did +3 -0
  316. package/tests/build/success/.dfx/local/canisters/foo/service.did.d.ts +7 -0
  317. package/tests/build/success/.dfx/local/canisters/foo/service.did.js +4 -0
  318. package/tests/build/success/.dfx/local/lsp/ucwa4-rx777-77774-qaada-cai.did +3 -0
  319. package/tests/build/success/.dfx/local/lsp/ulvla-h7777-77774-qaacq-cai.did +3 -0
  320. package/tests/build/success/.dfx/local/network-id +4 -0
  321. package/tests/build/success/candid/bar.did +3 -0
  322. package/tests/build/success/dfx.json +12 -0
  323. package/tests/build/success/mops.toml +9 -0
  324. package/tests/build/success/src/Bar.mo +5 -0
  325. package/tests/build/success/src/Foo.mo +5 -0
  326. package/tests/check-candid/a.did +3 -0
  327. package/tests/check-candid/b.did +5 -0
  328. package/tests/check-candid/c.did +3 -0
  329. package/tests/cli.test.ts +82 -0
  330. package/tsconfig.json +26 -19
  331. package/types.ts +41 -31
  332. package/vessel.ts +219 -187
  333. package/wasm/Cargo.lock +1475 -0
  334. package/wasm/Cargo.toml +28 -0
  335. package/wasm/pkg/bundler/package.json +20 -0
  336. package/wasm/pkg/bundler/wasm.d.ts +3 -0
  337. package/wasm/pkg/bundler/wasm.js +5 -0
  338. package/wasm/pkg/bundler/wasm_bg.js +93 -0
  339. package/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  340. package/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  341. package/wasm/pkg/nodejs/package.json +14 -0
  342. package/wasm/pkg/nodejs/wasm.d.ts +3 -0
  343. package/wasm/pkg/nodejs/wasm.js +98 -0
  344. package/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  345. package/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  346. package/wasm/pkg/web/package.json +18 -0
  347. package/wasm/pkg/web/wasm.d.ts +35 -0
  348. package/wasm/pkg/web/wasm.js +191 -0
  349. package/wasm/pkg/web/wasm_bg.wasm +0 -0
  350. package/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  351. package/wasm/src/lib.rs +17 -0
  352. package/wasm.ts +16 -0
@@ -1,30 +1,39 @@
1
- import process from 'node:process';
2
- import prompts from 'prompts';
3
- import chalk from 'chalk';
4
- import { checkConfigFile, readConfig, writeConfig } from '../mops.js';
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 && !['major', 'minor', 'patch'].includes(part)) {
10
- console.log(chalk.red('Unknown version part. Available parts: major, minor, patch'));
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('No [package] section found in mops.toml.'));
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: 'select',
22
- name: 'part',
23
- message: 'Select new version:',
21
+ type: "select",
22
+ name: "part",
23
+ message: "Select new version:",
24
24
  choices: [
25
- { title: `${updateVersion(config.package.version, 'major')} ${chalk.dim('(major, breaking changes)')}`, value: 'major' },
26
- { title: `${updateVersion(config.package.version, 'minor')} ${chalk.dim('(minor, new features)')}`, value: 'minor' },
27
- { title: `${updateVersion(config.package.version, 'patch')} ${chalk.dim('(patch, bug fixes)')}`, value: 'patch' },
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 = ['major', 'minor', 'patch'].indexOf(part);
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] || '0') + 1);
55
+ parts[idx] = String(parseInt(parts[idx] || "0") + 1);
47
56
  for (let i = idx + 1; i < parts.length; i++) {
48
- parts[i] = '0';
57
+ parts[i] = "0";
49
58
  }
50
- return parts.join('.');
59
+ return parts.join(".");
51
60
  }
@@ -0,0 +1,4 @@
1
+ export interface CheckCandidOptions {
2
+ verbose?: boolean;
3
+ }
4
+ export declare function checkCandid(newPath: string, originalPath: string): Promise<void>;
@@ -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,4 +1,4 @@
1
- export type DocsCoverageReporter = 'compact' | 'files' | 'missing' | 'verbose' | 'silent';
1
+ export type DocsCoverageReporter = "compact" | "files" | "missing" | "verbose" | "silent";
2
2
  type DocsCoverageOptions = {
3
3
  source: string;
4
4
  reporter: DocsCoverageReporter;
@@ -1,51 +1,55 @@
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';
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 = '.mops/.docs';
7
+ let docsDir = ".mops/.docs";
8
8
  let { source, reporter, threshold } = {
9
- source: 'src',
10
- reporter: 'files',
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: 'html',
17
+ format: "html",
18
18
  silent: true,
19
19
  });
20
- let files = globSync(`${docsDir}/**/*.html`, { ignore: [`${docsDir}/**/index.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 === 'silent') {
27
+ if (reporter === "silent") {
26
28
  continue;
27
29
  }
28
- if (reporter !== 'compact' && (reporter !== 'missing' || coverage.coverage < 100)) {
30
+ if (reporter !== "compact" &&
31
+ (reporter !== "missing" || coverage.coverage < 100)) {
29
32
  console.log(`• ${coverage.file} ${colorizeCoverage(coverage.coverage)}`);
30
33
  }
31
- if (reporter === 'missing' && coverage.coverage < 100) {
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('') : chalk.red('')} ${item.id} ${chalk.gray(item.type)}`);
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 === 'verbose') {
41
+ else if (reporter === "verbose") {
39
42
  for (let item of coverage.items) {
40
- console.log(` ${item.covered ? chalk.green('') : chalk.red('')} ${item.id} ${chalk.gray(item.type)}`);
43
+ console.log(` ${item.covered ? chalk.green("") : chalk.red("")} ${item.id} ${chalk.gray(item.type)}`);
41
44
  }
42
45
  }
43
46
  }
44
- if (reporter !== 'compact' && reporter !== 'silent') {
45
- console.log('-'.repeat(50));
47
+ if (reporter !== "compact" && reporter !== "silent") {
48
+ console.log("-".repeat(50));
46
49
  }
47
- let totalCoverage = coverages.reduce((acc, coverage) => acc + coverage.coverage, 0) / (coverages.length || 1);
48
- if (reporter !== 'silent') {
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, 'utf-8'));
58
- let module = dom.window.document.querySelector('h1')?.textContent || '';
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('h4')].map(h4 => {
61
- let id = h4.getAttribute('id')?.replace('type.', '');
62
- let type = h4.className.replace('-declaration', '').replace('function', 'func');
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('p + p')?.textContent;
65
- return { file: moduleFile, id, type, definition, comment, covered: (comment || '').length >= 5 };
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 = items.filter(item => item.covered).length / items.length * 100;
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
  }
@@ -1,7 +1,7 @@
1
1
  type DocsOptions = {
2
2
  source: string;
3
3
  output: string;
4
- format: 'md' | 'adoc' | 'html';
4
+ format: "md" | "adoc" | "html";
5
5
  silent: boolean;
6
6
  archive: boolean;
7
7
  };
@@ -1,39 +1,40 @@
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';
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: 'src',
16
- output: '.mops/.docs',
17
- format: 'adoc',
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 === 'md') {
23
- format = 'plain';
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 && process.env.DFX_MOC_PATH.includes('mocv/versions')) {
31
- moDocPath = process.env.DFX_MOC_PATH.replace(/\/moc$/, '/mo-doc');
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('moc', { fallback: true });
36
- moDocPath = mocPath.replace(/\/moc$/, '/mo-doc');
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('data', (data) => {
47
+ proc.stdout.on("data", (data) => {
47
48
  let text = data.toString().trim();
48
- let failedText = 'Failed to extract documentation';
49
+ let failedText = "Failed to extract documentation";
49
50
  if (text.includes(failedText)) {
50
- silent || console.log(text.replaceAll(failedText, chalk.yellow('Warning: ') + failedText));
51
+ silent ||
52
+ console.log(text.replaceAll(failedText, chalk.yellow("Warning: ") + failedText));
51
53
  }
52
- silent || console.log('stdout', text);
54
+ silent || console.log("stdout", text);
53
55
  });
54
56
  // stderr
55
- let stderr = '';
56
- proc.stderr.on('data', (data) => {
57
+ let stderr = "";
58
+ proc.stderr.on("data", (data) => {
57
59
  let text = data.toString().trim();
58
- if (text.includes('syntax error')) {
59
- console.log(chalk.red('Error:'), text);
60
+ if (text.includes("syntax error")) {
61
+ console.log(chalk.red("Error:"), text);
60
62
  process.exit(1);
61
63
  }
62
- if (text.includes('No such file or directory') || text.includes('Couldn\'t find a module expression')) {
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('exit', (code) => {
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('Error:'), code, stderr);
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
- `${docsDir}/**/*.test.adoc`,
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, 'docs.tgz')));
95
+ }, files).pipe(fs.createWriteStream(path.join(docsDir, "docs.tgz")));
96
96
  await streamToPromise(stream);
97
97
  }
98
98
  }
99
- silent || console.log(`${chalk.green('Documentation generated')} at ${docsDirRelative}`);
99
+ silent ||
100
+ console.log(`${chalk.green("Documentation generated")} at ${docsDirRelative}`);
100
101
  }
@@ -1,18 +1,18 @@
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';
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
- '**/node_modules/**',
12
- '**/.mops/**',
13
- '**/.vessel/**',
14
- '**/.git/**',
15
- '**/dist/**',
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 = '**/*.mo';
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('No *.mo files found');
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: 'motoko-tt-parse',
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, 'utf8');
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 || console.log(`${chalk.green('✓')} ${absToRel(file)} ${chalk.gray('valid')}`);
90
+ options.silent ||
91
+ console.log(`${chalk.green("✓")} ${absToRel(file)} ${chalk.gray("valid")}`);
91
92
  }
92
93
  else {
93
- options.silent || console.log(`${chalk.red('✖')} ${absToRel(file)} ${chalk.gray('invalid')}`);
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 || console.log(`${chalk.green('✓')} ${absToRel(file)} ${chalk.gray('valid')}`);
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 || console.log(`${chalk.yellow('*')} ${absToRel(file)} ${chalk.gray('formatted')}`);
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('-'.repeat(50));
114
- let plural = (n) => n === 1 ? '' : 's';
115
- let str = `Checked ${chalk.gray(files.length)} file${plural(files.length)} in ${chalk.gray(((Date.now() - startTime) / 1000).toFixed(2) + 's')}`;
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('✓ All files have valid formatting'));
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(`${(`Run '${chalk.yellow('mops format' + (filter ? ` ${filter}` : ''))}' to format your code`)}`);
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);