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,65 +1,93 @@
1
- import process from 'node:process';
2
- import path from 'node:path';
3
- import fs from 'fs-extra';
4
- import {SemVer} from 'semver';
1
+ import process from "node:process";
2
+ import path from "node:path";
3
+ import fs from "fs-extra";
4
+ import { SemVer } from "semver";
5
5
 
6
- import {globalCacheDir} from '../../mops.js';
7
- import * as toolchainUtils from './toolchain-utils.js';
6
+ import { globalCacheDir } from "../../mops.js";
7
+ import * as toolchainUtils from "./toolchain-utils.js";
8
8
 
9
- let cacheDir = path.join(globalCacheDir, 'moc');
9
+ let cacheDir = path.join(globalCacheDir, "moc");
10
10
 
11
- export let repo = 'dfinity/motoko';
11
+ export let repo = "dfinity/motoko";
12
12
 
13
13
  export let getLatestReleaseTag = async () => {
14
- return toolchainUtils.getLatestReleaseTag(repo);
14
+ return toolchainUtils.getLatestReleaseTag(repo);
15
15
  };
16
16
 
17
17
  export let getReleases = async () => {
18
- return toolchainUtils.getReleases(repo);
18
+ return toolchainUtils.getReleases(repo);
19
19
  };
20
20
 
