diff --git a/node/index.js b/node/index.js index 7a1c805..d885db4 100644 --- a/node/index.js +++ b/node/index.js @@ -4,19 +4,40 @@ import url from 'url'; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); -var lib = ffi.Library( - 'libextism', - { - extism_plugin_register: ['int32', ['string', 'uint64', 'bool']], - extism_error: ['char*', ['int32']], - extism_call: ['int32', ['int32', 'string', 'string', 'uint64']], - extism_output_length: ['uint64', ['int32']], - extism_output_get: ['void', ['int32', 'char*', 'uint64']], - extism_log_file: ['bool', ['string', 'char*']], - extism_plugin_config: ['void', ['int32', 'char*', 'uint64']], - } -) +let _functions = { + extism_plugin_register: ['int32', ['string', 'uint64', 'bool']], + extism_error: ['char*', ['int32']], + extism_call: ['int32', ['int32', 'string', 'string', 'uint64']], + extism_output_length: ['uint64', ['int32']], + extism_output_get: ['void', ['int32', 'char*', 'uint64']], + extism_log_file: ['bool', ['string', 'char*']], + extism_plugin_config: ['void', ['int32', 'char*', 'uint64']], +}; +function locate(paths) { + for (var i = 0; i < paths.length; i++) { + try { + return ffi.Library( + path.join(paths[i], 'libextism'), + _functions + ) + } catch (exn) { + continue; + } + } + + + throw "Unable to locate libextism"; +} + +var searchPath = + [__dirname, "/usr/local/lib", "/usr/lib", path.join(process.env.HOME, ".local")] + +if (process.env.EXTISM_PATH) { + searchPath.unshift(path.join(process.env.EXTISM_PATH, "lib")); +} + +var lib = locate(searchPath); export function set_log_file(filename, level = null) { lib.extism_log_file(filename, level) }