Skip to content

Commit 2438f08

Browse files
authored
refactor(types): split Module into EmscriptenModule, PythonModule, and PyodideModule pyodide#5786 (pyodide#5903)
1 parent 74cf5bf commit 2438f08

4 files changed

Lines changed: 46 additions & 41 deletions

File tree

src/js/emscripten-settings.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { ConfigType } from "./pyodide";
44
import { initializeNativeFS } from "./nativefs";
55
import { loadBinaryFile, getBinaryResponse } from "./compat";
6-
import { API, PreRunFunc, type Module, type FSType } from "./types";
6+
import { API, PreRunFunc, type PyodideModule, type FSType } from "./types";
77
import { getSentinelImport } from "generated/sentinel";
88

99
/**
@@ -122,7 +122,7 @@ function callFsInitHook(
122122
];
123123
}
124124

125-
function computeVersionTuple(Module: Module): [number, number, number] {
125+
function computeVersionTuple(Module: PyodideModule): [number, number, number] {
126126
const versionInt = Module.HEAPU32[Module._Py_Version >>> 2];
127127
const major = (versionInt >>> 24) & 0xff;
128128
const minor = (versionInt >>> 16) & 0xff;
@@ -144,7 +144,7 @@ function computeVersionTuple(Module: Module): [number, number, number] {
144144
*/
145145
function installStdlib(stdlibURL: string): PreRunFunc {
146146
const stdlibPromise: Promise<Uint8Array> = loadBinaryFile(stdlibURL);
147-
return async (Module: Module) => {
147+
return async (Module: PyodideModule) => {
148148
Module.API.pyVersionTuple = computeVersionTuple(Module);
149149
const [pymajor, pyminor] = Module.API.pyVersionTuple;
150150
Module.FS.mkdirTree("/lib");

src/js/nativefs.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { Module } from "./types";
1+
import { PyodideModule } from "./types";
22

33
/**
44
* @private
55
*/
6-
async function syncfs(m: Module, direction: boolean): Promise<void> {
6+
async function syncfs(m: PyodideModule, direction: boolean): Promise<void> {
77
return new Promise((resolve, reject) => {
88
m.FS.syncfs(direction, (err: any) => {
99
if (err) {
@@ -18,21 +18,21 @@ async function syncfs(m: Module, direction: boolean): Promise<void> {
1818
/**
1919
* @private
2020
*/
21-
export async function syncLocalToRemote(m: Module): Promise<void> {
21+
export async function syncLocalToRemote(m: PyodideModule): Promise<void> {
2222
return await syncfs(m, false);
2323
}
2424

2525
/**
2626
* @private
2727
*/
28-
export async function syncRemoteToLocal(m: Module): Promise<void> {
28+
export async function syncRemoteToLocal(m: PyodideModule): Promise<void> {
2929
return await syncfs(m, true);
3030
}
3131

3232
/**
3333
* @private
3434
*/
35-
export function initializeNativeFS(module: Module) {
35+
export function initializeNativeFS(module: PyodideModule) {
3636
const FS = module.FS;
3737
const MEMFS = module.FS.filesystems.MEMFS;
3838
const PATH = module.PATH;

src/js/pyodide.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { version as version_ } from "./version";
1616
import type { PyodideAPI } from "./api.js";
1717
import type {
1818
TypedArray,
19-
Module,
19+
PyodideModule,
2020
PackageData,
2121
FSType,
2222
Lockfile,
@@ -40,7 +40,7 @@ export const version: string = version_;
4040

4141
declare function _createPyodideModule(
4242
settings: EmscriptenSettings,
43-
): Promise<Module>;
43+
): Promise<PyodideModule>;
4444

4545
// BUILD_ID is generated from hashing together pyodide.asm.js and
4646
// pyodide.asm.wasm in esbuild.config.outer.mjs

src/js/types.ts

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export type TypedArray =
2121
| Float64Array;
2222

2323
declare global {
24-
export var Module: Module;
24+
export var Module: PyodideModule;
2525
export var API: API;
2626
}
2727

@@ -263,7 +263,7 @@ interface PyodideFSType {
263263
export type FSType = Omit<typeof FS, "lookupPath"> & PyodideFSType;
264264

265265
/** @hidden */
266-
export type PreRunFunc = (Module: Module) => void;
266+
export type PreRunFunc = (Module: PyodideModule) => void;
267267

268268
type DSO = any;
269269

@@ -274,13 +274,8 @@ export interface LDSO {
274274
};
275275
}
276276

277-
/**
278-
* TODO: consider renaming the type to ModuleType to avoid name collisions
279-
* between Module and ModuleType?
280-
* @hidden
281-
*/
282-
export interface Module {
283-
API: API;
277+
/** @hidden */
278+
export interface EmscriptenModule {
284279
locateFile: (file: string) => string;
285280
exited?: { toThrow: any };
286281
ENV: { [key: string]: string };
@@ -298,6 +293,36 @@ export interface Module {
298293
ERRNO_CODES: { [k: string]: number };
299294
stringToNewUTF8(x: string): number;
300295
stringToUTF8OnStack: (str: string) => number;
296+
HEAP8: Uint8Array;
297+
HEAPU32: Uint32Array;
298+
getExceptionMessage(e: number): [string, string];
299+
exitCode: number | undefined;
300+
ExitStatus: { new (exitCode: number): Error };
301+
_free: (ptr: number) => void;
302+
stackSave: () => number;
303+
stackRestore: (ptr: number) => void;
304+
promiseMap: {
305+
free(id: number): void;
306+
};
307+
_emscripten_dlopen_promise(lib: number, flags: number): number;
308+
_dlerror(): number;
309+
UTF8ToString: (
310+
ptr: number,
311+
maxBytesToRead: number,
312+
ignoreNul?: boolean,
313+
) => string;
314+
}
315+
316+
/** @hidden */
317+
export interface PythonModule extends EmscriptenModule {
318+
_Py_EMSCRIPTEN_SIGNAL_HANDLING: number;
319+
Py_EmscriptenSignalBuffer: TypedArray;
320+
_Py_Version: number;
321+
}
322+
323+
/** @hidden */
324+
export interface PyodideModule extends PythonModule {
325+
API: API;
301326
_compat_to_string_repr: number;
302327
_compat_null_to_none: number;
303328
js2python_convert: (
@@ -312,36 +337,16 @@ export interface Module {
312337
},
313338
) => any;
314339
_PropagatePythonError: typeof Error;
315-
_Py_EMSCRIPTEN_SIGNAL_HANDLING: number;
316-
Py_EmscriptenSignalBuffer: TypedArray;
317-
HEAP8: Uint8Array;
318-
HEAPU32: Uint32Array;
319340
__hiwire_get(a: number): any;
320341
__hiwire_set(a: number, b: any): void;
321342
__hiwire_immortal_add(a: any): void;
322343
_jslib_init(): number;
323344
_init_pyodide_proxy(): number;
324-
getExceptionMessage(e: number): [string, string];
345+
325346
handle_js_error(e: any): void;
326-
exitCode: number | undefined;
327-
ExitStatus: { new (exitCode: number): Error };
328-
_Py_Version: number;
329347
_print_stdout: (ptr: number) => void;
330348
_print_stderr: (ptr: number) => void;
331-
_free: (ptr: number) => void;
332-
stackSave: () => number;
333-
stackRestore: (ptr: number) => void;
334-
promiseMap: {
335-
free(id: number): void;
336-
};
337-
_emscripten_dlopen_promise(lib: number, flags: number): number;
338349
getPromise(p: number): Promise<any>;
339-
_dlerror(): number;
340-
UTF8ToString: (
341-
ptr: number,
342-
maxBytesToRead: number,
343-
ignoreNul?: boolean,
344-
) => string;
345350
}
346351

347352
/**
@@ -579,7 +584,7 @@ export type PackageManagerAPI = Pick<
579584
* @hidden
580585
*/
581586
export type PackageManagerModule = Pick<
582-
Module,
587+
PyodideModule,
583588
| "PATH"
584589
| "LDSO"
585590
| "stringToNewUTF8"

0 commit comments

Comments
 (0)