UNPKG

rpcchannel

Version:

Easy RPC with permission controls

96 lines (81 loc) 12.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.rpcSerialize = rpcSerialize; exports.toRpcSerialized = void 0; var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var toRpcSerialized = Symbol('ChannelRpcSerialize'); exports.toRpcSerialized = toRpcSerialized; /** * Javascript will throw errors if I do a simple defined check, so all of this * crap is to ensure that doesn't happen. It would be nice to put this in a * function, but then JS would throw the error. So, all of this typed out crap * is actually necessary. */ var transferrables = [typeof MessagePort !== 'undefined' && MessagePort, typeof ImageBitmap !== 'undefined' && ImageBitmap, typeof OffscreenCanvas !== 'undefined' && OffscreenCanvas, typeof ArrayBuffer !== 'undefined' && ArrayBuffer, typeof Int8Array !== 'undefined' && Int8Array, typeof Int16Array !== 'undefined' && Int16Array, typeof Int32Array !== 'undefined' && Int32Array, typeof BigInt64Array !== 'undefined' && BigInt64Array, typeof Uint8Array !== 'undefined' && Uint8Array, typeof Uint8ClampedArray !== 'undefined' && Uint8ClampedArray, typeof Uint16Array !== 'undefined' && Uint16Array, typeof Uint32Array !== 'undefined' && Uint32Array, typeof BigUint64Array !== 'undefined' && BigUint64Array, typeof Float32Array !== 'undefined' && Float32Array, typeof Float64Array !== 'undefined' && Float64Array].filter(function (d) { return d; }); /** * Prepares `data` to be sent over a MessagePort by ensuring that all data is * of a type that can be sent and that all transferrables are `push`ed to * `xfer`. * @todo Make error stack sending configurable * @param data Data to serialize * @param xfer Destination array for transferrables * @returns The data in serialized format */ function rpcSerialize(data, xfer) { if (data && data[toRpcSerialized]) { return data[toRpcSerialized](data, xfer); } switch ((0, _typeof2["default"])(data)) { case 'undefined': case 'bigint': case 'boolean': case 'number': case 'string': return data; case 'symbol': throw new TypeError('Symbols cannot be serialized'); case 'function': throw new TypeError('Functions cannot be serialized'); case 'object': // Null is an object... I guess if (data === null) { return null; } if (transferrables.some(function (type) { return data instanceof type; })) { xfer.push(data); return data; } if (data instanceof Error) { return { name: data.name, message: data.message, stack: 'Stack trace redacted for security reasons', // These don't exist in the TS definitions, but they may exist in // other runtime environments columnNumber: data.columnNumber, lineNumber: data.lineNumber, fileName: data.fileName }; } if (Array.isArray(data)) { return data.map(function (e) { return rpcSerialize(e, xfer); }); } var robj = {}; Object.keys(data).forEach(function (k) { robj[k] = rpcSerialize(data[k], xfer); }); return robj; default: throw new TypeError("Cannot serialize unknown type ".concat((0, _typeof2["default"])(data))); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJpYWxpemVyLnRzIl0sIm5hbWVzIjpbInRvUnBjU2VyaWFsaXplZCIsIlN5bWJvbCIsInRyYW5zZmVycmFibGVzIiwiTWVzc2FnZVBvcnQiLCJJbWFnZUJpdG1hcCIsIk9mZnNjcmVlbkNhbnZhcyIsIkFycmF5QnVmZmVyIiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkJpZ1VpbnQ2NEFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiZmlsdGVyIiwiZCIsInJwY1NlcmlhbGl6ZSIsImRhdGEiLCJ4ZmVyIiwiVHlwZUVycm9yIiwic29tZSIsInR5cGUiLCJwdXNoIiwiRXJyb3IiLCJuYW1lIiwibWVzc2FnZSIsInN0YWNrIiwiY29sdW1uTnVtYmVyIiwibGluZU51bWJlciIsImZpbGVOYW1lIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiZSIsInJvYmoiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImsiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFPLElBQU1BLGVBQWUsR0FBR0MsTUFBTSxDQUFDLHFCQUFELENBQTlCOzs7QUE2QlA7Ozs7OztBQU1BLElBQU1DLGNBQWMsR0FBRyxDQUNyQixPQUFPQyxXQUFQLEtBQXVCLFdBQXZCLElBQXNDQSxXQURqQixFQUVyQixPQUFPQyxXQUFQLEtBQXVCLFdBQXZCLElBQXNDQSxXQUZqQixFQUdyQixPQUFPQyxlQUFQLEtBQTJCLFdBQTNCLElBQTBDQSxlQUhyQixFQUtyQixPQUFPQyxXQUFQLEtBQXVCLFdBQXZCLElBQXNDQSxXQUxqQixFQU9yQixPQUFPQyxTQUFQLEtBQXFCLFdBQXJCLElBQW9DQSxTQVBmLEVBUXJCLE9BQU9DLFVBQVAsS0FBc0IsV0FBdEIsSUFBcUNBLFVBUmhCLEVBU3JCLE9BQU9D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Z0REIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRvUnBjU2VyaWFsaXplZCA9IFN5bWJvbCgnQ2hhbm5lbFJwY1NlcmlhbGl6ZScpXG5cbnR5cGUgUHJpbWl0aXZlID0gdW5kZWZpbmVkIHwgbnVsbCB8IHZvaWQgfCBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgQmlnSW50XG5cbnR5cGUgU2VyaWFsaXphYmxlQXJyYXkgPSBTZXJpYWxpemFibGVEYXRhW11cbnR5cGUgU2VyaWFsaXphdGlvbkZ1bmNPYmplY3QgPSB7IFt0b1JwY1NlcmlhbGl6ZWRdOiBTZXJpYWxpemF0aW9uRnVuY3Rpb24gfVxudHlwZSBTZXJpYWxpemFibGVPYmplY3QgPVxuICB8IHsgW2tleTogc3RyaW5nXTogU2VyaWFsaXphYmxlRGF0YSB9XG4gIHwgU2VyaWFsaXphdGlvbkZ1bmNPYmplY3RcbmV4cG9ydCB0eXBlIFNlcmlhbGl6YWJsZURhdGEgPVxuICB8IFByaW1pdGl2ZVxuICB8IFNlcmlhbGl6YWJsZUFycmF5XG4gIHwgU2VyaWFsaXphYmxlT2JqZWN0XG4gIHwgVHJhbnNmZXJhYmxlXG4gIHwgRXJyb3JcblxudHlwZSBTZXJpYWxpemVkQXJyYXkgPSBTZXJpYWxpemVkRGF0YVtdXG50eXBlIFNlcmlhbGl6ZWRPYmplY3QgPSB7IFtrZXk6IHN0cmluZ106IFNlcmlhbGl6ZWREYXRhIH1cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWREYXRhID1cbiAgfCBQcmltaXRpdmVcbiAgfCBTZXJpYWxpemVkQXJyYXlcbiAgfCBTZXJpYWxpemVkT2JqZWN0XG4gIHwgVHJhbnNmZXJhYmxlXG5cbnR5cGUgU2VyaWFsaXphdGlvbkZ1bmN0aW9uID0gKFxuICBkYXRhOiBTZXJpYWxpemFibGVEYXRhLFxuICB4ZmVyOiBUcmFuc2ZlcmFibGVbXVxuKSA9PiBTZXJpYWxpemVkRGF0YVxuXG4vKipcbiAqIEphdmFzY3JpcHQgd2lsbCB0aHJvdyBlcnJvcnMgaWYgSSBkbyBhIHNpbXBsZSBkZWZpbmVkIGNoZWNrLCBzbyBhbGwgb2YgdGhpc1xuICogY3JhcCBpcyB0byBlbnN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4gSXQgd291bGQgYmUgbmljZSB0byBwdXQgdGhpcyBpbiBhXG4gKiBmdW5jdGlvbiwgYnV0IHRoZW4gSlMgd291bGQgdGhyb3cgdGhlIGVycm9yLiBTbywgYWxsIG9mIHRoaXMgdHlwZWQgb3V0IGNyYXBcbiAqIGlzIGFjdHVhbGx5IG5lY2Vzc2FyeS5cbiAqL1xuY29uc3QgdHJhbnNmZXJyYWJsZXMgPSBbXG4gIHR5cGVvZiBNZXNzYWdlUG9ydCAhPT0gJ3VuZGVmaW5lZCcgJiYgTWVzc2FnZVBvcnQsXG4gIHR5cGVvZiBJbWFnZUJpdG1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgSW1hZ2VCaXRtYXAsXG4gIHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgIT09ICd1bmRlZmluZWQnICYmIE9mZnNjcmVlbkNhbnZhcyxcblxuICB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIEFycmF5QnVmZmVyLFxuXG4gIHR5cGVvZiBJbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIEludDhBcnJheSxcbiAgdHlwZW9mIEludDE2QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIEludDE2QXJyYXksXG4gIHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBJbnQzMkFycmF5LFxuICB0eXBlb2YgQmlnSW50NjRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgQmlnSW50NjRBcnJheSxcblxuICB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgVWludDhBcnJheSxcbiAgdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBVaW50OENsYW1wZWRBcnJheSxcbiAgdHlwZW9mIFVpbnQxNkFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBVaW50MTZBcnJheSxcbiAgdHlwZW9mIFVpbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBVaW50MzJBcnJheSxcbiAgdHlwZW9mIEJpZ1VpbnQ2NEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBCaWdVaW50NjRBcnJheSxcblxuICB0eXBlb2YgRmxvYXQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBGbG9hdDMyQXJyYXksXG4gIHR5cGVvZiBGbG9hdDY0QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIEZsb2F0NjRBcnJheVxuXS5maWx0ZXIoKGQpID0+IGQpXG5cbi8qKlxuICogUHJlcGFyZXMgYGRhdGFgIHRvIGJlIHNlbnQgb3ZlciBhIE1lc3NhZ2VQb3J0IGJ5IGVuc3VyaW5nIHRoYXQgYWxsIGRhdGEgaXNcbiAqIG9mIGEgdHlwZSB0aGF0IGNhbiBiZSBzZW50IGFuZCB0aGF0IGFsbCB0cmFuc2ZlcnJhYmxlcyBhcmUgYHB1c2hgZWQgdG9cbiAqIGB4ZmVyYC5cbiAqIEB0b2RvIE1ha2UgZXJyb3Igc3RhY2sgc2VuZGluZyBjb25maWd1cmFibGVcbiAqIEBwYXJhbSBkYXRhIERhdGEgdG8gc2VyaWFsaXplXG4gKiBAcGFyYW0geGZlciBEZXN0aW5hdGlvbiBhcnJheSBmb3IgdHJhbnNmZXJyYWJsZXNcbiAqIEByZXR1cm5zIFRoZSBkYXRhIGluIHNlcmlhbGl6ZWQgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBycGNTZXJpYWxpemUoXG4gIGRhdGE6IFNlcmlhbGl6YWJsZURhdGEsXG4gIHhmZXI6IFRyYW5zZmVyYWJsZVtdXG4pOiBTZXJpYWxpemVkRGF0YSB7XG4gIGlmIChkYXRhICYmIChkYXRhIGFzIFNlcmlhbGl6YXRpb25GdW5jT2JqZWN0KVt0b1JwY1NlcmlhbGl6ZWRdKSB7XG4gICAgcmV0dXJuIChkYXRhIGFzIFNlcmlhbGl6YXRpb25GdW5jT2JqZWN0KVt0b1JwY1NlcmlhbGl6ZWRdKGRhdGEsIHhmZXIpXG4gIH1cbiAgc3dpdGNoICh0eXBlb2YgZGF0YSkge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgY2FzZSAnYmlnaW50JzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gZGF0YVxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2xzIGNhbm5vdCBiZSBzZXJpYWxpemVkJylcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbnMgY2Fubm90IGJlIHNlcmlhbGl6ZWQnKVxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAvLyBOdWxsIGlzIGFuIG9iamVjdC4uLiBJIGd1ZXNzXG4gICAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0cmFuc2ZlcnJhYmxlcy5zb21lKFxuICAgICAgICAgICh0eXBlKSA9PiBkYXRhIGluc3RhbmNlb2YgKCh0eXBlIGFzIHVua25vd24pIGFzICgpID0+IHZvaWQpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB4ZmVyLnB1c2goZGF0YSBhcyBUcmFuc2ZlcmFibGUpXG4gICAgICAgIHJldHVybiBkYXRhIGFzIFNlcmlhbGl6ZWREYXRhXG4gICAgICB9XG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogZGF0YS5uYW1lLFxuICAgICAgICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSxcbiAgICAgICAgICBzdGFjazogJ1N0YWNrIHRyYWNlIHJlZGFjdGVkIGZvciBzZWN1cml0eSByZWFzb25zJyxcbiAgICAgICAgICAvLyBUaGVzZSBkb24ndCBleGlzdCBpbiB0aGUgVFMgZGVmaW5pdGlvbnMsIGJ1dCB0aGV5IG1heSBleGlzdCBpblxuICAgICAgICAgIC8vIG90aGVyIHJ1bnRpbWUgZW52aXJvbm1lbnRzXG4gICAgICAgICAgY29sdW1uTnVtYmVyOiAoKGRhdGEgYXMgdW5rbm93bikgYXMgeyBjb2x1bW5OdW1iZXI6IG51bWJlciB9KVxuICAgICAgICAgICAgLmNvbHVtbk51bWJlcixcbiAgICAgICAgICBsaW5lTnVtYmVyOiAoKGRhdGEgYXMgdW5rbm93bikgYXMgeyBsaW5lTnVtYmVyOiBudW1iZXIgfSkubGluZU51bWJlcixcbiAgICAgICAgICBmaWxlTmFtZTogKChkYXRhIGFzIHVua25vd24pIGFzIHsgZmlsZU5hbWU6IG51bWJlciB9KS5maWxlTmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YS5tYXAoKGUpID0+IHJwY1NlcmlhbGl6ZShlLCB4ZmVyKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvYmo6IFNlcmlhbGl6ZWRPYmplY3QgPSB7fVxuICAgICAgT2JqZWN0LmtleXMoZGF0YSBhcyBTZXJpYWxpemVkT2JqZWN0KS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIHJvYmpba10gPSBycGNTZXJpYWxpemUoKGRhdGEgYXMgU2VyaWFsaXplZE9iamVjdClba10sIHhmZXIpXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHJvYmpcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ2Fubm90IHNlcmlhbGl6ZSB1bmtub3duIHR5cGUgJHt0eXBlb2YgZGF0YX1gKVxuICB9XG59XG4iXX0=