From cb293639bc867776bebcf6c54dd872971b023473 Mon Sep 17 00:00:00 2001 From: Peter Kelly Date: Mon, 23 Jan 2017 05:11:52 +0700 Subject: [PATCH] fix(core): fix exception in CordovaProperty (#998) This reverts part of commit 67adb23, which moved the call to getPlugin() from within CordovaProperty() to a point where it was called too early. When the CordovaProperty decorator is called on a property, the class containing that call has not yet had its Plugin decorator called. Only when the latter happens does pluginRef get set. Thus, attempting to access pluginRef within CordovaProperty at the time of the call will give undefined, and attemping to call getPlugin with an undefined value will throw an exception: Runtime Error Cannot read property 'split' of undefined TypeError: Cannot read property 'split' of undefined at get at getPlugin at CordovaProperty at __decorate ... The above message can be seen in the browser after running the 'ionic serve' command. This commit moves the getPlugin call back to the getters and setters established by CordovaProperty, which are only called *after* the Plugin decorator has finished executing. closes #992 --- src/plugins/plugin.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/plugin.ts b/src/plugins/plugin.ts index 48ed726f7..83fc9f2c1 100644 --- a/src/plugins/plugin.ts +++ b/src/plugins/plugin.ts @@ -407,8 +407,8 @@ export function CordovaInstance(opts: any = {}) { * Before calling the original method, ensure Cordova and the plugin are installed. */ export function CordovaProperty(target: any, key: string) { - const pluginInstance = getPlugin(target.pluginRef); const exists = () => { + let pluginInstance = getPlugin(target.pluginRef); if (!pluginInstance || pluginInstance[key] === 'undefined') { pluginWarn(target, key); return false; @@ -419,14 +419,14 @@ export function CordovaProperty(target: any, key: string) { Object.defineProperty(target, key, { get: () => { if (exists()) { - return pluginInstance[key]; + return getPlugin(target.pluginRef)[key]; } else { return null; } }, set: (value) => { if (exists()) { - pluginInstance[key] = value; + getPlugin(target.pluginRef)[key] = value; } } });