iframe.io 0.0.4 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +70 -24
  2. package/package.json +6 -4
package/dist/index.js CHANGED
@@ -10,7 +10,19 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
13
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
+ function newObject(data) {
24
+ return JSON.parse(JSON.stringify(data));
25
+ }
14
26
  var IFrameIO = /** @class */ (function () {
15
27
  function IFrameIO(options) {
16
28
  if (options && typeof options !== 'object')
@@ -19,7 +31,7 @@ var IFrameIO = /** @class */ (function () {
19
31
  this.Events = {};
20
32
  this.peer = { type: 'IFRAME' };
21
33
  if (options.type)
22
- this.peer.type = options.type;
34
+ this.peer.type = options.type.toUpperCase();
23
35
  }
24
36
  IFrameIO.prototype.debug = function () {
25
37
  var args = [];
@@ -45,21 +57,20 @@ var IFrameIO = /** @class */ (function () {
45
57
  || typeof data !== 'object'
46
58
  || !data.hasOwnProperty('_event'))
47
59
  return;
48
- var _b = data, _event = _b._event, payload = _b.payload;
60
+ var _b = data, _event = _b._event, payload = _b.payload, callback = _b.callback;
49
61
  _this.debug("[".concat(_this.peer.type, "] Message: ").concat(_event), payload || '');
50
62
  // Handshake or availability check events
51
- if (_event == 'pong')
52
- return;
53
- // Volatile event
54
- if (!_this.Events[_event])
55
- return _this.debug("[".concat(_this.peer.type, "] No <").concat(_event, "> listener defined"));
56
- // Trigger listeners
57
- _this.Events[_event].map(function (fn) { return fn(payload); });
58
- // Delete once event listeners
59
- delete _this.Events[_event + '--@once'];
63
+ if (_event == 'pong') {
64
+ // Content Window is connected to iframe
65
+ _this.trigger('connect');
66
+ return _this.debug("[".concat(_this.peer.type, "] connected"));
67
+ }
68
+ // Trigger available event listeners
69
+ _this.trigger(_event, payload, callback);
60
70
  }, false);
61
71
  this.debug("[".concat(this.peer.type, "] Initiate connection: IFrame origin <").concat(iframeOrigin, ">"));
62
72
  this.emit('ping');
73
+ return this;
63
74
  };
64
75
  IFrameIO.prototype.listen = function (hostOrigin) {
65
76
  // Listening to connection from the content window
@@ -84,19 +95,47 @@ var IFrameIO = /** @class */ (function () {
84
95
  // Origin different from handshaked source origin
85
96
  else if (origin !== _this.peer.origin)
86
97
  throw new Error('Invalid Origin');
87
- var _event = data._event, payload = data.payload;
98
+ var _event = data._event, payload = data.payload, callback = data.callback;
88
99
  _this.debug("[".concat(_this.peer.type, "] Message: ").concat(_event), payload || '');
89
100
  // Handshake or availability check events
90
- if (_event == 'ping')
91
- return _this.emit('pong');
92
- // Volatile event
93
- if (!_this.Events[_event])
94
- return _this.debug("[".concat(_this.peer.type, "] No <").concat(_event, "> listener defined"));
95
- // Trigger listeners
96
- _this.Events[_event].map(function (fn) { return fn(payload); });
97
- // Delete once event listeners
98
- delete _this.Events[_event + '--@once'];
101
+ if (_event == 'ping') {
102
+ _this.emit('pong');
103
+ // Iframe is connected to content window
104
+ _this.trigger('connect');
105
+ return _this.debug("[".concat(_this.peer.type, "] connected"));
106
+ }
107
+ // Trigger available event listeners
108
+ _this.trigger(_event, payload, callback);
99
109
  }, false);
110
+ return this;
111
+ };
112
+ IFrameIO.prototype.trigger = function (_event, payload, callback) {
113
+ var _this = this;
114
+ // Volatile event
115
+ if (!this.Events[_event]
116
+ && !this.Events[_event + '--@once'])
117
+ return this.debug("[".concat(this.peer.type, "] No <").concat(_event, "> listener defined"));
118
+ var callbackFn = callback ?
119
+ function (error) {
120
+ var args = [];
121
+ for (var _i = 1; _i < arguments.length; _i++) {
122
+ args[_i - 1] = arguments[_i];
123
+ }
124
+ _this.emit(_event + '--@callback', { error: error || false, args: args });
125
+ return;
126
+ } : undefined;
127
+ var listeners = [];
128
+ if (this.Events[_event + '--@once']) {
129
+ // Once triggable event
130
+ _event += '--@once';
131
+ listeners = this.Events[_event];
132
+ // Delete once event listeners after triggered
133
+ delete this.Events[_event];
134
+ }
135
+ else
136
+ listeners = this.Events[_event];
137
+ // Trigger listeners
138
+ listeners.map(function (fn) { return payload ? fn(payload, callbackFn) : fn(callbackFn); });
100
139
  };
101
140
  IFrameIO.prototype.emit = function (_event, payload, fn) {
102
141
  if (!this.peer.source)
@@ -105,10 +144,17 @@ var IFrameIO = /** @class */ (function () {
105
144
  fn = payload;
106
145
  payload = null;
107
146
  }
108
- this.peer.source.postMessage(JSON.parse(JSON.stringify({ _event: _event, payload: payload })), this.peer.origin);
109
147
  // Acknowledge/callback event listener
110
- if (typeof fn == 'function')
111
- this.once(_event, fn);
148
+ var hasCallback = false;
149
+ if (typeof fn === 'function') {
150
+ var callbackFunction_1 = fn;
151
+ this.once(_event + '--@callback', function (_a) {
152
+ var error = _a.error, args = _a.args;
153
+ return callbackFunction_1.apply(void 0, __spreadArray([error], args, false));
154
+ });
155
+ hasCallback = true;
156
+ }
157
+ this.peer.source.postMessage(newObject({ _event: _event, payload: payload, callback: hasCallback }), this.peer.origin);
112
158
  return this;
113
159
  };
114
160
  IFrameIO.prototype.on = function (_event, fn) {
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "iframe.io",
3
- "version": "0.0.4",
3
+ "version": "0.0.8",
4
4
  "description": "Easy and friendly API to connect and interact between content window and its containing iframe",
5
5
  "main": "./dist/index.js",
6
- "type": "commonjs",
7
6
  "types": "./src/index.d.ts",
8
7
  "exports": {
9
- "import": "./wrapper.mjs",
10
- "require": "./dist/index.js"
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "require": "./dist/index.js",
11
+ "types": "./src/index.d.ts"
12
+ }
11
13
  },
12
14
  "private": false,
13
15
  "scripts": {