motoko 2.0.8 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +5 -3
- package/lib/index.d.ts +4 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +12 -8
- package/lib/index.js.map +1 -1
- package/lib/package.d.ts +11 -1
- package/lib/package.d.ts.map +1 -1
- package/lib/package.js +107 -23
- package/lib/package.js.map +1 -1
- package/lib/versions/interpreter.d.ts +2 -1
- package/lib/versions/interpreter.d.ts.map +1 -1
- package/lib/versions/interpreter.js.map +1 -1
- package/lib/versions/moc.d.ts +2 -1
- package/lib/versions/moc.d.ts.map +1 -1
- package/lib/versions/moc.js.map +1 -1
- package/package.json +4 -3
- package/src/index.ts +9 -7
- package/src/package.ts +156 -30
- package/src/versions/interpreter.ts +2 -2
- package/src/versions/moc.ts +2 -2
package/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
# MotokoJS · [![npm version](https://img.shields.io/npm/v/motoko.svg?logo=npm)](https://www.npmjs.com/package/motoko) [![GitHub license](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/dfinity/motoko/issues)
|
3
3
|
|
4
|
-
>
|
4
|
+
> #### Compile and run [Motoko](https://smartcontracts.org/) smart contracts in Node.js or the browser.
|
5
5
|
|
6
6
|
---
|
7
7
|
|
@@ -102,8 +102,10 @@ mo.delete(path)
|
|
102
102
|
// List the files in a virtual directory
|
103
103
|
mo.list(path)
|
104
104
|
|
105
|
+
await mo.fetchPackage({name: '', repo: ''});
|
106
|
+
|
105
107
|
// Try to load packages from GitHub and/or jsDelivr
|
106
|
-
await mo.loadPackages({ packageName: repositoryPath, ... })
|
108
|
+
await mo.loadPackages({ [packageName]: repositoryPath, ... })
|
107
109
|
|
108
110
|
// Use a virtual directory as a package
|
109
111
|
mo.addPackage(packageName, directory)
|
@@ -137,7 +139,7 @@ mo.parseMotoko(motokoString)
|
|
137
139
|
// Return the parse tree for a Candid string
|
138
140
|
mo.parseCandid(candidString)
|
139
141
|
|
140
|
-
// Get the version
|
142
|
+
// Get the compiler version ('latest' by default)
|
141
143
|
mo.version
|
142
144
|
|
143
145
|
// Access the underlying Motoko compiler
|
package/lib/index.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { PackageInfo } from './package';
|
2
|
-
export declare type Motoko = ReturnType<typeof
|
2
|
+
export declare type Motoko = ReturnType<typeof wrapMotoko>;
|
3
3
|
declare type Compiler = any;
|
4
4
|
export declare type Diagnostic = {
|
5
5
|
code?: string | number | {
|
@@ -22,7 +22,7 @@ export declare type Diagnostic = {
|
|
22
22
|
tags?: string[];
|
23
23
|
};
|
24
24
|
export declare type WasmMode = 'ic' | 'wasi';
|
25
|
-
export default function
|
25
|
+
export default function wrapMotoko(compiler: Compiler, version: string): {
|
26
26
|
version: string;
|
27
27
|
compiler: any;
|
28
28
|
file(path: string): {
|
@@ -44,12 +44,13 @@ export default function getMotoko(compiler: Compiler, version: string): {
|
|
44
44
|
parseMotoko(): object;
|
45
45
|
parseCandid(): object;
|
46
46
|
};
|
47
|
-
loadPackages(packages: Record<string, string | PackageInfo>): Promise<void>;
|
48
47
|
read(path: string): string;
|
49
48
|
write(path: string, content?: string): void;
|
50
49
|
rename(path: string, newPath: string): void;
|
51
50
|
delete(path: string): void;
|
52
51
|
list(directory: string): string[];
|
52
|
+
fetchPackage(info: string | PackageInfo): Promise<import("./package").Package>;
|
53
|
+
loadPackages(packages: Record<string, string | PackageInfo>): Promise<void>;
|
53
54
|
addPackage(name: string, directory: string): void;
|
54
55
|
clearPackages(): void;
|
55
56
|
setAliases(aliases: string): void;
|
package/lib/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,WAAW,EAAE,MAAM,WAAW,CAAC;AAEpE,oBAAY,MAAM,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAEnD,aAAK,QAAQ,GAAG,GAAG,CAAC;AAGpB,oBAAY,UAAU,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACH,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3C,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5C,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,oBAAY,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;AAErC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;;;eA2CnD,MAAM;;;;;;;;;;oBAmDJ,MAAM;oBAAU,MAAM;oBAAU,MAAM,GAAG,MAAM;;;;;;;eAhDjD,MAAM,GAAG,MAAM;gBAGd,MAAM,YAAW,MAAM;iBAOtB,MAAM,WAAW,MAAM;iBAGvB,MAAM;oBAIH,MAAM,GAAG,MAAM,EAAE;uBAGR,MAAM,GAAG,WAAW;2BAGhB,OAAO,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC;qBAGhD,MAAM,aAAa,MAAM;;wBAQtB,MAAM;wBAIN,MAAM;gBAGd,MAAM,GAAG,UAAU,EAAE;cAKvB,MAAM,aACD,MAAM,EAAE,GAAG,SAAS,GAChC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;iBAGjD,MAAM,GAAG,MAAM;eAGjB,MAAM,QAAQ,QAAQ;yBAQZ,MAAM,GAAG,MAAM;yBAGf,MAAM,GAAG,MAAM;EAO3C"}
|
package/lib/index.js
CHANGED
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
12
|
const file_1 = require("./file");
|
13
13
|
const package_1 = require("./package");
|
14
|
-
function
|
14
|
+
function wrapMotoko(compiler, version) {
|
15
15
|
const debug = require('debug')(version ? `motoko:${version}` : 'motoko');
|
16
16
|
const invoke = (key, unwrap, args) => {
|
17
17
|
if (!compiler) {
|
@@ -50,12 +50,6 @@ function getMotoko(compiler, version) {
|
|
50
50
|
file(path) {
|
51
51
|
return (0, file_1.file)(mo, path);
|
52
52
|
},
|
53
|
-
// findPackage,
|
54
|
-
loadPackages(packages) {
|
55
|
-
return __awaiter(this, void 0, void 0, function* () {
|
56
|
-
return (0, package_1.loadPackages)(mo, packages);
|
57
|
-
});
|
58
|
-
},
|
59
53
|
read(path) {
|
60
54
|
return invoke('readFile', false, [path]);
|
61
55
|
},
|
@@ -76,6 +70,16 @@ function getMotoko(compiler, version) {
|
|
76
70
|
list(directory) {
|
77
71
|
return invoke('readDir', false, [directory]);
|
78
72
|
},
|
73
|
+
fetchPackage(info) {
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
75
|
+
return (0, package_1.fetchPackage)(info);
|
76
|
+
});
|
77
|
+
},
|
78
|
+
loadPackages(packages) {
|
79
|
+
return __awaiter(this, void 0, void 0, function* () {
|
80
|
+
return (0, package_1.loadPackages)(mo, packages);
|
81
|
+
});
|
82
|
+
},
|
79
83
|
addPackage(name, directory) {
|
80
84
|
debug('+package', name, directory);
|
81
85
|
invoke('addPackage', false, [name, directory]);
|
@@ -121,5 +125,5 @@ function getMotoko(compiler, version) {
|
|
121
125
|
mo.default = mo;
|
122
126
|
return mo;
|
123
127
|
}
|
124
|
-
exports.default =
|
128
|
+
exports.default = wrapMotoko;
|
125
129
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,iCAA8B;AAC9B,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/package.d.ts
CHANGED
@@ -3,8 +3,18 @@ export interface PackageInfo {
|
|
3
3
|
name: string;
|
4
4
|
repo: string;
|
5
5
|
version: string;
|
6
|
-
dir
|
6
|
+
dir?: string;
|
7
7
|
branch?: string | undefined;
|
8
8
|
}
|
9
|
+
export interface Package {
|
10
|
+
name: string;
|
11
|
+
version: string;
|
12
|
+
files: PackageFiles;
|
13
|
+
}
|
14
|
+
export declare type PackageFiles = Record<string, PackageFile>;
|
15
|
+
export interface PackageFile {
|
16
|
+
content: string;
|
17
|
+
}
|
18
|
+
export declare function fetchPackage(info: string | PackageInfo): Promise<Package | undefined>;
|
9
19
|
export declare function loadPackages(mo: Motoko, packages: Record<string, string | PackageInfo>): Promise<void>;
|
10
20
|
//# sourceMappingURL=package.d.ts.map
|
package/lib/package.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../src/package.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAE3B,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;
|
1
|
+
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../src/package.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAE3B,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;CACvB;AAED,oBAAY,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEvD,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,CAAC;CACnB;AA+PD,wBAAsB,YAAY,CAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,GAC3B,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAa9B;AAED,wBAAsB,YAAY,CAC9B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,iBAWjD"}
|
package/lib/package.js
CHANGED
@@ -13,11 +13,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
13
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
14
14
|
};
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
16
|
-
exports.loadPackages = void 0;
|
16
|
+
exports.loadPackages = exports.fetchPackage = void 0;
|
17
17
|
// @ts-ignore
|
18
18
|
const isomorphic_parse_github_url_1 = __importDefault(require("isomorphic-parse-github-url"));
|
19
19
|
const cross_fetch_1 = __importDefault(require("cross-fetch"));
|
20
|
-
|
20
|
+
// TODO: call `fetchPackage` instead of deprecated functions
|
21
|
+
function loadPackage(mo, info) {
|
21
22
|
return __awaiter(this, void 0, void 0, function* () {
|
22
23
|
if (!info.repo.startsWith('https://github.com/') ||
|
23
24
|
!info.repo.endsWith('.git')) {
|
@@ -30,25 +31,26 @@ function fetchPackage(mo, info) {
|
|
30
31
|
branch: info.version,
|
31
32
|
dir: info.dir || 'src',
|
32
33
|
};
|
33
|
-
const result = yield
|
34
|
+
const result = yield fetchGithub_(mo, repo, info.name);
|
34
35
|
if (result) {
|
35
36
|
mo.addPackage(info.name, info.name + '/');
|
36
37
|
}
|
37
38
|
return result ? true : false;
|
38
39
|
});
|
39
40
|
}
|
40
|
-
|
41
|
+
/** @deprecated */
|
42
|
+
function fetchGithub_(mo, info, directory = '') {
|
41
43
|
return __awaiter(this, void 0, void 0, function* () {
|
42
44
|
const possiblyCDN = !((info.branch.length % 2 === 0 && /^[A-F0-9]+$/i.test(info.branch)) ||
|
43
45
|
info.branch === 'master' ||
|
44
46
|
info.branch === 'main');
|
45
47
|
if (possiblyCDN) {
|
46
|
-
const result = yield
|
48
|
+
const result = yield fetchFromCDN_(mo, info, directory);
|
47
49
|
if (result) {
|
48
50
|
return result;
|
49
51
|
}
|
50
52
|
}
|
51
|
-
return yield
|
53
|
+
return yield fetchFromGithub_(mo, info, directory);
|
52
54
|
});
|
53
55
|
}
|
54
56
|
// function saveWorkplaceToMotoko(mo, files) {
|
@@ -57,7 +59,8 @@ function fetchGithub(mo, info, directory = '') {
|
|
57
59
|
// mo.addFile(name, code);
|
58
60
|
// }
|
59
61
|
// }
|
60
|
-
|
62
|
+
/** @deprecated */
|
63
|
+
function fetchFromCDN_(mo, info, directory = '') {
|
61
64
|
return __awaiter(this, void 0, void 0, function* () {
|
62
65
|
const meta_url = `https://data.jsdelivr.com/v1/package/gh/${info.repo}@${info.branch}/flat`;
|
63
66
|
const base_url = `https://cdn.jsdelivr.net/gh/${info.repo}@${info.branch}`;
|
@@ -88,7 +91,8 @@ function fetchFromCDN(mo, info, directory = '') {
|
|
88
91
|
});
|
89
92
|
});
|
90
93
|
}
|
91
|
-
|
94
|
+
/** @deprecated */
|
95
|
+
function fetchFromGithub_(mo, info, directory = '') {
|
92
96
|
return __awaiter(this, void 0, void 0, function* () {
|
93
97
|
const meta_url = `https://api.github.com/repos/${info.repo}/git/trees/${info.branch}?recursive=1`;
|
94
98
|
const base_url = `https://raw.githubusercontent.com/${info.repo}/${info.branch}/`;
|
@@ -122,9 +126,7 @@ function fetchFromGithub(mo, info, directory = '') {
|
|
122
126
|
});
|
123
127
|
});
|
124
128
|
}
|
125
|
-
|
126
|
-
// }
|
127
|
-
function parseGithubPackage(path, name) {
|
129
|
+
function parseGithubPackageInfo(path) {
|
128
130
|
if (!path) {
|
129
131
|
return;
|
130
132
|
}
|
@@ -139,30 +141,112 @@ function parseGithubPackage(path, name) {
|
|
139
141
|
}
|
140
142
|
}
|
141
143
|
catch (err) {
|
142
|
-
console.warn(err);
|
144
|
+
// console.warn(err);
|
145
|
+
return;
|
143
146
|
}
|
144
|
-
const { name
|
147
|
+
const { name, filepath, branch, owner } = result;
|
145
148
|
return {
|
146
|
-
name
|
147
|
-
repo: `https://github.com/${owner}/${
|
149
|
+
name,
|
150
|
+
repo: `https://github.com/${owner}/${name}.git`,
|
148
151
|
version: branch,
|
149
152
|
dir: filepath,
|
153
|
+
branch,
|
150
154
|
// homepage: ,
|
151
155
|
};
|
152
156
|
}
|
157
|
+
function fetchPackageFiles(info) {
|
158
|
+
return __awaiter(this, void 0, void 0, function* () {
|
159
|
+
const prefix = 'https://github.com/';
|
160
|
+
const suffix = '.git';
|
161
|
+
if (!info.repo.startsWith(prefix) || !info.repo.endsWith(suffix)) {
|
162
|
+
return;
|
163
|
+
}
|
164
|
+
const repoPart = info.repo.slice(prefix.length, -suffix.length);
|
165
|
+
// TODO: modify condition?
|
166
|
+
const possiblyCDN = !((info.branch &&
|
167
|
+
info.branch.length % 2 === 0 &&
|
168
|
+
/^[A-F0-9]+$/i.test(info.branch)) ||
|
169
|
+
info.branch === 'master' ||
|
170
|
+
info.branch === 'main');
|
171
|
+
if (possiblyCDN) {
|
172
|
+
const result = yield fetchFromService(info, 'CDN', `https://data.jsdelivr.com/v1/package/gh/${repoPart}@${info.branch}/flat`, `https://cdn.jsdelivr.net/gh/${repoPart}@${info.branch}`, 'files', 'name');
|
173
|
+
if (result === null || result === void 0 ? void 0 : result.length) {
|
174
|
+
return result;
|
175
|
+
}
|
176
|
+
}
|
177
|
+
return yield fetchFromService(info, 'GitHub', `https://api.github.com/repos/${repoPart}/git/trees/${info.branch}?recursive=1`, `https://raw.githubusercontent.com/${repoPart}/${info.branch}/`, 'tree', 'path', (file) => file.type === 'blob');
|
178
|
+
});
|
179
|
+
}
|
180
|
+
function fetchFromService(info, serviceName, metaUrl, baseUrl, resultProperty, pathProperty, condition) {
|
181
|
+
return __awaiter(this, void 0, void 0, function* () {
|
182
|
+
const response = yield (0, cross_fetch_1.default)(metaUrl);
|
183
|
+
if (!response.ok) {
|
184
|
+
throw Error(response.statusText ||
|
185
|
+
`Could not fetch from ${serviceName}: ${info.repo}`);
|
186
|
+
}
|
187
|
+
const json = yield response.json();
|
188
|
+
if (!json.hasOwnProperty(resultProperty)) {
|
189
|
+
throw new Error(`Unexpected response from ${serviceName}`);
|
190
|
+
}
|
191
|
+
// Remove leading and trailing '/' from directory
|
192
|
+
let directory = info.dir
|
193
|
+
? info.dir.replace(/^\//, '').replace(/\/$/, '')
|
194
|
+
: '';
|
195
|
+
const files = {};
|
196
|
+
yield Promise.all(json[resultProperty]
|
197
|
+
.filter((file) => {
|
198
|
+
return ((!directory ||
|
199
|
+
file[pathProperty].startsWith(file[pathProperty].startsWith('/')
|
200
|
+
? `/${directory}`
|
201
|
+
: directory)) &&
|
202
|
+
(!condition || condition(file)) &&
|
203
|
+
/\.mo$/.test(file[pathProperty]));
|
204
|
+
})
|
205
|
+
.map((file) => __awaiter(this, void 0, void 0, function* () {
|
206
|
+
const response = yield (0, cross_fetch_1.default)(`${baseUrl}${file[pathProperty]}`);
|
207
|
+
if (!response.ok) {
|
208
|
+
throw Error(response.statusText);
|
209
|
+
}
|
210
|
+
const content = yield response.text();
|
211
|
+
let path = file[pathProperty];
|
212
|
+
if (path.startsWith('/')) {
|
213
|
+
path = path.slice(1);
|
214
|
+
}
|
215
|
+
if (directory) {
|
216
|
+
// Remove directory prefix
|
217
|
+
path = path.slice(directory.length + 1);
|
218
|
+
}
|
219
|
+
files[path] = {
|
220
|
+
content,
|
221
|
+
};
|
222
|
+
})));
|
223
|
+
return files;
|
224
|
+
});
|
225
|
+
}
|
226
|
+
function fetchPackage(info) {
|
227
|
+
return __awaiter(this, void 0, void 0, function* () {
|
228
|
+
if (typeof info === 'string') {
|
229
|
+
info = parseGithubPackageInfo(info);
|
230
|
+
}
|
231
|
+
const files = yield fetchPackageFiles(info);
|
232
|
+
if (!files) {
|
233
|
+
return;
|
234
|
+
}
|
235
|
+
return {
|
236
|
+
name: info.name,
|
237
|
+
version: info.version,
|
238
|
+
files,
|
239
|
+
};
|
240
|
+
});
|
241
|
+
}
|
242
|
+
exports.fetchPackage = fetchPackage;
|
153
243
|
function loadPackages(mo, packages) {
|
154
244
|
return __awaiter(this, void 0, void 0, function* () {
|
155
245
|
yield Promise.all(Object.entries(packages).map(([name, path]) => {
|
156
|
-
const info =
|
157
|
-
return
|
246
|
+
const info = Object.assign(Object.assign({}, parseGithubPackageInfo(path)), { name });
|
247
|
+
return loadPackage(mo, info);
|
158
248
|
}));
|
159
249
|
});
|
160
250
|
}
|
161
251
|
exports.loadPackages = loadPackages;
|
162
|
-
// export async function findPackage(package) {
|
163
|
-
// if (typeof package === 'string') {
|
164
|
-
// return resolve(package);
|
165
|
-
// }
|
166
|
-
// return package;
|
167
|
-
// },
|
168
252
|
//# sourceMappingURL=package.js.map
|
package/lib/package.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"package.js","sourceRoot":"","sources":["../src/package.ts"],"names":[],"mappings":";AAAA,2FAA2F;;;;;;;;;;;;;;;AAE3F,aAAa;AACb,8FAA+D;AAC/D,8DAAgC;
|
1
|
+
{"version":3,"file":"package.js","sourceRoot":"","sources":["../src/package.ts"],"names":[],"mappings":"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"}
|
@@ -20,12 +20,13 @@ declare const _default: {
|
|
20
20
|
parseMotoko(): object;
|
21
21
|
parseCandid(): object;
|
22
22
|
};
|
23
|
-
loadPackages(packages: Record<string, string | import("../package").PackageInfo>): Promise<void>;
|
24
23
|
read(path: string): string;
|
25
24
|
write(path: string, content?: string): void;
|
26
25
|
rename(path: string, newPath: string): void;
|
27
26
|
delete(path: string): void;
|
28
27
|
list(directory: string): string[];
|
28
|
+
fetchPackage(info: string | import("../package").PackageInfo): Promise<import("../package").Package>;
|
29
|
+
loadPackages(packages: Record<string, string | import("../package").PackageInfo>): Promise<void>;
|
29
30
|
addPackage(name: string, directory: string): void;
|
30
31
|
clearPackages(): void;
|
31
32
|
setAliases(aliases: string): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../src/versions/interpreter.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../src/versions/interpreter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAAwD"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../../src/versions/interpreter.ts"],"names":[],"mappings":";;;;;AAAA,
|
1
|
+
{"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../../src/versions/interpreter.ts"],"names":[],"mappings":";;;;;AAAA,2CAA4B;AAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,2CAA2C,CAAC,CAAC;AAExE,kBAAe,IAAA,WAAU,EAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC"}
|
package/lib/versions/moc.d.ts
CHANGED
@@ -20,12 +20,13 @@ declare const _default: {
|
|
20
20
|
parseMotoko(): object;
|
21
21
|
parseCandid(): object;
|
22
22
|
};
|
23
|
-
loadPackages(packages: Record<string, string | import("../package").PackageInfo>): Promise<void>;
|
24
23
|
read(path: string): string;
|
25
24
|
write(path: string, content?: string): void;
|
26
25
|
rename(path: string, newPath: string): void;
|
27
26
|
delete(path: string): void;
|
28
27
|
list(directory: string): string[];
|
28
|
+
fetchPackage(info: string | import("../package").PackageInfo): Promise<import("../package").Package>;
|
29
|
+
loadPackages(packages: Record<string, string | import("../package").PackageInfo>): Promise<void>;
|
29
30
|
addPackage(name: string, directory: string): void;
|
30
31
|
clearPackages(): void;
|
31
32
|
setAliases(aliases: string): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moc.d.ts","sourceRoot":"","sources":["../../src/versions/moc.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"moc.d.ts","sourceRoot":"","sources":["../../src/versions/moc.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAA4C"}
|
package/lib/versions/moc.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moc.js","sourceRoot":"","sources":["../../src/versions/moc.ts"],"names":[],"mappings":";;;;;AAAA,
|
1
|
+
{"version":3,"file":"moc.js","sourceRoot":"","sources":["../../src/versions/moc.ts"],"names":[],"mappings":";;;;;AAAA,2CAA4B;AAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAE5D,kBAAe,IAAA,WAAU,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC"}
|
package/package.json
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
{
|
2
2
|
"name": "motoko",
|
3
|
-
"version": "2.0
|
4
|
-
"description": "Compile Motoko smart contracts in Node.js
|
3
|
+
"version": "2.1.0",
|
4
|
+
"description": "Compile and run Motoko smart contracts in Node.js or the browser.",
|
5
5
|
"author": "Ryan Vandersmith (https://github.com/rvanasa)",
|
6
6
|
"license": "Apache-2.0",
|
7
7
|
"main": "./index.js",
|
8
|
-
"types": "
|
8
|
+
"types": "lib/versions/moc.d.ts",
|
9
9
|
"repository": {
|
10
10
|
"type": "git",
|
11
11
|
"url": "https://github.com/dfinity/node-motoko.git"
|
@@ -20,6 +20,7 @@
|
|
20
20
|
},
|
21
21
|
"dependencies": {
|
22
22
|
"cross-fetch": "3.1.5",
|
23
|
+
"debug": "4.3.4",
|
23
24
|
"isomorphic-parse-github-url": "1.0.2"
|
24
25
|
},
|
25
26
|
"devDependencies": {
|
package/src/index.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { file } from './file';
|
2
|
-
import { loadPackages, PackageInfo } from './package';
|
2
|
+
import { fetchPackage, loadPackages, PackageInfo } from './package';
|
3
3
|
|
4
|
-
export type Motoko = ReturnType<typeof
|
4
|
+
export type Motoko = ReturnType<typeof wrapMotoko>;
|
5
5
|
|
6
6
|
type Compiler = any; // TODO
|
7
7
|
|
@@ -20,7 +20,7 @@ export type Diagnostic = {
|
|
20
20
|
|
21
21
|
export type WasmMode = 'ic' | 'wasi';
|
22
22
|
|
23
|
-
export default function
|
23
|
+
export default function wrapMotoko(compiler: Compiler, version: string) {
|
24
24
|
const debug = require('debug')(version ? `motoko:${version}` : 'motoko');
|
25
25
|
|
26
26
|
const invoke = (key: string, unwrap: boolean, args: any[]) => {
|
@@ -66,10 +66,6 @@ export default function getMotoko(compiler: Compiler, version: string) {
|
|
66
66
|
file(path: string) {
|
67
67
|
return file(mo, path);
|
68
68
|
},
|
69
|
-
// findPackage,
|
70
|
-
async loadPackages(packages: Record<string, string | PackageInfo>) {
|
71
|
-
return loadPackages(mo, packages);
|
72
|
-
},
|
73
69
|
read(path: string): string {
|
74
70
|
return invoke('readFile', false, [path]);
|
75
71
|
},
|
@@ -90,6 +86,12 @@ export default function getMotoko(compiler: Compiler, version: string) {
|
|
90
86
|
list(directory: string): string[] {
|
91
87
|
return invoke('readDir', false, [directory]);
|
92
88
|
},
|
89
|
+
async fetchPackage(info: string | PackageInfo) {
|
90
|
+
return fetchPackage(info);
|
91
|
+
},
|
92
|
+
async loadPackages(packages: Record<string, string | PackageInfo>) {
|
93
|
+
return loadPackages(mo, packages);
|
94
|
+
},
|
93
95
|
addPackage(name: string, directory: string) {
|
94
96
|
debug('+package', name, directory);
|
95
97
|
invoke('addPackage', false, [name, directory]);
|
package/src/package.ts
CHANGED
@@ -9,11 +9,24 @@ export interface PackageInfo {
|
|
9
9
|
name: string;
|
10
10
|
repo: string;
|
11
11
|
version: string;
|
12
|
-
dir
|
12
|
+
dir?: string;
|
13
13
|
branch?: string | undefined;
|
14
14
|
}
|
15
15
|
|
16
|
-
|
16
|
+
export interface Package {
|
17
|
+
name: string;
|
18
|
+
version: string;
|
19
|
+
files: PackageFiles;
|
20
|
+
}
|
21
|
+
|
22
|
+
export type PackageFiles = Record<string, PackageFile>;
|
23
|
+
|
24
|
+
export interface PackageFile {
|
25
|
+
content: string;
|
26
|
+
}
|
27
|
+
|
28
|
+
// TODO: call `fetchPackage` instead of deprecated functions
|
29
|
+
async function loadPackage(mo: Motoko, info: PackageInfo) {
|
17
30
|
if (
|
18
31
|
!info.repo.startsWith('https://github.com/') ||
|
19
32
|
!info.repo.endsWith('.git')
|
@@ -27,26 +40,27 @@ async function fetchPackage(mo: Motoko, info: PackageInfo) {
|
|
27
40
|
branch: info.version,
|
28
41
|
dir: info.dir || 'src',
|
29
42
|
};
|
30
|
-
const result = await
|
43
|
+
const result = await fetchGithub_(mo, repo, info.name);
|
31
44
|
if (result) {
|
32
45
|
mo.addPackage(info.name, info.name + '/');
|
33
46
|
}
|
34
47
|
return result ? true : false;
|
35
48
|
}
|
36
49
|
|
37
|
-
|
50
|
+
/** @deprecated */
|
51
|
+
async function fetchGithub_(mo: Motoko, info: PackageInfo, directory = '') {
|
38
52
|
const possiblyCDN = !(
|
39
53
|
(info.branch.length % 2 === 0 && /^[A-F0-9]+$/i.test(info.branch)) ||
|
40
54
|
info.branch === 'master' ||
|
41
55
|
info.branch === 'main'
|
42
56
|
);
|
43
57
|
if (possiblyCDN) {
|
44
|
-
const result = await
|
58
|
+
const result = await fetchFromCDN_(mo, info, directory);
|
45
59
|
if (result) {
|
46
60
|
return result;
|
47
61
|
}
|
48
62
|
}
|
49
|
-
return await
|
63
|
+
return await fetchFromGithub_(mo, info, directory);
|
50
64
|
}
|
51
65
|
|
52
66
|
// function saveWorkplaceToMotoko(mo, files) {
|
@@ -56,7 +70,8 @@ async function fetchGithub(mo: Motoko, info: PackageInfo, directory = '') {
|
|
56
70
|
// }
|
57
71
|
// }
|
58
72
|
|
59
|
-
|
73
|
+
/** @deprecated */
|
74
|
+
async function fetchFromCDN_(mo: Motoko, info: PackageInfo, directory = '') {
|
60
75
|
const meta_url = `https://data.jsdelivr.com/v1/package/gh/${info.repo}@${info.branch}/flat`;
|
61
76
|
const base_url = `https://cdn.jsdelivr.net/gh/${info.repo}@${info.branch}`;
|
62
77
|
const response = await fetch(meta_url);
|
@@ -87,7 +102,8 @@ async function fetchFromCDN(mo: Motoko, info: PackageInfo, directory = '') {
|
|
87
102
|
});
|
88
103
|
}
|
89
104
|
|
90
|
-
|
105
|
+
/** @deprecated */
|
106
|
+
async function fetchFromGithub_(
|
91
107
|
mo: Motoko,
|
92
108
|
info: PackageInfo,
|
93
109
|
directory: string = '',
|
@@ -129,14 +145,7 @@ async function fetchFromGithub(
|
|
129
145
|
});
|
130
146
|
}
|
131
147
|
|
132
|
-
|
133
|
-
|
134
|
-
// }
|
135
|
-
|
136
|
-
function parseGithubPackage(
|
137
|
-
path: string | PackageInfo,
|
138
|
-
name: string,
|
139
|
-
): PackageInfo {
|
148
|
+
function parseGithubPackageInfo(path: string | PackageInfo): PackageInfo {
|
140
149
|
if (!path) {
|
141
150
|
return;
|
142
151
|
}
|
@@ -151,35 +160,152 @@ function parseGithubPackage(
|
|
151
160
|
return;
|
152
161
|
}
|
153
162
|
} catch (err) {
|
154
|
-
console.warn(err);
|
163
|
+
// console.warn(err);
|
164
|
+
return;
|
155
165
|
}
|
156
166
|
|
157
|
-
const { name
|
158
|
-
|
167
|
+
const { name, filepath, branch, owner } = result;
|
159
168
|
return {
|
160
|
-
name
|
161
|
-
repo: `https://github.com/${owner}/${
|
169
|
+
name,
|
170
|
+
repo: `https://github.com/${owner}/${name}.git`,
|
162
171
|
version: branch,
|
163
172
|
dir: filepath,
|
173
|
+
branch,
|
164
174
|
// homepage: ,
|
165
175
|
};
|
166
176
|
}
|
167
177
|
|
178
|
+
async function fetchPackageFiles(
|
179
|
+
info: PackageInfo,
|
180
|
+
): Promise<PackageFiles | undefined> {
|
181
|
+
const prefix = 'https://github.com/';
|
182
|
+
const suffix = '.git';
|
183
|
+
if (!info.repo.startsWith(prefix) || !info.repo.endsWith(suffix)) {
|
184
|
+
return;
|
185
|
+
}
|
186
|
+
const repoPart = info.repo.slice(prefix.length, -suffix.length);
|
187
|
+
|
188
|
+
// TODO: modify condition?
|
189
|
+
const possiblyCDN = !(
|
190
|
+
(info.branch &&
|
191
|
+
info.branch.length % 2 === 0 &&
|
192
|
+
/^[A-F0-9]+$/i.test(info.branch)) ||
|
193
|
+
info.branch === 'master' ||
|
194
|
+
info.branch === 'main'
|
195
|
+
);
|
196
|
+
if (possiblyCDN) {
|
197
|
+
const result = await fetchFromService(
|
198
|
+
info,
|
199
|
+
'CDN',
|
200
|
+
`https://data.jsdelivr.com/v1/package/gh/${repoPart}@${info.branch}/flat`,
|
201
|
+
`https://cdn.jsdelivr.net/gh/${repoPart}@${info.branch}`,
|
202
|
+
'files',
|
203
|
+
'name',
|
204
|
+
);
|
205
|
+
if (result?.length) {
|
206
|
+
return result;
|
207
|
+
}
|
208
|
+
}
|
209
|
+
return await fetchFromService(
|
210
|
+
info,
|
211
|
+
'GitHub',
|
212
|
+
`https://api.github.com/repos/${repoPart}/git/trees/${info.branch}?recursive=1`,
|
213
|
+
`https://raw.githubusercontent.com/${repoPart}/${info.branch}/`,
|
214
|
+
'tree',
|
215
|
+
'path',
|
216
|
+
(file) => file.type === 'blob',
|
217
|
+
);
|
218
|
+
}
|
219
|
+
|
220
|
+
async function fetchFromService(
|
221
|
+
info: PackageInfo,
|
222
|
+
serviceName: string,
|
223
|
+
metaUrl: string,
|
224
|
+
baseUrl: string,
|
225
|
+
resultProperty: string,
|
226
|
+
pathProperty: string,
|
227
|
+
condition?: (file: any) => boolean,
|
228
|
+
): Promise<PackageFiles | undefined> {
|
229
|
+
const response = await fetch(metaUrl);
|
230
|
+
if (!response.ok) {
|
231
|
+
throw Error(
|
232
|
+
response.statusText ||
|
233
|
+
`Could not fetch from ${serviceName}: ${info.repo}`,
|
234
|
+
);
|
235
|
+
}
|
236
|
+
const json = await response.json();
|
237
|
+
if (!json.hasOwnProperty(resultProperty)) {
|
238
|
+
throw new Error(`Unexpected response from ${serviceName}`);
|
239
|
+
}
|
240
|
+
// Remove leading and trailing '/' from directory
|
241
|
+
let directory = info.dir
|
242
|
+
? info.dir.replace(/^\//, '').replace(/\/$/, '')
|
243
|
+
: '';
|
244
|
+
const files: Record<string, PackageFile> = {};
|
245
|
+
await Promise.all(
|
246
|
+
(<any[]>json[resultProperty])
|
247
|
+
.filter((file) => {
|
248
|
+
return (
|
249
|
+
(!directory ||
|
250
|
+
file[pathProperty].startsWith(
|
251
|
+
file[pathProperty].startsWith('/')
|
252
|
+
? `/${directory}`
|
253
|
+
: directory,
|
254
|
+
)) &&
|
255
|
+
(!condition || condition(file)) &&
|
256
|
+
/\.mo$/.test(file[pathProperty])
|
257
|
+
);
|
258
|
+
})
|
259
|
+
.map(async (file) => {
|
260
|
+
const response = await fetch(`${baseUrl}${file[pathProperty]}`);
|
261
|
+
if (!response.ok) {
|
262
|
+
throw Error(response.statusText);
|
263
|
+
}
|
264
|
+
const content = await response.text();
|
265
|
+
let path = file[pathProperty];
|
266
|
+
if (path.startsWith('/')) {
|
267
|
+
path = path.slice(1);
|
268
|
+
}
|
269
|
+
if (directory) {
|
270
|
+
// Remove directory prefix
|
271
|
+
path = path.slice(directory.length + 1);
|
272
|
+
}
|
273
|
+
files[path] = {
|
274
|
+
content,
|
275
|
+
};
|
276
|
+
}),
|
277
|
+
);
|
278
|
+
return files;
|
279
|
+
}
|
280
|
+
|
281
|
+
export async function fetchPackage(
|
282
|
+
info: string | PackageInfo,
|
283
|
+
): Promise<Package | undefined> {
|
284
|
+
if (typeof info === 'string') {
|
285
|
+
info = parseGithubPackageInfo(info);
|
286
|
+
}
|
287
|
+
const files = await fetchPackageFiles(info);
|
288
|
+
if (!files) {
|
289
|
+
return;
|
290
|
+
}
|
291
|
+
return {
|
292
|
+
name: info.name,
|
293
|
+
version: info.version,
|
294
|
+
files,
|
295
|
+
};
|
296
|
+
}
|
297
|
+
|
168
298
|
export async function loadPackages(
|
169
299
|
mo: Motoko,
|
170
300
|
packages: Record<string, string | PackageInfo>,
|
171
301
|
) {
|
172
302
|
await Promise.all(
|
173
303
|
Object.entries(packages).map(([name, path]) => {
|
174
|
-
const info =
|
175
|
-
|
304
|
+
const info = {
|
305
|
+
...parseGithubPackageInfo(path),
|
306
|
+
name,
|
307
|
+
};
|
308
|
+
return loadPackage(mo, info);
|
176
309
|
}),
|
177
310
|
);
|
178
311
|
}
|
179
|
-
|
180
|
-
// export async function findPackage(package) {
|
181
|
-
// if (typeof package === 'string') {
|
182
|
-
// return resolve(package);
|
183
|
-
// }
|
184
|
-
// return package;
|
185
|
-
// },
|
package/src/versions/moc.ts
CHANGED