diff --git a/include/addon-tools.hpp b/include/addon-tools.hpp index 9855691..3f0d6c2 100644 --- a/include/addon-tools.hpp +++ b/include/addon-tools.hpp @@ -119,6 +119,9 @@ #define LET_BOOL_ARG(I, VAR) USE_BOOL_ARG(I, VAR, false) +#define SOFT_BOOL_ARG(I, VAR) \ + bool VAR = info.Length() >= (I) && info[I].ToBoolean().Value() || false; + #define REQ_OFFS_ARG(I, VAR) \ CHECK_REQ_ARG(I, IsNumber(), "Number"); \ @@ -188,6 +191,12 @@ CHECK_REQ_ARG(I, IsArrayBuffer(), "Object"); \ Napi::ArrayBuffer VAR = info[I].As(); +#define USE_ARRAY_ARG(I, VAR, DEF) \ + CHECK_LET_ARG(I, IsArray(), "Array"); \ + Napi::Array VAR = IS_ARG_EMPTY(I) ? (DEF) : info[I].As(); + +#define LET_ARRAY_ARG(I, VAR) USE_ARRAY_ARG(I, VAR, Napi::Array::New(env)); + #define REQ_BUF_ARG(I, VAR) \ CHECK_REQ_ARG(I, IsBuffer(), "Buffer"); \ @@ -527,11 +536,14 @@ typedef void (*Es5SetterCallback)(const Napi::CallbackInfo& info); public: \ inline static CLASS *unwrap(Napi::Object thatObj) { \ CLASS *that; \ - napi_unwrap( \ + napi_status ns = napi_unwrap( \ thatObj.Env(), \ thatObj.Get(_nameEs5), \ reinterpret_cast(&that) \ ); \ + if (ns != napi_ok) { \ + return nullptr; \ + } \ return that; \ } \ private: \ @@ -630,11 +642,7 @@ private: \ #define JS_GET_THAT(CLASS) \ - CLASS *that; \ - Napi::Object thatObj = info.This().As(); \ - napi_unwrap( \ - info.Env(), thatObj.Get(_nameEs5), reinterpret_cast(&that) \ - ); + CLASS *that = CLASS::unwrap(info.This().As()); #define JS_DECLARE_METHOD(CLASS, NAME) \ inline static JS_METHOD(__st_##NAME) { \ diff --git a/package-lock.json b/package-lock.json index db56d1f..bab5465 100644 --- a/package-lock.json +++ b/package-lock.json @@ -140,16 +140,16 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", + "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "node-addon-api": {