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
package/commands/docs.ts CHANGED
@@ -1,124 +1,134 @@
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';
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
10
 
11
- import {getRootDir} from '../mops.js';
12
- import {toolchain} from './toolchain/index.js';
11
+ import { getRootDir } from "../mops.js";
12
+ import { toolchain } from "./toolchain/index.js";
13
13
 
14
- let moDocPath : string;
14
+ let moDocPath: string;
15
15
 
16
16
  type DocsOptions = {
17
- source : string,
18
- output : string,
19
- format : 'md' | 'adoc' | 'html',
20
- silent : boolean,
21
- archive : boolean,
17
+ source: string;
18
+ output: string;
19
+ format: "md" | "adoc" | "html";
20
+ silent: boolean;
21
+ archive: boolean;
22
22
  };
23
23
 
24
- export async function docs(options : Partial<DocsOptions> = {}) {
25
- let {source, output, format, silent, archive} = {
26
- source: 'src',
27
- output: '.mops/.docs',
28
- format: 'adoc',
29
- silent: false,
30
- archive: false,
31
- ...options,
32
- };
24
+ export async function docs(options: Partial<DocsOptions> = {}) {
25
+ let { source, output, format, silent, archive } = {
26
+ source: "src",
27
+ output: ".mops/.docs",
28
+ format: "adoc",
29
+ silent: false,
30
+ archive: false,
31
+ ...options,
32
+ };
33
33
 
34
- if (format === 'md') {
35
- format = 'plain';
36
- }
34
+ if (format === "md") {
35
+ format = "plain";
36
+ }
37
37
 
38
- let rootDir = getRootDir();
39
- let docsDir = path.join(rootDir, output);
40
- let docsDirRelative = path.relative(process.cwd(), docsDir);
38
+ let rootDir = getRootDir();
39
+ let docsDir = path.join(rootDir, output);
40
+ let docsDirRelative = path.relative(process.cwd(), docsDir);
41
41
 
42
- deleteSync([docsDir], {force: true});
42
+ deleteSync([docsDir], { force: true });
43
43
 
44
- // detect mocv (legacy)
45
- if (process.env.DFX_MOC_PATH && process.env.DFX_MOC_PATH.includes('mocv/versions')) {
46
- moDocPath = process.env.DFX_MOC_PATH.replace(/\/moc$/, '/mo-doc');
47
- }
48
- else {
49
- // fallbacks to dfx moc if not specified in config
50
- let mocPath = await toolchain.bin('moc', {fallback: true});
51
- moDocPath = mocPath.replace(/\/moc$/, '/mo-doc');
52
- }
44
+ // detect mocv (legacy)
45
+ if (
46
+ process.env.DFX_MOC_PATH &&
47
+ process.env.DFX_MOC_PATH.includes("mocv/versions")
48
+ ) {
49
+ moDocPath = process.env.DFX_MOC_PATH.replace(/\/moc$/, "/mo-doc");
50
+ } else {
51
+ // fallbacks to dfx moc if not specified in config
52
+ let mocPath = await toolchain.bin("moc", { fallback: true });
53
+ moDocPath = mocPath.replace(/\/moc$/, "/mo-doc");
54
+ }
53
55
 
54
- // generate docs
55
- await new Promise<void>((resolve) => {
56
- let proc = spawn(moDocPath, [
57
- `--source=${path.join(rootDir, source)}`,
58
- `--output=${docsDirRelative}`,
59
- `--format=${format}`,
60
- ]);
56
+ // generate docs
57
+ await new Promise<void>((resolve) => {
58
+ let proc = spawn(moDocPath, [
59
+ `--source=${path.join(rootDir, source)}`,
60
+ `--output=${docsDirRelative}`,
61
+ `--format=${format}`,
62
+ ]);
61
63
 
62
- // stdout
63
- proc.stdout.on('data', (data) => {
64
- let text = data.toString().trim();
65
- let failedText = 'Failed to extract documentation';
66
- if (text.includes(failedText)) {
67
- silent ||console.log(text.replaceAll(failedText, chalk.yellow('Warning: ') + failedText));
68
- }
69
- silent || console.log('stdout', text);
70
- });
64
+ // stdout
65
+ proc.stdout.on("data", (data) => {
66
+ let text = data.toString().trim();
67
+ let failedText = "Failed to extract documentation";
68
+ if (text.includes(failedText)) {
69
+ silent ||
70
+ console.log(
71
+ text.replaceAll(failedText, chalk.yellow("Warning: ") + failedText),
72
+ );
73
+ }
74
+ silent || console.log("stdout", text);
75
+ });
71
76
 
72
- // stderr
73
- let stderr = '';
74
- proc.stderr.on('data', (data) => {
75
- let text = data.toString().trim();
76
- if (text.includes('syntax error')) {
77
- console.log(chalk.red('Error:'), text);
78
- process.exit(1);
79
- }
80
- if (text.includes('No such file or directory') || text.includes('Couldn\'t find a module expression')) {
81
- silent || console.log(text);
82
- return;
83
- }
84
- stderr += text;
85
- });
77
+ // stderr
78
+ let stderr = "";
79
+ proc.stderr.on("data", (data) => {
80
+ let text = data.toString().trim();
81
+ if (text.includes("syntax error")) {
82
+ console.log(chalk.red("Error:"), text);
83
+ process.exit(1);
84
+ }
85
+ if (
86
+ text.includes("No such file or directory") ||
87
+ text.includes("Couldn't find a module expression")
88
+ ) {
89
+ silent || console.log(text);
90
+ return;
91
+ }
92
+ stderr += text;
93
+ });
86
94
 
87
- // exit
88
- proc.on('exit', (code) => {
89
- // if no source files found
90
- if (code === 2 && !stderr) {
91
- resolve();
92
- return;
93
- }
94
- if (code !== 0) {
95
- console.log(chalk.red('Error:'), code, stderr);
96
- process.exit(1);
97
- }
98
- resolve();
99
- });
100
- });
95
+ // exit
96
+ proc.on("exit", (code) => {
97
+ // if no source files found
98
+ if (code === 2 && !stderr) {
99
+ resolve();
100
+ return;
101
+ }
102
+ if (code !== 0) {
103
+ console.log(chalk.red("Error:"), code, stderr);
104
+ process.exit(1);
105
+ }
106
+ resolve();
107
+ });
108
+ });
101
109
 
102
- // create archive
103
- if (archive) {
104
- let ignore = [
105
- `${docsDir}/**/*.test.adoc`,
106
- `${docsDir}/test/**/*`,
107
- ];
108
- let files = globSync(`${docsDir}/**/*.adoc`, {ignore}).map(f => path.relative(docsDir, f));
109
- files.sort();
110
- if (files.length) {
111
- let stream = createTar(
112
- {
113
- cwd: docsDir,
114
- gzip: true,
115
- portable: true,
116
- },
117
- files
118
- ).pipe(fs.createWriteStream(path.join(docsDir, 'docs.tgz')));
119
- await streamToPromise(stream);
120
- }
121
- }
110
+ // create archive
111
+ if (archive) {
112
+ let ignore = [`${docsDir}/**/*.test.adoc`, `${docsDir}/test/**/*`];
113
+ let files = globSync(`${docsDir}/**/*.adoc`, { ignore }).map((f) =>
114
+ path.relative(docsDir, f),
115
+ );
116
+ files.sort();
117
+ if (files.length) {
118
+ let stream = createTar(
119
+ {
120
+ cwd: docsDir,
121
+ gzip: true,
122
+ portable: true,
123
+ },
124
+ files,
125
+ ).pipe(fs.createWriteStream(path.join(docsDir, "docs.tgz")));
126
+ await streamToPromise(stream);
127
+ }
128
+ }
122
129
 
123
- silent || console.log(`${chalk.green('Documentation generated')} at ${docsDirRelative}`);
124
- }
130
+ silent ||
131
+ console.log(
132
+ `${chalk.green("Documentation generated")} at ${docsDirRelative}`,
133
+ );
134
+ }
@@ -1,169 +1,185 @@
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';
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
7
 
