ted537 / tsembind

Generate typescript bindings for Embind projects
23 stars 3 forks source link

Module Matching Error #9

Open hhergeth opened 2 years ago

hhergeth commented 2 years ago

When running tsembind on a js import library generated with embind I am getting the error message "Cannot find module". I printed the key of the only item stored in the registries variable and got this:

[Object: null prototype] {
  memory: Memory [WebAssembly.Memory] {},
  __wasm_call_ctors: [Function: 62],
  free: [Function: 27395],
  malloc: [Function: 27394],
  __indirect_function_table: Table [WebAssembly.Table] {},
  __errno_location: [Function: 27225],
  __em_js____asyncjs__fetch_json_from_url: Global [WebAssembly.Global] {},
  fflush: [Function: 27257],
  saveSetjmp: [Function: 27410],
  __getTypeName: [Function: 27219],
  _embind_initialize_bindings: [Function: 27220],
  setThrew: [Function: 27409],
  emscripten_stack_init: [Function: 28884],
  emscripten_stack_set_limits: [Function: 28885],
  emscripten_stack_get_free: [Function: 28886],
  emscripten_stack_get_base: [Function: 28887],
  emscripten_stack_get_end: [Function: 28888],
  stackSave: [Function: 28881],
  stackRestore: [Function: 28882],
  stackAlloc: [Function: 28883],
  __cxa_is_pointer_type: [Function: 28857],
  __start_em_js: Global [WebAssembly.Global] {},
  __stop_em_js: Global [WebAssembly.Global] {},
  dynCall_ii: [Function: 28889],
  dynCall_dii: [Function: 28890],
  dynCall_vi: [Function: 28891],
  dynCall_iii: [Function: 28892],
  dynCall_viiiiid: [Function: 28893],
  dynCall_viiid: [Function: 28894],
  dynCall_iiiiid: [Function: 28895],
  dynCall_viiii: [Function: 28896],
  dynCall_viii: [Function: 28897],
  dynCall_vii: [Function: 28898],
  dynCall_viiiii: [Function: 28899],
  dynCall_di: [Function: 28900],
  dynCall_v: [Function: 28901],
  dynCall_diiii: [Function: 28902],
  dynCall_viiiiii: [Function: 28903],
  dynCall_iiii: [Function: 28904],
  dynCall_iiiiiii: [Function: 28905],
  dynCall_i: [Function: 28906],
  dynCall_viid: [Function: 28907],
  dynCall_viiiid: [Function: 28908],
  dynCall_iiid: [Function: 28909],
  dynCall_viiiidd: [Function: 28910],
  dynCall_iiiiiid: [Function: 28911],
  dynCall_iiiid: [Function: 28912],
  dynCall_iiiii: [Function: 28913],
  dynCall_iiiiiiii: [Function: 28914],
  dynCall_iiiiii: [Function: 28915],
  dynCall_iiiiidd: [Function: 28916],
  dynCall_diii: [Function: 28917],
  dynCall_vidi: [Function: 28918],
  dynCall_jiji: [Function: 28926],
  dynCall_iidiiii: [Function: 28920],
  dynCall_viijii: [Function: 28927],
  dynCall_iiiiiiiii: [Function: 28922],
  dynCall_iiiiij: [Function: 28928],
  dynCall_iiiiijj: [Function: 28929],
  dynCall_iiiiiijj: [Function: 28930],
  asyncify_start_unwind: [Function: 28933],
  asyncify_stop_unwind: [Function: 28934],
  asyncify_start_rewind: [Function: 28935],
  asyncify_stop_rewind: [Function: 28936],
  asyncify_get_state: [Function: 28937]
}

At the same time the module.asm lookup key is this:

