diff --git a/package.json b/package.json index 4a57c0df7..ed3c51cd5 100644 --- a/package.json +++ b/package.json @@ -174,14 +174,14 @@ "devDependencies": { "@biomejs/biome": "^2.4.8", "@cpplint/cli": "^0.1.0", - "@emnapi/runtime": "^1.9.0", + "@emnapi/runtime": "^1.9.1", "@img/sharp-libvips-dev": "1.3.0-rc.3", "@img/sharp-libvips-dev-wasm32": "1.3.0-rc.3", "@img/sharp-libvips-win32-arm64": "1.3.0-rc.3", "@img/sharp-libvips-win32-ia32": "1.3.0-rc.3", "@img/sharp-libvips-win32-x64": "1.3.0-rc.3", "@types/node": "*", - "emnapi": "^1.9.0", + "emnapi": "^1.9.1", "exif-reader": "^2.0.3", "extract-zip": "^2.0.1", "icc": "^3.0.0", diff --git a/src/binding.gyp b/src/binding.gyp index 64970726f..4c5d2a0bc 100644 --- a/src/binding.gyp +++ b/src/binding.gyp @@ -212,7 +212,6 @@ '-Oz', '-sALLOW_MEMORY_GROWTH', '-sENVIRONMENT=node', - '-sEXPORTED_FUNCTIONS=emnapiInit,_vips_shutdown,_uv_library_shutdown', '-sNODERAWFS', '-sWASM_ASYNC_COMPILATION=0' ], diff --git a/src/emscripten/common.gypi b/src/emscripten/common.gypi index e022a29bf..df601c2ba 100644 --- a/src/emscripten/common.gypi +++ b/src/emscripten/common.gypi @@ -16,6 +16,8 @@ ], 'ldflags': [ '--js-library=err)).Value() }); +#else Callback().MakeCallback(Receiver().Value(), { Napi::Error::New(env, sharp::TrimEnd(baton->err)).Value() }); +#endif } delete baton->input; diff --git a/src/pipeline.cc b/src/pipeline.cc index 9cd96e926..4c2f27c54 100644 --- a/src/pipeline.cc +++ b/src/pipeline.cc @@ -1301,7 +1301,11 @@ class PipelineWorker : public Napi::AsyncWorker { if (baton->errUseWarning) { (baton->err).append("\n").append(warning); } else { +#ifdef __EMSCRIPTEN__ + debuglog.Call(Receiver().Value(), { Napi::String::New(env, warning) }); +#else debuglog.MakeCallback(Receiver().Value(), { Napi::String::New(env, warning) }); +#endif } warning = sharp::VipsWarningPop(); } @@ -1355,12 +1359,20 @@ class PipelineWorker : public Napi::AsyncWorker { sharp::FreeCallback(static_cast(baton->bufferOut), nullptr); Napi::TypedArrayOf data = Napi::TypedArrayOf::New(env, baton->bufferOutLength, ab, 0, napi_uint8_array); +#ifdef __EMSCRIPTEN__ + Callback().Call(Receiver().Value(), { env.Null(), data, info }); +#else Callback().MakeCallback(Receiver().Value(), { env.Null(), data, info }); +#endif } else { // Node.js Buffer Napi::Buffer data = Napi::Buffer::NewOrCopy(env, static_cast(baton->bufferOut), baton->bufferOutLength, sharp::FreeCallback); +#ifdef __EMSCRIPTEN__ + Callback().Call(Receiver().Value(), { env.Null(), data, info }); +#else Callback().MakeCallback(Receiver().Value(), { env.Null(), data, info }); +#endif } } else { // Add file size to info @@ -1371,10 +1383,18 @@ class PipelineWorker : public Napi::AsyncWorker { info.Set("size", size); } catch (...) {} } +#ifdef __EMSCRIPTEN__ + Callback().Call(Receiver().Value(), { env.Null(), info }); +#else Callback().MakeCallback(Receiver().Value(), { env.Null(), info }); +#endif } } else { +#ifdef __EMSCRIPTEN__ + Callback().Call(Receiver().Value(), { Napi::Error::New(env, sharp::TrimEnd(baton->err)).Value() }); +#else Callback().MakeCallback(Receiver().Value(), { Napi::Error::New(env, sharp::TrimEnd(baton->err)).Value() }); +#endif } // Delete baton @@ -1395,7 +1415,11 @@ class PipelineWorker : public Napi::AsyncWorker { // Decrement processing task counter sharp::counterProcess--; Napi::Number queueLength = Napi::Number::New(env, static_cast(sharp::counterQueue)); +#ifdef __EMSCRIPTEN__ + queueListener.Call(Receiver().Value(), { queueLength }); +#else queueListener.MakeCallback(Receiver().Value(), { queueLength }); +#endif } private: @@ -1833,7 +1857,11 @@ Napi::Value pipeline(const Napi::CallbackInfo& info) { // Increment queued task counter Napi::Number queueLength = Napi::Number::New(info.Env(), static_cast(++sharp::counterQueue)); +#ifdef __EMSCRIPTEN__ + queueListener.Call(info.This(), { queueLength }); +#else queueListener.MakeCallback(info.This(), { queueLength }); +#endif return info.Env().Undefined(); } diff --git a/src/stats.cc b/src/stats.cc index 4333979d9..a2214a11e 100644 --- a/src/stats.cc +++ b/src/stats.cc @@ -109,7 +109,11 @@ class StatsWorker : public Napi::AsyncWorker { // Handle warnings std::string warning = sharp::VipsWarningPop(); while (!warning.empty()) { +#ifdef __EMSCRIPTEN__ + debuglog.Call(Receiver().Value(), { Napi::String::New(env, warning) }); +#else debuglog.MakeCallback(Receiver().Value(), { Napi::String::New(env, warning) }); +#endif warning = sharp::VipsWarningPop(); } if (baton->err.empty()) { @@ -143,9 +147,17 @@ class StatsWorker : public Napi::AsyncWorker { dominant.Set("g", baton->dominantGreen); dominant.Set("b", baton->dominantBlue); info.Set("dominant", dominant); +#ifdef __EMSCRIPTEN__ + Callback().Call(Receiver().Value(), { env.Null(), info }); +#else Callback().MakeCallback(Receiver().Value(), { env.Null(), info }); +#endif } else { +#ifdef __EMSCRIPTEN__ + Callback().Call(Receiver().Value(), { Napi::Error::New(env, sharp::TrimEnd(baton->err)).Value() }); +#else Callback().MakeCallback(Receiver().Value(), { Napi::Error::New(env, sharp::TrimEnd(baton->err)).Value() }); +#endif } delete baton->input;