iframe.io 0.0.3 → 0.0.7

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 +81 -24
  2. package/package.json +8 -2
package/dist/index.js CHANGED
@@ -10,7 +10,30 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
25
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
26
+ if (ar || !(i in from)) {
27
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
28
+ ar[i] = from[i];
29
+ }
30
+ }
31
+ return to.concat(ar || Array.prototype.slice.call(from));
32
+ };
13
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
+ function newObject(data) {
35
+ return JSON.parse(JSON.stringify(data));
36
+ }
14
37
  var IFrameIO = /** @class */ (function () {
15
38
  function IFrameIO(options) {
16
39
  if (options && typeof options !== 'object')
@@ -19,7 +42,7 @@ var IFrameIO = /** @class */ (function () {
19
42
  this.Events = {};
20
43
  this.peer = { type: 'IFRAME' };
21
44
  if (options.type)
22
- this.peer.type = options.type;
45
+ this.peer.type = options.type.toUpperCase();
23
46
  }
24
47
  IFrameIO.prototype.debug = function () {
25
48
  var args = [];
@@ -45,21 +68,20 @@ var IFrameIO = /** @class */ (function () {
45
68
  || typeof data !== 'object'
46
69
  || !data.hasOwnProperty('_event'))
47
70
  return;
48
- var _b = data, _event = _b._event, payload = _b.payload;
71
+ var _b = data, _event = _b._event, payload = _b.payload, callback = _b.callback;
49
72
  _this.debug("[".concat(_this.peer.type, "] Message: ").concat(_event), payload || '');
50
73
  // 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'];
74
+ if (_event == 'pong') {
75
+ // Content Window is connected to iframe
76
+ _this.trigger('connect');
77
+ return _this.debug("[".concat(_this.peer.type, "] connected"));
78
+ }
79
+ // Trigger available event listeners
80
+ _this.trigger(_event, payload, callback);
60
81
  }, false);
61
82
  this.debug("[".concat(this.peer.type, "] Initiate connection: IFrame origin <").concat(iframeOrigin, ">"));
62
83
  this.emit('ping');
84
+ return this;
63
85
  };
64
86
  IFrameIO.prototype.listen = function (hostOrigin) {
65
87
  // Listening to connection from the content window
@@ -84,19 +106,47 @@ var IFrameIO = /** @class */ (function () {
84
106
  // Origin different from handshaked source origin
85
107
  else if (origin !== _this.peer.origin)
86
108
  throw new Error('Invalid Origin');
87
- var _event = data._event, payload = data.payload;
109
+ var _event = data._event, payload = data.payload, callback = data.callback;
88
110
  _this.debug("[".concat(_this.peer.type, "] Message: ").concat(_event), payload || '');
89
111
  // 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'];
112
+ if (_event == 'ping') {
113
+ _this.emit('pong');
114
+ // Iframe is connected to content window
115
+ _this.trigger('connect');
116
+ return _this.debug("[".concat(_this.peer.type, "] connected"));
117
+ }
118
+ // Trigger available event listeners
119
+ _this.trigger(_event, payload, callback);
99
120
  }, false);
121
+ return this;
122
+ };
123
+ IFrameIO.prototype.trigger = function (_event, payload, callback) {
124
+ var _this = this;
125
+ // Volatile event
126
+ if (!this.Events[_event]
127
+ && !this.Events[_event + '--@once'])
128
+ return this.debug("[".concat(this.peer.type, "] No <").concat(_event, "> listener defined"));
129
+ var callbackFn = callback ?
130
+ function (error) {
131
+ var args = [];
132
+ for (var _i = 1; _i < arguments.length; _i++) {
133
+ args[_i - 1] = arguments[_i];
134
+ }
135
+ _this.emit(_event + '--@callback', __assign({ error: error || false }, args));
136
+ return;
137
+ } : undefined;
138
+ var listeners = [];
139
+ if (this.Events[_event + '--@once']) {
140
+ // Once triggable event
141
+ _event += '--@once';
142
+ listeners = this.Events[_event];
143
+ // Delete once event listeners after triggered
144
+ delete this.Events[_event];
145
+ }
146
+ else
147
+ listeners = this.Events[_event];
148
+ // Trigger listeners
149
+ listeners.map(function (fn) { return payload ? fn(payload, callbackFn) : fn(callbackFn); });
100
150
  };
101
151
  IFrameIO.prototype.emit = function (_event, payload, fn) {
102
152
  if (!this.peer.source)
@@ -105,10 +155,17 @@ var IFrameIO = /** @class */ (function () {
105
155
  fn = payload;
106
156
  payload = null;
107
157
  }
108
- this.peer.source.postMessage(JSON.parse(JSON.stringify({ _event: _event, payload: payload })), this.peer.origin);
109
158
  // Acknowledge/callback event listener
110
- if (typeof fn == 'function')
111
- this.once(_event, fn);
159
+ var hasCallback = false;
160
+ if (typeof fn === 'function') {
161
+ var callbackFunction_1 = fn;
162
+ this.once(_event + '--@callback', function (_a) {
163
+ var error = _a.error, args = __rest(_a, ["error"]);
164
+ return callbackFunction_1.apply(void 0, __spreadArray([error], args, false));
165
+ });
166
+ hasCallback = true;
167
+ }
168
+ this.peer.source.postMessage(newObject({ _event: _event, payload: payload, callback: hasCallback }), this.peer.origin);
112
169
  return this;
113
170
  };
114
171
  IFrameIO.prototype.on = function (_event, fn) {
package/package.json CHANGED
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "name": "iframe.io",
3
- "version": "0.0.3",
3
+ "version": "0.0.7",
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",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "require": "./dist/index.js",
11
+ "types": "./src/index.d.ts"
12
+ }
13
+ },
8
14
  "private": false,
9
15
  "scripts": {
10
16
  "compile": "rimraf ./dist && tsc",