ic-mops 1.12.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/.DS_Store +0 -0
  2. package/.eslintrc.json +7 -7
  3. package/CHANGELOG.md +6 -0
  4. package/api/actors.ts +41 -37
  5. package/api/downloadPackageFiles.ts +75 -61
  6. package/api/getHighestVersion.ts +5 -5
  7. package/api/index.ts +4 -4
  8. package/api/network.ts +19 -21
  9. package/api/resolveVersion.ts +14 -11
  10. package/bin/mops.js +1 -1
  11. package/bundle/bench/bench-canister.mo +109 -101
  12. package/bundle/bench/user-bench.mo +6 -6
  13. package/bundle/bin/mops.js +1 -1
  14. package/bundle/cli.js +797 -792
  15. package/bundle/cli.tgz +0 -0
  16. package/bundle/package.json +6 -5
  17. package/bundle/templates/mops-publish.yml +3 -3
  18. package/bundle/templates/mops-test.yml +3 -3
  19. package/bundle/templates/src/lib.mo +13 -13
  20. package/bundle/templates/test/lib.test.mo +2 -2
  21. package/bundle-package-json.ts +8 -8
  22. package/cache.ts +80 -65
  23. package/check-requirements.ts +49 -45
  24. package/cli.ts +577 -376
  25. package/commands/add.ts +142 -129
  26. package/commands/available-updates.ts +55 -41
  27. package/commands/bench/bench-canister.mo +114 -108
  28. package/commands/bench/user-bench.mo +6 -6
  29. package/commands/bench-replica.ts +146 -118
  30. package/commands/bench.ts +563 -497
  31. package/commands/build.ts +177 -0
  32. package/commands/bump.ts +68 -57
  33. package/commands/check-candid.ts +24 -0
  34. package/commands/docs-coverage.ts +124 -102
  35. package/commands/docs.ts +118 -108
  36. package/commands/format.ts +171 -155
  37. package/commands/init.ts +301 -275
  38. package/commands/install/install-all.ts +75 -62
  39. package/commands/install/install-dep.ts +43 -28
  40. package/commands/install/install-deps.ts +23 -15
  41. package/commands/install/install-local-dep.ts +42 -34
  42. package/commands/install/install-mops-dep.ts +154 -123
  43. package/commands/install/sync-local-cache.ts +39 -35
  44. package/commands/maintainer.ts +109 -99
  45. package/commands/outdated.ts +30 -24
  46. package/commands/owner.ts +107 -99
  47. package/commands/publish.ts +534 -443
  48. package/commands/remove.ts +119 -89
  49. package/commands/replica.ts +391 -316
  50. package/commands/search.ts +42 -36
  51. package/commands/self.ts +63 -56
  52. package/commands/sources.ts +66 -49
  53. package/commands/sync.ts +92 -75
  54. package/commands/template.ts +145 -102
  55. package/commands/test/mmf1.ts +146 -119
  56. package/commands/test/reporters/compact-reporter.ts +87 -84
  57. package/commands/test/reporters/files-reporter.ts +56 -51
  58. package/commands/test/reporters/reporter.ts +12 -6
  59. package/commands/test/reporters/silent-reporter.ts +58 -59
  60. package/commands/test/reporters/verbose-reporter.ts +66 -54
  61. package/commands/test/test.ts +498 -401
  62. package/commands/test/utils.ts +72 -67
  63. package/commands/toolchain/index.ts +363 -322
  64. package/commands/toolchain/moc.ts +78 -50
  65. package/commands/toolchain/pocket-ic.ts +41 -34
  66. package/commands/toolchain/toolchain-utils.ts +92 -72
  67. package/commands/toolchain/wasmtime.ts +37 -34
  68. package/commands/update.ts +82 -64
  69. package/commands/user.ts +90 -81
  70. package/commands/watch/deployer.ts +188 -152
  71. package/commands/watch/error-checker.ts +90 -80
  72. package/commands/watch/formatter.ts +72 -60
  73. package/commands/watch/generator.ts +116 -96
  74. package/commands/watch/globMoFiles.ts +13 -13
  75. package/commands/watch/parseDfxJson.ts +63 -57
  76. package/commands/watch/tester.ts +83 -65
  77. package/commands/watch/warning-checker.ts +149 -136
  78. package/commands/watch/watch.ts +123 -95
  79. package/dist/api/actors.d.ts +4 -4
  80. package/dist/api/actors.js +8 -8
  81. package/dist/api/downloadPackageFiles.d.ts +2 -2
  82. package/dist/api/downloadPackageFiles.js +10 -10
  83. package/dist/api/getHighestVersion.js +1 -1
  84. package/dist/api/index.d.ts +4 -4
  85. package/dist/api/index.js +4 -4
  86. package/dist/api/network.js +9 -9
  87. package/dist/api/resolveVersion.js +3 -3
  88. package/dist/bin/mops.js +1 -1
  89. package/dist/bundle-package-json.js +8 -8
  90. package/dist/cache.js +22 -17
  91. package/dist/check-requirements.js +11 -11
  92. package/dist/cli.js +283 -186
  93. package/dist/commands/add.d.ts +1 -1
  94. package/dist/commands/add.js +40 -37
  95. package/dist/commands/available-updates.d.ts +1 -1
  96. package/dist/commands/available-updates.js +18 -12
  97. package/dist/commands/bench/bench-canister.mo +114 -108
  98. package/dist/commands/bench/user-bench.mo +6 -6
  99. package/dist/commands/bench-replica.d.ts +4 -4
  100. package/dist/commands/bench-replica.js +45 -34
  101. package/dist/commands/bench.d.ts +5 -5
  102. package/dist/commands/bench.js +134 -118
  103. package/dist/commands/build.d.ts +7 -0
  104. package/dist/commands/build.js +121 -0
  105. package/dist/commands/bump.js +27 -18
  106. package/dist/commands/check-candid.d.ts +4 -0
  107. package/dist/commands/check-candid.js +15 -0
  108. package/dist/commands/docs-coverage.d.ts +1 -1
  109. package/dist/commands/docs-coverage.js +45 -31
  110. package/dist/commands/docs.d.ts +1 -1
  111. package/dist/commands/docs.js +39 -38
  112. package/dist/commands/format.js +31 -27
  113. package/dist/commands/init.js +102 -92
  114. package/dist/commands/install/install-all.d.ts +2 -2
  115. package/dist/commands/install/install-all.js +23 -21
  116. package/dist/commands/install/install-dep.d.ts +1 -1
  117. package/dist/commands/install/install-dep.js +21 -8
  118. package/dist/commands/install/install-deps.d.ts +1 -1
  119. package/dist/commands/install/install-deps.js +1 -1
  120. package/dist/commands/install/install-local-dep.js +11 -9
  121. package/dist/commands/install/install-mops-dep.d.ts +1 -1
  122. package/dist/commands/install/install-mops-dep.js +32 -27
  123. package/dist/commands/install/sync-local-cache.js +10 -10
  124. package/dist/commands/maintainer.js +21 -21
  125. package/dist/commands/outdated.js +12 -8
  126. package/dist/commands/owner.js +21 -21
  127. package/dist/commands/publish.js +148 -128
  128. package/dist/commands/remove.d.ts +1 -1
  129. package/dist/commands/remove.js +42 -30
  130. package/dist/commands/replica.d.ts +7 -7
  131. package/dist/commands/replica.js +85 -57
  132. package/dist/commands/search.js +15 -13
  133. package/dist/commands/self.js +31 -28
  134. package/dist/commands/sources.d.ts +5 -1
  135. package/dist/commands/sources.js +23 -17
  136. package/dist/commands/sync.d.ts +1 -1
  137. package/dist/commands/sync.js +38 -25
  138. package/dist/commands/template.js +66 -56
  139. package/dist/commands/test/mmf1.d.ts +3 -3
  140. package/dist/commands/test/mmf1.js +33 -31
  141. package/dist/commands/test/reporters/compact-reporter.d.ts +3 -3
  142. package/dist/commands/test/reporters/compact-reporter.js +19 -15
  143. package/dist/commands/test/reporters/files-reporter.d.ts +3 -3
  144. package/dist/commands/test/reporters/files-reporter.js +18 -14
  145. package/dist/commands/test/reporters/reporter.d.ts +2 -2
  146. package/dist/commands/test/reporters/silent-reporter.d.ts +3 -3
  147. package/dist/commands/test/reporters/silent-reporter.js +4 -4
  148. package/dist/commands/test/reporters/verbose-reporter.d.ts +3 -3
  149. package/dist/commands/test/reporters/verbose-reporter.js +17 -13
  150. package/dist/commands/test/test.d.ts +4 -4
  151. package/dist/commands/test/test.js +134 -112
  152. package/dist/commands/test/utils.d.ts +3 -3
  153. package/dist/commands/test/utils.js +17 -17
  154. package/dist/commands/toolchain/index.d.ts +1 -1
  155. package/dist/commands/toolchain/index.js +81 -69
  156. package/dist/commands/toolchain/moc.d.ts +1 -1
  157. package/dist/commands/toolchain/moc.js +48 -24
  158. package/dist/commands/toolchain/pocket-ic.js +12 -12
  159. package/dist/commands/toolchain/toolchain-utils.d.ts +2 -0
  160. package/dist/commands/toolchain/toolchain-utils.js +32 -23
  161. package/dist/commands/toolchain/wasmtime.js +11 -11
  162. package/dist/commands/update.d.ts +1 -1
  163. package/dist/commands/update.js +18 -14
  164. package/dist/commands/user.js +31 -28
  165. package/dist/commands/watch/deployer.d.ts +4 -4
  166. package/dist/commands/watch/deployer.js +45 -36
  167. package/dist/commands/watch/error-checker.d.ts +2 -2
  168. package/dist/commands/watch/error-checker.js +27 -27
  169. package/dist/commands/watch/formatter.d.ts +4 -4
  170. package/dist/commands/watch/formatter.js +17 -17
  171. package/dist/commands/watch/generator.d.ts +3 -3
  172. package/dist/commands/watch/generator.js +28 -23
  173. package/dist/commands/watch/globMoFiles.js +8 -8
  174. package/dist/commands/watch/parseDfxJson.d.ts +2 -2
  175. package/dist/commands/watch/parseDfxJson.js +9 -9
  176. package/dist/commands/watch/tester.d.ts +4 -4
  177. package/dist/commands/watch/tester.js +23 -21
  178. package/dist/commands/watch/warning-checker.d.ts +3 -3
  179. package/dist/commands/watch/warning-checker.js +36 -36
  180. package/dist/commands/watch/watch.js +45 -32
  181. package/dist/environments/nodejs/cli.d.ts +1 -0
  182. package/dist/environments/nodejs/cli.js +4 -0
  183. package/dist/environments/web/cli.d.ts +1 -0
  184. package/dist/environments/web/cli.js +4 -0
  185. package/dist/error.d.ts +1 -0
  186. package/dist/error.js +5 -0
  187. package/dist/fix-dist.js +5 -5
  188. package/dist/helpers/find-changelog-entry.js +8 -5
  189. package/dist/helpers/get-dep-name.js +2 -2
  190. package/dist/helpers/get-dfx-version.js +4 -4
  191. package/dist/helpers/get-moc-path.js +8 -7
  192. package/dist/helpers/get-moc-version.js +10 -7
  193. package/dist/helpers/get-package-id.js +2 -2
  194. package/dist/helpers/is-candid-compatible.d.ts +1 -0
  195. package/dist/helpers/is-candid-compatible.js +20 -0
  196. package/dist/integrity.d.ts +1 -1
  197. package/dist/integrity.js +47 -38
  198. package/dist/jest.config.d.ts +11 -0
  199. package/dist/jest.config.js +14 -0
  200. package/dist/mops.d.ts +6 -6
  201. package/dist/mops.js +87 -80
  202. package/dist/notify-installs.js +4 -4
  203. package/dist/package.json +9 -5
  204. package/dist/pem.d.ts +3 -3
  205. package/dist/pem.js +20 -12
  206. package/dist/release-cli.js +20 -20
  207. package/dist/resolve-packages.d.ts +1 -1
  208. package/dist/resolve-packages.js +52 -36
  209. package/dist/templates/mops-publish.yml +3 -3
  210. package/dist/templates/mops-test.yml +3 -3
  211. package/dist/templates/src/lib.mo +13 -13
  212. package/dist/templates/test/lib.test.mo +2 -2
  213. package/dist/templates.js +1 -1
  214. package/dist/tests/cli.test.d.ts +1 -0
  215. package/dist/tests/cli.test.js +63 -0
  216. package/dist/types.d.ts +14 -4
  217. package/dist/vessel.d.ts +2 -2
  218. package/dist/vessel.js +41 -34
  219. package/dist/wasm/pkg/bundler/package.json +20 -0
  220. package/dist/wasm/pkg/bundler/wasm.d.ts +3 -0
  221. package/dist/wasm/pkg/bundler/wasm.js +5 -0
  222. package/dist/wasm/pkg/bundler/wasm_bg.js +93 -0
  223. package/dist/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  224. package/dist/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  225. package/dist/wasm/pkg/nodejs/package.json +14 -0
  226. package/dist/wasm/pkg/nodejs/wasm.d.ts +3 -0
  227. package/dist/wasm/pkg/nodejs/wasm.js +98 -0
  228. package/dist/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  229. package/dist/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  230. package/dist/wasm/pkg/web/package.json +18 -0
  231. package/dist/wasm/pkg/web/wasm.d.ts +35 -0
  232. package/dist/wasm/pkg/web/wasm.js +191 -0
  233. package/dist/wasm/pkg/web/wasm_bg.wasm +0 -0
  234. package/dist/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  235. package/dist/wasm.d.ts +5 -0
  236. package/dist/wasm.js +10 -0
  237. package/environments/nodejs/cli.ts +6 -0
  238. package/environments/web/cli.ts +6 -0
  239. package/error.ts +6 -0
  240. package/fix-dist.ts +5 -5
  241. package/global.d.ts +3 -3
  242. package/helpers/find-changelog-entry.ts +26 -23
  243. package/helpers/get-dep-name.ts +5 -5
  244. package/helpers/get-dfx-version.ts +8 -9
  245. package/helpers/get-moc-path.ts +25 -26
  246. package/helpers/get-moc-version.ts +21 -19
  247. package/helpers/get-package-id.ts +4 -4
  248. package/helpers/is-candid-compatible.ts +22 -0
  249. package/integrity.ts +270 -236
  250. package/jest.config.js +14 -0
  251. package/mops.ts +238 -215
  252. package/notify-installs.ts +16 -17
  253. package/package.json +19 -10
  254. package/parallel.ts +28 -24
  255. package/pem.ts +55 -47
  256. package/release-cli.ts +73 -39
  257. package/resolve-packages.ts +231 -189
  258. package/templates/mops-publish.yml +3 -3
  259. package/templates/mops-test.yml +3 -3
  260. package/templates/src/lib.mo +13 -13
  261. package/templates/test/lib.test.mo +2 -2
  262. package/templates.ts +4 -4
  263. package/tests/__snapshots__/cli.test.ts.snap +202 -0
  264. package/tests/build/error/candid/bar.did +3 -0
  265. package/tests/build/error/dfx.json +12 -0
  266. package/tests/build/error/mops.toml +9 -0
  267. package/tests/build/error/src/Bar.mo +5 -0
  268. package/tests/build/error/src/Foo.mo +5 -0
  269. package/tests/build/success/.dfx/local/canister_ids.json +17 -0
  270. package/tests/build/success/.dfx/local/canisters/bar/bar.did +3 -0
  271. package/tests/build/success/.dfx/local/canisters/bar/bar.most +4 -0
  272. package/tests/build/success/.dfx/local/canisters/bar/bar.wasm +0 -0
  273. package/tests/build/success/.dfx/local/canisters/bar/constructor.did +3 -0
  274. package/tests/build/success/.dfx/local/canisters/bar/index.js +42 -0
  275. package/tests/build/success/.dfx/local/canisters/bar/init_args.txt +1 -0
  276. package/tests/build/success/.dfx/local/canisters/bar/service.did +3 -0
  277. package/tests/build/success/.dfx/local/canisters/bar/service.did.d.ts +7 -0
  278. package/tests/build/success/.dfx/local/canisters/bar/service.did.js +4 -0
  279. package/tests/build/success/.dfx/local/canisters/foo/constructor.did +3 -0
  280. package/tests/build/success/.dfx/local/canisters/foo/foo.did +3 -0
  281. package/tests/build/success/.dfx/local/canisters/foo/foo.most +4 -0
  282. package/tests/build/success/.dfx/local/canisters/foo/foo.wasm +0 -0
  283. package/tests/build/success/.dfx/local/canisters/foo/index.js +42 -0
  284. package/tests/build/success/.dfx/local/canisters/foo/init_args.txt +1 -0
  285. package/tests/build/success/.dfx/local/canisters/foo/service.did +3 -0
  286. package/tests/build/success/.dfx/local/canisters/foo/service.did.d.ts +7 -0
  287. package/tests/build/success/.dfx/local/canisters/foo/service.did.js +4 -0
  288. package/tests/build/success/.dfx/local/lsp/ucwa4-rx777-77774-qaada-cai.did +3 -0
  289. package/tests/build/success/.dfx/local/lsp/ulvla-h7777-77774-qaacq-cai.did +3 -0
  290. package/tests/build/success/.dfx/local/network-id +4 -0
  291. package/tests/build/success/candid/bar.did +3 -0
  292. package/tests/build/success/dfx.json +12 -0
  293. package/tests/build/success/mops.toml +9 -0
  294. package/tests/build/success/src/Bar.mo +5 -0
  295. package/tests/build/success/src/Foo.mo +5 -0
  296. package/tests/check-candid/a.did +3 -0
  297. package/tests/check-candid/b.did +5 -0
  298. package/tests/check-candid/c.did +3 -0
  299. package/tests/cli.test.ts +82 -0
  300. package/tsconfig.json +26 -19
  301. package/types.ts +41 -31
  302. package/vessel.ts +219 -187
  303. package/wasm/Cargo.lock +1475 -0
  304. package/wasm/Cargo.toml +28 -0
  305. package/wasm/pkg/bundler/package.json +20 -0
  306. package/wasm/pkg/bundler/wasm.d.ts +3 -0
  307. package/wasm/pkg/bundler/wasm.js +5 -0
  308. package/wasm/pkg/bundler/wasm_bg.js +93 -0
  309. package/wasm/pkg/bundler/wasm_bg.wasm +0 -0
  310. package/wasm/pkg/bundler/wasm_bg.wasm.d.ts +8 -0
  311. package/wasm/pkg/nodejs/package.json +14 -0
  312. package/wasm/pkg/nodejs/wasm.d.ts +3 -0
  313. package/wasm/pkg/nodejs/wasm.js +98 -0
  314. package/wasm/pkg/nodejs/wasm_bg.wasm +0 -0
  315. package/wasm/pkg/nodejs/wasm_bg.wasm.d.ts +8 -0
  316. package/wasm/pkg/web/package.json +18 -0
  317. package/wasm/pkg/web/wasm.d.ts +35 -0
  318. package/wasm/pkg/web/wasm.js +191 -0
  319. package/wasm/pkg/web/wasm_bg.wasm +0 -0
  320. package/wasm/pkg/web/wasm_bg.wasm.d.ts +8 -0
  321. package/wasm/src/lib.rs +17 -0
  322. package/wasm.ts +16 -0
