commit
632465b213
@ -1,24 +0,0 @@ |
|||||||
module.exports = ensnare |
|
||||||
|
|
||||||
// creates a proxy object that calls cb everytime the obj's properties/fns are accessed
|
|
||||||
function ensnare (obj, cb) { |
|
||||||
var proxy = {} |
|
||||||
Object.keys(obj).forEach(function (key) { |
|
||||||
var val = obj[key] |
|
||||||
switch (typeof val) { |
|
||||||
case 'function': |
|
||||||
proxy[key] = function () { |
|
||||||
cb() |
|
||||||
val.apply(obj, arguments) |
|
||||||
} |
|
||||||
return |
|
||||||
default: |
|
||||||
Object.defineProperty(proxy, key, { |
|
||||||
get: function () { cb(); return obj[key] }, |
|
||||||
set: function (val) { cb(); obj[key] = val; return val }, |
|
||||||
}) |
|
||||||
return |
|
||||||
} |
|
||||||
}) |
|
||||||
return proxy |
|
||||||
} |
|
@ -1,56 +0,0 @@ |
|||||||
const Duplex = require('readable-stream').Duplex |
|
||||||
const inherits = require('util').inherits |
|
||||||
|
|
||||||
module.exports = LocalMessageDuplexStream |
|
||||||
|
|
||||||
inherits(LocalMessageDuplexStream, Duplex) |
|
||||||
|
|
||||||
function LocalMessageDuplexStream (opts) { |
|
||||||
Duplex.call(this, { |
|
||||||
objectMode: true, |
|
||||||
}) |
|
||||||
|
|
||||||
// this._origin = opts.origin
|
|
||||||
this._name = opts.name |
|
||||||
this._target = opts.target |
|
||||||
|
|
||||||
// console.log('LocalMessageDuplexStream ('+this._name+') - initialized...')
|
|
||||||
window.addEventListener('message', this._onMessage.bind(this), false) |
|
||||||
} |
|
||||||
|
|
||||||
// private
|
|
||||||
|
|
||||||
LocalMessageDuplexStream.prototype._onMessage = function (event) { |
|
||||||
var msg = event.data |
|
||||||
// console.log('LocalMessageDuplexStream ('+this._name+') - heard message...', event)
|
|
||||||
// validate message
|
|
||||||
if (event.origin !== location.origin) return // console.log('LocalMessageDuplexStream ('+this._name+') - rejected - (event.origin !== location.origin) ')
|
|
||||||
if (typeof msg !== 'object') return // console.log('LocalMessageDuplexStream ('+this._name+') - rejected - (typeof msg !== "object") ')
|
|
||||||
if (msg.target !== this._name) return // console.log('LocalMessageDuplexStream ('+this._name+') - rejected - (msg.target !== this._name) ', msg.target, this._name)
|
|
||||||
if (!msg.data) return // console.log('LocalMessageDuplexStream ('+this._name+') - rejected - (!msg.data) ')
|
|
||||||
// console.log('LocalMessageDuplexStream ('+this._name+') - accepted', msg.data)
|
|
||||||
// forward message
|
|
||||||
try { |
|
||||||
this.push(msg.data) |
|
||||||
} catch (err) { |
|
||||||
this.emit('error', err) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// stream plumbing
|
|
||||||
|
|
||||||
LocalMessageDuplexStream.prototype._read = noop |
|
||||||
|
|
||||||
LocalMessageDuplexStream.prototype._write = function (data, encoding, cb) { |
|
||||||
// console.log('LocalMessageDuplexStream ('+this._name+') - sending message...')
|
|
||||||
var message = { |
|
||||||
target: this._target, |
|
||||||
data: data, |
|
||||||
} |
|
||||||
window.postMessage(message, location.origin) |
|
||||||
cb() |
|
||||||
} |
|
||||||
|
|
||||||
// util
|
|
||||||
|
|
||||||
function noop () {} |
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue