@@ -2,6 +2,17 @@ const { readFile, writeFile } = require('fs/promises')
22const { resolve } = require ( 'path' ) ;
33
44( async ( ) => {
5+ const entryContent = ( await readFile ( resolve ( process . cwd ( ) , './index.js' ) ) ) . toString ( )
6+ . replace ( 'paramsType: Array<unknown>' , 'paramsType: Array<DataFieldType>' )
7+ . replace ( 'retType: unknown' , 'retType: DataFieldType' )
8+ await writeFile ( resolve ( process . cwd ( ) , './index.js' ) , `
9+ ${ entryContent }
10+ module.exports.arrayConstructor = (options) => ({
11+ ...options,
12+ ffiTypeTag: 'array'
13+ })
14+ ` )
15+
516 const typeContent = ( await readFile ( resolve ( process . cwd ( ) , './index.d.ts' ) ) ) . toString ( )
617 . replace ( 'paramsType: Array<unknown>' , 'paramsType: Array<DataFieldType>' )
718 . replace ( 'retType: unknown' , 'retType: DataFieldType' )
@@ -13,14 +24,6 @@ const { resolve } = require('path');
1324 retType: DataType.I32 | DataType.Double
1425 }): number
1526
16- export function load(params: FfiParams & {
17- retType: DataType.I32Array | DataType.DoubleArray
18- }): Array<number>
19-
20- export function load(params: FfiParams & {
21- retType: DataType.StringArray
22- }): Array<string>
23-
2427 export function load(params: FfiParams & {
2528 retType: DataType.Boolean
2629 }): Boolean
@@ -41,8 +44,23 @@ const { resolve } = require('path');
4144 never;
4245 };
4346 export function load<T extends Record<string, DataType>>(params: FfiParams & { retType: T }): DataTypeToType<T>
47+ export type ArrayConstructorOptions = {
48+ type: DataType
49+ length: number
50+ }
51+ export function arrayConstructor<T extends ffiTypeTag>(options: ArrayConstructorOptions): ArrayConstructorOptions & {
52+ ffiTypeTag: T
53+ }
54+ type ffiTypeTag = 'double' | 'string' | 'i32';
55+
56+ type FfiReturnType<T extends ffiTypeTag> = T extends 'double' ? number :
57+ T extends 'i32' ? number :
58+ string;
4459
45- export type DataFieldType = DataType | Record<string, DataType>
60+ export function load<T extends ffiTypeTag>(params: FfiParams & { retType: { ffiTypeTag: T } }): Array<FfiReturnType<T>>
61+ export type DataFieldType = DataType | Record<string, DataType>| ArrayConstructorOptions & {
62+ ffiTypeTag: ffiTypeTag
63+ }
4664 ${ typeContent }
4765 ` )
4866} ) ( )
0 commit comments