package/dist/mops.js CHANGED
@@ -1,49 +1,49 @@
1
- import process from 'node:process';
2
- import path from 'node:path';
3
- import fs from 'node:fs';
4
- import TOML from '@iarna/toml';
5
- import chalk from 'chalk';
6
- import prompts from 'prompts';
7
- import fetch from 'node-fetch';
8
- import { decodeFile } from './pem.js';
9
- import { mainActor, storageActor } from './api/actors.js';
10
- import { getNetwork } from './api/network.js';
11
- import { getHighestVersion } from './api/getHighestVersion.js';
12
- import { getPackageId } from './helpers/get-package-id.js';
1
+ import process from "node:process";
2
+ import path from "node:path";
3
+ import fs from "node:fs";
4
+ import TOML from "@iarna/toml";
5
+ import chalk from "chalk";
6
+ import prompts from "prompts";
7
+ import fetch from "node-fetch";
8
+ import { decodeFile } from "./pem.js";
9
+ import { mainActor, storageActor } from "./api/actors.js";
10
+ import { getNetwork } from "./api/network.js";
11
+ import { getHighestVersion } from "./api/getHighestVersion.js";
12
+ import { getPackageId } from "./helpers/get-package-id.js";
13
13
  if (!globalThis.fetch) {
14
14
  globalThis.fetch = fetch;
15
15
  }
