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,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
+ }