rimless 0.1.5 → 0.2.0

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.
package/lib/guest.js DELETED
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var helpers_1 = require("./helpers");
4
- var rpc_1 = require("./rpc");
5
- var types_1 = require("./types");
6
- var REQUEST_INTERVAL = 600;
7
- var TIMEOUT_INTERVAL = 3000;
8
- var interval = null;
9
- var connected = false;
10
- function connect(schema, options) {
11
- if (schema === void 0) { schema = {}; }
12
- if (options === void 0) { options = {}; }
13
- return new Promise(function (resolve, reject) {
14
- var localMethods = helpers_1.extractMethods(schema);
15
- // on handshake response
16
- function handleHandshakeResponse(event) {
17
- if (event.data.action !== types_1.actions.HANDSHAKE_REPLY)
18
- return;
19
- // register local methods
20
- var unregisterLocal = rpc_1.registerLocalMethods(schema, localMethods, event.data.connectionID);
21
- // register remote methods
22
- var _a = rpc_1.registerRemoteMethods(event.data.schema, event.data.methods, event.data.connectionID, event), remote = _a.remote, unregisterRemote = _a.unregisterRemote;
23
- // close the connection and all listeners when called
24
- var close = function () {
25
- self.removeEventListener(types_1.events.MESSAGE, handleHandshakeResponse);
26
- unregisterRemote();
27
- unregisterLocal();
28
- };
29
- connected = true;
30
- // resolve connection object
31
- var connection = { remote: remote, close: close };
32
- return resolve(connection);
33
- }
34
- // subscribe to HANDSHAKE REPLY MESSAGES
35
- self.addEventListener(types_1.events.MESSAGE, handleHandshakeResponse);
36
- var payload = {
37
- action: types_1.actions.HANDSHAKE_REQUEST,
38
- methods: localMethods,
39
- schema: JSON.parse(JSON.stringify(schema)),
40
- };
41
- interval = setInterval(function () {
42
- if (connected)
43
- return clearInterval(interval);
44
- // publish the HANDSHAKE REQUEST
45
- if (helpers_1.isWorker())
46
- self.postMessage(payload);
47
- else
48
- window.parent.postMessage(payload, "*");
49
- }, REQUEST_INTERVAL);
50
- // timeout the connection after a time
51
- setTimeout(function () {
52
- if (!connected)
53
- reject("connection timeout");
54
- }, TIMEOUT_INTERVAL);
55
- });
56
- }
57
- exports.default = ({
58
- connect: connect,
59
- });
60
- //# sourceMappingURL=guest.js.map
package/lib/guest.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"guest.js","sourceRoot":"","sources":["../src/guest.ts"],"names":[],"mappings":";;AAAA,qCAAqD;AACrD,6BAAoE;AACpE,iCAAgE;AAEhE,IAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,IAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,IAAI,QAAQ,GAAQ,IAAI,CAAC;AACzB,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,SAAS,OAAO,CAAC,MAAoB,EAAE,OAAiB;IAAvC,uBAAA,EAAA,WAAoB;IAAE,wBAAA,EAAA,YAAiB;IACtD,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QAEjC,IAAM,YAAY,GAAG,wBAAc,CAAC,MAAM,CAAC,CAAC;QAE5C,wBAAwB;QACxB,SAAS,uBAAuB,CAAC,KAAU;YACzC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,eAAO,CAAC,eAAe;gBAAE,OAAO;YAE1D,yBAAyB;YACzB,IAAM,eAAe,GAAG,0BAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE5F,0BAA0B;YACpB,IAAA,uGACwF,EADtF,kBAAM,EAAE,sCAC8E,CAAC;YAE/F,qDAAqD;YACrD,IAAM,KAAK,GAAG;gBACZ,IAAI,CAAC,mBAAmB,CAAC,cAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;gBAClE,gBAAgB,EAAE,CAAC;gBACnB,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC;YAEF,SAAS,GAAG,IAAI,CAAC;YAEjB,4BAA4B;YAC5B,IAAM,UAAU,GAAG,EAAE,MAAM,QAAA,EAAE,KAAK,OAAA,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC,gBAAgB,CAAC,cAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;QAE/D,IAAM,OAAO,GAAG;YACd,MAAM,EAAE,eAAO,CAAC,iBAAiB;YACjC,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAC3C,CAAC;QAEF,QAAQ,GAAG,WAAW,CAAC;YACrB,IAAI,SAAS;gBAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;YAE9C,gCAAgC;YAChC,IAAI,kBAAQ,EAAE;gBAAG,IAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;;gBAC9C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE/C,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAErB,sCAAsC;QACtC,UAAU,CAAC;YACT,IAAI,CAAC,SAAS;gBAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC/C,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAEvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,CAAC;IACd,OAAO,SAAA;CACR,CAAC,CAAC"}
package/lib/helpers.d.ts DELETED
@@ -1,26 +0,0 @@
1
- export declare const CONNECTION_TIMEOUT = 1000;
2
- /**
3
- * check if the remote is trusted
4
- *
5
- * @param event
6
- */
7
- export declare function isTrustedRemote(event: any): boolean;
8
- /**
9
- * check if run in a webworker
10
- *
11
- * @param event
12
- */
13
- export declare function isWorker(): boolean;
14
- /**
15
- * we cannot send functions through postMessage
16
- * extract the path to all functions in the schema
17
- *
18
- * @param obj
19
- */
20
- export declare function extractMethods(obj: any): string[];
21
- /**
22
- * convert the url into an origin (remove paths)
23
- *
24
- * @param url
25
- */
26
- export declare function getOriginFromURL(url: string | null): string;
package/lib/helpers.js DELETED
@@ -1,84 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CONNECTION_TIMEOUT = 1000;
4
- /**
5
- * check if the remote is trusted
6
- *
7
- * @param event
8
- */
9
- function isTrustedRemote(event) {
10
- // TODO: implement
11
- return true;
12
- }
13
- exports.isTrustedRemote = isTrustedRemote;
14
- /**
15
- * check if run in a webworker
16
- *
17
- * @param event
18
- */
19
- function isWorker() {
20
- return typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
21
- }
22
- exports.isWorker = isWorker;
23
- /**
24
- * we cannot send functions through postMessage
25
- * extract the path to all functions in the schema
26
- *
27
- * @param obj
28
- */
29
- function extractMethods(obj) {
30
- var paths = [];
31
- (function parse(obj, path) {
32
- if (path === void 0) { path = ""; }
33
- Object.keys(obj).forEach(function (prop) {
34
- var propPath = path ? path + "." + prop : prop;
35
- if (obj[prop] === Object(obj[prop])) {
36
- parse(obj[prop], propPath);
37
- }
38
- if (typeof obj[prop] === "function") {
39
- paths.push(propPath);
40
- }
41
- });
42
- }(obj));
43
- return paths;
44
- }
45
- exports.extractMethods = extractMethods;
46
- var urlRegex = /^(https?:|file:)?\/\/([^/:]+)?(:(\d+))?/;
47
- var ports = { "http:": "80", "https:": "443" };
48
- /**
49
- * convert the url into an origin (remove paths)
50
- *
51
- * @param url
52
- */
53
- function getOriginFromURL(url) {
54
- var _a;
55
- var location = document.location;
56
- var regexResult = urlRegex.exec(url || "");
57
- var protocol;
58
- var hostname;
59
- var port;
60
- if (regexResult) {
61
- // It's an absolute URL. Use the parsed info.
62
- // regexResult[1] will be undefined if the URL starts with //
63
- _a = regexResult[1], protocol = _a === void 0 ? location.protocol : _a, hostname = regexResult[2], port = regexResult[4];
64
- }
65
- else {
66
- // It's a relative path. Use the current location's info.
67
- protocol = location.protocol;
68
- hostname = location.hostname;
69
- port = location.port;
70
- }
71
- // If the protocol is file, the origin is "null"
72
- // The origin of a document with file protocol is an opaque origin
73
- // and its serialization "null" [1]
74
- // [1] https://html.spec.whatwg.org/multipage/origin.html#origin
75
- if (protocol === "file:") {
76
- return "null";
77
- }
78
- // If the port is the default for the protocol, we don't want to add it to the origin string
79
- // or it won't match the message's event.origin.
80
- var portSuffix = port && port !== ports[protocol] ? ":" + port : "";
81
- return protocol + "//" + hostname + portSuffix;
82
- }
83
- exports.getOriginFromURL = getOriginFromURL;
84
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;AAAa,QAAA,kBAAkB,GAAG,IAAI,CAAC;AAEvC;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAAU;IACxC,kBAAkB;IAClB,OAAO,IAAI,CAAC;AACd,CAAC;AAHD,0CAGC;AAED;;;;GAIG;AACH,SAAgB,QAAQ;IACtB,OAAO,OAAO,iBAAiB,KAAK,WAAW,IAAI,IAAI,YAAY,iBAAiB,CAAC;AACvF,CAAC;AAFD,4BAEC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,GAAQ;IACrC,IAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,CAAC,SAAS,KAAK,CAAC,GAAQ,EAAE,IAAS;QAAT,qBAAA,EAAA,SAAS;QACjC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI;YAC5B,IAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAI,IAAI,SAAI,IAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACjD,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;gBACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;aAC5B;YACD,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;gBACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACtB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACR,OAAO,KAAK,CAAC;AACf,CAAC;AAdD,wCAcC;AAED,IAAM,QAAQ,GAAG,yCAAyC,CAAC;AAC3D,IAAM,KAAK,GAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAEtD;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,GAAkB;;IAEzC,IAAA,4BAAQ,CAAc;IAE9B,IAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC7C,IAAI,QAAQ,CAAC;IACb,IAAI,QAAQ,CAAC;IACb,IAAI,IAAI,CAAC;IAET,IAAI,WAAW,EAAE;QACf,6CAA6C;QAC7C,6DAA6D;QAC1D,mBAA4B,EAA5B,iDAA4B,EAAE,yBAAQ,EAAI,qBAAI,CAAgB;KAClE;SAAM;QACL,yDAAyD;QACzD,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC7B,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC7B,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;KACtB;IAED,gDAAgD;IAChD,kEAAkE;IAClE,mCAAmC;IACnC,gEAAgE;IAChE,IAAI,QAAQ,KAAK,OAAO,EAAE;QACxB,OAAO,MAAM,CAAC;KACf;IAED,4FAA4F;IAC5F,gDAAgD;IAChD,IAAM,UAAU,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAI,IAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,OAAU,QAAQ,UAAK,QAAQ,GAAG,UAAY,CAAC;AACjD,CAAC;AAhCD,4CAgCC"}
package/lib/host.d.ts DELETED
@@ -1,15 +0,0 @@
1
- import { IConnection, ISchema } from "./types";
2
- /**
3
- * Perform a handshake with the target iframe, when the handshake is confirmed
4
- * resolve the connection object containing RPCs and properties
5
- *
6
- * @param iframe
7
- * @param schema
8
- * @param options
9
- * @returns Promise
10
- */
11
- declare function connect(guest: HTMLIFrameElement | Worker, schema?: ISchema, options?: any): Promise<IConnection>;
12
- declare const _default: {
13
- connect: typeof connect;
14
- };
15
- export default _default;
package/lib/host.js DELETED
@@ -1,77 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var short_uuid_1 = __importDefault(require("short-uuid"));
7
- var helpers_1 = require("./helpers");
8
- var rpc_1 = require("./rpc");
9
- var types_1 = require("./types");
10
- var connections = {};
11
- function isValidTarget(iframe, event) {
12
- var childURL = iframe.getAttribute("src");
13
- var childOrigin = helpers_1.getOriginFromURL(childURL);
14
- var hasProperOrigin = event.origin === childOrigin;
15
- var hasProperSource = event.source === iframe.contentWindow;
16
- return hasProperOrigin && hasProperSource;
17
- }
18
- /**
19
- * Perform a handshake with the target iframe, when the handshake is confirmed
20
- * resolve the connection object containing RPCs and properties
21
- *
22
- * @param iframe
23
- * @param schema
24
- * @param options
25
- * @returns Promise
26
- */
27
- function connect(guest, schema, options) {
28
- if (schema === void 0) { schema = {}; }
29
- if (!guest)
30
- throw new Error("a target is required");
31
- // this check should be improved
32
- var guestIsWorker = guest.onerror !== undefined &&
33
- guest.onmessage !== undefined;
34
- var listeners = guestIsWorker ? guest : window;
35
- return new Promise(function (resolve, reject) {
36
- var connectionID = short_uuid_1.default.generate();
37
- // on handshake request
38
- function handleHandshake(event) {
39
- if (!guestIsWorker && !isValidTarget(guest, event))
40
- return;
41
- if (event.data.action !== types_1.actions.HANDSHAKE_REQUEST)
42
- return;
43
- // register local methods
44
- var localMethods = helpers_1.extractMethods(schema);
45
- var unregisterLocal = rpc_1.registerLocalMethods(schema, localMethods, connectionID, guestIsWorker ? guest : undefined);
46
- // register remote methods
47
- var _a = rpc_1.registerRemoteMethods(event.data.schema, event.data.methods, connectionID, event, guestIsWorker ? guest : undefined), remote = _a.remote, unregisterRemote = _a.unregisterRemote;
48
- var payload = {
49
- action: types_1.actions.HANDSHAKE_REPLY,
50
- connectionID: connectionID,
51
- methods: localMethods,
52
- schema: JSON.parse(JSON.stringify(schema)),
53
- };
54
- // confirm the connection
55
- if (guestIsWorker)
56
- guest.postMessage(payload);
57
- else
58
- event.source.postMessage(payload, event.origin);
59
- // close the connection and all listeners when called
60
- var close = function () {
61
- listeners.removeEventListener(types_1.events.MESSAGE, handleHandshake);
62
- unregisterRemote();
63
- unregisterLocal();
64
- };
65
- // resolve connection object
66
- var connection = { remote: remote, close: close };
67
- connections[connectionID] = connection;
68
- return resolve(connection);
69
- }
70
- // subscribe to HANDSHAKE MESSAGES
71
- listeners.addEventListener(types_1.events.MESSAGE, handleHandshake);
72
- });
73
- }
74
- exports.default = ({
75
- connect: connect,
76
- });
77
- //# sourceMappingURL=host.js.map
package/lib/host.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":";;;;;AAAA,0DAA+B;AAE/B,qCAA6D;AAC7D,6BAAoE;AACpE,iCAA8E;AAE9E,IAAM,WAAW,GAAiB,EAAE,CAAC;AAErC,SAAS,aAAa,CAAC,MAAyB,EAAE,KAAU;IAC1D,IAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAM,WAAW,GAAG,0BAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAM,eAAe,GAAG,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC;IACrD,IAAM,eAAe,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,CAAC;IAE9D,OAAO,eAAe,IAAI,eAAe,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,OAAO,CACd,KAAiC,EACjC,MAAoB,EACpB,OAAa;IADb,uBAAA,EAAA,WAAoB;IAGpB,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEpD,gCAAgC;IAChC,IAAM,aAAa,GAChB,KAAgB,CAAC,OAAO,KAAK,SAAS;QACtC,KAAgB,CAAC,SAAS,KAAK,SAAS,CAAC;IAC5C,IAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAEjD,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QACjC,IAAM,YAAY,GAAG,oBAAK,CAAC,QAAQ,EAAE,CAAC;QAEtC,uBAAuB;QACvB,SAAS,eAAe,CAAC,KAAU;YACjC,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,KAA0B,EAAE,KAAK,CAAC;gBAAE,OAAO;YAChF,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,eAAO,CAAC,iBAAiB;gBAAE,OAAO;YAE5D,yBAAyB;YACzB,IAAM,YAAY,GAAG,wBAAc,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAM,eAAe,GACnB,0BAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAE,KAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAE1G,0BAA0B;YACpB,IAAA,+HAC4H,EAD1H,kBAAM,EAAE,sCACkH,CAAC;YAEnI,IAAM,OAAO,GAAG;gBACd,MAAM,EAAE,eAAO,CAAC,eAAe;gBAC/B,YAAY,cAAA;gBACZ,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aAC3C,CAAC;YAEF,yBAAyB;YACzB,IAAI,aAAa;gBAAG,KAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;;gBACrD,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAErD,qDAAqD;YACrD,IAAM,KAAK,GAAG;gBACZ,SAAS,CAAC,mBAAmB,CAAC,cAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBAC/D,gBAAgB,EAAE,CAAC;gBACnB,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC;YAEF,4BAA4B;YAC5B,IAAM,UAAU,GAAgB,EAAE,MAAM,QAAA,EAAE,KAAK,OAAA,EAAE,CAAC;YAClD,WAAW,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;YACvC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,kCAAkC;QAClC,SAAS,CAAC,gBAAgB,CAAC,cAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,CAAC;IACd,OAAO,SAAA;CACR,CAAC,CAAC"}
package/lib/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import guest from "./guest";
2
- import host from "./host";
3
- export { host, guest };
package/lib/index.js DELETED
@@ -1,10 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var guest_1 = __importDefault(require("./guest"));
7
- exports.guest = guest_1.default;
8
- var host_1 = __importDefault(require("./host"));
9
- exports.host = host_1.default;
10
- //# sourceMappingURL=index.js.map
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,kDAA4B;AAGb,gBAHR,eAAK,CAGQ;AAFpB,gDAA0B;AAEjB,eAFF,cAAI,CAEE"}
@@ -1 +0,0 @@
1
- (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.rimless=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var helpers_1=require("./helpers");var rpc_1=require("./rpc");var types_1=require("./types");var REQUEST_INTERVAL=600;var TIMEOUT_INTERVAL=3e3;var interval=null;var connected=false;function connect(schema,options){if(schema===void 0){schema={}}if(options===void 0){options={}}return new Promise(function(resolve,reject){var localMethods=helpers_1.extractMethods(schema);function handleHandshakeResponse(event){if(event.data.action!==types_1.actions.HANDSHAKE_REPLY)return;var unregisterLocal=rpc_1.registerLocalMethods(schema,localMethods,event.data.connectionID);var _a=rpc_1.registerRemoteMethods(event.data.schema,event.data.methods,event.data.connectionID,event),remote=_a.remote,unregisterRemote=_a.unregisterRemote;var close=function(){self.removeEventListener(types_1.events.MESSAGE,handleHandshakeResponse);unregisterRemote();unregisterLocal()};connected=true;var connection={remote:remote,close:close};return resolve(connection)}self.addEventListener(types_1.events.MESSAGE,handleHandshakeResponse);var payload={action:types_1.actions.HANDSHAKE_REQUEST,methods:localMethods,schema:JSON.parse(JSON.stringify(schema))};interval=setInterval(function(){if(connected)return clearInterval(interval);if(helpers_1.isWorker())self.postMessage(payload);else window.parent.postMessage(payload,"*")},REQUEST_INTERVAL);setTimeout(function(){if(!connected)reject("connection timeout")},TIMEOUT_INTERVAL)})}exports.default={connect:connect}},{"./helpers":2,"./rpc":5,"./types":6}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CONNECTION_TIMEOUT=1e3;function isTrustedRemote(event){return true}exports.isTrustedRemote=isTrustedRemote;function isWorker(){return typeof WorkerGlobalScope!=="undefined"&&self instanceof WorkerGlobalScope}exports.isWorker=isWorker;function extractMethods(obj){var paths=[];(function parse(obj,path){if(path===void 0){path=""}Object.keys(obj).forEach(function(prop){var propPath=path?path+"."+prop:prop;if(obj[prop]===Object(obj[prop])){parse(obj[prop],propPath)}if(typeof obj[prop]==="function"){paths.push(propPath)}})})(obj);return paths}exports.extractMethods=extractMethods;var urlRegex=/^(https?:|file:)?\/\/([^/:]+)?(:(\d+))?/;var ports={"http:":"80","https:":"443"};function getOriginFromURL(url){var _a;var location=document.location;var regexResult=urlRegex.exec(url||"");var protocol;var hostname;var port;if(regexResult){_a=regexResult[1],protocol=_a===void 0?location.protocol:_a,hostname=regexResult[2],port=regexResult[4]}else{protocol=location.protocol;hostname=location.hostname;port=location.port}if(protocol==="file:"){return"null"}var portSuffix=port&&port!==ports[protocol]?":"+port:"";return protocol+"//"+hostname+portSuffix}exports.getOriginFromURL=getOriginFromURL},{}],3:[function(require,module,exports){"use strict";var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:true});var short_uuid_1=__importDefault(require("short-uuid"));var helpers_1=require("./helpers");var rpc_1=require("./rpc");var types_1=require("./types");var connections={};function isValidTarget(iframe,event){var childURL=iframe.getAttribute("src");var childOrigin=helpers_1.getOriginFromURL(childURL);var hasProperOrigin=event.origin===childOrigin;var hasProperSource=event.source===iframe.contentWindow;return hasProperOrigin&&hasProperSource}function connect(guest,schema,options){if(schema===void 0){schema={}}if(!guest)throw new Error("a target is required");var guestIsWorker=guest.onerror!==undefined&&guest.onmessage!==undefined;var listeners=guestIsWorker?guest:window;return new Promise(function(resolve,reject){var connectionID=short_uuid_1.default.generate();function handleHandshake(event){if(!guestIsWorker&&!isValidTarget(guest,event))return;if(event.data.action!==types_1.actions.HANDSHAKE_REQUEST)return;var localMethods=helpers_1.extractMethods(schema);var unregisterLocal=rpc_1.registerLocalMethods(schema,localMethods,connectionID,guestIsWorker?guest:undefined);var _a=rpc_1.registerRemoteMethods(event.data.schema,event.data.methods,connectionID,event,guestIsWorker?guest:undefined),remote=_a.remote,unregisterRemote=_a.unregisterRemote;var payload={action:types_1.actions.HANDSHAKE_REPLY,connectionID:connectionID,methods:localMethods,schema:JSON.parse(JSON.stringify(schema))};if(guestIsWorker)guest.postMessage(payload);else event.source.postMessage(payload,event.origin);var close=function(){listeners.removeEventListener(types_1.events.MESSAGE,handleHandshake);unregisterRemote();unregisterLocal()};var connection={remote:remote,close:close};connections[connectionID]=connection;return resolve(connection)}listeners.addEventListener(types_1.events.MESSAGE,handleHandshake)})}exports.default={connect:connect}},{"./helpers":2,"./rpc":5,"./types":6,"short-uuid":11}],4:[function(require,module,exports){"use strict";var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:true});var guest_1=__importDefault(require("./guest"));exports.guest=guest_1.default;var host_1=__importDefault(require("./host"));exports.host=host_1.default},{"./guest":1,"./host":3}],5:[function(require,module,exports){"use strict";var __assign=this&&this.__assign||function(){__assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))t[p]=s[p]}return t};return __assign.apply(this,arguments)};var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};var __generator=this&&this.__generator||function(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}};var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:true});var lodash_get_1=__importDefault(require("lodash.get"));var lodash_set_1=__importDefault(require("lodash.set"));var short_uuid_1=__importDefault(require("short-uuid"));var helpers_1=require("./helpers");var types_1=require("./types");function registerLocalMethods(schema,methods,_connectionID,guest){if(schema===void 0){schema={}}if(methods===void 0){methods=[]}var listeners=[];methods.forEach(function(methodName){function handleCall(event){return __awaiter(this,void 0,void 0,function(){var _a,action,callID,connectionID,callName,_b,args,payload,result,error_1;return __generator(this,function(_c){switch(_c.label){case 0:_a=event.data,action=_a.action,callID=_a.callID,connectionID=_a.connectionID,callName=_a.callName,_b=_a.args,args=_b===void 0?[]:_b;if(action!==types_1.actions.RPC_REQUEST)return[2];if(!helpers_1.isTrustedRemote(event))return[2];if(!callID||!callName)return[2];if(callName!==methodName)return[2];if(connectionID!==_connectionID)return[2];payload={action:types_1.actions.RPC_RESOLVE,callID:callID,callName:callName,connectionID:connectionID,error:null,result:null};_c.label=1;case 1:_c.trys.push([1,3,,4]);return[4,lodash_get_1.default(schema,methodName).apply(void 0,args)];case 2:result=_c.sent();payload.result=JSON.parse(JSON.stringify(result));return[3,4];case 3:error_1=_c.sent();payload.error=JSON.parse(JSON.stringify(error_1,Object.getOwnPropertyNames(error_1)));return[3,4];case 4:if(guest)guest.postMessage(payload);else if(helpers_1.isWorker())self.postMessage(payload);else event.source.postMessage(payload,event.origin);return[2]}})})}if(guest)guest.addEventListener(types_1.events.MESSAGE,handleCall);else self.addEventListener(types_1.events.MESSAGE,handleCall);listeners.push(function(){return self.removeEventListener(types_1.events.MESSAGE,handleCall)})});return function(){return listeners.forEach(function(unregister){return unregister()})}}exports.registerLocalMethods=registerLocalMethods;function createRPC(_callName,_connectionID,event,listeners,guest){if(listeners===void 0){listeners=[]}return function(){var args=[];for(var _i=0;_i<arguments.length;_i++){args[_i]=arguments[_i]}return new Promise(function(resolve,reject){var callID=short_uuid_1.default.generate();function handleResponse(event){var _a=event.data,callID=_a.callID,connectionID=_a.connectionID,callName=_a.callName,result=_a.result,error=_a.error,action=_a.action;if(!helpers_1.isTrustedRemote(event))return;if(!callID||!callName)return;if(callName!==_callName)return;if(connectionID!==_connectionID)return;if(action===types_1.actions.RPC_RESOLVE)return resolve(result);if(action===types_1.actions.RPC_REJECT)return reject(error)}var payload={action:types_1.actions.RPC_REQUEST,args:JSON.parse(JSON.stringify(args)),callID:callID,callName:_callName,connectionID:_connectionID};if(guest)guest.addEventListener(types_1.events.MESSAGE,handleResponse);else self.addEventListener(types_1.events.MESSAGE,handleResponse);listeners.push(function(){return self.removeEventListener(types_1.events.MESSAGE,handleResponse)});if(guest)guest.postMessage(payload);else if(helpers_1.isWorker())self.postMessage(payload);else(event.source||event.target).postMessage(payload,event.origin)})}}exports.createRPC=createRPC;function registerRemoteMethods(schema,methods,_connectionID,event,guest){if(schema===void 0){schema={}}if(methods===void 0){methods=[]}var remote=__assign({},schema);var listeners=[];methods.forEach(function(methodName){var rpc=createRPC(methodName,_connectionID,event,listeners,guest);lodash_set_1.default(remote,methodName,rpc)});return{remote:remote,unregisterRemote:function(){return listeners.forEach(function(unregister){return unregister()})}}}exports.registerRemoteMethods=registerRemoteMethods},{"./helpers":2,"./types":6,"lodash.get":9,"lodash.set":10,"short-uuid":11}],6:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var events;(function(events){events["MESSAGE"]="message"})(events=exports.events||(exports.events={}));var actions;(function(actions){actions["HANDSHAKE_REQUEST"]="RIMLESS/HANDSHAKE_REQUEST";actions["HANDSHAKE_REPLY"]="RIMLESS/HANDSHAKE_REPLY";actions["RPC_REQUEST"]="RIMLESS/RPC_REQUEST";actions["RPC_RESOLVE"]="RIMLESS/RPC_RESOLVE";actions["RPC_REJECT"]="RIMLESS/RPC_REJECT"})(actions=exports.actions||(exports.actions={}))},{}],7:[function(require,module,exports){var Converter=require("./src/converter");function anyBase(srcAlphabet,dstAlphabet){var converter=new Converter(srcAlphabet,dstAlphabet);return function(number){return converter.convert(number)}}anyBase.BIN="01";anyBase.OCT="01234567";anyBase.DEC="0123456789";anyBase.HEX="0123456789abcdef";module.exports=anyBase},{"./src/converter":8}],8:[function(require,module,exports){"use strict";function Converter(srcAlphabet,dstAlphabet){if(!srcAlphabet||!dstAlphabet||!srcAlphabet.length||!dstAlphabet.length){throw new Error("Bad alphabet")}this.srcAlphabet=srcAlphabet;this.dstAlphabet=dstAlphabet}Converter.prototype.convert=function(number){var i,divide,newlen,numberMap={},fromBase=this.srcAlphabet.length,toBase=this.dstAlphabet.length,length=number.length,result=typeof number==="string"?"":[];if(!this.isValid(number)){throw new Error('Number "'+number+'" contains of non-alphabetic digits ('+this.srcAlphabet+")")}if(this.srcAlphabet===this.dstAlphabet){return number}for(i=0;i<length;i++){numberMap[i]=this.srcAlphabet.indexOf(number[i])}do{divide=0;newlen=0;for(i=0;i<length;i++){divide=divide*fromBase+numberMap[i];if(divide>=toBase){numberMap[newlen++]=parseInt(divide/toBase,10);divide=divide%toBase}else if(newlen>0){numberMap[newlen++]=0}}length=newlen;result=this.dstAlphabet.slice(divide,divide+1).concat(result)}while(newlen!==0);return result};Converter.prototype.isValid=function(number){var i=0;for(;i<number.length;++i){if(this.srcAlphabet.indexOf(number[i])===-1){return false}}return true};module.exports=Converter},{}],9:[function(require,module,exports){(function(global){var FUNC_ERROR_TEXT="Expected a function";var HASH_UNDEFINED="__lodash_hash_undefined__";var INFINITY=1/0;var funcTag="[object Function]",genTag="[object GeneratorFunction]",symbolTag="[object Symbol]";var reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/,reLeadingDot=/^\./,rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;var reRegExpChar=/[\\^$.*+?()[\]{}|]/g;var reEscapeChar=/\\(\\)?/g;var reIsHostCtor=/^\[object .+?Constructor\]$/;var freeGlobal=typeof global=="object"&&global&&global.Object===Object&&global;var freeSelf=typeof self=="object"&&self&&self.Object===Object&&self;var root=freeGlobal||freeSelf||Function("return this")();function getValue(object,key){return object==null?undefined:object[key]}function isHostObject(value){var result=false;if(value!=null&&typeof value.toString!="function"){try{result=!!(value+"")}catch(e){}}return result}var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;var coreJsData=root["__core-js_shared__"];var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||"");return uid?"Symbol(src)_1."+uid:""}();var funcToString=funcProto.toString;var hasOwnProperty=objectProto.hasOwnProperty;var objectToString=objectProto.toString;var reIsNative=RegExp("^"+funcToString.call(hasOwnProperty).replace(reRegExpChar,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Symbol=root.Symbol,splice=arrayProto.splice;var Map=getNative(root,"Map"),nativeCreate=getNative(Object,"create");var symbolProto=Symbol?Symbol.prototype:undefined,symbolToString=symbolProto?symbolProto.toString:undefined;function Hash(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1])}}function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{}}function hashDelete(key){return this.has(key)&&delete this.__data__[key]}function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result}return hasOwnProperty.call(data,key)?data[key]:undefined}function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key)}function hashSet(key,value){var data=this.__data__;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this}Hash.prototype.clear=hashClear;Hash.prototype["delete"]=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;function ListCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1])}}function listCacheClear(){this.__data__=[]}function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false}var lastIndex=data.length-1;if(index==lastIndex){data.pop()}else{splice.call(data,index,1)}return true}function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1]}function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1}function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){data.push([key,value])}else{data[index][1]=value}return this}ListCache.prototype.clear=listCacheClear;ListCache.prototype["delete"]=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;function MapCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1])}}function mapCacheClear(){this.__data__={hash:new Hash,map:new(Map||ListCache),string:new Hash}}function mapCacheDelete(key){return getMapData(this,key)["delete"](key)}function mapCacheGet(key){return getMapData(this,key).get(key)}function mapCacheHas(key){return getMapData(this,key).has(key)}function mapCacheSet(key,value){getMapData(this,key).set(key,value);return this}MapCache.prototype.clear=mapCacheClear;MapCache.prototype["delete"]=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length}}return-1}function baseGet(object,path){path=isKey(path,object)?[path]:castPath(path);var index=0,length=path.length;while(object!=null&&index<length){object=object[toKey(path[index++])]}return index&&index==length?object:undefined}function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false}var pattern=isFunction(value)||isHostObject(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value))}function baseToString(value){if(typeof value=="string"){return value}if(isSymbol(value)){return symbolToString?symbolToString.call(value):""}var result=value+"";return result=="0"&&1/value==-INFINITY?"-0":result}function castPath(value){return isArray(value)?value:stringToPath(value)}function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=="string"?"string":"hash"]:data.map}function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined}function isKey(value,object){if(isArray(value)){return false}var type=typeof value;if(type=="number"||type=="symbol"||type=="boolean"||value==null||isSymbol(value)){return true}return reIsPlainProp.test(value)||!reIsDeepProp.test(value)||object!=null&&value in Object(object)}function isKeyable(value){var type=typeof value;return type=="string"||type=="number"||type=="symbol"||type=="boolean"?value!=="__proto__":value===null}function isMasked(func){return!!maskSrcKey&&maskSrcKey in func}var stringToPath=memoize(function(string){string=toString(string);var result=[];if(reLeadingDot.test(string)){result.push("")}string.replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,"$1"):number||match)});return result});function toKey(value){if(typeof value=="string"||isSymbol(value)){return value}var result=value+"";return result=="0"&&1/value==-INFINITY?"-0":result}function toSource(func){if(func!=null){try{return funcToString.call(func)}catch(e){}try{return func+""}catch(e){}}return""}function memoize(func,resolver){if(typeof func!="function"||resolver&&typeof resolver!="function"){throw new TypeError(FUNC_ERROR_TEXT)}var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key)}var result=func.apply(this,args);memoized.cache=cache.set(key,result);return result};memoized.cache=new(memoize.Cache||MapCache);return memoized}memoize.Cache=MapCache;function eq(value,other){return value===other||value!==value&&other!==other}var isArray=Array.isArray;function isFunction(value){var tag=isObject(value)?objectToString.call(value):"";return tag==funcTag||tag==genTag}function isObject(value){var type=typeof value;return!!value&&(type=="object"||type=="function")}function isObjectLike(value){return!!value&&typeof value=="object"}function isSymbol(value){return typeof value=="symbol"||isObjectLike(value)&&objectToString.call(value)==symbolTag}function toString(value){return value==null?"":baseToString(value)}function get(object,path,defaultValue){var result=object==null?undefined:baseGet(object,path);return result===undefined?defaultValue:result}module.exports=get}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],10:[function(require,module,exports){(function(global){var FUNC_ERROR_TEXT="Expected a function";var HASH_UNDEFINED="__lodash_hash_undefined__";var INFINITY=1/0,MAX_SAFE_INTEGER=9007199254740991;var funcTag="[object Function]",genTag="[object GeneratorFunction]",symbolTag="[object Symbol]";var reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/,reLeadingDot=/^\./,rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;var reRegExpChar=/[\\^$.*+?()[\]{}|]/g;var reEscapeChar=/\\(\\)?/g;var reIsHostCtor=/^\[object .+?Constructor\]$/;var reIsUint=/^(?:0|[1-9]\d*)$/;var freeGlobal=typeof global=="object"&&global&&global.Object===Object&&global;var freeSelf=typeof self=="object"&&self&&self.Object===Object&&self;var root=freeGlobal||freeSelf||Function("return this")();function getValue(object,key){return object==null?undefined:object[key]}function isHostObject(value){var result=false;if(value!=null&&typeof value.toString!="function"){try{result=!!(value+"")}catch(e){}}return result}var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;var coreJsData=root["__core-js_shared__"];var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||"");return uid?"Symbol(src)_1."+uid:""}();var funcToString=funcProto.toString;var hasOwnProperty=objectProto.hasOwnProperty;var objectToString=objectProto.toString;var reIsNative=RegExp("^"+funcToString.call(hasOwnProperty).replace(reRegExpChar,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Symbol=root.Symbol,splice=arrayProto.splice;var Map=getNative(root,"Map"),nativeCreate=getNative(Object,"create");var symbolProto=Symbol?Symbol.prototype:undefined,symbolToString=symbolProto?symbolProto.toString:undefined;function Hash(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1])}}function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{}}function hashDelete(key){return this.has(key)&&delete this.__data__[key]}function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result}return hasOwnProperty.call(data,key)?data[key]:undefined}function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key)}function hashSet(key,value){var data=this.__data__;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this}Hash.prototype.clear=hashClear;Hash.prototype["delete"]=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;function ListCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1])}}function listCacheClear(){this.__data__=[]}function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false}var lastIndex=data.length-1;if(index==lastIndex){data.pop()}else{splice.call(data,index,1)}return true}function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1]}function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1}function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){data.push([key,value])}else{data[index][1]=value}return this}ListCache.prototype.clear=listCacheClear;ListCache.prototype["delete"]=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;function MapCache(entries){var index=-1,length=entries?entries.length:0;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1])}}function mapCacheClear(){this.__data__={hash:new Hash,map:new(Map||ListCache),string:new Hash}}function mapCacheDelete(key){return getMapData(this,key)["delete"](key)}function mapCacheGet(key){return getMapData(this,key).get(key)}function mapCacheHas(key){return getMapData(this,key).has(key)}function mapCacheSet(key,value){getMapData(this,key).set(key,value);return this}MapCache.prototype.clear=mapCacheClear;MapCache.prototype["delete"]=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;function assignValue(object,key,value){var objValue=object[key];if(!(hasOwnProperty.call(object,key)&&eq(objValue,value))||value===undefined&&!(key in object)){object[key]=value}}function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length}}return-1}function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false}var pattern=isFunction(value)||isHostObject(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value))}function baseSet(object,path,value,customizer){if(!isObject(object)){return object}path=isKey(path,object)?[path]:castPath(path);var index=-1,length=path.length,lastIndex=length-1,nested=object;while(nested!=null&&++index<length){var key=toKey(path[index]),newValue=value;if(index!=lastIndex){var objValue=nested[key];newValue=customizer?customizer(objValue,key,nested):undefined;if(newValue===undefined){newValue=isObject(objValue)?objValue:isIndex(path[index+1])?[]:{}}}assignValue(nested,key,newValue);nested=nested[key]}return object}function baseToString(value){if(typeof value=="string"){return value}if(isSymbol(value)){return symbolToString?symbolToString.call(value):""}var result=value+"";return result=="0"&&1/value==-INFINITY?"-0":result}function castPath(value){return isArray(value)?value:stringToPath(value)}function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=="string"?"string":"hash"]:data.map}function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined}function isIndex(value,length){length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(typeof value=="number"||reIsUint.test(value))&&(value>-1&&value%1==0&&value<length)}function isKey(value,object){if(isArray(value)){return false}var type=typeof value;if(type=="number"||type=="symbol"||type=="boolean"||value==null||isSymbol(value)){return true}return reIsPlainProp.test(value)||!reIsDeepProp.test(value)||object!=null&&value in Object(object)}function isKeyable(value){var type=typeof value;return type=="string"||type=="number"||type=="symbol"||type=="boolean"?value!=="__proto__":value===null}function isMasked(func){return!!maskSrcKey&&maskSrcKey in func}var stringToPath=memoize(function(string){string=toString(string);var result=[];if(reLeadingDot.test(string)){result.push("")}string.replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,"$1"):number||match)});return result});function toKey(value){if(typeof value=="string"||isSymbol(value)){return value}var result=value+"";return result=="0"&&1/value==-INFINITY?"-0":result}function toSource(func){if(func!=null){try{return funcToString.call(func)}catch(e){}try{return func+""}catch(e){}}return""}function memoize(func,resolver){if(typeof func!="function"||resolver&&typeof resolver!="function"){throw new TypeError(FUNC_ERROR_TEXT)}var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key)}var result=func.apply(this,args);memoized.cache=cache.set(key,result);return result};memoized.cache=new(memoize.Cache||MapCache);return memoized}memoize.Cache=MapCache;function eq(value,other){return value===other||value!==value&&other!==other}var isArray=Array.isArray;function isFunction(value){var tag=isObject(value)?objectToString.call(value):"";return tag==funcTag||tag==genTag}function isObject(value){var type=typeof value;return!!value&&(type=="object"||type=="function")}function isObjectLike(value){return!!value&&typeof value=="object"}function isSymbol(value){return typeof value=="symbol"||isObjectLike(value)&&objectToString.call(value)==symbolTag}function toString(value){return value==null?"":baseToString(value)}function set(object,path,value){return object==null?object:baseSet(object,path,value)}module.exports=set}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],11:[function(require,module,exports){var anyBase=require("any-base");var uuidV4=require("uuid/v4");var flickrBase58="123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";var cookieBase90="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&'()*+-./:<=>?@[]^_`{|}~";var toFlickr;function shortenUUID(longId,translator){return translator(longId.toLowerCase().replace(/-/g,""))}function enlargeUUID(shortId,translator){var uu1=translator(shortId);var leftPad="";var m;for(var i=0,len=32-uu1.length;i<len;++i){leftPad+="0"}m=(leftPad+uu1).match(/(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})/);return[m[1],m[2],m[3],m[4],m[5]].join("-")}module.exports=function(){function MakeConvertor(toAlphabet){var useAlphabet=toAlphabet||flickrBase58;var fromHex=anyBase(anyBase.HEX,useAlphabet);var toHex=anyBase(useAlphabet,anyBase.HEX);var generate=function(){return shortenUUID(uuidV4(),fromHex)};return{new:generate,generate:generate,uuid:uuidV4,fromUUID:function(uuid){return shortenUUID(uuid,fromHex)},toUUID:function(shortUuid){return enlargeUUID(shortUuid,toHex)},alphabet:useAlphabet}}MakeConvertor.constants={flickrBase58:flickrBase58,cookieBase90:cookieBase90};MakeConvertor.uuid=uuidV4;MakeConvertor.generate=function(){if(!toFlickr){toFlickr=anyBase(anyBase.HEX,flickrBase58)}return shortenUUID(uuidV4(),toFlickr)};return MakeConvertor}()},{"any-base":7,"uuid/v4":14}],12:[function(require,module,exports){var byteToHex=[];for(var i=0;i<256;++i){byteToHex[i]=(i+256).toString(16).substr(1)}function bytesToUuid(buf,offset){var i=offset||0;var bth=byteToHex;return[bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],"-",bth[buf[i++]],bth[buf[i++]],"-",bth[buf[i++]],bth[buf[i++]],"-",bth[buf[i++]],bth[buf[i++]],"-",bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]]].join("")}module.exports=bytesToUuid},{}],13:[function(require,module,exports){var getRandomValues=typeof crypto!="undefined"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto!="undefined"&&typeof window.msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto);if(getRandomValues){var rnds8=new Uint8Array(16);module.exports=function whatwgRNG(){getRandomValues(rnds8);return rnds8}}else{var rnds=new Array(16);module.exports=function mathRNG(){for(var i=0,r;i<16;i++){if((i&3)===0)r=Math.random()*4294967296;rnds[i]=r>>>((i&3)<<3)&255}return rnds}}},{}],14:[function(require,module,exports){var rng=require("./lib/rng");var bytesToUuid=require("./lib/bytesToUuid");function v4(options,buf,offset){var i=buf&&offset||0;if(typeof options=="string"){buf=options==="binary"?new Array(16):null;options=null}options=options||{};var rnds=options.random||(options.rng||rng)();rnds[6]=rnds[6]&15|64;rnds[8]=rnds[8]&63|128;if(buf){for(var ii=0;ii<16;++ii){buf[i+ii]=rnds[ii]}}return buf||bytesToUuid(rnds)}module.exports=v4},{"./lib/bytesToUuid":12,"./lib/rng":13}]},{},[4])(4)});
package/lib/rpc.d.ts DELETED
@@ -1,40 +0,0 @@
1
- import { ISchema } from "./types";
2
- /**
3
- * for each function in the schema
4
- * 1. subscribe to an event that the remote can call
5
- * 2. listen for calls from the remote. When called execute the function and emit the results.
6
- *
7
- * @param methods an array of method ids from the local schema
8
- * @param _connectionID
9
- * @return a function to cancel all subscriptions
10
- */
11
- export declare function registerLocalMethods(schema: ISchema | undefined, methods: any[] | undefined, _connectionID: string, guest?: Worker): any;
12
- /**
13
- * Create a function that will make an RPC request to the remote with some arguments.
14
- * Listen to an event that returns the results from the remote.
15
- *
16
- * @param _callName
17
- * @param _connectionID
18
- * @param event
19
- * @param listeners
20
- * @param guest
21
- *
22
- * @returns a promise with the result of the RPC
23
- */
24
- export declare function createRPC(_callName: string, _connectionID: string, event: any, listeners?: Array<() => void>, guest?: Worker): (...args: any) => Promise<unknown>;
25
- /**
26
- * create an object based on the remote schema and methods. Functions in that object will
27
- * emit an event that will trigger the RPC on the remote.
28
- *
29
- * @param schema
30
- * @param methods
31
- * @param _connectionID
32
- * @param event
33
- * @param guest
34
- */
35
- export declare function registerRemoteMethods(schema: ISchema | undefined, methods: any[] | undefined, _connectionID: string, event: any, guest?: Worker): {
36
- remote: {
37
- [x: string]: any;
38
- };
39
- unregisterRemote: () => void;
40
- };
package/lib/rpc.js DELETED
@@ -1,215 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
21
- };
22
- var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
- function verb(n) { return function (v) { return step([n, v]); }; }
26
- function step(op) {
27
- if (f) throw new TypeError("Generator is already executing.");
28
- while (_) try {
29
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
- if (y = 0, t) op = [op[0] & 2, t.value];
31
- switch (op[0]) {
32
- case 0: case 1: t = op; break;
33
- case 4: _.label++; return { value: op[1], done: false };
34
- case 5: _.label++; y = op[1]; op = [0]; continue;
35
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
- default:
37
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
- if (t[2]) _.ops.pop();
42
- _.trys.pop(); continue;
43
- }
44
- op = body.call(thisArg, _);
45
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
- }
48
- };
49
- var __importDefault = (this && this.__importDefault) || function (mod) {
50
- return (mod && mod.__esModule) ? mod : { "default": mod };
51
- };
52
- Object.defineProperty(exports, "__esModule", { value: true });
53
- var lodash_get_1 = __importDefault(require("lodash.get"));
54
- var lodash_set_1 = __importDefault(require("lodash.set"));
55
- var short_uuid_1 = __importDefault(require("short-uuid"));
56
- var helpers_1 = require("./helpers");
57
- var types_1 = require("./types");
58
- /**
59
- * for each function in the schema
60
- * 1. subscribe to an event that the remote can call
61
- * 2. listen for calls from the remote. When called execute the function and emit the results.
62
- *
63
- * @param methods an array of method ids from the local schema
64
- * @param _connectionID
65
- * @return a function to cancel all subscriptions
66
- */
67
- function registerLocalMethods(schema, methods, _connectionID, guest) {
68
- if (schema === void 0) { schema = {}; }
69
- if (methods === void 0) { methods = []; }
70
- var listeners = [];
71
- methods.forEach(function (methodName) {
72
- // handle a remote calling a local method
73
- function handleCall(event) {
74
- return __awaiter(this, void 0, void 0, function () {
75
- var _a, action, callID, connectionID, callName, _b, args, payload, result, error_1;
76
- return __generator(this, function (_c) {
77
- switch (_c.label) {
78
- case 0:
79
- _a = event.data, action = _a.action, callID = _a.callID, connectionID = _a.connectionID, callName = _a.callName, _b = _a.args, args = _b === void 0 ? [] : _b;
80
- if (action !== types_1.actions.RPC_REQUEST)
81
- return [2 /*return*/];
82
- if (!helpers_1.isTrustedRemote(event))
83
- return [2 /*return*/];
84
- if (!callID || !callName)
85
- return [2 /*return*/];
86
- if (callName !== methodName)
87
- return [2 /*return*/];
88
- if (connectionID !== _connectionID)
89
- return [2 /*return*/];
90
- payload = {
91
- action: types_1.actions.RPC_RESOLVE,
92
- callID: callID,
93
- callName: callName,
94
- connectionID: connectionID,
95
- error: null,
96
- result: null,
97
- };
98
- _c.label = 1;
99
- case 1:
100
- _c.trys.push([1, 3, , 4]);
101
- return [4 /*yield*/, lodash_get_1.default(schema, methodName).apply(void 0, args)];
102
- case 2:
103
- result = _c.sent();
104
- payload.result = JSON.parse(JSON.stringify(result));
105
- return [3 /*break*/, 4];
106
- case 3:
107
- error_1 = _c.sent();
108
- payload.error = JSON.parse(JSON.stringify(error_1, Object.getOwnPropertyNames(error_1)));
109
- return [3 /*break*/, 4];
110
- case 4:
111
- if (guest)
112
- guest.postMessage(payload);
113
- else if (helpers_1.isWorker())
114
- self.postMessage(payload);
115
- else
116
- event.source.postMessage(payload, event.origin);
117
- return [2 /*return*/];
118
- }
119
- });
120
- });
121
- }
122
- // subscribe to the call event
123
- if (guest)
124
- guest.addEventListener(types_1.events.MESSAGE, handleCall);
125
- else
126
- self.addEventListener(types_1.events.MESSAGE, handleCall);
127
- listeners.push(function () { return self.removeEventListener(types_1.events.MESSAGE, handleCall); });
128
- });
129
- return function () { return listeners.forEach(function (unregister) { return unregister(); }); };
130
- }
131
- exports.registerLocalMethods = registerLocalMethods;
132
- /**
133
- * Create a function that will make an RPC request to the remote with some arguments.
134
- * Listen to an event that returns the results from the remote.
135
- *
136
- * @param _callName
137
- * @param _connectionID
138
- * @param event
139
- * @param listeners
140
- * @param guest
141
- *
142
- * @returns a promise with the result of the RPC
143
- */
144
- function createRPC(_callName, _connectionID, event, listeners, guest) {
145
- if (listeners === void 0) { listeners = []; }
146
- return function () {
147
- var args = [];
148
- for (var _i = 0; _i < arguments.length; _i++) {
149
- args[_i] = arguments[_i];
150
- }
151
- return new Promise(function (resolve, reject) {
152
- var callID = short_uuid_1.default.generate();
153
- // on RPC response
154
- function handleResponse(event) {
155
- var _a = event.data, callID = _a.callID, connectionID = _a.connectionID, callName = _a.callName, result = _a.result, error = _a.error, action = _a.action;
156
- if (!helpers_1.isTrustedRemote(event))
157
- return;
158
- if (!callID || !callName)
159
- return;
160
- if (callName !== _callName)
161
- return;
162
- if (connectionID !== _connectionID)
163
- return;
164
- // resolve the response
165
- if (action === types_1.actions.RPC_RESOLVE)
166
- return resolve(result);
167
- if (action === types_1.actions.RPC_REJECT)
168
- return reject(error);
169
- }
170
- // send the RPC request with arguments
171
- var payload = {
172
- action: types_1.actions.RPC_REQUEST,
173
- args: JSON.parse(JSON.stringify(args)),
174
- callID: callID,
175
- callName: _callName,
176
- connectionID: _connectionID,
177
- };
178
- if (guest)
179
- guest.addEventListener(types_1.events.MESSAGE, handleResponse);
180
- else
181
- self.addEventListener(types_1.events.MESSAGE, handleResponse);
182
- listeners.push(function () { return self.removeEventListener(types_1.events.MESSAGE, handleResponse); });
183
- if (guest)
184
- guest.postMessage(payload);
185
- else if (helpers_1.isWorker())
186
- self.postMessage(payload);
187
- else
188
- (event.source || event.target).postMessage(payload, event.origin);
189
- });
190
- };
191
- }
192
- exports.createRPC = createRPC;
193
- /**
194
- * create an object based on the remote schema and methods. Functions in that object will
195
- * emit an event that will trigger the RPC on the remote.
196
- *
197
- * @param schema
198
- * @param methods
199
- * @param _connectionID
200
- * @param event
201
- * @param guest
202
- */
203
- function registerRemoteMethods(schema, methods, _connectionID, event, guest) {
204
- if (schema === void 0) { schema = {}; }
205
- if (methods === void 0) { methods = []; }
206
- var remote = __assign({}, schema);
207
- var listeners = [];
208
- methods.forEach(function (methodName) {
209
- var rpc = createRPC(methodName, _connectionID, event, listeners, guest);
210
- lodash_set_1.default(remote, methodName, rpc);
211
- });
212
- return { remote: remote, unregisterRemote: function () { return listeners.forEach(function (unregister) { return unregister(); }); } };
213
- }
214
- exports.registerRemoteMethods = registerRemoteMethods;
215
- //# sourceMappingURL=rpc.js.map