16
16
  // (!) make changes in pair with backend
17
- export let apiVersion = '1.3';
18
- export let globalConfigDir = '';
19
- export let globalCacheDir = '';
17
+ export let apiVersion = "1.3";
18
+ export let globalConfigDir = "";
19
+ export let globalCacheDir = "";
20
20
  // OS specific dirs
21
- if (process.platform == 'win32') {
22
- globalConfigDir = path.join(process.env.LOCALAPPDATA || '', 'mops/config');
23
- globalCacheDir = path.join(process.env.LOCALAPPDATA || '', 'mops/cache');
21
+ if (process.platform == "win32") {
22
+ globalConfigDir = path.join(process.env.LOCALAPPDATA || "", "mops/config");
23
+ globalCacheDir = path.join(process.env.LOCALAPPDATA || "", "mops/cache");
24
24
  }
25
- else if (process.platform == 'darwin') {
26
- globalConfigDir = path.join(process.env.HOME || '', 'Library/Application Support/mops');
27
- globalCacheDir = path.join(process.env.HOME || '', 'Library/Caches/mops');
25
+ else if (process.platform == "darwin") {
26
+ globalConfigDir = path.join(process.env.HOME || "", "Library/Application Support/mops");
27
+ globalCacheDir = path.join(process.env.HOME || "", "Library/Caches/mops");
28
28
  }
29
29
  else {
30
- globalConfigDir = path.join(process.env.HOME || '', '.config/mops');
31
- globalCacheDir = path.join(process.env.HOME || '', '.cache/mops');
30
+ globalConfigDir = path.join(process.env.HOME || "", ".config/mops");
31
+ globalCacheDir = path.join(process.env.HOME || "", ".cache/mops");
32
32
  }
33
33
  // XDG overrides
34
34
  if (process.env.XDG_CONFIG_HOME) {
35
- globalConfigDir = path.join(process.env.XDG_CONFIG_HOME, 'mops');
35
+ globalConfigDir = path.join(process.env.XDG_CONFIG_HOME, "mops");
36
36
  }
37
37
  if (process.env.XDG_CACHE_HOME) {
38
- globalCacheDir = path.join(process.env.XDG_CACHE_HOME, 'mops');
38
+ globalCacheDir = path.join(process.env.XDG_CACHE_HOME, "mops");
39
39
  }
40
40
  export function getNetworkFile() {
41
- let networkFile = '';
41
+ let networkFile = "";
42
42
  try {
43
- networkFile = new URL('./network.txt', import.meta.url);
43
+ networkFile = new URL("./network.txt", import.meta.url);
44
44
  }
45
45
  catch {
46
- networkFile = path.join(__dirname, 'network.txt');
46
+ networkFile = path.join(__dirname, "network.txt");
47
47
  }
48
48
  return networkFile;
49
49
  }
@@ -51,19 +51,19 @@ export function setNetwork(network) {
51
51
  fs.writeFileSync(getNetworkFile(), network);
52
52
  }
53
53
  export let getIdentity = async () => {
54
- let identityPem = path.resolve(globalConfigDir, 'identity.pem');
55
- let identityPemEncrypted = path.resolve(globalConfigDir, 'identity.pem.encrypted');
54
+ let identityPem = path.resolve(globalConfigDir, "identity.pem");
55
+ let identityPemEncrypted = path.resolve(globalConfigDir, "identity.pem.encrypted");
56
56
  if (fs.existsSync(identityPemEncrypted)) {
57
57
  let res = await prompts({
58
- type: 'invisible',
59
- name: 'value',
60
- message: 'Enter password:',
58
+ type: "invisible",
59
+ name: "value",
60
+ message: "Enter password:",
61
61
  });
62
62
  try {
63
63
  return decodeFile(identityPemEncrypted, res.value);
64
64
  }
65
65
  catch (e) {
66
- console.log(chalk.red('Error: ') + 'Invalid password');
66
+ console.log(chalk.red("Error: ") + "Invalid password");
67
67
  process.exit(1);
68
68
  }
69
69
  }
@@ -74,25 +74,26 @@ export let getIdentity = async () => {
74
74
  };
75
75
  export function getClosestConfigFile(dir = process.cwd()) {
76
76
  if (!path.basename(dir)) {
77
- return '';
77
+ return "";
78
78
  }
79
- let configFile = path.join(dir, 'mops.toml');
79
+ let configFile = path.join(dir, "mops.toml");
80
80
  if (fs.existsSync(configFile)) {
81
81
  return configFile;
82
82
  }
83
- return getClosestConfigFile(path.resolve(dir, '..'));
83
+ return getClosestConfigFile(path.resolve(dir, ".."));
84
84
  }
85
85
  export function getRootDir() {
86
86
  let configFile = getClosestConfigFile();
87
87
  if (!configFile) {
88
- return '';
88
+ return "";
89
89
  }
90
90
  return path.dirname(configFile);
91
91
  }
92
92
  export function checkConfigFile(exit = false) {
93
93
  let configFile = getClosestConfigFile();
94
94
  if (!configFile) {
95
- console.log(chalk.red('Error: ') + `Config file 'mops.toml' not found. Please run ${chalk.green('mops init')} first`);
95
+ console.log(chalk.red("Error: ") +
96
+ `Config file 'mops.toml' not found. Please run ${chalk.green("mops init")} first`);
96
97
  if (exit) {
97
98
  process.exit(1);
98
99
  }
@@ -101,18 +102,18 @@ export function checkConfigFile(exit = false) {
101
102
  return true;
102
103
  }
103
104
  export function progressBar(step, total) {
104
- let done = Math.round(step / total * 10);
105
- return `[${':'.repeat(done)}${' '.repeat(Math.max(0, 10 - done))}]`;
105
+ let done = Math.round((step / total) * 10);
106
+ return `[${":".repeat(done)}${" ".repeat(Math.max(0, 10 - done))}]`;
106
107
  }
107
108
  export function parseGithubURL(href) {
108
109
  const url = new URL(href);
109
- let branchAndSha = url.hash?.substring(1).split('@');
110
- let branch = branchAndSha[0] || 'master';
111
- let commitHash = branchAndSha[1] || '';
112
- let [org, gitName] = url.pathname.split('/').filter(path => !!path);
113
- org = org || '';
114
- gitName = gitName || '';
115
- if (gitName?.endsWith('.git')) {
110
+ let branchAndSha = url.hash?.substring(1).split("@");
111
+ let branch = branchAndSha[0] || "master";
112
+ let commitHash = branchAndSha[1] || "";
113
+ let [org, gitName] = url.pathname.split("/").filter((path) => !!path);
114
+ org = org || "";
115
+ gitName = gitName || "";
116
+ if (gitName?.endsWith(".git")) {
116
117
  gitName = gitName.substring(0, gitName.length - 4);
117
118
  }
118
119
  return { org, gitName, branch, commitHash };
@@ -121,36 +122,36 @@ export async function getGithubCommit(repo, ref) {
121
122
  let res = await fetch(`https://api.github.com/repos/${repo}/commits/${ref}`);
122
123
  let json = await res.json();
123
124
  // try on main branch
124
- if (json.message && ref === 'master') {
125
+ if (json.message && ref === "master") {
125
126
  res = await fetch(`https://api.github.com/repos/${repo}/commits/main`);
126
127
  json = await res.json();
127
128
  }
128
129
  return json;
129
130
  }
130
131
  export function getDependencyType(version) {
131
- if (!version || typeof version !== 'string') {
132
+ if (!version || typeof version !== "string") {
132
133
  throw Error(`Invalid dependency value "${version}"`);
133
134
  }
134
- if (version.startsWith('https://github.com/')) {
135
- return 'github';
135
+ if (version.startsWith("https://github.com/")) {
136
+ return "github";
136
137
  }
137
138
  else if (version.match(/^(\.?\.)?\//)) {
138
- return 'local';
139
+ return "local";
139
140
  }
140
141
  else {
141
- return 'mops';
142
+ return "mops";
142
143
  }
143
144
  }
144
145
  export function parseDepValue(name, value) {
145
146
  let depType = getDependencyType(value);
146
- if (depType === 'github') {
147
- return { name, repo: value, version: '' };
147
+ if (depType === "github") {
148
+ return { name, repo: value, version: "" };
148
149
  }
149
- else if (depType === 'local') {
150
- return { name, repo: '', path: value, version: '' };
150
+ else if (depType === "local") {
151
+ return { name, repo: "", path: value, version: "" };
151
152
  }
152
153
  else {
153
- return { name, repo: '', version: value };
154
+ return { name, repo: "", version: value };
154
155
  }
155
156
  }
156
157
  export function readConfig(configFile = getClosestConfigFile()) {
@@ -158,17 +159,17 @@ export function readConfig(configFile = getClosestConfigFile()) {
158
159
  let toml = TOML.parse(text);
159
160
  let processDeps = (deps) => {
160
161
  Object.entries(deps).forEach(([name, data]) => {
161
- if (!data || typeof data !== 'string') {
162
+ if (!data || typeof data !== "string") {
162
163
  throw Error(`Invalid dependency value ${name} = "${data}"`);
163
164
  }
164
165
  deps[name] = parseDepValue(name, data);
165
166
  });
166
167
  };
167
168
  processDeps(toml.dependencies || {});
168
- processDeps(toml['dev-dependencies'] || {});
169
+ processDeps(toml["dev-dependencies"] || {});
169
170
  let config = { ...toml };
170
171
  Object.entries(config.requirements || {}).forEach(([name, value]) => {
171
- if (name === 'moc') {
172
+ if (name === "moc") {
172
173
  config.requirements = config.requirements || {};
173
174
  config.requirements.moc = value;
174
175
  }
@@ -181,33 +182,35 @@ export function writeConfig(config, configFile = getClosestConfigFile()) {
181
182
  Object.entries(config.dependencies || {}).forEach(([name, { repo, path, version }]) => {
182
183
  deps[name] = repo || path || version;
183
184
  });
184
- let devDeps = resConfig['dev-dependencies'] || {};
185
- Object.entries(config['dev-dependencies'] || {}).forEach(([name, { repo, path, version }]) => {
185
+ let devDeps = resConfig["dev-dependencies"] || {};
186
+ Object.entries(config["dev-dependencies"] || {}).forEach(([name, { repo, path, version }]) => {
186
187
  devDeps[name] = repo || path || version;
187
188
  });
188
189
  let text = TOML.stringify(resConfig).trim();
189
- if (fs.existsSync(configFile) && fs.readFileSync(configFile).toString().endsWith('\n')) {
190
- text += '\n';
190
+ if (fs.existsSync(configFile) &&
191
+ fs.readFileSync(configFile).toString().endsWith("\n")) {
192
+ text += "\n";
191
193
  }
192
194
  fs.writeFileSync(configFile, text);
193
195
  }
194
196
  export function formatDir(name, version) {
195
- return path.join(getRootDir(), '.mops', getPackageId(name, version));
197
+ return path.join(getRootDir(), ".mops", getPackageId(name, version));
196
198
  }
197
199
  export function formatGithubDir(name, repo) {
198
200
  const { branch, commitHash } = parseGithubURL(repo);
199
- return path.join(getRootDir(), '.mops/_github', `${name}#${branch.replaceAll('/', '___')}` + (commitHash ? `@${commitHash}` : ''));
201
+ return path.join(getRootDir(), ".mops/_github", `${name}#${branch.replaceAll("/", "___")}` +
202
+ (commitHash ? `@${commitHash}` : ""));
200
203
  }
201
204
  export function readDfxJson() {
202
205
  let dir = process.cwd();
203
206
  let dfxJson = null;
204
207
  for (let i = 0; i < 5; i++) {
205
- let file = path.resolve(dir, 'dfx.json');
208
+ let file = path.resolve(dir, "dfx.json");
206
209
  if (fs.existsSync(file)) {
207
210
  dfxJson = JSON.parse(fs.readFileSync(file).toString());
208
211
  break;
209
212
  }
210
- dir = path.resolve(dir, '..');
213
+ dir = path.resolve(dir, "..");
211
214
  }
212
215
  return dfxJson;
213
216
  }
@@ -216,22 +219,26 @@ export function readDfxJson() {
216
219
  export async function checkApiCompatibility() {
217
220
  let actor = await mainActor();
218
221
  let backendApiVer = await actor.getApiVersion();
219
- if (backendApiVer.split('.')[0] !== apiVersion.split('.')[0]) {
220
- console.log(chalk.red('ERR: ') + `CLI incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`);
221
- console.log('Run ' + chalk.greenBright('mops self update') + ' to upgrade cli.');
222
+ if (backendApiVer.split(".")[0] !== apiVersion.split(".")[0]) {
223
+ console.log(chalk.red("ERR: ") +
224
+ `CLI incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`);
225
+ console.log("Run " + chalk.greenBright("mops self update") + " to upgrade cli.");
222
226
  return false;
223
227
  }
224
- else if (backendApiVer.split('.')[1] !== apiVersion.split('.')[1]) {
225
- console.log('-'.repeat(50));
226
- console.log(chalk.yellow('WARN: ') + `CLI probably incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`);
227
- console.log('Recommended to run ' + chalk.greenBright('mops self update') + ' to upgrade cli.');
228
- console.log('-'.repeat(50));
228
+ else if (backendApiVer.split(".")[1] !== apiVersion.split(".")[1]) {
229
+ console.log("-".repeat(50));
230
+ console.log(chalk.yellow("WARN: ") +
231
+ `CLI probably incompatible with backend. CLI v${apiVersion}, Backend v${backendApiVer}`);
232
+ console.log("Recommended to run " +
233
+ chalk.greenBright("mops self update") +
234
+ " to upgrade cli.");
235
+ console.log("-".repeat(50));
229
236
  }
230
237
  return true;
231
238
  }
232
239
  export function version() {
233
- let packageJson = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url)).toString());
240
+ let packageJson = JSON.parse(fs.readFileSync(new URL("./package.json", import.meta.url)).toString());
234
241
  return packageJson.version;
235
242
  }
236
243
  // compatibility with older versions
237
- export { getNetwork, mainActor, storageActor, getHighestVersion, };
244
+ export { getNetwork, mainActor, storageActor, getHighestVersion };
@@ -1,9 +1,9 @@
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
  export async function notifyInstalls(installedDeps) {
5
5
  let packages = Object.entries(installedDeps)
6
- .filter(([_, version]) => getDependencyType(version) === 'mops')
6
+ .filter(([_, version]) => getDependencyType(version) === "mops")
7
7
  .map(([name, version]) => [getDepName(name), version]);
8
8
  if (packages.length) {
9
9
  let actor = await mainActor();
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ic-mops",
3
- "version": "1.12.0",
3
+ "version": "2.0.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mops": "bin/mops.js",
@@ -15,14 +15,15 @@
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"
@@ -87,8 +88,11 @@
87
88
  "@types/tar": "6.1.13",
88
89
  "esbuild": "0.23.1",
89
90
  "eslint": "8.57.0",
91
+ "npm-run-all": "4.1.5",
90
92
  "rexreplace": "7.1.13",
93
+ "ts-jest": "29.4.5",
91
94
  "tsx": "4.19.2",
92
- "typescript": "5.9.2"
95
+ "typescript": "5.9.2",
96
+ "wasm-pack": "0.13.1"
93
97
  }
94
98
  }
package/dist/pem.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { Buffer } from 'node:buffer';
2
- import { Ed25519KeyIdentity } from '@icp-sdk/core/identity';
3
- import { Secp256k1KeyIdentity } from '@icp-sdk/core/identity/secp256k1';
1
+ import { Buffer } from "node:buffer";
2
+ import { Ed25519KeyIdentity } from "@icp-sdk/core/identity";
3
+ import { Secp256k1KeyIdentity } from "@icp-sdk/core/identity/secp256k1";
4
4
  export declare function decodeFile(file: string, password?: string): Secp256k1KeyIdentity | Ed25519KeyIdentity;
5
5
  export declare function encrypt(buffer: Buffer, password: string): Buffer<ArrayBuffer>;
package/dist/pem.js CHANGED
@@ -1,9 +1,9 @@
1
- import fs from 'node:fs';
2
- import { Buffer } from 'node:buffer';
3
- import crypto from 'node:crypto';
4
- import { Ed25519KeyIdentity } from '@icp-sdk/core/identity';
5
- import { Secp256k1KeyIdentity } from '@icp-sdk/core/identity/secp256k1';
6
- import pemfile from 'pem-file';
1
+ import fs from "node:fs";
2
+ import { Buffer } from "node:buffer";
3
+ import crypto from "node:crypto";
4
+ import { Ed25519KeyIdentity } from "@icp-sdk/core/identity";
5
+ import { Secp256k1KeyIdentity } from "@icp-sdk/core/identity/secp256k1";
6
+ import pemfile from "pem-file";
7
7
  export function decodeFile(file, password) {
8
8
  let rawKey = fs.readFileSync(file);
9
9
  if (password) {
@@ -13,21 +13,25 @@ export function decodeFile(file, password) {
13
13
  }
14
14
  function decode(rawKey) {
15
15
  let buf = pemfile.decode(rawKey);
16
- if (rawKey.includes('EC PRIVATE KEY')) {
16
+ if (rawKey.includes("EC PRIVATE KEY")) {
17
17
  if (buf.length != 118) {
18
- throw 'expecting byte length 118 but got ' + buf.length;
18
+ throw "expecting byte length 118 but got " + buf.length;
19
19
  }
20
20
  return Secp256k1KeyIdentity.fromSecretKey(buf.subarray(7, 39));
21
21
  }
22
22
  if (buf.length != 85) {
23
- throw 'expecting byte length 85 but got ' + buf.length;
23
+ throw "expecting byte length 85 but got " + buf.length;
24
24
  }
25
25
  let secretKey = Buffer.concat([buf.subarray(16, 48)]);
26
26
  return Ed25519KeyIdentity.fromSecretKey(secretKey);
27
27
  }
28
- let algorithm = 'aes-256-ctr';
28
+ let algorithm = "aes-256-ctr";
29
29
  export function encrypt(buffer, password) {
30
- let key = crypto.createHash('sha256').update(password).digest('base64').slice(0, 32);
30
+ let key = crypto
31
+ .createHash("sha256")
32
+ .update(password)
33
+ .digest("base64")
34
+ .slice(0, 32);
31
35
  // Create an initialization vector
32
36
  let iv = crypto.randomBytes(16);
33
37
  // Create a new cipher using the algorithm, key, and iv
@@ -37,7 +41,11 @@ export function encrypt(buffer, password) {
37
41
  return result;
38
42
  }
39
43
  function decrypt(encrypted, password) {
40
- let key = crypto.createHash('sha256').update(password).digest('base64').slice(0, 32);
44
+ let key = crypto
45
+ .createHash("sha256")
46
+ .update(password)
47
+ .digest("base64")
48
+ .slice(0, 32);
41
49
  // Get the iv: the first 16 bytes
42
50
  let iv = encrypted.subarray(0, 16);
43
51
  // Get the rest
@@ -1,33 +1,33 @@
1
1
  /* eslint-disable no-undef */
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import { URL } from 'node:url';
5
- import { execSync } from 'node:child_process';
6
- import semver from 'semver';
7
- import { sha256 } from '@noble/hashes/sha256';
8
- import { bytesToHex } from '@noble/hashes/utils';
9
- import { findChangelogEntry } from './helpers/find-changelog-entry.js';
10
- let __dirname = new URL('.', import.meta.url).pathname;
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { URL } from "node:url";
5
+ import { execSync } from "node:child_process";
6
+ import semver from "semver";
7
+ import { sha256 } from "@noble/hashes/sha256";
8
+ import { bytesToHex } from "@noble/hashes/utils";
9
+ import { findChangelogEntry } from "./helpers/find-changelog-entry.js";
10
+ let __dirname = new URL(".", import.meta.url).pathname;
11
11
  // build using Docker
12
- execSync('./build.sh', { stdio: 'inherit', cwd: __dirname });
13
- let commitHash = process.env.COMMIT_HASH || execSync('git rev-parse HEAD').toString().trim();
14
- let version = JSON.parse(fs.readFileSync(path.resolve(__dirname, 'package.json'), 'utf8')).version;
12
+ execSync("./build.sh", { stdio: "inherit", cwd: __dirname });
13
+ let commitHash = process.env.COMMIT_HASH || execSync("git rev-parse HEAD").toString().trim();
14
+ let version = JSON.parse(fs.readFileSync(path.resolve(__dirname, "package.json"), "utf8")).version;
15
15
  let major = semver.parse(version)?.major;
16
- let tag = semver.parse(version)?.prerelease[0] || 'latest';
17
- let releaseNotes = findChangelogEntry(fs.readFileSync(path.resolve(__dirname, 'CHANGELOG.md'), 'utf8'), version);
18
- let data = fs.readFileSync(path.resolve(__dirname, 'bundle/cli.tgz'));
16
+ let tag = semver.parse(version)?.prerelease[0] || "latest";
17
+ let releaseNotes = findChangelogEntry(fs.readFileSync(path.resolve(__dirname, "CHANGELOG.md"), "utf8"), version);
18
+ let data = fs.readFileSync(path.resolve(__dirname, "bundle/cli.tgz"));
19
19
  let hash = bytesToHex(sha256(data));
20
20
  let size = data.byteLength;
21
21
  console.log(`Commit hash of release: ${commitHash}`);
22
- fs.cpSync(path.resolve(__dirname, 'bundle/cli.tgz'), path.resolve(__dirname, `../cli-releases/versions/${version}.tgz`), { force: false, errorOnExist: true });
22
+ fs.cpSync(path.resolve(__dirname, "bundle/cli.tgz"), path.resolve(__dirname, `../cli-releases/versions/${version}.tgz`), { force: false, errorOnExist: true });
23
23
  fs.cpSync(path.resolve(__dirname, `../cli-releases/versions/${version}.tgz`), path.resolve(__dirname, `../cli-releases/versions/${tag}.tgz`), { force: true, errorOnExist: false, recursive: true });
24
24
  fs.cpSync(path.resolve(__dirname, `../cli-releases/versions/${version}.tgz`), path.resolve(__dirname, `../cli-releases/versions/${major}.tgz`), { force: true, errorOnExist: false, recursive: true });
25
25
  fs.writeFileSync(path.resolve(__dirname, `../cli-releases/tags/${tag}`), version);
26
26
  console.log(`Release '${version}' created with tag '${tag}'`);
27
- if (!fs.existsSync(path.resolve(__dirname, '../cli-releases/releases.json'))) {
28
- fs.writeFileSync(path.resolve(__dirname, '../cli-releases/releases.json'), JSON.stringify({ tags: {}, versions: {} }, null, 2));
27
+ if (!fs.existsSync(path.resolve(__dirname, "../cli-releases/releases.json"))) {
28
+ fs.writeFileSync(path.resolve(__dirname, "../cli-releases/releases.json"), JSON.stringify({ tags: {}, versions: {} }, null, 2));
29
29
  }
30
- let releases = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../cli-releases/releases.json'), 'utf8'));
30
+ let releases = JSON.parse(fs.readFileSync(path.resolve(__dirname, "../cli-releases/releases.json"), "utf8"));
31
31
  releases.tags[tag] = version;
32
32
  releases.versions[version] = {
33
33
  time: new Date().getTime(),
@@ -37,4 +37,4 @@ releases.versions[version] = {
37
37
  url: `https://cli.mops.one/versions/${version}.tgz`,
38
38
  hash,
39
39
  };
40
- fs.writeFileSync(path.resolve(__dirname, '../cli-releases/releases.json'), JSON.stringify(releases, null, 2));
40
+ fs.writeFileSync(path.resolve(__dirname, "../cli-releases/releases.json"), JSON.stringify(releases, null, 2));
@@ -1,3 +1,3 @@
1
- export declare function resolvePackages({ conflicts }?: {
1
+ export declare function resolvePackages({ conflicts, }?: {
2
2
  conflicts?: "ignore" | "error" | "warning" | undefined;
3
3
  }): Promise<Record<string, string>>;