21
- export let isCached = (version : string) => {
22
- let dir = path.join(cacheDir, version);
23
- return fs.existsSync(dir) && fs.existsSync(path.join(dir, 'moc'));
21
+ export let isCached = (version: string, filename: "moc" | "moc.js") => {
22
+ let dir = path.join(cacheDir, version);
23
+ return fs.existsSync(dir) && fs.existsSync(path.join(dir, filename));
24
24
  };
25
25
 
26
- export let download = async (version : string, {silent = false, verbose = false} = {}) => {
27
- if (process.platform == 'win32') {
28
- console.error('Windows is not supported. Please use WSL');
29
- process.exit(1);
30
- }
31
- if (!version) {
32
- console.error('version is not defined');
33
- process.exit(1);
34
- }
35
- if (isCached(version)) {
36
- if (verbose) {
37
- console.log(`moc ${version} is already installed`);
38
- }
39
- return;
40
- }
26
+ export let download = async (
27
+ version: string,
28
+ { silent = false, verbose = false } = {},
29
+ ) => {
30
+ if (process.platform == "win32") {
31
+ console.error("Windows is not supported. Please use WSL");
32
+ process.exit(1);
33
+ }
34
+ if (!version) {
35
+ console.error("version is not defined");
36
+ process.exit(1);
37
+ }
41
38
 
42
- let url;
43
- if (new SemVer(version).compare(new SemVer('0.14.6')) >= 0) {
44
- let platfrom = process.platform == 'darwin' ? 'Darwin' : 'Linux';
45
- let arch = process.arch.startsWith('arm')
46
- ? (process.platform == 'darwin' ? 'arm64' : 'aarch64')
47
- : 'x86_64';
48
- url = `https://github.com/dfinity/motoko/releases/download/${version}/motoko-${platfrom}-${arch}-${version}.tar.gz`;
49
- }
50
- else if (new SemVer(version).compare(new SemVer('0.9.5')) >= 0) {
51
- let platfrom = process.platform == 'darwin' ? 'Darwin' : 'Linux';
52
- let arch = 'x86_64';
53
- url = `https://github.com/dfinity/motoko/releases/download/${version}/motoko-${platfrom}-${arch}-${version}.tar.gz`;
54
- }
55
- else {
56
- let platfrom = process.platform == 'darwin' ? 'macos' : 'linux64';
57
- url = `https://github.com/dfinity/motoko/releases/download/${version}/motoko-${platfrom}-${version}.tar.gz`;
58
- }
39
+ const destDir = path.join(cacheDir, version);
59
40
 
60
- if (verbose && !silent) {
61
- console.log(`Downloading ${url}`);
62
- }
41
+ if (isCached(version, "moc.js")) {
42
+ if (verbose) {
43
+ console.log(`moc.js ${version} is already downloaded`);
44
+ }
45
+ } else {
46
+ // Download the .js artifact
47
+ const jsUrl = `https://github.com/dfinity/motoko/releases/download/${version}/moc-${version}.js`;
48
+ const jsDestPath = path.join(destDir, "moc.js");
63
49
 
64
- await toolchainUtils.downloadAndExtract(url, path.join(cacheDir, version));
65
- };
50
+ if (verbose && !silent) {
51
+ console.log(`Downloading ${jsUrl}`);
52
+ }
53
+
54
+ const buffer = await toolchainUtils.tryDownloadFile(jsUrl);
55
+ if (buffer) {
56
+ fs.mkdirSync(destDir, { recursive: true });
57
+ fs.writeFileSync(jsDestPath, buffer);
58
+ } else if (verbose && !silent) {
59
+ console.log(`Warning: Could not download ${jsUrl}`);
60
+ }
61
+ }
62
+
63
+ if (isCached(version, "moc")) {
64
+ if (verbose) {
65
+ console.log(`moc ${version} is already installed`);
66
+ }
67
+ return;
68
+ }
69
+
70
+ let url;
71
+ if (new SemVer(version).compare(new SemVer("0.14.6")) >= 0) {
72
+ let platfrom = process.platform == "darwin" ? "Darwin" : "Linux";
73
+ let arch = process.arch.startsWith("arm")
74
+ ? process.platform == "darwin"
75
+ ? "arm64"
76
+ : "aarch64"
77
+ : "x86_64";
78
+ url = `https://github.com/dfinity/motoko/releases/download/${version}/motoko-${platfrom}-${arch}-${version}.tar.gz`;
79
+ } else if (new SemVer(version).compare(new SemVer("0.9.5")) >= 0) {
80
+ let platfrom = process.platform == "darwin" ? "Darwin" : "Linux";
81
+ let arch = "x86_64";
82
+ url = `https://github.com/dfinity/motoko/releases/download/${version}/motoko-${platfrom}-${arch}-${version}.tar.gz`;
83
+ } else {
84
+ let platfrom = process.platform == "darwin" ? "macos" : "linux64";
85
+ url = `https://github.com/dfinity/motoko/releases/download/${version}/motoko-${platfrom}-${version}.tar.gz`;
86
+ }
87
+
88
+ if (verbose && !silent) {
89
+ console.log(`Downloading ${url}`);
90
+ }
91
+
92
+ await toolchainUtils.downloadAndExtract(url, destDir);
93
+ };
@@ -1,46 +1,53 @@
1
- import process from 'node:process';
2
- import path from 'node:path';
3
- import fs from 'node:fs';
1
+ import process from "node:process";
2
+ import path from "node:path";
3
+ import fs from "node:fs";
4
4
 
5
- import {globalCacheDir} from '../../mops.js';
6
- import * as toolchainUtils from './toolchain-utils.js';
5
+ import { globalCacheDir } from "../../mops.js";
6
+ import * as toolchainUtils from "./toolchain-utils.js";
7
7
 
8
- let cacheDir = path.join(globalCacheDir, 'pocket-ic');
8
+ let cacheDir = path.join(globalCacheDir, "pocket-ic");
9
9
 
10
- export let repo = 'dfinity/pocketic';
10
+ export let repo = "dfinity/pocketic";
11
11
 
12
12
  export let getLatestReleaseTag = async () => {
13
- return toolchainUtils.getLatestReleaseTag(repo);
13
+ return toolchainUtils.getLatestReleaseTag(repo);
14
14
  };
15
15
 
16
16
  export let getReleases = async () => {
17
- return toolchainUtils.getReleases(repo);
17
+ return toolchainUtils.getReleases(repo);
18
18
  };
19
19
 
20
- export let isCached = (version : string) => {
21
- let dir = path.join(cacheDir, version);
22
- return fs.existsSync(dir) && fs.existsSync(path.join(dir, 'pocket-ic'));
20
+ export let isCached = (version: string) => {
21
+ let dir = path.join(cacheDir, version);
22
+ return fs.existsSync(dir) && fs.existsSync(path.join(dir, "pocket-ic"));
23
23
  };
24
24
 
25
- export let download = async (version : string, {silent = false, verbose = false} = {}) => {
26
- if (!version) {
27
- console.error('version is not defined');
28
- process.exit(1);
29
- }
30
- if (isCached(version)) {
31
- if (verbose) {
32
- console.log(`pocket-ic ${version} is already installed`);
33
- }
34
- return;
35
- }
36
-
37
- let platfrom = process.platform == 'darwin' ? 'darwin' : 'linux';
38
- let arch = 'x86_64';
39
- let url = `https://github.com/dfinity/pocketic/releases/download/${version}/pocket-ic-${arch}-${platfrom}.gz`;
40
-
41
- if (verbose && !silent) {
42
- console.log(`Downloading ${url}`);
43
- }
44
-
45
- await toolchainUtils.downloadAndExtract(url, path.join(cacheDir, version), 'pocket-ic');
46
- };
25
+ export let download = async (
26
+ version: string,
27
+ { silent = false, verbose = false } = {},
28
+ ) => {
29
+ if (!version) {
30
+ console.error("version is not defined");
31
+ process.exit(1);
32
+ }
33
+ if (isCached(version)) {
34
+ if (verbose) {
35
+ console.log(`pocket-ic ${version} is already installed`);
36
+ }
37
+ return;
38
+ }
39
+
40
+ let platfrom = process.platform == "darwin" ? "darwin" : "linux";
41
+ let arch = "x86_64";
42
+ let url = `https://github.com/dfinity/pocketic/releases/download/${version}/pocket-ic-${arch}-${platfrom}.gz`;
43
+
44
+ if (verbose && !silent) {
45
+ console.log(`Downloading ${url}`);
46
+ }
47
+
48
+ await toolchainUtils.downloadAndExtract(
49
+ url,
50
+ path.join(cacheDir, version),
51
+ "pocket-ic",
52
+ );
53
+ };
@@ -1,86 +1,106 @@
1
- import process from 'node:process';
2
- import path from 'node:path';
3
- import {Buffer} from 'node:buffer';
4
- import {unzipSync} from 'node:zlib';
5
- import {chmodSync} from 'node:fs';
6
- import fs from 'fs-extra';
7
- import decompress from 'decompress';
1
+ import process from "node:process";
2
+ import path from "node:path";
3
+ import { Buffer } from "node:buffer";
4
+ import { unzipSync } from "node:zlib";
5
+ import { chmodSync } from "node:fs";
6
+ import fs from "fs-extra";
7
+ import decompress from "decompress";
8
8
  // import decompressTarxz from 'decomp-tarxz';
9
- import {deleteSync} from 'del';
10
- import {Octokit} from 'octokit';
11
- import {extract as extractTar} from 'tar';
9
+ import { deleteSync } from "del";
10
+ import { Octokit } from "octokit";
11
+ import { extract as extractTar } from "tar";
12
12
 
13
- import {getRootDir} from '../../mops.js';
13
+ import { getRootDir } from "../../mops.js";
14
14
 
15
- export let downloadAndExtract = async (url : string, destDir : string, destFileName : string = '') => {
16
- let res = await fetch(url);
15
+ export let tryDownloadFile = async (url: string): Promise<Buffer | null> => {
16
+ let res = await fetch(url);
17
17
 
18
- if (res.status !== 200) {
19
- console.error(`ERROR ${res.status} ${url}`);
20
- process.exit(1);
21
- }
18
+ if (!res.ok) {
19
+ console.error(`HTTP ${res.status} ${url}`);
20
+ return null;
21
+ }
22
22
 
23
- let arrayBuffer = await res.arrayBuffer();
24
- let buffer = Buffer.from(arrayBuffer);
23
+ let arrayBuffer = await res.arrayBuffer();
24
+ return Buffer.from(arrayBuffer);
25
+ };
26
+
27
+ export let downloadAndExtract = async (
28
+ url: string,
29
+ destDir: string,
30
+ destFileName: string = "",
31
+ ) => {
32
+ let res = await fetch(url);
33
+
34
+ if (res.status !== 200) {
35
+ console.error(`ERROR ${res.status} ${url}`);
36
+ process.exit(1);
37
+ }
25
38
 
26
- let tmpDir = path.join(getRootDir(), '.mops', '_tmp');
27
- let archive = path.join(tmpDir, path.basename(url));
39
+ let arrayBuffer = await res.arrayBuffer();
40
+ let buffer = Buffer.from(arrayBuffer);
28
41
 
29
- fs.mkdirSync(tmpDir, {recursive: true});
30
- fs.writeFileSync(archive, buffer);
42
+ let tmpDir = path.join(getRootDir(), ".mops", "_tmp");
43
+ let archive = path.join(tmpDir, path.basename(url));
31
44
 
32
- fs.mkdirSync(destDir, {recursive: true});
45
+ fs.mkdirSync(tmpDir, { recursive: true });
46
+ fs.writeFileSync(archive, buffer);
33
47
 
34
- if (archive.endsWith('.xz')) {
35
- let decompressTarxz = await import('decomp-tarxz');
36
- await decompress(archive, tmpDir, {
37
- plugins: [decompressTarxz.default()],
38
- }).catch(() => {
39
- deleteSync([tmpDir]);
40
- });
41
- fs.cpSync(path.join(tmpDir, path.parse(archive).name.replace('.tar', '')), destDir, {recursive: true});
42
- }
43
- else if (archive.endsWith('tar.gz')) {
44
- await extractTar({
45
- file: archive,
46
- cwd: destDir,
47
- });
48
- }
49
- else if (archive.endsWith('.gz')) {
50
- let destFile = path.join(destDir, destFileName || path.parse(archive).name);
51
- fs.writeFileSync(destFile, unzipSync(buffer));
52
- chmodSync(destFile, 0o700);
53
- }
48
+ fs.mkdirSync(destDir, { recursive: true });
54
49
 
55
- deleteSync([tmpDir], {force: true});
50
+ if (archive.endsWith(".xz")) {
51
+ let decompressTarxz = await import("decomp-tarxz");
52
+ await decompress(archive, tmpDir, {
53
+ plugins: [decompressTarxz.default()],
54
+ }).catch(() => {
55
+ deleteSync([tmpDir]);
56
+ });
57
+ fs.cpSync(
58
+ path.join(tmpDir, path.parse(archive).name.replace(".tar", "")),
59
+ destDir,
60
+ { recursive: true },
61
+ );
62
+ } else if (archive.endsWith("tar.gz")) {
63
+ await extractTar({
64
+ file: archive,
65
+ cwd: destDir,
66
+ });
67
+ } else if (archive.endsWith(".gz")) {
68
+ let destFile = path.join(destDir, destFileName || path.parse(archive).name);
69
+ fs.writeFileSync(destFile, unzipSync(buffer));
70
+ chmodSync(destFile, 0o700);
71
+ }
72
+
73
+ deleteSync([tmpDir], { force: true });
56
74
  };
57
75
 
58
- export let getLatestReleaseTag = async (repo : string) : Promise<string> => {
59
- let releases = await getReleases(repo);
60
- let release = releases.find((release : any) => !release.prerelease && !release.draft);
61
- if (!release?.tag_name) {
62
- console.error(`Failed to fetch latest release tag for ${repo}`);
63
- process.exit(1);
64
- }
65
- return release.tag_name.replace(/^v/, '');
76
+ export let getLatestReleaseTag = async (repo: string): Promise<string> => {
77
+ let releases = await getReleases(repo);
78
+ let release = releases.find(
79
+ (release: any) => !release.prerelease && !release.draft,
80
+ );
81
+ if (!release?.tag_name) {
82
+ console.error(`Failed to fetch latest release tag for ${repo}`);
83
+ process.exit(1);
84
+ }
85
+ return release.tag_name.replace(/^v/, "");
66
86
  };
67
87
 
68
- export let getReleases = async (repo : string) => {
69
- let octokit = new Octokit;
70
- let res = await octokit.request(`GET /repos/${repo}/releases`, {
71
- per_page: 10,
72
- headers: {
73
- 'X-GitHub-Api-Version': '2022-11-28',
74
- },
75
- });
76
- if (res.status !== 200) {
77
- console.log('Releases fetch error');
78
- process.exit(1);
79
- }
80
- return res.data.map((release : any) => {
81
- return {
82
- ...release,
83
- tag_name: release.tag_name.replace(/^v/, ''),
84
- };
85
- });
86
- };
88
+ export let getReleases = async (repo: string) => {
89
+ let octokit = new Octokit();
90
+ let res = await octokit.request(`GET /repos/${repo}/releases`, {
91
+ per_page: 10,
92
+ headers: {
93
+ "X-GitHub-Api-Version": "2022-11-28",
94
+ },
95
+ });
96
+ if (res.status !== 200) {
97
+ console.log("Releases fetch error");
98
+ process.exit(1);
99
+ }
100
+ return res.data.map((release: any) => {
101
+ return {
102
+ ...release,
103
+ tag_name: release.tag_name.replace(/^v/, ""),
104
+ };
105
+ });
106
+ };
@@ -1,46 +1,49 @@
1
- import process from 'node:process';
2
- import path from 'node:path';
3
- import fs from 'fs-extra';
1
+ import process from "node:process";
2
+ import path from "node:path";
3
+ import fs from "fs-extra";
4
4
 
5
- import {globalCacheDir} from '../../mops.js';
6
- import * as toolchainUtils from './toolchain-utils.js';
5
+ import { globalCacheDir } from "../../mops.js";
6
+ import * as toolchainUtils from "./toolchain-utils.js";
7
7
 
8
- let cacheDir = path.join(globalCacheDir, 'wasmtime');
8
+ let cacheDir = path.join(globalCacheDir, "wasmtime");
9
9
 
10
- export let repo = 'bytecodealliance/wasmtime';
10
+ export let repo = "bytecodealliance/wasmtime";
11
11
 
12
12
  export let getLatestReleaseTag = async () => {
13
- return toolchainUtils.getLatestReleaseTag(repo);
13
+ return toolchainUtils.getLatestReleaseTag(repo);
14
14
  };
15
15
 
16
16
  export let getReleases = async () => {
17
- return toolchainUtils.getReleases(repo);
17
+ return toolchainUtils.getReleases(repo);
18
18
  };
19
19
 
20
- export let isCached = (version : string) => {
21
- let dir = path.join(cacheDir, version);
22
- return fs.existsSync(dir) && fs.existsSync(path.join(dir, 'wasmtime'));
20
+ export let isCached = (version: string) => {
21
+ let dir = path.join(cacheDir, version);
22
+ return fs.existsSync(dir) && fs.existsSync(path.join(dir, "wasmtime"));
23
23
  };
24
24
 
25
- export let download = async (version : string, {silent = false, verbose = false} = {}) => {
26
- if (!version) {
27
- console.error('version is not defined');
28
- process.exit(1);
29
- }
30
- if (isCached(version)) {
31
- if (verbose) {
32
- console.log(`wasmtime ${version} is already installed`);
33
- }
34
- return;
35
- }
36
-
37
- let platfrom = process.platform == 'darwin' ? 'macos' : 'linux';
38
- let arch = process.arch.startsWith('arm') ? 'aarch64' : 'x86_64';
39
- let url = `https://github.com/bytecodealliance/wasmtime/releases/download/v${version}/wasmtime-v${version}-${arch}-${platfrom}.tar.xz`;
40
-
41
- if (verbose && !silent) {
42
- console.log(`Downloading ${url}`);
43
- }
44
-
45
- await toolchainUtils.downloadAndExtract(url, path.join(cacheDir, version));
46
- };
25
+ export let download = async (
26
+ version: string,
27
+ { silent = false, verbose = false } = {},
28
+ ) => {
29
+ if (!version) {
30
+ console.error("version is not defined");
31
+ process.exit(1);
32
+ }
33
+ if (isCached(version)) {
34
+ if (verbose) {
35
+ console.log(`wasmtime ${version} is already installed`);
36
+ }
37
+ return;
38
+ }
39
+
40
+ let platfrom = process.platform == "darwin" ? "macos" : "linux";
41
+ let arch = process.arch.startsWith("arm") ? "aarch64" : "x86_64";
42
+ let url = `https://github.com/bytecodealliance/wasmtime/releases/download/v${version}/wasmtime-v${version}-${arch}-${platfrom}.tar.xz`;
43
+
44
+ if (verbose && !silent) {
45
+ console.log(`Downloading ${url}`);
46
+ }
47
+
48
+ await toolchainUtils.downloadAndExtract(url, path.join(cacheDir, version));
49
+ };
@@ -1,60 +1,95 @@
1
- import chalk from 'chalk';
2
- import {checkConfigFile, getGithubCommit, parseGithubURL, readConfig} from '../mops.js';
3
- import {add} from './add.js';
4
- import {getAvailableUpdates} from './available-updates.js';
5
- import {checkIntegrity} from '../integrity.js';
1
+ import chalk from "chalk";
2
+ import {
3
+ checkConfigFile,
4
+ getGithubCommit,
5
+ parseGithubURL,
6
+ readConfig,
7
+ } from "../mops.js";
8
+ import { add } from "./add.js";
9
+ import { getAvailableUpdates } from "./available-updates.js";
10
+ import { checkIntegrity } from "../integrity.js";
11
+ import { getDepName, getDepPinnedVersion } from "../helpers/get-dep-name.js";
6
12
 
7
13
  type UpdateOptions = {
8
- verbose ?: boolean;
9
- dev ?: boolean;
10
- lock ?: 'update' | 'ignore';
14
+ verbose?: boolean;
15
+ dev?: boolean;
16
+ lock?: "update" | "ignore";
11
17
  };
12
18
 
13
- export async function update(pkg ?: string, {lock} : UpdateOptions = {}) {
14
- if (!checkConfigFile()) {
15
- return;
16
- }
17
- let config = readConfig();
18
-
19
- if (pkg && !config.dependencies?.[pkg] && !config['dev-dependencies']?.[pkg]) {
20
- console.log(chalk.red(`Package "${pkg}" is not installed!`));
21
- return;
22
- }
23
-
24
- // update github packages
25
- let deps = Object.values(config.dependencies || {});
26
- let devDeps = Object.values(config['dev-dependencies'] || {});
27
- let githubDeps = [...deps, ...devDeps].filter((dep) => dep.repo);
28
- if (pkg) {
29
- githubDeps = githubDeps.filter((dep) => dep.name === pkg);
30
- }
31
-
32
- for (let dep of githubDeps) {
33
- let {org, gitName, branch, commitHash} = parseGithubURL(dep.repo || '');
34
- let dev = !!config['dev-dependencies']?.[dep.name];
35
- let commit = await getGithubCommit(`${org}/${gitName}`, branch);
36
- if (commit.sha !== commitHash) {
37
- await add(`https://github.com/${org}/${gitName}#${branch}@${commit.sha}`, {dev}, dep.name);
38
- }
39
- }
40
-
41
- // update mops packages
42
- let available = await getAvailableUpdates(config, pkg);
43
-
44
- if (available.length === 0) {
45
- if (pkg) {
46
- console.log(chalk.green(`Package "${pkg}" is up to date!`));
47
- }
48
- else {
49
- console.log(chalk.green('All dependencies are up to date!'));
50
- }
51
- }
52
- else {
53
- for (let dep of available) {
54
- let dev = !!config['dev-dependencies']?.[dep[0]];
55
- await add(`${dep[0]}@${dep[2]}`, {dev});
56
- }
57
- }
58
-
59
- await checkIntegrity(lock);
60
- }
19
+ export async function update(pkg?: string, { lock }: UpdateOptions = {}) {
20
+ if (!checkConfigFile()) {
21
+ return;
22
+ }
23
+ let config = readConfig();
24
+
25
+ if (
26
+ pkg &&
27
+ !config.dependencies?.[pkg] &&
28
+ !config["dev-dependencies"]?.[pkg]
29
+ ) {
30
+ console.log(chalk.red(`Package "${pkg}" is not installed!`));
31
+ return;
32
+ }
33
+
34
+ // update github packages
35
+ let deps = Object.values(config.dependencies || {});
36
+ let devDeps = Object.values(config["dev-dependencies"] || {});
37
+ let githubDeps = [...deps, ...devDeps].filter((dep) => dep.repo);
38
+ if (pkg) {
39
+ githubDeps = githubDeps.filter((dep) => dep.name === pkg);
40
+ }
41
+
42
+ for (let dep of githubDeps) {
43
+ let { org, gitName, branch, commitHash } = parseGithubURL(dep.repo || "");
44
+ let dev = !!config["dev-dependencies"]?.[dep.name];
45
+ let commit = await getGithubCommit(`${org}/${gitName}`, branch);
46
+ if (commit.sha !== commitHash) {
47
+ await add(
48
+ `https://github.com/${org}/${gitName}#${branch}@${commit.sha}`,
49
+ { dev },
50
+ dep.name,
51
+ );
52
+ }
53
+ }
54
+
55
+ // update mops packages
56
+ let available = await getAvailableUpdates(config, pkg);
57
+
58
+ if (available.length === 0) {
59
+ if (pkg) {
60
+ console.log(chalk.green(`Package "${pkg}" is up to date!`));
61
+ } else {
62
+ console.log(chalk.green("All dependencies are up to date!"));
63
+ }
64
+ } else {
65
+ for (let dep of available) {
66
+ let devDeps = Object.keys(config["dev-dependencies"] || {});
67
+ let allDeps = [...Object.keys(config.dependencies || {}), ...devDeps];
68
+
69
+ let dev = false;
70
+ for (let d of devDeps) {
71
+ let pinnedVersion = getDepPinnedVersion(d);
72
+ if (
73
+ getDepName(d) === dep[0] &&
74
+ (!pinnedVersion || dep[1].startsWith(pinnedVersion))
75
+ ) {
76
+ dev = true;
77
+ break;
78
+ }
79
+ }
80
+
81
+ let asName =
82
+ allDeps.find((d) => {
83
+ let pinnedVersion = getDepPinnedVersion(d);
84
+ return (
85
+ getDepName(d) === dep[0] &&
86
+ (!pinnedVersion || dep[1].startsWith(pinnedVersion))
87
+ );
88
+ }) || dep[0];
89
+
90
+ await add(`${dep[0]}@${dep[2]}`, { dev }, asName);
91
+ }
92
+ }
93
+
94
+ await checkIntegrity(lock);
95
+ }