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,39 +1,39 @@
1
- import process from 'node:process';
2
- import { execSync } from 'node:child_process';
3
- import path from 'node:path';
4
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
5
- import chalk from 'chalk';
6
- import prompts from 'prompts';
7
- import { checkApiCompatibility, writeConfig } from '../mops.js';
8
- import { mainActor } from '../api/actors.js';
9
- import { installAll } from './install/install-all.js';
10
- import { readVesselConfig } from '../vessel.js';
11
- import { template } from './template.js';
12
- import { kebabCase } from 'change-case';
1
+ import process from "node:process";
2
+ import { execSync } from "node:child_process";
3
+ import path from "node:path";
4
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
5
+ import chalk from "chalk";
6
+ import prompts from "prompts";
7
+ import { checkApiCompatibility, writeConfig } from "../mops.js";
8
+ import { mainActor } from "../api/actors.js";
9
+ import { installAll } from "./install/install-all.js";
10
+ import { readVesselConfig } from "../vessel.js";
11
+ import { template } from "./template.js";
12
+ import { kebabCase } from "change-case";
13
13
  export async function init({ yes = false } = {}) {
14
- let configFile = path.join(process.cwd(), 'mops.toml');
14
+ let configFile = path.join(process.cwd(), "mops.toml");
15
15
  let exists = existsSync(configFile);
16
16
  if (exists) {
17
- console.log(chalk.yellow('mops.toml already exists'));
17
+ console.log(chalk.yellow("mops.toml already exists"));
18
18
  return;
19
19
  }
20
- console.log('Initializing...');
20
+ console.log("Initializing...");
21
21
  let config = {};
22
22
  if (yes) {
23
23
  await applyInit({
24
- type: 'project',
24
+ type: "project",
25
25
  config,
26
26
  setupWorkflow: true,
27
27
  addTest: false,
28
- copyrightOwner: '',
28
+ copyrightOwner: "",
29
29
  });
30
30
  return;
31
31
  }
32
32
  // migrate from vessel
33
- let vesselFile = path.join(process.cwd(), 'vessel.dhall');
34
- let vesselConfig = { dependencies: [], 'dev-dependencies': [] };
33
+ let vesselFile = path.join(process.cwd(), "vessel.dhall");
34
+ let vesselConfig = { dependencies: [], "dev-dependencies": [] };
35
35
  if (existsSync(vesselFile)) {
36
- console.log('Reading vessel.dhall file');
36
+ console.log("Reading vessel.dhall file");
37
37
  let res = await readVesselConfig(process.cwd(), { cache: false });
38
38
  if (res) {
39
39
  vesselConfig = { ...res };
@@ -42,7 +42,7 @@ export async function init({ yes = false } = {}) {
42
42
  if (vesselConfig.dependencies) {
43
43
  let deps = {};
44
44
  deps = {};
45
- for (const dep of (vesselConfig.dependencies || [])) {
45
+ for (const dep of vesselConfig.dependencies || []) {
46
46
  deps[dep.name] = dep;
47
47
  }
48
48
  if (Object.keys(deps).length) {
@@ -51,88 +51,96 @@ export async function init({ yes = false } = {}) {
51
51
  }
52
52
  let promptsConfig = {
53
53
  onCancel() {
54
- console.log('aborted');
54
+ console.log("aborted");
55
55
  process.exit(0);
56
56
  },
57
57
  };
58
58
  // type
59
59
  let { type } = await prompts({
60
- type: 'select',
61
- name: 'type',
62
- message: 'Select type:',
60
+ type: "select",
61
+ name: "type",
62
+ message: "Select type:",
63
63
  choices: [
64
- { title: `Project ${chalk.dim('(I just want to use mops packages in my project)')}`, value: 'project' },
65
- { title: `Package ${chalk.dim('(I plan to publish this package on mops)')}`, value: 'package' },
64
+ {
65
+ title: `Project ${chalk.dim("(I just want to use mops packages in my project)")}`,
66
+ value: "project",
67
+ },
68
+ {
69
+ title: `Package ${chalk.dim("(I plan to publish this package on mops)")}`,
70
+ value: "package",
71
+ },
66
72
  ],
67
73
  }, promptsConfig);
68
74
  let addTest = false;
69
- let copyrightOwner = '';
75
+ let copyrightOwner = "";
70
76
  // package details
71
- if (type === 'package') {
77
+ if (type === "package") {
72
78
  let res = await prompts([
73
79
  {
74
- type: 'text',
75
- name: 'name',
76
- message: 'Enter package name:',
80
+ type: "text",
81
+ name: "name",
82
+ message: "Enter package name:",
77
83
  initial: kebabCase(path.basename(process.cwd())),
78
84
  },
79
85
  {
80
- type: 'text',
81
- name: 'description',
82
- message: 'Enter package description:',
83
- initial: '',
86
+ type: "text",
87
+ name: "description",
88
+ message: "Enter package description:",
89
+ initial: "",
84
90
  },
85
91
  {
86
- type: 'text',
87
- name: 'repository',
88
- message: 'Enter package repository url:',
89
- initial: '',
92
+ type: "text",
93
+ name: "repository",
94
+ message: "Enter package repository url:",
95
+ initial: "",
90
96
  },
91
97
  {
92
- type: 'text',
93
- name: 'keywords',
94
- message: 'Enter keywords separated by spaces:',
95
- initial: '',
98
+ type: "text",
99
+ name: "keywords",
100
+ message: "Enter keywords separated by spaces:",
101
+ initial: "",
96
102
  },
97
103
  {
98
- type: 'select',
99
- name: 'license',
100
- message: 'Choose a license:',
104
+ type: "select",
105
+ name: "license",
106
+ message: "Choose a license:",
101
107
  choices: [
102
- { title: 'MIT', value: 'MIT' },
103
- { title: 'Apache-2.0', value: 'Apache-2.0' },
108
+ { title: "MIT", value: "MIT" },
109
+ { title: "Apache-2.0", value: "Apache-2.0" },
104
110
  ],
105
111
  initial: 0,
106
112
  },
107
113
  {
108
- type: 'text',
109
- name: 'copyrightOwner',
110
- message: 'Enter license copyright owner:',
111
- initial: '',
114
+ type: "text",
115
+ name: "copyrightOwner",
116
+ message: "Enter license copyright owner:",
117
+ initial: "",
112
118
  },
113
119
  {
114
- type: 'confirm',
115
- name: 'addTest',
116
- message: `Add example test file? ${chalk.dim('(test/lib.test.mo)')}`,
120
+ type: "confirm",
121
+ name: "addTest",
122
+ message: `Add example test file? ${chalk.dim("(test/lib.test.mo)")}`,
117
123
  initial: true,
118
124
  },
119
125
  ], promptsConfig);
120
126
  config.package = {
121
- name: kebabCase((res.name || '').trim()),
122
- version: '1.0.0',
123
- description: (res.description || '').trim(),
124
- repository: (res.repository || '').trim(),
125
- keywords: [...new Set(res.keywords.split(' ').filter(Boolean))],
126
- license: (res.license || '').trim(),
127
+ name: kebabCase((res.name || "").trim()),
128
+ version: "1.0.0",
129
+ description: (res.description || "").trim(),
130
+ repository: (res.repository || "").trim(),
131
+ keywords: [
132
+ ...new Set(res.keywords.split(" ").filter(Boolean)),
133
+ ],
134
+ license: (res.license || "").trim(),
127
135
  };
128
136
  addTest = res.addTest;
129
137
  copyrightOwner = res.copyrightOwner;
130
138
  }
131
139
  // GitHub workflow
132
140
  let { setupWorkflow } = await prompts({
133
- type: 'confirm',
134
- name: 'setupWorkflow',
135
- message: `Setup GitHub workflow? ${chalk.dim('(run `mops test` on push)')}`,
141
+ type: "confirm",
142
+ name: "setupWorkflow",
143
+ message: `Setup GitHub workflow? ${chalk.dim("(run `mops test` on push)")}`,
136
144
  initial: true,
137
145
  }, promptsConfig);
138
146
  await applyInit({
@@ -143,9 +151,9 @@ export async function init({ yes = false } = {}) {
143
151
  copyrightOwner,
144
152
  });
145
153
  }
146
- async function applyInit({ type, config, setupWorkflow, addTest, copyrightOwner }) {
154
+ async function applyInit({ type, config, setupWorkflow, addTest, copyrightOwner, }) {
147
155
  // set packtool in dfx.json
148
- let dfxJson = path.resolve(process.cwd(), 'dfx.json');
156
+ let dfxJson = path.resolve(process.cwd(), "dfx.json");
149
157
  let dfxJsonData;
150
158
  if (existsSync(dfxJson)) {
151
159
  let dfxJsonText = readFileSync(dfxJson).toString();
@@ -153,30 +161,30 @@ async function applyInit({ type, config, setupWorkflow, addTest, copyrightOwner
153
161
  dfxJsonData = JSON.parse(dfxJsonText);
154
162
  }
155
163
  catch (err) {
156
- console.log(chalk.yellow('Failed to parse dfx.json'));
164
+ console.log(chalk.yellow("Failed to parse dfx.json"));
157
165
  }
158
166
  if (dfxJsonData) {
159
- console.log('Setting packtool in dfx.json...');
167
+ console.log("Setting packtool in dfx.json...");
160
168
  dfxJsonData.defaults = dfxJsonData.defaults || {};
161
169
  dfxJsonData.defaults.build = dfxJsonData.defaults.build || {};
162
- if (dfxJsonData.defaults.build.packtool !== 'mops sources') {
163
- dfxJsonData.defaults.build.packtool = 'mops sources';
164
- let indent = dfxJsonText.match(/([ \t]+)"/)?.[1] || ' ';
165
- writeFileSync(path.join(process.cwd(), 'dfx.json'), JSON.stringify(dfxJsonData, null, indent));
170
+ if (dfxJsonData.defaults.build.packtool !== "mops sources") {
171
+ dfxJsonData.defaults.build.packtool = "mops sources";
172
+ let indent = dfxJsonText.match(/([ \t]+)"/)?.[1] || " ";
173
+ writeFileSync(path.join(process.cwd(), "dfx.json"), JSON.stringify(dfxJsonData, null, indent));
166
174
  console.log(chalk.green('packtool set to "mops sources"'));
167
175
  }
168
176
  }
169
177
  }
170
178
  // get default packages
171
- if (type === 'project') {
179
+ if (type === "project") {
172
180
  let compatible = await checkApiCompatibility();
173
181
  if (!compatible) {
174
182
  return;
175
183
  }
176
- let dfxVersion = dfxJsonData?.dfx || '';
184
+ let dfxVersion = dfxJsonData?.dfx || "";
177
185
  if (!dfxVersion) {
178
186
  try {
179
- let res = execSync('dfx --version').toString();
187
+ let res = execSync("dfx --version").toString();
180
188
  let match = res.match(/\d+\.\d+\.\d+/);
181
189
  if (match) {
182
190
  dfxVersion = match[0];
@@ -195,43 +203,45 @@ async function applyInit({ type, config, setupWorkflow, addTest, copyrightOwner
195
203
  }
196
204
  }
197
205
  // save config
198
- let configFile = path.join(process.cwd(), 'mops.toml');
206
+ let configFile = path.join(process.cwd(), "mops.toml");
199
207
  writeConfig(config, configFile);
200
- console.log(chalk.green('Created'), 'mops.toml');
208
+ console.log(chalk.green("Created"), "mops.toml");
201
209
  // add src/lib.mo
202
- if (type === 'package' && !existsSync(path.join(process.cwd(), 'src'))) {
203
- await template('lib.mo');
210
+ if (type === "package" && !existsSync(path.join(process.cwd(), "src"))) {
211
+ await template("lib.mo");
204
212
  }
205
213
  // add src/lib.test.mo
206
- if (addTest && !existsSync(path.join(process.cwd(), 'test'))) {
207
- await template('lib.test.mo');
214
+ if (addTest && !existsSync(path.join(process.cwd(), "test"))) {
215
+ await template("lib.test.mo");
208
216
  }
209
217
  // add license
210
218
  if (config.package?.license) {
211
219
  await template(`license:${config.package.license}`, { copyrightOwner });
212
220
  }
213
221
  // add readme
214
- if (type === 'package') {
215
- await template('readme');
222
+ if (type === "package") {
223
+ await template("readme");
216
224
  }
217
225
  // add GitHub workflow
218
226
  if (setupWorkflow) {
219
- await template('github-workflow:mops-test');
227
+ await template("github-workflow:mops-test");
220
228
  }
221
229
  // add .mops to .gitignore
222
230
  {
223
- let gitignore = path.join(process.cwd(), '.gitignore');
224
- let gitignoreData = existsSync(gitignore) ? readFileSync(gitignore).toString() : '';
225
- let lf = gitignoreData.endsWith('\n') ? '\n' : '';
226
- if (!gitignoreData.includes('.mops')) {
231
+ let gitignore = path.join(process.cwd(), ".gitignore");
232
+ let gitignoreData = existsSync(gitignore)
233
+ ? readFileSync(gitignore).toString()
234
+ : "";
235
+ let lf = gitignoreData.endsWith("\n") ? "\n" : "";
236
+ if (!gitignoreData.includes(".mops")) {
227
237
  writeFileSync(gitignore, `${gitignoreData}\n.mops${lf}`.trimStart());
228
- console.log(chalk.green('Added'), '.mops to .gitignore');
238
+ console.log(chalk.green("Added"), ".mops to .gitignore");
229
239
  }
230
240
  }
231
241
  // install deps
232
242
  if (Object.keys(config.dependencies || {}).length) {
233
- console.log('Installing dependencies...');
243
+ console.log("Installing dependencies...");
234
244
  await installAll({ verbose: true });
235
245
  }
236
- console.log(chalk.green('Done!'));
246
+ console.log(chalk.green("Done!"));
237
247
  }
@@ -1,9 +1,9 @@
1
1
  type InstallAllOptions = {
2
2
  verbose?: boolean;
3
3
  silent?: boolean;
4
- lock?: 'check' | 'update' | 'ignore';
4
+ lock?: "check" | "update" | "ignore";
5
5
  threads?: number;
6
6
  installFromLockFile?: boolean;
7
7
  };
8
- export declare function installAll({ verbose, silent, threads, lock, installFromLockFile }?: InstallAllOptions): Promise<boolean>;
8
+ export declare function installAll({ verbose, silent, threads, lock, installFromLockFile, }?: InstallAllOptions): Promise<boolean>;
9
9
  export {};
@@ -1,31 +1,36 @@
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';
10
- export async function installAll({ verbose = false, silent = false, threads, lock, installFromLockFile } = {}) {
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";
10
+ export async function installAll({ verbose = false, silent = false, threads, lock, installFromLockFile, } = {}) {
11
11
  if (!checkConfigFile()) {
12
12
  return false;
13
13
  }
14
14
  let config = readConfig();
15
15
  let deps = Object.values(config.dependencies || {});
16
- let devDeps = Object.values(config['dev-dependencies'] || {});
16
+ let devDeps = Object.values(config["dev-dependencies"] || {});
17
17
  let allDeps = [...deps, ...devDeps];
18
18
  let installedFromLockFile = false;
19
19
  // install from lock file to avoid installing intermediate dependencies
20
- if ((lock !== 'ignore' || installFromLockFile) && checkLockFileLight()) {
20
+ if ((lock !== "ignore" || installFromLockFile) && checkLockFileLight()) {
21
21
  let lockFileJson = readLockFile();
22
22
  if (lockFileJson && lockFileJson.version === 3) {
23
- verbose && console.log('Installing from lock file...');
23
+ verbose && console.log("Installing from lock file...");
24
24
  installedFromLockFile = true;
25
25
  let lockedDeps = Object.entries(lockFileJson.deps).map(([name, version]) => {
26
26
  return parseDepValue(name, version);
27
27
  });
28
- let ok = await installDeps(lockedDeps, { silent, verbose, threads, ignoreTransitive: true });
28
+ let ok = await installDeps(lockedDeps, {
29
+ silent,
30
+ verbose,
31
+ threads,
32
+ ignoreTransitive: true,
33
+ });
29
34
  if (!ok) {
30
35
  return false;
31
36
  }
@@ -38,18 +43,15 @@ export async function installAll({ verbose = false, silent = false, threads, loc
38
43
  }
39
44
  }
40
45
  let logUpdate = createLogUpdate(process.stdout, { showCursor: true });
41
- if (!silent && lock !== 'ignore') {
42
- logUpdate('Checking integrity...');
46
+ if (!silent && lock !== "ignore") {
47
+ logUpdate("Checking integrity...");
43
48
  }
44
49
  let installedPackages = await syncLocalCache({ verbose });
45
- await Promise.all([
46
- notifyInstalls(installedPackages),
47
- checkIntegrity(lock),
48
- ]);
50
+ await Promise.all([notifyInstalls(installedPackages), checkIntegrity(lock)]);
49
51
  if (!silent) {
50
52
  logUpdate.clear();
51
53
  await checkRequirements();
52
- console.log(chalk.green('Packages installed'));
54
+ console.log(chalk.green("Packages installed"));
53
55
  }
54
56
  return true;
55
57
  }
@@ -1,4 +1,4 @@
1
- import { Dependency } from '../../types.js';
1
+ import { Dependency } from "../../types.js";
2
2
  type InstallDepOptions = {
3
3
  verbose?: boolean;
4
4
  silent?: boolean;
@@ -1,13 +1,17 @@
1
- import path from 'node:path';
2
- import { installFromGithub } from '../../vessel.js';
3
- import { installMopsDep } from './install-mops-dep.js';
4
- import { installLocalDep } from './install-local-dep.js';
5
- 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 { installLocalDep } from "./install-local-dep.js";
5
+ import { getRootDir } from "../../mops.js";
6
6
  // install dependency
7
7
  // returns false if failed
8
8
  export async function installDep(dep, { verbose, silent, threads, ignoreTransitive } = {}, parentPkgPath) {
9
9
  if (dep.repo) {
10
- await installFromGithub(dep.name, dep.repo, { silent, verbose, ignoreTransitive });
10
+ await installFromGithub(dep.name, dep.repo, {
11
+ silent,
12
+ verbose,
13
+ ignoreTransitive,
14
+ });
11
15
  return true;
12
16
  }
13
17
  else if (dep.path) {
@@ -16,10 +20,19 @@ export async function installDep(dep, { verbose, silent, threads, ignoreTransiti
16
20
  if (parentPkgPath) {
17
21
  depPath = path.resolve(parentPkgPath, dep.path);
18
22
  }
19
- return installLocalDep(dep.name, depPath, { silent, verbose, ignoreTransitive });
23
+ return installLocalDep(dep.name, depPath, {
24
+ silent,
25
+ verbose,
26
+ ignoreTransitive,
27
+ });
20
28
  }
21
29
  else if (dep.version) {
22
- return installMopsDep(dep.name, dep.version, { silent, verbose, threads, ignoreTransitive });
30
+ return installMopsDep(dep.name, dep.version, {
31
+ silent,
32
+ verbose,
33
+ threads,
34
+ ignoreTransitive,
35
+ });
23
36
  }
24
37
  return true;
25
38
  }
@@ -1,4 +1,4 @@
1
- import { Dependency } from '../../types.js';
1
+ import { Dependency } from "../../types.js";
2
2
  type InstallDepsOptions = {
3
3
  verbose?: boolean;
4
4
  silent?: boolean;
@@ -1,4 +1,4 @@
1
- import { installDep } from './install-dep.js';
1
+ import { installDep } from "./install-dep.js";
2
2
  // install all dependencies
3
3
  // returns actual installed dependencies
4
4
  // returns false if failed
@@ -1,12 +1,12 @@
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
  // skip install and just find non-local dependencies to install
8
8
  // pkgPath should be relative to the current root dir or absolute
9
- export async function installLocalDep(pkg, pkgPath = '', { verbose, silent, ignoreTransitive } = {}) {
9
+ export async function installLocalDep(pkg, pkgPath = "", { verbose, silent, ignoreTransitive } = {}) {
10
10
  if (!silent) {
11
11
  let logUpdate = createLogUpdate(process.stdout, { showCursor: true });
12
12
  logUpdate(`Local dependency ${pkg} = "${pkgPath}"`);
@@ -19,8 +19,10 @@ export async function installLocalDep(pkg, pkgPath = '', { verbose, silent, igno
19
19
  }
20
20
  // install dependencies
21
21
  if (!ignoreTransitive) {
22
- let dir = path.resolve(getRootDir(), pkgPath).replaceAll('{MOPS_ENV}', process.env.MOPS_ENV || 'local');
23
- let mopsToml = path.join(dir, 'mops.toml');
22
+ let dir = path
23
+ .resolve(getRootDir(), pkgPath)
24
+ .replaceAll("{MOPS_ENV}", process.env.MOPS_ENV || "local");
25
+ let mopsToml = path.join(dir, "mops.toml");
24
26
  if (!existsSync(mopsToml)) {
25
27
  return true;
26
28
  }
@@ -5,5 +5,5 @@ type InstallMopsDepOptions = {
5
5
  threads?: number;
6
6
  ignoreTransitive?: boolean;
7
7
  };
8
- export declare function installMopsDep(pkg: string, version?: string, { verbose, silent, dep, threads, ignoreTransitive }?: InstallMopsDepOptions): Promise<boolean>;
8
+ export declare function installMopsDep(pkg: string, version?: string, { verbose, silent, dep, threads, ignoreTransitive, }?: InstallMopsDepOptions): Promise<boolean>;
9
9
  export {};
@@ -1,19 +1,19 @@
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';
16
- export async function installMopsDep(pkg, version = '', { verbose, silent, dep, threads, ignoreTransitive } = {}) {
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";
16
+ export async function installMopsDep(pkg, version = "", { verbose, silent, dep, threads, ignoreTransitive, } = {}) {
17
17
  threads = threads || 12;
18
18
  let depName = getDepName(pkg);
19
19
  if (!checkConfigFile()) {
@@ -25,13 +25,14 @@ export async function installMopsDep(pkg, version = '', { verbose, silent, dep,
25
25
  let step = 0;
26
26
  let progress = () => {
27
27
  step++;
28
- silent || logUpdate(`${dep ? 'Dependency' : 'Installing'} ${depName}@${version} ${progressBar(step, total)}`);
28
+ silent ||
29
+ logUpdate(`${dep ? "Dependency" : "Installing"} ${depName}@${version} ${progressBar(step, total)}`);
29
30
  };
30
31
  progress();
31
32
  if (!version) {
32
33
  let versionRes = await getHighestVersion(depName);
33
- if ('err' in versionRes) {
34
- console.log(chalk.red('Error: ') + versionRes.err);
34
+ if ("err" in versionRes) {
35
+ console.log(chalk.red("Error: ") + versionRes.err);
35
36
  return false;
36
37
  }
37
38
  version = versionRes.ok;
@@ -40,7 +41,8 @@ export async function installMopsDep(pkg, version = '', { verbose, silent, dep,
40
41
  let cacheDir = getDepCacheDir(cacheName);
41
42
  // global cache hit
42
43
  if (isDepCached(cacheName)) {
43
- silent || logUpdate(`${dep ? 'Dependency' : 'Installing'} ${depName}@${version} (cache)`);
44
+ silent ||
45
+ logUpdate(`${dep ? "Dependency" : "Installing"} ${depName}@${version} (cache)`);
44
46
  }
45
47
  // download
46
48
  else {
@@ -51,7 +53,7 @@ export async function installMopsDep(pkg, version = '', { verbose, silent, dep,
51
53
  try {
52
54
  let { storageId, fileIds } = await getPackageFilesInfo(depName, version);
53
55
  total = fileIds.length + 2;
54
- let filesData = new Map;
56
+ let filesData = new Map();
55
57
  let storage = await storageActor(storageId);
56
58
  await parallel(threads, fileIds, async (fileId) => {
57
59
  let { path, data } = await downloadFile(storage, fileId);
@@ -62,7 +64,7 @@ export async function installMopsDep(pkg, version = '', { verbose, silent, dep,
62
64
  deleteSync([cacheDir], { force: true });
63
65
  process.exit();
64
66
  };
65
- process.on('SIGINT', onSigInt);
67
+ process.on("SIGINT", onSigInt);
66
68
  // write files to global cache
67
69
  try {
68
70
  await Promise.all(Array.from(filesData.entries()).map(async ([filePath, data]) => {
@@ -71,14 +73,14 @@ export async function installMopsDep(pkg, version = '', { verbose, silent, dep,
71
73
  }));
72
74
  }
73
75
  catch (err) {
74
- console.error(chalk.red('Error: ') + err);
76
+ console.error(chalk.red("Error: ") + err);
75
77
  deleteSync([cacheDir], { force: true });
76
78
  return false;
77
79
  }
78
- process.off('SIGINT', onSigInt);
80
+ process.off("SIGINT", onSigInt);
79
81
  }
80
82
  catch (err) {
81
- console.error(chalk.red('Error: ') + err);
83
+ console.error(chalk.red("Error: ") + err);
82
84
  return false;
83
85
  }
84
86
  progress();
@@ -91,8 +93,11 @@ export async function installMopsDep(pkg, version = '', { verbose, silent, dep,
91
93
  }
92
94
  // install dependencies
93
95
  if (!ignoreTransitive) {
94
- let config = readConfig(path.join(cacheDir, 'mops.toml'));
95
- let res = await installDeps(Object.values(config.dependencies || {}), { silent, verbose });
96
+ let config = readConfig(path.join(cacheDir, "mops.toml"));
97
+ let res = await installDeps(Object.values(config.dependencies || {}), {
98
+ silent,
99
+ verbose,
100
+ });
96
101
  if (!res) {
97
102
  return false;
98
103
  }