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,75 +1,88 @@
1
- import process from 'node:process';
2
- import chalk from 'chalk';
3
- import {createLogUpdate} from 'log-update';
4
- import {checkConfigFile, parseDepValue, readConfig} from '../../mops.js';
5
- import {checkIntegrity, checkLockFileLight, readLockFile} from '../../integrity.js';
6
- import {installDeps} from './install-deps.js';
7
- import {checkRequirements} from '../../check-requirements.js';
8
- import {syncLocalCache} from './sync-local-cache.js';
9
- import {notifyInstalls} from '../../notify-installs.js';
1
+ import process from "node:process";
2
+ import chalk from "chalk";
3
+ import { createLogUpdate } from "log-update";
4
+ import { checkConfigFile, parseDepValue, readConfig } from "../../mops.js";
5
+ import {
6
+ checkIntegrity,
7
+ checkLockFileLight,
8
+ readLockFile,
9
+ } from "../../integrity.js";
10
+ import { installDeps } from "./install-deps.js";
11
+ import { checkRequirements } from "../../check-requirements.js";
12
+ import { syncLocalCache } from "./sync-local-cache.js";
13
+ import { notifyInstalls } from "../../notify-installs.js";
10
14
 
11
15
  type InstallAllOptions = {
12
- verbose ?: boolean;
13
- silent ?: boolean;
14
- lock ?: 'check' | 'update' | 'ignore';
15
- threads ?: number;
16
- installFromLockFile ?: boolean;
17
- }
18
-
19
- export async function installAll({verbose = false, silent = false, threads, lock, installFromLockFile} : InstallAllOptions = {}) : Promise<boolean> {
20
- if (!checkConfigFile()) {
21
- return false;
22
- }
16
+ verbose?: boolean;
17
+ silent?: boolean;
18
+ lock?: "check" | "update" | "ignore";
19
+ threads?: number;
20
+ installFromLockFile?: boolean;
21
+ };
23
22
 
