ic-mops 1.11.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/.DS_Store +0 -0
  2. package/.eslintrc.json +7 -7
  3. package/CHANGELOG.md +15 -0
  4. package/api/actors.ts +41 -37
  5. package/api/downloadPackageFiles.ts +75 -61
  6. package/api/getHighestVersion.ts +5 -5
  7. package/api/index.ts +4 -4
  8. package/api/network.ts +19 -21
  9. package/api/resolveVersion.ts +14 -11
  10. package/bin/mops.js +1 -1
  11. package/bun.lock +234 -198
  12. package/bundle/bench/bench-canister.mo +2 -2
  13. package/bundle/bench/user-bench.mo +0 -4
  14. package/bundle/bin/mops.js +1 -1
  15. package/bundle/cli.js +1000 -924
  16. package/bundle/cli.tgz +0 -0
  17. package/bundle/declarations/bench/bench.did +3 -3
  18. package/bundle/declarations/bench/bench.did.d.ts +3 -3
  19. package/bundle/declarations/bench/index.d.ts +3 -3
  20. package/bundle/declarations/bench/index.js +1 -1
  21. package/bundle/declarations/main/index.d.ts +3 -3
  22. package/bundle/declarations/main/index.js +1 -1
  23. package/bundle/declarations/main/main.did +78 -121
  24. package/bundle/declarations/main/main.did.d.ts +48 -98
  25. package/bundle/declarations/main/main.did.js +53 -107
  26. package/bundle/declarations/storage/index.d.ts +3 -3
  27. package/bundle/declarations/storage/index.js +4 -4
  28. package/bundle/declarations/storage/storage.did.d.ts +3 -3
  29. package/bundle/package.json +6 -5
  30. package/bundle/templates/mops-publish.yml +3 -3
  31. package/bundle/templates/mops-test.yml +3 -3
  32. package/bundle-package-json.ts +8 -8
  33. package/cache.ts +80 -65
  34. package/check-requirements.ts +49 -45
  35. package/cli.ts +577 -376
  36. package/commands/add.ts +142 -129
  37. package/commands/available-updates.ts +55 -28
  38. package/commands/bench/bench-canister.mo +114 -108
  39. package/commands/bench/user-bench.mo +6 -6
  40. package/commands/bench-replica.ts +146 -106
  41. package/commands/bench.ts +563 -497
  42. package/commands/build.ts +177 -0
  43. package/commands/bump.ts +68 -57
  44. package/commands/check-candid.ts +24 -0
  45. package/commands/docs-coverage.ts +124 -102
  46. package/commands/docs.ts +118 -108
  47. package/commands/format.ts +171 -155
  48. package/commands/init.ts +301 -275
  49. package/commands/install/install-all.ts +75 -62
  50. package/commands/install/install-dep.ts +43 -28
  51. package/commands/install/install-deps.ts +23 -15
  52. package/commands/install/install-local-dep.ts +42 -34
  53. package/commands/install/install-mops-dep.ts +154 -123
  54. package/commands/install/sync-local-cache.ts +39 -35
  55. package/commands/maintainer.ts +109 -99
  56. package/commands/outdated.ts +31 -18
  57. package/commands/owner.ts +107 -99
  58. package/commands/publish.ts +534 -443
  59. package/commands/remove.ts +119 -89
  60. package/commands/replica.ts +391 -303
  61. package/commands/search.ts +42 -36
  62. package/commands/self.ts +63 -56
  63. package/commands/sources.ts +66 -49
  64. package/commands/sync.ts +92 -75
  65. package/commands/template.ts +145 -102
  66. package/commands/test/mmf1.ts +146 -119
  67. package/commands/test/reporters/compact-reporter.ts +87 -84
  68. package/commands/test/reporters/files-reporter.ts +56 -51
  69. package/commands/test/reporters/reporter.ts +12 -6
  70. package/commands/test/reporters/silent-reporter.ts +58 -59
  71. package/commands/test/reporters/verbose-reporter.ts +66 -54
  72. package/commands/test/test.ts +497 -460
  73. package/commands/test/utils.ts +85 -6
  74. package/commands/toolchain/index.ts +363 -322
  75. package/commands/toolchain/moc.ts +78 -50
  76. package/commands/toolchain/pocket-ic.ts +41 -34
  77. package/commands/toolchain/toolchain-utils.ts +92 -72
  78. package/commands/toolchain/wasmtime.ts +37 -34
  79. package/commands/update.ts +91 -56
  80. package/commands/user.ts +90 -81
  81. package/commands/watch/deployer.ts +188 -152
  82. package/commands/watch/error-checker.ts +90 -80
  83. package/commands/watch/formatter.ts +72 -60
  84. package/commands/watch/generator.ts +116 -96
  85. package/commands/watch/globMoFiles.ts +13 -13
  86. package/commands/watch/parseDfxJson.ts +63 -57
  87. package/commands/watch/tester.ts +83 -65
  88. package/commands/watch/warning-checker.ts +149 -136
  89. package/commands/watch/watch.ts +123 -95
  90. package/declarations/bench/bench.did.d.ts +3 -3
  91. package/declarations/bench/index.d.ts +3 -3
  92. package/declarations/bench/index.js +1 -1
  93. package/declarations/main/index.d.ts +3 -3
  94. package/declarations/main/index.js +1 -1
  95. package/declarations/main/main.did.d.ts +3 -3
  96. package/declarations/storage/index.d.ts +3 -3
  97. package/declarations/storage/index.js +4 -4
  98. package/declarations/storage/storage.did.d.ts +3 -3
  99. package/dist/api/actors.d.ts +4 -4
  100. package/dist/api/actors.js +8 -8
  101. package/dist/api/downloadPackageFiles.d.ts +2 -2
  102. package/dist/api/downloadPackageFiles.js +10 -10
  103. package/dist/api/getHighestVersion.js +1 -1
  104. package/dist/api/index.d.ts +4 -4
  105. package/dist/api/index.js +4 -4
  106. package/dist/api/network.js +9 -9
  107. package/dist/api/resolveVersion.js +3 -3
  108. package/dist/bin/mops.js +1 -1
  109. package/dist/bundle-package-json.js +8 -8
  110. package/dist/cache.js +22 -17
  111. package/dist/check-requirements.js +11 -11
  112. package/dist/cli.js +283 -186
  113. package/dist/commands/add.d.ts +1 -1
  114. package/dist/commands/add.js +41 -38
  115. package/dist/commands/available-updates.d.ts +1 -1
  116. package/dist/commands/available-updates.js +32 -14
  117. package/dist/commands/bench/bench-canister.mo +114 -108
  118. package/dist/commands/bench/user-bench.mo +6 -6
  119. package/dist/commands/bench-replica.d.ts +6 -5
  120. package/dist/commands/bench-replica.js +58 -36
  121. package/dist/commands/bench.d.ts +5 -5
  122. package/dist/commands/bench.js +134 -118
  123. package/dist/commands/build.d.ts +7 -0
  124. package/dist/commands/build.js +121 -0
  125. package/dist/commands/bump.js +27 -18
  126. package/dist/commands/check-candid.d.ts +4 -0
  127. package/dist/commands/check-candid.js +15 -0
  128. package/dist/commands/docs-coverage.d.ts +1 -1
  129. package/dist/commands/docs-coverage.js +45 -31
  130. package/dist/commands/docs.d.ts +1 -1
  131. package/dist/commands/docs.js +39 -38
  132. package/dist/commands/format.js +31 -27
  133. package/dist/commands/init.js +102 -92
  134. package/dist/commands/install/install-all.d.ts +2 -2
  135. package/dist/commands/install/install-all.js +23 -21
  136. package/dist/commands/install/install-dep.d.ts +1 -1
  137. package/dist/commands/install/install-dep.js +21 -8
  138. package/dist/commands/install/install-deps.d.ts +1 -1
  139. package/dist/commands/install/install-deps.js +1 -1
  140. package/dist/commands/install/install-local-dep.js +11 -9
  141. package/dist/commands/install/install-mops-dep.d.ts +1 -1
  142. package/dist/commands/install/install-mops-dep.js +32 -27
  143. package/dist/commands/install/sync-local-cache.js +10 -10
  144. package/dist/commands/maintainer.js +21 -21
  145. package/dist/commands/outdated.js +16 -6
  146. package/dist/commands/owner.js +21 -21
  147. package/dist/commands/publish.js +148 -128
  148. package/dist/commands/remove.d.ts +1 -1
  149. package/dist/commands/remove.js +42 -30
  150. package/dist/commands/replica.d.ts +9 -8
  151. package/dist/commands/replica.js +105 -65
  152. package/dist/commands/search.js +15 -13
  153. package/dist/commands/self.js +31 -28
  154. package/dist/commands/sources.d.ts +5 -1
  155. package/dist/commands/sources.js +23 -17
  156. package/dist/commands/sync.d.ts +1 -1
  157. package/dist/commands/sync.js +38 -25
  158. package/dist/commands/template.js +66 -56
  159. package/dist/commands/test/mmf1.d.ts +3 -3
  160. package/dist/commands/test/mmf1.js +33 -31
  161. package/dist/commands/test/reporters/compact-reporter.d.ts +3 -3
  162. package/dist/commands/test/reporters/compact-reporter.js +19 -15
  163. package/dist/commands/test/reporters/files-reporter.d.ts +3 -3
  164. package/dist/commands/test/reporters/files-reporter.js +18 -14
  165. package/dist/commands/test/reporters/reporter.d.ts +2 -2
  166. package/dist/commands/test/reporters/silent-reporter.d.ts +3 -3
  167. package/dist/commands/test/reporters/silent-reporter.js +4 -4
  168. package/dist/commands/test/reporters/verbose-reporter.d.ts +3 -3
  169. package/dist/commands/test/reporters/verbose-reporter.js +17 -13
  170. package/dist/commands/test/test.d.ts +4 -4
  171. package/dist/commands/test/test.js +151 -181
  172. package/dist/commands/test/utils.d.ts +6 -0
  173. package/dist/commands/test/utils.js +63 -2
  174. package/dist/commands/toolchain/index.d.ts +1 -1
  175. package/dist/commands/toolchain/index.js +81 -69
  176. package/dist/commands/toolchain/moc.d.ts +1 -1
  177. package/dist/commands/toolchain/moc.js +48 -24
  178. package/dist/commands/toolchain/pocket-ic.js +12 -12
  179. package/dist/commands/toolchain/toolchain-utils.d.ts +2 -0
  180. package/dist/commands/toolchain/toolchain-utils.js +32 -23
  181. package/dist/commands/toolchain/wasmtime.js +11 -11
  182. package/dist/commands/update.d.ts +1 -1
  183. package/dist/commands/update.js +30 -12
  184. package/dist/commands/user.js +31 -28
  185. package/dist/commands/watch/deployer.d.ts +4 -4
  186. package/dist/commands/watch/deployer.js +45 -36
  187. package/dist/commands/watch/error-checker.d.ts +2 -2
  188. package/dist/commands/watch/error-checker.js +27 -27
  189. package/dist/commands/watch/formatter.d.ts +4 -4
  190. package/dist/commands/watch/formatter.js +17 -17
  191. package/dist/commands/watch/generator.d.ts +3 -3
  192. package/dist/commands/watch/generator.js +28 -23
  193. package/dist/commands/watch/globMoFiles.js +8 -8
  194. package/dist/commands/watch/parseDfxJson.d.ts +2 -2
  195. package/dist/commands/watch/parseDfxJson.js +9 -9
  196. package/dist/commands/watch/tester.d.ts +4 -4
  197. package/dist/commands/watch/tester.js +23 -21
  198. package/dist/commands/watch/warning-checker.d.ts +3 -3
  199. package/dist/commands/watch/warning-checker.js +36 -36
  200. package/dist/commands/watch/watch.js +45 -32
  201. package/dist/declarations/bench/bench.did.d.ts +3 -3
  202. package/dist/declarations/bench/index.d.ts +3 -3
  203. package/dist/declarations/bench/index.js +1 -1
  204. package/dist/declarations/main/index.d.ts +3 -3
  205. package/dist/declarations/main/index.js +1 -1
  206. package/dist/declarations/main/main.did.d.ts +3 -3
  207. package/dist/declarations/storage/index.d.ts +3 -3
  208. package/dist/declarations/storage/index.js +4 -4
  209. package/dist/declarations/storage/storage.did.d.ts +3 -3
  210. package/dist/environments/nodejs/cli.d.ts +1 -0
  211. package/dist/environments/nodejs/cli.js +4 -0
  212. package/dist/environments/web/cli.d.ts +1 -0
  213. package/dist/environments/web/cli.js +4 -0
  214. package/dist/error.d.ts +1 -0
  215. package/dist/error.js +5 -0
  216. package/dist/fix-dist.js +5 -5
  217. package/dist/helpers/find-changelog-entry.js +8 -5
  218. package/dist/helpers/get-dep-name.d.ts +1 -0
  219. package/dist/helpers/get-dep-name.js +4 -1
  220. package/dist/helpers/get-dfx-version.js +4 -4
  221. package/dist/helpers/get-moc-path.js +8 -7
  222. package/dist/helpers/get-moc-version.js +10 -7
  223. package/dist/helpers/get-package-id.js +2 -2
  224. package/dist/helpers/is-candid-compatible.d.ts +1 -0
  225. package/dist/helpers/is-candid-compatible.js +20 -0
  226. package/dist/integrity.d.ts +1 -1
  227. package/dist/integrity.js +47 -38
  228. package/dist/jest.config.d.ts +11 -0
  229. package/dist/jest.config.js +14 -0
  230. package/dist/mops.d.ts +6 -6
  231. package/dist/mops.js +87 -80
  232. package/dist/notify-installs.js +4 -4
  233. package/dist/package.json +11 -10
  234. package/dist/pem.d.ts +3 -3
  235. package/dist/pem.js +20 -12
  236. package/dist/release-cli.js +20 -20
  237. package/dist/resolve-packages.d.ts +1 -1
  238. package/dist/resolve-packages.js +52 -36
  239. package/dist/templates/mops-publish.yml +3 -3
  240. package/dist/templates/mops-test.yml +3 -3
  241. package/dist/templates/src/lib.mo +13 -13
  242. package/dist/templates/test/lib.test.mo +2 -2
  243. package/dist/templates.js +1 -1
  244. package/dist/tests/cli.test.d.ts +1 -0
  245. package/dist/tests/cli.test.js +63 -0
  246. package/dist/types.d.ts +14 -4
  247. package/dist/vessel.d.ts +2 -2
  248. package/dist/vessel.js +41 -34
  249. package/dist/wasm/pkg/bundler/package.json +20 -0
  250. package/dist/wasm/pkg/bundler/wasm.d.ts +3 -0
  251. package/dist/wasm/pkg/bundler/wasm.js +5 -0
  252. package/dist/wasm/pkg/bundler/wasm_bg.js +93 -0
  253. package/dist/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  254. package/dist/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  255. package/dist/wasm/pkg/nodejs/package.json +14 -0
  256. package/dist/wasm/pkg/nodejs/wasm.d.ts +3 -0
  257. package/dist/wasm/pkg/nodejs/wasm.js +98 -0
  258. package/dist/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  259. package/dist/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  260. package/dist/wasm/pkg/web/package.json +18 -0
  261. package/dist/wasm/pkg/web/wasm.d.ts +35 -0
  262. package/dist/wasm/pkg/web/wasm.js +191 -0
  263. package/dist/wasm/pkg/web/wasm_bg.wasm +0 -0
  264. package/dist/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  265. package/dist/wasm.d.ts +5 -0
  266. package/dist/wasm.js +10 -0
  267. package/environments/nodejs/cli.ts +6 -0
  268. package/environments/web/cli.ts +6 -0
  269. package/error.ts +6 -0
  270. package/fix-dist.ts +5 -5
  271. package/global.d.ts +3 -3
  272. package/helpers/find-changelog-entry.ts +26 -23
  273. package/helpers/get-dep-name.ts +7 -3
  274. package/helpers/get-dfx-version.ts +8 -9
  275. package/helpers/get-moc-path.ts +25 -26
  276. package/helpers/get-moc-version.ts +21 -19
  277. package/helpers/get-package-id.ts +4 -4
  278. package/helpers/is-candid-compatible.ts +22 -0
  279. package/integrity.ts +270 -236
  280. package/jest.config.js +14 -0
  281. package/mops.ts +238 -215
  282. package/notify-installs.ts +16 -17
  283. package/package.json +21 -15
  284. package/parallel.ts +28 -24
  285. package/pem.ts +55 -47
  286. package/release-cli.ts +73 -39
  287. package/resolve-packages.ts +231 -189
  288. package/templates/mops-publish.yml +3 -3
  289. package/templates/mops-test.yml +3 -3
  290. package/templates/src/lib.mo +13 -13
  291. package/templates/test/lib.test.mo +2 -2
  292. package/templates.ts +4 -4
  293. package/tests/__snapshots__/cli.test.ts.snap +202 -0
  294. package/tests/build/error/candid/bar.did +3 -0
  295. package/tests/build/error/dfx.json +12 -0
  296. package/tests/build/error/mops.toml +9 -0
  297. package/tests/build/error/src/Bar.mo +5 -0
  298. package/tests/build/error/src/Foo.mo +5 -0
  299. package/tests/build/success/.dfx/local/canister_ids.json +17 -0
  300. package/tests/build/success/.dfx/local/canisters/bar/bar.did +3 -0
  301. package/tests/build/success/.dfx/local/canisters/bar/bar.most +4 -0
  302. package/tests/build/success/.dfx/local/canisters/bar/bar.wasm +0 -0
  303. package/tests/build/success/.dfx/local/canisters/bar/constructor.did +3 -0
  304. package/tests/build/success/.dfx/local/canisters/bar/index.js +42 -0
  305. package/tests/build/success/.dfx/local/canisters/bar/init_args.txt +1 -0
  306. package/tests/build/success/.dfx/local/canisters/bar/service.did +3 -0
  307. package/tests/build/success/.dfx/local/canisters/bar/service.did.d.ts +7 -0
  308. package/tests/build/success/.dfx/local/canisters/bar/service.did.js +4 -0
  309. package/tests/build/success/.dfx/local/canisters/foo/constructor.did +3 -0
  310. package/tests/build/success/.dfx/local/canisters/foo/foo.did +3 -0
  311. package/tests/build/success/.dfx/local/canisters/foo/foo.most +4 -0
  312. package/tests/build/success/.dfx/local/canisters/foo/foo.wasm +0 -0
  313. package/tests/build/success/.dfx/local/canisters/foo/index.js +42 -0
  314. package/tests/build/success/.dfx/local/canisters/foo/init_args.txt +1 -0
  315. package/tests/build/success/.dfx/local/canisters/foo/service.did +3 -0
  316. package/tests/build/success/.dfx/local/canisters/foo/service.did.d.ts +7 -0
  317. package/tests/build/success/.dfx/local/canisters/foo/service.did.js +4 -0
  318. package/tests/build/success/.dfx/local/lsp/ucwa4-rx777-77774-qaada-cai.did +3 -0
  319. package/tests/build/success/.dfx/local/lsp/ulvla-h7777-77774-qaacq-cai.did +3 -0
  320. package/tests/build/success/.dfx/local/network-id +4 -0
  321. package/tests/build/success/candid/bar.did +3 -0
  322. package/tests/build/success/dfx.json +12 -0
  323. package/tests/build/success/mops.toml +9 -0
  324. package/tests/build/success/src/Bar.mo +5 -0
  325. package/tests/build/success/src/Foo.mo +5 -0
  326. package/tests/check-candid/a.did +3 -0
  327. package/tests/check-candid/b.did +5 -0
  328. package/tests/check-candid/c.did +3 -0
  329. package/tests/cli.test.ts +82 -0
  330. package/tsconfig.json +26 -19
  331. package/types.ts +41 -31
  332. package/vessel.ts +219 -187
  333. package/wasm/Cargo.lock +1475 -0
  334. package/wasm/Cargo.toml +28 -0
  335. package/wasm/pkg/bundler/package.json +20 -0
  336. package/wasm/pkg/bundler/wasm.d.ts +3 -0
  337. package/wasm/pkg/bundler/wasm.js +5 -0
  338. package/wasm/pkg/bundler/wasm_bg.js +93 -0
  339. package/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  340. package/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  341. package/wasm/pkg/nodejs/package.json +14 -0
  342. package/wasm/pkg/nodejs/wasm.d.ts +3 -0
  343. package/wasm/pkg/nodejs/wasm.js +98 -0
  344. package/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  345. package/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  346. package/wasm/pkg/web/package.json +18 -0
  347. package/wasm/pkg/web/wasm.d.ts +35 -0
  348. package/wasm/pkg/web/wasm.js +191 -0
  349. package/wasm/pkg/web/wasm_bg.wasm +0 -0
  350. package/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  351. package/wasm/src/lib.rs +17 -0
  352. package/wasm.ts +16 -0
