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
@@ -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": "ES2022",
12
- "moduleResolution": "bundler",
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
+ }