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
package/commands/add.ts CHANGED
@@ -1,134 +1,147 @@
1
- import process from 'node:process';
2
- import path from 'node:path';
3
- import chalk from 'chalk';
4
- import {createLogUpdate} from 'log-update';
5
- import {checkConfigFile, getGithubCommit, parseGithubURL, readConfig, writeConfig} from '../mops.js';
6
- import {getHighestVersion} from '../api/getHighestVersion.js';
7
- import {installMopsDep} from './install/install-mops-dep.js';
8
- import {installFromGithub} from '../vessel.js';
9
- import {checkIntegrity} from '../integrity.js';
10
- import {checkRequirements} from '../check-requirements.js';
11
- import {syncLocalCache} from './install/sync-local-cache.js';
12
- import {notifyInstalls} from '../notify-installs.js';
13
- import {resolvePackages} from '../resolve-packages.js';
1
+ import process from "node:process";
2
+ import path from "node:path";
3
+ import chalk from "chalk";
4
+ import { createLogUpdate } from "log-update";
5
+ import {
6
+ checkConfigFile,
7
+ getGithubCommit,
8
+ parseGithubURL,
9
+ readConfig,
10
+ writeConfig,
11
+ } from "../mops.js";
12
+ import { getHighestVersion } from "../api/getHighestVersion.js";
13
+ import { installMopsDep } from "./install/install-mops-dep.js";
14
+ import { installFromGithub } from "../vessel.js";
15
+ import { checkIntegrity } from "../integrity.js";
16
+ import { checkRequirements } from "../check-requirements.js";
17
+ import { syncLocalCache } from "./install/sync-local-cache.js";
18
+ import { notifyInstalls } from "../notify-installs.js";
19
+ import { resolvePackages } from "../resolve-packages.js";
14
20
 
15
21
  type AddOptions = {
16
- verbose ?: boolean;
17
- dev ?: boolean;
18
- lock ?: 'update' | 'ignore';
22
+ verbose?: boolean;
23
+ dev?: boolean;
24
+ lock?: "update" | "ignore";
19
25
  };
20
26
 