package/mops.ts CHANGED
@@ -1,279 +1,302 @@
1
- import process from 'node:process';
2
- import path from 'node:path';
3
- import fs from 'node:fs';
4
- import {Identity} from '@dfinity/agent';
5
- import TOML from '@iarna/toml';
6
- import chalk from 'chalk';
7
- import prompts from 'prompts';
8
- import fetch from 'node-fetch';
9
-
10
- import {decodeFile} from './pem.js';
11
- import {Config, Dependency} from './types.js';
12
- import {mainActor, storageActor} from './api/actors.js';
13
- import {getNetwork} from './api/network.js';
14
- import {getHighestVersion} from './api/getHighestVersion.js';
15
- import {getPackageId} from './helpers/get-package-id.js';
16
-
1
+ import process from "node:process";
2
+ import path from "node:path";
3
+ import fs from "node:fs";
4
+ import { Identity } from "@icp-sdk/core/agent";
5
+ import TOML from "@iarna/toml";
6
+ import chalk from "chalk";
7
+ import prompts from "prompts";
8
+ import fetch from "node-fetch";
9
+
10
+ import { decodeFile } from "./pem.js";
11
+ import { Config, Dependency } from "./types.js";
12
+ import { mainActor, storageActor } from "./api/actors.js";
13
+ import { getNetwork } from "./api/network.js";
14
+ import { getHighestVersion } from "./api/getHighestVersion.js";
15
+ import { getPackageId } from "./helpers/get-package-id.js";
17
16
 