{
  memory: Memory [WebAssembly.Memory] {},
  __wasm_call_ctors: [Function (anonymous)],
  free: [Function (anonymous)],
  malloc: [Function (anonymous)],
  __indirect_function_table: Table [WebAssembly.Table] {},
  __errno_location: [Function (anonymous)],
  __em_js____asyncjs__fetch_json_from_url: Global [WebAssembly.Global] {},
  fflush: [Function (anonymous)],
  saveSetjmp: [Function (anonymous)],
  __getTypeName: [Function (anonymous)],
  _embind_initialize_bindings: [Function (anonymous)],
  setThrew: [Function (anonymous)],
  emscripten_stack_init: [Function (anonymous)],
  emscripten_stack_set_limits: [Function (anonymous)],
  emscripten_stack_get_free: [Function (anonymous)],
  emscripten_stack_get_base: [Function (anonymous)],
  emscripten_stack_get_end: [Function (anonymous)],
  stackSave: [Function (anonymous)],
  stackRestore: [Function (anonymous)],
  stackAlloc: [Function (anonymous)],
  __cxa_is_pointer_type: [Function (anonymous)],
  __start_em_js: Global [WebAssembly.Global] {},
  __stop_em_js: Global [WebAssembly.Global] {},
  dynCall_ii: [Function (anonymous)],
  dynCall_dii: [Function (anonymous)],
  dynCall_vi: [Function (anonymous)],
  dynCall_iii: [Function (anonymous)],
  dynCall_viiiiid: [Function (anonymous)],
  dynCall_viiid: [Function (anonymous)],
  dynCall_iiiiid: [Function (anonymous)],
  dynCall_viiii: [Function (anonymous)],
  dynCall_viii: [Function (anonymous)],
  dynCall_vii: [Function (anonymous)],
  dynCall_viiiii: [Function (anonymous)],
  dynCall_di: [Function (anonymous)],
  dynCall_v: [Function (anonymous)],
  dynCall_diiii: [Function (anonymous)],
  dynCall_viiiiii: [Function (anonymous)],
  dynCall_iiii: [Function (anonymous)],
  dynCall_iiiiiii: [Function (anonymous)],
  dynCall_i: [Function (anonymous)],
  dynCall_viid: [Function (anonymous)],
  dynCall_viiiid: [Function (anonymous)],
  dynCall_iiid: [Function (anonymous)],
  dynCall_viiiidd: [Function (anonymous)],
  dynCall_iiiiiid: [Function (anonymous)],
  dynCall_iiiid: [Function (anonymous)],
  dynCall_iiiii: [Function (anonymous)],
  dynCall_iiiiiiii: [Function (anonymous)],
  dynCall_iiiiii: [Function (anonymous)],
  dynCall_iiiiidd: [Function (anonymous)],
  dynCall_diii: [Function (anonymous)],
  dynCall_vidi: [Function (anonymous)],
  dynCall_jiji: [Function (anonymous)],
  dynCall_iidiiii: [Function (anonymous)],
  dynCall_viijii: [Function (anonymous)],
  dynCall_iiiiiiiii: [Function (anonymous)],
  dynCall_iiiiij: [Function (anonymous)],
  dynCall_iiiiijj: [Function (anonymous)],
  dynCall_iiiiiijj: [Function (anonymous)],
  asyncify_start_unwind: [Function (anonymous)],
  asyncify_stop_unwind: [Function (anonymous)],
  asyncify_start_rewind: [Function (anonymous)],
  asyncify_stop_rewind: [Function (anonymous)],
  asyncify_get_state: [Function (anonymous)]
}

My emscripten is up to date:

emcc --version
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.23 (5ae63ce7dd955df449cb419bfe5afc51d1bd57f2)

Sadly my WebAssembly knowledge isn't sufficient to understand how to properly fix this problem. My temporary workaround was to simply use the one and only module stored in the registry, which then resulted in the expected ts bindings.

ted537 commented 2 years ago

Hm, it could be that something's changed in a recent embind version - I haven't run this in a while and the features it uses to hook into embind aren't exactly documented / guaranteed to remain stable.