21
27
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
22
- export async function add(name : string, {verbose = false, dev = false, lock} : AddOptions = {}, asName ?: string) {
23
- if (!checkConfigFile()) {
24
- return;
25
- }
26
-
27
- let config = readConfig();
28
- if (dev) {
29
- if (!config['dev-dependencies']) {
30
- config['dev-dependencies'] = {};
31
- }
32
- }
33
- else {
34
- if (!config.dependencies) {
35
- config.dependencies = {};
36
- }
37
- }
38
-
39
- let pkgDetails : any;
40
-
41
- // local package
42
- if (name.startsWith('./') || name.startsWith('../') || name.startsWith('/')) {
43
- pkgDetails = {
44
- name: path.parse(name).name === '.' ? '_' : path.parse(name).name,
45
- path: name,
46
- repo: '',
47
- version: '',
48
- };
49
- }
50
- // github package
51
- else if (name.startsWith('https://github.com') || name.split('/').length > 1) {
52
- let {org, gitName, branch, commitHash} = parseGithubURL(name);
53
-
54
- // fetch latest commit hash of branch if not specified
55
- if (!commitHash) {
56
- let commit = await getGithubCommit(`${org}/${gitName}`, branch);
57
- if (!commit.sha) {
58
- throw Error(`Could not find commit hash for ${name}`);
59
- }
60
- commitHash = commit.sha;
61
- }
62
-
63
- pkgDetails = {
64
- name: asName || parseGithubURL(name).gitName,
65
- repo: `https://github.com/${org}/${gitName}#${branch}@${commitHash}`,
66
- version: '',
67
- };
68
- }
69
- // mops package
70
- else {
71
- let ver : string;
72
- if (name.includes('@')) {
73
- // @ts-ignore
74
- [name, ver] = name.split('@');
75
- }
76
- else {
77
- let versionRes = await getHighestVersion(name);
78
- if ('err' in versionRes) {
79
- console.log(chalk.red('Error: ') + versionRes.err);
80
- return;
81
- }
82
- ver = versionRes.ok;
83
- }
84
-
85
- pkgDetails = {
86
- name: asName || name,
87
- repo: '',
88
- version: ver,
89
- };
90
- }
91
-
92
- if (pkgDetails.repo) {
93
- await installFromGithub(pkgDetails.name, pkgDetails.repo, {verbose: verbose});
94
- }
95
- else if (!pkgDetails.path) {
96
- let res = await installMopsDep(pkgDetails.name, pkgDetails.version, {verbose: verbose});
97
- if (res === false) {
98
- return;
99
- }
100
- }
101
-
102
- const depsProp = dev ? 'dev-dependencies' : 'dependencies';
103
- let deps = config[depsProp];
104
- if (deps) {
105
- deps[pkgDetails.name] = pkgDetails;
106
- }
107
- else {
108
- throw Error(`Invalid config file: [${depsProp}] not found`);
109
- }
110
-
111
- writeConfig(config);
112
-
113
- let logUpdate = createLogUpdate(process.stdout, {showCursor: true});
114
-
115
- if (lock !== 'ignore') {
116
- logUpdate('Checking integrity...');
117
- }
118
-
119
- let installedPackages = await syncLocalCache();
120
-
121
- await Promise.all([
122
- notifyInstalls(installedPackages),
123
- checkIntegrity(lock),
124
- ]);
125
-
126
- logUpdate.clear();
127
-
128
- await checkRequirements({verbose});
129
-
130
- console.log(chalk.green('Package installed ') + `${pkgDetails.name} = "${pkgDetails.repo || pkgDetails.path || pkgDetails.version}"`);
131
-
132
- // check conflicts
133
- await resolvePackages({conflicts: 'warning'});
134
- }
28
+ export async function add(
29
+ name: string,
30
+ { verbose = false, dev = false, lock }: AddOptions = {},
31
+ asName?: string,
32
+ ) {
33
+ if (!checkConfigFile()) {
34
+ return;
35
+ }
36
+
37
+ let config = readConfig();
38
+ if (dev) {
39
+ if (!config["dev-dependencies"]) {
40
+ config["dev-dependencies"] = {};
41
+ }
42
+ } else {
43
+ if (!config.dependencies) {
44
+ config.dependencies = {};
45
+ }
46
+ }
47
+
48
+ let pkgDetails: any;
49
+
50
+ // local package
51
+ if (name.startsWith("./") || name.startsWith("../") || name.startsWith("/")) {
52
+ pkgDetails = {
53
+ name: path.parse(name).name === "." ? "_" : path.parse(name).name,
54
+ path: name,
55
+ repo: "",
56
+ version: "",
57
+ };
58
+ }
59
+ // github package
60
+ else if (
61
+ name.startsWith("https://github.com") ||
62
+ name.split("/").length > 1
63
+ ) {
64
+ let { org, gitName, branch, commitHash } = parseGithubURL(name);
65
+
66
+ // fetch latest commit hash of branch if not specified
67
+ if (!commitHash) {
68
+ let commit = await getGithubCommit(`${org}/${gitName}`, branch);
69
+ if (!commit.sha) {
70
+ throw Error(`Could not find commit hash for ${name}`);
71
+ }
72
+ commitHash = commit.sha;
73
+ }
74
+
75
+ pkgDetails = {
76
+ name: asName || parseGithubURL(name).gitName,
77
+ repo: `https://github.com/${org}/${gitName}#${branch}@${commitHash}`,
78
+ version: "",
79
+ };
80
+ }
81
+ // mops package
82
+ else {
83
+ let ver: string;
84
+ if (name.includes("@")) {
85
+ // @ts-ignore
86
+ [name, ver] = name.split("@");
87
+ } else {
88
+ let versionRes = await getHighestVersion(name);
89
+ if ("err" in versionRes) {
90
+ console.log(chalk.red("Error: ") + versionRes.err);
91
+ return;
92
+ }
93
+ ver = versionRes.ok;
94
+ }
95
+
96
+ pkgDetails = {
97
+ name: asName || name,
98
+ repo: "",
99
+ version: ver,
100
+ };
101
+ }
102
+
103
+ if (pkgDetails.repo) {
104
+ await installFromGithub(pkgDetails.name, pkgDetails.repo, {
105
+ verbose: verbose,
106
+ });
107
+ } else if (!pkgDetails.path) {
108
+ let res = await installMopsDep(pkgDetails.name, pkgDetails.version, {
109
+ verbose: verbose,
110
+ });
111
+ if (res === false) {
112
+ return;
113
+ }
114
+ }
115
+
116
+ const depsProp = dev ? "dev-dependencies" : "dependencies";
117
+ let deps = config[depsProp];
118
+ if (deps) {
119
+ deps[pkgDetails.name] = pkgDetails;
120
+ } else {
121
+ throw Error(`Invalid config file: [${depsProp}] not found`);
122
+ }
123
+
124
+ writeConfig(config);
125
+
126
+ let logUpdate = createLogUpdate(process.stdout, { showCursor: true });
127
+
128
+ if (lock !== "ignore") {
129
+ logUpdate("Checking integrity...");
130
+ }
131
+
132
+ let installedPackages = await syncLocalCache();
133
+
134
+ await Promise.all([notifyInstalls(installedPackages), checkIntegrity(lock)]);
135
+
136
+ logUpdate.clear();
137
+
138
+ await checkRequirements({ verbose });
139
+
140
+ console.log(
141
+ chalk.green("Package installed ") +
142
+ `${pkgDetails.name} = "${pkgDetails.repo || pkgDetails.path || pkgDetails.version}"`,
143
+ );
144
+
145
+ // check conflicts
146
+ await resolvePackages({ conflicts: "warning" });
147
+ }
@@ -1,48 +1,62 @@
1
- import process from 'node:process';
2
- import chalk from 'chalk';
3
- import {mainActor} from '../api/actors.js';
4
- import {Config} from '../types.js';
5
- import {getDepName, getDepPinnedVersion} from '../helpers/get-dep-name.js';
6
- import {SemverPart} from '../declarations/main/main.did.js';
1
+ import process from "node:process";
2
+ import chalk from "chalk";
3
+ import { mainActor } from "../api/actors.js";
4
+ import { Config } from "../types.js";
5
+ import { getDepName, getDepPinnedVersion } from "../helpers/get-dep-name.js";
6
+ import { SemverPart } from "../declarations/main/main.did.js";
7
7
 