18
17
  if (!globalThis.fetch) {
19
- globalThis.fetch = fetch as any;
18
+ globalThis.fetch = fetch as any;
20
19
  }
21
20
 
22
21
  // (!) make changes in pair with backend
23
- export let apiVersion = '1.3';
22
+ export let apiVersion = "1.3";
24
23
 
25
- export let globalConfigDir = '';
26
- export let globalCacheDir = '';
24
+ export let globalConfigDir = "";
25
+ export let globalCacheDir = "";
27
26
 
28
27
  // OS specific dirs
29
- if (process.platform == 'win32') {
30
- globalConfigDir = path.join(process.env.LOCALAPPDATA || '', 'mops/config');
31
- globalCacheDir = path.join(process.env.LOCALAPPDATA || '', 'mops/cache');
32
- }
33
- else if (process.platform == 'darwin') {
34
- globalConfigDir = path.join(process.env.HOME || '', 'Library/Application Support/mops');
35
- globalCacheDir = path.join(process.env.HOME || '', 'Library/Caches/mops');
36
- }
37
- else {
38
- globalConfigDir = path.join(process.env.HOME || '', '.config/mops');
39
- globalCacheDir = path.join(process.env.HOME || '', '.cache/mops');
28
+ if (process.platform == "win32") {
29
+ globalConfigDir = path.join(process.env.LOCALAPPDATA || "", "mops/config");
30
+ globalCacheDir = path.join(process.env.LOCALAPPDATA || "", "mops/cache");
31
+ } else if (process.platform == "darwin") {
32
+ globalConfigDir = path.join(
33
+ process.env.HOME || "",
34
+ "Library/Application Support/mops",
35
+ );
36
+ globalCacheDir = path.join(process.env.HOME || "", "Library/Caches/mops");
37
+ } else {
38
+ globalConfigDir = path.join(process.env.HOME || "", ".config/mops");
39
+ globalCacheDir = path.join(process.env.HOME || "", ".cache/mops");
40
40
  }
41
41
  // XDG overrides
42
42
  if (process.env.XDG_CONFIG_HOME) {
43
- globalConfigDir = path.join(process.env.XDG_CONFIG_HOME, 'mops');
43
+ globalConfigDir = path.join(process.env.XDG_CONFIG_HOME, "mops");
44
44
  }
45
45
  if (process.env.XDG_CACHE_HOME) {
46
- globalCacheDir = path.join(process.env.XDG_CACHE_HOME, 'mops');
46
+ globalCacheDir = path.join(process.env.XDG_CACHE_HOME, "mops");
47
47
  }
48
48
 
49
- export function getNetworkFile() : string | URL {
50
- let networkFile : string | URL = '';
51
- try {
52
- networkFile = new URL('./network.txt', import.meta.url);
53
- }
54
- catch {
55
- networkFile = path.join(__dirname, 'network.txt');
56
- }
57
- return networkFile;
49
+ export function getNetworkFile(): string | URL {
50
+ let networkFile: string | URL = "";
51
+ try {
52
+ networkFile = new URL("./network.txt", import.meta.url);
53
+ } catch {
54
+ networkFile = path.join(__dirname, "network.txt");
55
+ }
56
+ return networkFile;
58
57
  }
59
58
 
60
- export function setNetwork(network : string) {
61
- fs.writeFileSync(getNetworkFile(), network);
59
+ export function setNetwork(network: string) {
60
+ fs.writeFileSync(getNetworkFile(), network);
62
61
  }
63
62
 
64
- export let getIdentity = async () : Promise<Identity | undefined> => {
65
- let identityPem = path.resolve(globalConfigDir, 'identity.pem');
66
- let identityPemEncrypted = path.resolve(globalConfigDir, 'identity.pem.encrypted');
67
- if (fs.existsSync(identityPemEncrypted)) {
68
- let res = await prompts({
69
- type: 'invisible',
70
- name: 'value',
71
- message: 'Enter password:',
72
- });
73
- try {
74
- return decodeFile(identityPemEncrypted, res.value);
75
- }
76
- catch (e) {
77
- console.log(chalk.red('Error: ') + 'Invalid password');
78
- process.exit(1);
79
- }
80
- }
81
- if (fs.existsSync(identityPem)) {
82
- return decodeFile(identityPem);
83
- }
84
- return undefined;
63
+ export let getIdentity = async (): Promise<Identity | undefined> => {
64
+ let identityPem = path.resolve(globalConfigDir, "identity.pem");
65
+ let identityPemEncrypted = path.resolve(
66
+ globalConfigDir,
67
+ "identity.pem.encrypted",
68
+ );
69
+ if (fs.existsSync(identityPemEncrypted)) {
70
+ let res = await prompts({
71
+ type: "invisible",
72
+ name: "value",
73
+ message: "Enter password:",
74
+ });
75
+ try {
76
+ return decodeFile(identityPemEncrypted, res.value);
77
+ } catch (e) {
78
+ console.log(chalk.red("Error: ") + "Invalid password");
79
+ process.exit(1);
80
+ }
81
+ }
82
+ if (fs.existsSync(identityPem)) {
83
+ return decodeFile(identityPem);
84
+ }
85
+ return undefined;
85
86
  };
86
87
 
87
- export function getClosestConfigFile(dir = process.cwd()) : string {
88
- if (!path.basename(dir)) {
89
- return '';
90
- }
91
- let configFile = path.join(dir, 'mops.toml');
92
- if (fs.existsSync(configFile)) {
93
- return configFile;
94
- }
95
- return getClosestConfigFile(path.resolve(dir, '..'));
88
+ export function getClosestConfigFile(dir = process.cwd()): string {
89
+ if (!path.basename(dir)) {
90
+ return "";
91
+ }
92
+ let configFile = path.join(dir, "mops.toml");
93
+ if (fs.existsSync(configFile)) {
94
+ return configFile;
95
+ }
96
+ return getClosestConfigFile(path.resolve(dir, ".."));
96
97
  }
97
98
 
98
99
  export function getRootDir() {
99
- let configFile = getClosestConfigFile();
100
- if (!configFile) {
101
- return '';
102
- }
103
- return path.dirname(configFile);
100
+ let configFile = getClosestConfigFile();
101
+ if (!configFile) {
102
+ return "";
103
+ }
104
+ return path.dirname(configFile);
104
105
  }
105
106
 
106
107
  export function checkConfigFile(exit = false) {
107
- let configFile = getClosestConfigFile();
108
- if (!configFile) {
109
- console.log(chalk.red('Error: ') + `Config file 'mops.toml' not found. Please run ${chalk.green('mops init')} first`);
110
- if (exit) {
111
- process.exit(1);
112
- }
113
- return false;
114
- }
115
- return true;
108
+ let configFile = getClosestConfigFile();
109
+ if (!configFile) {
110
+ console.log(
111
+ chalk.red("Error: ") +
112
+ `Config file 'mops.toml' not found. Please run ${chalk.green("mops init")} first`,
113
+ );
114
+ if (exit) {
115
+ process.exit(1);
116
+ }
117
+ return false;
118
+ }
119
+ return true;
116
120
  }
117
121
 
118
- export function progressBar(step : number, total : number) {
119
- let done = Math.round(step / total * 10);
120
- return `[${':'.repeat(done)}${' '.repeat(Math.max(0, 10 - done))}]`;
122
+ export function progressBar(step: number, total: number) {
123
+ let done = Math.round((step / total) * 10);
124
+ return `[${":".repeat(done)}${" ".repeat(Math.max(0, 10 - done))}]`;
121
125
  }
122
126
 
123
- export function parseGithubURL(href : string) {
124
- const url = new URL(href);
125
- let branchAndSha = url.hash?.substring(1).split('@');
126
- let branch = branchAndSha[0] || 'master';
127
- let commitHash = branchAndSha[1] || '';
128
- let [org, gitName] = url.pathname.split('/').filter(path => !!path);
129
- org = org || '';
130
- gitName = gitName || '';
131
-
132
- if (gitName?.endsWith('.git')) {
133
- gitName = gitName.substring(0, gitName.length - 4);
134
- }
135
- return {org, gitName, branch, commitHash};
127
+ export function parseGithubURL(href: string) {
128
+ const url = new URL(href);
129
+ let branchAndSha = url.hash?.substring(1).split("@");
130
+ let branch = branchAndSha[0] || "master";
131
+ let commitHash = branchAndSha[1] || "";
132
+ let [org, gitName] = url.pathname.split("/").filter((path) => !!path);
133
+ org = org || "";
134
+ gitName = gitName || "";
135
+
136
+ if (gitName?.endsWith(".git")) {
137
+ gitName = gitName.substring(0, gitName.length - 4);
138
+ }
139
+ return { org, gitName, branch, commitHash };
136
140
  }
137
141
 
138
- export async function getGithubCommit(repo : string, ref : string) : Promise<any> {
139
- let res = await fetch(`https://api.github.com/repos/${repo}/commits/${ref}`);
140
- let json : any = await res.json();
142
+ export async function getGithubCommit(repo: string, ref: string): Promise<any> {
143
+ let res = await fetch(`https://api.github.com/repos/${repo}/commits/${ref}`);
144
+ let json: any = await res.json();
141
145
 
142
- // try on main branch
143
- if (json.message && ref === 'master') {
144
- res = await fetch(`https://api.github.com/repos/${repo}/commits/main`);
145
- json = await res.json();
146
- }
147
- return json;
146
+ // try on main branch
147
+ if (json.message && ref === "master") {
148
+ res = await fetch(`https://api.github.com/repos/${repo}/commits/main`);
149
+ json = await res.json();
150
+ }
151
+ return json;
148
152
  }
149
153
 
150
- export function getDependencyType(version : string) {
151
- if (!version || typeof version !== 'string') {
152
- throw Error(`Invalid dependency value "${version}"`);
153
- }
154
- if (version.startsWith('https://github.com/')) {
155
- return 'github';
156
- }
157
- else if (version.match(/^(\.?\.)?\//)) {
158
- return 'local';
159
- }
160
- else {
161
- return 'mops';
162
- }
154
+ export function getDependencyType(version: string) {
155
+ if (!version || typeof version !== "string") {
156
+ throw Error(`Invalid dependency value "${version}"`);
157
+ }
158
+ if (version.startsWith("https://github.com/")) {
159
+ return "github";
160
+ } else if (version.match(/^(\.?\.)?\//)) {
161
+ return "local";
162
+ } else {
163
+ return "mops";
164
+ }
163
165
  }
164
166
 
165
- export function parseDepValue(name : string, value : string) : Dependency {
166
- let depType = getDependencyType(value);
167
- if (depType === 'github') {
168
- return {name, repo: value, version: ''};
169
- }
170
- else if (depType === 'local') {
171
- return {name, repo: '', path: value, version: ''};
172
- }
173
- else {
174
- return {name, repo: '', version: value};
175
- }
167
+ export function parseDepValue(name: string, value: string): Dependency {
168
+ let depType = getDependencyType(value);
169
+ if (depType === "github") {
170
+ return { name, repo: value, version: "" };
171
+ } else if (depType === "local") {
172
+ return { name, repo: "", path: value, version: "" };
173
+ } else {
174
+ return { name, repo: "", version: value };
175
+ }
176
176
  }
177
177
 
178
- export function readConfig(configFile = getClosestConfigFile()) : Config {
179
- let text = fs.readFileSync(configFile).toString();
180
- let toml = TOML.parse(text);
178
+ export function readConfig(configFile = getClosestConfigFile()): Config {
179
+ let text = fs.readFileSync(configFile).toString();
180
+ let toml = TOML.parse(text);
181
181
 
182
- let processDeps = (deps : any) => {
183
- Object.entries(deps).forEach(([name, data]) => {
184
- if (!data || typeof data !== 'string') {
185
- throw Error(`Invalid dependency value ${name} = "${data}"`);
186
- }
187
- deps[name] = parseDepValue(name, data);
188
- });
189
- };
182
+ let processDeps = (deps: any) => {
183
+ Object.entries(deps).forEach(([name, data]) => {
184
+ if (!data || typeof data !== "string") {
185
+ throw Error(`Invalid dependency value ${name} = "${data}"`);
186
+ }
187
+ deps[name] = parseDepValue(name, data);
188
+ });
189
+ };
190
190
 
191
- processDeps(toml.dependencies || {});
192
- processDeps(toml['dev-dependencies'] || {});
191
+ processDeps(toml.dependencies || {});
192
+ processDeps(toml["dev-dependencies"] || {});
193
193
 
194
- let config : Config = {...toml};
194
+ let config: Config = { ...toml };
195
195
 
196
- Object.entries(config.requirements || {}).forEach(([name, value]) => {
197
- if (name === 'moc') {
198
- config.requirements = config.requirements || {};
199
- config.requirements.moc = value;
200
- }
201
- });
196
+ Object.entries(config.requirements || {}).forEach(([name, value]) => {
197
+ if (name === "moc") {
198
+ config.requirements = config.requirements || {};
199
+ config.requirements.moc = value;
200
+ }
201
+ });
202
202
 
203
- return config;
203
+ return config;
204
204
  }
205
205
 
206
- export function writeConfig(config : Config, configFile = getClosestConfigFile()) {
207
- let resConfig : any = JSON.parse(JSON.stringify(config));
208
-
209
- let deps = resConfig.dependencies || {};
210
- Object.entries(config.dependencies || {}).forEach(([name, {repo, path, version}]) => {
211
- deps[name] = repo || path || version;
212
- });
213
-
214
- let devDeps = resConfig['dev-dependencies'] || {};
215
- Object.entries(config['dev-dependencies'] || {}).forEach(([name, {repo, path, version}]) => {
216
- devDeps[name] = repo || path || version;
217
- });
218
-
219
- let text = TOML.stringify(resConfig).trim();
220
- if (fs.existsSync(configFile) && fs.readFileSync(configFile).toString().endsWith('\n')) {
221
- text += '\n';
222
- }
223
- fs.writeFileSync(configFile, text);
206
+ export function writeConfig(
207
+ config: Config,
208
+ configFile = getClosestConfigFile(),
209
+ ) {
210
+ let resConfig: any = JSON.parse(JSON.stringify(config));
211
+
212
+ let deps = resConfig.dependencies || {};
213
+ Object.entries(config.dependencies || {}).forEach(
214
+ ([name, { repo, path, version }]) => {
215
+ deps[name] = repo || path || version;
216
+ },
217
+ );
218
+
219
+ let devDeps = resConfig["dev-dependencies"] || {};
220
+ Object.entries(config["dev-dependencies"] || {}).forEach(
221
+ ([name, { repo, path, version }]) => {
222
+ devDeps[name] = repo || path || version;
223
+ },
224
+ );
225
+
226
+ let text = TOML.stringify(resConfig).trim();
227
+ if (
228
+ fs.existsSync(configFile) &&
229
+ fs.readFileSync(configFile).toString().endsWith("\n")
230
+ ) {
231
+ text += "\n";
232
+ }
233
+ fs.writeFileSync(configFile, text);
224
234
  }
225
235
 
226
- export function formatDir(name : string, version : string) {
227
- return path.join(getRootDir(), '.mops', getPackageId(name, version));
236
+ export function formatDir(name: string, version: string) {
237
+ return path.join(getRootDir(), ".mops", getPackageId(name, version));
228
238
  }
229
239
 
230
- export function formatGithubDir(name : string, repo : string) {
231
- const {branch, commitHash} = parseGithubURL(repo);
232
- return path.join(getRootDir(), '.mops/_github', `${name}#${branch.replaceAll('/', '___')}` + (commitHash ? `@${commitHash}` : ''));
240
+ export function formatGithubDir(name: string, repo: string) {
241
+ const { branch, commitHash } = parseGithubURL(repo);
242
+ return path.join(
243
+ getRootDir(),
244
+ ".mops/_github",
245
+ `${name}#${branch.replaceAll("/", "___")}` +
246
+ (commitHash ? `@${commitHash}` : ""),
247
+ );
233
248
  }
234
249
 
235
- export function readDfxJson() : any {
236
- let dir = process.cwd();
237
- let dfxJson = null;
238
- for (let i = 0; i < 5; i++) {
239
- let file = path.resolve(dir, 'dfx.json');
240
- if (fs.existsSync(file)) {
241
- dfxJson = JSON.parse(fs.readFileSync(file).toString());
242
- break;
243
- }
244
- dir = path.resolve(dir, '..');
245
- }
246
- return dfxJson;
250
+ export function readDfxJson(): any {
251
+ let dir = process.cwd();
252
+ let dfxJson = null;
253
+ for (let i = 0; i < 5; i++) {
254
+ let file = path.resolve(dir, "dfx.json");
255
+ if (fs.existsSync(file)) {
256
+ dfxJson = JSON.parse(fs.readFileSync(file).toString());
257
+ break;
258
+ }
259
+ dir = path.resolve(dir, "..");
260
+ }
261
+ return dfxJson;
247
262
  }
248
263
 
249
264
  // warn on minor mismatch
250
265
  // err on major mismatch
251
266
  export async function checkApiCompatibility() {
252
- let actor = await mainActor();
253
- let backendApiVer = await actor.getApiVersion();
254
- if (backendApiVer.split('.')[0] !== apiVersion.split('.')[0]) {
255
- console.log(chalk.red('ERR: ') + `CLI incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`);
256
- console.log('Run ' + chalk.greenBright('mops self update') + ' to upgrade cli.');
257
- return false;
258
- }
259
- else if (backendApiVer.split('.')[1] !== apiVersion.split('.')[1]) {
260
- console.log('-'.repeat(50));
261
- console.log(chalk.yellow('WARN: ') + `CLI probably incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`);
262
- console.log('Recommended to run ' + chalk.greenBright('mops self update') + ' to upgrade cli.');
263
- console.log('-'.repeat(50));
264
- }
265
- return true;
267
+ let actor = await mainActor();
268
+ let backendApiVer = await actor.getApiVersion();
269
+ if (backendApiVer.split(".")[0] !== apiVersion.split(".")[0]) {
270
+ console.log(
271
+ chalk.red("ERR: ") +
272
+ `CLI incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`,
273
+ );
274
+ console.log(
275
+ "Run " + chalk.greenBright("mops self update") + " to upgrade cli.",
276
+ );
277
+ return false;
278
+ } else if (backendApiVer.split(".")[1] !== apiVersion.split(".")[1]) {
279
+ console.log("-".repeat(50));
280
+ console.log(
281
+ chalk.yellow("WARN: ") +
282
+ `CLI probably incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`,
283
+ );
284
+ console.log(
285
+ "Recommended to run " +
286
+ chalk.greenBright("mops self update") +
287
+ " to upgrade cli.",
288
+ );
289
+ console.log("-".repeat(50));
290
+ }
291
+ return true;
266
292
  }
267
293
 
268
294
  export function version() {
269
- let packageJson = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url)).toString());
270
- return packageJson.version;
295
+ let packageJson = JSON.parse(
296
+ fs.readFileSync(new URL("./package.json", import.meta.url)).toString(),
297
+ );
298
+ return packageJson.version;
271
299
  }
272
300
 
273
301
  // compatibility with older versions
274
- export {
275
- getNetwork,
276
- mainActor,
277
- storageActor,
278
- getHighestVersion,
279
- };
302
+ export { getNetwork, mainActor, storageActor, getHighestVersion };
@@ -1,20 +1,19 @@
1
- import {getDependencyType} from './mops.js';
2
- import {mainActor} from './api/actors.js';
3
- import {getDepName} from './helpers/get-dep-name.js';
1
+ import { getDependencyType } from "./mops.js";
2
+ import { mainActor } from "./api/actors.js";
3
+ import { getDepName } from "./helpers/get-dep-name.js";
4
4
 
5
- export async function notifyInstalls(installedDeps : Record<string, string>) {
6
- let packages = Object.entries(installedDeps)
7
- .filter(([_, version]) => getDependencyType(version) === 'mops')
8
- .map(([name, version]) => [getDepName(name), version] as [string, string]);
5
+ export async function notifyInstalls(installedDeps: Record<string, string>) {
6
+ let packages = Object.entries(installedDeps)
7
+ .filter(([_, version]) => getDependencyType(version) === "mops")
8
+ .map(([name, version]) => [getDepName(name), version] as [string, string]);
9
9
 
10
- if (packages.length) {
11
- let actor = await mainActor();
10
+ if (packages.length) {
11
+ let actor = await mainActor();
12
12
 
13
- try {
14
- await actor.notifyInstalls(packages);
15
- }
16
- catch (err) {
17
- // console.error('Failed to notify installs:', err);
18
- }
19
- }
20
- }
13
+ try {
14
+ await actor.notifyInstalls(packages);
15
+ } catch (err) {
16
+ // console.error('Failed to notify installs:', err);
17
+ }
18
+ }
19
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ic-mops",
3
- "version": "1.11.1",
3
+ "version": "2.0.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mops": "dist/bin/mops.js",
@@ -15,41 +15,43 @@
15
15
  "!build.sh",
16
16
  "!DEVELOPMENT.md",
17
17
  "!.mops",
18
- "/templates"
18
+ "/templates",
19
+ "/wasm"
19
20
  ],
20
21
  "homepage": "https://mops.one",
21
22
  "repository": {
22
23
  "type": "git",
23
- "url": "https://github.com/ZenVoich/mops.git"
24
+ "url": "https://github.com/caffeinelabs/mops.git"
24
25
  },
25
- "author": "Zen Voich <zen.voich@gmail.com>",
26
+ "author": "DFINITY",
26
27
  "license": "MIT",
27
28
  "engines": {
28
29
  "node": ">=18.0.0"
29
30
  },
30
31
  "scripts": {
31
- "build": "npm run prepare && npm run bundle",
32
- "dist": "tsc",
33
- "bundle": "rm -rf ./bundle && bun build ./cli.ts --outdir ./bundle --target node --minify --external @napi-rs/lzma --external fsevents --format esm --define '__dirname=import.meta.dirname' && npm run bundle:fix && npm run bundle:copy && npm run bundle:package-json && npm run bundle:tar",
32
+ "mops": "tsx ./environments/nodejs/cli",
33
+ "build": "run-s prepare bundle",
34
+ "build:wasm": "run-s build:wasm:nodejs build:wasm:web",
35
+ "build:wasm:nodejs": "wasm-pack build wasm --target nodejs --out-dir pkg/nodejs && rm wasm/pkg/nodejs/.gitignore",
36
+ "build:wasm:web": "wasm-pack build wasm --target web --out-dir pkg/web && rm wasm/pkg/web/.gitignore",
37
+ "dist": "npm run build:wasm && tsc && mkdir -p dist/wasm && cp -r wasm/pkg dist/wasm",
38
+ "bundle": "rm -rf ./bundle && bun build ./environments/web/cli.ts --outdir ./bundle --target node --minify --external @napi-rs/lzma --external fsevents --format esm --define '__dirname=import.meta.dirname' && run-s bundle:fix bundle:copy bundle:package-json bundle:tar",
34
39
  "bundle:fix": "rexreplace 'new URL\\(\"\\.\\./templates' 'new URL(\"./templates' bundle/cli.js && rexreplace 'resolve\\(\".*?/xhr-sync-worker\\.js\"\\)' 'resolve(\"./xhr-sync-worker.js\")' bundle/cli.js && rexreplace '\"import.meta.dirname\",\"wasm_bg.wasm\"' 'import.meta.dirname || new URL(\".\", import.meta.url).pathname,\"wasm_bg.wasm\"' bundle/cli.js",
35
40
  "bundle:copy": "cp -r commands/bench bundle && cp -r bin declarations templates package.json bundle && cp -r node_modules/prettier-plugin-motoko/wasm/pkg/nodejs/wasm_bg.wasm node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js bundle",
36
41
  "bundle:package-json": "tsx bundle-package-json.ts",
37
42
  "bundle:tar": "rm -f bundle/cli.tgz && touch -t 200101010101 bundle/cli.tgz && find bundle -exec touch -d '1970-01-01 00:00:00' {} + && tar --sort name --exclude bundle/cli.tgz -cvf - bundle | gzip -n > bundle/cli.tgz",
38
43
  "copy": "cp -r commands/bench dist/commands && cp -r declarations templates package.json bin dist | true",
39
- "prepare": "rm -rf dist && npm run dist && npm run copy && npm run fix-dist",
44
+ "prepare": "rm -rf dist && run-s dist copy fix-dist",
40
45
  "fix-dist": "tsx ./fix-dist.ts",
41
46
  "release": "tsx release-cli.ts",
42
47
  "check": "tsc --project tsconfig.json --noEmit",
43
48
  "tsc": "tsc",
44
- "esbuild": "esbuild"
49
+ "esbuild": "esbuild",
50
+ "test": "NODE_OPTIONS=\"--experimental-vm-modules\" jest"
45
51
  },
46
52
  "dependencies": {
47
- "@dfinity/agent": "3.1.0",
48
- "@dfinity/candid": "3.1.0",
49
- "@dfinity/identity": "3.1.0",
50
- "@dfinity/identity-secp256k1": "3.1.0",
51
- "@dfinity/principal": "3.1.0",
52
53
  "@iarna/toml": "2.2.5",
54
+ "@icp-sdk/core": "4.0.2",
53
55
  "@noble/hashes": "1.8.0",
54
56
  "as-table": "1.0.55",
55
57
  "buffer": "6.0.3",
@@ -81,6 +83,7 @@
81
83
  "octokit": "3.1.2",
82
84
  "pem-file": "1.0.1",
83
85
  "pic-ic": "0.5.4",
86
+ "pic-js-mops": "0.14.8",
84
87
  "prettier": "3.5.3",
85
88
  "prettier-plugin-motoko": "0.11.0",
86
89
  "promisify-child-process": "4.1.2",
@@ -106,8 +109,11 @@
106
109
  "@types/tar": "6.1.13",
107
110
  "esbuild": "0.23.1",
108
111
  "eslint": "8.57.0",
112
+ "npm-run-all": "4.1.5",
109
113
  "rexreplace": "7.1.13",
114
+ "ts-jest": "29.4.5",
110
115
  "tsx": "4.19.2",
111
- "typescript": "5.7.3"
116
+ "typescript": "5.9.2",
117
+ "wasm-pack": "0.13.1"
112
118
  }
113
119
  }