ic-mops 0.37.0-pre.0 → 0.37.1
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.
- package/bin/moc-wrapper.sh +1 -52
- package/cache.ts +2 -2
- package/cli.ts +27 -6
- package/commands/add.ts +3 -1
- package/commands/bench-replica.ts +5 -3
- package/commands/docs.ts +9 -6
- package/commands/install-all.ts +7 -2
- package/commands/install.ts +5 -1
- package/commands/publish.ts +2 -0
- package/commands/test/test.ts +42 -19
- package/commands/toolchain/index.ts +214 -42
- package/commands/toolchain/moc.ts +19 -4
- package/commands/toolchain/pocket-ic.ts +43 -6
- package/commands/toolchain/toolchain-utils.ts +14 -5
- package/commands/toolchain/wasmtime.ts +19 -4
- package/dist/bin/mops.js +0 -0
- package/dist/cache.js +2 -2
- package/dist/cli.js +24 -6
- package/dist/commands/add.js +2 -1
- package/dist/commands/bench-replica.d.ts +1 -1
- package/dist/commands/bench-replica.js +5 -3
- package/dist/commands/docs.js +9 -6
- package/dist/commands/install-all.js +5 -2
- package/dist/commands/install.js +5 -1
- package/dist/commands/publish.js +1 -0
- package/dist/commands/test/test.js +41 -19
- package/dist/commands/toolchain/index.d.ts +17 -3
- package/dist/commands/toolchain/index.js +187 -40
- package/dist/commands/toolchain/moc.d.ts +5 -1
- package/dist/commands/toolchain/moc.js +16 -4
- package/dist/commands/toolchain/mocv.js +0 -1
- package/dist/commands/toolchain/pocket-ic.d.ts +9 -1
- package/dist/commands/toolchain/pocket-ic.js +40 -6
- package/dist/commands/toolchain/toolchain-utils.d.ts +1 -1
- package/dist/commands/toolchain/toolchain-utils.js +13 -4
- package/dist/commands/toolchain/wasmtime.d.ts +5 -1
- package/dist/commands/toolchain/wasmtime.js +16 -4
- package/dist/integrity.js +40 -15
- package/dist/mops.js +1 -1
- package/dist/package.json +3 -2
- package/dist/pic-js/examples/clock/tests/clock/index.d.ts +1 -0
- package/dist/pic-js/examples/clock/tests/clock/index.js +5 -0
- package/dist/pic-js/examples/clock/tests/jest.config.d.ts +3 -0
- package/dist/pic-js/examples/clock/tests/jest.config.js +8 -0
- package/dist/pic-js/examples/clock/tests/src/clock.spec.d.ts +1 -0
- package/dist/pic-js/examples/clock/tests/src/clock.spec.js +48 -0
- package/dist/pic-js/examples/counter/tests/counter/index.d.ts +1 -0
- package/dist/pic-js/examples/counter/tests/counter/index.js +5 -0
- package/dist/pic-js/examples/counter/tests/jest.config.d.ts +3 -0
- package/dist/pic-js/examples/counter/tests/jest.config.js +8 -0
- package/dist/pic-js/examples/counter/tests/src/counter.spec.d.ts +1 -0
- package/dist/pic-js/examples/counter/tests/src/counter.spec.js +80 -0
- package/dist/pic-js/examples/todo/tests/jest.config.d.ts +3 -0
- package/dist/pic-js/examples/todo/tests/jest.config.js +8 -0
- package/dist/pic-js/examples/todo/tests/src/todo.spec.d.ts +1 -0
- package/dist/pic-js/examples/todo/tests/src/todo.spec.js +211 -0
- package/dist/pic-js/examples/todo/tests/todo/index.d.ts +1 -0
- package/dist/pic-js/examples/todo/tests/todo/index.js +5 -0
- package/dist/pic-js/packages/pic/src/error.d.ts +12 -0
- package/dist/pic-js/packages/pic/src/error.js +36 -0
- package/dist/pic-js/packages/pic/src/http-client.d.ts +15 -0
- package/dist/pic-js/packages/pic/src/http-client.js +37 -0
- package/dist/pic-js/packages/pic/src/identity.d.ts +66 -0
- package/dist/pic-js/packages/pic/src/identity.js +86 -0
- package/dist/pic-js/packages/pic/src/index.d.ts +4 -0
- package/dist/pic-js/packages/pic/src/index.js +8 -0
- package/dist/pic-js/packages/pic/src/management-canister.d.ts +30 -0
- package/dist/pic-js/packages/pic/src/management-canister.js +43 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-actor.d.ts +83 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-actor.js +58 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-client-types.d.ts +61 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-client-types.js +2 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-client.d.ts +24 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-client.js +123 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-server.d.ts +10 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-server.js +55 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-types.d.ts +40 -0
- package/dist/pic-js/packages/pic/src/pocket-ic-types.js +2 -0
- package/dist/pic-js/packages/pic/src/pocket-ic.d.ts +447 -0
- package/dist/pic-js/packages/pic/src/pocket-ic.js +551 -0
- package/dist/pic-js/packages/pic/src/util/candid.d.ts +1 -0
- package/dist/pic-js/packages/pic/src/util/candid.js +7 -0
- package/dist/pic-js/packages/pic/src/util/encoding.d.ts +5 -0
- package/dist/pic-js/packages/pic/src/util/encoding.js +19 -0
- package/dist/pic-js/packages/pic/src/util/fs.d.ts +4 -0
- package/dist/pic-js/packages/pic/src/util/fs.js +29 -0
- package/dist/pic-js/packages/pic/src/util/index.d.ts +5 -0
- package/dist/pic-js/packages/pic/src/util/index.js +21 -0
- package/dist/pic-js/packages/pic/src/util/os.d.ts +4 -0
- package/dist/pic-js/packages/pic/src/util/os.js +19 -0
- package/dist/pic-js/packages/pic/src/util/poll.d.ts +5 -0
- package/dist/pic-js/packages/pic/src/util/poll.js +28 -0
- package/dist/templates/mops-test.yml +4 -4
- package/dist/vessel.js +5 -1
- package/integrity.ts +57 -17
- package/mops.ts +1 -1
- package/package.json +3 -2
- package/templates/mops-test.yml +4 -4
- package/vessel.ts +6 -1
- package/bun.lockb +0 -0
- package/commands/toolchain/mocv.ts +0 -313
- package/moc-wrapper.ts +0 -10
|
@@ -2,14 +2,58 @@ import path from 'node:path';
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import os from 'node:os';
|
|
4
4
|
import {execSync} from 'node:child_process';
|
|
5
|
-
import {getClosestConfigFile, globalCacheDir, readConfig, writeConfig} from '../../mops.js';
|
|
6
|
-
import * as moc from './moc.js';
|
|
7
|
-
import {Tool} from '../../types.js';
|
|
8
5
|
import chalk from 'chalk';
|
|
6
|
+
import prompts from 'prompts';
|
|
7
|
+
import {createLogUpdate} from 'log-update';
|
|
8
|
+
import {checkConfigFile, getClosestConfigFile, getRootDir, globalCacheDir, readConfig, writeConfig} from '../../mops.js';
|
|
9
|
+
import {Tool} from '../../types.js';
|
|
10
|
+
import * as moc from './moc.js';
|
|
11
|
+
import * as pocketIc from './pocket-ic.js';
|
|
12
|
+
import * as wasmtime from './wasmtime.js';
|
|
9
13
|
|
|
14
|
+
function getToolUtils(tool: Tool) {
|
|
15
|
+
if (tool === 'moc') {
|
|
16
|
+
return moc;
|
|
17
|
+
}
|
|
18
|
+
else if (tool === 'pocket-ic') {
|
|
19
|
+
return pocketIc;
|
|
20
|
+
}
|
|
21
|
+
else if (tool === 'wasmtime') {
|
|
22
|
+
return wasmtime;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
console.error(`Unknown tool '${tool}'`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function ensureToolchainInited({strict = true} = {}) {
|
|
31
|
+
// auto init in CI
|
|
32
|
+
if (process.env.CI) {
|
|
33
|
+
await init({silent: true});
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// for non-stict perform check only if dfx.json exists and moc is listed in [toolchain] section
|
|
38
|
+
let rootDir = getRootDir();
|
|
39
|
+
let config = readConfig();
|
|
40
|
+
if (!strict && (!config.toolchain?.moc || rootDir && !fs.existsSync(path.join(rootDir, 'dfx.json')))) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
let res = execSync('which moc-wrapper').toString().trim();
|
|
46
|
+
if (res && process.env.DFX_MOC_PATH === 'moc-wrapper') {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch {}
|
|
51
|
+
console.error('Toolchain management is not initialized. Run "mops toolchain init"');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
10
54
|
|
|
11
55
|
// update shell config files to set DFX_MOC_PATH to moc-wrapper
|
|
12
|
-
async function init({reset = false} = {}) {
|
|
56
|
+
async function init({reset = false, silent = false} = {}) {
|
|
13
57
|
if (process.platform == 'win32') {
|
|
14
58
|
console.error('Windows is not supported. Please use WSL');
|
|
15
59
|
process.exit(1);
|
|
@@ -30,7 +74,7 @@ async function init({reset = false} = {}) {
|
|
|
30
74
|
let zshrc = path.join(os.homedir(), '.zshrc');
|
|
31
75
|
let bashrc = path.join(os.homedir(), '.bashrc');
|
|
32
76
|
|
|
33
|
-
let shellConfigFiles = [bashrc, zshrc].filter((file) => {
|
|
77
|
+
let shellConfigFiles = [bashrc, zshrc, process.env.GITHUB_ENV || ''].map(x => x).filter((file) => {
|
|
34
78
|
return fs.existsSync(file);
|
|
35
79
|
});
|
|
36
80
|
|
|
@@ -40,12 +84,12 @@ async function init({reset = false} = {}) {
|
|
|
40
84
|
}
|
|
41
85
|
|
|
42
86
|
// update all existing shell config files
|
|
43
|
-
for (let
|
|
44
|
-
let text = fs.readFileSync(
|
|
45
|
-
let
|
|
87
|
+
for (let shellConfigFile of shellConfigFiles) {
|
|
88
|
+
let text = fs.readFileSync(shellConfigFile).toString();
|
|
89
|
+
let setDfxMocPathLine = '\nexport DFX_MOC_PATH=moc-wrapper';
|
|
46
90
|
|
|
47
91
|
let newLines = [
|
|
48
|
-
|
|
92
|
+
setDfxMocPathLine,
|
|
49
93
|
];
|
|
50
94
|
|
|
51
95
|
let oldLines = [
|
|
@@ -53,7 +97,7 @@ async function init({reset = false} = {}) {
|
|
|
53
97
|
`\nexport DFX_MOC_PATH=${path.join(path.join(os.homedir(), '.cache/mocv'), 'versions/current')}/moc`,
|
|
54
98
|
'\nexport DFX_MOC_PATH="$HOME/.cache/mocv/versions/current/moc"',
|
|
55
99
|
// new
|
|
56
|
-
|
|
100
|
+
setDfxMocPathLine,
|
|
57
101
|
];
|
|
58
102
|
|
|
59
103
|
// remove old lines
|
|
@@ -71,83 +115,211 @@ async function init({reset = false} = {}) {
|
|
|
71
115
|
text += '\n';
|
|
72
116
|
}
|
|
73
117
|
for (let newLine of newLines) {
|
|
118
|
+
if (shellConfigFile === process.env.GITHUB_ENV) {
|
|
119
|
+
newLine = newLine.replace('export ', '');
|
|
120
|
+
}
|
|
74
121
|
text += newLine;
|
|
75
122
|
}
|
|
76
123
|
text += '\n';
|
|
77
124
|
}
|
|
78
125
|
|
|
79
|
-
fs.writeFileSync(
|
|
126
|
+
fs.writeFileSync(shellConfigFile, text);
|
|
80
127
|
}
|
|
81
128
|
|
|
82
|
-
|
|
129
|
+
if (!silent) {
|
|
130
|
+
console.log(chalk.green('Success!'));
|
|
131
|
+
console.log('Restart terminal to apply changes');
|
|
132
|
+
}
|
|
83
133
|
}
|
|
84
134
|
|
|
85
|
-
async function download(tool: Tool, version: string) {
|
|
86
|
-
|
|
87
|
-
|
|
135
|
+
async function download(tool: Tool, version: string, {silent = false, verbose = false} = {}) {
|
|
136
|
+
let toolUtils = getToolUtils(tool);
|
|
137
|
+
await toolUtils.download(version, {silent, verbose});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
async function installAll({silent = false, verbose = false} = {}) {
|
|
141
|
+
let config = readConfig();
|
|
142
|
+
|
|
143
|
+
if (!config.toolchain) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
let logUpdate = createLogUpdate(process.stdout, {showCursor: true});
|
|
148
|
+
|
|
149
|
+
let log = (...args: string[]) => {
|
|
150
|
+
if (silent) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (verbose) {
|
|
154
|
+
console.log(...args);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
logUpdate(...args);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
log('Installing toolchain...');
|
|
162
|
+
|
|
163
|
+
if (config.toolchain?.moc) {
|
|
164
|
+
log('Installing moc', config.toolchain.moc);
|
|
165
|
+
await download('moc', config.toolchain.moc, {verbose});
|
|
166
|
+
}
|
|
167
|
+
if (config.toolchain?.wasmtime) {
|
|
168
|
+
log('Installing wasmtime', config.toolchain.wasmtime);
|
|
169
|
+
await download('wasmtime', config.toolchain.wasmtime, {verbose});
|
|
170
|
+
}
|
|
171
|
+
if (config.toolchain?.['pocket-ic']) {
|
|
172
|
+
log('Installing pocket-ic', config.toolchain['pocket-ic']);
|
|
173
|
+
await download('pocket-ic', config.toolchain['pocket-ic'], {verbose});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (!silent) {
|
|
177
|
+
logUpdate.clear();
|
|
178
|
+
console.log(chalk.green('Toolchain installed'));
|
|
88
179
|
}
|
|
89
180
|
}
|
|
90
181
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
182
|
+
async function promptVersion(tool: Tool): Promise<string> {
|
|
183
|
+
let config = readConfig();
|
|
184
|
+
config.toolchain = config.toolchain || {};
|
|
185
|
+
let current = config.toolchain[tool];
|
|
186
|
+
|
|
187
|
+
let toolUtils = getToolUtils(tool);
|
|
188
|
+
let releases = await toolUtils.getReleases();
|
|
189
|
+
let versions = releases.map((item: {tag_name: any;}) => item.tag_name);
|
|
190
|
+
let currentIndex = versions.indexOf(current);
|
|
191
|
+
|
|
192
|
+
let res = await prompts({
|
|
193
|
+
type: 'select',
|
|
194
|
+
name: 'version',
|
|
195
|
+
message: `Select ${tool} version`,
|
|
196
|
+
choices: releases.map((release: {published_at: string | number | Date; tag_name: string;}, i: any) => {
|
|
197
|
+
let date = new Date(release.published_at).toLocaleDateString(undefined, {year: 'numeric', month: 'short', day: 'numeric'});
|
|
198
|
+
return {
|
|
199
|
+
title: release.tag_name + chalk.gray(` ${date}${currentIndex === i ? chalk.italic(' (current)') : ''}`),
|
|
200
|
+
value: release.tag_name,
|
|
201
|
+
};
|
|
202
|
+
}),
|
|
203
|
+
initial: currentIndex == -1 ? 0 : currentIndex,
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
return res.version;
|
|
207
|
+
}
|
|
103
208
|
|
|
104
209
|
// download binary and set version in mops.toml
|
|
105
|
-
async function use(tool: Tool, version
|
|
210
|
+
async function use(tool: Tool, version?: string) {
|
|
211
|
+
if (tool === 'moc') {
|
|
212
|
+
await ensureToolchainInited();
|
|
213
|
+
}
|
|
214
|
+
if (!version) {
|
|
215
|
+
version = await promptVersion(tool);
|
|
216
|
+
}
|
|
217
|
+
if (!version) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (version === 'latest') {
|
|
221
|
+
version = await getToolUtils(tool).getLatestReleaseTag();
|
|
222
|
+
}
|
|
223
|
+
|
|
106
224
|
await download(tool, version);
|
|
107
225
|
|
|
108
226
|
let config = readConfig();
|
|
109
227
|
config.toolchain = config.toolchain || {};
|
|
228
|
+
|
|
229
|
+
let oldVersion = config.toolchain[tool];
|
|
230
|
+
|
|
110
231
|
config.toolchain[tool] = version;
|
|
111
232
|
writeConfig(config);
|
|
233
|
+
|
|
234
|
+
if (oldVersion === version) {
|
|
235
|
+
console.log((`${tool} ${version} is already installed`));
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
console.log(chalk.green(`Installed ${tool} ${version}`));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// download latest binary and set version in mops.toml
|
|
243
|
+
async function update(tool?: Tool) {
|
|
244
|
+
if (tool === 'moc') {
|
|
245
|
+
await ensureToolchainInited();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
let config = readConfig();
|
|
249
|
+
config.toolchain = config.toolchain || {};
|
|
250
|
+
|
|
251
|
+
let tools = tool ? [tool] : Object.keys(config.toolchain) as Tool[];
|
|
252
|
+
|
|
253
|
+
for (let tool of tools) {
|
|
254
|
+
if (!config.toolchain[tool]) {
|
|
255
|
+
console.error(`Tool '${tool}' is not defined in [toolchain] section in mops.toml`);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
let toolUtils = getToolUtils(tool);
|
|
260
|
+
let version = await toolUtils.getLatestReleaseTag();
|
|
261
|
+
|
|
262
|
+
await download(tool, version);
|
|
263
|
+
|
|
264
|
+
let oldVersion = config.toolchain[tool];
|
|
265
|
+
config.toolchain[tool] = version;
|
|
266
|
+
writeConfig(config);
|
|
267
|
+
|
|
268
|
+
if (oldVersion === version) {
|
|
269
|
+
console.log((`Latest ${tool} ${version} is already installed`));
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
console.log(chalk.green(`Installed ${tool} ${version}`));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
112
275
|
}
|
|
113
276
|
|
|
114
277
|
// return current version from mops.toml
|
|
115
|
-
async function bin(tool: Tool) {
|
|
278
|
+
async function bin(tool: Tool, {fallback = false} = {}): Promise<string> {
|
|
116
279
|
let hasConfig = getClosestConfigFile();
|
|
117
280
|
|
|
118
281
|
// fallback to dfx moc
|
|
119
282
|
if (!hasConfig) {
|
|
120
|
-
|
|
121
|
-
|
|
283
|
+
if (tool === 'moc' && fallback) {
|
|
284
|
+
return execSync('dfx cache show').toString().trim() + '/moc';
|
|
285
|
+
}
|
|
286
|
+
checkConfigFile();
|
|
287
|
+
process.exit(1);
|
|
122
288
|
}
|
|
123
289
|
|
|
124
290
|
let config = readConfig();
|
|
125
291
|
let version = config.toolchain?.[tool];
|
|
126
292
|
|
|
127
|
-
if (
|
|
128
|
-
// fallback to dfx moc
|
|
293
|
+
if (version) {
|
|
129
294
|
if (tool === 'moc') {
|
|
130
|
-
|
|
131
|
-
return;
|
|
295
|
+
await ensureToolchainInited();
|
|
132
296
|
}
|
|
133
|
-
console.error(`Toolchain '${tool}' is not defined in mops.toml`);
|
|
134
|
-
process.exit(1);
|
|
135
|
-
}
|
|
136
297
|
|
|
137
|
-
|
|
138
|
-
await download(tool, version);
|
|
298
|
+
await download(tool, version, {silent: true});
|
|
139
299
|
|
|
140
300
|
if (tool === 'moc') {
|
|
141
|
-
|
|
301
|
+
return path.join(globalCacheDir, 'moc', version, tool);
|
|
142
302
|
}
|
|
143
303
|
else {
|
|
144
|
-
|
|
304
|
+
return path.join(globalCacheDir, tool, version, tool);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
// fallback to dfx moc
|
|
309
|
+
if (tool === 'moc' && fallback) {
|
|
310
|
+
return execSync('dfx cache show').toString().trim() + '/moc';
|
|
145
311
|
}
|
|
312
|
+
console.error(`Tool '${tool}' is not defined in [toolchain] section in mops.toml`);
|
|
313
|
+
console.log(`Run ${chalk.green(`mops toolchain use ${tool}`)} to install it`);
|
|
314
|
+
process.exit(1);
|
|
146
315
|
}
|
|
147
316
|
}
|
|
148
317
|
|
|
149
318
|
export let toolchain = {
|
|
150
319
|
init,
|
|
151
320
|
use,
|
|
321
|
+
update,
|
|
152
322
|
bin,
|
|
323
|
+
installAll,
|
|
324
|
+
ensureToolchainInited,
|
|
153
325
|
};
|
|
@@ -2,16 +2,26 @@ import path from 'node:path';
|
|
|
2
2
|
import fs from 'fs-extra';
|
|
3
3
|
|
|
4
4
|
import {globalCacheDir} from '../../mops.js';
|
|
5
|
-
import
|
|
5
|
+
import * as toolchainUtils from './toolchain-utils.js';
|
|
6
6
|
|
|
7
7
|
let cacheDir = path.join(globalCacheDir, 'moc');
|
|
8
8
|
|
|
9
|
+
export let repo = 'dfinity/motoko';
|
|
10
|
+
|
|
11
|
+
export let getLatestReleaseTag = async () => {
|
|
12
|
+
return toolchainUtils.getLatestReleaseTag(repo);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export let getReleases = async () => {
|
|
16
|
+
return toolchainUtils.getReleases(repo);
|
|
17
|
+
};
|
|
18
|
+
|
|
9
19
|
export let isCached = (version: string) => {
|
|
10
20
|
let dir = path.join(cacheDir, version);
|
|
11
21
|
return fs.existsSync(dir) && fs.existsSync(path.join(dir, 'moc'));
|
|
12
22
|
};
|
|
13
23
|
|
|
14
|
-
export let download = async (version: string, {silent = false} = {}) => {
|
|
24
|
+
export let download = async (version: string, {silent = false, verbose = false} = {}) => {
|
|
15
25
|
if (process.platform == 'win32') {
|
|
16
26
|
console.error('Windows is not supported. Please use WSL');
|
|
17
27
|
process.exit(1);
|
|
@@ -21,6 +31,9 @@ export let download = async (version: string, {silent = false} = {}) => {
|
|
|
21
31
|
process.exit(1);
|
|
22
32
|
}
|
|
23
33
|
if (isCached(version)) {
|
|
34
|
+
if (verbose) {
|
|
35
|
+
console.log(`moc ${version} is already installed`);
|
|
36
|
+
}
|
|
24
37
|
return;
|
|
25
38
|
}
|
|
26
39
|
|
|
@@ -37,7 +50,9 @@ export let download = async (version: string, {silent = false} = {}) => {
|
|
|
37
50
|
url = `https://github.com/dfinity/motoko/releases/download/${version}/motoko-${platfrom}-${version}.tar.gz`;
|
|
38
51
|
}
|
|
39
52
|
|
|
40
|
-
|
|
53
|
+
if (verbose && !silent) {
|
|
54
|
+
console.log(`Downloading ${url}`);
|
|
55
|
+
}
|
|
41
56
|
|
|
42
|
-
await downloadAndExtract(url, path.join(cacheDir, version));
|
|
57
|
+
await toolchainUtils.downloadAndExtract(url, path.join(cacheDir, version));
|
|
43
58
|
};
|
|
@@ -2,21 +2,56 @@ import path from 'node:path';
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
|
|
4
4
|
import {globalCacheDir} from '../../mops.js';
|
|
5
|
-
import
|
|
5
|
+
import * as toolchainUtils from './toolchain-utils.js';
|
|
6
6
|
|
|
7
7
|
let cacheDir = path.join(globalCacheDir, 'pocket-ic');
|
|
8
8
|
|
|
9
|
+
export let repo = 'dfinity/pocketic';
|
|
10
|
+
|
|
11
|
+
export let getLatestReleaseTag = async () => {
|
|
12
|
+
return '1.0.0';
|
|
13
|
+
// return toolchainUtils.getLatestReleaseTag(repo);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export let getReleases = async () => {
|
|
17
|
+
// return toolchainUtils.getReleases(repo);
|
|
18
|
+
return [
|
|
19
|
+
// {
|
|
20
|
+
// tag_name: '2.0.1',
|
|
21
|
+
// published_at: new Date('2023-11-23'),
|
|
22
|
+
// draft: false,
|
|
23
|
+
// },
|
|
24
|
+
// {
|
|
25
|
+
// tag_name: '2.0.0',
|
|
26
|
+
// published_at: new Date('2023-11-21'),
|
|
27
|
+
// draft: false,
|
|
28
|
+
// },
|
|
29
|
+
{
|
|
30
|
+
tag_name: '1.0.0',
|
|
31
|
+
published_at: new Date('2023-10-12'),
|
|
32
|
+
draft: false,
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
};
|
|
36
|
+
|
|
9
37
|
export let isCached = (version: string) => {
|
|
10
38
|
let dir = path.join(cacheDir, version);
|
|
11
39
|
return fs.existsSync(dir) && fs.existsSync(path.join(dir, 'pocket-ic'));
|
|
12
40
|
};
|
|
13
41
|
|
|
14
|
-
export let download = async (version: string, {silent = false} = {}) => {
|
|
42
|
+
export let download = async (version: string, {silent = false, verbose = false} = {}) => {
|
|
15
43
|
if (!version) {
|
|
16
44
|
console.error('version is not defined');
|
|
17
45
|
process.exit(1);
|
|
18
46
|
}
|
|
47
|
+
if (version !== '1.0.0') {
|
|
48
|
+
console.error('Currently only pocket-ic 1.0.0 is supported');
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
19
51
|
if (isCached(version)) {
|
|
52
|
+
if (verbose) {
|
|
53
|
+
console.log(`pocket-ic ${version} is already installed`);
|
|
54
|
+
}
|
|
20
55
|
return;
|
|
21
56
|
}
|
|
22
57
|
|
|
@@ -24,14 +59,16 @@ export let download = async (version: string, {silent = false} = {}) => {
|
|
|
24
59
|
let arch = 'x86_64';
|
|
25
60
|
|
|
26
61
|
let hashes: Record<string, string> = {
|
|
27
|
-
'2.0.1': '69e1408347723dbaa7a6cd2faa9b65c42abbe861',
|
|
28
|
-
'2.0.0': '29ec86dc9f9ca4691d4d4386c8b2aa41e14d9d16',
|
|
62
|
+
// '2.0.1': '69e1408347723dbaa7a6cd2faa9b65c42abbe861',
|
|
63
|
+
// '2.0.0': '29ec86dc9f9ca4691d4d4386c8b2aa41e14d9d16',
|
|
29
64
|
'1.0.0': '307d5847c1d2fe1f5e19181c7d0fcec23f4658b3',
|
|
30
65
|
};
|
|
31
66
|
|
|
32
67
|
let url = `https://download.dfinity.systems/ic/${hashes[version]}/openssl-static-binaries/${arch}-${platfrom}/pocket-ic.gz`;
|
|
33
68
|
|
|
34
|
-
|
|
69
|
+
if (verbose && !silent) {
|
|
70
|
+
console.log(`Downloading ${url}`);
|
|
71
|
+
}
|
|
35
72
|
|
|
36
|
-
await downloadAndExtract(url, path.join(cacheDir, version));
|
|
73
|
+
await toolchainUtils.downloadAndExtract(url, path.join(cacheDir, version));
|
|
37
74
|
};
|
|
@@ -30,12 +30,12 @@ export let downloadAndExtract = async (url: string, dest: string) => {
|
|
|
30
30
|
fs.mkdirSync(dest, {recursive: true});
|
|
31
31
|
|
|
32
32
|
if (archive.endsWith('.xz')) {
|
|
33
|
-
await decompress(archive,
|
|
34
|
-
strip: 1,
|
|
33
|
+
await decompress(archive, tmpDir, {
|
|
35
34
|
plugins: [decompressTarxz()],
|
|
36
35
|
}).catch(() => {
|
|
37
36
|
deleteSync([tmpDir]);
|
|
38
37
|
});
|
|
38
|
+
fs.cpSync(path.join(tmpDir, path.parse(archive).name.replace('.tar', '')), dest, {recursive: true});
|
|
39
39
|
}
|
|
40
40
|
else if (archive.endsWith('tar.gz')) {
|
|
41
41
|
await tar.extract({
|
|
@@ -52,10 +52,14 @@ export let downloadAndExtract = async (url: string, dest: string) => {
|
|
|
52
52
|
deleteSync([tmpDir], {force: true});
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
export let getLatestReleaseTag = async (repo: string): Promise<string
|
|
55
|
+
export let getLatestReleaseTag = async (repo: string): Promise<string> => {
|
|
56
56
|
let releases = await getReleases(repo);
|
|
57
57
|
let release = releases.find((release: any) => !release.prerelease && !release.draft);
|
|
58
|
-
|
|
58
|
+
if (!release?.tag_name) {
|
|
59
|
+
console.error(`Failed to fetch latest release tag for ${repo}`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
return release.tag_name.replace(/^v/, '');
|
|
59
63
|
};
|
|
60
64
|
|
|
61
65
|
export let getReleases = async (repo: string) => {
|
|
@@ -70,5 +74,10 @@ export let getReleases = async (repo: string) => {
|
|
|
70
74
|
console.log('Releases fetch error');
|
|
71
75
|
process.exit(1);
|
|
72
76
|
}
|
|
73
|
-
return res.data
|
|
77
|
+
return res.data.map((release: any) => {
|
|
78
|
+
return {
|
|
79
|
+
...release,
|
|
80
|
+
tag_name: release.tag_name.replace(/^v/, ''),
|
|
81
|
+
};
|
|
82
|
+
});
|
|
74
83
|
};
|
|
@@ -2,21 +2,34 @@ import path from 'node:path';
|
|
|
2
2
|
import fs from 'fs-extra';
|
|
3
3
|
|
|
4
4
|
import {globalCacheDir} from '../../mops.js';
|
|
5
|
-
import
|
|
5
|
+
import * as toolchainUtils from './toolchain-utils.js';
|
|
6
6
|
|
|
7
7
|
let cacheDir = path.join(globalCacheDir, 'wasmtime');
|
|
8
8
|
|
|
9
|
+
export let repo = 'bytecodealliance/wasmtime';
|
|
10
|
+
|
|
11
|
+
export let getLatestReleaseTag = async () => {
|
|
12
|
+
return toolchainUtils.getLatestReleaseTag(repo);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export let getReleases = async () => {
|
|
16
|
+
return toolchainUtils.getReleases(repo);
|
|
17
|
+
};
|
|
18
|
+
|
|
9
19
|
export let isCached = (version: string) => {
|
|
10
20
|
let dir = path.join(cacheDir, version);
|
|
11
21
|
return fs.existsSync(dir) && fs.existsSync(path.join(dir, 'wasmtime'));
|
|
12
22
|
};
|
|
13
23
|
|
|
14
|
-
export let download = async (version: string, {silent = false} = {}) => {
|
|
24
|
+
export let download = async (version: string, {silent = false, verbose = false} = {}) => {
|
|
15
25
|
if (!version) {
|
|
16
26
|
console.error('version is not defined');
|
|
17
27
|
process.exit(1);
|
|
18
28
|
}
|
|
19
29
|
if (isCached(version)) {
|
|
30
|
+
if (verbose) {
|
|
31
|
+
console.log(`wasmtime ${version} is already installed`);
|
|
32
|
+
}
|
|
20
33
|
return;
|
|
21
34
|
}
|
|
22
35
|
|
|
@@ -24,7 +37,9 @@ export let download = async (version: string, {silent = false} = {}) => {
|
|
|
24
37
|
let arch = process.arch.startsWith('arm') ? 'aarch64' : 'x86_64';
|
|
25
38
|
let url = `https://github.com/bytecodealliance/wasmtime/releases/download/v${version}/wasmtime-v${version}-${arch}-${platfrom}.tar.xz`;
|
|
26
39
|
|
|
27
|
-
|
|
40
|
+
if (verbose && !silent) {
|
|
41
|
+
console.log(`Downloading ${url}`);
|
|
42
|
+
}
|
|
28
43
|
|
|
29
|
-
await downloadAndExtract(url, path.join(cacheDir, version));
|
|
44
|
+
await toolchainUtils.downloadAndExtract(url, path.join(cacheDir, version));
|
|
30
45
|
};
|
package/dist/bin/mops.js
CHANGED
|
File without changes
|
package/dist/cache.js
CHANGED
|
@@ -32,7 +32,7 @@ export let copyCache = (pkgId, dest) => {
|
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
export let cacheSize = async () => {
|
|
35
|
-
let dir = path.join(globalCacheDir
|
|
35
|
+
let dir = path.join(globalCacheDir);
|
|
36
36
|
fs.mkdirSync(dir, { recursive: true });
|
|
37
37
|
let size = await getFolderSize.strict(dir);
|
|
38
38
|
if (size < 1024 * 1024) {
|
|
@@ -41,6 +41,6 @@ export let cacheSize = async () => {
|
|
|
41
41
|
return (size / 1024 / 1024).toFixed(2) + ' MB';
|
|
42
42
|
};
|
|
43
43
|
export let cleanCache = async () => {
|
|
44
|
-
let dir = path.join(globalCacheDir
|
|
44
|
+
let dir = path.join(globalCacheDir);
|
|
45
45
|
fs.rmSync(dir, { recursive: true, force: true });
|
|
46
46
|
};
|
package/dist/cli.js
CHANGED
|
@@ -84,6 +84,7 @@ program
|
|
|
84
84
|
if (!compatible) {
|
|
85
85
|
return;
|
|
86
86
|
}
|
|
87
|
+
await toolchain.ensureToolchainInited({ strict: false });
|
|
87
88
|
if (pkg) {
|
|
88
89
|
// @deprecated
|
|
89
90
|
console.log(chalk.yellow('Consider using the \'mops add\' command to install a specific package.'));
|
|
@@ -91,6 +92,7 @@ program
|
|
|
91
92
|
}
|
|
92
93
|
else {
|
|
93
94
|
await installAll(options);
|
|
95
|
+
await toolchain.installAll(options);
|
|
94
96
|
}
|
|
95
97
|
});
|
|
96
98
|
// publish
|
|
@@ -144,6 +146,7 @@ program
|
|
|
144
146
|
process.exit(1);
|
|
145
147
|
}
|
|
146
148
|
await installAll({ silent: true, lock: 'ignore' });
|
|
149
|
+
await toolchain.ensureToolchainInited({ strict: false });
|
|
147
150
|
let sourcesArr = await sources(options);
|
|
148
151
|
console.log(sourcesArr.join('\n'));
|
|
149
152
|
});
|
|
@@ -297,28 +300,43 @@ toolchainCommand
|
|
|
297
300
|
.command('init')
|
|
298
301
|
.description('One-time initialization of toolchain management')
|
|
299
302
|
.action(async () => {
|
|
300
|
-
toolchain.init();
|
|
303
|
+
await toolchain.init();
|
|
301
304
|
});
|
|
302
305
|
toolchainCommand
|
|
303
306
|
.command('reset')
|
|
304
307
|
.description('Uninstall toolchain management')
|
|
305
308
|
.action(async () => {
|
|
306
|
-
toolchain.init({ reset: true });
|
|
309
|
+
await toolchain.init({ reset: true });
|
|
307
310
|
});
|
|
308
311
|
toolchainCommand
|
|
309
312
|
.command('use')
|
|
310
313
|
.description('Install specified tool version and update mops.toml')
|
|
311
314
|
.addArgument(new Argument('<tool>').choices(['moc', 'wasmtime', 'pocket-ic']))
|
|
312
|
-
.addArgument(new Argument('
|
|
315
|
+
.addArgument(new Argument('[version]'))
|
|
313
316
|
.action(async (tool, version) => {
|
|
314
|
-
|
|
317
|
+
if (!checkConfigFile()) {
|
|
318
|
+
process.exit(1);
|
|
319
|
+
}
|
|
320
|
+
await toolchain.use(tool, version);
|
|
321
|
+
});
|
|
322
|
+
toolchainCommand
|
|
323
|
+
.command('update')
|
|
324
|
+
.description('Update specified tool or all tools to the latest version and update mops.toml')
|
|
325
|
+
.addArgument(new Argument('[tool]').choices(['moc', 'wasmtime', 'pocket-ic']))
|
|
326
|
+
.action(async (tool) => {
|
|
327
|
+
if (!checkConfigFile()) {
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
await toolchain.update(tool);
|
|
315
331
|
});
|
|
316
332
|
toolchainCommand
|
|
317
333
|
.command('bin')
|
|
318
334
|
.description('Get path to the tool binary\n<tool> can be one of "moc", "wasmtime", "pocket-ic"')
|
|
319
335
|
.addArgument(new Argument('<tool>').choices(['moc', 'wasmtime', 'pocket-ic']))
|
|
320
|
-
.
|
|
321
|
-
|
|
336
|
+
.addOption(new Option('--fallback', 'Fallback to the moc that comes with dfx if moc is not specified in the [toolchain] section'))
|
|
337
|
+
.action(async (tool, options) => {
|
|
338
|
+
let bin = await toolchain.bin(tool, options);
|
|
339
|
+
console.log(bin);
|
|
322
340
|
});
|
|
323
341
|
program.addCommand(toolchainCommand);
|
|
324
342
|
program.parse();
|
package/dist/commands/add.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import
|
|
3
|
+
import { createLogUpdate } from 'log-update';
|
|
4
4
|
import { checkConfigFile, getGithubCommit, parseGithubURL, readConfig, writeConfig } from '../mops.js';
|
|
5
5
|
import { getHighestVersion } from '../api/getHighestVersion.js';
|
|
6
6
|
import { installFromGithub } from '../vessel.js';
|
|
@@ -91,6 +91,7 @@ export async function add(name, { verbose = false, dev = false, lock } = {}, asN
|
|
|
91
91
|
throw Error(`Invalid config file: [${depsProp}] not found`);
|
|
92
92
|
}
|
|
93
93
|
writeConfig(config);
|
|
94
|
+
let logUpdate = createLogUpdate(process.stdout, { showCursor: true });
|
|
94
95
|
if (lock !== 'ignore') {
|
|
95
96
|
logUpdate('Checking integrity...');
|
|
96
97
|
}
|