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
@@ -0,0 +1,202 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`mops build error 1`] = `
4
+ {
5
+ "exitCode": 0,
6
+ "stderr": "",
7
+ "stdout": "
8
+ > ic-mops@1.13.0 mops
9
+ > tsx ./environments/nodejs/cli build foo
10
+
11
+ build canister foo
12
+
13
+ ✓ Built 1 canister successfully",
14
+ }
15
+ `;
16
+
17
+ exports[`mops build error 2`] = `
18
+ {
19
+ "exitCode": 1,
20
+ "stderr": "Candid compatibility check failed for canister bar",
21
+ "stdout": "
22
+ > ic-mops@1.13.0 mops
23
+ > tsx ./environments/nodejs/cli build bar
24
+
25
+ build canister bar",
26
+ }
27
+ `;
28
+
29
+ exports[`mops build error 3`] = `
30
+ {
31
+ "exitCode": 1,
32
+ "stderr": "Candid compatibility check failed for canister bar",
33
+ "stdout": "
34
+ > ic-mops@1.13.0 mops
35
+ > tsx ./environments/nodejs/cli build foo bar
36
+
37
+ build canister foo
38
+ build canister bar",
39
+ }
40
+ `;
41
+
42
+ exports[`mops build success 1`] = `
43
+ {
44
+ "exitCode": 0,
45
+ "stderr": "",
46
+ "stdout": "
47
+ > ic-mops@1.13.0 mops
48
+ > tsx ./environments/nodejs/cli build
49
+
50
+ build canister foo
51
+ build canister bar
52
+
53
+ ✓ Built 2 canisters successfully",
54
+ }
55
+ `;
56
+
57
+ exports[`mops build success 2`] = `
58
+ {
59
+ "exitCode": 0,
60
+ "stderr": "",
61
+ "stdout": "
62
+ > ic-mops@1.13.0 mops
63
+ > tsx ./environments/nodejs/cli build foo
64
+
65
+ build canister foo
66
+
67
+ ✓ Built 1 canister successfully",
68
+ }
69
+ `;
70
+
71
+ exports[`mops build success 3`] = `
72
+ {
73
+ "exitCode": 0,
74
+ "stderr": "",
75
+ "stdout": "
76
+ > ic-mops@1.13.0 mops
77
+ > tsx ./environments/nodejs/cli build bar
78
+
79
+ build canister bar
80
+
81
+ ✓ Built 1 canister successfully",
82
+ }
83
+ `;
84
+
85
+ exports[`mops build success 4`] = `
86
+ {
87
+ "exitCode": 0,
88
+ "stderr": "",
89
+ "stdout": "
90
+ > ic-mops@1.13.0 mops
91
+ > tsx ./environments/nodejs/cli build foo bar
92
+
93
+ build canister foo
94
+ build canister bar
95
+
96
+ ✓ Built 2 canisters successfully",
97
+ }
98
+ `;
99
+
100
+ exports[`mops check-candid 1`] = `
101
+ {
102
+ "exitCode": 0,
103
+ "stderr": "",
104
+ "stdout": "
105
+ > ic-mops@1.13.0 mops
106
+ > tsx ./environments/nodejs/cli check-candid a.did a.did
107
+
108
+ ✓ Candid compatibility check passed",
109
+ }
110
+ `;
111
+
112
+ exports[`mops check-candid 2`] = `
113
+ {
114
+ "exitCode": 0,
115
+ "stderr": "",
116
+ "stdout": "
117
+ > ic-mops@1.13.0 mops
118
+ > tsx ./environments/nodejs/cli check-candid b.did b.did
119
+
120
+ ✓ Candid compatibility check passed",
121
+ }
122
+ `;
123
+
124
+ exports[`mops check-candid 3`] = `
125
+ {
126
+ "exitCode": 0,
127
+ "stderr": "",
128
+ "stdout": "
129
+ > ic-mops@1.13.0 mops
130
+ > tsx ./environments/nodejs/cli check-candid c.did c.did
131
+
132
+ ✓ Candid compatibility check passed",
133
+ }
134
+ `;
135
+
136
+ exports[`mops check-candid 4`] = `
137
+ {
138
+ "exitCode": 0,
139
+ "stderr": "",
140
+ "stdout": "
141
+ > ic-mops@1.13.0 mops
142
+ > tsx ./environments/nodejs/cli check-candid a.did b.did
143
+
144
+ ✓ Candid compatibility check passed",
145
+ }
146
+ `;
147
+
148
+ exports[`mops check-candid 5`] = `
149
+ {
150
+ "exitCode": 0,
151
+ "stderr": "",
152
+ "stdout": "
153
+ > ic-mops@1.13.0 mops
154
+ > tsx ./environments/nodejs/cli check-candid b.did a.did
155
+
156
+ ✓ Candid compatibility check passed",
157
+ }
158
+ `;
159
+
160
+ exports[`mops check-candid 6`] = `
161
+ {
162
+ "exitCode": 1,
163
+ "stderr": "✖ Candid compatibility check failed",
164
+ "stdout": "
165
+ > ic-mops@1.13.0 mops
166
+ > tsx ./environments/nodejs/cli check-candid a.did c.did
167
+ ",
168
+ }
169
+ `;
170
+
171
+ exports[`mops check-candid 7`] = `
172
+ {
173
+ "exitCode": 1,
174
+ "stderr": "✖ Candid compatibility check failed",
175
+ "stdout": "
176
+ > ic-mops@1.13.0 mops
177
+ > tsx ./environments/nodejs/cli check-candid c.did a.did
178
+ ",
179
+ }
180
+ `;
181
+
182
+ exports[`mops check-candid 8`] = `
183
+ {
184
+ "exitCode": 1,
185
+ "stderr": "✖ Candid compatibility check failed",
186
+ "stdout": "
187
+ > ic-mops@1.13.0 mops
188
+ > tsx ./environments/nodejs/cli check-candid b.did c.did
189
+ ",
190
+ }
191
+ `;
192
+
193
+ exports[`mops check-candid 9`] = `
194
+ {
195
+ "exitCode": 1,
196
+ "stderr": "✖ Candid compatibility check failed",
197
+ "stdout": "
198
+ > ic-mops@1.13.0 mops
199
+ > tsx ./environments/nodejs/cli check-candid c.did b.did
200
+ ",
201
+ }
202
+ `;
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (nat);
3
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "canisters": {
3
+ "foo": {
4
+ "type": "motoko",
5
+ "main": "src/Foo.mo"
6
+ },
7
+ "bar": {
8
+ "type": "motoko",
9
+ "main": "src/Bar.mo"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,9 @@
1
+ [dependencies]
2
+ core = "1.0.0"
3
+
4
+ [canisters]
5
+ foo = "src/Foo.mo"
6
+ bar = { main = "src/Bar.mo", args = ["--incremental-gc"], candid = "candid/bar.did" }
7
+
8
+ [build]
9
+ args = ["--release"]
@@ -0,0 +1,5 @@
1
+ persistent actor {
2
+ public func call() : async Text {
3
+ "Hello";
4
+ };
5
+ };
@@ -0,0 +1,5 @@
1
+ persistent actor {
2
+ public func call() : async Text {
3
+ "Foo";
4
+ };
5
+ };
@@ -0,0 +1,17 @@
1
+ {
2
+ "__Candid_UI": {
3
+ "local": "ufxgi-4p777-77774-qaadq-cai"
4
+ },
5
+ "a": {
6
+ "local": "uzt4z-lp777-77774-qaabq-cai"
7
+ },
8
+ "b": {
9
+ "local": "umunu-kh777-77774-qaaca-cai"
10
+ },
11
+ "bar": {
12
+ "local": "ulvla-h7777-77774-qaacq-cai"
13
+ },
14
+ "foo": {
15
+ "local": "ucwa4-rx777-77774-qaada-cai"
16
+ }
17
+ }
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,4 @@
1
+ // Version: 1.0.0
2
+ actor {
3
+
4
+ };
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,42 @@
1
+ import { Actor, HttpAgent } from "@dfinity/agent";
2
+
3
+ // Imports and re-exports candid interface
4
+ import { idlFactory } from './bar.did.js';
5
+ export { idlFactory } from './bar.did.js';
6
+ // CANISTER_ID is replaced by webpack based on node environment
7
+ export const canisterId = process.env.CANISTER_ID_BAR;
8
+
9
+ /**
10
+ * @deprecated since dfx 0.11.1
11
+ * Do not import from `.dfx`, instead switch to using `dfx generate` to generate your JS interface.
12
+ * @param {string | import("@dfinity/principal").Principal} canisterId Canister ID of Agent
13
+ * @param {{agentOptions?: import("@dfinity/agent").HttpAgentOptions; actorOptions?: import("@dfinity/agent").ActorConfig} | { agent?: import("@dfinity/agent").Agent; actorOptions?: import("@dfinity/agent").ActorConfig }} [options]
14
+ * @return {import("@dfinity/agent").ActorSubclass<import("./bar.did.js")._SERVICE>}
15
+ */
16
+ export const createActor = (canisterId, options = {}) => {
17
+ console.warn(`Deprecation warning: you are currently importing code from .dfx. Going forward, refactor to use the dfx generate command for JavaScript bindings.
18
+
19
+ See https://internetcomputer.org/docs/current/developer-docs/updates/release-notes/ for migration instructions`);
20
+ const agent = options.agent || new HttpAgent({ ...options.agentOptions });
21
+
22
+ // Fetch root key for certificate validation during development
23
+ if (process.env.DFX_NETWORK !== "ic") {
24
+ agent.fetchRootKey().catch(err => {
25
+ console.warn("Unable to fetch root key. Check to ensure that your local replica is running");
26
+ console.error(err);
27
+ });
28
+ }
29
+
30
+ // Creates an actor with using the candid interface and the HttpAgent
31
+ return Actor.createActor(idlFactory, {
32
+ agent,
33
+ canisterId,
34
+ ...(options ? options.actorOptions : {}),
35
+ });
36
+ };
37
+
38
+ /**
39
+ * A ready-to-use agent for the bar canister
40
+ * @type {import("@dfinity/agent").ActorSubclass<import("./bar.did.js")._SERVICE>}
41
+ */
42
+ export const bar = createActor(canisterId);
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,7 @@
1
+ import type { Principal } from '@dfinity/principal';
2
+ import type { ActorMethod } from '@dfinity/agent';
3
+ import type { IDL } from '@dfinity/candid';
4
+
5
+ export interface _SERVICE { 'call' : ActorMethod<[], string> }
6
+ export declare const idlFactory: IDL.InterfaceFactory;
7
+ export declare const init: (args: { IDL: typeof IDL }) => IDL.Type[];
@@ -0,0 +1,4 @@
1
+ export const idlFactory = ({ IDL }) => {
2
+ return IDL.Service({ 'call' : IDL.Func([], [IDL.Text], []) });
3
+ };
4
+ export const init = ({ IDL }) => { return []; };
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,4 @@
1
+ // Version: 1.0.0
2
+ actor {
3
+
4
+ };
@@ -0,0 +1,42 @@
1
+ import { Actor, HttpAgent } from "@dfinity/agent";
2
+
3
+ // Imports and re-exports candid interface
4
+ import { idlFactory } from './foo.did.js';
5
+ export { idlFactory } from './foo.did.js';
6
+ // CANISTER_ID is replaced by webpack based on node environment
7
+ export const canisterId = process.env.CANISTER_ID_FOO;
8
+
9
+ /**
10
+ * @deprecated since dfx 0.11.1
11
+ * Do not import from `.dfx`, instead switch to using `dfx generate` to generate your JS interface.
12
+ * @param {string | import("@dfinity/principal").Principal} canisterId Canister ID of Agent
13
+ * @param {{agentOptions?: import("@dfinity/agent").HttpAgentOptions; actorOptions?: import("@dfinity/agent").ActorConfig} | { agent?: import("@dfinity/agent").Agent; actorOptions?: import("@dfinity/agent").ActorConfig }} [options]
14
+ * @return {import("@dfinity/agent").ActorSubclass<import("./foo.did.js")._SERVICE>}
15
+ */
16
+ export const createActor = (canisterId, options = {}) => {
17
+ console.warn(`Deprecation warning: you are currently importing code from .dfx. Going forward, refactor to use the dfx generate command for JavaScript bindings.
18
+
19
+ See https://internetcomputer.org/docs/current/developer-docs/updates/release-notes/ for migration instructions`);
20
+ const agent = options.agent || new HttpAgent({ ...options.agentOptions });
21
+
22
+ // Fetch root key for certificate validation during development
23
+ if (process.env.DFX_NETWORK !== "ic") {
24
+ agent.fetchRootKey().catch(err => {
25
+ console.warn("Unable to fetch root key. Check to ensure that your local replica is running");
26
+ console.error(err);
27
+ });
28
+ }
29
+
30
+ // Creates an actor with using the candid interface and the HttpAgent
31
+ return Actor.createActor(idlFactory, {
32
+ agent,
33
+ canisterId,
34
+ ...(options ? options.actorOptions : {}),
35
+ });
36
+ };
37
+
38
+ /**
39
+ * A ready-to-use agent for the foo canister
40
+ * @type {import("@dfinity/agent").ActorSubclass<import("./foo.did.js")._SERVICE>}
41
+ */
42
+ export const foo = createActor(canisterId);
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,7 @@
1
+ import type { Principal } from '@dfinity/principal';
2
+ import type { ActorMethod } from '@dfinity/agent';
3
+ import type { IDL } from '@dfinity/candid';
4
+
5
+ export interface _SERVICE { 'call' : ActorMethod<[], string> }
6
+ export declare const idlFactory: IDL.InterfaceFactory;
7
+ export declare const init: (args: { IDL: typeof IDL }) => IDL.Type[];
@@ -0,0 +1,4 @@
1
+ export const idlFactory = ({ IDL }) => {
2
+ return IDL.Service({ 'call' : IDL.Func([], [IDL.Text], []) });
3
+ };
4
+ export const init = ({ IDL }) => { return []; };
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "created": "2025-09-11 02:20:43.69975 +00:00:00",
3
+ "settings_digest": "685af83dea9d217efa2077ec50e8b0ed561d1c292a5454dacdc43d3b5e45306f"
4
+ }
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "canisters": {
3
+ "foo": {
4
+ "type": "motoko",
5
+ "main": "src/Foo.mo"
6
+ },
7
+ "bar": {
8
+ "type": "motoko",
9
+ "main": "src/Bar.mo"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,9 @@
1
+ [dependencies]
2
+ core = "1.0.0"
3
+
4
+ [canisters]
5
+ foo = "src/Foo.mo"
6
+ bar = { main = "src/Bar.mo", args = ["--incremental-gc"], candid = "candid/bar.did" }
7
+
8
+ [build]
9
+ args = ["--release"]
@@ -0,0 +1,5 @@
1
+ persistent actor {
2
+ public func call() : async Text {
3
+ "Hello";
4
+ };
5
+ };
@@ -0,0 +1,5 @@
1
+ persistent actor {
2
+ public func call() : async Text {
3
+ "Foo";
4
+ };
5
+ };
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: () -> (text);
3
+ }
@@ -0,0 +1,5 @@
1
+ type ReturnValue = text;
2
+
3
+ service : {
4
+ call: () -> (ReturnValue);
5
+ }
@@ -0,0 +1,3 @@
1
+ service : {
2
+ call: (text) -> (nat);
3
+ }
@@ -0,0 +1,82 @@
1
+ import { describe, expect, test } from "@jest/globals";
2
+ import { execa } from "execa";
3
+ import path from "path";
4
+
5
+ interface CliOptions {
6
+ cwd?: string;
7
+ }
8
+
9
+ const cli = async (args: string[], { cwd }: CliOptions = {}) => {
10
+ return await execa("npm", ["run", "mops", "--", ...args], {
11
+ env: { MOPS_CWD: cwd },
12
+ stdio: "pipe",
13
+ reject: false,
14
+ });
15
+ };
16
+
17
+ const cliSnapshot = async (
18
+ args: string[],
19
+ options: CliOptions,
20
+ exitCode: number,
21
+ ) => {
22
+ const result = await cli(args, options);
23
+ expect({
24
+ command: result.command,
25
+ exitCode: result.exitCode,
26
+ timedOut: result.timedOut,
27
+ stdio: Boolean(result.stdout || result.stderr),
28
+ }).toEqual({
29
+ command: result.command,
30
+ exitCode,
31
+ timedOut: false,
32
+ stdio: true,
33
+ });
34
+ expect({
35
+ exitCode: result.exitCode,
36
+ stdout: result.stdout,
37
+ stderr: result.stderr,
38
+ }).toMatchSnapshot();
39
+ return result;
40
+ };
41
+
42
+ describe("mops", () => {
43
+ test("version", async () => {
44
+ expect((await cli(["--version"])).stdout).toMatch(/CLI \d+\.\d+\.\d+/);
45
+ });
46
+
47
+ test("help", async () => {
48
+ expect((await cli(["--help"])).stdout).toMatch(/^Usage: mops/m);
49
+ });
50
+
51
+ test("build success", async () => {
52
+ const cwd = path.join(import.meta.dirname, "build/success");
53
+ await cliSnapshot(["build"], { cwd }, 0);
54
+ await cliSnapshot(["build", "foo"], { cwd }, 0);
55
+ await cliSnapshot(["build", "bar"], { cwd }, 0);
56
+ await cliSnapshot(["build", "foo", "bar"], { cwd }, 0);
57
+ });
58
+
59
+ test("build error", async () => {
60
+ const cwd = path.join(import.meta.dirname, "build/error");
61
+ await cliSnapshot(["build", "foo"], { cwd }, 0);
62
+ expect((await cliSnapshot(["build", "bar"], { cwd }, 1)).stderr).toMatch(
63
+ "Candid compatibility check failed for canister bar",
64
+ );
65
+ expect(
66
+ (await cliSnapshot(["build", "foo", "bar"], { cwd }, 1)).stderr,
67
+ ).toMatch("Candid compatibility check failed for canister bar");
68
+ });
69
+
70
+ test("check-candid", async () => {
71
+ const cwd = path.join(import.meta.dirname, "check-candid");
72
+ await cliSnapshot(["check-candid", "a.did", "a.did"], { cwd }, 0);
73
+ await cliSnapshot(["check-candid", "b.did", "b.did"], { cwd }, 0);
74
+ await cliSnapshot(["check-candid", "c.did", "c.did"], { cwd }, 0);
75
+ await cliSnapshot(["check-candid", "a.did", "b.did"], { cwd }, 0);
76
+ await cliSnapshot(["check-candid", "b.did", "a.did"], { cwd }, 0);
77
+ await cliSnapshot(["check-candid", "a.did", "c.did"], { cwd }, 1);
78
+ await cliSnapshot(["check-candid", "c.did", "a.did"], { cwd }, 1);
79
+ await cliSnapshot(["check-candid", "b.did", "c.did"], { cwd }, 1);
80
+ await cliSnapshot(["check-candid", "c.did", "b.did"], { cwd }, 1);
81
+ });
82
+ });
package/tsconfig.json CHANGED
@@ -1,20 +1,27 @@
1
1
  {
2
- "extends": ["@tsconfig/strictest/tsconfig.json"],
3
- "include": ["**/*.ts", "**/*.js"],
4
- "exclude": ["node_modules", "dist", "bundle", "dist.js", "declarations/**/*.js"],
5
- "compilerOptions": {
6
- "target": "ES2022",
7
- "lib": ["ES2022"],
8
- "types": ["node"],
9
- "outDir": "./dist",
10
- "allowJs": true,
11
- "module": "nodenext",
12
- "moduleResolution": "nodenext",
13
- "noEmitOnError": false,
14
- "noUnusedLocals": false,
15
- "noUnusedParameters": false,
16
- "noPropertyAccessFromIndexSignature": false,
17
- "exactOptionalPropertyTypes": false,
18
- "declaration": true
19
- }
20
- }
2
+ "extends": ["@tsconfig/strictest/tsconfig.json"],
3
+ "include": ["**/*.ts", "**/*.js"],
4
+ "exclude": [
5
+ "node_modules",
6
+ "dist",
7
+ "bundle",
8
+ "dist.js",
9
+ "declarations/**/*.js",
10
+ "wasm/**/*.js"
11
+ ],
12
+ "compilerOptions": {
13
+ "target": "ES2022",
14
+ "lib": ["ES2022"],
15
+ "types": ["node"],
16
+ "outDir": "./dist",
17
+ "allowJs": true,
18
+ "module": "ES2022",
19
+ "moduleResolution": "bundler",
20
+ "noEmitOnError": false,
21
+ "noUnusedLocals": false,
22
+ "noUnusedParameters": false,
23
+ "noPropertyAccessFromIndexSignature": false,
24
+ "exactOptionalPropertyTypes": false,
25
+ "declaration": true
26
+ }
27
+ }