mirror of https://github.com/pyodide/pyodide.git
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
|
"""
|
||
|
This file ensures that only types are exported from the .d.ts files, not as
|
||
|
values. dts-bundle-generator seems to mess this up: things that were only
|
||
|
exported as types from `ffi.d.ts` get exported as values here.
|
||
|
|
||
|
It also adds deprecation notices to the type exports from pyodide.d.ts that
|
||
|
would otherwise be missing them.
|
||
|
"""
|
||
|
|
||
|
import re
|
||
|
from pathlib import Path
|
||
|
|
||
|
|
||
|
def main(filename):
|
||
|
exported_things = set()
|
||
|
path = Path(filename)
|
||
|
text = path.read_text()
|
||
|
exported_things.update(
|
||
|
x.group(1) for x in re.finditer("export interface ([A-Za-z]*)", text)
|
||
|
)
|
||
|
exported_things.update(
|
||
|
x.group(1) for x in re.finditer("export declare class ([A-Za-z]*)", text)
|
||
|
)
|
||
|
|
||
|
if path.name == "pyodide.d.ts":
|
||
|
deprecated = r'\n/** @deprecated Use `import type { \2 } from "pyodide/ffi"` instead */\g<0>'
|
||
|
text = re.sub(r"\n(export )?interface (Py[A-Za-z]*).*", deprecated, text)
|
||
|
text = re.sub(r"\n(declare class) (PyBufferView)", deprecated, text)
|
||
|
text = re.sub(r"\n(export type) (TypedArray)", deprecated, text)
|
||
|
text = text.replace("export type ConfigType", "type ConfigType")
|
||
|
if path.name == "ffi.d.ts":
|
||
|
text = text.replace("export declare const ffi", "declare const ffi")
|
||
|
|
||
|
text = text.replace("export interface", "interface")
|
||
|
text = text.replace("export declare class", "declare class")
|
||
|
text = text.replace("export {", "export type {")
|
||
|
type_exports = ", ".join(sorted(exported_things))
|
||
|
text += f"export type {{{type_exports}}};\n"
|
||
|
path.write_text(text)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
import sys
|
||
|
|
||
|
sys.exit(main(sys.argv[1]))
|