Skip to content

Commit c879c6e

Browse files
committed
Augment Pyodide with pre-fetched packages details
1 parent 59c140e commit c879c6e

20 files changed

+8404
-206
lines changed

docs/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/zip-COrdYVp5.js

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/zip-COrdYVp5.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/zip-CakRHzZu.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/zip-CakRHzZu.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

esm/interpreter/pyodide.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const type = 'pyodide';
88
const toJsOptions = { dict_converter: Object.fromEntries };
99

1010
const { stringify } = JSON;
11+
const { hasOwn } = Object;
1112

1213
const { apply } = Reflect;
1314
const FunctionPrototype = Function.prototype;
@@ -70,12 +71,33 @@ const indexURLs = new WeakMap();
7071

7172
export default {
7273
type,
73-
module: (version = '0.28.3') =>
74+
module: (version = '0.29.0') =>
7475
`https://cdn.jsdelivr.net/pyodide/v${version}/full/pyodide.mjs`,
7576
async engine({ loadPyodide, version }, config, url, baseURL) {
7677
progress('Loading Pyodide');
7778
let { packages, index_urls } = config;
78-
if (packages) packages = packages.map(fixedRelative, baseURL);
79+
if (packages && !index_urls) {
80+
packages = packages.map(fixedRelative, baseURL);
81+
progress('Loading Packages Graph');
82+
const { default: graph } = await import(/* webpackIgnore: true */'./pyodide_graph.js');
83+
progress('Loaded Packages Graph');
84+
if (hasOwn(graph, version)) {
85+
const invalid = packages.filter(entry => {
86+
// consider only packages by name
87+
if (/^[a-zA-Z0-9_-]/.test(entry)) {
88+
const [name, ...rest] = entry.split(/[>=<]=/);
89+
const known = hasOwn(graph[version], name);
90+
return !known || (rest.length > 0 && rest[1] !== graph[version][name]);
91+
}
92+
return false;
93+
});
94+
if (invalid.length > 0) {
95+
throw new Error(
96+
`These packages are not supported in Pyodide ${version}: ${invalid.join(', ')}`
97+
);
98+
}
99+
}
100+
}
79101
progress('Loading Storage');
80102
const indexURL = url.slice(0, url.lastIndexOf('/'));
81103
// each pyodide version shares its own cache

0 commit comments

Comments
 (0)