8
- import {getRootDir} from '../mops.js';
9
- import {absToRel} from './test/utils.js';
10
- import {parallel} from '../parallel.js';
8
+ import { getRootDir } from "../mops.js";
9
+ import { absToRel } from "./test/utils.js";
10
+ import { parallel } from "../parallel.js";
11
11
 
12
12
  let ignore = [
13
- '**/node_modules/**',
14
- '**/.mops/**',
15
- '**/.vessel/**',
16
- '**/.git/**',
17
- '**/dist/**',
13
+ "**/node_modules/**",
14
+ "**/.mops/**",
15
+ "**/.vessel/**",
16
+ "**/.git/**",
17
+ "**/dist/**",
18
18
  ];
19
19
 
20
20
  let globConfig = {
21
- nocase: true,
22
- ignore: ignore,
21
+ nocase: true,
22
+ ignore: ignore,
23
23
  };
24
24
 
25
25
  type FormatOptions = {
26
- check : boolean,
27
- silent : boolean,
26
+ check: boolean;
27
+ silent: boolean;
28
28
  };
29
29
 
30
30
  export type FormatResult = {
31
- ok : boolean,
32
- total : number,
33
- checked : number,
34
- valid : number,
35
- invalid : number,
36
- formatted : number,
31
+ ok: boolean;
32
+ total: number;
33
+ checked: number;
34
+ valid: number;
35
+ invalid: number;
36
+ formatted: number;
37
37
  };