24
- let config = readConfig();
25
- let deps = Object.values(config.dependencies || {});
26
- let devDeps = Object.values(config['dev-dependencies'] || {});
27
- let allDeps = [...deps, ...devDeps];
28
- let installedFromLockFile = false;
23
+ export async function installAll({
24
+ verbose = false,
25
+ silent = false,
26
+ threads,
27
+ lock,
28
+ installFromLockFile,
29
+ }: InstallAllOptions = {}): Promise<boolean> {
30
+ if (!checkConfigFile()) {
31
+ return false;
32
+ }
29
33
 
30
- // install from lock file to avoid installing intermediate dependencies
31
- if ((lock !== 'ignore' || installFromLockFile) && checkLockFileLight()) {
32
- let lockFileJson = readLockFile();
34
+ let config = readConfig();
35
+ let deps = Object.values(config.dependencies || {});
36
+ let devDeps = Object.values(config["dev-dependencies"] || {});
37
+ let allDeps = [...deps, ...devDeps];
38
+ let installedFromLockFile = false;
33
39
 
34
- if (lockFileJson && lockFileJson.version === 3) {
35
- verbose && console.log('Installing from lock file...');
36
- installedFromLockFile = true;
37
- let lockedDeps = Object.entries(lockFileJson.deps).map(([name, version]) => {
38
- return parseDepValue(name, version);
39
- });
40
- let ok = await installDeps(lockedDeps, {silent, verbose, threads, ignoreTransitive: true});
41
- if (!ok) {
42
- return false;
43
- }
44
- }
45
- }
40
+ // install from lock file to avoid installing intermediate dependencies
41
+ if ((lock !== "ignore" || installFromLockFile) && checkLockFileLight()) {
42
+ let lockFileJson = readLockFile();
46
43
 
47
- if (!installedFromLockFile) {
48
- let ok = await installDeps(allDeps, {silent, verbose, threads});
49
- if (!ok) {
50
- return false;
51
- }
52
- }
44
+ if (lockFileJson && lockFileJson.version === 3) {
45
+ verbose && console.log("Installing from lock file...");
46
+ installedFromLockFile = true;
47
+ let lockedDeps = Object.entries(lockFileJson.deps).map(
48
+ ([name, version]) => {
49
+ return parseDepValue(name, version);
50
+ },
51
+ );
52
+ let ok = await installDeps(lockedDeps, {
53
+ silent,
54
+ verbose,
55
+ threads,
56
+ ignoreTransitive: true,
57
+ });
58
+ if (!ok) {
59
+ return false;
60
+ }
61
+ }
62
+ }
53
63
 
64
+ if (!installedFromLockFile) {
65
+ let ok = await installDeps(allDeps, { silent, verbose, threads });
66
+ if (!ok) {
67
+ return false;
68
+ }
69
+ }
54
70
 
55
- let logUpdate = createLogUpdate(process.stdout, {showCursor: true});
71
+ let logUpdate = createLogUpdate(process.stdout, { showCursor: true });
56
72
 
57
- if (!silent && lock !== 'ignore') {
58
- logUpdate('Checking integrity...');
59
- }
73
+ if (!silent && lock !== "ignore") {
74
+ logUpdate("Checking integrity...");
75
+ }
60
76
 
61
- let installedPackages = await syncLocalCache({verbose});
77
+ let installedPackages = await syncLocalCache({ verbose });
62
78
 
63
- await Promise.all([
64
- notifyInstalls(installedPackages),
65
- checkIntegrity(lock),
66
- ]);
79
+ await Promise.all([notifyInstalls(installedPackages), checkIntegrity(lock)]);
67
80
 
68
- if (!silent) {
69
- logUpdate.clear();
70
- await checkRequirements();
71
- console.log(chalk.green('Packages installed'));
72
- }
81
+ if (!silent) {
82
+ logUpdate.clear();
83
+ await checkRequirements();
84
+ console.log(chalk.green("Packages installed"));
85
+ }
73
86
 
74
- return true;
75
- }
87
+ return true;
88
+ }
@@ -1,35 +1,50 @@
1
- import path from 'node:path';
2
- import {installFromGithub} from '../../vessel.js';
3
- import {installMopsDep} from './install-mops-dep.js';
4
- import {Dependency} from '../../types.js';
5
- import {installLocalDep} from './install-local-dep.js';
6
- import {getRootDir} from '../../mops.js';
1
+ import path from "node:path";
2
+ import { installFromGithub } from "../../vessel.js";
3
+ import { installMopsDep } from "./install-mops-dep.js";
4
+ import { Dependency } from "../../types.js";
5
+ import { installLocalDep } from "./install-local-dep.js";
6
+ import { getRootDir } from "../../mops.js";
7
7
 
8
8
  type InstallDepOptions = {
9
- verbose ?: boolean;
10
- silent ?: boolean;
11
- threads ?: number;
12
- ignoreTransitive ?: boolean;
9
+ verbose?: boolean;
10
+ silent?: boolean;
11
+ threads?: number;
12
+ ignoreTransitive?: boolean;
13
13
  };
14
14
 
15
15
  // install dependency
16
16
  // returns false if failed
