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.
Files changed (322) hide show
  1. package/.DS_Store +0 -0
  2. package/.eslintrc.json +7 -7
  3. package/CHANGELOG.md +6 -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/bundle/bench/bench-canister.mo +109 -101
  12. package/bundle/bench/user-bench.mo +6 -6
  13. package/bundle/bin/mops.js +1 -1
  14. package/bundle/cli.js +797 -792
  15. package/bundle/cli.tgz +0 -0
  16. package/bundle/package.json +6 -5
  17. package/bundle/templates/mops-publish.yml +3 -3
  18. package/bundle/templates/mops-test.yml +3 -3
  19. package/bundle/templates/src/lib.mo +13 -13
  20. package/bundle/templates/test/lib.test.mo +2 -2
  21. package/bundle-package-json.ts +8 -8
  22. package/cache.ts +80 -65
  23. package/check-requirements.ts +49 -45
  24. package/cli.ts +577 -376
  25. package/commands/add.ts +142 -129
  26. package/commands/available-updates.ts +55 -41
  27. package/commands/bench/bench-canister.mo +114 -108
  28. package/commands/bench/user-bench.mo +6 -6
  29. package/commands/bench-replica.ts +146 -118
  30. package/commands/bench.ts +563 -497
  31. package/commands/build.ts +177 -0
  32. package/commands/bump.ts +68 -57
  33. package/commands/check-candid.ts +24 -0
  34. package/commands/docs-coverage.ts +124 -102
  35. package/commands/docs.ts +118 -108
  36. package/commands/format.ts +171 -155
  37. package/commands/init.ts +301 -275
  38. package/commands/install/install-all.ts +75 -62
  39. package/commands/install/install-dep.ts +43 -28
  40. package/commands/install/install-deps.ts +23 -15
  41. package/commands/install/install-local-dep.ts +42 -34
  42. package/commands/install/install-mops-dep.ts +154 -123
  43. package/commands/install/sync-local-cache.ts +39 -35
  44. package/commands/maintainer.ts +109 -99
  45. package/commands/outdated.ts +30 -24
  46. package/commands/owner.ts +107 -99
  47. package/commands/publish.ts +534 -443
  48. package/commands/remove.ts +119 -89
  49. package/commands/replica.ts +391 -316
  50. package/commands/search.ts +42 -36
  51. package/commands/self.ts +63 -56
  52. package/commands/sources.ts +66 -49
  53. package/commands/sync.ts +92 -75
  54. package/commands/template.ts +145 -102
  55. package/commands/test/mmf1.ts +146 -119
  56. package/commands/test/reporters/compact-reporter.ts +87 -84
  57. package/commands/test/reporters/files-reporter.ts +56 -51
  58. package/commands/test/reporters/reporter.ts +12 -6
  59. package/commands/test/reporters/silent-reporter.ts +58 -59
  60. package/commands/test/reporters/verbose-reporter.ts +66 -54
  61. package/commands/test/test.ts +498 -401
  62. package/commands/test/utils.ts +72 -67
  63. package/commands/toolchain/index.ts +363 -322
  64. package/commands/toolchain/moc.ts +78 -50
  65. package/commands/toolchain/pocket-ic.ts +41 -34
  66. package/commands/toolchain/toolchain-utils.ts +92 -72
  67. package/commands/toolchain/wasmtime.ts +37 -34
  68. package/commands/update.ts +82 -64
  69. package/commands/user.ts +90 -81
  70. package/commands/watch/deployer.ts +188 -152
  71. package/commands/watch/error-checker.ts +90 -80
  72. package/commands/watch/formatter.ts +72 -60
  73. package/commands/watch/generator.ts +116 -96
  74. package/commands/watch/globMoFiles.ts +13 -13
  75. package/commands/watch/parseDfxJson.ts +63 -57
  76. package/commands/watch/tester.ts +83 -65
  77. package/commands/watch/warning-checker.ts +149 -136
  78. package/commands/watch/watch.ts +123 -95
  79. package/dist/api/actors.d.ts +4 -4
  80. package/dist/api/actors.js +8 -8
  81. package/dist/api/downloadPackageFiles.d.ts +2 -2
  82. package/dist/api/downloadPackageFiles.js +10 -10
  83. package/dist/api/getHighestVersion.js +1 -1
  84. package/dist/api/index.d.ts +4 -4
  85. package/dist/api/index.js +4 -4
  86. package/dist/api/network.js +9 -9
  87. package/dist/api/resolveVersion.js +3 -3
  88. package/dist/bin/mops.js +1 -1
  89. package/dist/bundle-package-json.js +8 -8
  90. package/dist/cache.js +22 -17
  91. package/dist/check-requirements.js +11 -11
  92. package/dist/cli.js +283 -186
  93. package/dist/commands/add.d.ts +1 -1
  94. package/dist/commands/add.js +40 -37
  95. package/dist/commands/available-updates.d.ts +1 -1
  96. package/dist/commands/available-updates.js +18 -12
  97. package/dist/commands/bench/bench-canister.mo +114 -108
  98. package/dist/commands/bench/user-bench.mo +6 -6
  99. package/dist/commands/bench-replica.d.ts +4 -4
  100. package/dist/commands/bench-replica.js +45 -34
  101. package/dist/commands/bench.d.ts +5 -5
  102. package/dist/commands/bench.js +134 -118
  103. package/dist/commands/build.d.ts +7 -0
  104. package/dist/commands/build.js +121 -0
  105. package/dist/commands/bump.js +27 -18
  106. package/dist/commands/check-candid.d.ts +4 -0
  107. package/dist/commands/check-candid.js +15 -0
  108. package/dist/commands/docs-coverage.d.ts +1 -1
  109. package/dist/commands/docs-coverage.js +45 -31
  110. package/dist/commands/docs.d.ts +1 -1
  111. package/dist/commands/docs.js +39 -38
  112. package/dist/commands/format.js +31 -27
  113. package/dist/commands/init.js +102 -92
  114. package/dist/commands/install/install-all.d.ts +2 -2
  115. package/dist/commands/install/install-all.js +23 -21
  116. package/dist/commands/install/install-dep.d.ts +1 -1
  117. package/dist/commands/install/install-dep.js +21 -8
  118. package/dist/commands/install/install-deps.d.ts +1 -1
  119. package/dist/commands/install/install-deps.js +1 -1
  120. package/dist/commands/install/install-local-dep.js +11 -9
  121. package/dist/commands/install/install-mops-dep.d.ts +1 -1
  122. package/dist/commands/install/install-mops-dep.js +32 -27
  123. package/dist/commands/install/sync-local-cache.js +10 -10
  124. package/dist/commands/maintainer.js +21 -21
  125. package/dist/commands/outdated.js +12 -8
  126. package/dist/commands/owner.js +21 -21
  127. package/dist/commands/publish.js +148 -128
  128. package/dist/commands/remove.d.ts +1 -1
  129. package/dist/commands/remove.js +42 -30
  130. package/dist/commands/replica.d.ts +7 -7
  131. package/dist/commands/replica.js +85 -57
  132. package/dist/commands/search.js +15 -13
  133. package/dist/commands/self.js +31 -28
  134. package/dist/commands/sources.d.ts +5 -1
  135. package/dist/commands/sources.js +23 -17
  136. package/dist/commands/sync.d.ts +1 -1
  137. package/dist/commands/sync.js +38 -25
  138. package/dist/commands/template.js +66 -56
  139. package/dist/commands/test/mmf1.d.ts +3 -3
  140. package/dist/commands/test/mmf1.js +33 -31
  141. package/dist/commands/test/reporters/compact-reporter.d.ts +3 -3
  142. package/dist/commands/test/reporters/compact-reporter.js +19 -15
  143. package/dist/commands/test/reporters/files-reporter.d.ts +3 -3
  144. package/dist/commands/test/reporters/files-reporter.js +18 -14
  145. package/dist/commands/test/reporters/reporter.d.ts +2 -2
  146. package/dist/commands/test/reporters/silent-reporter.d.ts +3 -3
  147. package/dist/commands/test/reporters/silent-reporter.js +4 -4
  148. package/dist/commands/test/reporters/verbose-reporter.d.ts +3 -3
  149. package/dist/commands/test/reporters/verbose-reporter.js +17 -13
  150. package/dist/commands/test/test.d.ts +4 -4
  151. package/dist/commands/test/test.js +134 -112
  152. package/dist/commands/test/utils.d.ts +3 -3
  153. package/dist/commands/test/utils.js +17 -17
  154. package/dist/commands/toolchain/index.d.ts +1 -1
  155. package/dist/commands/toolchain/index.js +81 -69
  156. package/dist/commands/toolchain/moc.d.ts +1 -1
  157. package/dist/commands/toolchain/moc.js +48 -24
  158. package/dist/commands/toolchain/pocket-ic.js +12 -12
  159. package/dist/commands/toolchain/toolchain-utils.d.ts +2 -0
  160. package/dist/commands/toolchain/toolchain-utils.js +32 -23
  161. package/dist/commands/toolchain/wasmtime.js +11 -11
  162. package/dist/commands/update.d.ts +1 -1
  163. package/dist/commands/update.js +18 -14
  164. package/dist/commands/user.js +31 -28
  165. package/dist/commands/watch/deployer.d.ts +4 -4
  166. package/dist/commands/watch/deployer.js +45 -36
  167. package/dist/commands/watch/error-checker.d.ts +2 -2
  168. package/dist/commands/watch/error-checker.js +27 -27
  169. package/dist/commands/watch/formatter.d.ts +4 -4
  170. package/dist/commands/watch/formatter.js +17 -17
  171. package/dist/commands/watch/generator.d.ts +3 -3
  172. package/dist/commands/watch/generator.js +28 -23
  173. package/dist/commands/watch/globMoFiles.js +8 -8
  174. package/dist/commands/watch/parseDfxJson.d.ts +2 -2
  175. package/dist/commands/watch/parseDfxJson.js +9 -9
  176. package/dist/commands/watch/tester.d.ts +4 -4
  177. package/dist/commands/watch/tester.js +23 -21
  178. package/dist/commands/watch/warning-checker.d.ts +3 -3
  179. package/dist/commands/watch/warning-checker.js +36 -36
  180. package/dist/commands/watch/watch.js +45 -32
  181. package/dist/environments/nodejs/cli.d.ts +1 -0
  182. package/dist/environments/nodejs/cli.js +4 -0
  183. package/dist/environments/web/cli.d.ts +1 -0
  184. package/dist/environments/web/cli.js +4 -0
  185. package/dist/error.d.ts +1 -0
  186. package/dist/error.js +5 -0
  187. package/dist/fix-dist.js +5 -5
  188. package/dist/helpers/find-changelog-entry.js +8 -5
  189. package/dist/helpers/get-dep-name.js +2 -2
  190. package/dist/helpers/get-dfx-version.js +4 -4
  191. package/dist/helpers/get-moc-path.js +8 -7
  192. package/dist/helpers/get-moc-version.js +10 -7
  193. package/dist/helpers/get-package-id.js +2 -2
  194. package/dist/helpers/is-candid-compatible.d.ts +1 -0
  195. package/dist/helpers/is-candid-compatible.js +20 -0
  196. package/dist/integrity.d.ts +1 -1
  197. package/dist/integrity.js +47 -38
  198. package/dist/jest.config.d.ts +11 -0
  199. package/dist/jest.config.js +14 -0
  200. package/dist/mops.d.ts +6 -6
  201. package/dist/mops.js +87 -80
  202. package/dist/notify-installs.js +4 -4
  203. package/dist/package.json +9 -5
  204. package/dist/pem.d.ts +3 -3
  205. package/dist/pem.js +20 -12
  206. package/dist/release-cli.js +20 -20
  207. package/dist/resolve-packages.d.ts +1 -1
  208. package/dist/resolve-packages.js +52 -36
  209. package/dist/templates/mops-publish.yml +3 -3
  210. package/dist/templates/mops-test.yml +3 -3
  211. package/dist/templates/src/lib.mo +13 -13
  212. package/dist/templates/test/lib.test.mo +2 -2
  213. package/dist/templates.js +1 -1
  214. package/dist/tests/cli.test.d.ts +1 -0
  215. package/dist/tests/cli.test.js +63 -0
  216. package/dist/types.d.ts +14 -4
  217. package/dist/vessel.d.ts +2 -2
  218. package/dist/vessel.js +41 -34
  219. package/dist/wasm/pkg/bundler/package.json +20 -0
  220. package/dist/wasm/pkg/bundler/wasm.d.ts +3 -0
  221. package/dist/wasm/pkg/bundler/wasm.js +5 -0
  222. package/dist/wasm/pkg/bundler/wasm_bg.js +93 -0
  223. package/dist/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  224. package/dist/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  225. package/dist/wasm/pkg/nodejs/package.json +14 -0
  226. package/dist/wasm/pkg/nodejs/wasm.d.ts +3 -0
  227. package/dist/wasm/pkg/nodejs/wasm.js +98 -0
  228. package/dist/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  229. package/dist/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  230. package/dist/wasm/pkg/web/package.json +18 -0
  231. package/dist/wasm/pkg/web/wasm.d.ts +35 -0
  232. package/dist/wasm/pkg/web/wasm.js +191 -0
  233. package/dist/wasm/pkg/web/wasm_bg.wasm +0 -0
  234. package/dist/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  235. package/dist/wasm.d.ts +5 -0
  236. package/dist/wasm.js +10 -0
  237. package/environments/nodejs/cli.ts +6 -0
  238. package/environments/web/cli.ts +6 -0
  239. package/error.ts +6 -0
  240. package/fix-dist.ts +5 -5
  241. package/global.d.ts +3 -3
  242. package/helpers/find-changelog-entry.ts +26 -23
  243. package/helpers/get-dep-name.ts +5 -5
  244. package/helpers/get-dfx-version.ts +8 -9
  245. package/helpers/get-moc-path.ts +25 -26
  246. package/helpers/get-moc-version.ts +21 -19
  247. package/helpers/get-package-id.ts +4 -4
  248. package/helpers/is-candid-compatible.ts +22 -0
  249. package/integrity.ts +270 -236
  250. package/jest.config.js +14 -0
  251. package/mops.ts +238 -215
  252. package/notify-installs.ts +16 -17
  253. package/package.json +19 -10
  254. package/parallel.ts +28 -24
  255. package/pem.ts +55 -47
  256. package/release-cli.ts +73 -39
  257. package/resolve-packages.ts +231 -189
  258. package/templates/mops-publish.yml +3 -3
  259. package/templates/mops-test.yml +3 -3
  260. package/templates/src/lib.mo +13 -13
  261. package/templates/test/lib.test.mo +2 -2
  262. package/templates.ts +4 -4
  263. package/tests/__snapshots__/cli.test.ts.snap +202 -0
  264. package/tests/build/error/candid/bar.did +3 -0
  265. package/tests/build/error/dfx.json +12 -0
  266. package/tests/build/error/mops.toml +9 -0
  267. package/tests/build/error/src/Bar.mo +5 -0
  268. package/tests/build/error/src/Foo.mo +5 -0
  269. package/tests/build/success/.dfx/local/canister_ids.json +17 -0
  270. package/tests/build/success/.dfx/local/canisters/bar/bar.did +3 -0
  271. package/tests/build/success/.dfx/local/canisters/bar/bar.most +4 -0
  272. package/tests/build/success/.dfx/local/canisters/bar/bar.wasm +0 -0
  273. package/tests/build/success/.dfx/local/canisters/bar/constructor.did +3 -0
  274. package/tests/build/success/.dfx/local/canisters/bar/index.js +42 -0
  275. package/tests/build/success/.dfx/local/canisters/bar/init_args.txt +1 -0
  276. package/tests/build/success/.dfx/local/canisters/bar/service.did +3 -0
  277. package/tests/build/success/.dfx/local/canisters/bar/service.did.d.ts +7 -0
  278. package/tests/build/success/.dfx/local/canisters/bar/service.did.js +4 -0
  279. package/tests/build/success/.dfx/local/canisters/foo/constructor.did +3 -0
  280. package/tests/build/success/.dfx/local/canisters/foo/foo.did +3 -0
  281. package/tests/build/success/.dfx/local/canisters/foo/foo.most +4 -0
  282. package/tests/build/success/.dfx/local/canisters/foo/foo.wasm +0 -0
  283. package/tests/build/success/.dfx/local/canisters/foo/index.js +42 -0
  284. package/tests/build/success/.dfx/local/canisters/foo/init_args.txt +1 -0
  285. package/tests/build/success/.dfx/local/canisters/foo/service.did +3 -0
  286. package/tests/build/success/.dfx/local/canisters/foo/service.did.d.ts +7 -0
  287. package/tests/build/success/.dfx/local/canisters/foo/service.did.js +4 -0
  288. package/tests/build/success/.dfx/local/lsp/ucwa4-rx777-77774-qaada-cai.did +3 -0
  289. package/tests/build/success/.dfx/local/lsp/ulvla-h7777-77774-qaacq-cai.did +3 -0
  290. package/tests/build/success/.dfx/local/network-id +4 -0
  291. package/tests/build/success/candid/bar.did +3 -0
  292. package/tests/build/success/dfx.json +12 -0
  293. package/tests/build/success/mops.toml +9 -0
  294. package/tests/build/success/src/Bar.mo +5 -0
  295. package/tests/build/success/src/Foo.mo +5 -0
  296. package/tests/check-candid/a.did +3 -0
  297. package/tests/check-candid/b.did +5 -0
  298. package/tests/check-candid/c.did +3 -0
  299. package/tests/cli.test.ts +82 -0
  300. package/tsconfig.json +26 -19
  301. package/types.ts +41 -31
  302. package/vessel.ts +219 -187
  303. package/wasm/Cargo.lock +1475 -0
  304. package/wasm/Cargo.toml +28 -0
  305. package/wasm/pkg/bundler/package.json +20 -0
  306. package/wasm/pkg/bundler/wasm.d.ts +3 -0
  307. package/wasm/pkg/bundler/wasm.js +5 -0
  308. package/wasm/pkg/bundler/wasm_bg.js +93 -0
  309. package/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  310. package/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  311. package/wasm/pkg/nodejs/package.json +14 -0
  312. package/wasm/pkg/nodejs/wasm.d.ts +3 -0
  313. package/wasm/pkg/nodejs/wasm.js +98 -0
  314. package/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  315. package/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  316. package/wasm/pkg/web/package.json +18 -0
  317. package/wasm/pkg/web/wasm.d.ts +35 -0
  318. package/wasm/pkg/web/wasm.js +191 -0
  319. package/wasm/pkg/web/wasm_bg.wasm +0 -0
  320. package/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  321. package/wasm/src/lib.rs +17 -0
  322. 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
+ }