8
8
  // [pkg, oldVersion, newVersion]
9
- export async function getAvailableUpdates(config : Config, pkg ?: string) : Promise<Array<[string, string, string]>> {
10
- let deps = Object.values(config.dependencies || {});
11
- let devDeps = Object.values(config['dev-dependencies'] || {});
12
- let allDeps = [...deps, ...devDeps].filter((dep) => dep.version);
13
- let depsToUpdate = pkg ? allDeps.filter((dep) => dep.name === pkg) : allDeps;
9
+ export async function getAvailableUpdates(
10
+ config: Config,
11
+ pkg?: string,
12
+ ): Promise<Array<[string, string, string]>> {
13
+ let deps = Object.values(config.dependencies || {});
14
+ let devDeps = Object.values(config["dev-dependencies"] || {});
15
+ let allDeps = [...deps, ...devDeps].filter((dep) => dep.version);
16
+ let depsToUpdate = pkg ? allDeps.filter((dep) => dep.name === pkg) : allDeps;
14
17
 
15
- // skip hard pinned dependencies (e.g. "base@X.Y.Z")
16
- depsToUpdate = depsToUpdate.filter((dep) => getDepName(dep.name) === dep.name || getDepPinnedVersion(dep.name).split('.').length !== 3);
18
+ // skip hard pinned dependencies (e.g. "base@X.Y.Z")
19
+ depsToUpdate = depsToUpdate.filter(
20
+ (dep) =>
21
+ getDepName(dep.name) === dep.name ||
22
+ getDepPinnedVersion(dep.name).split(".").length !== 3,
23
+ );
17
24
 
18
- let getCurrentVersion = (pkg : string, updateVersion : string) => {
19
- for (let dep of allDeps) {
20
- if (getDepName(dep.name) === pkg && dep.version) {
21
- let pinnedVersion = getDepPinnedVersion(dep.name);
22
- if (pinnedVersion && !updateVersion.startsWith(pinnedVersion)) {
23
- continue;
24
- }
25
- return dep.version;
26
- }
27
- }
28
- return '';
29
- };
25
+ let getCurrentVersion = (pkg: string, updateVersion: string) => {
26
+ for (let dep of allDeps) {
27
+ if (getDepName(dep.name) === pkg && dep.version) {
28
+ let pinnedVersion = getDepPinnedVersion(dep.name);
29
+ if (pinnedVersion && !updateVersion.startsWith(pinnedVersion)) {
30
+ continue;
31
+ }
32
+ return dep.version;
33
+ }
34
+ }
35
+ return "";
36
+ };
30
37
 
31
- let actor = await mainActor();
32
- let res = await actor.getHighestSemverBatch(depsToUpdate.map((dep) => {
33
- let semverPart : SemverPart = {major: null};
34
- let name = getDepName(dep.name);
35
- let pinnedVersion = getDepPinnedVersion(dep.name);
36
- if (pinnedVersion) {
37
- semverPart = pinnedVersion.split('.').length === 1 ? {minor: null} : {patch: null};
38
- }
39
- return [name, dep.version || '', semverPart];
40
- }));
38
+ let actor = await mainActor();
39
+ let res = await actor.getHighestSemverBatch(
40
+ depsToUpdate.map((dep) => {
41
+ let semverPart: SemverPart = { major: null };
42
+ let name = getDepName(dep.name);
43
+ let pinnedVersion = getDepPinnedVersion(dep.name);
44
+ if (pinnedVersion) {
45
+ semverPart =
46
+ pinnedVersion.split(".").length === 1
47
+ ? { minor: null }
48
+ : { patch: null };
49
+ }
50
+ return [name, dep.version || "", semverPart];
51
+ }),
52
+ );
41
53
 
42
- if ('err' in res) {
43
- console.log(chalk.red('Error:'), res.err);
44
- process.exit(1);
45
- }
54
+ if ("err" in res) {
55
+ console.log(chalk.red("Error:"), res.err);
56
+ process.exit(1);
57
+ }
46
58
 
47
- return res.ok.filter((dep) => dep[1] !== getCurrentVersion(dep[0], dep[1])).map((dep) => [dep[0], getCurrentVersion(dep[0], dep[1]), dep[1]]);
48
- }
59
+ return res.ok
60
+ .filter((dep) => dep[1] !== getCurrentVersion(dep[0], dep[1]))
61
+ .map((dep) => [dep[0], getCurrentVersion(dep[0], dep[1]), dep[1]]);
62
+ }
@@ -1,113 +1,119 @@
1
- import Nat64 "mo:base/Nat64";
2
- import Nat "mo:base/Nat";
3
- import Debug "mo:base/Debug";
4
- import ExperimentalInternetComputer "mo:base/ExperimentalInternetComputer";
5
- import ExperimentalStableMemory "mo:base/ExperimentalStableMemory";
6
- import Int64 "mo:base/Int64";
7
- import Region "mo:base/Region";
1
+ import Nat64 "mo:core/Nat64";
2
+ import Nat "mo:core/Nat";
3
+ import Runtime "mo:core/Runtime";
4
+ import InternetComputer "mo:core/InternetComputer";
5
+ import Int64 "mo:core/Int64";
6
+ import Region "mo:core/Region";
8
7
  import Prim "mo:prim";
