11import type { Context } from '@emnapi/runtime'
22
3- export declare type CreateOptions = {
3+ export declare interface BaseCreateOptions {
44 filename ?: string
55 nodeBinding ?: {
66 node : {
@@ -17,7 +17,9 @@ export declare type CreateOptions = {
1717 onCreateWorker ?: ( ) => any
1818 print ?: ( ) => void
1919 printErr ?: ( ) => void
20- } & ( {
20+ }
21+
22+ export declare type CreateOptions = BaseCreateOptions & ( {
2123 context : Context
2224 childThread ?: false
2325} | {
@@ -64,45 +66,78 @@ export declare interface NapiModule<ChildThread extends boolean> {
6466 postMessage ?: ( msg : any ) => any
6567}
6668
69+ export declare type ToBoolean < T > = [ T ] extends [ never ]
70+ ? false
71+ : [ T ] extends [ boolean ]
72+ ? T
73+ : T extends 0
74+ ? false
75+ : T extends ''
76+ ? false
77+ : T extends null
78+ ? false
79+ : T extends undefined
80+ ? false
81+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
82+ : T extends void
83+ ? false
84+ : true
85+
6786export declare function createNapiModule < T extends CreateOptions > (
6887 options : T
69- ) : NapiModule < [ T [ 'childThread' ] ] extends [ boolean ] ? T [ 'childThread' ] : false >
88+ ) : NapiModule < ToBoolean < T [ 'childThread' ] > >
7089
71- export declare type LoadOptions < ChildThread extends boolean > = {
90+ export declare interface BaseLoadOptions {
7291 wasi ?: {
7392 readonly wasiImport ?: Record < string , any >
7493 initialize ( instance : object ) : void
7594 getImportObject ? ( ) : any
7695 }
7796 overwriteImports ?: ( importObject : WebAssembly . Imports ) => WebAssembly . Imports
78- } & (
79- [ ChildThread ] extends [ true ]
80- ? {
81- tid : number
82- arg : number
83- }
84- : { } )
97+ }
8598
86- export declare function loadNapiModule (
87- napiModule : NapiModule < false > ,
88- wasmInput : string | URL | BufferSource | WebAssembly . Module ,
89- options ?: LoadOptions < false >
90- ) : Promise < WebAssembly . WebAssemblyInstantiatedSource >
91- export declare function loadNapiModule (
92- napiModule : NapiModule < true > ,
93- wasmInput : string | URL | BufferSource | WebAssembly . Module ,
94- options : LoadOptions < true >
95- ) : Promise < WebAssembly . WebAssemblyInstantiatedSource >
99+ export declare type LoadOptions = BaseLoadOptions & (
100+ ( BaseCreateOptions & ( {
101+ context : Context
102+ childThread ?: false
103+ } | {
104+ context ?: Context
105+ postMessage ?: ( msg : any ) => any
106+ childThread : true
107+ tid : number
108+ arg : number
109+ } ) ) |
110+ ( {
111+ napiModule : NapiModule < false >
112+ } | {
113+ napiModule : NapiModule < true >
114+ tid : number
115+ arg : number
116+ } )
117+ )
96118
97- export declare function loadNapiModuleSync (
98- napiModule : NapiModule < false > ,
119+ export declare type LoadInChildThread < T > = T extends LoadOptions
120+ ? 'napiModule' extends keyof T
121+ ? T [ 'napiModule' ] extends NapiModule < infer R >
122+ ? R
123+ : never
124+ : 'childThread' extends keyof T
125+ ? T [ 'childThread' ]
126+ : never
127+ : never
128+
129+ export declare interface LoadResult < ChildThread extends boolean > extends WebAssembly . WebAssemblyInstantiatedSource {
130+ napiModule : NapiModule < ChildThread >
131+ }
132+
133+ export declare function loadNapiModule < T extends LoadOptions > (
99134 wasmInput : string | URL | BufferSource | WebAssembly . Module ,
100- options ?: LoadOptions < false >
101- ) : WebAssembly . WebAssemblyInstantiatedSource
102- export declare function loadNapiModuleSync (
103- napiModule : NapiModule < true > ,
135+ options : T
136+ ) : Promise < LoadResult < ToBoolean < LoadInChildThread < T > > > >
137+
138+ export declare function loadNapiModuleSync < T extends LoadOptions > (
104139 wasmInput : string | URL | BufferSource | WebAssembly . Module ,
105- options : LoadOptions < true >
106- ) : WebAssembly . WebAssemblyInstantiatedSource
140+ options : T
141+ ) : LoadResult < ToBoolean < LoadInChildThread < T > > >
107142
108143export declare function handleMessage ( msg : { data : any } , callback : ( type : string , payload : any ) => any ) : void
0 commit comments