UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

1,462 lines (1,287 loc) 229 kB
import * as __WEBPACK_EXTERNAL_MODULE__openhps_core_es_js_870a26f4__ from "./openhps-core.es.js"; /******/ var __webpack_modules__ = ({ /***/ "./dist/esm5/worker/WorkerBase.js": /*!****************************************!*\ !*** ./dist/esm5/worker/WorkerBase.js ***! \****************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { var __dirname = "/"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ WorkerBase: () => (/* binding */ WorkerBase) /* harmony export */ }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); /* harmony import */ var reflect_metadata__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! reflect-metadata */ "./node_modules/reflect-metadata/Reflect.js"); /* harmony import */ var reflect_metadata__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(reflect_metadata__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var threads_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! threads/observable */ "./node_modules/threads/dist/observable.js"); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! .. */ ".."); // external @openhps/core class WorkerBase { constructor() { this.pullOutput = new threads_observable__WEBPACK_IMPORTED_MODULE_2__.Subject(); this.pushOutput = new threads_observable__WEBPACK_IMPORTED_MODULE_2__.Subject(); this.serviceOutputCall = new threads_observable__WEBPACK_IMPORTED_MODULE_2__.Subject(); this.serviceOutputResponse = new threads_observable__WEBPACK_IMPORTED_MODULE_2__.Subject(); this.eventOutput = new threads_observable__WEBPACK_IMPORTED_MODULE_2__.Subject(); this.customMethods = new Map(); } setShape(shape) { this.shape = shape; } init(config) { return new Promise((resolve, reject) => (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__awaiter)(this, void 0, void 0, function* () { this.config = config; const importFn = typeof process !== 'object' ? config.type === 'module' ? file => import( /* webpackIgnore: true */file) // ES6 : file => Promise.resolve(importScripts( /* webpackIgnore: true */file)) // CJS : file => Promise.resolve(__webpack_require__("./dist/esm5/worker sync recursive")(file)); // eslint-disable-line // Set global dir name __dirname = config.directory; // eslint-disable-line // Load external scripts if (config.imports && config.imports.length > 0) { config.imports.forEach(importFile => { importFn(importFile); }); } // Create model const modelBuilder = ___WEBPACK_IMPORTED_MODULE_1__.ModelBuilder.create(); // Add remote worker services if not already added this.config.services.forEach(service => { if (service.dataType) { const DataType = ___WEBPACK_IMPORTED_MODULE_1__.DataSerializer.findTypeByName(service.dataType); modelBuilder.addService(new ___WEBPACK_IMPORTED_MODULE_1__.DummyDataService(service.uid, DataType), new ___WEBPACK_IMPORTED_MODULE_1__.WorkerServiceProxy({ uid: service.uid, callObservable: this.serviceOutputCall, responseObservable: this.serviceOutputResponse })); } else { modelBuilder.addService(new ___WEBPACK_IMPORTED_MODULE_1__.DummyService(service.uid), new ___WEBPACK_IMPORTED_MODULE_1__.WorkerServiceProxy({ uid: service.uid, callObservable: this.serviceOutputCall, responseObservable: this.serviceOutputResponse })); } }); this._initModel(modelBuilder); // eslint-disable-next-line const path = this.config.imports.length > 0 ? undefined : typeof process !== 'object' ? undefined : __webpack_require__(/*! path */ "?e01b"); try { if (this.config.serialized) { const traversalBuilder = modelBuilder.from(); const modelOrNode = ___WEBPACK_IMPORTED_MODULE_1__.ModelSerializer.deserializeNode(this.config.serialized); traversalBuilder.via(modelOrNode); traversalBuilder.to(); } else if (this.config.builder) { const traversalBuilder = modelBuilder.from(); const builderCallback = eval(this.config.builder); builderCallback(traversalBuilder, modelBuilder, this.config.args); traversalBuilder.to(); } else if (this.config.shape) { const graph = yield importFn(path ? path.join(__dirname, this.config.shape) : this.config.shape); if (graph) { modelBuilder.addShape(graph.default); } } else if (this.shape) { modelBuilder.addShape(this.shape); } } catch (ex) { // Error deserializing, did you import the nodes? reject(ex); return; } modelBuilder.build().then(m => { this.model = m; // Load methods this.config.methods.forEach(serializedMethod => { const method = eval(serializedMethod.handlerFn); this.customMethods.set(serializedMethod.name, (model, ...args) => { return Promise.resolve(method(model, ...args)); }); }); resolve(); }).catch(reject); })); } invokeMethod(methodName, ...args) { return new Promise((resolve, reject) => { const method = this.customMethods.get(methodName); if (!method) { return reject(new Error(`Unable to invoke unknown method '${methodName}'!`)); } method(this.model, ...args.map(a => ___WEBPACK_IMPORTED_MODULE_1__.DataSerializer.deserialize(a))).then(result => { resolve(___WEBPACK_IMPORTED_MODULE_1__.DataSerializer.serialize(result)); }).catch(reject); }); } /** * Pull from this work * @param {PullOptions} [options] Pull options * @returns {Promise<void>} Pull promise */ pull(options) { return this.model.pull(options); } /** * Push to this worker * @param {DataFrame} frame Data frame * @param {PushOptions} [options] Push options * @returns {Promise<void>} Push promise */ push(frame, options) { return this.model.push(___WEBPACK_IMPORTED_MODULE_1__.DataSerializer.deserialize(frame), options); } /** * Init the model internal input and internal output * @param {ModelBuilder} modelBuilder Model builder */ _initModel(modelBuilder) { const internalSource = new ___WEBPACK_IMPORTED_MODULE_1__.CallbackSourceNode(options => { // Send a pull request to the main thread this.pullOutput.next(options); return undefined; }); const internalSink = new ___WEBPACK_IMPORTED_MODULE_1__.CallbackSinkNode(frame => { // Serialize the frame and transmit it to the main thread this.pushOutput.next(___WEBPACK_IMPORTED_MODULE_1__.DataSerializer.serialize(frame)); }); modelBuilder.graph.deleteNode(modelBuilder.graph.internalSource); modelBuilder.graph.internalSource = internalSource; internalSource.on('error', event => { this.eventOutput.next({ name: 'error', event }); }); internalSource.on('completed', event => { this.eventOutput.next({ name: 'completed', event }); }); modelBuilder.graph.addNode(modelBuilder.graph.internalSource); modelBuilder.graph.deleteNode(modelBuilder.graph.internalSink); modelBuilder.graph.internalSink = internalSink; modelBuilder.graph.addNode(modelBuilder.graph.internalSink); } findAllServices() { return new Promise(resolve => { const services = this.model.findAllServices(); const servicesArray = services.filter(service => !(service instanceof ___WEBPACK_IMPORTED_MODULE_1__.DummyDataService || service instanceof ___WEBPACK_IMPORTED_MODULE_1__.DummyService)).map(service => { // Services are wrapped in a proxy. Get prototype const serviceBase = Object.getPrototypeOf(service); return { uid: service.uid, type: serviceBase.constructor.name, dataType: service instanceof ___WEBPACK_IMPORTED_MODULE_1__.DataService ? service.driver.dataType.name : undefined }; }); resolve(servicesArray); }); } callService(call) { return new Promise((resolve, reject) => { const service = this.model.findDataService(call.serviceUID) || this.model.findService(call.serviceUID); if (service[call.method]) { const serializedParams = call.parameters; const params = []; serializedParams.forEach(param => { if (param['__type']) { params.push(___WEBPACK_IMPORTED_MODULE_1__.DataSerializer.deserialize(param)); } else { params.push(param); } }); const promise = service[call.method](...params); Promise.resolve(promise).then(_ => { if (Array.isArray(_)) { const result = []; _.forEach(r => { result.push(___WEBPACK_IMPORTED_MODULE_1__.DataSerializer.serialize(r)); }); resolve({ id: call.id, success: true, result }); } else { const result = ___WEBPACK_IMPORTED_MODULE_1__.DataSerializer.serialize(_); resolve({ id: call.id, success: true, result }); } }).catch(ex => { reject({ id: call.id, success: false, result: ex }); }); } }); } } /***/ }), /***/ "./dist/esm5/worker sync recursive": /*!********************************!*\ !*** ./dist/esm5/worker/ sync ***! \********************************/ /***/ ((module) => { function webpackEmptyContext(req) { var e = new Error("Cannot find module '" + req + "'"); e.code = 'MODULE_NOT_FOUND'; throw e; } webpackEmptyContext.keys = () => ([]); webpackEmptyContext.resolve = webpackEmptyContext; webpackEmptyContext.id = "./dist/esm5/worker sync recursive"; module.exports = webpackEmptyContext; /***/ }), /***/ "./node_modules/debug/node_modules/ms/index.js": /*!*****************************************************!*\ !*** ./node_modules/debug/node_modules/ms/index.js ***! \*****************************************************/ /***/ ((module) => { /** * Helpers. */ var s = 1000; var m = s * 60; var h = m * 60; var d = h * 24; var w = d * 7; var y = d * 365.25; /** * Parse or format the given `val`. * * Options: * * - `long` verbose formatting [false] * * @param {String|Number} val * @param {Object} [options] * @throws {Error} throw an error if val is not a non-empty string or a number * @return {String|Number} * @api public */ module.exports = function(val, options) { options = options || {}; var type = typeof val; if (type === 'string' && val.length > 0) { return parse(val); } else if (type === 'number' && isFinite(val)) { return options.long ? fmtLong(val) : fmtShort(val); } throw new Error( 'val is not a non-empty string or a valid number. val=' + JSON.stringify(val) ); }; /** * Parse the given `str` and return milliseconds. * * @param {String} str * @return {Number} * @api private */ function parse(str) { str = String(str); if (str.length > 100) { return; } var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( str ); if (!match) { return; } var n = parseFloat(match[1]); var type = (match[2] || 'ms').toLowerCase(); switch (type) { case 'years': case 'year': case 'yrs': case 'yr': case 'y': return n * y; case 'weeks': case 'week': case 'w': return n * w; case 'days': case 'day': case 'd': return n * d; case 'hours': case 'hour': case 'hrs': case 'hr': case 'h': return n * h; case 'minutes': case 'minute': case 'mins': case 'min': case 'm': return n * m; case 'seconds': case 'second': case 'secs': case 'sec': case 's': return n * s; case 'milliseconds': case 'millisecond': case 'msecs': case 'msec': case 'ms': return n; default: return undefined; } } /** * Short format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtShort(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return Math.round(ms / d) + 'd'; } if (msAbs >= h) { return Math.round(ms / h) + 'h'; } if (msAbs >= m) { return Math.round(ms / m) + 'm'; } if (msAbs >= s) { return Math.round(ms / s) + 's'; } return ms + 'ms'; } /** * Long format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtLong(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return plural(ms, msAbs, d, 'day'); } if (msAbs >= h) { return plural(ms, msAbs, h, 'hour'); } if (msAbs >= m) { return plural(ms, msAbs, m, 'minute'); } if (msAbs >= s) { return plural(ms, msAbs, s, 'second'); } return ms + ' ms'; } /** * Pluralization helper. */ function plural(ms, msAbs, n, name) { var isPlural = msAbs >= n * 1.5; return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); } /***/ }), /***/ "./node_modules/debug/src/browser.js": /*!*******************************************!*\ !*** ./node_modules/debug/src/browser.js ***! \*******************************************/ /***/ ((module, exports, __webpack_require__) => { /* eslint-env browser */ /** * This is the web browser implementation of `debug()`. */ exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; exports.storage = localstorage(); exports.destroy = (() => { let warned = false; return () => { if (!warned) { warned = true; console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); } }; })(); /** * Colors. */ exports.colors = [ '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33' ]; /** * Currently only WebKit-based Web Inspectors, Firefox >= v31, * and the Firebug extension (any Firefox version) are known * to support "%c" CSS customizations. * * TODO: add a `localStorage` variable to explicitly enable/disable colors */ // eslint-disable-next-line complexity function useColors() { // NB: In an Electron preload script, document will be defined but not fully // initialized. Since we know we're in Chrome, we'll just detect this case // explicitly if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { return true; } // Internet Explorer and Edge do not support colors. if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { return false; } // Is webkit? http://stackoverflow.com/a/16459606/376773 // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || // Is firebug? http://stackoverflow.com/a/398120/376773 (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || // Is firefox >= v31? // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || // Double check webkit in userAgent just in case we are in a worker (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); } /** * Colorize log arguments if enabled. * * @api public */ function formatArgs(args) { args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); if (!this.useColors) { return; } const c = 'color: ' + this.color; args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other // arguments passed either before or after the %c, so we need to // figure out the correct index to insert the CSS into let index = 0; let lastC = 0; args[0].replace(/%[a-zA-Z%]/g, match => { if (match === '%%') { return; } index++; if (match === '%c') { // We only are interested in the *last* %c // (the user may have provided their own) lastC = index; } }); args.splice(lastC, 0, c); } /** * Invokes `console.debug()` when available. * No-op when `console.debug` is not a "function". * If `console.debug` is not available, falls back * to `console.log`. * * @api public */ exports.log = console.debug || console.log || (() => {}); /** * Save `namespaces`. * * @param {String} namespaces * @api private */ function save(namespaces) { try { if (namespaces) { exports.storage.setItem('debug', namespaces); } else { exports.storage.removeItem('debug'); } } catch (error) { // Swallow // XXX (@Qix-) should we be logging these? } } /** * Load `namespaces`. * * @return {String} returns the previously persisted debug modes * @api private */ function load() { let r; try { r = exports.storage.getItem('debug'); } catch (error) { // Swallow // XXX (@Qix-) should we be logging these? } // If debug isn't set in LS, and we're in Electron, try to load $DEBUG if (!r && typeof process !== 'undefined' && 'env' in process) { r = process.env.DEBUG; } return r; } /** * Localstorage attempts to return the localstorage. * * This is necessary because safari throws * when a user disables cookies/localstorage * and you attempt to access it. * * @return {LocalStorage} * @api private */ function localstorage() { try { // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context // The Browser also has localStorage in the global context. return localStorage; } catch (error) { // Swallow // XXX (@Qix-) should we be logging these? } } module.exports = __webpack_require__(/*! ./common */ "./node_modules/debug/src/common.js")(exports); const {formatters} = module.exports; /** * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. */ formatters.j = function (v) { try { return JSON.stringify(v); } catch (error) { return '[UnexpectedJSONParseError]: ' + error.message; } }; /***/ }), /***/ "./node_modules/debug/src/common.js": /*!******************************************!*\ !*** ./node_modules/debug/src/common.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /** * This is the common logic for both the Node.js and web browser * implementations of `debug()`. */ function setup(env) { createDebug.debug = createDebug; createDebug.default = createDebug; createDebug.coerce = coerce; createDebug.disable = disable; createDebug.enable = enable; createDebug.enabled = enabled; createDebug.humanize = __webpack_require__(/*! ms */ "./node_modules/debug/node_modules/ms/index.js"); createDebug.destroy = destroy; Object.keys(env).forEach(key => { createDebug[key] = env[key]; }); /** * The currently active debug mode names, and names to skip. */ createDebug.names = []; createDebug.skips = []; /** * Map of special "%n" handling functions, for the debug "format" argument. * * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". */ createDebug.formatters = {}; /** * Selects a color for a debug namespace * @param {String} namespace The namespace string for the debug instance to be colored * @return {Number|String} An ANSI color code for the given namespace * @api private */ function selectColor(namespace) { let hash = 0; for (let i = 0; i < namespace.length; i++) { hash = ((hash << 5) - hash) + namespace.charCodeAt(i); hash |= 0; // Convert to 32bit integer } return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; } createDebug.selectColor = selectColor; /** * Create a debugger with the given `namespace`. * * @param {String} namespace * @return {Function} * @api public */ function createDebug(namespace) { let prevTime; let enableOverride = null; let namespacesCache; let enabledCache; function debug(...args) { // Disabled? if (!debug.enabled) { return; } const self = debug; // Set `diff` timestamp const curr = Number(new Date()); const ms = curr - (prevTime || curr); self.diff = ms; self.prev = prevTime; self.curr = curr; prevTime = curr; args[0] = createDebug.coerce(args[0]); if (typeof args[0] !== 'string') { // Anything else let's inspect with %O args.unshift('%O'); } // Apply any `formatters` transformations let index = 0; args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { // If we encounter an escaped % then don't increase the array index if (match === '%%') { return '%'; } index++; const formatter = createDebug.formatters[format]; if (typeof formatter === 'function') { const val = args[index]; match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` args.splice(index, 1); index--; } return match; }); // Apply env-specific formatting (colors, etc.) createDebug.formatArgs.call(self, args); const logFn = self.log || createDebug.log; logFn.apply(self, args); } debug.namespace = namespace; debug.useColors = createDebug.useColors(); debug.color = createDebug.selectColor(namespace); debug.extend = extend; debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. Object.defineProperty(debug, 'enabled', { enumerable: true, configurable: false, get: () => { if (enableOverride !== null) { return enableOverride; } if (namespacesCache !== createDebug.namespaces) { namespacesCache = createDebug.namespaces; enabledCache = createDebug.enabled(namespace); } return enabledCache; }, set: v => { enableOverride = v; } }); // Env-specific initialization logic for debug instances if (typeof createDebug.init === 'function') { createDebug.init(debug); } return debug; } function extend(namespace, delimiter) { const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); newDebug.log = this.log; return newDebug; } /** * Enables a debug mode by namespaces. This can include modes * separated by a colon and wildcards. * * @param {String} namespaces * @api public */ function enable(namespaces) { createDebug.save(namespaces); createDebug.namespaces = namespaces; createDebug.names = []; createDebug.skips = []; let i; const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); const len = split.length; for (i = 0; i < len; i++) { if (!split[i]) { // ignore empty strings continue; } namespaces = split[i].replace(/\*/g, '.*?'); if (namespaces[0] === '-') { createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); } else { createDebug.names.push(new RegExp('^' + namespaces + '$')); } } } /** * Disable debug output. * * @return {String} namespaces * @api public */ function disable() { const namespaces = [ ...createDebug.names.map(toNamespace), ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) ].join(','); createDebug.enable(''); return namespaces; } /** * Returns true if the given mode name is enabled, false otherwise. * * @param {String} name * @return {Boolean} * @api public */ function enabled(name) { if (name[name.length - 1] === '*') { return true; } let i; let len; for (i = 0, len = createDebug.skips.length; i < len; i++) { if (createDebug.skips[i].test(name)) { return false; } } for (i = 0, len = createDebug.names.length; i < len; i++) { if (createDebug.names[i].test(name)) { return true; } } return false; } /** * Convert regexp to namespace * * @param {RegExp} regxep * @return {String} namespace * @api private */ function toNamespace(regexp) { return regexp.toString() .substring(2, regexp.toString().length - 2) .replace(/\.\*\?$/, '*'); } /** * Coerce `val`. * * @param {Mixed} val * @return {Mixed} * @api private */ function coerce(val) { if (val instanceof Error) { return val.stack || val.message; } return val; } /** * XXX DO NOT USE. This is a temporary stub function. * XXX It WILL be removed in the next major release. */ function destroy() { console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); } createDebug.enable(createDebug.load()); return createDebug; } module.exports = setup; /***/ }), /***/ "./node_modules/is-observable/index.js": /*!*********************************************!*\ !*** ./node_modules/is-observable/index.js ***! \*********************************************/ /***/ ((module) => { module.exports = value => { if (!value) { return false; } // eslint-disable-next-line no-use-extend-native/no-use-extend-native if (typeof Symbol.observable === 'symbol' && typeof value[Symbol.observable] === 'function') { // eslint-disable-next-line no-use-extend-native/no-use-extend-native return value === value[Symbol.observable](); } if (typeof value['@@observable'] === 'function') { return value === value['@@observable'](); } return false; }; /***/ }), /***/ "./node_modules/observable-fns/dist.esm/_scheduler.js": /*!************************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/_scheduler.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AsyncSerialScheduler: () => (/* binding */ AsyncSerialScheduler) /* harmony export */ }); var __awaiter = (undefined && undefined.__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()); }); }; class AsyncSerialScheduler { constructor(observer) { this._baseObserver = observer; this._pendingPromises = new Set(); } complete() { Promise.all(this._pendingPromises) .then(() => this._baseObserver.complete()) .catch(error => this._baseObserver.error(error)); } error(error) { this._baseObserver.error(error); } schedule(task) { const prevPromisesCompletion = Promise.all(this._pendingPromises); const values = []; const next = (value) => values.push(value); const promise = Promise.resolve() .then(() => __awaiter(this, void 0, void 0, function* () { yield prevPromisesCompletion; yield task(next); this._pendingPromises.delete(promise); for (const value of values) { this._baseObserver.next(value); } })) .catch(error => { this._pendingPromises.delete(promise); this._baseObserver.error(error); }); this._pendingPromises.add(promise); } } /***/ }), /***/ "./node_modules/observable-fns/dist.esm/_symbols.js": /*!**********************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/_symbols.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getSymbol: () => (/* binding */ getSymbol), /* harmony export */ hasSymbol: () => (/* binding */ hasSymbol), /* harmony export */ hasSymbols: () => (/* binding */ hasSymbols) /* harmony export */ }); /* unused harmony export registerObservableSymbol */ const hasSymbols = () => typeof Symbol === "function"; const hasSymbol = (name) => hasSymbols() && Boolean(Symbol[name]); const getSymbol = (name) => hasSymbol(name) ? Symbol[name] : "@@" + name; function registerObservableSymbol() { if (hasSymbols() && !hasSymbol("observable")) { Symbol.observable = Symbol("observable"); } } if (!hasSymbol("asyncIterator")) { Symbol.asyncIterator = Symbol.asyncIterator || Symbol.for("Symbol.asyncIterator"); } /***/ }), /***/ "./node_modules/observable-fns/dist.esm/_util.js": /*!*******************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/_util.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isAsyncIterator: () => (/* binding */ isAsyncIterator), /* harmony export */ isIterator: () => (/* binding */ isIterator) /* harmony export */ }); /* harmony import */ var _symbols__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_symbols */ "./node_modules/observable-fns/dist.esm/_symbols.js"); /// <reference lib="es2018" /> function isAsyncIterator(thing) { return thing && (0,_symbols__WEBPACK_IMPORTED_MODULE_0__.hasSymbol)("asyncIterator") && thing[Symbol.asyncIterator]; } function isIterator(thing) { return thing && (0,_symbols__WEBPACK_IMPORTED_MODULE_0__.hasSymbol)("iterator") && thing[Symbol.iterator]; } /***/ }), /***/ "./node_modules/observable-fns/dist.esm/filter.js": /*!********************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/filter.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _scheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_scheduler */ "./node_modules/observable-fns/dist.esm/_scheduler.js"); /* harmony import */ var _observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./observable */ "./node_modules/observable-fns/dist.esm/observable.js"); /* harmony import */ var _unsubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsubscribe */ "./node_modules/observable-fns/dist.esm/unsubscribe.js"); var __awaiter = (undefined && undefined.__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()); }); }; /** * Filters the values emitted by another observable. * To be applied to an input observable using `pipe()`. */ function filter(test) { return (observable) => { return new _observable__WEBPACK_IMPORTED_MODULE_0__["default"](observer => { const scheduler = new _scheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncSerialScheduler(observer); const subscription = observable.subscribe({ complete() { scheduler.complete(); }, error(error) { scheduler.error(error); }, next(input) { scheduler.schedule((next) => __awaiter(this, void 0, void 0, function* () { if (yield test(input)) { next(input); } })); } }); return () => (0,_unsubscribe__WEBPACK_IMPORTED_MODULE_2__["default"])(subscription); }); }; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (filter); /***/ }), /***/ "./node_modules/observable-fns/dist.esm/flatMap.js": /*!*********************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/flatMap.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _scheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_scheduler */ "./node_modules/observable-fns/dist.esm/_scheduler.js"); /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_util */ "./node_modules/observable-fns/dist.esm/_util.js"); /* harmony import */ var _observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./observable */ "./node_modules/observable-fns/dist.esm/observable.js"); /* harmony import */ var _unsubscribe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./unsubscribe */ "./node_modules/observable-fns/dist.esm/unsubscribe.js"); var __awaiter = (undefined && undefined.__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 __asyncValues = (undefined && undefined.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; /** * Maps the values emitted by another observable. In contrast to `map()` * the `mapper` function returns an array of values that will be emitted * separately. * Use `flatMap()` to map input values to zero, one or multiple output * values. To be applied to an input observable using `pipe()`. */ function flatMap(mapper) { return (observable) => { return new _observable__WEBPACK_IMPORTED_MODULE_0__["default"](observer => { const scheduler = new _scheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncSerialScheduler(observer); const subscription = observable.subscribe({ complete() { scheduler.complete(); }, error(error) { scheduler.error(error); }, next(input) { scheduler.schedule((next) => __awaiter(this, void 0, void 0, function* () { var e_1, _a; const mapped = yield mapper(input); if ((0,_util__WEBPACK_IMPORTED_MODULE_2__.isIterator)(mapped) || (0,_util__WEBPACK_IMPORTED_MODULE_2__.isAsyncIterator)(mapped)) { try { for (var mapped_1 = __asyncValues(mapped), mapped_1_1; mapped_1_1 = yield mapped_1.next(), !mapped_1_1.done;) { const element = mapped_1_1.value; next(element); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (mapped_1_1 && !mapped_1_1.done && (_a = mapped_1.return)) yield _a.call(mapped_1); } finally { if (e_1) throw e_1.error; } } } else { mapped.map(output => next(output)); } })); } }); return () => (0,_unsubscribe__WEBPACK_IMPORTED_MODULE_3__["default"])(subscription); }); }; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatMap); /***/ }), /***/ "./node_modules/observable-fns/dist.esm/index.js": /*!*******************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/index.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Observable: () => (/* reexport safe */ _observable__WEBPACK_IMPORTED_MODULE_6__["default"]), /* harmony export */ Subject: () => (/* reexport safe */ _subject__WEBPACK_IMPORTED_MODULE_8__["default"]), /* harmony export */ filter: () => (/* reexport safe */ _filter__WEBPACK_IMPORTED_MODULE_0__["default"]), /* harmony export */ flatMap: () => (/* reexport safe */ _flatMap__WEBPACK_IMPORTED_MODULE_1__["default"]), /* harmony export */ interval: () => (/* reexport safe */ _interval__WEBPACK_IMPORTED_MODULE_2__["default"]), /* harmony export */ map: () => (/* reexport safe */ _map__WEBPACK_IMPORTED_MODULE_3__["default"]), /* harmony export */ merge: () => (/* reexport safe */ _merge__WEBPACK_IMPORTED_MODULE_4__["default"]), /* harmony export */ multicast: () => (/* reexport safe */ _multicast__WEBPACK_IMPORTED_MODULE_5__["default"]), /* harmony export */ scan: () => (/* reexport safe */ _scan__WEBPACK_IMPORTED_MODULE_7__["default"]), /* harmony export */ unsubscribe: () => (/* reexport safe */ _unsubscribe__WEBPACK_IMPORTED_MODULE_9__["default"]) /* harmony export */ }); /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./filter */ "./node_modules/observable-fns/dist.esm/filter.js"); /* harmony import */ var _flatMap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./flatMap */ "./node_modules/observable-fns/dist.esm/flatMap.js"); /* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./interval */ "./node_modules/observable-fns/dist.esm/interval.js"); /* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./map */ "./node_modules/observable-fns/dist.esm/map.js"); /* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./merge */ "./node_modules/observable-fns/dist.esm/merge.js"); /* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./multicast */ "./node_modules/observable-fns/dist.esm/multicast.js"); /* harmony import */ var _observable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./observable */ "./node_modules/observable-fns/dist.esm/observable.js"); /* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./scan */ "./node_modules/observable-fns/dist.esm/scan.js"); /* harmony import */ var _subject__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./subject */ "./node_modules/observable-fns/dist.esm/subject.js"); /* harmony import */ var _unsubscribe__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./unsubscribe */ "./node_modules/observable-fns/dist.esm/unsubscribe.js"); /***/ }), /***/ "./node_modules/observable-fns/dist.esm/interval.js": /*!**********************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/interval.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ interval) /* harmony export */ }); /* harmony import */ var _observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./observable */ "./node_modules/observable-fns/dist.esm/observable.js"); /** * Creates an observable that yields a new value every `period` milliseconds. * The first value emitted is 0, then 1, 2, etc. The first value is not emitted * immediately, but after the first interval. */ function interval(period) { return new _observable__WEBPACK_IMPORTED_MODULE_0__.Observable(observer => { let counter = 0; const handle = setInterval(() => { observer.next(counter++); }, period); return () => clearInterval(handle); }); } /***/ }), /***/ "./node_modules/observable-fns/dist.esm/map.js": /*!*****************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/map.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _scheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_scheduler */ "./node_modules/observable-fns/dist.esm/_scheduler.js"); /* harmony import */ var _observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./observable */ "./node_modules/observable-fns/dist.esm/observable.js"); /* harmony import */ var _unsubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsubscribe */ "./node_modules/observable-fns/dist.esm/unsubscribe.js"); var __awaiter = (undefined && undefined.__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()); }); }; /** * Maps the values emitted by another observable to different values. * To be applied to an input observable using `pipe()`. */ function map(mapper) { return (observable) => { return new _observable__WEBPACK_IMPORTED_MODULE_0__["default"](observer => { const scheduler = new _scheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncSerialScheduler(observer); const subscription = observable.subscribe({ complete() { scheduler.complete(); }, error(error) { scheduler.error(error); }, next(input) { scheduler.schedule((next) => __awaiter(this, void 0, void 0, function* () { const mapped = yield mapper(input); next(mapped); })); } }); return () => (0,_unsubscribe__WEBPACK_IMPORTED_MODULE_2__["default"])(subscription); }); }; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); /***/ }), /***/ "./node_modules/observable-fns/dist.esm/merge.js": /*!*******************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/merge.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./observable */ "./node_modules/observable-fns/dist.esm/observable.js"); /* harmony import */ var _unsubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./unsubscribe */ "./node_modules/observable-fns/dist.esm/unsubscribe.js"); function merge(...observables) { if (observables.length === 0) { return _observable__WEBPACK_IMPORTED_MODULE_0__.Observable.from([]); } return new _observable__WEBPACK_IMPORTED_MODULE_0__.Observable(observer => { let completed = 0; const subscriptions = observables.map(input => { return input.subscribe({ error(error) { observer.error(error); unsubscribeAll(); }, next(value) { observer.next(value); }, complete() { if (++completed === observables.length) { observer.complete(); unsubscribeAll(); } } }); }); const unsubscribeAll = () => { subscriptions.forEach(subscription => (0,_unsubscribe__WEBPACK_IMPORTED_MODULE_1__["default"])(subscription)); }; return unsubscribeAll; }); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (merge); /***/ }), /***/ "./node_modules/observable-fns/dist.esm/multicast.js": /*!***********************************************************!*\ !*** ./node_modules/observable-fns/dist.esm/multicast.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./observable */ "./node_modules/observable-fns/dist.esm/observable.js"); /* harmony import */ var _subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./subject */ "./node_modules/observable-fns/dist.esm/subject.js"); /* harmony import */ var _unsubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsubscribe */ "./node_modules/observable-fns/dist.esm/unsubscribe.js"); // TODO: Subject already creates additional observables "under the hood", // now we introduce even more. A true native MulticastObservable // would be preferable. /** * Takes a "cold" observable and returns a wrapping "hot" observable that * proxies the input observable's values and errors. * * An observable is called "cold" when its initialization function is run * for each new subscriber. This is how observable-fns's `Observable` * implementation works. * * A hot observable is an observable where new subscribers subscribe to * the upcoming values of an already-initialiazed observable. * * The multicast obser