9
8
  import Bench "mo:bench";
10
9
 
11
10
  import UserBench "./user-bench"; // file path will be replaced with the *.bench.mo file path
12
11
 
13
- persistent actor class() {
14
- type BenchResult = {
15
- instructions : Int;
16
- rts_mutator_instructions : Int;
17
- stable_memory_size : Int;
18
- rts_stable_memory_size : Int;
19
- rts_logical_stable_memory_size : Int;
20
- rts_collector_instructions : Int;
21
- rts_heap_size : Int;
22
- rts_memory_size : Int;
23
- rts_total_allocation : Int;
24
- rts_reclaimed : Int;
25
- };
26
-
27
- transient var benchOpt : ?Bench.Bench = null;
28
-
29
- public func init() : async Bench.BenchSchema {
30
- let bench = UserBench.init();
31
- benchOpt := ?bench;
32
- // ignore ExperimentalStableMemory.grow(1);
33
- ignore Region.grow(Region.new(), 1);
34
- bench.getSchema();
35
- };
36
-
37
- public query func getSchema() : async Bench.BenchSchema {
38
- let ?bench = benchOpt else Debug.trap("bench not initialized");
39
- bench.getSchema();
40
- };
41
-
42
- func _getStats() : BenchResult {
43
- {
44
- instructions = 0;
45
- rts_heap_size = Prim.rts_heap_size();
46
- stable_memory_size = Int64.toInt(Int64.fromNat64(ExperimentalStableMemory.size())) * 65536;
47
- rts_stable_memory_size = Prim.rts_stable_memory_size();
48
- rts_logical_stable_memory_size = Prim.rts_logical_stable_memory_size();
49
- rts_memory_size = Prim.rts_memory_size();
50
- rts_total_allocation = Prim.rts_total_allocation();
51
- rts_reclaimed = Prim.rts_reclaimed();
52
- rts_mutator_instructions = Prim.rts_mutator_instructions();
53
- rts_collector_instructions = Prim.rts_collector_instructions();
54
- }
55
- };
56
-
57
- func _diffStats(before : BenchResult, after : BenchResult) : BenchResult {
58
- {
59
- instructions = after.instructions - before.instructions;
60
- rts_heap_size = after.rts_heap_size - before.rts_heap_size;
61
- stable_memory_size = after.stable_memory_size - before.stable_memory_size;
62
- rts_stable_memory_size = after.rts_stable_memory_size - before.rts_stable_memory_size;
63
- rts_logical_stable_memory_size = after.rts_logical_stable_memory_size - before.rts_logical_stable_memory_size;
64
- rts_memory_size = after.rts_memory_size - before.rts_memory_size;
65
- rts_total_allocation = after.rts_total_allocation - before.rts_total_allocation;
66
- rts_reclaimed = after.rts_reclaimed - before.rts_reclaimed;
67
- rts_mutator_instructions = after.rts_mutator_instructions - before.rts_mutator_instructions;
68
- rts_collector_instructions = after.rts_collector_instructions - before.rts_collector_instructions;
69
- }
70
- };
71
-
72
- func _runCell(rowIndex : Nat, colIndex : Nat) : BenchResult {
73
- let ?bench = benchOpt else Debug.trap("bench not initialized");
74
- let statsBefore = _getStats();
75
-
76
- let instructions = Nat64.toNat(ExperimentalInternetComputer.countInstructions(func() {
77
- bench.runCell(rowIndex, colIndex);
78
- }));
79
-
80
- let statsAfter = _getStats();
81
- _diffStats(statsBefore, { statsAfter with instructions });
82
- };
83
-
84
- func _runCellAwait(rowIndex : Nat, colIndex : Nat) : async BenchResult {
85
- let ?bench = benchOpt else Debug.trap("bench not initialized");
86
- let statsBefore = _getStats();
87
-
88
- let instructions = Nat64.toNat(ExperimentalInternetComputer.countInstructions(func() {
89
- bench.runCell(rowIndex, colIndex);
90
- }));
91
-
92
- await (func() : async () {})();
93
-
94
- let statsAfter = _getStats();
95
- _diffStats(statsBefore, { statsAfter with instructions });
96
- };
97
-
98
- public query func getStats() : async BenchResult {
99
- _getStats();
100
- };
101
-
102
- public query func runCellQuery(rowIndex : Nat, colIndex : Nat) : async BenchResult {
103
- _runCell(rowIndex, colIndex);
104
- };
105
-
106
- public func runCellUpdate(rowIndex : Nat, colIndex : Nat) : async BenchResult {
107
- _runCell(rowIndex, colIndex);
108
- };
109
-
110
- public func runCellUpdateAwait(rowIndex : Nat, colIndex : Nat) : async BenchResult {
111
- await _runCellAwait(rowIndex, colIndex);
112
- };
113
- };
12
+ persistent actor class () {
13
+ type BenchResult = {
14
+ instructions : Int;
15
+ rts_mutator_instructions : Int;
16
+ stable_memory_size : Int;
17
+ rts_stable_memory_size : Int;
18
+ rts_logical_stable_memory_size : Int;
19
+ rts_collector_instructions : Int;
20
+ rts_heap_size : Int;
21
+ rts_memory_size : Int;
22
+ rts_total_allocation : Int;
23
+ rts_reclaimed : Int;
24
+ };
25
+
26
+ transient var benchOpt : ?Bench.Bench = null;
27
+
28
+ public func init() : async Bench.BenchSchema {
29
+ let bench = UserBench.init();
30
+ benchOpt := ?bench;
31
+ ignore Region.grow(Region.new(), 1);
32
+ bench.getSchema();
33
+ };
34
+
35
+ public query func getSchema() : async Bench.BenchSchema {
36
+ let ?bench = benchOpt else Runtime.trap("bench not initialized");
37
+ bench.getSchema();
38
+ };
39
+
40
+ func _getStats() : BenchResult {
41
+ {
42
+ instructions = 0;
43
+ rts_heap_size = Prim.rts_heap_size();
44
+ stable_memory_size = Int64.toInt(Int64.fromNat64(Prim.stableMemorySize())) * 65536;
45
+ rts_stable_memory_size = Prim.rts_stable_memory_size();
46
+ rts_logical_stable_memory_size = Prim.rts_logical_stable_memory_size();
47
+ rts_memory_size = Prim.rts_memory_size();
48
+ rts_total_allocation = Prim.rts_total_allocation();
49
+ rts_reclaimed = Prim.rts_reclaimed();
50
+ rts_mutator_instructions = Prim.rts_mutator_instructions();
51
+ rts_collector_instructions = Prim.rts_collector_instructions();
52
+ };
53
+ };
54
+
55
+ func _diffStats(before : BenchResult, after : BenchResult) : BenchResult {
56
+ {
57
+ instructions = after.instructions - before.instructions;
58
+ rts_heap_size = after.rts_heap_size - before.rts_heap_size;
59
+ stable_memory_size = after.stable_memory_size - before.stable_memory_size;
60
+ rts_stable_memory_size = after.rts_stable_memory_size - before.rts_stable_memory_size;
61
+ rts_logical_stable_memory_size = after.rts_logical_stable_memory_size - before.rts_logical_stable_memory_size;
62
+ rts_memory_size = after.rts_memory_size - before.rts_memory_size;
63
+ rts_total_allocation = after.rts_total_allocation - before.rts_total_allocation;
64
+ rts_reclaimed = after.rts_reclaimed - before.rts_reclaimed;
65
+ rts_mutator_instructions = after.rts_mutator_instructions - before.rts_mutator_instructions;
66
+ rts_collector_instructions = after.rts_collector_instructions - before.rts_collector_instructions;
67
+ };
68
+ };
69
+
70
+ func _runCell(rowIndex : Nat, colIndex : Nat) : BenchResult {
71
+ let ?bench = benchOpt else Runtime.trap("bench not initialized");
72
+ let statsBefore = _getStats();
73
+
74
+ let instructions = Nat64.toNat(
75
+ InternetComputer.countInstructions(
76
+ func() {
77
+ bench.runCell(rowIndex, colIndex);
78
+ }
79
+ )
80
+ );
81
+
82
+ let statsAfter = _getStats();
83
+ _diffStats(statsBefore, { statsAfter with instructions });
84
+ };
85
+
86
+ func _runCellAwait(rowIndex : Nat, colIndex : Nat) : async BenchResult {
87
+ let ?bench = benchOpt else Runtime.trap("bench not initialized");
88
+ let statsBefore = _getStats();
89
+
90
+ let instructions = Nat64.toNat(
91
+ InternetComputer.countInstructions(
92
+ func() {
93
+ bench.runCell(rowIndex, colIndex);
94
+ }
95
+ )
96
+ );
97
+
98
+ await (func() : async () {})();
99
+
100
+ let statsAfter = _getStats();
101
+ _diffStats(statsBefore, { statsAfter with instructions });
102
+ };
103
+
104
+ public query func getStats() : async BenchResult {
105
+ _getStats();
106
+ };
107
+
108
+ public query func runCellQuery(rowIndex : Nat, colIndex : Nat) : async BenchResult {
109
+ _runCell(rowIndex, colIndex);
110
+ };
111
+
112
+ public func runCellUpdate(rowIndex : Nat, colIndex : Nat) : async BenchResult {
113
+ _runCell(rowIndex, colIndex);
114
+ };
115
+
116
+ public func runCellUpdateAwait(rowIndex : Nat, colIndex : Nat) : async BenchResult {
117
+ await _runCellAwait(rowIndex, colIndex);
118
+ };
119
+ };
@@ -2,9 +2,9 @@ import Bench "mo:bench";
2
2
 
3
3
  // placeholder file that will be replaced with the *.bench.mo file
4
4
  module {
5
- public func init() : Bench.Bench {
6
- let bench = Bench.Bench();
7
- // benchmark code goes here...
8
- bench;
9
- };
10
- };
5
+ public func init() : Bench.Bench {
6
+ let bench = Bench.Bench();
7
+ // benchmark code goes here...
8
+ bench;
9
+ };
10
+ };