ic-mops 1.11.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/.DS_Store +0 -0
  2. package/.eslintrc.json +7 -7
  3. package/CHANGELOG.md +15 -0
  4. package/api/actors.ts +41 -37
  5. package/api/downloadPackageFiles.ts +75 -61
  6. package/api/getHighestVersion.ts +5 -5
  7. package/api/index.ts +4 -4
  8. package/api/network.ts +19 -21
  9. package/api/resolveVersion.ts +14 -11
  10. package/bin/mops.js +1 -1
  11. package/bun.lock +234 -198
  12. package/bundle/bench/bench-canister.mo +2 -2
  13. package/bundle/bench/user-bench.mo +0 -4
  14. package/bundle/bin/mops.js +1 -1
  15. package/bundle/cli.js +1000 -924
  16. package/bundle/cli.tgz +0 -0
  17. package/bundle/declarations/bench/bench.did +3 -3
  18. package/bundle/declarations/bench/bench.did.d.ts +3 -3
  19. package/bundle/declarations/bench/index.d.ts +3 -3
  20. package/bundle/declarations/bench/index.js +1 -1
  21. package/bundle/declarations/main/index.d.ts +3 -3
  22. package/bundle/declarations/main/index.js +1 -1
  23. package/bundle/declarations/main/main.did +78 -121
  24. package/bundle/declarations/main/main.did.d.ts +48 -98
  25. package/bundle/declarations/main/main.did.js +53 -107
  26. package/bundle/declarations/storage/index.d.ts +3 -3
  27. package/bundle/declarations/storage/index.js +4 -4
  28. package/bundle/declarations/storage/storage.did.d.ts +3 -3
  29. package/bundle/package.json +6 -5
  30. package/bundle/templates/mops-publish.yml +3 -3
  31. package/bundle/templates/mops-test.yml +3 -3
  32. package/bundle-package-json.ts +8 -8
  33. package/cache.ts +80 -65
  34. package/check-requirements.ts +49 -45
  35. package/cli.ts +577 -376
  36. package/commands/add.ts +142 -129
  37. package/commands/available-updates.ts +55 -28
  38. package/commands/bench/bench-canister.mo +114 -108
  39. package/commands/bench/user-bench.mo +6 -6
  40. package/commands/bench-replica.ts +146 -106
  41. package/commands/bench.ts +563 -497
  42. package/commands/build.ts +177 -0
  43. package/commands/bump.ts +68 -57
  44. package/commands/check-candid.ts +24 -0
  45. package/commands/docs-coverage.ts +124 -102
  46. package/commands/docs.ts +118 -108
  47. package/commands/format.ts +171 -155
  48. package/commands/init.ts +301 -275
  49. package/commands/install/install-all.ts +75 -62
  50. package/commands/install/install-dep.ts +43 -28
  51. package/commands/install/install-deps.ts +23 -15
  52. package/commands/install/install-local-dep.ts +42 -34
  53. package/commands/install/install-mops-dep.ts +154 -123
  54. package/commands/install/sync-local-cache.ts +39 -35
  55. package/commands/maintainer.ts +109 -99
  56. package/commands/outdated.ts +31 -18
  57. package/commands/owner.ts +107 -99
  58. package/commands/publish.ts +534 -443
  59. package/commands/remove.ts +119 -89
  60. package/commands/replica.ts +391 -303
  61. package/commands/search.ts +42 -36
  62. package/commands/self.ts +63 -56
  63. package/commands/sources.ts +66 -49
  64. package/commands/sync.ts +92 -75
  65. package/commands/template.ts +145 -102
  66. package/commands/test/mmf1.ts +146 -119
  67. package/commands/test/reporters/compact-reporter.ts +87 -84
  68. package/commands/test/reporters/files-reporter.ts +56 -51
  69. package/commands/test/reporters/reporter.ts +12 -6
  70. package/commands/test/reporters/silent-reporter.ts +58 -59
  71. package/commands/test/reporters/verbose-reporter.ts +66 -54
  72. package/commands/test/test.ts +497 -460
  73. package/commands/test/utils.ts +85 -6
  74. package/commands/toolchain/index.ts +363 -322
  75. package/commands/toolchain/moc.ts +78 -50
  76. package/commands/toolchain/pocket-ic.ts +41 -34
  77. package/commands/toolchain/toolchain-utils.ts +92 -72
  78. package/commands/toolchain/wasmtime.ts +37 -34
  79. package/commands/update.ts +91 -56
  80. package/commands/user.ts +90 -81
  81. package/commands/watch/deployer.ts +188 -152
  82. package/commands/watch/error-checker.ts +90 -80
  83. package/commands/watch/formatter.ts +72 -60
  84. package/commands/watch/generator.ts +116 -96
  85. package/commands/watch/globMoFiles.ts +13 -13
  86. package/commands/watch/parseDfxJson.ts +63 -57
  87. package/commands/watch/tester.ts +83 -65
  88. package/commands/watch/warning-checker.ts +149 -136
  89. package/commands/watch/watch.ts +123 -95
  90. package/declarations/bench/bench.did.d.ts +3 -3
  91. package/declarations/bench/index.d.ts +3 -3
  92. package/declarations/bench/index.js +1 -1
  93. package/declarations/main/index.d.ts +3 -3
  94. package/declarations/main/index.js +1 -1
  95. package/declarations/main/main.did.d.ts +3 -3
  96. package/declarations/storage/index.d.ts +3 -3
  97. package/declarations/storage/index.js +4 -4
  98. package/declarations/storage/storage.did.d.ts +3 -3
  99. package/dist/api/actors.d.ts +4 -4
  100. package/dist/api/actors.js +8 -8
  101. package/dist/api/downloadPackageFiles.d.ts +2 -2
  102. package/dist/api/downloadPackageFiles.js +10 -10
  103. package/dist/api/getHighestVersion.js +1 -1
  104. package/dist/api/index.d.ts +4 -4
  105. package/dist/api/index.js +4 -4
  106. package/dist/api/network.js +9 -9
  107. package/dist/api/resolveVersion.js +3 -3
  108. package/dist/bin/mops.js +1 -1
  109. package/dist/bundle-package-json.js +8 -8
  110. package/dist/cache.js +22 -17
  111. package/dist/check-requirements.js +11 -11
  112. package/dist/cli.js +283 -186
  113. package/dist/commands/add.d.ts +1 -1
  114. package/dist/commands/add.js +41 -38
  115. package/dist/commands/available-updates.d.ts +1 -1
  116. package/dist/commands/available-updates.js +32 -14
  117. package/dist/commands/bench/bench-canister.mo +114 -108
  118. package/dist/commands/bench/user-bench.mo +6 -6
  119. package/dist/commands/bench-replica.d.ts +6 -5
  120. package/dist/commands/bench-replica.js +58 -36
  121. package/dist/commands/bench.d.ts +5 -5
  122. package/dist/commands/bench.js +134 -118
  123. package/dist/commands/build.d.ts +7 -0
  124. package/dist/commands/build.js +121 -0
  125. package/dist/commands/bump.js +27 -18
  126. package/dist/commands/check-candid.d.ts +4 -0
  127. package/dist/commands/check-candid.js +15 -0
  128. package/dist/commands/docs-coverage.d.ts +1 -1
  129. package/dist/commands/docs-coverage.js +45 -31
  130. package/dist/commands/docs.d.ts +1 -1
  131. package/dist/commands/docs.js +39 -38
  132. package/dist/commands/format.js +31 -27
  133. package/dist/commands/init.js +102 -92
  134. package/dist/commands/install/install-all.d.ts +2 -2
  135. package/dist/commands/install/install-all.js +23 -21
  136. package/dist/commands/install/install-dep.d.ts +1 -1
  137. package/dist/commands/install/install-dep.js +21 -8
  138. package/dist/commands/install/install-deps.d.ts +1 -1
  139. package/dist/commands/install/install-deps.js +1 -1
  140. package/dist/commands/install/install-local-dep.js +11 -9
  141. package/dist/commands/install/install-mops-dep.d.ts +1 -1
  142. package/dist/commands/install/install-mops-dep.js +32 -27
  143. package/dist/commands/install/sync-local-cache.js +10 -10
  144. package/dist/commands/maintainer.js +21 -21
  145. package/dist/commands/outdated.js +16 -6
  146. package/dist/commands/owner.js +21 -21
  147. package/dist/commands/publish.js +148 -128
  148. package/dist/commands/remove.d.ts +1 -1
  149. package/dist/commands/remove.js +42 -30
  150. package/dist/commands/replica.d.ts +9 -8
  151. package/dist/commands/replica.js +105 -65
  152. package/dist/commands/search.js +15 -13
  153. package/dist/commands/self.js +31 -28
  154. package/dist/commands/sources.d.ts +5 -1
  155. package/dist/commands/sources.js +23 -17
  156. package/dist/commands/sync.d.ts +1 -1
  157. package/dist/commands/sync.js +38 -25
  158. package/dist/commands/template.js +66 -56
  159. package/dist/commands/test/mmf1.d.ts +3 -3
  160. package/dist/commands/test/mmf1.js +33 -31
  161. package/dist/commands/test/reporters/compact-reporter.d.ts +3 -3
  162. package/dist/commands/test/reporters/compact-reporter.js +19 -15
  163. package/dist/commands/test/reporters/files-reporter.d.ts +3 -3
  164. package/dist/commands/test/reporters/files-reporter.js +18 -14
  165. package/dist/commands/test/reporters/reporter.d.ts +2 -2
  166. package/dist/commands/test/reporters/silent-reporter.d.ts +3 -3
  167. package/dist/commands/test/reporters/silent-reporter.js +4 -4
  168. package/dist/commands/test/reporters/verbose-reporter.d.ts +3 -3
  169. package/dist/commands/test/reporters/verbose-reporter.js +17 -13
  170. package/dist/commands/test/test.d.ts +4 -4
  171. package/dist/commands/test/test.js +151 -181
  172. package/dist/commands/test/utils.d.ts +6 -0
  173. package/dist/commands/test/utils.js +63 -2
  174. package/dist/commands/toolchain/index.d.ts +1 -1
  175. package/dist/commands/toolchain/index.js +81 -69
  176. package/dist/commands/toolchain/moc.d.ts +1 -1
  177. package/dist/commands/toolchain/moc.js +48 -24
  178. package/dist/commands/toolchain/pocket-ic.js +12 -12
  179. package/dist/commands/toolchain/toolchain-utils.d.ts +2 -0
  180. package/dist/commands/toolchain/toolchain-utils.js +32 -23
  181. package/dist/commands/toolchain/wasmtime.js +11 -11
  182. package/dist/commands/update.d.ts +1 -1
  183. package/dist/commands/update.js +30 -12
  184. package/dist/commands/user.js +31 -28
  185. package/dist/commands/watch/deployer.d.ts +4 -4
  186. package/dist/commands/watch/deployer.js +45 -36
  187. package/dist/commands/watch/error-checker.d.ts +2 -2
  188. package/dist/commands/watch/error-checker.js +27 -27
  189. package/dist/commands/watch/formatter.d.ts +4 -4
  190. package/dist/commands/watch/formatter.js +17 -17
  191. package/dist/commands/watch/generator.d.ts +3 -3
  192. package/dist/commands/watch/generator.js +28 -23
  193. package/dist/commands/watch/globMoFiles.js +8 -8
  194. package/dist/commands/watch/parseDfxJson.d.ts +2 -2
  195. package/dist/commands/watch/parseDfxJson.js +9 -9
  196. package/dist/commands/watch/tester.d.ts +4 -4
  197. package/dist/commands/watch/tester.js +23 -21
  198. package/dist/commands/watch/warning-checker.d.ts +3 -3
  199. package/dist/commands/watch/warning-checker.js +36 -36
  200. package/dist/commands/watch/watch.js +45 -32
  201. package/dist/declarations/bench/bench.did.d.ts +3 -3
  202. package/dist/declarations/bench/index.d.ts +3 -3
  203. package/dist/declarations/bench/index.js +1 -1
  204. package/dist/declarations/main/index.d.ts +3 -3
  205. package/dist/declarations/main/index.js +1 -1
  206. package/dist/declarations/main/main.did.d.ts +3 -3
  207. package/dist/declarations/storage/index.d.ts +3 -3
  208. package/dist/declarations/storage/index.js +4 -4
  209. package/dist/declarations/storage/storage.did.d.ts +3 -3
  210. package/dist/environments/nodejs/cli.d.ts +1 -0
  211. package/dist/environments/nodejs/cli.js +4 -0
  212. package/dist/environments/web/cli.d.ts +1 -0
  213. package/dist/environments/web/cli.js +4 -0
  214. package/dist/error.d.ts +1 -0
  215. package/dist/error.js +5 -0
  216. package/dist/fix-dist.js +5 -5
  217. package/dist/helpers/find-changelog-entry.js +8 -5
  218. package/dist/helpers/get-dep-name.d.ts +1 -0
  219. package/dist/helpers/get-dep-name.js +4 -1
  220. package/dist/helpers/get-dfx-version.js +4 -4
  221. package/dist/helpers/get-moc-path.js +8 -7
  222. package/dist/helpers/get-moc-version.js +10 -7
  223. package/dist/helpers/get-package-id.js +2 -2
  224. package/dist/helpers/is-candid-compatible.d.ts +1 -0
  225. package/dist/helpers/is-candid-compatible.js +20 -0
  226. package/dist/integrity.d.ts +1 -1
  227. package/dist/integrity.js +47 -38
  228. package/dist/jest.config.d.ts +11 -0
  229. package/dist/jest.config.js +14 -0
  230. package/dist/mops.d.ts +6 -6
  231. package/dist/mops.js +87 -80
  232. package/dist/notify-installs.js +4 -4
  233. package/dist/package.json +11 -10
  234. package/dist/pem.d.ts +3 -3
  235. package/dist/pem.js +20 -12
  236. package/dist/release-cli.js +20 -20
  237. package/dist/resolve-packages.d.ts +1 -1
  238. package/dist/resolve-packages.js +52 -36
  239. package/dist/templates/mops-publish.yml +3 -3
  240. package/dist/templates/mops-test.yml +3 -3
  241. package/dist/templates/src/lib.mo +13 -13
  242. package/dist/templates/test/lib.test.mo +2 -2
  243. package/dist/templates.js +1 -1
  244. package/dist/tests/cli.test.d.ts +1 -0
  245. package/dist/tests/cli.test.js +63 -0
  246. package/dist/types.d.ts +14 -4
  247. package/dist/vessel.d.ts +2 -2
  248. package/dist/vessel.js +41 -34
  249. package/dist/wasm/pkg/bundler/package.json +20 -0
  250. package/dist/wasm/pkg/bundler/wasm.d.ts +3 -0
  251. package/dist/wasm/pkg/bundler/wasm.js +5 -0
  252. package/dist/wasm/pkg/bundler/wasm_bg.js +93 -0
  253. package/dist/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  254. package/dist/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  255. package/dist/wasm/pkg/nodejs/package.json +14 -0
  256. package/dist/wasm/pkg/nodejs/wasm.d.ts +3 -0
  257. package/dist/wasm/pkg/nodejs/wasm.js +98 -0
  258. package/dist/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  259. package/dist/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  260. package/dist/wasm/pkg/web/package.json +18 -0
  261. package/dist/wasm/pkg/web/wasm.d.ts +35 -0
  262. package/dist/wasm/pkg/web/wasm.js +191 -0
  263. package/dist/wasm/pkg/web/wasm_bg.wasm +0 -0
  264. package/dist/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  265. package/dist/wasm.d.ts +5 -0
  266. package/dist/wasm.js +10 -0
  267. package/environments/nodejs/cli.ts +6 -0
  268. package/environments/web/cli.ts +6 -0
  269. package/error.ts +6 -0
  270. package/fix-dist.ts +5 -5
  271. package/global.d.ts +3 -3
  272. package/helpers/find-changelog-entry.ts +26 -23
  273. package/helpers/get-dep-name.ts +7 -3
  274. package/helpers/get-dfx-version.ts +8 -9
  275. package/helpers/get-moc-path.ts +25 -26
  276. package/helpers/get-moc-version.ts +21 -19
  277. package/helpers/get-package-id.ts +4 -4
  278. package/helpers/is-candid-compatible.ts +22 -0
  279. package/integrity.ts +270 -236
  280. package/jest.config.js +14 -0
  281. package/mops.ts +238 -215
  282. package/notify-installs.ts +16 -17
  283. package/package.json +21 -15
  284. package/parallel.ts +28 -24
  285. package/pem.ts +55 -47
  286. package/release-cli.ts +73 -39
  287. package/resolve-packages.ts +231 -189
  288. package/templates/mops-publish.yml +3 -3
  289. package/templates/mops-test.yml +3 -3
  290. package/templates/src/lib.mo +13 -13
  291. package/templates/test/lib.test.mo +2 -2
  292. package/templates.ts +4 -4
  293. package/tests/__snapshots__/cli.test.ts.snap +202 -0
  294. package/tests/build/error/candid/bar.did +3 -0
  295. package/tests/build/error/dfx.json +12 -0
  296. package/tests/build/error/mops.toml +9 -0
  297. package/tests/build/error/src/Bar.mo +5 -0
  298. package/tests/build/error/src/Foo.mo +5 -0
  299. package/tests/build/success/.dfx/local/canister_ids.json +17 -0
  300. package/tests/build/success/.dfx/local/canisters/bar/bar.did +3 -0
  301. package/tests/build/success/.dfx/local/canisters/bar/bar.most +4 -0
  302. package/tests/build/success/.dfx/local/canisters/bar/bar.wasm +0 -0
  303. package/tests/build/success/.dfx/local/canisters/bar/constructor.did +3 -0
  304. package/tests/build/success/.dfx/local/canisters/bar/index.js +42 -0
  305. package/tests/build/success/.dfx/local/canisters/bar/init_args.txt +1 -0
  306. package/tests/build/success/.dfx/local/canisters/bar/service.did +3 -0
  307. package/tests/build/success/.dfx/local/canisters/bar/service.did.d.ts +7 -0
  308. package/tests/build/success/.dfx/local/canisters/bar/service.did.js +4 -0
  309. package/tests/build/success/.dfx/local/canisters/foo/constructor.did +3 -0
  310. package/tests/build/success/.dfx/local/canisters/foo/foo.did +3 -0
  311. package/tests/build/success/.dfx/local/canisters/foo/foo.most +4 -0
  312. package/tests/build/success/.dfx/local/canisters/foo/foo.wasm +0 -0
  313. package/tests/build/success/.dfx/local/canisters/foo/index.js +42 -0
  314. package/tests/build/success/.dfx/local/canisters/foo/init_args.txt +1 -0
  315. package/tests/build/success/.dfx/local/canisters/foo/service.did +3 -0
  316. package/tests/build/success/.dfx/local/canisters/foo/service.did.d.ts +7 -0
  317. package/tests/build/success/.dfx/local/canisters/foo/service.did.js +4 -0
  318. package/tests/build/success/.dfx/local/lsp/ucwa4-rx777-77774-qaada-cai.did +3 -0
  319. package/tests/build/success/.dfx/local/lsp/ulvla-h7777-77774-qaacq-cai.did +3 -0
  320. package/tests/build/success/.dfx/local/network-id +4 -0
  321. package/tests/build/success/candid/bar.did +3 -0
  322. package/tests/build/success/dfx.json +12 -0
  323. package/tests/build/success/mops.toml +9 -0
  324. package/tests/build/success/src/Bar.mo +5 -0
  325. package/tests/build/success/src/Foo.mo +5 -0
  326. package/tests/check-candid/a.did +3 -0
  327. package/tests/check-candid/b.did +5 -0
  328. package/tests/check-candid/c.did +3 -0
  329. package/tests/cli.test.ts +82 -0
  330. package/tsconfig.json +26 -19
  331. package/types.ts +41 -31
  332. package/vessel.ts +219 -187
  333. package/wasm/Cargo.lock +1475 -0
  334. package/wasm/Cargo.toml +28 -0
  335. package/wasm/pkg/bundler/package.json +20 -0
  336. package/wasm/pkg/bundler/wasm.d.ts +3 -0
  337. package/wasm/pkg/bundler/wasm.js +5 -0
  338. package/wasm/pkg/bundler/wasm_bg.js +93 -0
  339. package/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  340. package/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  341. package/wasm/pkg/nodejs/package.json +14 -0
  342. package/wasm/pkg/nodejs/wasm.d.ts +3 -0
  343. package/wasm/pkg/nodejs/wasm.js +98 -0
  344. package/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  345. package/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  346. package/wasm/pkg/web/package.json +18 -0
  347. package/wasm/pkg/web/wasm.d.ts +35 -0
  348. package/wasm/pkg/web/wasm.js +191 -0
  349. package/wasm/pkg/web/wasm_bg.wasm +0 -0
  350. package/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  351. package/wasm/src/lib.rs +17 -0
  352. package/wasm.ts +16 -0
