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
@@ -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,77 +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';
6
- import {getDepName, getDepPinnedVersion} from '../helpers/get-dep-name.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";
7
12
 
8
13
  type UpdateOptions = {
9
- verbose ?: boolean;
10
- dev ?: boolean;
11
- lock ?: 'update' | 'ignore';
14
+ verbose?: boolean;
15
+ dev?: boolean;
16
+ lock?: "update" | "ignore";
12
17
  };
13
18
 
14
- export async function update(pkg ?: string, {lock} : UpdateOptions = {}) {
15
- if (!checkConfigFile()) {
16
- return;
17
- }
18
- let config = readConfig();
19
+ export async function update(pkg?: string, { lock }: UpdateOptions = {}) {
20
+ if (!checkConfigFile()) {
21
+ return;
22
+ }
23
+ let config = readConfig();
19
24
 
20
- if (pkg && !config.dependencies?.[pkg] && !config['dev-dependencies']?.[pkg]) {
21
- console.log(chalk.red(`Package "${pkg}" is not installed!`));
22
- return;
23
- }
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
+ }
24
33
 
25
- // update github packages
26
- let deps = Object.values(config.dependencies || {});
27
- let devDeps = Object.values(config['dev-dependencies'] || {});
28
- let githubDeps = [...deps, ...devDeps].filter((dep) => dep.repo);
29
- if (pkg) {
30
- githubDeps = githubDeps.filter((dep) => dep.name === pkg);
31
- }
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
+ }
32
41
 
33
- for (let dep of githubDeps) {
34
- let {org, gitName, branch, commitHash} = parseGithubURL(dep.repo || '');
35
- let dev = !!config['dev-dependencies']?.[dep.name];
36
- let commit = await getGithubCommit(`${org}/${gitName}`, branch);
37
- if (commit.sha !== commitHash) {
38
- await add(`https://github.com/${org}/${gitName}#${branch}@${commit.sha}`, {dev}, dep.name);
39
- }
40
- }
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
+ }
41
54
 
42
- // update mops packages
43
- let available = await getAvailableUpdates(config, pkg);
55
+ // update mops packages
56
+ let available = await getAvailableUpdates(config, pkg);
44
57
 
45
- if (available.length === 0) {
46
- if (pkg) {
47
- console.log(chalk.green(`Package "${pkg}" is up to date!`));
48
- }
49
- else {
50
- console.log(chalk.green('All dependencies are up to date!'));
51
- }
52
- }
53
- else {
54
- for (let dep of available) {
55
- let devDeps = Object.keys(config['dev-dependencies'] || {});
56
- let allDeps = [...Object.keys(config.dependencies || {}), ...devDeps];
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];
57
68
 
58
- let dev = false;
59
- for (let d of devDeps) {
60
- let pinnedVersion = getDepPinnedVersion(d);
61
- if (getDepName(d) === dep[0] && (!pinnedVersion || dep[1].startsWith(pinnedVersion))) {
62
- dev = true;
63
- break;
64
- }
65
- }
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
+ }
66
80
 
67
- let asName = allDeps.find((d) => {
68
- let pinnedVersion = getDepPinnedVersion(d);
69
- return getDepName(d) === dep[0] && (!pinnedVersion || dep[1].startsWith(pinnedVersion));
70
- }) || dep[0];
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];
71
89
 
72
- await add(`${dep[0]}@${dep[2]}`, {dev}, asName);
73
- }
74
- }
90
+ await add(`${dep[0]}@${dep[2]}`, { dev }, asName);
91
+ }
92
+ }
75
93
 
76
- await checkIntegrity(lock);
77
- }
94
+ await checkIntegrity(lock);
95
+ }