38
38
 
39
- export async function format(filter : string, options : Partial<FormatOptions> = {}, signal ?: AbortSignal, onProgress ?: (result : FormatResult) => void) : Promise<FormatResult> {
40
- let startTime = Date.now();
41
-
42
- let rootDir = getRootDir();
43
- let globStr = '**/*.mo';
44
- if (filter) {
45
- globStr = `**/*${filter}*.mo`;
46
- }
47
-
48
- let files = globSync(path.join(rootDir, globStr), {
49
- ...globConfig,
50
- cwd: rootDir,
51
- });
52
- let invalidFiles = 0;
53
- let checkedFiles = 0;
54
-
55
- let getResult = (ok : boolean) => {
56
- let result : FormatResult = {
57
- ok,
58
- total: files.length,
59
- checked: checkedFiles,
60
- valid: files.length - invalidFiles,
61
- invalid: invalidFiles,
62
- formatted: invalidFiles,
63
- };
64
- onProgress?.(result);
65
- return result;
66
- };
67
-
68
- if (!files.length) {
69
- if (filter) {
70
- options.silent || console.log(`No files found for filter '${filter}'`);
71
- return getResult(false);
72
- }
73
- if (!options.silent) {
74
- console.log('No *.mo files found');
75
- }
76
- return getResult(false);
77
- }
78
-
79
- if (signal?.aborted) {
80
- return getResult(false);
81
- }
82
-
83
- // get prettier config from .prettierrc
84
- let prettierConfigFile = await prettier.resolveConfigFile();
85
-
86
- await parallel(4, files, async (file) => {
87
- if (signal?.aborted) {
88
- return;
89
- }
90
-
91
- let conf = await prettier.resolveConfig(file, {editorconfig: true});
92
- let prettierConfig : prettier.Options = {};
93
- if (prettierConfigFile) {
94
- if (conf) {
95
- prettierConfig = conf;
96
- }
97
- }
98
-
99
- // merge config from mops.toml [format]
100
- // disabled, because we lose vscode extension support
101
- // if (config.format) {
102
- // Object.assign(prettierConfig, config.format);
103
- // }
104
-
105
- // add motoko parser plugin
106
- Object.assign(prettierConfig, {
107
- parser: 'motoko-tt-parse',
108
- plugins: [motokoPlugin],
109
- filepath: file,
110
- });
111
-
112
- // check file
113
- let code = await fs.readFile(file, 'utf8');
114
- let formatted = await prettier.format(code, prettierConfig);
115
- let ok = formatted === code;
116
- invalidFiles += Number(!ok);
117
-
118
- if (options.check) {
119
- if (ok) {
120
- options.silent || console.log(`${chalk.green('✓')} ${absToRel(file)} ${chalk.gray('valid')}`);
121
- }
122
- else {
123
- options.silent || console.log(`${chalk.red('✖')} ${absToRel(file)} ${chalk.gray('invalid')}`);
124
- }
125
- }
126
- else {
127
- if (ok) {
128
- options.silent || console.log(`${chalk.green('✓')} ${absToRel(file)} ${chalk.gray('valid')}`);
129
- }
130
- else {
131
- await fs.writeFile(file, formatted);
132
- options.silent || console.log(`${chalk.yellow('*')} ${absToRel(file)} ${chalk.gray('formatted')}`);
133
- }
134
- }
135
-
136
- checkedFiles += 1;
137
-
138
- // trigger onProgress
139
- getResult(false);
140
- });
141
-
142
- if (signal?.aborted) {
143
- return getResult(false);
144
- }
145
-
146
- if (!options.silent) {
147
- console.log('-'.repeat(50));
148
-
149
- let plural = (n : number) => n === 1 ? '' : 's';
150
- let str = `Checked ${chalk.gray(files.length)} file${plural(files.length)} in ${chalk.gray(((Date.now() - startTime) / 1000).toFixed(2) + 's')}`;
151
- if (invalidFiles) {
152
- str += options.check
153
- ? `, invalid ${chalk.redBright(invalidFiles)} file${plural(invalidFiles)}`
154
- : `, formatted ${chalk.yellowBright(invalidFiles)} file${plural(invalidFiles)}`;
155
- }
156
- console.log(str);
157
-
158
- if (!invalidFiles) {
159
- console.log(chalk.green('✓ All files have valid formatting'));
160
- }
161
- }
162
-
163
- if (options.check && invalidFiles && !options.silent) {
164
- console.log(`${(`Run '${chalk.yellow('mops format' + (filter ? ` ${filter}` : ''))}' to format your code`)}`);
165
- return getResult(false);
166
- }
167
-
168
- return getResult(true);
169
- }
39
+ export async function format(
40
+ filter: string,
41
+ options: Partial<FormatOptions> = {},
42
+ signal?: AbortSignal,
43
+ onProgress?: (result: FormatResult) => void,
44
+ ): Promise<FormatResult> {
45
+ let startTime = Date.now();
46
+
47
+ let rootDir = getRootDir();
48
+ let globStr = "**/*.mo";
49
+ if (filter) {
50
+ globStr = `**/*${filter}*.mo`;
51
+ }
52
+
53
+ let files = globSync(path.join(rootDir, globStr), {
54
+ ...globConfig,
55
+ cwd: rootDir,
56
+ });
57
+ let invalidFiles = 0;
58
+ let checkedFiles = 0;
59
+
60
+ let getResult = (ok: boolean) => {
61
+ let result: FormatResult = {
62
+ ok,
63
+ total: files.length,
64
+ checked: checkedFiles,
65
+ valid: files.length - invalidFiles,
66
+ invalid: invalidFiles,
67
+ formatted: invalidFiles,
68
+ };
69
+ onProgress?.(result);
70
+ return result;
71
+ };
72
+
73
+ if (!files.length) {
74
+ if (filter) {
75
+ options.silent || console.log(`No files found for filter '${filter}'`);
76
+ return getResult(false);
77
+ }
78
+ if (!options.silent) {
79
+ console.log("No *.mo files found");
80
+ }
81
+ return getResult(false);
82
+ }
83
+
84
+ if (signal?.aborted) {
85
+ return getResult(false);
86
+ }
87
+
88
+ // get prettier config from .prettierrc
89
+ let prettierConfigFile = await prettier.resolveConfigFile();
90
+
91
+ await parallel(4, files, async (file) => {
92
+ if (signal?.aborted) {
93
+ return;
94
+ }
95
+
96
+ let conf = await prettier.resolveConfig(file, { editorconfig: true });
97
+ let prettierConfig: prettier.Options = {};
98
+ if (prettierConfigFile) {
99
+ if (conf) {
100
+ prettierConfig = conf;
101
+ }
102
+ }
103
+
104
+ // merge config from mops.toml [format]
105
+ // disabled, because we lose vscode extension support
106
+ // if (config.format) {
107
+ // Object.assign(prettierConfig, config.format);
108
+ // }
109
+
110
+ // add motoko parser plugin
111
+ Object.assign(prettierConfig, {
112
+ parser: "motoko-tt-parse",
113
+ plugins: [motokoPlugin],
114
+ filepath: file,
115
+ });
116
+
117
+ // check file
118
+ let code = await fs.readFile(file, "utf8");
119
+ let formatted = await prettier.format(code, prettierConfig);
120
+ let ok = formatted === code;
121
+ invalidFiles += Number(!ok);
122
+
123
+ if (options.check) {
124
+ if (ok) {
125
+ options.silent ||
126
+ console.log(
127
+ `${chalk.green("✓")} ${absToRel(file)} ${chalk.gray("valid")}`,
128
+ );
129
+ } else {
130
+ options.silent ||
131
+ console.log(
132
+ `${chalk.red("✖")} ${absToRel(file)} ${chalk.gray("invalid")}`,
133
+ );
134
+ }
135
+ } else {
136
+ if (ok) {
137
+ options.silent ||
138
+ console.log(
139
+ `${chalk.green("✓")} ${absToRel(file)} ${chalk.gray("valid")}`,
140
+ );
141
+ } else {
142
+ await fs.writeFile(file, formatted);
143
+ options.silent ||
144
+ console.log(
145
+ `${chalk.yellow("*")} ${absToRel(file)} ${chalk.gray("formatted")}`,
146
+ );
147
+ }
148
+ }
149
+
150
+ checkedFiles += 1;
151
+
152
+ // trigger onProgress
153
+ getResult(false);
154
+ });
155
+
156
+ if (signal?.aborted) {
157
+ return getResult(false);
158
+ }
159
+
160
+ if (!options.silent) {
161
+ console.log("-".repeat(50));
162
+
163
+ let plural = (n: number) => (n === 1 ? "" : "s");
164
+ let str = `Checked ${chalk.gray(files.length)} file${plural(files.length)} in ${chalk.gray(((Date.now() - startTime) / 1000).toFixed(2) + "s")}`;
165
+ if (invalidFiles) {
166
+ str += options.check
167
+ ? `, invalid ${chalk.redBright(invalidFiles)} file${plural(invalidFiles)}`
168
+ : `, formatted ${chalk.yellowBright(invalidFiles)} file${plural(invalidFiles)}`;
169
+ }
170
+ console.log(str);
171
+
172
+ if (!invalidFiles) {
173
+ console.log(chalk.green("✓ All files have valid formatting"));
174
+ }
175
+ }
176
+
177
+ if (options.check && invalidFiles && !options.silent) {
178
+ console.log(
179
+ `${`Run '${chalk.yellow("mops format" + (filter ? ` ${filter}` : ""))}' to format your code`}`,
180
+ );
181
+ return getResult(false);
182
+ }
183
+
184
+ return getResult(true);
185
+ }