17
- export async function installDep(dep : Dependency, {verbose, silent, threads, ignoreTransitive} : InstallDepOptions = {}, parentPkgPath ?: string) : Promise<boolean> {
18
- if (dep.repo) {
19
- await installFromGithub(dep.name, dep.repo, {silent, verbose, ignoreTransitive});
20
- return true;
21
- }
22
- else if (dep.path) {
23
- let depPath = dep.path;
24
- parentPkgPath = parentPkgPath || getRootDir();
25
- if (parentPkgPath) {
26
- depPath = path.resolve(parentPkgPath, dep.path);
27
- }
28
- return installLocalDep(dep.name, depPath, {silent, verbose, ignoreTransitive});
29
- }
30
- else if (dep.version) {
31
- return installMopsDep(dep.name, dep.version, {silent, verbose, threads, ignoreTransitive});
32
- }
17
+ export async function installDep(
18
+ dep: Dependency,
19
+ { verbose, silent, threads, ignoreTransitive }: InstallDepOptions = {},
20
+ parentPkgPath?: string,
21
+ ): Promise<boolean> {
22
+ if (dep.repo) {
23
+ await installFromGithub(dep.name, dep.repo, {
24
+ silent,
25
+ verbose,
26
+ ignoreTransitive,
27
+ });
28
+ return true;
29
+ } else if (dep.path) {
30
+ let depPath = dep.path;
31
+ parentPkgPath = parentPkgPath || getRootDir();
32
+ if (parentPkgPath) {
33
+ depPath = path.resolve(parentPkgPath, dep.path);
34
+ }
35
+ return installLocalDep(dep.name, depPath, {
36
+ silent,
37
+ verbose,
38
+ ignoreTransitive,
39
+ });
40
+ } else if (dep.version) {
41
+ return installMopsDep(dep.name, dep.version, {
42
+ silent,
43
+ verbose,
44
+ threads,
45
+ ignoreTransitive,
46
+ });
47
+ }
33
48
 
34
- return true;
35
- }
49
+ return true;
50
+ }
@@ -1,25 +1,33 @@
1
- import {Dependency} from '../../types.js';
2
- import {installDep} from './install-dep.js';
1
+ import { Dependency } from "../../types.js";
2
+ import { installDep } from "./install-dep.js";
3
3
 
4
4
  type InstallDepsOptions = {
5
- verbose ?: boolean;
6
- silent ?: boolean;
7
- threads ?: number;
8
- ignoreTransitive ?: boolean;
5
+ verbose?: boolean;
6
+ silent?: boolean;
7
+ threads?: number;
8
+ ignoreTransitive?: boolean;
9
9
  };
10
10
 
11
11
  // install all dependencies
12
12
  // returns actual installed dependencies
13
13
  // returns false if failed