@@ -1,15 +1,16 @@
1
- import { ChildProcessWithoutNullStreams } from 'node:child_process';
2
- import { PassThrough } from 'node:stream';
3
- import { IDL } from '@dfinity/candid';
4
- import { PocketIc, PocketIcServer } from 'pic-ic';
1
+ import { ChildProcessWithoutNullStreams } from "node:child_process";
2
+ import { PassThrough } from "node:stream";
3
+ import { IDL } from "@icp-sdk/core/candid";
4
+ import { PocketIc, PocketIcServer } from "pic-ic";
5
+ import { PocketIc as PocketIcMops, PocketIcServer as PocketIcServerMops } from "pic-js-mops";
5
6
  type StartOptions = {
6
- type?: 'dfx' | 'pocket-ic' | 'dfx-pocket-ic';
7
+ type?: "dfx" | "pocket-ic" | "dfx-pocket-ic";
7
8
  dir?: string;
8
9
  verbose?: boolean;
9
10
  silent?: boolean;
10
11
  };
11
12
  export declare class Replica {
12
- type: 'dfx' | 'pocket-ic' | 'dfx-pocket-ic';
13
+ type: "dfx" | "pocket-ic" | "dfx-pocket-ic";
13
14
  verbose: boolean;
14
15
  canisters: Record<string, {
15
16
  cwd: string;
@@ -17,8 +18,8 @@ export declare class Replica {
17
18
  actor: any;
18
19
  stream: PassThrough;
19
20
  }>;
20
- pocketIcServer?: PocketIcServer;
21
- pocketIc?: PocketIc;
21
+ pocketIcServer?: PocketIcServer | PocketIcServerMops;
22
+ pocketIc?: PocketIc | PocketIcMops;
22
23
  dfxProcess?: ChildProcessWithoutNullStreams;
23
24
  dir: string;
24
25
  ttl: number;
@@ -1,112 +1,135 @@
1
- import process from 'node:process';
2
- import { execSync, spawn } from 'node:child_process';
3
- import path from 'node:path';
4
- import fs from 'node:fs';
5
- import { PassThrough } from 'node:stream';
6
- import { spawn as spawnAsync } from 'promisify-child-process';
7
- import { Actor, HttpAgent } from '@dfinity/agent';
8
- import { PocketIc, PocketIcServer } from 'pic-ic';
9
- import chalk from 'chalk';
10
- import { readConfig } from '../mops.js';
11
- import { toolchain } from './toolchain/index.js';
12
- import { getDfxVersion } from '../helpers/get-dfx-version.js';
1
+ import process from "node:process";
2
+ import { execSync, spawn, } from "node:child_process";
3
+ import path from "node:path";
4
+ import fs from "node:fs";
5
+ import { PassThrough } from "node:stream";
6
+ import { spawn as spawnAsync } from "promisify-child-process";
7
+ import { Actor, HttpAgent } from "@icp-sdk/core/agent";
8
+ import { PocketIc, PocketIcServer } from "pic-ic";
9
+ import { PocketIc as PocketIcMops, PocketIcServer as PocketIcServerMops, } from "pic-js-mops";
10
+ import chalk from "chalk";
11
+ import { readConfig } from "../mops.js";
12
+ import { toolchain } from "./toolchain/index.js";
13
+ import { getDfxVersion } from "../helpers/get-dfx-version.js";
13
14
  export class Replica {
14
- type = 'dfx';
15
+ type = "dfx";
15
16
  verbose = false;
16
17
  canisters = {};
17
18
  pocketIcServer;
18
19
  pocketIc;
19
20
  dfxProcess;
20
- dir = ''; // absolute path (/.../.mops/.test/)
21
+ dir = ""; // absolute path (/.../.mops/.test/)
21
22
  ttl = 60;
22
23
  async start({ type, dir, verbose, silent } = {}) {
23
24
  this.type = type ?? this.type;
24
25
  this.verbose = verbose ?? this.verbose;
25
26
  this.dir = dir ?? this.dir;
26
27
  silent || console.log(`Starting ${this.type} replica...`);
27
- if (this.type === 'dfx' || this.type === 'dfx-pocket-ic') {
28
+ if (this.type === "dfx" || this.type === "dfx-pocket-ic") {
28
29
  fs.mkdirSync(this.dir, { recursive: true });
29
- fs.writeFileSync(path.join(this.dir, 'dfx.json'), JSON.stringify(this.dfxJson(''), null, 2));
30
- fs.writeFileSync(path.join(this.dir, 'canister.did'), 'service : { runTests: () -> (); }');
30
+ fs.writeFileSync(path.join(this.dir, "dfx.json"), JSON.stringify(this.dfxJson(""), null, 2));
31
+ fs.writeFileSync(path.join(this.dir, "canister.did"), "service : { runTests: () -> (); }");
31
32
  await this.stop();
32
- this.dfxProcess = spawn('dfx', ['start', this.type === 'dfx-pocket-ic' ? '--pocketic' : '', '--clean', (this.verbose ? '' : '-qqqq'), '--artificial-delay', '0'].filter(x => x).flat(), { cwd: this.dir });
33
+ this.dfxProcess = spawn("dfx", [
34
+ "start",
35
+ this.type === "dfx-pocket-ic" ? "--pocketic" : "",
36
+ "--clean",
37
+ this.verbose ? "" : "-qqqq",
38
+ "--artificial-delay",
39
+ "0",
40
+ ]
41
+ .filter((x) => x)
42
+ .flat(), { cwd: this.dir });
33
43
  // process canister logs
34
44
  this._attachCanisterLogHandler(this.dfxProcess);
35
- this.dfxProcess.stdout.on('data', (data) => {
45
+ this.dfxProcess.stdout.on("data", (data) => {
36
46
  if (this.verbose) {
37
- console.log('DFX:', data.toString());
47
+ console.log("DFX:", data.toString());
38
48
  }
39
49
  });
40
- this.dfxProcess.stderr.on('data', (data) => {
50
+ this.dfxProcess.stderr.on("data", (data) => {
41
51
  if (this.verbose) {
42
- console.error('DFX:', data.toString());
52
+ console.error("DFX:", data.toString());
43
53
  }
44
- if (data.toString().includes('Failed to bind socket to')) {
54
+ if (data.toString().includes("Failed to bind socket to")) {
45
55
  console.error(chalk.red(data.toString()));
46
- console.log('Please try again after some time');
56
+ console.log("Please try again after some time");
47
57
  process.exit(11);
48
58
  }
49
59
  });
50
60
  // await for dfx to start
51
61
  let ok = false;
52
62
  while (!ok) {
53
- await fetch('http://127.0.0.1:4945/api/v2/status')
54
- .then(res => {
63
+ await fetch("http://127.0.0.1:4945/api/v2/status")
64
+ .then((res) => {
55
65
  if (res.status === 200) {
56
66
  ok = true;
57
67
  }
58
68
  })
59
69
  .catch(() => { })
60
70
  .finally(() => {
61
- return new Promise(resolve => setTimeout(resolve, 1000));
71
+ return new Promise((resolve) => setTimeout(resolve, 1000));
62
72
  });
63
73
  }
64
74
  }
65
75
  else {
66
- let pocketIcBin = await toolchain.bin('pocket-ic');
67
- // eslint-disable-next-line
76
+ let pocketIcBin = await toolchain.bin("pocket-ic");
68
77
  let config = readConfig();
69
- if (config.toolchain?.['pocket-ic'] !== '4.0.0') {
70
- console.error('Current Mops CLI only supports pocket-ic 4.0.0');
78
+ if (config.toolchain?.["pocket-ic"] !== "4.0.0" &&
79
+ !config.toolchain?.["pocket-ic"]?.startsWith("9.")) {
80
+ console.error("Current Mops CLI only supports pocket-ic 9.x.x and 4.0.0");
71
81
  process.exit(1);
72
82
  }
73
- this.pocketIcServer = await PocketIcServer.start({
74
- showRuntimeLogs: false,
75
- showCanisterLogs: false,
76
- binPath: pocketIcBin,
77
- ttl: this.ttl,
78
- });
79
- this.pocketIc = await PocketIc.create(this.pocketIcServer.getUrl());
83
+ // pocket-ic 9.x.x
84
+ if (config.toolchain?.["pocket-ic"]?.startsWith("9.")) {
85
+ this.pocketIcServer = await PocketIcServerMops.start({
86
+ showRuntimeLogs: false,
87
+ showCanisterLogs: false,
88
+ binPath: pocketIcBin,
89
+ ttl: this.ttl,
90
+ });
91
+ this.pocketIc = await PocketIcMops.create(this.pocketIcServer.getUrl());
92
+ }
93
+ // pocket-ic 4.0.0
94
+ else {
95
+ this.pocketIcServer = await PocketIcServer.start({
96
+ showRuntimeLogs: false,
97
+ showCanisterLogs: false,
98
+ binPath: pocketIcBin,
99
+ ttl: this.ttl,
100
+ });
101
+ this.pocketIc = await PocketIc.create(this.pocketIcServer.getUrl());
102
+ }
80
103
  // process canister logs
81
104
  this._attachCanisterLogHandler(this.pocketIcServer.serverProcess);
82
105
  }
83
106
  }
84
107
  _attachCanisterLogHandler(proc) {
85
- let curData = '';
86
- proc.stderr.on('data', (data) => {
108
+ let curData = "";
109
+ proc.stderr.on("data", (data) => {
87
110
  curData = curData + data.toString();
88
- if (curData.includes('\n')) {
89
- let chunk = curData.split('\n').slice(0, -1).join('\n');
111
+ if (curData.includes("\n")) {
112
+ let chunk = curData.split("\n").slice(0, -1).join("\n");
90
113
  let matches = [...chunk.matchAll(/\[Canister ([a-z0-9-]+)\] (.*)/g)];
91
114
  for (let match of matches) {
92
115
  let [, canisterId, msg] = match;
93
- let stream = this.getCanisterStream(canisterId || '');
116
+ let stream = this.getCanisterStream(canisterId || "");
94
117
  if (stream) {
95
118
  stream.write(msg);
96
119
  }
97
120
  }
98
121
  if (matches.length) {
99
- curData = curData.split('\n').slice(-1).join('\n');
122
+ curData = curData.split("\n").slice(-1).join("\n");
100
123
  }
101
124
  }
102
125
  });
103
126
  }
104
127
  async stop(sigint = false) {
105
- if (this.type === 'dfx' || this.type === 'dfx-pocket-ic') {
128
+ if (this.type === "dfx" || this.type === "dfx-pocket-ic") {
106
129
  if (this.dfxProcess) {
107
130
  let killed = this.dfxProcess.kill();
108
131
  if (!killed) {
109
- this.dfxProcess.kill('SIGKILL');
132
+ this.dfxProcess.kill("SIGKILL");
110
133
  }
111
134
  // give replica some time to stop
112
135
  let i = 0;
@@ -135,41 +158,59 @@ export class Replica {
135
158
  }
136
159
  }
137
160
  async deploy(name, wasm, idlFactory, cwd = process.cwd(), signal) {
138
- if (this.type === 'dfx' || this.type === 'dfx-pocket-ic') {
161
+ if (this.type === "dfx" || this.type === "dfx-pocket-ic") {
139
162
  // prepare dfx.json for current canister
140
- let dfxJson = path.join(this.dir, 'dfx.json');
163
+ let dfxJson = path.join(this.dir, "dfx.json");
141
164
  let oldDfxJsonData;
142
165
  if (fs.existsSync(dfxJson)) {
143
166
  oldDfxJsonData = JSON.parse(fs.readFileSync(dfxJson).toString());
144
167
  }
145
- let newDfxJsonData = this.dfxJson(name, name + '.wasm');
168
+ let newDfxJsonData = this.dfxJson(name, name + ".wasm");
146
169
  if (oldDfxJsonData.canisters) {
147
170
  newDfxJsonData.canisters = Object.assign(oldDfxJsonData.canisters, newDfxJsonData.canisters);
148
171
  }
149
172
  fs.mkdirSync(this.dir, { recursive: true });
150
173
  fs.writeFileSync(dfxJson, JSON.stringify(newDfxJsonData, null, 2));
151
- await spawnAsync('dfx', ['deploy', name, '--mode', 'reinstall', '--yes', '--identity', 'anonymous'], { cwd: this.dir, signal, stdio: this.verbose ? 'pipe' : ['pipe', 'ignore', 'pipe'] }).catch((error) => {
152
- if (error.code === 'ABORT_ERR') {
153
- return { stderr: '' };
174
+ await spawnAsync("dfx", [
175
+ "deploy",
176
+ name,
177
+ "--mode",
178
+ "reinstall",
179
+ "--yes",
180
+ "--identity",
181
+ "anonymous",
182
+ ], {
183
+ cwd: this.dir,
184
+ signal,
185
+ stdio: this.verbose ? "pipe" : ["pipe", "ignore", "pipe"],
186
+ }).catch((error) => {
187
+ if (error.code === "ABORT_ERR") {
188
+ return { stderr: "" };
154
189
  }
155
190
  throw error;
156
191
  });
157
192
  if (signal?.aborted) {
158
193
  return;
159
194
  }
160
- await spawnAsync('dfx', ['ledger', 'fabricate-cycles', '--canister', name, '--t', '100'], { cwd: this.dir, signal, stdio: this.verbose ? 'pipe' : ['pipe', 'ignore', 'pipe'] }).catch((error) => {
161
- if (error.code === 'ABORT_ERR') {
162
- return { stderr: '' };
195
+ await spawnAsync("dfx", ["ledger", "fabricate-cycles", "--canister", name, "--t", "100"], {
196
+ cwd: this.dir,
197
+ signal,
198
+ stdio: this.verbose ? "pipe" : ["pipe", "ignore", "pipe"],
199
+ }).catch((error) => {
200
+ if (error.code === "ABORT_ERR") {
201
+ return { stderr: "" };
163
202
  }
164
203
  throw error;
165
204
  });
166
205
  if (signal?.aborted) {
167
206
  return;
168
207
  }
169
- let canisterId = execSync(`dfx canister id ${name}`, { cwd: this.dir }).toString().trim();
208
+ let canisterId = execSync(`dfx canister id ${name}`, { cwd: this.dir })
209
+ .toString()
210
+ .trim();
170
211
  let actor = Actor.createActor(idlFactory, {
171
212
  agent: await HttpAgent.create({
172
- host: 'http://127.0.0.1:4945',
213
+ host: "http://127.0.0.1:4945",
173
214
  shouldFetchRootKey: true,
174
215
  }),
175
216
  canisterId,
@@ -182,10 +223,9 @@ export class Replica {
182
223
  };
183
224
  }
184
225
  else if (this.pocketIc) {
185
- // let {canisterId, actor} = await this.pocketIc.setupCanister(idlFactory, wasm);
186
226
  let { canisterId, actor } = await this.pocketIc.setupCanister({
187
- idlFactory,
188
227
  wasm,
228
+ idlFactory,
189
229
  });
190
230
  if (signal?.aborted) {
191
231
  return;
@@ -216,7 +256,7 @@ export class Replica {
216
256
  return this.canisters[name];
217
257
  }
218
258
  getCanisterId(name) {
219
- return this.canisters[name]?.canisterId || '';
259
+ return this.canisters[name]?.canisterId || "";
220
260
  }
221
261
  getCanisterStream(canisterId) {
222
262
  for (let canister of Object.values(this.canisters)) {
@@ -226,11 +266,11 @@ export class Replica {
226
266
  }
227
267
  return null;
228
268
  }
229
- dfxJson(canisterName, wasmPath = 'canister.wasm', didPath = 'canister.did') {
269
+ dfxJson(canisterName, wasmPath = "canister.wasm", didPath = "canister.did") {
230
270
  let canisters = {};
231
271
  if (canisterName) {
232
272
  canisters[canisterName] = {
233
- type: 'custom',
273
+ type: "custom",
234
274
  wasm: wasmPath,
235
275
  candid: didPath,
236
276
  };
@@ -241,13 +281,13 @@ export class Replica {
241
281
  dfx: getDfxVersion(),
242
282
  defaults: {
243
283
  build: {
244
- packtool: 'mops sources',
284
+ packtool: "mops sources",
245
285
  },
246
286
  },
247
287
  networks: {
248
288
  local: {
249
- type: 'ephemeral',
250
- bind: '127.0.0.1:4945',
289
+ type: "ephemeral",
290
+ bind: "127.0.0.1:4945",
251
291
  },
252
292
  },
253
293
  };
@@ -1,12 +1,12 @@
1
- import process from 'node:process';
2
- import asTable from 'as-table';
3
- import chalk from 'chalk';
4
- import { mainActor } from '../api/actors.js';
1
+ import process from "node:process";
2
+ import asTable from "as-table";
3
+ import chalk from "chalk";
4
+ import { mainActor } from "../api/actors.js";
5
5
  export async function search(text) {
6
6
  let actor = await mainActor();
7
7
  let [packages, _pageCount] = await actor.search(text, [], []);
8
8
  if (!packages.length) {
9
- console.log('Packages not found');
9
+ console.log("Packages not found");
10
10
  return;
11
11
  }
12
12
  let ellipsis = (text, max) => {
@@ -14,23 +14,25 @@ export async function search(text) {
14
14
  return text;
15
15
  }
16
16
  else {
17
- return text.slice(0, max) + '';
17
+ return text.slice(0, max) + "";
18
18
  }
19
19
  };
20
- let maxNameLength = Math.max(...packages.map(a => a.config.name.length));
20
+ let maxNameLength = Math.max(...packages.map((a) => a.config.name.length));
21
21
  let table = packages.map((item) => {
22
22
  return {
23
23
  NAME: chalk.bold(item.config.name),
24
24
  DESCRIPTION: ellipsis(item.config.description, process.stdout.columns - 40 - maxNameLength),
25
25
  VERSION: item.config.version,
26
- UPDATED: new Date(Number(item.publication.time / 1000000n)).toISOString().split('T')[0],
26
+ UPDATED: new Date(Number(item.publication.time / 1000000n))
27
+ .toISOString()
28
+ .split("T")[0],
27
29
  };
28
30
  });
29
- console.log('');
31
+ console.log("");
30
32
  console.log(asTable.configure({
31
- delimiter: chalk.gray(' | '),
32
- dash: chalk.gray(''),
33
- title: t => chalk.gray.bold(t),
33
+ delimiter: chalk.gray(" | "),
34
+ dash: chalk.gray(""),
35
+ title: (t) => chalk.gray.bold(t),
34
36
  })(table));
35
- console.log('');
37
+ console.log("");
36
38
  }
@@ -1,63 +1,66 @@
1
- import process from 'node:process';
2
- import child_process, { execSync } from 'node:child_process';
3
- import chalk from 'chalk';
4
- import { version, globalConfigDir } from '../mops.js';
5
- import { cleanCache } from '../cache.js';
6
- import { toolchain } from './toolchain/index.js';
7
- let url = 'https://x344g-ziaaa-aaaap-abl7a-cai.icp0.io';
1
+ import process from "node:process";
2
+ import child_process, { execSync } from "node:child_process";
3
+ import chalk from "chalk";
4
+ import { version, globalConfigDir } from "../mops.js";
5
+ import { cleanCache } from "../cache.js";
6
+ import { toolchain } from "./toolchain/index.js";
7
+ let url = "https://x344g-ziaaa-aaaap-abl7a-cai.icp0.io";
8
8
  function detectPackageManager() {
9
- let res = '';
9
+ let res = "";
10
10
  try {
11
- res = execSync('which mops').toString();
11
+ res = execSync("which mops").toString();
12
12
  }
13
13
  catch (e) { }
14
14
  if (!res) {
15
- console.error(chalk.red('Couldn\'t detect package manager'));
15
+ console.error(chalk.red("Couldn't detect package manager"));
16
16
  process.exit(1);
17
17
  }
18
- if (res.includes('pnpm/')) {
19
- return 'pnpm';
18
+ if (res.includes("pnpm/")) {
19
+ return "pnpm";
20
20
  }
21
21
  // else if (res.includes('bun/')) {
22
22
  // return 'bun';
23
23
  // }
24
24
  else {
25
- return 'npm';
25
+ return "npm";
26
26
  }
27
27
  }
28
28
  export async function getLatestVersion() {
29
- let res = await fetch(url + '/tags/latest');
29
+ let res = await fetch(url + "/tags/latest");
30
30
  return res.text();
31
31
  }
32
32
  export async function update() {
33
33
  let latest = await getLatestVersion();
34
34
  let current = version();
35
35
  if (latest === current) {
36
- console.log(chalk.green('You are up to date. Version: ' + current));
36
+ console.log(chalk.green("You are up to date. Version: " + current));
37
37
  }
38
38
  else {
39
- console.log('Current version: ' + chalk.yellow(current));
40
- console.log('Updating to version: ' + chalk.green(latest));
39
+ console.log("Current version: " + chalk.yellow(current));
40
+ console.log("Updating to version: " + chalk.green(latest));
41
41
  let pm = detectPackageManager();
42
- let npmArgs = pm === 'npm' ? ['--no-fund', '--silent'] : [];
43
- let proc = child_process.spawn(pm, ['add', '-g', ...npmArgs, `${url}/versions/${latest}.tgz`], { stdio: 'inherit', detached: false });
44
- proc.on('exit', (res) => {
42
+ let npmArgs = pm === "npm" ? ["--no-fund", "--silent"] : [];
43
+ let proc = child_process.spawn(pm, ["add", "-g", ...npmArgs, `${url}/versions/${latest}.tgz`], { stdio: "inherit", detached: false });
44
+ proc.on("exit", (res) => {
45
45
  if (res !== 0) {
46
- console.log(chalk.red('Failed to update.'));
46
+ console.log(chalk.red("Failed to update."));
47
47
  process.exit(1);
48
48
  }
49
- console.log(chalk.green('Success'));
49
+ console.log(chalk.green("Success"));
50
50
  });
51
51
  }
52
52
  }
53
53
  export async function uninstall() {
54
- console.log('Cleaning cache...');
54
+ console.log("Cleaning cache...");
55
55
  cleanCache();
56
- console.log('Resetting toolchain management...');
56
+ console.log("Resetting toolchain management...");
57
57
  toolchain.init({ reset: true, silent: true });
58
- console.log('Uninstalling mops CLI...');
58
+ console.log("Uninstalling mops CLI...");
59
59
  let pm = detectPackageManager();
60
- child_process.spawn(pm, ['remove', '-g', '--silent', 'ic-mops'], { stdio: 'inherit', detached: false });
61
- console.log(chalk.yellow('Config directory has not been deleted: ' + globalConfigDir));
62
- console.log('Uninstalled');
60
+ child_process.spawn(pm, ["remove", "-g", "--silent", "ic-mops"], {
61
+ stdio: "inherit",
62
+ detached: false,
63
+ });
64
+ console.log(chalk.yellow("Config directory has not been deleted: " + globalConfigDir));
65
+ console.log("Uninstalled");
63
66
  }
@@ -1,4 +1,8 @@
1
- export declare function sources({ conflicts, cwd }?: {
1
+ export declare function sourcesArgs({ conflicts, cwd, }?: {
2
+ conflicts?: "ignore" | "error" | "warning" | undefined;
3
+ cwd?: string | undefined;
4
+ }): Promise<string[][]>;
5
+ export declare function sources({ conflicts, cwd, }?: {
2
6
  conflicts?: "ignore" | "error" | "warning" | undefined;
3
7
  cwd?: string | undefined;
4
8
  }): Promise<string[]>;
@@ -1,24 +1,25 @@
1
- import process from 'node:process';
2
- import path from 'node:path';
3
- import fs from 'node:fs';
4
- import { checkConfigFile, formatDir, formatGithubDir, getDependencyType, readConfig } from '../mops.js';
5
- import { resolvePackages } from '../resolve-packages.js';
6
- export async function sources({ conflicts = 'ignore', cwd = process.cwd() } = {}) {
1
+ import process from "node:process";
2
+ import path from "node:path";
3
+ import fs from "node:fs";
4
+ import { checkConfigFile, formatDir, formatGithubDir, getDependencyType, readConfig, } from "../mops.js";
5
+ import { resolvePackages } from "../resolve-packages.js";
6
+ export async function sourcesArgs({ conflicts = "ignore", cwd = process.cwd(), } = {}) {
7
7
  if (!checkConfigFile()) {
8
8
  return [];
9
9
  }
10
10
  let resolvedPackages = await resolvePackages({ conflicts });
11
11
  // sources
12
- return Object.entries(resolvedPackages).map(([name, version]) => {
12
+ return Object.entries(resolvedPackages)
13
+ .map(([name, version]) => {
13
14
  let depType = getDependencyType(version);
14
15
  let pkgDir;
15
- if (depType === 'local') {
16
+ if (depType === "local") {
16
17
  pkgDir = path.relative(cwd, version);
17
18
  }
18
- else if (depType === 'github') {
19
+ else if (depType === "github") {
19
20
  pkgDir = path.relative(cwd, formatGithubDir(name, version));
20
21
  }
21
- else if (depType === 'mops') {
22
+ else if (depType === "mops") {
22
23
  pkgDir = path.relative(cwd, formatDir(name, version));
23
24
  }
24
25
  else {
@@ -26,17 +27,22 @@ export async function sources({ conflicts = 'ignore', cwd = process.cwd() } = {}
26
27
  }
27
28
  // append baseDir
28
29
  let pkgBaseDir;
29
- if (fs.existsSync(path.join(pkgDir, 'mops.toml'))) {
30
- let config = readConfig(path.join(pkgDir, 'mops.toml'));
31
- pkgBaseDir = path.join(pkgDir, config.package?.baseDir || 'src');
30
+ if (fs.existsSync(path.join(pkgDir, "mops.toml"))) {
31
+ let config = readConfig(path.join(pkgDir, "mops.toml"));
32
+ pkgBaseDir = path.join(pkgDir, config.package?.baseDir || "src");
32
33
  }
33
34
  else {
34
- pkgBaseDir = path.join(pkgDir, 'src');
35
+ pkgBaseDir = path.join(pkgDir, "src");
35
36
  }
36
37
  // use pkgDir if baseDir doesn't exist for local packages
37
- if (depType === 'local' && !fs.existsSync(path.resolve(cwd, pkgBaseDir))) {
38
+ if (depType === "local" &&
39
+ !fs.existsSync(path.resolve(cwd, pkgBaseDir))) {
38
40
  pkgBaseDir = pkgDir;
39
41
  }
40
- return `--package ${name} ${pkgBaseDir}`;
41
- }).filter(x => x != null);
42
+ return ["--package", name, pkgBaseDir];
43
+ })
44
+ .filter((x) => x != null);
45
+ }
46
+ export async function sources({ conflicts = "ignore", cwd = process.cwd(), } = {}) {
47
+ return (await sourcesArgs({ conflicts, cwd })).map((args) => args.join(" "));
42
48
  }
@@ -1,5 +1,5 @@
1
1
  type SyncOptions = {
2
- lock?: 'update' | 'ignore';
2
+ lock?: "update" | "ignore";
3
3
  };
4
4
  export declare function sync({ lock }?: SyncOptions): Promise<void>;
5
5
  export {};