pyodide 0.25.0-alpha.1 → 0.25.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.
- package/ffi.d.ts +29 -47
- package/package.json +2 -1
- package/pyodide-lock.json +1 -3895
- package/pyodide.asm.js +1 -1
- package/pyodide.asm.wasm +0 -0
- package/pyodide.d.ts +98 -137
- package/pyodide.js +2 -2
- package/pyodide.js.map +2 -2
- package/pyodide.mjs +2 -2
- package/pyodide.mjs.map +2 -2
- package/python_stdlib.zip +0 -0
package/pyodide.asm.wasm
CHANGED
|
Binary file
|
package/pyodide.d.ts
CHANGED
|
@@ -13,10 +13,6 @@ export declare const version: string;
|
|
|
13
13
|
interface PyProxy {
|
|
14
14
|
[x: string]: any;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
* A :js:class:`~pyodide.ffi.PyProxy` is an object that allows idiomatic use of a Python object from
|
|
18
|
-
* JavaScript. See :ref:`type-translations-pyproxy`.
|
|
19
|
-
*/
|
|
20
16
|
declare class PyProxy {
|
|
21
17
|
/** @private */
|
|
22
18
|
$$flags: number;
|
|
@@ -116,58 +112,7 @@ declare class PyProxy {
|
|
|
116
112
|
*/
|
|
117
113
|
default_converter?: (obj: PyProxy, convert: (obj: PyProxy) => any, cacheConversion: (obj: PyProxy, result: any) => void) => any;
|
|
118
114
|
}): any;
|
|
119
|
-
/**
|
|
120
|
-
* Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyProxyWithLength`.
|
|
121
|
-
* @deprecated Use ``obj instanceof pyodide.ffi.PyProxyWithLength`` instead.
|
|
122
|
-
*/
|
|
123
|
-
supportsLength(): this is PyProxyWithLength;
|
|
124
|
-
/**
|
|
125
|
-
* Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyProxyWithGet`.
|
|
126
|
-
* @deprecated Use ``obj instanceof pyodide.ffi.PyProxyWithGet`` instead.
|
|
127
|
-
*/
|
|
128
|
-
supportsGet(): this is PyProxyWithGet;
|
|
129
|
-
/**
|
|
130
|
-
* Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyProxyWithSet`.
|
|
131
|
-
* @deprecated Use ``obj instanceof pyodide.ffi.PyProxyWithSet`` instead.
|
|
132
|
-
*/
|
|
133
|
-
supportsSet(): this is PyProxyWithSet;
|
|
134
|
-
/**
|
|
135
|
-
* Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyProxyWithHas`.
|
|
136
|
-
* @deprecated Use ``obj instanceof pyodide.ffi.PyProxyWithHas`` instead.
|
|
137
|
-
*/
|
|
138
|
-
supportsHas(): this is PyProxyWithHas;
|
|
139
|
-
/**
|
|
140
|
-
* Check whether the :js:class:`~pyodide.ffi.PyProxy` is a
|
|
141
|
-
* :js:class:`~pyodide.ffi.PyIterable`.
|
|
142
|
-
* @deprecated Use ``obj instanceof pyodide.ffi.PyIterable`` instead.
|
|
143
|
-
*/
|
|
144
|
-
isIterable(): this is PyIterable;
|
|
145
|
-
/**
|
|
146
|
-
* Check whether the :js:class:`~pyodide.ffi.PyProxy` is a
|
|
147
|
-
* :js:class:`~pyodide.ffi.PyIterator`
|
|
148
|
-
* @deprecated Use ``obj instanceof pyodide.ffi.PyIterator`` instead.
|
|
149
|
-
*/
|
|
150
|
-
isIterator(): this is PyIterator;
|
|
151
|
-
/**
|
|
152
|
-
* Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyAwaitable`
|
|
153
|
-
* @deprecated Use :js:class:`obj instanceof pyodide.ffi.PyAwaitable <pyodide.ffi.PyAwaitable>` instead.
|
|
154
|
-
*/
|
|
155
|
-
isAwaitable(): this is PyAwaitable;
|
|
156
|
-
/**
|
|
157
|
-
* Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyBuffer`.
|
|
158
|
-
* @deprecated Use ``obj instanceof pyodide.ffi.PyBuffer`` instead.
|
|
159
|
-
*/
|
|
160
|
-
isBuffer(): this is PyBuffer;
|
|
161
|
-
/**
|
|
162
|
-
* Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyCallable`.
|
|
163
|
-
* @deprecated ``obj instanceof pyodide.ffi.PyCallable`` instead.
|
|
164
|
-
*/
|
|
165
|
-
isCallable(): this is PyCallable;
|
|
166
115
|
}
|
|
167
|
-
/**
|
|
168
|
-
* A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a :meth:`~object.__len__`
|
|
169
|
-
* method.
|
|
170
|
-
*/
|
|
171
116
|
declare class PyProxyWithLength extends PyProxy {
|
|
172
117
|
/** @private */
|
|
173
118
|
static [Symbol.hasInstance](obj: any): obj is PyProxy;
|
|
@@ -181,10 +126,6 @@ declare class PyLengthMethods {
|
|
|
181
126
|
*/
|
|
182
127
|
get length(): number;
|
|
183
128
|
}
|
|
184
|
-
/**
|
|
185
|
-
* A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a
|
|
186
|
-
* :meth:`~object.__getitem__` method.
|
|
187
|
-
*/
|
|
188
129
|
declare class PyProxyWithGet extends PyProxy {
|
|
189
130
|
/** @private */
|
|
190
131
|
static [Symbol.hasInstance](obj: any): obj is PyProxy;
|
|
@@ -201,10 +142,6 @@ declare class PyGetItemMethods {
|
|
|
201
142
|
*/
|
|
202
143
|
get(key: any): any;
|
|
203
144
|
}
|
|
204
|
-
/**
|
|
205
|
-
* A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a
|
|
206
|
-
* :meth:`~object.__setitem__` or :meth:`~object.__delitem__` method.
|
|
207
|
-
*/
|
|
208
145
|
declare class PyProxyWithSet extends PyProxy {
|
|
209
146
|
/** @private */
|
|
210
147
|
static [Symbol.hasInstance](obj: any): obj is PyProxy;
|
|
@@ -227,10 +164,6 @@ declare class PySetItemMethods {
|
|
|
227
164
|
*/
|
|
228
165
|
delete(key: any): void;
|
|
229
166
|
}
|
|
230
|
-
/**
|
|
231
|
-
* A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a
|
|
232
|
-
* :meth:`~object.__contains__` method.
|
|
233
|
-
*/
|
|
234
167
|
declare class PyProxyWithHas extends PyProxy {
|
|
235
168
|
/** @private */
|
|
236
169
|
static [Symbol.hasInstance](obj: any): obj is PyProxy;
|
|
@@ -254,8 +187,6 @@ declare class PyIterable extends PyProxy {
|
|
|
254
187
|
/** @deprecated Use `import type { PyIterable } from "pyodide/ffi"` instead */
|
|
255
188
|
interface PyIterable extends PyIterableMethods {
|
|
256
189
|
}
|
|
257
|
-
/** @deprecated Use :js:class:`pyodide.ffi.PyIterable` instead. */
|
|
258
|
-
export type PyProxyIterable = PyIterable;
|
|
259
190
|
declare class PyIterableMethods {
|
|
260
191
|
/**
|
|
261
192
|
* This translates to the Python code ``iter(obj)``. Return an iterator
|
|
@@ -289,8 +220,6 @@ declare class PyIterator extends PyProxy {
|
|
|
289
220
|
/** @deprecated Use `import type { PyIterator } from "pyodide/ffi"` instead */
|
|
290
221
|
interface PyIterator extends PyIteratorMethods {
|
|
291
222
|
}
|
|
292
|
-
/** @deprecated Use :js:class:`pyodide.ffi.PyIterator` instead. */
|
|
293
|
-
export type PyProxyIterator = PyIterator;
|
|
294
223
|
declare class PyIteratorMethods {
|
|
295
224
|
/** @private */
|
|
296
225
|
[Symbol.iterator](): this;
|
|
@@ -689,16 +618,10 @@ declare class PyAwaitable extends PyProxy {
|
|
|
689
618
|
/** @deprecated Use `import type { PyAwaitable } from "pyodide/ffi"` instead */
|
|
690
619
|
interface PyAwaitable extends Promise<any> {
|
|
691
620
|
}
|
|
692
|
-
/** @deprecated Use :js:class:`pyodide.ffi.PyAwaitable` instead. */
|
|
693
|
-
export type PyProxyAwaitable = PyAwaitable;
|
|
694
621
|
declare class PyCallable extends PyProxy {
|
|
695
622
|
/** @private */
|
|
696
623
|
static [Symbol.hasInstance](obj: any): obj is PyCallable;
|
|
697
624
|
}
|
|
698
|
-
/**
|
|
699
|
-
* @deprecated Use :js:class:`pyodide.ffi.PyCallable` instead.
|
|
700
|
-
*/
|
|
701
|
-
export type PyProxyCallable = PyCallable;
|
|
702
625
|
/** @deprecated Use `import type { PyCallable } from "pyodide/ffi"` instead */
|
|
703
626
|
interface PyCallable extends PyCallableMethods {
|
|
704
627
|
(...args: any[]): any;
|
|
@@ -734,7 +657,36 @@ declare class PyCallableMethods {
|
|
|
734
657
|
* object with the keyword arguments.
|
|
735
658
|
*/
|
|
736
659
|
callKwargs(...jsargs: any): any;
|
|
660
|
+
/**
|
|
661
|
+
* Call the function with stack switching enabled. Functions called this way
|
|
662
|
+
* can use
|
|
663
|
+
* :py:meth:`PyodideFuture.syncify() <pyodide.webloop.PyodideFuture.syncify>`
|
|
664
|
+
* to block until a :py:class:`~asyncio.Future` or :js:class:`Promise` is
|
|
665
|
+
* resolved. Only works in runtimes with JS Promise integration.
|
|
666
|
+
*
|
|
667
|
+
* .. admonition:: Experimental
|
|
668
|
+
* :class: warning
|
|
669
|
+
*
|
|
670
|
+
* This feature is not yet stable.
|
|
671
|
+
*
|
|
672
|
+
* @experimental
|
|
673
|
+
*/
|
|
737
674
|
callSyncifying(...jsargs: any): Promise<any>;
|
|
675
|
+
/**
|
|
676
|
+
* Call the function with stack switching enabled. The last argument must be
|
|
677
|
+
* an object with the keyword arguments. Functions called this way can use
|
|
678
|
+
* :py:meth:`PyodideFuture.syncify() <pyodide.webloop.PyodideFuture.syncify>`
|
|
679
|
+
* to block until a :py:class:`~asyncio.Future` or :js:class:`Promise` is
|
|
680
|
+
* resolved. Only works in runtimes with JS Promise integration.
|
|
681
|
+
*
|
|
682
|
+
* .. admonition:: Experimental
|
|
683
|
+
* :class: warning
|
|
684
|
+
*
|
|
685
|
+
* This feature is not yet stable.
|
|
686
|
+
*
|
|
687
|
+
* @experimental
|
|
688
|
+
*/
|
|
689
|
+
callSyncifyingKwargs(...jsargs: any): Promise<any>;
|
|
738
690
|
/**
|
|
739
691
|
* The ``bind()`` method creates a new function that, when called, has its
|
|
740
692
|
* ``this`` keyword set to the provided value, with a given sequence of
|
|
@@ -826,8 +778,6 @@ declare class PyDict extends PyProxy {
|
|
|
826
778
|
/** @deprecated Use `import type { PyDict } from "pyodide/ffi"` instead */
|
|
827
779
|
interface PyDict extends PyProxyWithGet, PyProxyWithSet, PyProxyWithHas, PyProxyWithLength, PyIterable {
|
|
828
780
|
}
|
|
829
|
-
/** @deprecated Use :js:class:`pyodide.ffi.PyDict` instead. */
|
|
830
|
-
export type PyProxyDict = PyDict;
|
|
831
781
|
/** @deprecated Use `import type { PyBufferView } from "pyodide/ffi"` instead */
|
|
832
782
|
declare class PyBufferView {
|
|
833
783
|
/**
|
|
@@ -937,11 +887,19 @@ declare function setStderr(options?: {
|
|
|
937
887
|
write?: (buffer: Uint8Array) => number;
|
|
938
888
|
isatty?: boolean;
|
|
939
889
|
}): void;
|
|
890
|
+
type PackageType = "package" | "cpython_module" | "shared_library" | "static_library";
|
|
891
|
+
export type PackageData = {
|
|
892
|
+
name: string;
|
|
893
|
+
version: string;
|
|
894
|
+
fileName: string;
|
|
895
|
+
/** @experimental */
|
|
896
|
+
packageType: PackageType;
|
|
897
|
+
};
|
|
940
898
|
declare function loadPackage(names: string | PyProxy | Array<string>, options?: {
|
|
941
899
|
messageCallback?: (message: string) => void;
|
|
942
900
|
errorCallback?: (message: string) => void;
|
|
943
901
|
checkIntegrity?: boolean;
|
|
944
|
-
}): Promise<
|
|
902
|
+
}): Promise<Array<PackageData>>;
|
|
945
903
|
/** @deprecated Use `import type { TypedArray } from "pyodide/ffi"` instead */
|
|
946
904
|
export type TypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array;
|
|
947
905
|
interface CanvasInterface {
|
|
@@ -1085,23 +1043,23 @@ declare class PyodideAPI {
|
|
|
1085
1043
|
messageCallback?: (message: string) => void;
|
|
1086
1044
|
errorCallback?: (message: string) => void;
|
|
1087
1045
|
checkIntegrity?: boolean;
|
|
1088
|
-
}): Promise<
|
|
1046
|
+
}): Promise<Array<PackageData>>;
|
|
1089
1047
|
/**
|
|
1090
1048
|
* Runs a string of Python code from JavaScript, using :py:func:`~pyodide.code.eval_code`
|
|
1091
1049
|
* to evaluate the code. If the last statement in the Python code is an
|
|
1092
1050
|
* expression (and the code doesn't end with a semicolon), the value of the
|
|
1093
1051
|
* expression is returned.
|
|
1094
1052
|
*
|
|
1095
|
-
* @param code Python code to
|
|
1053
|
+
* @param code The Python code to run
|
|
1096
1054
|
* @param options
|
|
1097
1055
|
* @param options.globals An optional Python dictionary to use as the globals.
|
|
1098
1056
|
* Defaults to :js:attr:`pyodide.globals`.
|
|
1099
1057
|
* @param options.locals An optional Python dictionary to use as the locals.
|
|
1100
1058
|
* Defaults to the same as ``globals``.
|
|
1101
|
-
* @param options.filename An optional string to use as the
|
|
1102
|
-
* to "<exec>"
|
|
1103
|
-
*
|
|
1104
|
-
*
|
|
1059
|
+
* @param options.filename An optional string to use as the file name.
|
|
1060
|
+
* Defaults to ``"<exec>"``. If a custom file name is given, the
|
|
1061
|
+
* traceback for any exception that is thrown will show source lines
|
|
1062
|
+
* (unless the given file name starts with ``<`` and ends with ``>``).
|
|
1105
1063
|
* @returns The result of the Python code translated to JavaScript. See the
|
|
1106
1064
|
* documentation for :py:func:`~pyodide.code.eval_code` for more info.
|
|
1107
1065
|
* @example
|
|
@@ -1152,16 +1110,16 @@ declare class PyodideAPI {
|
|
|
1152
1110
|
* import any python packages referenced via ``import`` statements in your
|
|
1153
1111
|
* code. This function will no longer do it for you.
|
|
1154
1112
|
*
|
|
1155
|
-
* @param code Python code to
|
|
1113
|
+
* @param code The Python code to run
|
|
1156
1114
|
* @param options
|
|
1157
1115
|
* @param options.globals An optional Python dictionary to use as the globals.
|
|
1158
1116
|
* Defaults to :js:attr:`pyodide.globals`.
|
|
1159
1117
|
* @param options.locals An optional Python dictionary to use as the locals.
|
|
1160
1118
|
* Defaults to the same as ``globals``.
|
|
1161
|
-
* @param options.filename An optional string to use as the
|
|
1162
|
-
* to "<exec>"
|
|
1163
|
-
*
|
|
1164
|
-
*
|
|
1119
|
+
* @param options.filename An optional string to use as the file name.
|
|
1120
|
+
* Defaults to ``"<exec>"``. If a custom file name is given, the
|
|
1121
|
+
* traceback for any exception that is thrown will show source lines
|
|
1122
|
+
* (unless the given file name starts with ``<`` and ends with ``>``).
|
|
1165
1123
|
* @returns The result of the Python code translated to JavaScript.
|
|
1166
1124
|
* @async
|
|
1167
1125
|
*/
|
|
@@ -1170,9 +1128,35 @@ declare class PyodideAPI {
|
|
|
1170
1128
|
locals?: PyProxy;
|
|
1171
1129
|
filename?: string;
|
|
1172
1130
|
}): Promise<any>;
|
|
1131
|
+
/**
|
|
1132
|
+
* Runs a Python code string like :js:func:`pyodide.runPython` but with stack
|
|
1133
|
+
* switching enabled. Code executed in this way can use
|
|
1134
|
+
* :py:meth:`PyodideFuture.syncify() <pyodide.webloop.PyodideFuture.syncify>`
|
|
1135
|
+
* to block until a :py:class:`~asyncio.Future` or :js:class:`Promise` is
|
|
1136
|
+
* resolved. Only works in runtimes with JS Promise Integration enabled.
|
|
1137
|
+
*
|
|
1138
|
+
* .. admonition:: Experimental
|
|
1139
|
+
* :class: warning
|
|
1140
|
+
*
|
|
1141
|
+
* This feature is not yet stable.
|
|
1142
|
+
*
|
|
1143
|
+
* @experimental
|
|
1144
|
+
* @param code The Python code to run
|
|
1145
|
+
* @param options
|
|
1146
|
+
* @param options.globals An optional Python dictionary to use as the globals.
|
|
1147
|
+
* Defaults to :js:attr:`pyodide.globals`.
|
|
1148
|
+
* @param options.locals An optional Python dictionary to use as the locals.
|
|
1149
|
+
* Defaults to the same as ``globals``.
|
|
1150
|
+
* @param options.filename An optional string to use as the file name.
|
|
1151
|
+
* Defaults to ``"<exec>"``. If a custom file name is given, the
|
|
1152
|
+
* traceback for any exception that is thrown will show source lines
|
|
1153
|
+
* (unless the given file name starts with ``<`` and ends with ``>``).
|
|
1154
|
+
* @returns The result of the Python code translated to JavaScript.
|
|
1155
|
+
*/
|
|
1173
1156
|
static runPythonSyncifying(code: string, options?: {
|
|
1174
1157
|
globals?: PyProxy;
|
|
1175
1158
|
locals?: PyProxy;
|
|
1159
|
+
filename?: string;
|
|
1176
1160
|
}): Promise<any>;
|
|
1177
1161
|
/**
|
|
1178
1162
|
* Registers the JavaScript object ``module`` as a JavaScript module named
|
|
@@ -1182,6 +1166,28 @@ declare class PyodideAPI {
|
|
|
1182
1166
|
* module from :py:data:`sys.modules`. This calls
|
|
1183
1167
|
* :func:`~pyodide.ffi.register_js_module`.
|
|
1184
1168
|
*
|
|
1169
|
+
* Any attributes of the JavaScript objects which are themselves objects will
|
|
1170
|
+
* be treated as submodules:
|
|
1171
|
+
* ```pyodide
|
|
1172
|
+
* pyodide.registerJsModule("mymodule", { submodule: { value: 7 } });
|
|
1173
|
+
* pyodide.runPython(`
|
|
1174
|
+
* from mymodule.submodule import value
|
|
1175
|
+
* assert value == 7
|
|
1176
|
+
* `);
|
|
1177
|
+
* ```
|
|
1178
|
+
* If you wish to prevent this, try the following instead:
|
|
1179
|
+
* ```pyodide
|
|
1180
|
+
* const sys = pyodide.pyimport("sys");
|
|
1181
|
+
* sys.modules.set("mymodule", { obj: { value: 7 } });
|
|
1182
|
+
* pyodide.runPython(`
|
|
1183
|
+
* from mymodule import obj
|
|
1184
|
+
* assert obj.value == 7
|
|
1185
|
+
* # attempting to treat obj as a submodule raises ModuleNotFoundError:
|
|
1186
|
+
* # "No module named 'mymodule.obj'; 'mymodule' is not a package"
|
|
1187
|
+
* from mymodule.obj import value
|
|
1188
|
+
* `);
|
|
1189
|
+
* ```
|
|
1190
|
+
*
|
|
1185
1191
|
* @param name Name of the JavaScript module to add
|
|
1186
1192
|
* @param module JavaScript object backing the module
|
|
1187
1193
|
*/
|
|
@@ -1313,39 +1319,6 @@ declare class PyodideAPI {
|
|
|
1313
1319
|
* during execution of C code.
|
|
1314
1320
|
*/
|
|
1315
1321
|
static checkInterrupt(): void;
|
|
1316
|
-
/**
|
|
1317
|
-
* Is ``jsobj`` a :js:class:`~pyodide.ffi.PyProxy`?
|
|
1318
|
-
* @deprecated Use :js:class:`obj instanceof pyodide.ffi.PyProxy <pyodide.ffi.PyProxy>` instead.
|
|
1319
|
-
* @param jsobj Object to test.
|
|
1320
|
-
*/
|
|
1321
|
-
static isPyProxy(jsobj: any): jsobj is PyProxy;
|
|
1322
|
-
/**
|
|
1323
|
-
* An alias for :js:class:`pyodide.ffi.PyBufferView`.
|
|
1324
|
-
*
|
|
1325
|
-
* @hidetype
|
|
1326
|
-
* @alias
|
|
1327
|
-
* @dockind class
|
|
1328
|
-
* @deprecated
|
|
1329
|
-
*/
|
|
1330
|
-
static get PyBuffer(): typeof PyBufferView;
|
|
1331
|
-
/**
|
|
1332
|
-
* An alias for :js:class:`pyodide.ffi.PyBuffer`.
|
|
1333
|
-
*
|
|
1334
|
-
* @hidetype
|
|
1335
|
-
* @alias
|
|
1336
|
-
* @dockind class
|
|
1337
|
-
* @deprecated
|
|
1338
|
-
*/
|
|
1339
|
-
static get PyProxyBuffer(): typeof PyBuffer;
|
|
1340
|
-
/**
|
|
1341
|
-
* An alias for :js:class:`pyodide.ffi.PythonError`.
|
|
1342
|
-
*
|
|
1343
|
-
* @hidetype
|
|
1344
|
-
* @alias
|
|
1345
|
-
* @dockind class
|
|
1346
|
-
* @deprecated
|
|
1347
|
-
*/
|
|
1348
|
-
static get PythonError(): typeof PythonError;
|
|
1349
1322
|
/**
|
|
1350
1323
|
* Turn on or off debug mode. In debug mode, some error messages are improved
|
|
1351
1324
|
* at a performance cost.
|
|
@@ -1364,7 +1337,6 @@ type ConfigType = {
|
|
|
1364
1337
|
indexURL: string;
|
|
1365
1338
|
packageCacheDir: string;
|
|
1366
1339
|
lockFileURL: string;
|
|
1367
|
-
homedir: string;
|
|
1368
1340
|
fullStdLib?: boolean;
|
|
1369
1341
|
stdLibURL?: string;
|
|
1370
1342
|
stdin?: () => string;
|
|
@@ -1388,7 +1360,6 @@ type ConfigType = {
|
|
|
1388
1360
|
* async function main() {
|
|
1389
1361
|
* const pyodide = await loadPyodide({
|
|
1390
1362
|
* fullStdLib: true,
|
|
1391
|
-
* homedir: "/pyodide",
|
|
1392
1363
|
* stdout: (msg) => console.log(`Pyodide: ${msg}`),
|
|
1393
1364
|
* });
|
|
1394
1365
|
* console.log("Loaded Pyodide");
|
|
@@ -1420,11 +1391,6 @@ export declare function loadPyodide(options?: {
|
|
|
1420
1391
|
* Default: ```${indexURL}/pyodide-lock.json```
|
|
1421
1392
|
*/
|
|
1422
1393
|
lockFileURL?: string;
|
|
1423
|
-
/**
|
|
1424
|
-
* The home directory which Pyodide will use inside virtual file system.
|
|
1425
|
-
* This is deprecated, use ``{env: {HOME : some_dir}}`` instead.
|
|
1426
|
-
*/
|
|
1427
|
-
homedir?: string;
|
|
1428
1394
|
/**
|
|
1429
1395
|
* Load the full Python standard library. Setting this to false excludes
|
|
1430
1396
|
* unvendored modules from the standard library.
|
|
@@ -1506,10 +1472,5 @@ export declare function loadPyodide(options?: {
|
|
|
1506
1472
|
_node_mounts?: string[];
|
|
1507
1473
|
}): Promise<PyodideInterface>;
|
|
1508
1474
|
|
|
1509
|
-
export type {
|
|
1510
|
-
PyBuffer as PyProxyBuffer,
|
|
1511
|
-
PyBufferView as PyBuffer,
|
|
1512
|
-
};
|
|
1513
|
-
|
|
1514
1475
|
export type {};
|
|
1515
|
-
export type {
|
|
1476
|
+
export type {};
|
package/pyodide.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var loadPyodide=(()=>{var ce=Object.create;var _=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var fe=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var f=(t,e)=>_(t,"name",{value:e,configurable:!0}),g=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,c)=>(typeof require<"u"?require:e)[c]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var
|
|
1
|
+
"use strict";var loadPyodide=(()=>{var ce=Object.create;var _=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var fe=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var f=(t,e)=>_(t,"name",{value:e,configurable:!0}),g=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,c)=>(typeof require<"u"?require:e)[c]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var $=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),pe=(t,e)=>{for(var c in e)_(t,c,{get:e[c],enumerable:!0})},M=(t,e,c,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of de(e))!ue.call(t,a)&&a!==c&&_(t,a,{get:()=>e[a],enumerable:!(o=le(e,a))||o.enumerable});return t};var h=(t,e,c)=>(c=t!=null?ce(fe(t)):{},M(e||!t||!t.__esModule?_(c,"default",{value:t,enumerable:!0}):c,t)),me=t=>M(_({},"__esModule",{value:!0}),t);var j=$((P,C)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("stackframe",[],e):typeof P=="object"?C.exports=e():t.StackFrame=e()})(P,function(){"use strict";function t(d){return!isNaN(parseFloat(d))&&isFinite(d)}f(t,"_isNumber");function e(d){return d.charAt(0).toUpperCase()+d.substring(1)}f(e,"_capitalize");function c(d){return function(){return this[d]}}f(c,"_getter");var o=["isConstructor","isEval","isNative","isToplevel"],a=["columnNumber","lineNumber"],r=["fileName","functionName","source"],n=["args"],u=["evalOrigin"],i=o.concat(a,r,n,u);function s(d){if(d)for(var y=0;y<i.length;y++)d[i[y]]!==void 0&&this["set"+e(i[y])](d[i[y]])}f(s,"StackFrame"),s.prototype={getArgs:function(){return this.args},setArgs:function(d){if(Object.prototype.toString.call(d)!=="[object Array]")throw new TypeError("Args must be an Array");this.args=d},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(d){if(d instanceof s)this.evalOrigin=d;else if(d instanceof Object)this.evalOrigin=new s(d);else throw new TypeError("Eval Origin must be an Object or StackFrame")},toString:function(){var d=this.getFileName()||"",y=this.getLineNumber()||"",w=this.getColumnNumber()||"",E=this.getFunctionName()||"";return this.getIsEval()?d?"[eval] ("+d+":"+y+":"+w+")":"[eval]:"+y+":"+w:E?E+" ("+d+":"+y+":"+w+")":d+":"+y+":"+w}},s.fromString=f(function(y){var w=y.indexOf("("),E=y.lastIndexOf(")"),ne=y.substring(0,w),ie=y.substring(w+1,E).split(","),U=y.substring(E+1);if(U.indexOf("@")===0)var R=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(U,""),oe=R[1],ae=R[2],se=R[3];return new s({functionName:ne,args:ie||void 0,fileName:oe,lineNumber:ae||void 0,columnNumber:se||void 0})},"StackFrame$$fromString");for(var l=0;l<o.length;l++)s.prototype["get"+e(o[l])]=c(o[l]),s.prototype["set"+e(o[l])]=function(d){return function(y){this[d]=!!y}}(o[l]);for(var m=0;m<a.length;m++)s.prototype["get"+e(a[m])]=c(a[m]),s.prototype["set"+e(a[m])]=function(d){return function(y){if(!t(y))throw new TypeError(d+" must be a Number");this[d]=Number(y)}}(a[m]);for(var p=0;p<r.length;p++)s.prototype["get"+e(r[p])]=c(r[p]),s.prototype["set"+e(r[p])]=function(d){return function(y){this[d]=String(y)}}(r[p]);return s})});var W=$((x,B)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("error-stack-parser",["stackframe"],e):typeof x=="object"?B.exports=e(j()):t.ErrorStackParser=e(t.StackFrame)})(x,f(function(e){"use strict";var c=/(^|@)\S+:\d+/,o=/^\s*at .*(\S+:\d+|\(native\))/m,a=/^(eval@)?(\[native code])?$/;return{parse:f(function(n){if(typeof n.stacktrace<"u"||typeof n["opera#sourceloc"]<"u")return this.parseOpera(n);if(n.stack&&n.stack.match(o))return this.parseV8OrIE(n);if(n.stack)return this.parseFFOrSafari(n);throw new Error("Cannot parse given Error object")},"ErrorStackParser$$parse"),extractLocation:f(function(n){if(n.indexOf(":")===-1)return[n];var u=/(.+?)(?::(\d+))?(?::(\d+))?$/,i=u.exec(n.replace(/[()]/g,""));return[i[1],i[2]||void 0,i[3]||void 0]},"ErrorStackParser$$extractLocation"),parseV8OrIE:f(function(n){var u=n.stack.split(`
|
|
2
2
|
`).filter(function(i){return!!i.match(o)},this);return u.map(function(i){i.indexOf("(eval ")>-1&&(i=i.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var s=i.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),l=s.match(/ (\(.+\)$)/);s=l?s.replace(l[0],""):s;var m=this.extractLocation(l?l[1]:s),p=l&&s||void 0,d=["eval","<anonymous>"].indexOf(m[0])>-1?void 0:m[0];return new e({functionName:p,fileName:d,lineNumber:m[1],columnNumber:m[2],source:i})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:f(function(n){var u=n.stack.split(`
|
|
3
3
|
`).filter(function(i){return!i.match(a)},this);return u.map(function(i){if(i.indexOf(" > eval")>-1&&(i=i.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),i.indexOf("@")===-1&&i.indexOf(":")===-1)return new e({functionName:i});var s=/((.*".+"[^@]*)?[^@]*)(?:@)/,l=i.match(s),m=l&&l[1]?l[1]:void 0,p=this.extractLocation(i.replace(s,""));return new e({functionName:m,fileName:p[0],lineNumber:p[1],columnNumber:p[2],source:i})},this)},"ErrorStackParser$$parseFFOrSafari"),parseOpera:f(function(n){return!n.stacktrace||n.message.indexOf(`
|
|
4
4
|
`)>-1&&n.message.split(`
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
`).length?this.parseOpera9(n):n.stack?this.parseOpera11(n):this.parseOpera10(n)},"ErrorStackParser$$parseOpera"),parseOpera9:f(function(n){for(var u=/Line (\d+).*script (?:in )?(\S+)/i,i=n.message.split(`
|
|
7
7
|
`),s=[],l=2,m=i.length;l<m;l+=2){var p=u.exec(i[l]);p&&s.push(new e({fileName:p[2],lineNumber:p[1],source:i[l]}))}return s},"ErrorStackParser$$parseOpera9"),parseOpera10:f(function(n){for(var u=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,i=n.stacktrace.split(`
|
|
8
8
|
`),s=[],l=0,m=i.length;l<m;l+=2){var p=u.exec(i[l]);p&&s.push(new e({functionName:p[3]||void 0,fileName:p[2],lineNumber:p[1],source:i[l]}))}return s},"ErrorStackParser$$parseOpera10"),parseOpera11:f(function(n){var u=n.stack.split(`
|
|
9
|
-
`).filter(function(i){return!!i.match(c)&&!i.match(/^Error created at/)},this);return u.map(function(i){var s=i.split("@"),l=this.extractLocation(s.pop()),m=s.shift()||"",p=m.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^)]*\)/g,"")||void 0,d;m.match(/\(([^)]*)\)/)&&(d=m.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var y=d===void 0||d==="[arguments not available]"?void 0:d.split(",");return new e({functionName:p,args:y,fileName:l[0],lineNumber:l[1],columnNumber:l[2],source:i})},this)},"ErrorStackParser$$parseOpera11")}},"ErrorStackParser"))});var Ne={};pe(Ne,{loadPyodide:()=>T,version:()=>b});var G=h(j());var v=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&typeof process.browser>"u",F=v&&typeof module<"u"&&typeof module.exports<"u"&&typeof g<"u"&&typeof __dirname<"u",H=v&&!F,ye=typeof Deno<"u",z=!v&&!ye,q=z&&typeof window<"u"&&typeof document<"u"&&typeof document.createElement<"u"&&typeof sessionStorage<"u",V=z&&typeof importScripts<"u"&&typeof self<"u";var K,O,L,X,I,ge=`"fetch" is not defined, maybe you're using node < 18? From Pyodide >= 0.25.0, node >= 18 is required. Older versions of Node.js may work, but it is not guaranteed or supported. Falling back to "node-fetch".`;async function A(){if(!v||(K=(await import("url")).default,I=await import("fs/promises"),globalThis.fetch?O=fetch:(console.warn(ge),O=(await import("node-fetch")).default),X=(await import("vm")).default,L=await import("path"),D=L.sep,typeof g<"u"))return;let t=await import("fs"),e=await import("crypto"),c=await import("ws"),o=await import("child_process"),a={fs:t,crypto:e,ws:c,child_process:o};globalThis.require=function(r){return a[r]}}f(A,"initNodeModules");function he(t,e){return L.resolve(e||".",t)}f(he,"node_resolvePath");function ve(t,e){return e===void 0&&(e=location),new URL(t,e).toString()}f(ve,"browser_resolvePath");var x;v?x=he:x=ve;var D;v||(D="/");function we(t,e){return t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?{response:O(t)}:{binary:I.readFile(t).then(c=>new Uint8Array(c.buffer,c.byteOffset,c.byteLength))}}f(we,"node_getBinaryResponse");function be(t,e){let c=new URL(t,location);return{response:fetch(c,e?{integrity:e}:{})}}f(be,"browser_getBinaryResponse");var S;v?S=we:S=be;async function J(t,e){let{response:c,binary:o}=S(t,e);if(o)return o;let a=await c;if(!a.ok)throw new Error(`Failed to load '${t}': request failed.`);return new Uint8Array(await a.arrayBuffer())}f(J,"loadBinaryFile");var P;if(q)P=f(async t=>await import(t),"loadScript");else if(V)P=f(async t=>{try{globalThis.importScripts(t)}catch(e){if(e instanceof TypeError)await import(t);else throw e}},"loadScript");else if(v)P=Ee;else throw new Error("Cannot determine runtime environment");async function Ee(t){t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?X.runInThisContext(await(await O(t)).text()):await import(K.pathToFileURL(t).href)}f(Ee,"nodeLoadScript");async function Y(t){if(v){await A();let e=await I.readFile(t);return JSON.parse(e)}else return await(await fetch(t)).json()}f(Y,"loadLockFile");async function Q(){if(F)return __dirname;let t;try{throw new Error}catch(o){t=o}let e=G.default.parse(t)[0].fileName;if(H){let o=await import("path");return(await import("url")).fileURLToPath(o.dirname(e))}let c=e.lastIndexOf(D);if(c===-1)throw new Error("Could not extract indexURL path from pyodide module location");return e.slice(0,c)}f(Q,"calculateDirname");function Z(t){let e=t.FS,c=t.FS.filesystems.MEMFS,o=t.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:function(r){if(!r.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return c.mount.apply(null,arguments)},syncfs:async(r,n,u)=>{try{let i=a.getLocalSet(r),s=await a.getRemoteSet(r),l=n?s:i,m=n?i:s;await a.reconcile(r,l,m),u(null)}catch(i){u(i)}},getLocalSet:r=>{let n=Object.create(null);function u(l){return l!=="."&&l!==".."}f(u,"isRealDir");function i(l){return m=>o.join2(l,m)}f(i,"toAbsolute");let s=e.readdir(r.mountpoint).filter(u).map(i(r.mountpoint));for(;s.length;){let l=s.pop(),m=e.stat(l);e.isDir(m.mode)&&s.push.apply(s,e.readdir(l).filter(u).map(i(l))),n[l]={timestamp:m.mtime,mode:m.mode}}return{type:"local",entries:n}},getRemoteSet:async r=>{let n=Object.create(null),u=await _e(r.opts.fileSystemHandle);for(let[i,s]of u)i!=="."&&(n[o.join2(r.mountpoint,i)]={timestamp:s.kind==="file"?(await s.getFile()).lastModifiedDate:new Date,mode:s.kind==="file"?a.FILE_MODE:a.DIR_MODE});return{type:"remote",entries:n,handles:u}},loadLocalEntry:r=>{let u=e.lookupPath(r).node,i=e.stat(r);if(e.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(e.isFile(i.mode))return u.contents=c.getFileDataAsTypedArray(u),{timestamp:i.mtime,mode:i.mode,contents:u.contents};throw new Error("node type not supported")},storeLocalEntry:(r,n)=>{if(e.isDir(n.mode))e.mkdirTree(r,n.mode);else if(e.isFile(n.mode))e.writeFile(r,n.contents,{canOwn:!0});else throw new Error("node type not supported");e.chmod(r,n.mode),e.utime(r,n.timestamp,n.timestamp)},removeLocalEntry:r=>{var n=e.stat(r);e.isDir(n.mode)?e.rmdir(r):e.isFile(n.mode)&&e.unlink(r)},loadRemoteEntry:async r=>{if(r.kind==="file"){let n=await r.getFile();return{contents:new Uint8Array(await n.arrayBuffer()),mode:a.FILE_MODE,timestamp:n.lastModifiedDate}}else{if(r.kind==="directory")return{mode:a.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+r.kind)}},storeRemoteEntry:async(r,n,u)=>{let i=r.get(o.dirname(n)),s=e.isFile(u.mode)?await i.getFileHandle(o.basename(n),{create:!0}):await i.getDirectoryHandle(o.basename(n),{create:!0});if(s.kind==="file"){let l=await s.createWritable();await l.write(u.contents),await l.close()}r.set(n,s)},removeRemoteEntry:async(r,n)=>{await r.get(o.dirname(n)).removeEntry(o.basename(n)),r.delete(n)},reconcile:async(r,n,u)=>{let i=0,s=[];Object.keys(n.entries).forEach(function(p){let d=n.entries[p],y=u.entries[p];(!y||e.isFile(d.mode)&&d.timestamp.getTime()>y.timestamp.getTime())&&(s.push(p),i++)}),s.sort();let l=[];if(Object.keys(u.entries).forEach(function(p){n.entries[p]||(l.push(p),i++)}),l.sort().reverse(),!i)return;let m=n.type==="remote"?n.handles:u.handles;for(let p of s){let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);if(u.type==="local"){let y=m.get(d),w=await a.loadRemoteEntry(y);a.storeLocalEntry(p,w)}else{let y=a.loadLocalEntry(p);await a.storeRemoteEntry(m,d,y)}}for(let p of l)if(u.type==="local")a.removeLocalEntry(p);else{let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);await a.removeRemoteEntry(m,d)}}};t.FS.filesystems.NATIVEFS_ASYNC=a}f(Z,"initializeNativeFS");var _e=f(async t=>{let e=[];async function c(a){for await(let r of a.values())e.push(r),r.kind==="directory"&&await c(r)}f(c,"collect"),await c(t);let o=new Map;o.set(".",t);for(let a of e){let r=(await t.resolve(a)).join("/");o.set(r,a)}return o},"getFsHandles");function ee(){let t={};return t.noImageDecoding=!0,t.noAudioDecoding=!0,t.noWasmDecoding=!1,t.preRun=[],t.quit=(e,c)=>{throw t.exited={status:e,toThrow:c},c},t}f(ee,"createModule");function Pe(t,e){t.preRun.push(function(){let c="/";try{t.FS.mkdirTree(e)}catch(o){console.error(`Error occurred while making a home directory '${e}':`),console.error(o),console.error(`Using '${c}' for a home directory instead`),e=c}t.FS.chdir(e)})}f(Pe,"createHomeDirectory");function Se(t,e){t.preRun.push(function(){Object.assign(t.ENV,e)})}f(Se,"setEnvironment");function Oe(t,e){t.preRun.push(()=>{for(let c of e)t.FS.mkdirTree(c),t.FS.mount(t.FS.filesystems.NODEFS,{root:c},c)})}f(Oe,"mountLocalDirectories");function xe(t,e){let c=J(e);t.preRun.push(()=>{let o=t._py_version_major(),a=t._py_version_minor();t.FS.mkdirTree("/lib"),t.FS.mkdirTree(`/lib/python${o}.${a}/site-packages`),t.addRunDependency("install-stdlib"),c.then(r=>{t.FS.writeFile(`/lib/python${o}${a}.zip`,r)}).catch(r=>{console.error("Error occurred while installing the standard library:"),console.error(r)}).finally(()=>{t.removeRunDependency("install-stdlib")})})}f(xe,"installStdlib");function te(t,e){let c;e.stdLibURL!=null?c=e.stdLibURL:c=e.indexURL+"python_stdlib.zip",xe(t,c),Pe(t,e.env.HOME),Se(t,e.env),Oe(t,e._node_mounts),t.preRun.push(()=>Z(t))}f(te,"initializeFileSystem");function re(t,e){let{binary:c,response:o}=S(e+"pyodide.asm.wasm");t.instantiateWasm=function(a,r){return async function(){try{let n;o?n=await WebAssembly.instantiateStreaming(o,a):n=await WebAssembly.instantiate(await c,a);let{instance:u,module:i}=n;typeof WasmOffsetConverter<"u"&&(wasmOffsetConverter=new WasmOffsetConverter(wasmBinary,i)),r(u,i)}catch(n){console.warn("wasm instantiation failed!"),console.warn(n)}}(),{}}}f(re,"preloadWasm");var b="0.25.0a1";async function T(t={}){await A();let e=t.indexURL||await Q();e=x(e),e.endsWith("/")||(e+="/"),t.indexURL=e;let c={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:e+"pyodide-lock.json",args:[],_node_mounts:[],env:{},packageCacheDir:e,packages:[]},o=Object.assign(c,t);if(t.homedir){if(console.warn("The homedir argument to loadPyodide is deprecated. Use 'env: { HOME: value }' instead of 'homedir: value'."),t.env&&t.env.HOME)throw new Error("Set both env.HOME and homedir arguments");o.env.HOME=o.homedir}o.env.HOME||(o.env.HOME="/home/pyodide");let a=ee();a.print=o.stdout,a.printErr=o.stderr,a.arguments=o.args;let r={config:o};a.API=r,r.lockFilePromise=Y(o.lockFileURL),re(a,e),te(a,o);let n=new Promise(s=>a.postRun=s);if(a.locateFile=s=>o.indexURL+s,typeof _createPyodideModule!="function"){let s=`${o.indexURL}pyodide.asm.js`;await P(s)}if(await _createPyodideModule(a),await n,a.exited)throw a.exited.toThrow;if(t.pyproxyToStringRepr&&r.setPyProxyToStringMethod(!0),r.version!==b)throw new Error(`Pyodide version does not match: '${b}' <==> '${r.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);a.locateFile=s=>{throw new Error("Didn't expect to load any more file_packager files!")};let u=r.finalizeBootstrap();if(u.version.includes("dev")||r.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${u.version}/full/`),await r.packageIndexReady,r._pyodide._importhook.register_module_not_found_hook(r._import_name_to_package_name,r.lockfile_unvendored_stdlibs_and_test),r.lockfile_info.version!==b)throw new Error("Lock file version doesn't match Pyodide version");return r.package_loader.init_loaded_packages(),o.fullStdLib&&await u.loadPackage(r.lockfile_unvendored_stdlibs),r.initializeStreams(o.stdin,o.stdout,o.stderr),u}f(T,"loadPyodide");globalThis.loadPyodide=T;return me(Ne);})();
|
|
9
|
+
`).filter(function(i){return!!i.match(c)&&!i.match(/^Error created at/)},this);return u.map(function(i){var s=i.split("@"),l=this.extractLocation(s.pop()),m=s.shift()||"",p=m.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^)]*\)/g,"")||void 0,d;m.match(/\(([^)]*)\)/)&&(d=m.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var y=d===void 0||d==="[arguments not available]"?void 0:d.split(",");return new e({functionName:p,args:y,fileName:l[0],lineNumber:l[1],columnNumber:l[2],source:i})},this)},"ErrorStackParser$$parseOpera11")}},"ErrorStackParser"))});var Re={};pe(Re,{loadPyodide:()=>T,version:()=>b});var G=h(W());var v=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&typeof process.browser>"u",F=v&&typeof module<"u"&&typeof module.exports<"u"&&typeof g<"u"&&typeof __dirname<"u",H=v&&!F,ye=typeof Deno<"u",z=!v&&!ye,q=z&&typeof window<"u"&&typeof document<"u"&&typeof document.createElement<"u"&&typeof sessionStorage<"u",V=z&&typeof importScripts<"u"&&typeof self<"u";var K,k,L,X,D,ge=`"fetch" is not defined, maybe you're using node < 18? From Pyodide >= 0.25.0, node >= 18 is required. Older versions of Node.js may work, but it is not guaranteed or supported. Falling back to "node-fetch".`;async function A(){if(!v||(K=(await import(/* webpackIgnore */"url")).default,D=await import(/* webpackIgnore */"fs/promises"),globalThis.fetch?k=fetch:(console.warn(ge),k=(await import(/* webpackIgnore */"node-fetch")).default),X=(await import(/* webpackIgnore */"vm")).default,L=await import(/* webpackIgnore */"path"),I=L.sep,typeof g<"u"))return;let t=await import(/* webpackIgnore */"fs"),e=await import(/* webpackIgnore */"crypto"),c=await import(/* webpackIgnore */"ws"),o=await import(/* webpackIgnore */"child_process"),a={fs:t,crypto:e,ws:c,child_process:o};globalThis.require=function(r){return a[r]}}f(A,"initNodeModules");function he(t,e){return L.resolve(e||".",t)}f(he,"node_resolvePath");function ve(t,e){return e===void 0&&(e=location),new URL(t,e).toString()}f(ve,"browser_resolvePath");var N;v?N=he:N=ve;var I;v||(I="/");function we(t,e){return t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?{response:k(t)}:{binary:D.readFile(t).then(c=>new Uint8Array(c.buffer,c.byteOffset,c.byteLength))}}f(we,"node_getBinaryResponse");function be(t,e){let c=new URL(t,location);return{response:fetch(c,e?{integrity:e}:{})}}f(be,"browser_getBinaryResponse");var O;v?O=we:O=be;async function J(t,e){let{response:c,binary:o}=O(t,e);if(o)return o;let a=await c;if(!a.ok)throw new Error(`Failed to load '${t}': request failed.`);return new Uint8Array(await a.arrayBuffer())}f(J,"loadBinaryFile");var S;if(q)S=f(async t=>await import(/* webpackIgnore */t),"loadScript");else if(V)S=f(async t=>{try{globalThis.importScripts(t)}catch(e){if(e instanceof TypeError)await import(/* webpackIgnore */t);else throw e}},"loadScript");else if(v)S=Ee;else throw new Error("Cannot determine runtime environment");async function Ee(t){t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?X.runInThisContext(await(await k(t)).text()):await import(/* webpackIgnore */K.pathToFileURL(t).href)}f(Ee,"nodeLoadScript");async function Y(t){if(v){await A();let e=await D.readFile(t);return JSON.parse(e)}else return await(await fetch(t)).json()}f(Y,"loadLockFile");async function Q(){if(F)return __dirname;let t;try{throw new Error}catch(o){t=o}let e=G.default.parse(t)[0].fileName;if(H){let o=await import(/* webpackIgnore */"path");return(await import(/* webpackIgnore */"url")).fileURLToPath(o.dirname(e))}let c=e.lastIndexOf(I);if(c===-1)throw new Error("Could not extract indexURL path from pyodide module location");return e.slice(0,c)}f(Q,"calculateDirname");function Z(t){let e=t.FS,c=t.FS.filesystems.MEMFS,o=t.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:function(r){if(!r.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return c.mount.apply(null,arguments)},syncfs:async(r,n,u)=>{try{let i=a.getLocalSet(r),s=await a.getRemoteSet(r),l=n?s:i,m=n?i:s;await a.reconcile(r,l,m),u(null)}catch(i){u(i)}},getLocalSet:r=>{let n=Object.create(null);function u(l){return l!=="."&&l!==".."}f(u,"isRealDir");function i(l){return m=>o.join2(l,m)}f(i,"toAbsolute");let s=e.readdir(r.mountpoint).filter(u).map(i(r.mountpoint));for(;s.length;){let l=s.pop(),m=e.stat(l);e.isDir(m.mode)&&s.push.apply(s,e.readdir(l).filter(u).map(i(l))),n[l]={timestamp:m.mtime,mode:m.mode}}return{type:"local",entries:n}},getRemoteSet:async r=>{let n=Object.create(null),u=await _e(r.opts.fileSystemHandle);for(let[i,s]of u)i!=="."&&(n[o.join2(r.mountpoint,i)]={timestamp:s.kind==="file"?(await s.getFile()).lastModifiedDate:new Date,mode:s.kind==="file"?a.FILE_MODE:a.DIR_MODE});return{type:"remote",entries:n,handles:u}},loadLocalEntry:r=>{let u=e.lookupPath(r).node,i=e.stat(r);if(e.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(e.isFile(i.mode))return u.contents=c.getFileDataAsTypedArray(u),{timestamp:i.mtime,mode:i.mode,contents:u.contents};throw new Error("node type not supported")},storeLocalEntry:(r,n)=>{if(e.isDir(n.mode))e.mkdirTree(r,n.mode);else if(e.isFile(n.mode))e.writeFile(r,n.contents,{canOwn:!0});else throw new Error("node type not supported");e.chmod(r,n.mode),e.utime(r,n.timestamp,n.timestamp)},removeLocalEntry:r=>{var n=e.stat(r);e.isDir(n.mode)?e.rmdir(r):e.isFile(n.mode)&&e.unlink(r)},loadRemoteEntry:async r=>{if(r.kind==="file"){let n=await r.getFile();return{contents:new Uint8Array(await n.arrayBuffer()),mode:a.FILE_MODE,timestamp:n.lastModifiedDate}}else{if(r.kind==="directory")return{mode:a.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+r.kind)}},storeRemoteEntry:async(r,n,u)=>{let i=r.get(o.dirname(n)),s=e.isFile(u.mode)?await i.getFileHandle(o.basename(n),{create:!0}):await i.getDirectoryHandle(o.basename(n),{create:!0});if(s.kind==="file"){let l=await s.createWritable();await l.write(u.contents),await l.close()}r.set(n,s)},removeRemoteEntry:async(r,n)=>{await r.get(o.dirname(n)).removeEntry(o.basename(n)),r.delete(n)},reconcile:async(r,n,u)=>{let i=0,s=[];Object.keys(n.entries).forEach(function(p){let d=n.entries[p],y=u.entries[p];(!y||e.isFile(d.mode)&&d.timestamp.getTime()>y.timestamp.getTime())&&(s.push(p),i++)}),s.sort();let l=[];if(Object.keys(u.entries).forEach(function(p){n.entries[p]||(l.push(p),i++)}),l.sort().reverse(),!i)return;let m=n.type==="remote"?n.handles:u.handles;for(let p of s){let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);if(u.type==="local"){let y=m.get(d),w=await a.loadRemoteEntry(y);a.storeLocalEntry(p,w)}else{let y=a.loadLocalEntry(p);await a.storeRemoteEntry(m,d,y)}}for(let p of l)if(u.type==="local")a.removeLocalEntry(p);else{let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);await a.removeRemoteEntry(m,d)}}};t.FS.filesystems.NATIVEFS_ASYNC=a}f(Z,"initializeNativeFS");var _e=f(async t=>{let e=[];async function c(a){for await(let r of a.values())e.push(r),r.kind==="directory"&&await c(r)}f(c,"collect"),await c(t);let o=new Map;o.set(".",t);for(let a of e){let r=(await t.resolve(a)).join("/");o.set(r,a)}return o},"getFsHandles");function ee(){let t={};return t.noImageDecoding=!0,t.noAudioDecoding=!0,t.noWasmDecoding=!1,t.preRun=[],t.quit=(e,c)=>{throw t.exited={status:e,toThrow:c},c},t}f(ee,"createModule");function Se(t,e){t.preRun.push(function(){let c="/";try{t.FS.mkdirTree(e)}catch(o){console.error(`Error occurred while making a home directory '${e}':`),console.error(o),console.error(`Using '${c}' for a home directory instead`),e=c}t.FS.chdir(e)})}f(Se,"createHomeDirectory");function Oe(t,e){t.preRun.push(function(){Object.assign(t.ENV,e)})}f(Oe,"setEnvironment");function ke(t,e){t.preRun.push(()=>{for(let c of e)t.FS.mkdirTree(c),t.FS.mount(t.FS.filesystems.NODEFS,{root:c},c)})}f(ke,"mountLocalDirectories");function Ne(t,e){let c=J(e);t.preRun.push(()=>{let o=t._py_version_major(),a=t._py_version_minor();t.FS.mkdirTree("/lib"),t.FS.mkdirTree(`/lib/python${o}.${a}/site-packages`),t.addRunDependency("install-stdlib"),c.then(r=>{t.FS.writeFile(`/lib/python${o}${a}.zip`,r)}).catch(r=>{console.error("Error occurred while installing the standard library:"),console.error(r)}).finally(()=>{t.removeRunDependency("install-stdlib")})})}f(Ne,"installStdlib");function te(t,e){let c;e.stdLibURL!=null?c=e.stdLibURL:c=e.indexURL+"python_stdlib.zip",Ne(t,c),Se(t,e.env.HOME),Oe(t,e.env),ke(t,e._node_mounts),t.preRun.push(()=>Z(t))}f(te,"initializeFileSystem");function re(t,e){let{binary:c,response:o}=O(e+"pyodide.asm.wasm");t.instantiateWasm=function(a,r){return async function(){try{let n;o?n=await WebAssembly.instantiateStreaming(o,a):n=await WebAssembly.instantiate(await c,a);let{instance:u,module:i}=n;typeof WasmOffsetConverter<"u"&&(wasmOffsetConverter=new WasmOffsetConverter(wasmBinary,i)),r(u,i)}catch(n){console.warn("wasm instantiation failed!"),console.warn(n)}}(),{}}}f(re,"preloadWasm");var b="0.25.0";async function T(t={}){await A();let e=t.indexURL||await Q();e=N(e),e.endsWith("/")||(e+="/"),t.indexURL=e;let c={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:e+"pyodide-lock.json",args:[],_node_mounts:[],env:{},packageCacheDir:e,packages:[]},o=Object.assign(c,t);o.env.HOME||(o.env.HOME="/home/pyodide");let a=ee();a.print=o.stdout,a.printErr=o.stderr,a.arguments=o.args;let r={config:o};a.API=r,r.lockFilePromise=Y(o.lockFileURL),re(a,e),te(a,o);let n=new Promise(s=>a.postRun=s);if(a.locateFile=s=>o.indexURL+s,typeof _createPyodideModule!="function"){let s=`${o.indexURL}pyodide.asm.js`;await S(s)}if(await _createPyodideModule(a),await n,a.exited)throw a.exited.toThrow;if(t.pyproxyToStringRepr&&r.setPyProxyToStringMethod(!0),r.version!==b)throw new Error(`Pyodide version does not match: '${b}' <==> '${r.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);a.locateFile=s=>{throw new Error("Didn't expect to load any more file_packager files!")};let u=r.finalizeBootstrap();if(u.version.includes("dev")||r.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${u.version}/full/`),await r.packageIndexReady,r._pyodide._importhook.register_module_not_found_hook(r._import_name_to_package_name,r.lockfile_unvendored_stdlibs_and_test),r.lockfile_info.version!==b)throw new Error("Lock file version doesn't match Pyodide version");return r.package_loader.init_loaded_packages(),o.fullStdLib&&await u.loadPackage(r.lockfile_unvendored_stdlibs),r.initializeStreams(o.stdin,o.stdout,o.stderr),u}f(T,"loadPyodide");globalThis.loadPyodide=T;return me(Re);})();
|
|
10
10
|
try{Object.assign(exports,loadPyodide)}catch(_){}
|
|
11
11
|
globalThis.loadPyodide=loadPyodide.loadPyodide;
|
|
12
12
|
//# sourceMappingURL=pyodide.js.map
|