From 036665cbb96686d9758c185043c28bc32f88a173 Mon Sep 17 00:00:00 2001 From: monai Date: Thu, 31 Mar 2016 18:17:10 +0300 Subject: [PATCH 1/3] Workaround NSSpellChecker bug --- lib/spellchecker.js | 13 +++++++++++++ package.json | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/spellchecker.js b/lib/spellchecker.js index 9bce86c..7095f8b 100644 --- a/lib/spellchecker.js +++ b/lib/spellchecker.js @@ -1,10 +1,23 @@ var path = require('path'); +var loophole = require('loophole'); var bindings = require('../build/Release/spellchecker.node'); var Spellchecker = bindings.Spellchecker; var defaultSpellcheck = null; +var objc, pool; + +// Workaround NSSpellChecker bug +// http://stackoverflow.com/a/31383060 +loophole.allowUnsafeNewFunction(function () { + objc = require('nodobjc') + objc.import('Cocoa'); + pool = objc.NSAutoreleasePool('alloc')('init'); + objc.NSApplication('sharedApplication'); + pool('release'); +}); + var setDictionary = function(lang, dictPath) { defaultSpellcheck = new Spellchecker(); // NB: Windows 8 uses *dashes* to set the language (i.e. en-US), so if we fail diff --git a/package.json b/package.json index da48e97..a2985a8 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ "jasmine-focused": "1.x" }, "dependencies": { - "nan": "^2.0.0" + "loophole": "^1.1.0", + "nan": "^2.0.0", + "nodobjc": "^2.1.0" } } From e940c7ae3d02bc789622d031fc63d9776dda99b7 Mon Sep 17 00:00:00 2001 From: monai Date: Thu, 31 Mar 2016 18:21:09 +0300 Subject: [PATCH 2/3] Fix and silence the workaround --- lib/spellchecker.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/spellchecker.js b/lib/spellchecker.js index 7095f8b..4a3c885 100644 --- a/lib/spellchecker.js +++ b/lib/spellchecker.js @@ -11,11 +11,13 @@ var objc, pool; // Workaround NSSpellChecker bug // http://stackoverflow.com/a/31383060 loophole.allowUnsafeNewFunction(function () { - objc = require('nodobjc') - objc.import('Cocoa'); - pool = objc.NSAutoreleasePool('alloc')('init'); - objc.NSApplication('sharedApplication'); - pool('release'); + try { + objc = require('nodobjc') + objc.import('Cocoa'); + pool = objc.NSAutoreleasePool('alloc')('init'); + objc.NSApplication('sharedApplication'); + pool('release'); + } catch (ex) {} }); var setDictionary = function(lang, dictPath) { From 1bf2d749d9edf8fbac73f0c415a3b7f75cc8ddc2 Mon Sep 17 00:00:00 2001 From: monai Date: Thu, 31 Mar 2016 18:21:23 +0300 Subject: [PATCH 3/3] Use bindings package --- lib/spellchecker.js | 2 +- package.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/spellchecker.js b/lib/spellchecker.js index 4a3c885..b30455b 100644 --- a/lib/spellchecker.js +++ b/lib/spellchecker.js @@ -1,6 +1,6 @@ var path = require('path'); var loophole = require('loophole'); -var bindings = require('../build/Release/spellchecker.node'); +var bindings = require('bindings')('spellchecker.node'); var Spellchecker = bindings.Spellchecker; diff --git a/package.json b/package.json index a2985a8..dbf5773 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "jasmine-focused": "1.x" }, "dependencies": { + "bindings": "^1.2.1", "loophole": "^1.1.0", "nan": "^2.0.0", "nodobjc": "^2.1.0"