14
- export async function installDeps(deps : Dependency[], {verbose, silent, threads, ignoreTransitive} : InstallDepsOptions = {}, parentPkgPath ?: string) : Promise<boolean> {
15
- let ok = true;
14
+ export async function installDeps(
15
+ deps: Dependency[],
16
+ { verbose, silent, threads, ignoreTransitive }: InstallDepsOptions = {},
17
+ parentPkgPath?: string,
18
+ ): Promise<boolean> {
19
+ let ok = true;
16
20
 
17
- for (const dep of deps) {
18
- let res = await installDep(dep, {verbose, silent, threads, ignoreTransitive}, parentPkgPath);
19
- if (!res) {
20
- ok = false;
21
- }
22
- }
21
+ for (const dep of deps) {
22
+ let res = await installDep(
23
+ dep,
24
+ { verbose, silent, threads, ignoreTransitive },
25
+ parentPkgPath,
26
+ );
27
+ if (!res) {
28
+ ok = false;
29
+ }
30
+ }
23
31
 
24
- return ok;
32
+ return ok;
25
33
  }
@@ -1,44 +1,52 @@
1
- import process from 'node:process';
2
- import path from 'node:path';
3
- import {existsSync} from 'node:fs';
4
- import {createLogUpdate} from 'log-update';
5
- import {getRootDir, readConfig} from '../../mops.js';
6
- import {installDeps} from './install-deps.js';
1
+ import process from "node:process";
2
+ import path from "node:path";
3
+ import { existsSync } from "node:fs";
4
+ import { createLogUpdate } from "log-update";
5
+ import { getRootDir, readConfig } from "../../mops.js";
6
+ import { installDeps } from "./install-deps.js";
7
7
 
8
8
  type InstallLocalDepOptions = {
9
- verbose ?: boolean;
10
- silent ?: boolean;
11
- ignoreTransitive ?: boolean;
9
+ verbose?: boolean;
10
+ silent?: boolean;
11
+ ignoreTransitive?: boolean;
12
12
  };
13
13
 
14
14
  // skip install and just find non-local dependencies to install
15
15
  // pkgPath should be relative to the current root dir or absolute
16
- export async function installLocalDep(pkg : string, pkgPath = '', {verbose, silent, ignoreTransitive} : InstallLocalDepOptions = {}) : Promise<boolean> {
17
- if (!silent) {
18
- let logUpdate = createLogUpdate(process.stdout, {showCursor: true});
19
- logUpdate(`Local dependency ${pkg} = "${pkgPath}"`);
16
+ export async function installLocalDep(
17
+ pkg: string,
18
+ pkgPath = "",
19
+ { verbose, silent, ignoreTransitive }: InstallLocalDepOptions = {},
20
+ ): Promise<boolean> {
21
+ if (!silent) {
22
+ let logUpdate = createLogUpdate(process.stdout, { showCursor: true });
23
+ logUpdate(`Local dependency ${pkg} = "${pkgPath}"`);
20
24
 
21
- if (verbose) {
22
- silent || logUpdate.done();
23
- }
24
- else {
25
- logUpdate.clear();
26
- }
27
- }
25
+ if (verbose) {
26
+ silent || logUpdate.done();
27
+ } else {
28
+ logUpdate.clear();
29
+ }
30
+ }
28
31
 
29
- // install dependencies
30
- if (!ignoreTransitive) {
31
- let dir = path.resolve(getRootDir(), pkgPath).replaceAll('{MOPS_ENV}', process.env.MOPS_ENV || 'local');
32
- let mopsToml = path.join(dir, 'mops.toml');
32
+ // install dependencies
33
+ if (!ignoreTransitive) {
34
+ let dir = path
35
+ .resolve(getRootDir(), pkgPath)
36
+ .replaceAll("{MOPS_ENV}", process.env.MOPS_ENV || "local");
37
+ let mopsToml = path.join(dir, "mops.toml");
33
38
 
34
- if (!existsSync(mopsToml)) {
35
- return true;
36
- }
39
+ if (!existsSync(mopsToml)) {
40
+ return true;
41
+ }
37
42
 
38
- let config = readConfig(mopsToml);
39
- return installDeps(Object.values(config.dependencies || {}), {silent, verbose}, pkgPath);
40
- }
41
- else {
42
- return true;
43
- }
44
- }
43
+ let config = readConfig(mopsToml);
44
+ return installDeps(
45
+ Object.values(config.dependencies || {}),
46
+ { silent, verbose },
47
+ pkgPath,
48
+ );
49
+ } else {
50
+ return true;
51
+ }
52
+ }
@@ -1,127 +1,158 @@
1
- import process from 'node:process';
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import {Buffer} from 'node:buffer';
5
- import {createLogUpdate} from 'log-update';
6
- import chalk from 'chalk';
7
- import {deleteSync} from 'del';
8
- import {checkConfigFile, progressBar, readConfig} from '../../mops.js';
9
- import {getHighestVersion} from '../../api/getHighestVersion.js';
10
- import {storageActor} from '../../api/actors.js';
11
- import {parallel} from '../../parallel.js';
12
- import {getDepCacheDir, getMopsDepCacheName, isDepCached} from '../../cache.js';
13
- import {downloadFile, getPackageFilesInfo} from '../../api/downloadPackageFiles.js';
14
- import {installDeps} from './install-deps.js';
15
- import {getDepName} from '../../helpers/get-dep-name.js';
1
+ import process from "node:process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { Buffer } from "node:buffer";
5
+ import { createLogUpdate } from "log-update";
6
+ import chalk from "chalk";
7
+ import { deleteSync } from "del";
8
+ import { checkConfigFile, progressBar, readConfig } from "../../mops.js";
9
+ import { getHighestVersion } from "../../api/getHighestVersion.js";
10
+ import { storageActor } from "../../api/actors.js";
11
+ import { parallel } from "../../parallel.js";
12
+ import {
13
+ getDepCacheDir,
14
+ getMopsDepCacheName,
15
+ isDepCached,
16
+ } from "../../cache.js";
17
+ import {
18
+ downloadFile,
19
+ getPackageFilesInfo,
20
+ } from "../../api/downloadPackageFiles.js";
21
+ import { installDeps } from "./install-deps.js";
22
+ import { getDepName } from "../../helpers/get-dep-name.js";
16
23
 
17
24
  type InstallMopsDepOptions = {
18
- verbose ?: boolean;
19
- silent ?: boolean;
20
- dep ?: boolean;
21
- threads ?: number;
22
- ignoreTransitive ?: boolean;
25
+ verbose?: boolean;
26
+ silent?: boolean;
27
+ dep?: boolean;
28
+ threads?: number;
29
+ ignoreTransitive?: boolean;
23
30
  };
24
31
 
25
- export async function installMopsDep(pkg : string, version = '', {verbose, silent, dep, threads, ignoreTransitive} : InstallMopsDepOptions = {}) : Promise<boolean> {
26
- threads = threads || 12;
27
- let depName = getDepName(pkg);
28
-
29
- if (!checkConfigFile()) {
30
- return false;
31
- }
32
- let logUpdate = createLogUpdate(process.stdout, {showCursor: true});
33
-
34
- // progress
35
- let total = Infinity;
36
- let step = 0;
37
- let progress = () => {
38
- step++;
39
- silent || logUpdate(`${dep ? 'Dependency' : 'Installing'} ${depName}@${version} ${progressBar(step, total)}`);
40
- };
41
- progress();
42
-
43
- if (!version) {
44
- let versionRes = await getHighestVersion(depName);
45
- if ('err' in versionRes) {
46
- console.log(chalk.red('Error: ') + versionRes.err);
47
- return false;
48
- }
49
- version = versionRes.ok;
50
- }
51
-
52
- let cacheName = getMopsDepCacheName(depName, version);
53
- let cacheDir = getDepCacheDir(cacheName);
54
-
55
- // global cache hit
56
- if (isDepCached(cacheName)) {
57
- silent || logUpdate(`${dep ? 'Dependency' : 'Installing'} ${depName}@${version} (cache)`);
58
- }
59
- // download
60
- else {
61
- // GitHub Actions fails with "fetch failed" if there are multiple concurrent actions
62
- if (process.env.GITHUB_ENV) {
63
- threads = 4;
64
- }
65
-
66
- try {
67
- let {storageId, fileIds} = await getPackageFilesInfo(depName, version);
68
-
69
- total = fileIds.length + 2;
70
-
71
- let filesData = new Map;
72
- let storage = await storageActor(storageId);
73
-
74
- await parallel(threads, fileIds, async (fileId : string) => {
75
- let {path, data} = await downloadFile(storage, fileId);
76
- filesData.set(path, data);
77
- progress();
78
- });
79
-
80
- let onSigInt = () => {
81
- deleteSync([cacheDir], {force: true});
82
- process.exit();
83
- };
84
- process.on('SIGINT', onSigInt);
85
-
86
- // write files to global cache
87
- try {
88
- await Promise.all(Array.from(filesData.entries()).map(async ([filePath, data]) => {
89
- await fs.promises.mkdir(path.join(cacheDir, path.dirname(filePath)), {recursive: true});
90
- await fs.promises.writeFile(path.join(cacheDir, filePath), Buffer.from(data));
91
- }));
92
- }
93
- catch (err) {
94
- console.error(chalk.red('Error: ') + err);
95
- deleteSync([cacheDir], {force: true});
96
- return false;
97
- }
98
-
99
- process.off('SIGINT', onSigInt);
100
- }
101
- catch (err) {
102
- console.error(chalk.red('Error: ') + err);
103
- return false;
104
- }
105
-
106
- progress();
107
- }
108
-
109
- if (verbose) {
110
- silent || logUpdate.done();
111
- }
112
- else {
113
- logUpdate.clear();
114
- }
115
-
116
- // install dependencies
117
- if (!ignoreTransitive) {
118
- let config = readConfig(path.join(cacheDir, 'mops.toml'));
119
- let res = await installDeps(Object.values(config.dependencies || {}), {silent, verbose});
120
-
121
- if (!res) {
122
- return false;
123
- }
124
- }
125
-
126
- return true;
127
- }
32
+ export async function installMopsDep(
33
+ pkg: string,
34
+ version = "",
35
+ {
36
+ verbose,
37
+ silent,
38
+ dep,
39
+ threads,
40
+ ignoreTransitive,
41
+ }: InstallMopsDepOptions = {},
42
+ ): Promise<boolean> {
43
+ threads = threads || 12;
44
+ let depName = getDepName(pkg);
45
+
46
+ if (!checkConfigFile()) {
47
+ return false;
48
+ }
49
+ let logUpdate = createLogUpdate(process.stdout, { showCursor: true });
50
+
51
+ // progress
52
+ let total = Infinity;
53
+ let step = 0;
54
+ let progress = () => {
55
+ step++;
56
+ silent ||
57
+ logUpdate(
58
+ `${dep ? "Dependency" : "Installing"} ${depName}@${version} ${progressBar(step, total)}`,
59
+ );
60
+ };
61
+ progress();
62
+
63
+ if (!version) {
64
+ let versionRes = await getHighestVersion(depName);
65
+ if ("err" in versionRes) {
66
+ console.log(chalk.red("Error: ") + versionRes.err);
67
+ return false;
68
+ }
69
+ version = versionRes.ok;
70
+ }
71
+
72
+ let cacheName = getMopsDepCacheName(depName, version);
73
+ let cacheDir = getDepCacheDir(cacheName);
74
+
75
+ // global cache hit
76
+ if (isDepCached(cacheName)) {
77
+ silent ||
78
+ logUpdate(
79
+ `${dep ? "Dependency" : "Installing"} ${depName}@${version} (cache)`,
80
+ );
81
+ }
82
+ // download
83
+ else {
84
+ // GitHub Actions fails with "fetch failed" if there are multiple concurrent actions
85
+ if (process.env.GITHUB_ENV) {
86
+ threads = 4;
87
+ }
88
+
89
+ try {
90
+ let { storageId, fileIds } = await getPackageFilesInfo(depName, version);
91
+
92
+ total = fileIds.length + 2;
93
+
94
+ let filesData = new Map();
95
+ let storage = await storageActor(storageId);
96
+
97
+ await parallel(threads, fileIds, async (fileId: string) => {
98
+ let { path, data } = await downloadFile(storage, fileId);
99
+ filesData.set(path, data);
100
+ progress();
101
+ });
102
+
103
+ let onSigInt = () => {
104
+ deleteSync([cacheDir], { force: true });
105
+ process.exit();
106
+ };
107
+ process.on("SIGINT", onSigInt);
108
+
109
+ // write files to global cache
110
+ try {
111
+ await Promise.all(
112
+ Array.from(filesData.entries()).map(async ([filePath, data]) => {
113
+ await fs.promises.mkdir(
114
+ path.join(cacheDir, path.dirname(filePath)),
115
+ { recursive: true },
116
+ );
117
+ await fs.promises.writeFile(
118
+ path.join(cacheDir, filePath),
119
+ Buffer.from(data),
120
+ );
121
+ }),
122
+ );
123
+ } catch (err) {
124
+ console.error(chalk.red("Error: ") + err);
125
+ deleteSync([cacheDir], { force: true });
126
+ return false;
127
+ }
128
+
129
+ process.off("SIGINT", onSigInt);
130
+ } catch (err) {
131
+ console.error(chalk.red("Error: ") + err);
132
+ return false;
133
+ }
134
+
135
+ progress();
136
+ }
137
+
138
+ if (verbose) {
139
+ silent || logUpdate.done();
140
+ } else {
141
+ logUpdate.clear();
142
+ }
143
+
144
+ // install dependencies
145
+ if (!ignoreTransitive) {
146
+ let config = readConfig(path.join(cacheDir, "mops.toml"));
147
+ let res = await installDeps(Object.values(config.dependencies || {}), {
148
+ silent,
149
+ verbose,
150
+ });
151
+
152
+ if (!res) {
153
+ return false;
154
+ }
155
+ }
156
+
157
+ return true;
158
+ }