@fluxscape/runtime 1.0.2 → 1.0.4
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/dist/index.es.js +2 -2
- package/dist/index.es.js.map +1 -1
- package/dist/index.iife.js +1 -1
- package/dist/index.iife.js.map +1 -1
- package/package.json +1 -1
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/api/cloudfile.js","../src/events.js","../src/noderegister.js","../src/timerscheduler.js","../src/variants.js","../src/outputproperty.js","../src/node.js","../src/guid.js","../src/nodescope.js","../src/nodes/componentinstance.js","../src/nodecontext.js","../src/eventsender.js","../src/services/services.js","../src/editorconnection.activewarnings.js","../src/editorconnection.js","../src/nodelibraryexport.js","../src/projectsettings.js","../src/models/nodemodel.js","../src/models/componentmodel.js","../src/models/graphmodel.js","../src/edgetriggeredinput.js","../src/nodedefinition.ts","../src/editormodeleventshandler.js","../src/async-pool.js","../src/nodes/componentinputs.js","../src/nodes/componentoutputs.js","../src/model.js","../src/nodes/std-library/runtasks.js","../src/nodes/std-library/data/restnode.js","../../../node_modules/.pnpm/lodash.difference@4.5.0/node_modules/lodash.difference/index.js","../src/nodes/std-library/expression.js","../src/utils.js","../src/javascriptnodeparser.js","../src/nodes/std-library/simplejavascript.js","../src/collection.js","../src/api/queryutils.js","../src/nodes/std-library/data/dbcollectionnode2.js","../src/nodes/std-library/data/dbmodelnode2.js","../src/nodes/std-library/data/dbmodelcrudbase.js","../src/nodes/std-library/data/setdbmodelpropertiesnode.js","../src/nodes/std-library/data/deletedbmodelpropertiesnode.js","../src/nodes/std-library/data/newdbmodelpropertiesnode.js","../src/nodes/std-library/data/dbmodelnode-addrelation.js","../src/nodes/std-library/data/dbmodelnode-removerelation.js","../src/nodes/std-library/data/filterdbmodelsnode.js","../src/nodes/std-library/data/modelnode2.js","../src/nodes/std-library/data/modelcrudbase.js","../src/nodes/std-library/data/setmodelpropertiesnode.js","../src/nodes/std-library/data/newmodelnode.js","../src/nodes/std-library/data/cloudfilenode.js","../src/api/configservice.ts","../src/nodes/std-library/data/dbconfig.js","../src/nodes/std-library/variables/variablebase.js","../src/nodes/std-library/variables/number.js","../src/nodes/std-library/variables/string.js","../src/nodes/std-library/variables/boolean.js","../src/nodes/std-library/condition.js","../src/nodes/std-library/and.js","../src/nodes/std-library/or.js","../src/nodes/std-library/booleantostring.js","../src/nodes/std-library/datetostring.js","../src/nodes/std-library/stringmapper.js","../src/nodes/std-library/inverter.js","../src/nodes/std-library/substring.js","../src/nodes/std-library/stringformat.js","../src/nodes/std-library/counter.js","../src/nodes/std-library/uniqueid.js","../src/nodes/std-library/user/setuserproperties.js","../src/nodes/std-library/user/user.js","../src/runtime.js","../src/api/cloudstore.js","../src/api/records.js"],"sourcesContent":["class CloudFile {\n constructor({ name, url }) {\n this.name = name;\n this.url = url;\n }\n\n getUrl() {\n return this.url;\n }\n\n getName() {\n return this.name;\n }\n\n toString() {\n return this.url;\n }\n}\n\nexport { CloudFile };\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar R = typeof Reflect === \"object\" ? Reflect : null;\nvar ReflectApply =\n R && typeof R.apply === \"function\"\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n };\n\nvar ReflectOwnKeys;\nif (R && typeof R.ownKeys === \"function\") {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target).concat(\n Object.getOwnPropertySymbols(target)\n );\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN =\n Number.isNaN ||\n function NumberIsNaN(value) {\n return value !== value;\n };\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nexport { EventEmitter };\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== \"function\") {\n throw new TypeError(\n 'The \"listener\" argument must be of type Function. Received type ' +\n typeof listener\n );\n }\n}\n\nObject.defineProperty(EventEmitter, \"defaultMaxListeners\", {\n enumerable: true,\n get() {\n return defaultMaxListeners;\n },\n set(arg) {\n if (typeof arg !== \"number\" || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError(\n 'The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' +\n arg +\n \".\"\n );\n }\n defaultMaxListeners = arg;\n },\n});\n\nEventEmitter.init = function () {\n if (\n this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events\n ) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== \"number\" || n < 0 || NumberIsNaN(n)) {\n throw new RangeError(\n 'The value of \"n\" is out of range. It must be a non-negative number. Received ' +\n n +\n \".\"\n );\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = type === \"error\";\n\n var events = this._events;\n if (events !== undefined) doError = doError && events.error === undefined;\n else if (!doError) return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0) er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error(\n \"Unhandled error.\" + (er ? \" (\" + er.message + \")\" : \"\")\n );\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined) return false;\n\n if (typeof handler === \"function\") {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit(\n \"newListener\",\n type,\n listener.listener ? listener.listener : listener\n );\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === \"function\") {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend\n ? [listener, existing]\n : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error(\n \"Possible EventEmitter memory leak detected. \" +\n existing.length +\n \" \" +\n String(type) +\n \" listeners \" +\n \"added. Use emitter.setMaxListeners() to \" +\n \"increase limit\"\n );\n w.name = \"MaxListenersExceededWarning\";\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener = function prependListener(\n type,\n listener\n) {\n return _addListener(this, type, listener, true);\n};\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0) return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = {\n fired: false,\n wrapFn: undefined,\n target: target,\n type: type,\n listener: listener,\n };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener = function prependOnceListener(\n type,\n listener\n) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n};\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener = function removeListener(\n type,\n listener\n) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined) return this;\n\n list = events[type];\n if (list === undefined) return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0) this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit(\"removeListener\", type, list.listener || listener);\n }\n } else if (typeof list !== \"function\") {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0) return this;\n\n if (position === 0) list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1) events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit(\"removeListener\", type, originalListener || listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined) return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0) this._events = Object.create(null);\n else delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === \"removeListener\") continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners(\"removeListener\");\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === \"function\") {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n};\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined) return [];\n\n var evlistener = events[type];\n if (evlistener === undefined) return [];\n\n if (typeof evlistener === \"function\")\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap\n ? unwrapListeners(evlistener)\n : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function (emitter, type) {\n if (typeof emitter.listenerCount === \"function\") {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === \"function\") {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i) copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++) list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nexport function once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === \"function\") {\n emitter.removeListener(\"error\", errorListener);\n }\n resolve([].slice.call(arguments));\n }\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== \"error\") {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === \"function\") {\n eventTargetAgnosticAddListener(emitter, \"error\", handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === \"function\") {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === \"function\") {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError(\n 'The \"emitter\" argument must be of type EventEmitter. Received type ' +\n typeof emitter\n );\n }\n}\n","function NodeRegister(context) {\n this._constructors = {};\n this.context = context;\n}\n\nNodeRegister.prototype.register = function (nodeDefinition) {\n var name = nodeDefinition.metadata.name;\n\n this._constructors[name] = nodeDefinition;\n};\n\nNodeRegister.prototype.createNode = function (name, id, nodeScope) {\n if (this._constructors.hasOwnProperty(name) === false) {\n throw new Error(\"Unknown node type with name \" + name);\n }\n\n return this._constructors[name](this.context, id, nodeScope);\n};\n\nNodeRegister.prototype.getNodeMetadata = function (type) {\n if (this._constructors.hasOwnProperty(type) === false) {\n throw new Error(\"Unknown node type with name \" + type);\n }\n\n return this._constructors[type].metadata;\n};\n\nNodeRegister.prototype.hasNode = function (type) {\n return this._constructors.hasOwnProperty(type);\n};\n\nNodeRegister.prototype.getInputType = function (type, inputName) {\n const metadata = this.getNodeMetadata(type);\n return metadata.inputs[inputName] && metadata.inputs[inputName].type;\n};\n\nexport { NodeRegister };\n","function Timer(scheduler, args) {\n this.duration = args.duration || 0;\n this._isRunning = false;\n this._hasCalledOnStart = false;\n this.scheduler = scheduler;\n this.repeatCount = 1;\n this.delay = 0;\n\n for (var arg in args) {\n this[arg] = args[arg];\n }\n}\n\nTimer.prototype.start = function () {\n if (this._isRunning) {\n this.stop();\n }\n\n this.scheduler.scheduleTimer(this);\n return this;\n};\n\nTimer.prototype.stop = function () {\n this.scheduler.stopTimer(this);\n this._hasCalledOnStart = false;\n this._isRunning = false;\n this._wasStopped = true; // This is used to avoid calling onFinish\n};\n\nTimer.prototype.isRunning = function () {\n return this._isRunning;\n};\n\nTimer.prototype.durationLeft = function () {\n return this._durationLeft;\n};\n\nfunction TimerScheduler(requestFrameCallback) {\n this.requestFrame = requestFrameCallback;\n this.runningTimers = [];\n this.newTimers = [];\n}\n\nTimerScheduler.prototype.createTimer = function (args) {\n return new Timer(this, args);\n};\n\nTimerScheduler.prototype.scheduleTimer = function (timer) {\n if (this.newTimers.indexOf(timer) === -1) {\n if (timer.repeatCount === 0) {\n timer.repeatCount = 100000;\n }\n\n this.newTimers.push(timer);\n this.requestFrame();\n }\n};\n\nTimerScheduler.prototype.stopTimer = function (timer) {\n var index;\n\n if (timer._isRunning) {\n index = this.runningTimers.indexOf(timer);\n if (index !== -1) {\n this.runningTimers.splice(index, 1);\n }\n\n if (timer.onStop && !timer._wasStopped) {\n timer.onStop();\n }\n } else {\n index = this.newTimers.indexOf(timer);\n if (index !== -1) {\n this.newTimers.splice(index, 1);\n }\n }\n};\n\nTimerScheduler.prototype.runTimers = function (currentTime) {\n var remainingTimers = [],\n finishedTimers = [],\n timersThisFrame = [];\n\n var i,\n len = this.runningTimers.length,\n timer;\n\n //copy timer list in case timers are added or removed during onStart or onRunning\n for (i = 0; i < len; ++i) {\n timersThisFrame[i] = this.runningTimers[i];\n }\n\n for (i = 0; i < len; ++i) {\n timer = timersThisFrame[i];\n if (timer && currentTime >= timer._start) {\n if (timer._hasCalledOnStart === false && timer.onStart) {\n timer.onStart();\n timer._hasCalledOnStart = true;\n }\n\n var t;\n if (timer.duration > 0) {\n t = (currentTime - timer._start) / (timer.duration * timer.repeatCount);\n } else {\n t = 1.0;\n }\n\n timer._durationLeft = timer.duration * (1 - t);\n\n var localT = t * timer.repeatCount - Math.floor(t * timer.repeatCount);\n if (t >= 1.0) {\n localT = 1.0;\n }\n\n if (timer.onRunning) {\n timer.onRunning(localT);\n }\n\n if (t < 1.0 && timer._isRunning) {\n remainingTimers.push(timer);\n } else if (!timer._wasStopped) {\n finishedTimers.push(timer);\n }\n } else {\n remainingTimers.push(timer);\n }\n }\n\n this.runningTimers = remainingTimers;\n\n for (i = 0; i < finishedTimers.length; ++i) {\n finishedTimers[i]._isRunning = false;\n finishedTimers[i]._hasCalledOnStart = false;\n if (finishedTimers[i].onFinish) {\n finishedTimers[i].onFinish();\n }\n }\n\n //add newly queued timers\n if (this.newTimers.length > 0) {\n for (i = 0; i < this.newTimers.length; ++i) {\n timer = this.newTimers[i];\n timer._start = currentTime + timer.delay;\n timer._isRunning = true;\n timer._wasStopped = false;\n this.runningTimers.push(timer);\n\n if (timer.delay === 0) {\n //play first timer frame directly to keep everything nicely synched\n if (timer.onStart) {\n timer.onStart();\n timer._hasCalledOnStart = true;\n }\n if (timer.onRunning) {\n timer.onRunning(0);\n }\n }\n }\n this.newTimers.length = 0;\n }\n};\n\nTimerScheduler.prototype.hasPendingTimers = function () {\n return this.runningTimers.length > 0 || this.newTimers.length > 0;\n};\n\nexport { TimerScheduler };\n","export class Variants {\n constructor({ graphModel, getNodeScope }) {\n this.getNodeScope = getNodeScope;\n\n if (graphModel) {\n this.graphModel = graphModel;\n graphModel.on(\"variantUpdated\", (variant) =>\n this.onVariantUpdated(variant)\n );\n }\n }\n\n getVariant(typename, name) {\n if (!this.graphModel) return undefined;\n\n return this.graphModel.getVariant(typename, name);\n }\n\n onVariantUpdated(variant) {\n const nodeScope = this.getNodeScope();\n if (!nodeScope) return;\n\n //get all nodes with the type the variant applies to\n const nodes = nodeScope.getNodesWithTypeRecursive(variant.typename);\n\n //and filter for the ones using the updated variant\n const nodesWithVariant = nodes.filter((node) => {\n //if a variant has been set during runtime, it'll override the value from the model\n if (node.variant) return node.variant.name === variant.name;\n\n //otherwise check the model (which always matches the editor)\n return node.model && node.model.variant === variant.name;\n });\n\n //and re-apply the variant\n for (const node of nodesWithVariant) {\n node.setVariant(variant);\n }\n }\n}\n","/**\n * @class OutputProperty\n *\n * @param args Arguments\n * @param {Function} args.getter Function that returns the value\n * @param {Node} args.owner Port owner\n * @param {string} args.type Output value type\n * @constructor\n */\nfunction OutputProperty(args) {\n if (!args.owner) {\n throw new Error(\"Owner must be set\");\n }\n this.getter = args.getter;\n this.connections = [];\n this.owner = args.owner;\n this.name = args.name;\n this.onFirstConnectionAdded = args.onFirstConnectionAdded;\n this.onLastConnectionRemoved = args.onLastConnectionRemoved;\n\n this._id = undefined;\n}\n\nObject.defineProperties(OutputProperty.prototype, {\n /**\n * Gets the current value\n * @name OutputProperty#value\n * @readonly\n */\n value: {\n get() {\n return this.getter.call(this.owner);\n },\n },\n\n id: {\n get() {\n if (!this._id) {\n this._id = this.owner.id + this.name;\n }\n return this._id;\n },\n },\n\n /**\n * Registers a connection to propagate dirtiness\n * Also records which input port it's connected to so nodes like\n * Animation can set it's implicit start value\n * @name OutputProperty#registerConnection\n * @readonly\n */\n registerConnection: {\n value(node, inputPortName) {\n this.connections.push({\n node: node,\n inputPortName: inputPortName,\n });\n\n if (this.connections.length === 1 && this.onFirstConnectionAdded) {\n this.onFirstConnectionAdded.call(this.owner);\n }\n },\n },\n\n /**\n * Deregisters a connection to a specific input port\n * @name OutputProperty#deregisterConnection\n * @readonly\n */\n deregisterConnection: {\n value(node, inputPortName) {\n for (var i = 0; i < this.connections.length; i++) {\n var connection = this.connections[i];\n if (\n connection.node === node &&\n connection.inputPortName === inputPortName\n ) {\n this.connections.splice(i, 1);\n break;\n }\n }\n\n if (this.connections.length === 0 && this.onLastConnectionRemoved) {\n this.onLastConnectionRemoved.call(this.owner);\n }\n },\n },\n\n /**\n * Sets dirty flag of all nodes that depend on this output port\n * @name OutputProperty#flagDependeesDirty\n * @readonly\n */\n flagDependeesDirty: {\n value(value) {\n for (var i = 0, len = this.connections.length; i < len; i++) {\n this.connections[i].node.flagDirty();\n }\n },\n },\n sendValue: {\n value(value) {\n if (this._lastUpdateIteration !== this.owner._updatedAtIteration) {\n this._lastUpdateIteration = this.owner._updatedAtIteration;\n this.valuesSendThisIteration = 0;\n } else {\n this.valuesSendThisIteration++;\n }\n\n if (this.valuesSendThisIteration > 500) {\n //this will make the owner send a warning and stop its update\n this.owner._cyclicLoop = true;\n }\n\n for (var i = 0, len = this.connections.length; i < len; i++) {\n var connection = this.connections[i];\n connection.node._setValueFromConnection(\n connection.inputPortName,\n value\n );\n }\n },\n },\n /**\n * @name OutputProperty#hasConnections\n * @readonly\n */\n hasConnections: {\n value() {\n return this.connections.length > 0;\n },\n },\n});\n\nexport { OutputProperty };\n","import { OutputProperty } from \"./outputproperty\";\n\n/**\n * Base class for all Nodes\n * @constructor\n */\nfunction Node(context, id) {\n this.id = id;\n this.context = context;\n this._dirty = false;\n\n this._inputs = {};\n this._inputValues = {};\n this._outputs = {};\n\n this._inputConnections = {};\n this._outputList = [];\n this._isUpdating = false;\n this._inputValuesQueue = {};\n this._afterInputsHaveUpdatedCallbacks = [];\n\n this._internal = {};\n this._signalsSentThisUpdate = {};\n\n this._deleted = false;\n this._deleteListeners = [];\n this._isFirstUpdate = true;\n\n this._valuesFromConnections = {};\n this.updateOnDirtyFlagging = true;\n}\n\nNode.prototype.getInputValue = function (name) {\n return this._inputValues[name];\n};\n\nNode.prototype.registerInput = function (name, input) {\n if (this.hasInput(name)) {\n throw new Error(\"Input property \" + name + \" already registered\");\n }\n\n this._inputs[name] = input;\n\n if (input.type && input.type.units) {\n const defaultUnit = input.type.defaultUnit || input.type.units[0];\n this._inputValues[name] = {\n value: input.default,\n type: defaultUnit,\n };\n } else if (input.hasOwnProperty(\"default\")) {\n this._inputValues[name] = input.default;\n }\n};\n\nNode.prototype.deregisterInput = function (name) {\n if (this.hasInput(name) === false) {\n throw new Error(\"Input property \" + name + \" doesn't exist\");\n }\n delete this._inputs[name];\n delete this._inputValues[name];\n};\n\nNode.prototype.registerInputs = function (inputs) {\n for (const name in inputs) {\n this.registerInput(name, inputs[name]);\n }\n};\n\nNode.prototype.getInput = function (name) {\n if (this.hasInput(name) === false) {\n console.log(\"Node \" + this.name + \": Invalid input property \" + name);\n return undefined;\n }\n\n return this._inputs[name];\n};\n\nNode.prototype.hasInput = function (name) {\n return name in this._inputs;\n};\n\nNode.prototype.registerInputIfNeeded = function () {\n //noop, can be overriden by subclasses\n};\n\nNode.prototype.setInputValue = function (name, value) {\n const input = this.getInput(name);\n if (!input) {\n console.log(\"node doesn't have input\", name);\n return;\n }\n\n //inputs with units always expect objects in the shape of {value, unit, ...}\n //these inputs might sometimes get raw numbers without units, and in those cases\n //Noodl should just update the value and not the other parameters\n const currentInputValue = this._inputValues[name];\n\n if (isNaN(value) === false && currentInputValue && currentInputValue.unit) {\n //update the value, and keep the other parameters\n const newValue = Object.assign({}, currentInputValue); //copy it, so we don't modify the original object (e.g. it might come from a variant)\n newValue.value = value;\n value = newValue;\n }\n\n //Save the current input value. Save it before resolving color styles so delta updates on color styles work correctly\n this._inputValues[name] = value;\n\n if (input.type === \"color\" && this.context && this.context.styles) {\n value = this.context.styles.resolveColor(value);\n } else if (input.type === \"array\" && typeof value === \"string\") {\n try {\n value = eval(value);\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"invalid-array-\" + name\n );\n } catch (e) {\n value = [];\n console.log(e);\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"invalid-array-\" + name,\n {\n showGlobally: true,\n message: \"Invalid array<br>\" + e.toString(),\n }\n );\n }\n }\n }\n\n input.set.call(this, value);\n};\n\nNode.prototype.hasOutput = function (name) {\n return name in this._outputs;\n};\n\nNode.prototype.registerOutput = function (name, output) {\n if (this.hasOutput(name)) {\n throw new Error(\"Output property \" + name + \" already registered\");\n }\n\n const newOutput = new OutputProperty({\n owner: this,\n getter: output.get || output.getter,\n name: name,\n onFirstConnectionAdded: output.onFirstConnectionAdded,\n onLastConnectionRemoved: output.onLastConnectionRemoved,\n });\n\n this._outputs[name] = newOutput;\n this._outputList.push(newOutput);\n};\n\nNode.prototype.deregisterOutput = function (name) {\n if (this.hasOutput(name) === false) {\n throw new Error(\"Output property \" + name + \" isn't registered\");\n }\n\n const output = this._outputs[name];\n\n if (output.hasConnections()) {\n throw new Error(\n \"Output property \" + name + \" has connections and can't be removed\"\n );\n }\n\n delete this._outputs[name];\n var index = this._outputList.indexOf(output);\n this._outputList.splice(index, 1);\n};\n\nNode.prototype.registerOutputs = function (outputs) {\n for (var name in outputs) {\n this.registerOutput(name, outputs[name]);\n }\n};\n\nNode.prototype.registerOutputIfNeeded = function () {\n //noop, can be overriden by subclasses\n};\n\nNode.prototype.getOutput = function (name) {\n if (this.hasOutput(name) === false) {\n throw new Error(\"Node \" + this.name + \" doesn't have a port named \" + name);\n }\n return this._outputs[name];\n};\n\nNode.prototype.connectInput = function (inputName, sourceNode, sourcePortName) {\n if (this.hasInput(inputName) === false) {\n throw new Error(\n \"Invalid connection, input doesn't exist. Trying to connect from \" +\n sourceNode.name +\n \" output \" +\n sourcePortName +\n \" to \" +\n this.name +\n \" input \" +\n inputName\n );\n }\n\n var sourcePort = sourceNode.getOutput(sourcePortName);\n sourcePort.registerConnection(this, inputName);\n\n if (!this._inputConnections[inputName]) {\n this._inputConnections[inputName] = [];\n }\n\n this._inputConnections[inputName].push(sourcePort);\n\n if (sourceNode._signalsSentThisUpdate[sourcePortName]) {\n this._setValueFromConnection(inputName, true);\n this._setValueFromConnection(inputName, false);\n } else {\n var outputValue = sourcePort.value;\n if (outputValue !== undefined) {\n this._setValueFromConnection(inputName, outputValue);\n\n if (this.context) {\n // Send value to editor for connection debugging.\n // Conceptually the value has already been sent,\n // but the editor needs to be notified after a connection is created\n this.context.connectionSentValue(sourcePort, sourcePort.value);\n }\n }\n }\n\n this.flagDirty();\n};\n\nNode.prototype.removeInputConnection = function (\n inputName,\n sourceNodeId,\n sourcePortName\n) {\n if (!this._inputConnections[inputName]) {\n throw new Error(\"Node removeInputConnection: Input doesn't exist\");\n }\n\n const inputsToPort = this._inputConnections[inputName];\n\n for (let i = 0; i < inputsToPort.length; i++) {\n const sourcePort = inputsToPort[i];\n if (\n sourcePort.owner.id === sourceNodeId &&\n sourcePort.name === sourcePortName\n ) {\n inputsToPort.splice(i, 1);\n\n //remove the output from the source node\n const output = sourcePort.owner.getOutput(sourcePortName);\n output.deregisterConnection(this, inputName);\n break;\n }\n }\n\n if (inputsToPort.length === 0) {\n //no inputs left, remove the bookkeeping that traces values sent to this node as inputs\n delete this._valuesFromConnections[inputName];\n }\n};\n\nNode.prototype.isInputConnected = function (inputName) {\n if (!this._inputConnections.hasOwnProperty(inputName)) {\n return false;\n }\n\n //We have connections, but they might be from non-connected component inputs.\n // If they are from a component input then check the input on the component instance.\n return this._inputConnections[inputName].some((c) => {\n //if this is not a component input, then we have a proper connection\n if (c.owner.name !== \"Component Inputs\") return true;\n\n //the name of the output from the component input, is the same as the component instance input\n const component = c.owner.nodeScope.componentOwner;\n return component.isInputConnected(c.name);\n });\n};\n\nNode.prototype.update = function () {\n if (this._isUpdating || this._dirty === false) {\n return;\n }\n\n if (this._updatedAtIteration !== this.context.updateIteration) {\n this._updatedAtIteration = this.context.updateIteration;\n this._updateIteration = 0;\n if (this._cyclicLoop) this._cyclicLoop = false;\n }\n\n this._isUpdating = true;\n const maxUpdateIterations = 100;\n\n try {\n while (this._dirty && !this._cyclicLoop) {\n this._updateDependencies();\n\n //all inputs are now updated, flag as not dirty\n this._dirty = false;\n\n const inputNames = Object.keys(this._inputValuesQueue);\n\n let hasMoreInputs = true;\n\n while (hasMoreInputs && !this._cyclicLoop) {\n hasMoreInputs = false;\n\n for (let i = 0; i < inputNames.length; i++) {\n const inputName = inputNames[i];\n const queue = this._inputValuesQueue[inputName];\n if (queue.length > 0) {\n this.setInputValue(inputName, queue.shift());\n if (queue.length > 0) {\n hasMoreInputs = true;\n }\n }\n }\n\n const afterInputCallbacks = this._afterInputsHaveUpdatedCallbacks;\n this._afterInputsHaveUpdatedCallbacks = [];\n for (let i = 0; i < afterInputCallbacks.length; i++) {\n afterInputCallbacks[i].call(this);\n }\n }\n this._updateIteration++;\n\n if (this._updateIteration >= maxUpdateIterations) {\n this._cyclicLoop = true;\n }\n }\n } catch (e) {\n this._isUpdating = false;\n throw e;\n }\n\n if (this._cyclicLoop) {\n //flag the node as dirty again to let it contiune next frame so we don't just stop it\n //This will allow the browser a chance to render and run other code\n this.context.scheduleNextFrame(() => {\n this.context.nodeIsDirty(this);\n });\n\n if (\n this.context.editorConnection &&\n !this._cyclicWarningSent &&\n this.context.isWarningTypeEnabled(\"cyclicLoops\")\n ) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"cyclic-loop\",\n {\n showGlobally: true,\n message: \"Cyclic loop detected\",\n }\n );\n this._cyclicWarningSent = true;\n console.log(\"cycle detected\", {\n id: this.id,\n name: this.name,\n component: this.nodeScope.componentOwner.name,\n });\n }\n }\n\n this._isFirstUpdate = false;\n this._isUpdating = false;\n};\n\nNode.prototype._updateDependencies = function () {\n for (var inputName in this._inputConnections) {\n var connectedPorts = this._inputConnections[inputName];\n for (var i = 0; i < connectedPorts.length; ++i) {\n connectedPorts[i].owner.update();\n }\n }\n};\n\nNode.prototype.flagDirty = function () {\n if (this._dirty) {\n return;\n }\n\n this._dirty = true;\n\n //a hack to not update nodes as a component is being created.\n //Nodes should update once all connections are in place, so inputs that rely on connections, e.g. \"Run\" on a Function node, have the correct context before running.\n //This flag is being updated externally by the NodeScope and _performDirtyUpdate will be called when the component setup is done\n if (this.updateOnDirtyFlagging) {\n this._performDirtyUpdate();\n }\n};\n\nNode.prototype._performDirtyUpdate = function () {\n this.context && this.context.nodeIsDirty(this);\n\n for (var i = 0; i < this._outputList.length; ++i) {\n this._outputList[i].flagDependeesDirty();\n }\n};\n\nNode.prototype.sendValue = function (name, value) {\n if (this.hasOutput(name) === false) {\n console.log(\"Error: Node\", this.name, \"doesn't have a output named\", name);\n return;\n }\n\n if (value === undefined) {\n return;\n }\n\n const output = this.getOutput(name);\n output.sendValue(value);\n\n if (this.context) {\n this.context.connectionSentValue(output, value);\n }\n};\n\nNode.prototype.flagOutputDirty = function (name) {\n const output = this.getOutput(name);\n this.sendValue(name, output.value);\n};\n\nNode.prototype.flagAllOutputsDirty = function () {\n for (const output of this._outputList) {\n this.sendValue(output.name, output.value);\n }\n};\n\nNode.prototype.sendSignalOnOutput = function (outputName) {\n if (this.hasOutput(outputName) === false) {\n console.log(\n \"Error: Node\",\n this.name,\n \"doesn't have a output named\",\n outputName\n );\n return;\n }\n\n const output = this.getOutput(outputName);\n output.sendValue(true);\n output.sendValue(false);\n\n this._signalsSentThisUpdate[outputName] = true;\n this.scheduleAfterInputsHaveUpdated(function () {\n this._signalsSentThisUpdate[outputName] = false;\n });\n\n if (this.context) {\n this.context.connectionSentSignal(output);\n }\n};\n\nNode.prototype._setValueFromConnection = function (inputName, value) {\n this._valuesFromConnections[inputName] = value;\n this.queueInput(inputName, value);\n};\n\nNode.prototype._hasInputBeenSetFromAConnection = function (inputName) {\n return this._valuesFromConnections.hasOwnProperty(inputName);\n};\n\nNode.prototype.queueInput = function (inputName, value) {\n if (!this._inputValuesQueue[inputName]) {\n this._inputValuesQueue[inputName] = [];\n }\n\n //when values are queued during the very first update, make the last value overwrite previous ones\n //so a chain with multiple nodes with values that connect to each other all\n //consolidate to a single value, instead of piling up in the queue\n if (this._isFirstUpdate) {\n //signals need two values, so make sure we don't suppress the 'false' that comes directly\n //after a 'true'\n const queueValue = this._inputValuesQueue[inputName][0];\n const isSignal = queueValue === true; // && value === true;\n if (!isSignal) {\n //default units are set as an object {value, unit}\n //subsequent inputs can be unitless. and will will then overwrite those\n //and the node will get a value without ever getting a unit.\n //To make sure that doesn't happen, look at the value being overwritten\n //and use the unit from that before overwriting\n if (\n queueValue instanceof Object &&\n queueValue.unit &&\n value instanceof Object === false\n ) {\n value = {\n value,\n unit: queueValue.unit,\n };\n }\n\n this._inputValuesQueue[inputName].length = 0;\n }\n }\n\n this._inputValuesQueue[inputName].push(value);\n this.flagDirty();\n};\n\nNode.prototype.scheduleAfterInputsHaveUpdated = function (callback) {\n this._afterInputsHaveUpdatedCallbacks.push(callback);\n this.flagDirty();\n};\n\nNode.prototype.setNodeModel = function (nodeModel) {\n this.model = nodeModel;\n nodeModel.on(\"parameterUpdated\", this._onNodeModelParameterUpdated, this);\n nodeModel.on(\"variantUpdated\", this._onNodeModelVariantUpdated, this);\n\n nodeModel.on(\n \"inputPortRemoved\",\n (port) => {\n if (this.hasInput(port.name)) {\n this.deregisterInput(port.name);\n }\n },\n this\n );\n\n nodeModel.on(\n \"outputPortRemoved\",\n (port) => {\n if (this.hasOutput(port.name)) {\n this.deregisterOutput(port.name);\n }\n },\n this\n );\n};\n\nNode.prototype.addDeleteListener = function (listener) {\n this._deleteListeners.push(listener);\n};\n\nNode.prototype._onNodeDeleted = function () {\n if (this.model) {\n this.model.removeListenersWithRef(this);\n this.model = undefined;\n }\n\n this._deleted = true;\n\n for (const deleteListener of this._deleteListeners) {\n deleteListener.call(this);\n }\n};\n\nNode.prototype._onNodeModelParameterUpdated = function (event) {\n this.registerInputIfNeeded(event.name);\n\n if (event.value !== undefined) {\n if (event.state) {\n //this parameter is only used in a certain visual state\n //make sure we are in that state before setting it\n\n if (!this._getVisualStates) {\n console.log(\n \"Node has nos visual states, but got a parameter for state\",\n event.state\n );\n return;\n }\n\n const states = this._getVisualStates();\n if (states.indexOf(event.state) !== -1) {\n this.queueInput(event.name, event.value);\n }\n } else {\n this.queueInput(event.name, event.value);\n }\n } else {\n //parameter is undefined, that means it has been removed and we should reset to default\n let defaultValue;\n\n const variant = this.variant;\n\n if (event.state) {\n //local value has been reset, check the variant first\n if (\n variant &&\n variant.stateParameters.hasOwnProperty(event.state) &&\n variant.stateParameters[event.state].hasOwnProperty(event.name)\n ) {\n defaultValue = variant.stateParameters[event.state][event.name];\n }\n //and if variant has no value in that state, check for local values in the neutral state\n else if (this.model.parameters.hasOwnProperty(event.name)) {\n defaultValue = this.model.parameters[event.name];\n }\n //and then look in the variant neutral values\n else if (variant && variant.parameters.hasOwnProperty(event.name)) {\n defaultValue = variant.parameters[event.name];\n }\n } else if (variant && variant.parameters.hasOwnProperty(event.name)) {\n defaultValue = variant.parameters[event.name];\n }\n\n if (defaultValue === undefined) {\n //get the default value for the port\n defaultValue = this.context.getDefaultValueForInput(\n this.model.type,\n event.name\n );\n\n //when a paramter that's used by a text style is reset, Noodl will modify the original dom node, outside of React\n //React will then re-render, and should apply the values from the text style, but won't see any delta in the virtual dom,\n //even though there is a diff to the real dom.\n //to fix that, we just force React to re-render the entire node\n this._resetReactVirtualDOM && this._resetReactVirtualDOM();\n }\n\n this.queueInput(event.name, defaultValue);\n }\n};\n\nNode.prototype._onNodeModelVariantUpdated = function (variant) {\n this.setVariant(variant);\n};\n\nexport { Node };\n","//adapted from http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\nexport function guid() {\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n return (\n s4() +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n s4() +\n s4()\n );\n}\n","import { guid } from \"./guid\";\nimport { ComponentInstanceNode } from \"./nodes/componentinstance\";\n\nfunction NodeScope(context, componentOwner) {\n this.context = context;\n this.nodes = {};\n this.componentOwner = componentOwner; //Component Instance that owns this NodeScope\n this.componentInstanceChildren = {};\n}\n\nfunction verifyData(data, requiredKeys) {\n requiredKeys.forEach(function (key) {\n if (!data[key]) {\n throw new Error(\"Missing \" + key);\n }\n });\n}\n\nNodeScope.prototype.addConnection = function (connectionData) {\n try {\n verifyData(connectionData, [\n \"sourceId\",\n \"sourcePort\",\n \"targetId\",\n \"targetPort\",\n ]);\n } catch (e) {\n throw new Error(\"Error in connection: \" + e.message);\n }\n\n try {\n var sourceNode = this.getNodeWithId(connectionData.sourceId),\n targetNode = this.getNodeWithId(connectionData.targetId);\n\n targetNode.registerInputIfNeeded(connectionData.targetPort);\n sourceNode.registerOutputIfNeeded(connectionData.sourcePort);\n targetNode.connectInput(\n connectionData.targetPort,\n sourceNode,\n connectionData.sourcePort\n );\n } catch (e) {\n console.error(e.message);\n }\n};\n\nNodeScope.prototype.setNodeParameters = function (node, nodeModel) {\n const variant = this.context.variants.getVariant(\n nodeModel.type,\n nodeModel.variant\n );\n\n if (variant) {\n //apply the variant (this will also apply the parameters)\n node.setVariant(variant);\n } else {\n const parameters = nodeModel.parameters;\n\n var inputNames = Object.keys(parameters);\n\n if (this.context.nodeRegister.hasNode(node.name)) {\n var metadata = this.context.nodeRegister.getNodeMetadata(node.name);\n inputNames.sort(function (a, b) {\n var inputA = metadata.inputs[a];\n var inputB = metadata.inputs[b];\n return (\n (inputB ? inputB.inputPriority : 0) -\n (inputA ? inputA.inputPriority : 0)\n );\n });\n }\n\n inputNames.forEach((inputName) => {\n node.registerInputIfNeeded(inputName);\n\n //protect against obsolete parameters\n if (node.hasInput(inputName) === false) {\n return;\n }\n\n node.queueInput(inputName, parameters[inputName]);\n });\n }\n};\n\nNodeScope.prototype.createNodeFromModel = async function (\n nodeModel,\n updateOnDirtyFlagging\n) {\n if (nodeModel.type === \"Component Children\") {\n if (nodeModel.parent) {\n var parentInstance = this.getNodeWithId(nodeModel.parent.id);\n this.componentOwner.setChildRoot(parentInstance);\n }\n return;\n }\n\n var node;\n try {\n node = await this.createNode(nodeModel.type, nodeModel.id);\n node.updateOnDirtyFlagging = updateOnDirtyFlagging === false ? false : true;\n node.setNodeModel(nodeModel);\n } catch (e) {\n console.error(e.message);\n if (\n this.context.editorConnection &&\n this.context.isWarningTypeEnabled(\"nodescope\")\n ) {\n this.context.editorConnection.sendWarning(\n this.componentOwner.name,\n nodeModel.id,\n \"nodelibrary-unknown-node\",\n {\n message: e.message,\n showGlobally: true,\n }\n );\n }\n return;\n }\n\n if (nodeModel.variant && node.setVariant) node.setVariant(nodeModel.variant);\n this.setNodeParameters(node, nodeModel);\n\n if (nodeModel.parent) {\n this.insertNodeInTree(node, nodeModel);\n }\n\n return node;\n};\n\nNodeScope.prototype.insertNodeInTree = function (nodeInstance, nodeModel) {\n var parentInstance = this.getNodeWithId(nodeModel.parent.id);\n var childIndex = nodeModel.parent.children.indexOf(nodeModel);\n\n if (!parentInstance.addChild) {\n throw new Error(\n \"Node \" +\n parentInstance.id +\n \" of type \" +\n parentInstance.constructor.name +\n \" can't have children\"\n );\n }\n\n parentInstance.addChild(nodeInstance, childIndex);\n};\n\nNodeScope.prototype.getNodeWithId = function (id) {\n if (this.nodes.hasOwnProperty(id) === false) {\n throw new Error(\"Unknown node id \" + id);\n }\n return this.nodes[id];\n};\n\nNodeScope.prototype.hasNodeWithId = function (id) {\n return this.nodes.hasOwnProperty(id);\n};\n\nNodeScope.prototype.createPrimitiveNode = function (name, id, extraProps) {\n if (!id) id = guid();\n\n if (this.nodes.hasOwnProperty(id)) {\n throw Error(\"duplicate id \" + id);\n }\n\n const node = this.context.nodeRegister.createNode(name, id, this);\n if (extraProps) {\n for (const prop in extraProps) {\n node[prop] = extraProps[prop];\n }\n }\n\n this.nodes[id] = node;\n return node;\n};\n\nNodeScope.prototype.createNode = async function (name, id, extraProps) {\n if (!id) id = guid();\n\n if (this.nodes.hasOwnProperty(id)) {\n throw Error(\"duplicate id \" + id);\n }\n\n let node;\n\n if (this.context.nodeRegister.hasNode(name)) {\n node = this.context.nodeRegister.createNode(name, id, this);\n if (extraProps) {\n for (const prop in extraProps) {\n node[prop] = extraProps[prop];\n }\n }\n } else {\n node = await this.context.createComponentInstanceNode(\n name,\n id,\n this,\n extraProps\n );\n this.componentInstanceChildren[id] = node;\n }\n\n this.nodes[id] = node;\n return node;\n};\n\nNodeScope.prototype.getNodesWithIdRecursive = function (id) {\n function findNodesWithIdRec(scope, id, result) {\n if (scope.nodes.hasOwnProperty(id)) {\n result.push(scope.nodes[id]);\n }\n\n var componentIds = Object.keys(scope.nodes).filter(function (nodeId) {\n return scope.nodes[nodeId] instanceof ComponentInstanceNode;\n });\n\n componentIds.forEach(function (componentId) {\n findNodesWithIdRec(scope.nodes[componentId].nodeScope, id, result);\n });\n }\n\n var result = [];\n findNodesWithIdRec(this, id, result);\n return result;\n};\n\nNodeScope.prototype.getNodesWithType = function (name) {\n var self = this;\n var ids = Object.keys(this.nodes).filter(function (id) {\n return self.nodes[id].name === name;\n });\n return ids.map(function (id) {\n return self.nodes[id];\n });\n};\n\nNodeScope.prototype.getNodesWithTypeRecursive = function (name) {\n var self = this;\n function findNodesWithTypeRec() {\n result = result.concat(self.getNodesWithType(name));\n\n var componentIds = Object.keys(self.nodes).filter(function (nodeId) {\n return self.nodes[nodeId] instanceof ComponentInstanceNode;\n });\n\n componentIds.forEach(function (componentId) {\n var res =\n self.nodes[componentId].nodeScope.getNodesWithTypeRecursive(name);\n result = result.concat(res);\n });\n }\n\n var result = [];\n findNodesWithTypeRec(result);\n return result;\n};\n\nNodeScope.prototype.getAllNodesRecursive = function () {\n let result = [];\n\n const getAllNodesRec = () => {\n result = result.concat(Object.values(this.nodes));\n\n var componentIds = Object.keys(this.nodes).filter((nodeId) => {\n return this.nodes[nodeId] instanceof ComponentInstanceNode;\n });\n\n componentIds.forEach((componentId) => {\n var res = this.nodes[componentId].nodeScope.getAllNodesRecursive();\n result = result.concat(res);\n });\n };\n\n getAllNodesRec(result);\n return result;\n};\n\nNodeScope.prototype.getAllNodesWithVariantRecursive = function (variant) {\n const nodes = this.getAllNodesRecursive();\n return nodes.filter((node) => node.variant === variant);\n};\n\nNodeScope.prototype.onNodeModelRemoved = function (nodeModel) {\n var nodeInstance = this.getNodeWithId(nodeModel.id);\n\n if (nodeModel.parent) {\n var parentInstance = this.getNodeWithId(nodeModel.parent.id);\n parentInstance.removeChild(nodeInstance);\n }\n\n nodeInstance._onNodeDeleted();\n delete this.nodes[nodeInstance.id];\n delete this.componentInstanceChildren[nodeInstance.id];\n};\n\nNodeScope.prototype.removeConnection = function (connectionModel) {\n var targetNode = this.getNodeWithId(connectionModel.targetId);\n targetNode.removeInputConnection(\n connectionModel.targetPort,\n connectionModel.sourceId,\n connectionModel.sourcePort\n );\n};\n\nNodeScope.prototype.setComponentModel = async function (componentModel) {\n this.componentModel = componentModel;\n\n const nodes = [];\n\n //create all nodes\n for (const nodeModel of componentModel.getAllNodes()) {\n const node = await this.createNodeFromModel(nodeModel, false);\n if (node) nodes.push(node);\n }\n\n componentModel\n .getAllConnections()\n .forEach((conn) => this.addConnection(conn));\n\n //now that all nodes and connections are setup, trigger the dirty flagging so nodes can run with all the connections in place\n nodes.forEach((node) => (node.updateOnDirtyFlagging = true));\n\n nodes.forEach((node) => {\n if (node._dirty) {\n node._performDirtyUpdate();\n }\n });\n\n componentModel.on(\n \"connectionAdded\",\n (conn) => this.addConnection(conn),\n this\n );\n componentModel.on(\"connectionRemoved\", this.removeConnection, this);\n componentModel.on(\"nodeAdded\", this.createNodeFromModel, this);\n\n var self = this;\n componentModel.on(\n \"nodeParentWillBeRemoved\",\n function (nodeModel) {\n if (nodeModel.type === \"Component Children\") {\n if (nodeModel.parent) {\n this.componentOwner.setChildRoot(null);\n }\n return;\n }\n\n const nodeInstance = self.getNodeWithId(nodeModel.id);\n if (nodeInstance.parent) {\n nodeInstance.parent.removeChild(nodeInstance);\n }\n },\n this\n );\n\n componentModel.on(\n \"nodeParentUpdated\",\n function (nodeModel) {\n if (nodeModel.type === \"Component Children\") {\n var parentInstance = this.getNodeWithId(nodeModel.parent.id);\n this.componentOwner.setChildRoot(parentInstance);\n } else {\n var nodeInstance = self.getNodeWithId(nodeModel.id);\n self.insertNodeInTree(nodeInstance, nodeModel);\n }\n },\n this\n );\n\n componentModel.on(\n \"nodeRemoved\",\n function (nodeModel) {\n if (nodeModel.type !== \"Component Children\") {\n self.onNodeModelRemoved(nodeModel);\n }\n },\n this\n );\n\n for (const id in this.nodes) {\n const node = this.nodes[id];\n node.nodeScopeDidInitialize && node.nodeScopeDidInitialize();\n }\n};\n\nNodeScope.prototype.reset = function () {\n if (this.componentModel) {\n this.componentModel.removeListenersWithRef(this);\n this.componentModel = undefined;\n }\n\n Object.keys(this.nodes).forEach((id) => {\n if (this.nodes.hasOwnProperty(id)) {\n this.deleteNode(this.nodes[id]);\n }\n });\n};\n\nNodeScope.prototype.deleteNode = function (nodeInstance) {\n if (this.nodes.hasOwnProperty(nodeInstance.id) === false) {\n console.error(\n \"Node doesn't belong to this scope\",\n nodeInstance.id,\n nodeInstance.name\n );\n return;\n }\n\n if (nodeInstance.parent) {\n nodeInstance.parent.removeChild(nodeInstance);\n }\n\n //depth first\n if (nodeInstance.getChildren) {\n nodeInstance.getChildren().forEach((child) => {\n nodeInstance.removeChild(child);\n //the child might be created in a different scope\n //if the child is a component instance, we want its parent scope, not the inner scope\n const nodeScope = child.parentNodeScope || child.nodeScope;\n nodeScope.deleteNode(child);\n });\n }\n\n if (this.componentModel) {\n const connectionFrom = this.componentModel.getConnectionsFrom(\n nodeInstance.id\n );\n const connectionTo = this.componentModel.getConnectionsTo(nodeInstance.id);\n\n connectionFrom.concat(connectionTo).forEach((connection) => {\n if (\n this.nodes.hasOwnProperty(connection.targetId) &&\n this.nodes.hasOwnProperty(connection.sourceId)\n ) {\n this.removeConnection(connection);\n }\n });\n }\n\n nodeInstance._onNodeDeleted();\n delete this.nodes[nodeInstance.id];\n delete this.componentInstanceChildren[nodeInstance.id]; //in case this is a component\n};\n\nNodeScope.prototype.sendEventFromThisScope = function (\n eventName,\n data,\n propagation,\n sendEventInThisScope,\n _exclude\n) {\n if (sendEventInThisScope) {\n var eventReceivers = this.getNodesWithType(\"Event Receiver\").filter(\n function (eventReceiver) {\n return eventReceiver.getChannelName() === eventName;\n }\n );\n\n for (var i = 0; i < eventReceivers.length; i++) {\n var consumed = eventReceivers[i].handleEvent(data);\n if (consumed) return true;\n }\n }\n\n if (propagation === \"parent\" && this.componentOwner.parentNodeScope) {\n // Send event to parent scope\n //either the scope of the visual parent if there is one, otherwise the parent component\n const parentNodeScope = this.componentOwner.parent\n ? this.componentOwner.parent.nodeScope\n : this.componentOwner.parentNodeScope;\n if (!parentNodeScope) return;\n parentNodeScope.sendEventFromThisScope(eventName, data, propagation, true);\n } else if (propagation === \"children\") {\n // Send event to all child scopes\n var nodes = this.nodes;\n for (var nodeId in nodes) {\n var children = nodes[nodeId].children;\n if (children)\n children.forEach((child) => {\n if (\n child.name &&\n this.context.hasComponentModelWithName(child.name)\n ) {\n // This is a component instance child\n var consumed = child.nodeScope.sendEventFromThisScope(\n eventName,\n data,\n propagation,\n true\n );\n if (consumed) return true;\n }\n });\n }\n } else if (propagation === \"siblings\") {\n // Send event to all siblings, that is all children of the parent scope except this scope\n let parentNodeScope;\n if (this.componentOwner.parent) {\n parentNodeScope = this.componentOwner.parent.nodeScope;\n } else {\n parentNodeScope = this.componentOwner.parentNodeScope;\n }\n\n if (!parentNodeScope) return;\n\n var nodes = parentNodeScope.nodes;\n for (var nodeId in nodes) {\n var children = nodes[nodeId].children;\n if (children) {\n var _c = children.filter(\n (child) =>\n child.name &&\n this.context.hasComponentModelWithName(child.name) &&\n child.nodeScope !== this\n );\n _c.forEach((child) => {\n var consumed = child.nodeScope.sendEventFromThisScope(\n eventName,\n data,\n null,\n true\n );\n if (consumed) return true;\n });\n }\n }\n }\n\n return false;\n};\n\nexport { NodeScope };\n","import { Node } from \"../node\";\nimport { NodeScope } from \"../nodescope\";\n\nlet componentIdCounter = 0;\n\nfunction ComponentInstanceNode(context, id, parentNodeScope) {\n Node.call(this, context, id);\n\n this.nodeScope = new NodeScope(context, this);\n this.parentNodeScope = parentNodeScope;\n this._internal.childRoot = null;\n this._internal.componentOutputValues = {};\n this._internal.componentOutputs = [];\n this._internal.componentInputs = [];\n this._internal.inputValues = {};\n this._internal.roots = [];\n\n this._internal.instanceId = \"__$ndl_componentInstaceId\" + componentIdCounter;\n\n this.nodeScope.modelScope = parentNodeScope\n ? parentNodeScope.modelScope\n : undefined;\n\n componentIdCounter++;\n}\n\nComponentInstanceNode.prototype = Object.create(Node.prototype, {\n setComponentModel: {\n value: async function (componentModel) {\n this.componentModel = componentModel;\n var self = this;\n\n await this.nodeScope.setComponentModel(componentModel);\n\n this._internal.componentInputs =\n this.nodeScope.getNodesWithType(\"Component Inputs\");\n this._internal.componentOutputs =\n this.nodeScope.getNodesWithType(\"Component Outputs\");\n\n Object.values(componentModel.getInputPorts()).forEach(\n this.registerComponentInputPort.bind(this)\n );\n Object.values(componentModel.getOutputPorts()).forEach(\n this.registerComponentOutputPort.bind(this)\n );\n\n const roots = componentModel.roots || [];\n this._internal.roots = roots.map((id) =>\n this.nodeScope.getNodeWithId(id)\n );\n\n componentModel.on(\n \"rootAdded\",\n (id) => {\n this._internal.roots.push(this.nodeScope.getNodeWithId(id));\n this.forceUpdate();\n },\n this\n );\n\n componentModel.on(\n \"rootRemoved\",\n function (id) {\n const index = this._internal.roots.findIndex(\n (root) => root.id === id\n );\n if (index !== -1) {\n this._internal.roots.splice(index, 1);\n }\n this.forceUpdate();\n },\n this\n );\n\n componentModel.on(\n \"inputPortAdded\",\n this.registerComponentInputPort.bind(this),\n this\n );\n componentModel.on(\n \"outputPortAdded\",\n this.registerComponentOutputPort.bind(this),\n this\n );\n\n componentModel.on(\n \"inputPortRemoved\",\n function (port) {\n if (self.hasInput(port.name)) {\n self.deregisterInput(port.name);\n }\n },\n this\n );\n componentModel.on(\n \"outputPortRemoved\",\n function (port) {\n if (this.hasOutput(port.name)) {\n self.deregisterOutput(port.name);\n }\n },\n this\n );\n\n componentModel.on(\n \"nodeAdded\",\n function (node) {\n if (node.type === \"Component Inputs\") {\n self._internal.componentInputs.push(\n self.nodeScope.getNodeWithId(node.id)\n );\n } else if (node.type === \"Component Outputs\") {\n self._internal.componentOutputs.push(\n self.nodeScope.getNodeWithId(node.id)\n );\n }\n },\n this\n );\n\n componentModel.on(\n \"nodeRemoved\",\n function (node) {\n function removeNodesWithId(array, id) {\n return array.filter((e) => e.id !== id);\n }\n if (node.type === \"Component Inputs\") {\n self._internal.componentInputs = removeNodesWithId(\n self._internal.componentInputs,\n node.id\n );\n } else if (node.type === \"Component Outputs\") {\n self._internal.componentOutputs = removeNodesWithId(\n self._internal.componentOutputs,\n node.id\n );\n }\n },\n this\n );\n\n componentModel.on(\n \"renamed\",\n function (event) {\n self.name = event.newName;\n },\n this\n );\n },\n },\n _onNodeDeleted: {\n value() {\n if (this.componentModel) {\n this.componentModel.removeListenersWithRef(this);\n this.componentModel = undefined;\n }\n\n this.nodeScope.reset();\n Node.prototype._onNodeDeleted.call(this);\n },\n },\n registerComponentInputPort: {\n value(port) {\n this.registerInput(port.name, {\n set(value) {\n this._internal.inputValues[port.name] = value;\n this._internal.componentInputs.forEach(function (componentInput) {\n componentInput.registerOutputIfNeeded(port.name);\n componentInput.flagOutputDirty(port.name);\n });\n },\n });\n },\n },\n registerComponentOutputPort: {\n value(port) {\n this.registerOutput(port.name, {\n getter() {\n return this._internal.componentOutputValues[port.name];\n },\n });\n },\n },\n setOutputFromComponentOutput: {\n value(name, value) {\n if (this.hasOutput(name) === false) {\n return;\n }\n\n this._internal.creatorCallbacks &&\n this._internal.creatorCallbacks.onOutputChanged &&\n this._internal.creatorCallbacks.onOutputChanged(\n name,\n value,\n this._internal.componentOutputValues[name]\n );\n\n this._internal.componentOutputValues[name] = value;\n this.flagOutputDirty(name);\n },\n },\n setChildRoot: {\n value(node) {\n const prevChildRoot = this._internal.childRoot;\n const newChildRoot = node;\n\n this._internal.childRoot = newChildRoot;\n\n if (this.model && this.model.children) {\n const parentNodeScope = this.parentNodeScope;\n\n const children = this.model.children\n .filter((child) => child.type !== \"Component Children\")\n .map((child) => parentNodeScope.getNodeWithId(child.id));\n\n if (prevChildRoot) {\n for (let i = 0; i < children.length; i++) {\n if (prevChildRoot.isChild(children[i])) {\n prevChildRoot.removeChild(children[i]);\n }\n }\n }\n\n if (newChildRoot) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const index = child.model.parent.children.indexOf(child.model);\n this.addChild(child, index);\n }\n }\n }\n },\n },\n getChildRootIndex: {\n value() {\n if (\n !this._internal.childRoot ||\n !this._internal.childRoot.model ||\n !this._internal.childRoot.model.children\n ) {\n return 0;\n }\n\n var children = this._internal.childRoot.model.children;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].type === \"Component Children\") {\n return i;\n }\n }\n\n return 0;\n },\n },\n getChildRoot: {\n value() {\n if (this._internal.childRoot) {\n return this._internal.childRoot;\n }\n return null;\n },\n },\n getRoots: {\n value() {\n return this._internal.roots;\n },\n },\n /** Added for SSR Support */\n triggerDidMount: {\n value() {\n this._internal.roots.forEach((root) => {\n root.triggerDidMount && root.triggerDidMount();\n });\n },\n },\n render: {\n value() {\n if (this._internal.roots.length === 0) {\n return null;\n }\n\n return this._internal.roots[0].render();\n },\n },\n setChildIndex: {\n value(childIndex) {\n // NOTE: setChildIndex can be undefined when it is not a React node,\n // but still a visual node like the foreach (Repeater) node.\n this.getRoots().forEach(\n (root) => root.setChildIndex && root.setChildIndex(childIndex)\n );\n },\n },\n addChild: {\n value(child, index) {\n this.getChildRoot().addChild(child, index + this.getChildRootIndex());\n },\n },\n removeChild: {\n value(child) {\n this.getChildRoot().removeChild(child);\n },\n },\n getChildren: {\n value(child) {\n const childRoot = this.getChildRoot();\n return childRoot ? childRoot.getChildren() : [];\n },\n },\n isChild: {\n value(child) {\n if (!this.getChildRoot()) {\n return false;\n }\n\n return this.getChildRoot().isChild(child);\n },\n },\n contains: {\n value(node) {\n return this.getRoots().some(\n (root) => root.contains && root.contains(node)\n );\n },\n },\n _performDirtyUpdate: {\n value() {\n Node.prototype._performDirtyUpdate.call(this);\n\n var componentInputs = this._internal.componentInputs;\n for (var i = 0, len = componentInputs.length; i < len; i++) {\n componentInputs[i].flagDirty();\n }\n\n this._internal.componentOutputs.forEach(function (componentOutput) {\n componentOutput.flagDirty();\n });\n },\n },\n getRef: {\n value() {\n const root = this._internal.roots[0];\n return root ? root.getRef() : undefined;\n },\n },\n update: {\n value() {\n Node.prototype.update.call(this);\n\n this._internal.componentOutputs.forEach(function (componentOutput) {\n componentOutput.update();\n });\n },\n },\n forceUpdate: {\n //this is only used when roots are added or removed\n value() {\n if (!this.parent) return;\n\n //the parent will need to re-render the roots of this component instance\n //TODO: make this use a cleaner API, and only invalidate the affected child, instead of all children\n this.parent.cachedChildren = undefined;\n this.parent.forceUpdate();\n },\n },\n getInstanceId: {\n value() {\n return this._internal.instanceId;\n },\n },\n});\n\nComponentInstanceNode.prototype.constructor = ComponentInstanceNode;\nexport { ComponentInstanceNode };\n","import { EventEmitter } from \"./events\";\nimport { NodeRegister } from \"./noderegister\";\nimport { TimerScheduler } from \"./timerscheduler\";\nimport { Variants } from \"./variants\";\nimport { ComponentInstanceNode } from \"./nodes/componentinstance\";\n\nfunction NodeContext(args) {\n args = args || {};\n args.runningInEditor = args.hasOwnProperty(\"runningInEditor\")\n ? args.runningInEditor\n : false;\n\n this._dirtyNodes = [];\n this.callbacksAfterUpdate = [];\n\n this.graphModel = args.graphModel;\n\n this.platform = args.platform;\n\n this.eventEmitter = new EventEmitter();\n this.eventEmitter.setMaxListeners(1000000);\n\n this.eventSenderEmitter = new EventEmitter(); //used by event senders and receivers\n this.eventSenderEmitter.setMaxListeners(1000000);\n\n this.globalValues = {};\n this.globalsEventEmitter = new EventEmitter();\n this.globalsEventEmitter.setMaxListeners(1000000);\n\n this.runningInEditor = args.runningInEditor;\n this.currentFrameTime = 0;\n this.frameNumber = 0;\n this.updateIteration = 0;\n\n this.nodeRegister = new NodeRegister(this);\n this.timerScheduler = new TimerScheduler(this.scheduleUpdate.bind(this));\n\n this.componentModels = {};\n this.debugInspectorsEnabled = false;\n this.connectionsToPulse = {};\n this.connectionsToPulseChanged = false;\n\n this.debugInspectors = {};\n\n this.connectionPulsingCallbackScheduled = false;\n\n this.editorConnection = args.editorConnection;\n\n this.rootComponent = undefined;\n\n this._outputHistory = {};\n this._signalHistory = {};\n\n this.warningTypes = {}; //default is to send all warning types\n\n this.bundleFetchesInFlight = new Map();\n\n this.variants = new Variants({\n graphModel: this.graphModel,\n getNodeScope: () =>\n this.rootComponent ? this.rootComponent.nodeScope : null,\n });\n\n if (this.editorConnection) {\n this.editorConnection.on(\"debugInspectorsUpdated\", (inspectors) => {\n this.onDebugInspectorsUpdated(inspectors);\n });\n\n this.editorConnection.on(\n \"getConnectionValue\",\n ({ clientId, connectionId }) => {\n if (this.editorConnection.clientId !== clientId) return;\n const connection = this._outputHistory[connectionId];\n this.editorConnection.sendConnectionValue(\n connectionId,\n connection ? connection.value : undefined\n );\n }\n );\n }\n}\n\nNodeContext.prototype.setRootComponent = function (rootComponent) {\n this.rootComponent = rootComponent;\n};\n\nNodeContext.prototype.getCurrentTime = function () {\n return this.platform.getCurrentTime();\n};\n\nNodeContext.prototype.onDebugInspectorsUpdated = function (inspectors) {\n if (!this.debugInspectorsEnabled) return;\n\n inspectors = inspectors.map((inspector) => {\n if (inspector.type === \"connection\") {\n const connection = inspector.connection;\n inspector.id = connection.fromId + connection.fromProperty;\n } else if (inspector.type === \"node\") {\n inspector.id = inspector.nodeId;\n }\n return inspector;\n });\n\n this.debugInspectors = {};\n inspectors.forEach(\n (inspector) => (this.debugInspectors[inspector.id] = inspector)\n );\n\n this.sendDebugInspectorValues();\n};\n\nNodeContext.prototype.updateDirtyNodes = function () {\n var i, len;\n\n var loop = true,\n iterations = 0;\n\n this.updateIteration++;\n\n this.isUpdating = true;\n\n while (loop && iterations < 10) {\n var dirtyNodes = this._dirtyNodes;\n this._dirtyNodes = [];\n for (i = 0, len = dirtyNodes.length; i < len; ++i) {\n try {\n if (!dirtyNodes[i]._deleted) {\n dirtyNodes[i].update();\n }\n } catch (e) {\n console.error(e, e.stack);\n }\n }\n\n //make a new reference and reset array in case new callbacks are scheduled\n //by the current callbacks\n var callbacks = this.callbacksAfterUpdate;\n this.callbacksAfterUpdate = [];\n for (i = 0, len = callbacks.length; i < len; i++) {\n try {\n callbacks[i]();\n } catch (e) {\n console.error(e);\n }\n }\n\n loop = this.callbacksAfterUpdate.length > 0 || this._dirtyNodes.length > 0;\n iterations++;\n }\n\n this.isUpdating = false;\n};\n\nNodeContext.prototype.update = function () {\n this.frameNumber++;\n\n this.updateDirtyNodes();\n\n if (this.timerScheduler.hasPendingTimers()) {\n this.scheduleUpdate();\n this.timerScheduler.runTimers(this.currentFrameTime);\n }\n\n if (this.debugInspectorsEnabled) {\n this.sendDebugInspectorValues();\n }\n};\n\nNodeContext.prototype.reset = function () {\n //removes listeners like device orientation, websockets and more\n this.eventEmitter.emit(\"applicationDataReloaded\");\n\n var eventEmitter = this.eventEmitter;\n [\"frameStart\", \"frameEnd\"].forEach(function (name) {\n eventEmitter.removeAllListeners(name);\n });\n\n this.globalValues = {};\n this._dirtyNodes.length = 0;\n this.callbacksAfterUpdate.length = 0;\n\n this.timerScheduler.runningTimers = [];\n this.timerScheduler.newTimers = [];\n this.rootComponent = undefined;\n\n this.clearDebugInspectors();\n};\n\nNodeContext.prototype.nodeIsDirty = function (node) {\n this._dirtyNodes.push(node);\n this.scheduleUpdate();\n};\n\nNodeContext.prototype.scheduleUpdate = function () {\n this.eventEmitter.emit(\"scheduleUpdate\");\n};\n\nNodeContext.prototype.scheduleAfterUpdate = function (func) {\n this.callbacksAfterUpdate.push(func);\n this.scheduleUpdate();\n};\n\nNodeContext.prototype.scheduleNextFrame = function (func) {\n this.eventEmitter.once(\"frameStart\", func);\n this.scheduleUpdate();\n};\n\nNodeContext.prototype.setGlobalValue = function (name, value) {\n this.globalValues[name] = value;\n this.globalsEventEmitter.emit(name);\n};\n\nNodeContext.prototype.getGlobalValue = function (name) {\n return this.globalValues[name];\n};\n\nNodeContext.prototype.registerComponentModel = function (componentModel) {\n if (this.componentModels.hasOwnProperty(componentModel.name)) {\n throw new Error(\"Duplicate component name \" + componentModel.name);\n }\n this.componentModels[componentModel.name] = componentModel;\n\n var self = this;\n componentModel.on(\n \"renamed\",\n function (event) {\n delete self.componentModels[event.oldName];\n self.componentModels[event.newName] = componentModel;\n },\n this\n );\n};\n\nNodeContext.prototype.deregisterComponentModel = function (componentModel) {\n if (this.componentModels.hasOwnProperty(componentModel.name)) {\n this.componentModels[componentModel.name].removeListenersWithRef(this);\n delete this.componentModels[componentModel.name];\n }\n};\n\nNodeContext.prototype.fetchComponentBundle = async function (name) {\n const fetchBundle = async (name) => {\n let baseUrl = Noodl.Env[\"BaseUrl\"] || \"/\";\n let bundleUrl = `${baseUrl}noodl_bundles/${name}.json`;\n\n const response = await fetch(bundleUrl);\n if (response.status === 404) {\n throw new Error(\"Component not found \" + name);\n }\n\n const data = await response.json();\n for (const component of data) {\n if (this.graphModel.hasComponentWithName(component.name) === false) {\n await this.graphModel.importComponentFromEditorData(component);\n }\n }\n };\n\n if (this.bundleFetchesInFlight.has(name)) {\n await this.bundleFetchesInFlight.get(name);\n } else {\n const promise = fetchBundle(name);\n this.bundleFetchesInFlight.set(name, promise);\n await promise;\n //the promise is kept in bundleFetchesInFlight to mark what bundles have been downloaded\n //so eventual future requests will just await the resolved promise and resolve immediately\n }\n};\n\nNodeContext.prototype.getComponentModel = async function (name) {\n if (!name) {\n throw new Error(\"Component instance must have a name\");\n }\n\n if (this.componentModels.hasOwnProperty(name) === false) {\n const bundleName = this.graphModel.getBundleContainingComponent(name);\n if (!bundleName) {\n throw new Error(\"Can't find component model for \" + name);\n }\n\n //start fetching dependencies in the background\n for (const bundleDep of this.graphModel.getBundleDependencies(bundleName)) {\n this.fetchComponentBundle(bundleDep);\n }\n\n //and wait for the bundle that has the component we need\n await this.fetchComponentBundle(bundleName);\n }\n\n return this.componentModels[name];\n};\n\nNodeContext.prototype.hasComponentModelWithName = function (name) {\n return this.componentModels.hasOwnProperty(name);\n};\n\nNodeContext.prototype.createComponentInstanceNode = async function (\n componentName,\n id,\n nodeScope,\n extraProps\n) {\n var node = new ComponentInstanceNode(this, id, nodeScope);\n node.name = componentName;\n\n for (const prop in extraProps) {\n node[prop] = extraProps[prop];\n }\n\n const componentModel = await this.getComponentModel(componentName);\n await node.setComponentModel(componentModel);\n\n return node;\n};\n\nNodeContext.prototype._formatConnectionValue = function (value) {\n if (\n typeof value === \"object\" &&\n value &&\n value.constructor &&\n value.constructor.name === \"Node\"\n ) {\n value = \"<Node> \" + value.name;\n } else if (\n typeof value === \"object\" &&\n typeof window !== \"undefined\" &&\n value instanceof HTMLElement\n ) {\n value = `DOM Node <${value.tagName}>`;\n } else if (typeof value === \"string\" && !value.startsWith(\"[Signal]\")) {\n return '\"' + value + '\"';\n } else if (Number.isNaN(value)) {\n return \"NaN\";\n }\n\n return value;\n};\n\nNodeContext.prototype.connectionSentValue = function (output, value) {\n if (\n !this.editorConnection ||\n !this.editorConnection.isConnected() ||\n !this.debugInspectorsEnabled\n ) {\n return;\n }\n\n const timestamp = this.getCurrentTime();\n\n this._outputHistory[output.id] = {\n value,\n timestamp,\n };\n\n if (this.connectionsToPulse.hasOwnProperty(output.id)) {\n this.connectionsToPulse[output.id].timestamp = timestamp;\n return;\n }\n\n const connections = [];\n\n output.connections.forEach((connection) => {\n connections.push(\n output.owner.id +\n output.name +\n connection.node.id +\n connection.inputPortName\n );\n });\n\n this.connectionsToPulse[output.id] = {\n timestamp,\n connections: connections,\n };\n\n this.connectionsToPulseChanged = true;\n\n if (this.connectionPulsingCallbackScheduled === false) {\n this.connectionPulsingCallbackScheduled = true;\n setTimeout(this.clearOldConnectionPulsing.bind(this), 100);\n }\n};\n\nNodeContext.prototype.connectionSentSignal = function (output) {\n const id = output.id;\n if (!this._signalHistory.hasOwnProperty(id)) {\n this._signalHistory[id] = {\n count: 0,\n };\n }\n\n this._signalHistory[id].count++;\n\n this.connectionSentValue(\n output,\n \"[Signal] Trigger count \" + this._signalHistory[id].count\n );\n};\n\nNodeContext.prototype.clearDebugInspectors = function () {\n this.debugInspectors = {};\n this.connectionsToPulse = {};\n\n this.editorConnection.sendPulsingConnections(this.connectionsToPulse);\n};\n\nNodeContext.prototype.clearOldConnectionPulsing = function () {\n this.connectionPulsingCallbackScheduled = false;\n\n var now = this.getCurrentTime();\n var self = this;\n\n var connectionIds = Object.keys(this.connectionsToPulse);\n connectionIds.forEach(function (id) {\n var con = self.connectionsToPulse[id];\n if (now - con.timestamp > 100) {\n self.connectionsToPulseChanged = true;\n delete self.connectionsToPulse[id];\n }\n });\n\n if (this.connectionsToPulseChanged) {\n this.connectionsToPulseChanged = false;\n this.editorConnection.sendPulsingConnections(this.connectionsToPulse);\n }\n\n if (Object.keys(this.connectionsToPulse).length > 0) {\n this.connectionPulsingCallbackScheduled = true;\n setTimeout(this.clearOldConnectionPulsing.bind(this), 500);\n }\n};\n\nNodeContext.prototype._getDebugInspectorValueForNode = function (id) {\n if (!this.rootComponent) return;\n const nodes = this.rootComponent.nodeScope.getNodesWithIdRecursive(id);\n const node = nodes[nodes.length - 1];\n\n if (node && node.getInspectInfo) {\n const info = node.getInspectInfo();\n if (info !== undefined) {\n return { type: \"node\", id, value: info };\n }\n }\n};\n\nNodeContext.prototype.sendDebugInspectorValues = function () {\n const valuesToSend = [];\n\n for (const id in this.debugInspectors) {\n const inspector = this.debugInspectors[id];\n\n if (\n inspector.type === \"connection\" &&\n this._outputHistory.hasOwnProperty(id)\n ) {\n const value = this._outputHistory[id].value;\n\n valuesToSend.push({\n type: \"connection\",\n id,\n value: this._formatConnectionValue(value),\n });\n } else if (inspector.type === \"node\") {\n const inspectorValue = this._getDebugInspectorValueForNode(id);\n inspectorValue && valuesToSend.push(inspectorValue);\n }\n }\n\n if (valuesToSend.length > 0) {\n this.editorConnection.sendDebugInspectorValues(valuesToSend);\n }\n\n if (this.connectionsToPulseChanged) {\n this.connectionsToPulseChanged = false;\n this.editorConnection.sendPulsingConnections(this.connectionsToPulse);\n }\n};\n\nNodeContext.prototype.setDebugInspectorsEnabled = function (enabled) {\n this.debugInspectorsEnabled = enabled;\n this.editorConnection.debugInspectorsEnabled = enabled;\n if (enabled) {\n this.sendDebugInspectorValues();\n }\n};\n\nNodeContext.prototype.sendGlobalEventFromEventSender = function (\n channelName,\n inputValues\n) {\n this.eventSenderEmitter.emit(channelName, inputValues);\n};\n\nNodeContext.prototype.setPopupCallbacks = function ({ onShow, onClose }) {\n this.onShowPopup = onShow;\n this.onClosePopup = onClose;\n};\n\n/**\n * @param {string} popupComponent\n * @param {Record<string, unknown>} params\n * @param {{\n * senderNode?: unknown;\n * onClosePopup?: (action?: string, results: object) => void;\n * }} args\n * @returns\n */\nNodeContext.prototype.showPopup = async function (\n popupComponent,\n params,\n args\n) {\n if (!this.onShowPopup) return;\n\n const nodeScope = this.rootComponent.nodeScope;\n\n const popupNode = await nodeScope.createNode(popupComponent);\n for (const inputKey in params) {\n popupNode.setInputValue(inputKey, params[inputKey]);\n }\n\n popupNode.popupParent = args?.senderNode || null;\n\n // Create container group\n const group = nodeScope.createPrimitiveNode(\"Group\");\n group.setInputValue(\"flexDirection\", \"node\");\n group.setInputValue(\"cssClassName\", \"noodl-popup\");\n\n const bodyScroll = this.graphModel.getSettings().bodyScroll;\n\n //if the body can scroll the position of the popup needs to be fixed.\n group.setInputValue(\"position\", bodyScroll ? \"fixed\" : \"absolute\");\n\n var closePopupNodes = popupNode.nodeScope.getNodesWithType(\n \"NavigationClosePopup\"\n );\n if (closePopupNodes && closePopupNodes.length > 0) {\n for (var j = 0; j < closePopupNodes.length; j++) {\n closePopupNodes[j]._setCloseCallback((action, results) => {\n //close next frame so all nodes have a chance to update before being deleted\n this.scheduleNextFrame(() => {\n //avoid double callbacks\n if (!nodeScope.hasNodeWithId(group.id)) return;\n\n this.onClosePopup(group);\n nodeScope.deleteNode(group);\n args && args.onClosePopup && args.onClosePopup(action, results);\n });\n });\n }\n }\n\n this.onShowPopup(group);\n\n requestAnimationFrame(() => {\n //hack to make the react components have the right props\n //TODO: figure out why this requestAnimationFrame is necessary\n group.addChild(popupNode);\n });\n};\n\nNodeContext.prototype.setWarningTypes = function (warningTypes) {\n Object.assign(this.warningTypes, warningTypes);\n};\n\nNodeContext.prototype.isWarningTypeEnabled = function (warning) {\n if (!this.warningTypes.hasOwnProperty(warning)) {\n //if a level isn't set, default to true\n return true;\n }\n\n return this.warningTypes[warning] ? true : false;\n};\n\nNodeContext.prototype.getDefaultValueForInput = function (nodeType, inputName) {\n if (this.nodeRegister.hasNode(nodeType) === false) {\n return undefined;\n }\n\n const nodeMetadata = this.nodeRegister.getNodeMetadata(nodeType);\n const inputMetadata = nodeMetadata.inputs[inputName];\n\n if (!inputMetadata) {\n return undefined;\n }\n\n if (inputMetadata.type.defaultUnit) {\n return {\n value: inputMetadata.default,\n unit: inputMetadata.type.defaultUnit,\n };\n }\n\n return inputMetadata.default;\n};\n\nexport { NodeContext };\n","function EventSender() {\n this.listeners = {};\n this.listenersWithRefs = {};\n}\n\nEventSender.prototype.on = function (eventName, callback, ref) {\n if (ref) {\n if (!this.listenersWithRefs.hasOwnProperty(eventName)) {\n this.listenersWithRefs[eventName] = new Map();\n }\n\n if (!this.listenersWithRefs[eventName].get(ref)) {\n this.listenersWithRefs[eventName].set(ref, []);\n }\n\n this.listenersWithRefs[eventName].get(ref).push(callback);\n } else {\n if (!this.listeners.hasOwnProperty(eventName)) {\n this.listeners[eventName] = [];\n }\n\n this.listeners[eventName].push(callback);\n }\n};\n\nEventSender.prototype.removeListenersWithRef = function (ref) {\n Object.keys(this.listenersWithRefs).forEach((eventName) => {\n const listeners = this.listenersWithRefs[eventName];\n if (listeners.has(ref)) {\n listeners.delete(ref);\n }\n });\n};\n\nEventSender.prototype.removeAllListeners = function (eventName) {\n if (eventName) {\n delete this.listeners[eventName];\n delete this.listenersWithRefs[eventName];\n } else {\n this.listeners = {};\n this.listenersWithRefs = {};\n }\n};\n\nEventSender.prototype.emit = async function (eventName, data) {\n const array = this.listeners[eventName];\n\n if (array) {\n for (let i = 0; i < array.length; i++) {\n const callback = array[i];\n await Promise.resolve(callback.call(null, data));\n }\n }\n\n const map = this.listenersWithRefs[eventName];\n\n if (map) {\n for (const [ref, callbacks] of map) {\n for (const callback of callbacks) {\n await Promise.resolve(callback.call(ref, data));\n }\n }\n }\n};\n\nexport { EventSender };\n","import { EventEmitter } from \"../events\";\n\nfunction Services() {}\n\nServices.events = new EventEmitter();\n\nexport { Services };\n","//used to optimize warnings so we're not sending unneccessary warnings.\n//Improves editor performance, especially in larger projects\n\nexport class ActiveWarnings {\n constructor() {\n this.currentWarnings = new Map();\n }\n\n setWarning(nodeId, key, warning) {\n //Check if we've already sent this warning\n if (this.currentWarnings.has(nodeId)) {\n //we have sent warnings to this node before, check if we've sent this particular one before\n const warningKeys = this.currentWarnings.get(nodeId);\n if (warningKeys[key] === warning) {\n //we've already sent this warning, no need to send it again\n return false;\n }\n\n //new warning, remember that we sent it\n warningKeys[key] = warning;\n return true;\n } else {\n //new warning, we havent sent any warnings to this node before\n //Remember that we sent it\n this.currentWarnings.set(nodeId, { [key]: warning });\n return true;\n }\n }\n\n clearWarning(nodeId, key) {\n const warningKeys = this.currentWarnings.get(nodeId);\n\n if (!warningKeys || !warningKeys[key]) {\n //There are no warnings that we've sent on this node.\n //Save some performance by not sending an uneccesary message to the editor\n return false;\n }\n\n delete warningKeys[key];\n if (Object.keys(warningKeys).length === 0) {\n delete this.currentWarnings.delete(nodeId);\n }\n\n return true;\n }\n\n clearWarnings(nodeId) {\n if (this.currentWarnings.has(nodeId) === false) {\n //no warnings on this node, save some performance by not sending a message to the editor\n return false;\n }\n\n //no warnings for this node anymore\n this.currentWarnings.delete(nodeId);\n return true;\n }\n}\n","import { EventSender } from \"./eventsender\";\nimport { Services } from \"./services/services\";\nimport { guid } from \"./guid\";\nimport { ActiveWarnings } from \"./editorconnection.activewarnings\";\n\nfunction EditorConnection(opts) {\n var _opts = opts || {};\n\n EventSender.call(this);\n\n this.runtimeType = _opts.runtimeType;\n this.platform = _opts.platform;\n this.ws =\n (_opts.platform && _opts.platform.webSocketClass) ||\n (typeof WebSocket !== \"undefined\" ? WebSocket : undefined);\n this.wsOptions =\n (_opts.platform && _opts.platform.webSocketOptions) || undefined;\n this.reconnectOnClose = true;\n this.enableDebugger = false;\n\n this.lastSendTimestamp = 0;\n this.sendQueue = [];\n this.sendTimer = undefined;\n\n //used to optimize warnings so we're not sending unneccessary warnings.\n //Clan slow down the editor in large projects\n this.activeWarnings = new ActiveWarnings();\n}\n\nEditorConnection.prototype = Object.create(EventSender.prototype);\nEditorConnection.prototype.constructor = EditorConnection;\n\nEditorConnection.prototype.isRunningLocally = function () {\n var runningLocallyInBrowser =\n (this.platform.isRunningLocally && this.platform.isRunningLocally()) ||\n (typeof document !== \"undefined\" &&\n (document.location.hostname === \"localhost\" ||\n document.location.hostname === \"127.0.0.1\"));\n return runningLocallyInBrowser;\n};\n\nEditorConnection.prototype.connect = function (address) {\n this.socket = this.wsOptions\n ? new this.ws(address, this.wsOptions)\n : new this.ws(address);\n\n var self = this;\n\n this.socket.addEventListener(\"open\", function () {\n self.clientId = guid();\n self.socket.send(\n JSON.stringify({\n cmd: \"register\",\n type: \"viewer\",\n clientId: self.clientId,\n })\n );\n self.emit(\"connected\");\n });\n\n this.socket.addEventListener(\"close\", function (event) {\n if (self.reconnectOnClose) {\n self.reconnect(address);\n }\n console.log(\"Editor connection closed\", event.code, event.reason);\n self.emit(\"connectionClosed\");\n });\n\n this.socket.addEventListener(\"error\", function (evt) {\n console.log(\"Editor connection error, trying to reconnect\");\n });\n\n this.socket.addEventListener(\"message\", async (e) => {\n // NOTE: When the data is too big it seems to change from string to a blob\n const text = typeof e.data === \"string\" ? e.data : await e.data.text();\n const message = JSON.parse(text);\n\n let content;\n\n if (message.cmd === \"registered\") {\n //ignore\n } else if (message.cmd === \"export\") {\n content = JSON.parse(message.content);\n if (message.type === \"full\" && message.target === this.clientId) {\n self.emit(\"exportDataFull\", content);\n }\n } else if (message.cmd === \"hoverStart\") {\n self.emit(\"hoverStart\", message.content.id);\n } else if (message.cmd === \"hoverEnd\") {\n self.emit(\"hoverEnd\", message.content.id);\n } else if (message.cmd === \"refresh\") {\n self.emit(\"reload\");\n } else if (message.cmd === \"debugInspectors\") {\n if (this.debugInspectorsEnabled) {\n content = JSON.parse(message.content);\n self.emit(\"debugInspectorsUpdated\", content.inspectors);\n }\n } else if (message.cmd === \"debuggingEnabled\") {\n if (self.isRunningLocally()) {\n content = JSON.parse(message.content);\n self.emit(\"debuggingEnabledChanged\", content.enabled);\n }\n } else if (message.cmd === \"getConnectionValue\") {\n if (self.isRunningLocally()) {\n content = JSON.parse(message.content);\n await self.emit(\"getConnectionValue\", {\n clientId: content.clientId,\n connectionId: content.connectionId,\n });\n }\n } else if (message.cmd === \"modelUpdate\") {\n await self.emit(\"modelUpdate\", message.content);\n } else if (message.cmd === \"publish\") {\n Services.pubsub.routeMessage(message); // Publish a message from the pubsub service\n } else if (message.cmd === \"noodlModules\") {\n self.emit(\"noodlModules\", JSON.parse(message.content));\n } else if (message.cmd === \"mqttUpdate\") {\n self.emit(\"mqttUpdate\", message.content);\n } else if (message.cmd === \"activeComponentChanged\") {\n self.emit(\"activeComponentChanged\", message.component);\n } else {\n console.log(\"Command not implemented\", message);\n }\n });\n};\n\nEditorConnection.prototype.reconnect = function (address) {\n var self = this;\n\n setTimeout(function () {\n self.connect(address);\n }, 2000);\n};\n\nEditorConnection.prototype.isConnected = function () {\n return this.socket !== undefined && this.socket.readyState === this.ws.OPEN;\n};\n\n//JSON replacer to make cyclic objects non-cyclic.\n//Using this example: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value#examples\nconst getCircularReplacer = () => {\n const seen = new WeakSet();\n return (key, value) => {\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) {\n return \"[Circular]\";\n }\n seen.add(value);\n }\n return value;\n };\n};\n\nEditorConnection.prototype.send = function (data) {\n const now = this.platform.getCurrentTime();\n const dt = now - this.lastSendTimestamp;\n\n //Send objects as json and capture exceptions\n const trySend = (msg) => {\n try {\n this.socket.send(JSON.stringify(msg));\n } catch (e) {\n if (e.message && e.message.startsWith(\"Converting circular\")) {\n //the object is circular, try to address it\n try {\n this.socket.send(JSON.stringify(msg, getCircularReplacer()));\n } catch (e) {\n //still failed, give up\n console.log(\"failed to send message to editor\", msg, e);\n }\n } else {\n //message couldn't be serialized to json\n console.log(\"failed to send message to editor\", msg, e);\n }\n }\n };\n\n //batch messages so they're only sent at most every 200ms\n //note that the first message will always be sent immediately, and the ones for 200ms after\n //that one will be queued. So initial message response time is as low as possible (for hover etc)\n if (dt < 200 || this.sendTimer || !this.isConnected()) {\n this.sendQueue.push(data);\n if (!this.sendTimer) {\n this.sendTimer = setTimeout(() => {\n if (this.isConnected() === false) {\n return;\n }\n\n //send messages in chunks. If we send too many at once the editor UI can freeze for a while\n //since it's handling these in the renderer process\n const chunkSize = 50;\n for (let i = 0; i < this.sendQueue.length; i += chunkSize) {\n const chunk = this.sendQueue.slice(i, i + chunkSize);\n trySend(chunk);\n }\n\n this.sendQueue = [];\n this.sendTimer = undefined;\n this.lastSendTimestamp = this.platform.getCurrentTime();\n }, 100);\n }\n } else {\n this.lastSendTimestamp = now;\n trySend(data);\n }\n};\n\nEditorConnection.prototype.sendInspectId = function (id) {\n this.send({\n cmd: \"select\",\n type: \"viewer\",\n content: JSON.stringify({ id: id }),\n });\n};\n\nEditorConnection.prototype.sendSelectComponent = function (componentName) {\n this.send({\n cmd: \"select\",\n type: \"viewer\",\n content: JSON.stringify({ componentName }),\n });\n};\n\nEditorConnection.prototype.sendPulsingConnections = function (connectionMap) {\n var connectionsToPulse = [];\n Object.keys(connectionMap).forEach(function (c) {\n var connection = connectionMap[c];\n connectionsToPulse = connectionsToPulse.concat(connection.connections);\n });\n\n this.send({\n cmd: \"connectiondebugpulse\",\n type: \"viewer\",\n content: JSON.stringify({\n connectionsToPulse: connectionsToPulse,\n }),\n });\n};\n\nEditorConnection.prototype.sendDebugInspectorValues = function (inspectors) {\n this.send({\n cmd: \"debuginspectorvalues\",\n type: \"viewer\",\n content: { inspectors },\n });\n};\n\nEditorConnection.prototype.sendConnectionValue = function (\n connectionId,\n value\n) {\n this.send({\n cmd: \"connectionValue\",\n type: \"viewer\",\n content: { connectionId, value },\n });\n};\n\nconst dynamicPortsHash = {};\n\nfunction _detectRename(before, after) {\n if (!before || !after) return;\n\n if (before.length !== after.length) return; // Must be of same length\n\n var res = {};\n for (var i = 0; i < before.length; i++) {\n if (after.indexOf(before[i]) === -1) {\n if (res.before) return; // Can only be one from before that is missing\n res.before = before[i];\n }\n\n if (before.indexOf(after[i]) === -1) {\n if (res.after) return; // Only one can be missing,otherwise we cannot match\n res.after = after[i];\n }\n }\n\n return res.before && res.after ? res : undefined;\n}\n\nEditorConnection.prototype.sendDynamicPorts = function (id, ports, options) {\n var hash = JSON.stringify(ports);\n if (dynamicPortsHash[id] === hash) {\n // Make sure we don't resend the same port data\n return;\n }\n\n if (dynamicPortsHash[id] && ports && options && options.detectRenamed) {\n var detectRenamed = Array.isArray(options.detectRenamed)\n ? options.detectRenamed\n : [options.detectRenamed];\n\n var renamed = [];\n detectRenamed.forEach((d) => {\n var before = JSON.parse(dynamicPortsHash[id]),\n after = [].concat(ports);\n\n // Filter ports with correct prefix and plug\n if (d.prefix) {\n before = before.filter((p) => p.name.startsWith(d.prefix));\n after = after.filter((p) => p.name.startsWith(d.prefix));\n }\n\n if (d.plug) {\n before = before.filter((p) => p.plug === d.plug);\n after = after.filter((p) => p.plug === d.plug);\n }\n\n // Remove the prefix\n after = after.map((p) => p.name.substring((d.prefix || \"\").length));\n before = before.map((p) => p.name.substring((d.prefix || \"\").length));\n\n // Find the one that is renamed (if any)\n var res = _detectRename(before, after);\n if (res) {\n renamed.push({\n plug: d.plug,\n patterns: [(d.prefix || \"\") + \"{{*}}\"],\n before: res.before,\n after: res.after,\n });\n }\n });\n if (renamed.length > 0) options.renamed = renamed;\n\n delete options.detectRenamed;\n }\n\n dynamicPortsHash[id] = hash;\n\n this.send({\n cmd: \"instanceports\",\n type: \"viewer\",\n content: JSON.stringify({\n nodeid: id,\n ports: ports,\n options: options,\n }),\n });\n};\n\nEditorConnection.prototype.sendWarning = function (\n componentName,\n nodeId,\n key,\n warning\n) {\n const isNewWarning = this.activeWarnings.setWarning(nodeId, key, warning);\n\n if (isNewWarning) {\n this.send({\n cmd: \"showwarning\",\n type: \"viewer\",\n content: JSON.stringify({\n componentName: componentName,\n nodeId: nodeId,\n key: key,\n warning: warning,\n }),\n });\n }\n};\n\nEditorConnection.prototype.clearWarning = function (\n componentName,\n nodeId,\n key\n) {\n const hasWarning = this.activeWarnings.clearWarning(nodeId, key);\n\n if (hasWarning) {\n this.send({\n cmd: \"showwarning\",\n type: \"viewer\",\n content: JSON.stringify({\n componentName: componentName,\n nodeId: nodeId,\n key: key,\n warning: undefined,\n }),\n });\n }\n};\n\nEditorConnection.prototype.clearWarnings = function (componentName, nodeId) {\n const hasWarnings = this.activeWarnings.clearWarnings(nodeId);\n\n if (hasWarnings) {\n this.send({\n cmd: \"clearwarnings\",\n type: \"viewer\",\n content: JSON.stringify({\n componentName: componentName,\n nodeId: nodeId,\n }),\n });\n }\n};\n\nEditorConnection.prototype.sendPatches = function (patches) {\n this.send({\n cmd: \"patchproject\",\n type: \"viewer\",\n content: JSON.stringify(patches),\n });\n};\n\nEditorConnection.prototype.requestFullExport = function () {\n this.send({\n cmd: \"register\",\n type: \"viewer\",\n });\n};\n\nEditorConnection.prototype.requestNoodlModules = function () {\n this.send({\n cmd: \"getNoodlModules\",\n type: \"viewer\",\n });\n};\n\nvar serviceRequests = {};\nEditorConnection.prototype.sendServiceRequest = function (request, callback) {\n request.token = guid();\n request.clientId = this.clientId;\n serviceRequests[request.token] = callback;\n this.send(request);\n};\n\nEditorConnection.prototype.close = function () {\n this.reconnectOnClose = false;\n\n if (this.isConnected() === false) {\n return;\n }\n\n this.socket.close();\n};\n\nEditorConnection.prototype.sendNodeLibrary = function (nodelibrary) {\n this.send({\n cmd: \"nodelibrary\",\n type: \"viewer\",\n runtimeType: this.runtimeType,\n content: nodelibrary,\n clientId: this.clientId,\n });\n};\n\nEditorConnection.prototype.sendComponentMetadata = function (\n componentName,\n key,\n data\n) {\n this.send({\n cmd: \"componentMetadata\",\n type: \"viewer\",\n content: JSON.stringify({\n componentName,\n key,\n data,\n }),\n });\n};\n\nEditorConnection.prototype.sendProjectMetadata = function (key, data) {\n this.send({\n cmd: \"projectMetadata\",\n type: \"viewer\",\n content: JSON.stringify({\n key,\n data,\n }),\n });\n};\n\nexport { EditorConnection };\n","function formatDynamicPorts(nodeMetadata) {\n const dynamicports = [];\n\n for (const dp of nodeMetadata.dynamicports) {\n if (dp.ports || dp.template || dp.port || dp.channelPort) {\n //same format as editor expects, no need to transform it\n dynamicports.push(dp);\n } else if (dp.inputs || dp.outputs) {\n //inputs and outputs is just list of names\n //need to pull the metadata from the inputs/outputs since they\n //won't be registered by the editor (it's either a regular port\n // or a dynamic port, can't register both)\n const ports = [];\n\n if (dp.inputs) {\n for (const inputName of dp.inputs) {\n ports.push(\n formatPort(inputName, nodeMetadata.inputs[inputName], \"input\")\n );\n }\n }\n\n if (dp.outputs) {\n for (const outputName of dp.outputs) {\n ports.push(\n formatPort(outputName, nodeMetadata.outputs[outputName], \"output\")\n );\n }\n }\n\n const dynamicPortGroup = {\n name: dp.name || \"conditionalports/basic\",\n condition: dp.condition,\n ports,\n };\n\n dynamicports.push(dynamicPortGroup);\n }\n }\n\n return dynamicports;\n}\n\nfunction formatPort(portName, portData, plugType) {\n var port = {\n name: portName,\n type: portData.type,\n plug: plugType,\n };\n if (portData.group) {\n port.group = portData.group;\n }\n if (portData.displayName) {\n port.displayName = portData.displayName;\n }\n if (portData.description) {\n port.description = portData.description;\n }\n if (portData.editorName) {\n port.editorName = portData.editorName;\n }\n if (portData.default !== undefined) {\n port.default = portData.default;\n }\n if (portData.hasOwnProperty(\"index\")) {\n port.index = portData.index;\n }\n if (portData.tooltip) {\n port.tooltip = portData.tooltip;\n }\n if (portData.tab) {\n port.tab = portData.tab;\n }\n if (portData.popout) {\n port.popout = portData.popout;\n }\n if (portData.allowVisualStates) {\n port.allowVisualStates = portData.allowVisualStates;\n }\n return port;\n}\n\nfunction generateNodeLibrary(nodeRegister) {\n var obj = {\n //note: needs to include ALL types\n typecasts: [\n {\n from: \"string\",\n to: [\n \"number\",\n \"boolean\",\n \"image\",\n \"color\",\n \"enum\",\n \"textStyle\",\n \"dimension\",\n \"array\",\n \"object\",\n ],\n },\n {\n from: \"boolean\",\n to: [\"number\", \"string\", \"signal\"],\n },\n {\n from: \"number\",\n to: [\"boolean\", \"string\", \"dimension\"],\n },\n {\n from: \"date\",\n to: [\"string\"],\n },\n {\n from: \"signal\",\n to: [\"boolean\", \"number\"],\n },\n {\n from: \"image\",\n to: [],\n },\n {\n from: \"cloudfile\",\n to: [\"string\", \"image\"],\n },\n {\n from: \"color\",\n to: [],\n },\n {\n from: \"enum\",\n to: [],\n },\n {\n from: \"object\",\n to: [],\n },\n {\n from: \"domelement\",\n to: [],\n },\n {\n from: \"reference\",\n to: [],\n },\n {\n from: \"font\",\n to: [],\n },\n {\n from: \"textStyle\",\n to: [\"string\"],\n },\n {\n // Collection is deprecated but supported via typecasts\n from: \"collection\",\n to: [\"array\"],\n },\n {\n from: \"array\",\n to: [\"collection\"],\n },\n ],\n dynamicports: [\n {\n type: \"conditionalports\",\n name: \"basic\",\n },\n {\n type: \"expand\",\n name: \"basic\",\n },\n ],\n colors: {\n nodes: {\n component: {\n base: \"#643D8B\",\n baseHighlighted: \"#79559b\",\n header: \"#4E2877\",\n headerHighlighted: \"#643d8b\",\n outline: \"#4E2877\",\n outlineHighlighted: \"#b58900\",\n text: \"#dbd0e4\",\n },\n visual: {\n base: \"#315272\",\n baseHighlighted: \"#4d6784\",\n header: \"#173E5D\",\n headerHighlighted: \"#315272\",\n outline: \"#173E5D\",\n outlineHighlighted: \"#b58900\",\n text: \"#cfd5de\",\n },\n data: {\n base: \"#465524\",\n baseHighlighted: \"#5b6a37\",\n header: \"#314110\",\n headerHighlighted: \"#465524\",\n outline: \"#314110\",\n outlineHighlighted: \"#b58900\",\n text: \"#d2d6c5\",\n },\n javascript: {\n base: \"#7E3660\",\n baseHighlighted: \"#944e74\",\n header: \"#67214B\",\n headerHighlighted: \"#7e3660\",\n outline: \"#67214B\",\n outlineHighlighted: \"#d57bab\",\n text: \"#e4cfd9\",\n },\n default: {\n base: \"#4C4F59\",\n baseHighlighted: \"#62656e\",\n header: \"#373B45\",\n headerHighlighted: \"#4c4f59\",\n outline: \"#373B45\",\n outlineHighlighted: \"#b58900\",\n text: \"#d3d4d6\",\n },\n },\n connections: {\n signal: {\n normal: \"#006f82\",\n highlighted: \"#7ec2cf\",\n pulsing: \"#ffffff\",\n },\n default: {\n normal: \"#875d00\",\n highlighted: \"#e5ae32\",\n pulsing: \"#ffffff\",\n },\n },\n },\n nodetypes: [\n {\n name: \"Component Children\",\n shortDesc:\n \"This node is a placeholder for where children of this component will be inserted.\",\n docs: \"https://docs.noodl.net/nodes/component-utilities/component-children\",\n color: \"component\",\n allowAsChild: true,\n category: \"Visual\",\n haveComponentChildren: [\"Visual\"],\n },\n ],\n };\n\n var nodeTypes = Object.keys(nodeRegister._constructors);\n\n nodeTypes.forEach(function (type) {\n var nodeMetadata = nodeRegister._constructors[type].metadata;\n\n var nodeObj = {\n name: type,\n searchTags: nodeMetadata.searchTags,\n };\n obj.nodetypes.push(nodeObj);\n\n if (nodeMetadata.version) {\n nodeObj.version = nodeMetadata.version;\n }\n if (nodeMetadata.displayNodeName) {\n nodeObj.displayNodeName = nodeMetadata.displayNodeName;\n }\n if (nodeMetadata.nodeDoubleClickAction) {\n nodeObj.nodeDoubleClickAction = nodeMetadata.nodeDoubleClickAction;\n }\n if (nodeMetadata.shortDesc) {\n nodeObj.shortDesc = nodeMetadata.shortDesc;\n }\n if (nodeMetadata.module) {\n nodeObj.module = nodeMetadata.module;\n }\n if (nodeMetadata.deprecated) {\n nodeObj.deprecated = true;\n }\n if (nodeMetadata.haveComponentPorts) {\n nodeObj.haveComponentPorts = true;\n }\n if (nodeMetadata.category === \"Visual\") {\n nodeObj.allowAsChild = true;\n nodeObj.allowAsExportRoot = true;\n nodeObj.color = \"visual\";\n }\n\n if (nodeMetadata.allowAsExportRoot !== undefined) {\n nodeObj.allowAsExportRoot = nodeMetadata.allowAsExportRoot;\n }\n\n if (nodeMetadata.allowChildren) {\n nodeObj.allowChildrenWithCategory = [\"Visual\"];\n nodeObj.color = \"visual\";\n }\n if (nodeMetadata.allowChildrenWithCategory) {\n nodeObj.allowChildrenWithCategory =\n nodeMetadata.allowChildrenWithCategory;\n }\n if (nodeMetadata.singleton) {\n nodeObj.singleton = true;\n }\n if (nodeMetadata.allowAsChild) {\n nodeObj.allowAsChild = true;\n }\n if (nodeMetadata.docs) {\n nodeObj.docs = nodeMetadata.docs;\n }\n if (nodeMetadata.shortDocs) {\n nodeObj.shortDocs = nodeMetadata.shortDocs;\n } else if (\n nodeMetadata.docs &&\n nodeMetadata.docs.indexOf(\"https://docs.noodl.net\") === 0\n ) {\n nodeObj.shortDocs = nodeMetadata.docs.replace(\"/#\", \"\") + \"-short.md\";\n }\n nodeObj.category = nodeMetadata.category;\n\n if (nodeMetadata.panels) {\n nodeObj.panels = nodeMetadata.panels;\n }\n if (nodeMetadata.usePortAsLabel) {\n nodeObj.usePortAsLabel = nodeMetadata.usePortAsLabel;\n nodeObj.portLabelTruncationMode = nodeMetadata.portLabelTruncationMode;\n }\n if (nodeMetadata.color) {\n nodeObj.color = nodeMetadata.color;\n }\n if (nodeMetadata.dynamicports) {\n nodeObj.dynamicports = formatDynamicPorts(nodeMetadata);\n }\n if (nodeMetadata.exportDynamicPorts) {\n nodeObj.exportDynamicPorts = nodeMetadata.exportDynamicPorts;\n }\n if (nodeMetadata.visualStates) {\n nodeObj.visualStates = nodeMetadata.visualStates;\n }\n if (nodeMetadata.useVariants) {\n nodeObj.useVariants = nodeMetadata.useVariants;\n }\n if (nodeMetadata.connectionPanel) {\n nodeObj.connectionPanel = nodeMetadata.connectionPanel;\n }\n nodeObj.ports = [];\n\n var dynamicports = nodeObj.dynamicports || [];\n var selectorNames = {};\n var conditionalPortNames = {};\n\n //flag conditional ports so they don't get added from the normal ports, making them appear twice in the export\n /* dynamicports.filter(d=> d.name === 'conditionalports/basic')\n .forEach(d=> {\n d.ports.forEach(port=> {\n conditionalPortNames[port.plug + '/' + port.name] = true;\n });\n });*/\n\n //same for channel ports\n dynamicports\n .filter((d) => d.channelPort !== undefined)\n .forEach((port) => {\n conditionalPortNames[\n port.channelPort.plug + \"/\" + port.channelPort.name\n ] = true;\n });\n\n if (dynamicports.length) {\n nodeObj.dynamicports = dynamicports;\n }\n\n Object.keys(nodeMetadata.inputs).forEach(function (inputName) {\n if (\n selectorNames.hasOwnProperty(\"input/\" + inputName) ||\n conditionalPortNames.hasOwnProperty(\"input/\" + inputName)\n ) {\n //this is a selector or dynamic port. It's already been registered\n return;\n }\n var port = nodeMetadata.inputs[inputName];\n if (port.exportToEditor === false) {\n return;\n }\n\n nodeObj.ports.push(formatPort(inputName, port, \"input\"));\n });\n\n function exportOutput(name, output) {\n var port = {\n name: name,\n type: output.type,\n plug: \"output\",\n };\n if (output.group) {\n port.group = output.group;\n }\n if (output.displayName) {\n port.displayName = output.displayName;\n }\n if (output.editorName) {\n port.editorName = output.editorName;\n }\n if (output.hasOwnProperty(\"index\")) {\n port.index = output.index;\n }\n nodeObj.ports.push(port);\n }\n\n Object.keys(nodeMetadata.outputs).forEach(function (prop) {\n if (\n selectorNames.hasOwnProperty(\"output/\" + prop) ||\n conditionalPortNames.hasOwnProperty(\"output/\" + prop)\n ) {\n //this is a selector or dynamic port. It's already been registered\n return;\n }\n\n var output = nodeMetadata.outputs[prop];\n exportOutput(prop, output);\n });\n });\n\n const coreNodes = [\n {\n name: \"UI Elements\",\n description: \"Buttons, inputs, containers, media\",\n type: \"visual\",\n subCategories: [\n {\n name: \"Basic Elements\",\n items: [\n \"Group\",\n \"net.noodl.visual.columns\",\n \"Text\",\n \"Image\",\n \"Video\",\n \"Circle\",\n \"net.noodl.visual.icon\",\n ],\n },\n {\n name: \"UI Controls\",\n items: [\n \"net.noodl.controls.button\",\n \"net.noodl.controls.checkbox\",\n \"net.noodl.controls.options\",\n \"net.noodl.controls.radiobutton\",\n \"Radio Button Group\",\n \"net.noodl.controls.range\",\n \"net.noodl.controls.textinput\",\n ],\n },\n ],\n },\n {\n name: \"Navigation & Popups\",\n description: \"Page routing, navigation, popups\",\n type: \"logic\",\n subCategories: [\n {\n name: \"Navigation\",\n items: [\n \"Router\",\n \"RouterNavigate\",\n \"PageInputs\",\n \"net.noodl.externallink\",\n \"PageStackNavigateToPath\",\n ],\n },\n {\n name: \"Component Stack\",\n items: [\"Page Stack\", \"PageStackNavigate\", \"PageStackNavigateBack\"],\n },\n {\n name: \"Popups\",\n items: [\"NavigationShowPopup\", \"NavigationClosePopup\"],\n },\n ],\n },\n {\n name: \"Logic & Utilities\",\n description: \"Logic, events, string manipulation\",\n type: \"logic\",\n subCategories: [\n {\n name: \"General Utils\",\n items: [\n \"States\",\n \"Value Changed\",\n \"Timer\",\n \"Color Blend\",\n \"Number Remapper\",\n \"Counter\",\n \"Drag\",\n \"net.noodl.animatetovalue\",\n ],\n },\n {\n name: \"Logic\",\n items: [\n \"Boolean To String\",\n \"Switch\",\n \"And\",\n \"Or\",\n \"Condition\",\n \"Inverter\",\n ],\n },\n {\n name: \"Events\",\n items: [\"Event Sender\", \"Event Receiver\"],\n },\n {\n name: \"String Manipulation\",\n items: [\n \"Substring\",\n \"String Mapper\",\n \"String Format\",\n \"Date To String\",\n \"Unique Id\",\n ],\n },\n {\n name: \"System\",\n items: [\"Screen Resolution\", \"Open File Picker\"],\n },\n {\n name: \"Variables\",\n items: [\"String\", \"Boolean\", \"Color\", \"Number\"],\n },\n ],\n },\n {\n name: \"Component Utilities\",\n description: \"Component inputs, outputs & object\",\n type: \"component\",\n subCategories: [\n {\n name: \"\",\n items: [\n \"Component Inputs\",\n \"Component Outputs\",\n \"Component Children\",\n \"net.noodl.ComponentObject\",\n \"net.noodl.ParentComponentObject\",\n \"net.noodl.SetComponentObjectProperties\",\n \"net.noodl.SetParentComponentObjectProperties\",\n ],\n },\n ],\n },\n {\n name: \"Read & Write Data\",\n description: \"Arrays, objects, cloud data\",\n type: \"data\",\n subCategories: [\n {\n name: \"\",\n items: [\n \"RunTasks\",\n \"For Each\",\n \"For Each Actions\",\n \"Model2\",\n \"SetModelProperties\",\n \"NewModel\",\n \"Set Variable\",\n \"Variable2\",\n ],\n },\n {\n name: \"Array\",\n items: [\n \"Collection2\",\n \"CollectionNew\",\n \"CollectionRemove\",\n \"CollectionClear\",\n \"CollectionInsert\",\n \"Filter Collection\",\n \"Map Collection\",\n \"Static Data\",\n ],\n },\n {\n name: \"Cloud Data\",\n items: [\n \"DbModel2\",\n \"NewDbModelProperties\",\n \"FilterDBModels\",\n \"SetDbModelProperties\",\n \"DbCollection2\",\n \"DeleteDbModelProperties\",\n \"AddDbModelRelation\",\n \"RemoveDbModelRelation\",\n \"Cloud File\",\n \"Upload File\",\n \"CloudFunction2\",\n \"DbConfig\",\n ],\n },\n {\n name: \"User\",\n items: [\n \"net.noodl.user.LogIn\",\n \"net.noodl.user.LogOut\",\n \"net.noodl.user.SignUp\",\n \"net.noodl.user.User\",\n \"net.noodl.user.SetUserProperties\",\n \"net.noodl.user.VerifyEmail\",\n \"net.noodl.user.SendEmailVerification\",\n \"net.noodl.user.ResetPassword\",\n \"net.noodl.user.RequestPasswordReset\",\n ],\n },\n {\n name: \"External Data\",\n items: [\"REST2\"],\n },\n ],\n },\n {\n name: \"Custom Code\",\n description: \"Custom JavaScript and CSS\",\n type: \"javascript\",\n subCategories: [\n {\n name: \"\",\n items: [\n \"Expression\",\n \"JavaScriptFunction\",\n \"Javascript2\",\n \"CSS Definition\",\n ],\n },\n ],\n },\n {\n name: \"Cloud Functions\",\n description: \"Nodes to be used in cloud functions\",\n type: \"data\",\n subCategories: [\n {\n name: \"\",\n items: [\"noodl.cloud.request\", \"noodl.cloud.response\"],\n },\n {\n name: \"Cloud Data\",\n items: [\"noodl.cloud.aggregate\"],\n },\n ],\n },\n ];\n\n obj.nodeIndex = {\n coreNodes,\n };\n\n const moduleNodes = [];\n\n nodeTypes.forEach((type) => {\n const nodeMetadata = nodeRegister._constructors[type].metadata;\n if (nodeMetadata.module) {\n moduleNodes.push(type);\n }\n });\n\n if (moduleNodes.length) {\n obj.nodeIndex.moduleNodes = [\n {\n name: \"\",\n items: moduleNodes,\n },\n ];\n }\n\n return obj;\n}\n\nexport { generateNodeLibrary };\n","function addModuleSettings(result, modules) {\n // Add module settings\n for (var i = 0; i < modules.length; i++) {\n var m = modules[i];\n if (m.settings) {\n m.settings.forEach(function (p) {\n result.ports.push(p);\n });\n }\n }\n}\n\nexport function generateProjectSettings(projectSettings, modules) {\n const result = {\n dynamicports: [],\n ports: [],\n };\n\n addModuleSettings(result, modules);\n\n return result;\n}\n","import { EventSender } from \"../eventsender\";\n\nfunction NodeModel(id, type) {\n EventSender.call(this);\n\n this.id = id;\n this.type = type;\n\n this.inputs = [];\n this.outputs = [];\n this.children = [];\n this.parameters = {};\n this.inputPorts = {};\n this.outputPorts = {};\n}\n\nNodeModel.prototype = Object.create(EventSender.prototype);\n\nNodeModel.prototype.setParameter = function (name, value, state) {\n if (state) {\n if (!this.stateParameters) this.stateParameters = {};\n if (!this.stateParameters[state]) this.stateParameters[state] = {};\n\n if (value === undefined) {\n delete this.stateParameters[state][name];\n } else {\n this.stateParameters[state][name] = value;\n }\n } else {\n if (value === undefined) {\n delete this.parameters[name];\n } else {\n this.parameters[name] = value;\n }\n }\n\n this.emit(\"parameterUpdated\", { name, value, state });\n};\n\nNodeModel.prototype.setParameters = function (parameters) {\n Object.keys(parameters).forEach((name) => {\n this.setParameter(name, parameters[name]);\n });\n};\n\nNodeModel.prototype.setStateParameters = function (parameters) {\n this.stateParameters = parameters;\n};\n\nNodeModel.prototype.setStateTransitions = function (stateTransitions) {\n this.stateTransitions = stateTransitions;\n};\n\nNodeModel.prototype.setStateTransitionParamter = function (\n parameter,\n curve,\n state\n) {\n if (!this.stateTransitions) {\n this.stateTransitions = {};\n }\n\n if (curve) {\n this.stateTransitions[state][parameter] = curve;\n } else {\n delete this.stateTransitions[state][parameter];\n }\n};\n\nNodeModel.prototype.setDefaultStateTransition = function (\n stateTransition,\n state\n) {\n if (!this.defaultStateTransitions) {\n this.defaultStateTransitions = {};\n }\n this.defaultStateTransitions[state] = stateTransition;\n};\n\nNodeModel.prototype.addInputPort = function (port) {\n this.inputPorts[port.name] = port;\n this.emit(\"inputPortAdded\", port);\n};\n\nNodeModel.prototype.getInputPort = function (portName) {\n return this.inputPorts[portName];\n};\n\nNodeModel.prototype.getInputPorts = function () {\n return this.inputPorts;\n};\n\nNodeModel.prototype.removeInputPortWithName = function (portName) {\n if (this.inputPorts.hasOwnProperty(portName)) {\n var port = this.inputPorts[portName];\n delete this.inputPorts[portName];\n this.emit(\"inputPortRemoved\", port);\n }\n};\n\nNodeModel.prototype.updateInputPortTypes = function (ports) {\n var changed = false;\n for (var key in ports) {\n if (this.inputPorts[key] !== undefined) {\n this.inputPorts[key].type = ports[key].type;\n changed = true;\n }\n }\n changed && this.emit(\"inputPortTypesUpdated\");\n};\n\nNodeModel.prototype.addOutputPort = function (port) {\n this.outputPorts[port.name] = port;\n this.emit(\"outputPortAdded\", port);\n};\n\nNodeModel.prototype.getOutputPort = function (portName) {\n return this.outputPorts[portName];\n};\n\nNodeModel.prototype.getOutputPorts = function () {\n return this.outputPorts;\n};\n\nNodeModel.prototype.removeOutputPortWithName = function (portName) {\n if (this.outputPorts.hasOwnProperty(portName)) {\n var port = this.outputPorts[portName];\n delete this.outputPorts[portName];\n this.emit(\"outputPortRemoved\", port);\n }\n};\n\nNodeModel.prototype.updateOutputPortTypes = function (ports) {\n var changed = false;\n for (var key in ports) {\n if (this.outputPorts[key] !== undefined) {\n this.outputPorts[key].type = ports[key].type;\n changed = true;\n }\n }\n changed && this.emit(\"outputPortTypesUpdated\");\n};\n\nNodeModel.prototype.addChild = function (child, index) {\n child.parent = this;\n if (index === undefined) {\n this.children.push(child);\n } else {\n this.children.splice(index, 0, child);\n }\n this.emit(\"childAdded\", child);\n};\n\nNodeModel.prototype.removeChild = function (child) {\n child.parent = undefined;\n var index = this.children.indexOf(child);\n this.children.splice(index, 1);\n this.emit(\"childRemoved\", child);\n};\n\nNodeModel.prototype.reset = function () {\n this.removeAllListeners();\n};\n\nNodeModel.prototype.setVariant = function (variant) {\n this.variant = variant;\n this.emit(\"variantUpdated\", variant);\n};\n\nNodeModel.createFromExportData = function (nodeData) {\n var node = new NodeModel(nodeData.id, nodeData.type);\n nodeData.parameters && node.setParameters(nodeData.parameters);\n nodeData.stateParameters && node.setStateParameters(nodeData.stateParameters);\n nodeData.stateTransitions &&\n node.setStateTransitions(nodeData.stateTransitions);\n\n if (nodeData.defaultStateTransitions) {\n for (const state in nodeData.defaultStateTransitions) {\n node.setDefaultStateTransition(\n nodeData.defaultStateTransitions[state],\n state\n );\n }\n }\n\n nodeData.ports &&\n nodeData.ports.forEach(function (port) {\n //some ports are incorrectly named outputs instead of output, patch it here so\n //the rest of the code doesn't need to care\n if (port.plug === \"outputs\") {\n port.plug = \"output\";\n }\n\n if (port.plug === \"input\" || port.plug === \"input/output\") {\n node.addInputPort(port);\n }\n if (port.plug === \"output\" || port.plug === \"input/output\") {\n node.addOutputPort(port);\n }\n });\n\n nodeData.variant && node.setVariant(nodeData.variant);\n\n return node;\n};\n\nexport { NodeModel };\n","import { NodeModel } from \"./nodemodel\";\nimport { EventSender } from \"../eventsender\";\n\nfunction ComponentModel(name) {\n EventSender.call(this);\n\n this.name = name;\n this.nodes = [];\n this.connections = [];\n this.roots = [];\n this.inputPorts = {};\n this.outputPorts = {};\n this.metadata = {};\n}\n\nComponentModel.prototype = Object.create(EventSender.prototype);\n\nComponentModel.prototype.addNode = async function (node) {\n node.component = this;\n this.nodes[node.id] = node;\n await this.emit(\"nodeAdded\", node);\n};\n\nComponentModel.prototype.hasNodeWithId = function (id) {\n return this.getNodeWithId(id) !== undefined;\n};\n\nComponentModel.prototype.getNodeWithId = function (id) {\n return this.nodes[id];\n};\n\nComponentModel.prototype.getAllNodes = function () {\n return Object.values(this.nodes);\n};\n\nComponentModel.prototype.getNodesWithType = function (type) {\n var nodes = [];\n var self = this;\n Object.keys(this.nodes).forEach(function (id) {\n var node = self.nodes[id];\n if (node.type === type) {\n nodes.push(node);\n }\n });\n\n return nodes;\n};\n\nComponentModel.prototype.addConnection = function (connection) {\n this.connections.push(connection);\n this.emit(\"connectionAdded\", connection);\n\n //emit an event on the target node model\n //used by numbered inputs\n if (connection.targetId) {\n const node = this.getNodeWithId(connection.targetId);\n if (node) {\n node.emit(\"inputConnectionAdded\", connection);\n }\n }\n};\n\nComponentModel.prototype.removeConnection = function (connection) {\n const index = this.connections.findIndex((con) => {\n return (\n con.sourceId === connection.sourceId &&\n con.sourcePort === connection.sourcePort &&\n con.targetId === connection.targetId &&\n con.targetPort === connection.targetPort\n );\n });\n\n if (index === -1) {\n console.log(\"Connection doesn't exist\", connection);\n return;\n }\n\n this.connections.splice(index, 1);\n this.emit(\"connectionRemoved\", connection);\n\n //emit an event on the target node model\n //used by numbered inputs\n if (connection.targetId) {\n const node = this.getNodeWithId(connection.targetId);\n if (node) {\n node.emit(\"inputConnectionRemoved\", connection);\n }\n }\n};\n\nComponentModel.prototype.getConnectionsFromPort = function (\n nodeId,\n sourcePortName\n) {\n return this.connections.filter(function (connection) {\n return (\n connection.sourceId === nodeId && connection.sourcePort === sourcePortName\n );\n });\n};\n\nComponentModel.prototype.getConnectionsToPort = function (\n nodeId,\n targetPortName\n) {\n return this.connections.filter(function (connection) {\n return (\n connection.targetId === nodeId && connection.targetPort === targetPortName\n );\n });\n};\n\nComponentModel.prototype.getConnectionsFrom = function (nodeId) {\n return this.connections.filter(function (connection) {\n return connection.sourceId === nodeId;\n });\n};\n\nComponentModel.prototype.getConnectionsTo = function (nodeId) {\n return this.connections.filter(function (connection) {\n return connection.targetId === nodeId;\n });\n};\n\nComponentModel.prototype.addRootId = function (rootId) {\n if (this.roots.indexOf(rootId) !== -1) {\n return;\n }\n this.roots.push(rootId);\n this.emit(\"rootAdded\", rootId);\n};\n\nComponentModel.prototype.removeRootId = function (rootId) {\n const index = this.roots.indexOf(rootId);\n if (index !== -1) {\n this.roots.splice(index, 1);\n this.emit(\"rootRemoved\", rootId);\n }\n};\n\nComponentModel.prototype.getRoots = function () {\n return this.roots;\n};\n\nComponentModel.prototype.removeNodeWithId = async function (id) {\n const node = this.getNodeWithId(id);\n\n if (!node) {\n console.warn(\"ERROR: Attempted to remove non-existing node with ID:\", id);\n return false;\n }\n\n //remove children first\n while (node.children.length > 0) {\n const child = node.children[0];\n const childRemoved = await this.removeNodeWithId(child.id);\n if (!childRemoved) {\n // Workaround for corrupt node trees, should never happen, a remove should always be successful\n node.children.shift();\n }\n }\n\n const connections = this.getConnectionsTo(id).concat(\n this.getConnectionsFrom(id)\n );\n\n for (let i = 0; i < connections.length; i++) {\n this.removeConnection(connections[i]);\n }\n\n this.setNodeParent(node, null);\n\n if (this.roots.indexOf(node.id) !== -1) {\n this.removeRootId(node.id);\n }\n\n await this.emit(\"nodeRemoved\", node);\n\n node.removeAllListeners();\n delete this.nodes[id];\n\n await this.emit(\"nodeWasRemoved\", node);\n return true;\n};\n\nComponentModel.prototype.getAllConnections = function () {\n return this.connections;\n};\n\nComponentModel.prototype.getInputPorts = function () {\n return this.inputPorts;\n};\n\nComponentModel.prototype.getOutputPorts = function () {\n return this.outputPorts;\n};\n\nComponentModel.prototype.addInputPort = function (port) {\n this.inputPorts[port.name] = port;\n this.emit(\"inputPortAdded\", port);\n};\n\nComponentModel.prototype.addOutputPort = function (port) {\n this.outputPorts[port.name] = port;\n this.emit(\"outputPortAdded\", port);\n};\n\nComponentModel.prototype.removeOutputPortWithName = function (portName) {\n if (this.outputPorts.hasOwnProperty(portName)) {\n var port = this.outputPorts[portName];\n delete this.outputPorts[portName];\n this.emit(\"outputPortRemoved\", port);\n }\n};\n\nComponentModel.prototype.removeInputPortWithName = function (portName) {\n if (this.inputPorts.hasOwnProperty(portName)) {\n var port = this.inputPorts[portName];\n delete this.inputPorts[portName];\n this.emit(\"inputPortRemoved\", port);\n }\n};\n\nComponentModel.prototype.updateInputPortTypes = function (ports) {\n var changed = false;\n for (var key in ports) {\n if (this.inputPorts[key] !== undefined) {\n this.inputPorts[key].type = ports[key].type;\n changed = true;\n }\n }\n changed && this.emit(\"inputPortTypesUpdated\");\n};\n\nComponentModel.prototype.updateOutputPortTypes = function (ports) {\n var changed = false;\n for (var key in ports) {\n if (this.outputPorts[key] !== undefined) {\n this.outputPorts[key].type = ports[key].type;\n changed = true;\n }\n }\n changed && this.emit(\"outputPortTypesUpdated\");\n};\n\nComponentModel.prototype.renameInputPortOnNodeWithId = function (\n id,\n oldName,\n newName\n) {\n //remove connections\n var connections = this.getConnectionsToPort(id, oldName);\n connections.forEach(this.removeConnection.bind(this));\n\n //get port before deleting it\n var nodeModel = this.getNodeWithId(id);\n var port = { ...nodeModel.getInputPort(oldName) };\n\n //remove old port\n if (port) {\n nodeModel.removeInputPortWithName(oldName);\n\n //rename and add new port\n port.name = newName;\n nodeModel.addInputPort(port);\n }\n\n //add new connection\n connections.forEach(function (connection) {\n connection.targetPort = newName;\n });\n\n connections.forEach(this.addConnection.bind(this));\n};\n\nComponentModel.prototype.renameOutputPortOnNodeWithId = function (\n id,\n oldName,\n newName\n) {\n //remove connections\n var connections = this.getConnectionsFromPort(id, oldName);\n connections.forEach(this.removeConnection.bind(this));\n\n //get port before deleting it\n var nodeModel = this.getNodeWithId(id);\n var port = { ...nodeModel.getOutputPort(oldName) };\n\n //remove old port\n nodeModel.removeOutputPortWithName(oldName);\n\n //rename and add new port\n port.name = newName;\n nodeModel.addOutputPort(port);\n\n //add new connection\n connections.forEach(function (connection) {\n connection.sourcePort = newName;\n });\n\n connections.forEach(this.addConnection.bind(this));\n};\n\nComponentModel.prototype.setNodeParent = function (\n childModel,\n newParentModel,\n index\n) {\n if (this.roots.indexOf(childModel.id) !== -1) {\n this.removeRootId(childModel.id);\n }\n\n if (childModel.parent) {\n this.emit(\"nodeParentWillBeRemoved\", childModel);\n childModel.parent.removeChild(childModel);\n }\n childModel.emit(\"parentUpdated\", newParentModel);\n if (newParentModel) {\n newParentModel.addChild(childModel, index);\n this.emit(\"nodeParentUpdated\", childModel);\n }\n};\n\nComponentModel.prototype.importEditorNodeData = async function (\n nodeData,\n parentId,\n childIndex\n) {\n var nodeModel = NodeModel.createFromExportData(nodeData);\n await this.addNode(nodeModel);\n\n if (parentId) {\n this.setNodeParent(nodeModel, this.getNodeWithId(parentId), childIndex);\n }\n\n if (nodeData.children) {\n for (let i = 0; i < nodeData.children.length; i++) {\n const child = nodeData.children[i];\n await this.importEditorNodeData(child, nodeModel.id, i);\n }\n }\n};\n\nComponentModel.prototype.reset = async function () {\n while (this.roots.length) {\n await this.removeNodeWithId(this.roots[0]);\n }\n\n for (const id of this.nodes) {\n //note: with an incomplete library there will be no roots\n //so some of the nodes will have children, which will be recursively removed by\n //removeNodeWithId(), so some IDs from the Object.keys(this.nodes) that runs this loop\n //will already have been removed, so check if they exist before removing\n if (this.hasNodeWithId(id)) {\n await this.removeNodeWithId(id);\n }\n }\n\n if (this.nodes.length > 0) {\n throw new Error(\"Not all nodes were removed during a reset\");\n }\n\n if (this.connections.length > 0) {\n throw new Error(\"Not all connections were removed during a reset\");\n }\n};\n\nComponentModel.prototype.rename = function (newName) {\n var oldName = this.name;\n this.name = newName;\n this.emit(\"renamed\", { oldName: oldName, newName: newName });\n};\n\nComponentModel.prototype.setMetadata = function (key, data) {\n this.metadata[key] = data;\n};\n\nComponentModel.prototype.getMetadata = function (key) {\n if (!key) return this.metadata;\n return this.metadata[key];\n};\n\nComponentModel.createFromExportData = async function (componentData) {\n var componentModel = new ComponentModel(componentData.name);\n\n if (componentData.metadata) {\n for (const key in componentData.metadata) {\n componentModel.setMetadata(key, componentData.metadata[key]);\n }\n }\n\n componentData.ports &&\n componentData.ports.forEach(function (port) {\n if (port.plug === \"input\" || port.plug === \"input/output\") {\n componentModel.addInputPort(port);\n }\n if (port.plug === \"output\" || port.plug === \"input/output\") {\n componentModel.addOutputPort(port);\n }\n });\n\n if (componentData.nodes) {\n for (const node of componentData.nodes) {\n await componentModel.importEditorNodeData(node);\n }\n }\n\n componentData.connections &&\n componentData.connections.forEach((connection) =>\n componentModel.addConnection(connection)\n );\n componentData.roots &&\n componentData.roots.forEach((root) => componentModel.addRootId(root));\n\n return componentModel;\n};\n\nexport { ComponentModel };\n","import { ComponentModel } from \"./componentmodel\";\nimport { EventSender } from \"../eventsender\";\n\nfunction GraphModel() {\n EventSender.call(this);\n this.components = {};\n\n this.settings = {};\n\n this.metadata = {};\n}\n\nGraphModel.prototype = Object.create(EventSender.prototype);\n\nGraphModel.prototype.importComponentFromEditorData = async function (\n componentData\n) {\n var componentModel = await ComponentModel.createFromExportData(componentData);\n this.addComponent(componentModel);\n};\n\nGraphModel.prototype.getBundleContainingComponent = function (name) {\n return this.componentToBundleMap.get(name);\n};\n\nGraphModel.prototype.getBundlesContainingSheet = function (sheetName) {\n const bundles = new Set();\n for (const name of this.componentToBundleMap.keys()) {\n const isOnDefaultSheet = name.indexOf(\"/#\") !== 0;\n\n const isMatch =\n (isOnDefaultSheet && sheetName === \"Default\") ||\n (!isOnDefaultSheet && name.indexOf(\"/#\" + sheetName) === 0);\n\n if (isMatch) {\n bundles.add(this.componentToBundleMap.get(name));\n }\n }\n return Array.from(bundles);\n};\n\nGraphModel.prototype.getBundleDependencies = function (bundleName) {\n const result = new Set();\n\n const recurse = (name) => {\n const bundle = this.componentIndex[name];\n for (const dep of bundle.dependencies) {\n if (!result.has(dep)) {\n result.add(dep);\n recurse(dep);\n }\n }\n };\n\n recurse(bundleName);\n\n return Array.from(result);\n};\n\nGraphModel.prototype.importEditorData = async function (exportData) {\n this.componentIndex = exportData.componentIndex;\n this.routerIndex = exportData.routerIndex;\n\n this.componentToBundleMap = new Map();\n\n for (const bundleName in exportData.componentIndex) {\n const bundle = exportData.componentIndex[bundleName];\n\n for (const componentName of bundle.components) {\n this.componentToBundleMap.set(componentName, bundleName);\n }\n }\n\n this.variants = exportData.variants || [];\n\n exportData.settings && this.setSettings(exportData.settings);\n\n exportData.metadata && this.setAllMetaData(exportData.metadata);\n\n for (const component of exportData.components) {\n await this.importComponentFromEditorData(component);\n }\n\n this.setRootComponentName(exportData.rootComponent);\n};\n\nGraphModel.prototype.setRootComponentName = function (componentName) {\n this.rootComponent = componentName;\n this.emit(\"rootComponentNameUpdated\", componentName);\n};\n\nGraphModel.prototype.getNodesWithType = function (type) {\n var nodes = [];\n\n var componentNames = Object.keys(this.components);\n for (var i = 0; i < componentNames.length; i++) {\n var component = this.components[componentNames[i]];\n nodes = nodes.concat(component.getNodesWithType(type));\n }\n return nodes;\n};\n\nGraphModel.prototype.getComponentWithName = function (type) {\n return this.components[type];\n};\n\nGraphModel.prototype.hasComponentWithName = function (type) {\n return this.components[type] ? true : false;\n};\n\nGraphModel.prototype.getAllComponents = function () {\n return Object.keys(this.components).map((name) => {\n return this.components[name];\n });\n};\n\nGraphModel.prototype.getAllNodes = function () {\n var nodes = [];\n\n var componentNames = Object.keys(this.components);\n for (var i = 0; i < componentNames.length; i++) {\n var component = this.components[componentNames[i]];\n nodes = nodes.concat(component.getAllNodes());\n }\n\n return nodes;\n};\n\nGraphModel.prototype.addComponent = function (component) {\n this.components[component.name] = component;\n\n //nodes that are already added are missing component input/output ports if the component is registered after the nodes\n //now when we have the component info, add them to the node instance models\n this.getNodesWithType(component.name).forEach(\n this._addComponentPorts.bind(this)\n );\n\n //emit the \"nodeAdded\" event for every node already in the component\n component.getAllNodes().forEach(this._onNodeAdded.bind(this));\n\n //emit the same event for future nodes that will be added\n component.on(\"nodeAdded\", this._onNodeAdded.bind(this), this);\n\n //and for nodes that are removed\n component.on(\"nodeRemoved\", this._onNodeRemoved.bind(this), this);\n component.on(\"nodeWasRemoved\", this._onNodeWasRemoved.bind(this), this);\n\n this.emit(\"componentAdded\", component);\n};\n\nGraphModel.prototype.removeComponentWithName = async function (componentName) {\n if (this.components.hasOwnProperty(componentName) === false) {\n console.error(\n \"GraphModel: Component with name \" + componentName + \" not in graph\"\n );\n return;\n }\n\n var component = this.components[componentName];\n await component.reset();\n\n component.removeAllListeners();\n delete this.components[component.name];\n\n this.emit(\"componentRemoved\", component);\n};\n\nGraphModel.prototype.renameComponent = function (componentName, newName) {\n if (this.components.hasOwnProperty(componentName) === false) {\n console.error(\n \"GraphModel: Component with name \" + componentName + \" not in graph\"\n );\n return;\n }\n\n this.getNodesWithType(componentName).forEach(function (nodeModel) {\n nodeModel.type = newName;\n });\n\n var component = this.components[componentName];\n component.rename(newName);\n\n delete this.components[componentName];\n this.components[newName] = component;\n\n this.emit(\"componentRenamed\", component);\n};\n\nGraphModel.prototype._addComponentPorts = function (node) {\n //check if this node is a known component and add port to the model\n if (this.components.hasOwnProperty(node.type)) {\n //a component was created, add component ports to model\n var component = this.components[node.type];\n\n const inputPorts = component.getInputPorts();\n const outputPorts = component.getOutputPorts();\n\n Object.keys(inputPorts).forEach((portName) => {\n node.addInputPort(inputPorts[portName]);\n });\n\n Object.keys(outputPorts).forEach((portName) => {\n node.addOutputPort(outputPorts[portName]);\n });\n }\n};\n\nGraphModel.prototype._onNodeAdded = function (node) {\n this._addComponentPorts(node);\n\n this.emit(\"nodeAdded\", node);\n this.emit(\"nodeAdded.\" + node.type, node);\n};\n\nGraphModel.prototype._onNodeRemoved = function (node) {\n this.emit(\"nodeRemoved\", node);\n this.emit(\"nodeRemoved.\" + node.type, node);\n};\n\nGraphModel.prototype._onNodeWasRemoved = function (node) {\n this.emit(\"nodeWasRemoved\", node);\n this.emit(\"nodeWasRemoved.\" + node.type, node);\n};\n\nGraphModel.prototype.reset = async function () {\n for (const componentName of Object.keys(this.components)) {\n await this.removeComponentWithName(componentName);\n }\n this.setSettings({});\n};\n\nGraphModel.prototype.isEmpty = function () {\n return Object.keys(this.components).length === 0;\n};\n\nGraphModel.prototype.setSettings = function (settings) {\n this.settings = settings;\n this.emit(\"projectSettingsChanged\", settings);\n};\n\nGraphModel.prototype.getSettings = function () {\n return this.settings;\n};\n\nGraphModel.prototype.setAllMetaData = function (metadata) {\n for (const p in metadata) {\n this.setMetaData(p, metadata[p]);\n }\n};\n\nGraphModel.prototype.setMetaData = function (key, data) {\n //metadata changes can trigger lots of ports to evaluate (e.g. when a database model has been changed)\n //check if the data actually has been updated before since the editor can send the same data multiple times\n if (\n this.metadata[key] &&\n JSON.stringify(this.metadata[key]) === JSON.stringify(data)\n ) {\n return;\n }\n\n this.metadata[key] = data;\n this.emit(\"metadataChanged\", { key, data });\n this.emit(\"metadataChanged.\" + key, data);\n};\n\nGraphModel.prototype.getMetaData = function (key) {\n if (key) return this.metadata[key];\n return this.metadata;\n};\n\nGraphModel.prototype.getVariants = function () {\n return this.variants || [];\n};\n\nGraphModel.prototype.getVariant = function (typename, name) {\n return this.variants.find((v) => v.name === name && v.typename === typename);\n};\n\nGraphModel.prototype.updateVariant = function (variant) {\n const i = this.variants.findIndex(\n (v) => v.name === variant.name && v.typename === variant.typename\n );\n if (i !== -1) this.variants.splice(i, 1);\n this.variants.push(variant);\n\n this.emit(\"variantUpdated\", variant);\n};\n\nGraphModel.prototype.updateVariantParameter = function (\n variantName,\n variantTypeName,\n parameterName,\n parameterValue,\n state\n) {\n const variant = this.getVariant(variantTypeName, variantName);\n if (!variant) {\n console.log(\n \"updateVariantParameter: can't find variant\",\n variantName,\n variantTypeName\n );\n return;\n }\n\n if (!state) {\n if (parameterValue === undefined) {\n delete variant.parameters[parameterName];\n } else {\n variant.parameters[parameterName] = parameterValue;\n }\n } else {\n if (!variant.stateParameters.hasOwnProperty(state)) {\n variant.stateParameters[state] = {};\n }\n\n if (parameterValue === undefined) {\n delete variant.stateParameters[state][parameterName];\n } else {\n variant.stateParameters[state][parameterName] = parameterValue;\n }\n }\n\n this.emit(\"variantUpdated\", variant);\n};\n\nGraphModel.prototype.updateVariantDefaultStateTransition = function (\n variantName,\n variantTypeName,\n transition,\n state\n) {\n const variant = this.getVariant(variantTypeName, variantName);\n if (!variant) return;\n\n variant.defaultStateTransitions[state] = transition;\n this.emit(\"variantUpdated\", variant);\n};\n\nGraphModel.prototype.updateVariantStateTransition = function (args) {\n const { variantTypeName, variantName, state, parameterName, curve } = args;\n\n const variant = this.getVariant(variantTypeName, variantName);\n if (!variant) return;\n\n if (!variant.stateTransitions[state]) {\n variant.stateTransitions[state] = {};\n }\n\n variant.stateTransitions[state][parameterName] = curve;\n};\n\nGraphModel.prototype.deleteVariant = function (typename, name) {\n const i = this.variants.findIndex(\n (v) => v.name === name && v.typename === typename\n );\n if (i !== -1) this.variants.splice(i, 1);\n};\n\nexport { GraphModel };\n","export function createSetter(args) {\n var currentValue = false;\n\n return function (value) {\n value = value ? true : false;\n //value changed from false to true\n if (value && currentValue === false) {\n args.valueChangedToTrue.call(this);\n }\n currentValue = value;\n };\n}\n","import { Node } from \"./node\";\nimport { createSetter } from \"./edgetriggeredinput\";\n\nfunction createNodeConstructor(opts: {\n name: string;\n getInspectInfo?: () => any;\n nodeScopeDidInitialize?: () => void;\n prototypeExtensions?: PropertyDescriptorMap;\n}) {\n const cls = class extends Node {\n constructor(context: any, id: any) {\n super(context, id);\n }\n\n getInspectInfo() {\n return opts.getInspectInfo?.() ?? undefined;\n }\n\n nodeScopeDidInitialize() {\n return opts.nodeScopeDidInitialize?.() ?? undefined;\n }\n };\n\n // Apply prototypeExtensions if provided\n if (opts.prototypeExtensions) {\n Object.defineProperties(cls.prototype, opts.prototypeExtensions);\n }\n\n // Optionally assign a name (not necessary, but mirrors old behavior)\n Object.defineProperty(cls.prototype, \"name\", {\n value: opts.name,\n });\n\n return cls;\n}\n\n// @ts-expect-error\nfunction registerInput(object, metadata, name, input) {\n if (object.hasOwnProperty(name)) {\n throw new Error(\"Input property \" + name + \" already registered\");\n }\n\n if (!input.set && !input.valueChangedToTrue) {\n input.set = () => {};\n }\n\n if (input.set) {\n object[name] = {\n set: input.set,\n };\n\n //types to keep in the input on the node instances\n //color and textStyles are used for style updates\n //array is for supporting eval:ing strings\n const typesToSaveInInput = [\"color\", \"textStyle\", \"array\"];\n\n typesToSaveInInput.forEach((type) => {\n if (input.type && (input.type === type || input.type.name === type)) {\n object[name].type = type;\n }\n });\n }\n\n if (input.setUnitType) {\n object[name].setUnitType = input.setUnitType;\n }\n\n metadata.inputs[name] = {\n displayName: input.displayName,\n editorName: input.editorName,\n group: input.group,\n type: input.type,\n default: input.default,\n index: input.index,\n exportToEditor: input.hasOwnProperty(\"exportToEditor\")\n ? input.exportToEditor\n : true,\n inputPriority: input.inputPriority || 0,\n tooltip: input.tooltip,\n tab: input.tab,\n popout: input.popout,\n allowVisualStates: input.allowVisualStates,\n nodeDoubleClickAction: input.nodeDoubleClickAction,\n };\n\n if (input.valueChangedToTrue) {\n metadata.inputs[name].type = {\n name: \"signal\",\n allowConnectionsOnly: true,\n };\n }\n}\n\n// @ts-expect-error\nfunction registerInputs(object, metadata, inputs) {\n Object.keys(inputs).forEach(function (inputName) {\n registerInput(object, metadata, inputName, inputs[inputName]);\n });\n}\n\n// @ts-expect-error\nfunction registerNumberedInputs(node, numberedInputs) {\n for (const inputName of Object.keys(numberedInputs)) {\n registerNumberedInput(node, inputName, numberedInputs[inputName]);\n }\n}\n\n// @ts-expect-error\nfunction registerNumberedInput(node, name, input) {\n const oldRegisterInputIfNeeded = node.registerInputIfNeeded;\n\n // @ts-expect-error\n node.registerInputIfNeeded = function (inputName) {\n if (oldRegisterInputIfNeeded) {\n oldRegisterInputIfNeeded.call(node, inputName);\n }\n\n if (node.hasInput(inputName) || !inputName.startsWith(name)) {\n return;\n }\n\n const index = Number(inputName.slice(name.length + 1)); // inputName is \"nameOfInput xxx\" where xxx is the index\n\n node.registerInput(inputName, {\n type: input.type,\n set: input.createSetter.call(node, index),\n });\n };\n}\n\n// @ts-expect-error\nfunction registerOutputsMetadata(metadata, outputs) {\n Object.keys(outputs).forEach(function (name) {\n var output = outputs[name];\n\n metadata.outputs[name] = {\n displayName: output.displayName,\n editorName: output.editorName,\n group: output.group,\n type: output.type,\n index: output.index,\n exportToEditor: output.hasOwnProperty(\"exportToEditor\")\n ? output.exportToEditor\n : true,\n };\n });\n}\n\n// @ts-expect-error\nfunction initializeDefaultValues(defaultValues, inputsMetadata) {\n Object.keys(inputsMetadata).forEach((name) => {\n const defaultValue = inputsMetadata[name].default;\n if (defaultValue === undefined) return;\n\n if (inputsMetadata[name].type.defaultUnit) {\n defaultValues[name] = {\n unit: inputsMetadata[name].type.defaultUnit,\n value: defaultValue,\n };\n } else {\n defaultValues[name] = defaultValue;\n }\n });\n}\n\n// @ts-expect-error\nexport function defineNode(opts) {\n if (!opts.category) {\n throw new Error(\"Node must have a category\");\n }\n\n if (!opts.name) {\n throw new Error(\"Node must have a name\");\n }\n\n const metadata = {\n inputs: {},\n outputs: {},\n category: opts.category,\n dynamicports: opts.dynamicports,\n exportDynamicPorts: opts.exportDynamicPorts,\n useVariants: opts.useVariants,\n allowChildren: opts.allowChildren,\n allowChildrenWithCategory: opts.allowChildrenWithCategory,\n singleton: opts.singleton,\n connectionPanel: opts.connectionPanel,\n allowAsChild: opts.allowAsChild,\n visualStates: opts.visualStates,\n panels: opts.panels,\n color: opts.color,\n usePortAsLabel: opts.usePortAsLabel,\n portLabelTruncationMode: opts.portLabelTruncationMode,\n name: opts.name,\n displayNodeName: opts.displayNodeName || opts.displayName,\n deprecated: opts.deprecated,\n haveComponentPorts: opts.haveComponentPorts,\n version: opts.version,\n module: opts.module,\n docs: opts.docs,\n allowAsExportRoot: opts.allowAsExportRoot,\n nodeDoubleClickAction: opts.nodeDoubleClickAction,\n searchTags: opts.searchTags,\n };\n\n opts._internal = opts._internal || {};\n\n //prototypeExtensions - old API\n //methods - new API\n opts.prototypeExtensions = opts.methods || opts.prototypeExtensions || {};\n opts.inputs = opts.inputs || {};\n opts.outputs = opts.outputs || {};\n opts.initialize = opts.initialize || function () {};\n\n let inputs = {};\n\n registerInputs(inputs, metadata, opts.inputs);\n registerOutputsMetadata(metadata, opts.outputs);\n\n Object.keys(opts.prototypeExtensions).forEach(function (propName) {\n if (!opts.prototypeExtensions[propName].value) {\n opts.prototypeExtensions[propName] = {\n value: opts.prototypeExtensions[propName],\n };\n }\n });\n\n const NodeConstructor = createNodeConstructor({\n name: opts.name,\n getInspectInfo: opts.getInspectInfo,\n nodeScopeDidInitialize: opts.nodeScopeDidInitialize,\n prototypeExtensions: opts.prototypeExtensions,\n });\n\n // @ts-expect-error\n const nodeDefinition = function (context, id, nodeScope) {\n const node = new NodeConstructor(context, id);\n\n //create all inputs. Use the inputs object for setters that don't have state and can be shared\n node._inputs = Object.create(inputs);\n\n //all inputs that use the valueChangedToTrue have state and need to be instanced\n Object.keys(opts.inputs).forEach(function (name) {\n var input = opts.inputs[name];\n if (input.valueChangedToTrue) {\n // @ts-expect-error\n node._inputs[name] = {\n set: createSetter({\n valueChangedToTrue: input.valueChangedToTrue,\n }),\n };\n }\n });\n\n Object.keys(opts.outputs).forEach(function (name) {\n var output = opts.outputs[name];\n if (output.type === \"signal\") {\n node.registerOutput(name, {\n getter() {\n //signals are always emitted as a sequence of false, true, so this getter is never used\n return undefined;\n },\n });\n } else {\n node.registerOutput(name, output);\n }\n });\n\n opts.numberedInputs && registerNumberedInputs(node, opts.numberedInputs);\n\n // @ts-expect-error\n node.nodeScope = nodeScope;\n initializeDefaultValues(node._inputValues, metadata.inputs);\n\n opts.initialize.call(node);\n\n return node;\n };\n\n nodeDefinition.metadata = metadata;\n\n if (opts.numberedInputs)\n registerSetupFunctionForNumberedInputs(\n nodeDefinition,\n opts.name,\n opts.numberedInputs\n );\n\n return nodeDefinition;\n}\n\nfunction registerSetupFunctionForNumberedInputs(\n // @ts-expect-error\n nodeDefinition,\n // @ts-expect-error\n nodeType,\n // @ts-expect-error\n numberedInputs\n) {\n const inputNames = Object.keys(numberedInputs);\n\n if (!inputNames.length) return;\n\n nodeDefinition.setupNumberedInputDynamicPorts = function (\n // @ts-expect-error\n context,\n // @ts-expect-error\n graphModel\n ) {\n const editorConnection = context.editorConnection;\n\n if (!editorConnection || !editorConnection.isRunningLocally()) {\n return;\n }\n\n // @ts-expect-error\n function collectPorts(node, inputName, input) {\n const connections = node.component\n .getConnectionsTo(node.id)\n // @ts-expect-error\n .map((c) => c.targetPort);\n\n const allPortNames = Object.keys(node.parameters).concat(connections);\n const portNames = allPortNames.filter((p) =>\n p.startsWith(inputName + \" \")\n );\n\n //Figure out how many we need to create\n //It needs to be the highest index + 1\n //Only parameters with values are present, e.g. input 3 can be missing even if input 4 is defined\n const maxIndex = portNames.length\n ? 1 +\n Math.max(\n ...portNames.map((p) => Number(p.slice(inputName.length + 1)))\n )\n : 0;\n const numPorts = maxIndex + 1;\n\n const ports = [];\n\n for (let i = 0; i < numPorts; i++) {\n const port = {\n name: inputName + \" \" + i,\n displayName: (input.displayPrefix || inputName) + \" \" + i,\n type: input.type,\n plug: \"input\",\n group: input.group,\n };\n\n if (input.hasOwnProperty(\"index\")) {\n // @ts-expect-error\n port.index = input.index + i;\n }\n\n ports.push(port);\n }\n\n return ports;\n }\n\n // @ts-expect-error\n function updatePorts(node) {\n const ports = inputNames\n .map((inputName) =>\n collectPorts(node, inputName, numberedInputs[inputName])\n )\n // @ts-expect-error\n .flat();\n editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n // @ts-expect-error\n graphModel.on(\"nodeAdded.\" + nodeType, (node) => {\n updatePorts(node);\n node.on(\"parameterUpdated\", () => {\n updatePorts(node);\n });\n\n node.on(\"inputConnectionAdded\", () => {\n updatePorts(node);\n });\n\n node.on(\"inputConnectionRemoved\", () => {\n updatePorts(node);\n });\n });\n };\n}\n\n// @ts-expect-error\nexport function extend(obj1, obj2) {\n for (var p in obj2) {\n if (p === \"initialize\" && obj1.initialize) {\n var oldInit = obj1.initialize;\n obj1.initialize = function () {\n oldInit.call(this);\n obj2.initialize.call(this);\n };\n } else if (obj2[p] && obj2[p].constructor === Object) {\n obj1[p] = extend(obj1[p] || {}, obj2[p]);\n } else if (\n obj2[p] &&\n obj2[p].constructor === Array &&\n obj1[p] &&\n obj1[p].constructor == Array\n ) {\n obj1[p] = obj1[p].concat(obj2[p]);\n } else {\n obj1[p] = obj2[p];\n }\n }\n return obj1;\n}\n","function difference(array1, array2) {\n const valueSet = new Set(array2);\n return array1.filter((e) => !valueSet.has(e));\n}\n\nexport async function handleEvent(context, graphModel, event) {\n function applyPortDelta(nodeModel, newPorts) {\n var inputPorts = {};\n var outputPorts = {};\n\n newPorts.forEach(function (port) {\n //some ports are incorrectly named outputs instead of output, patch it here so\n //the rest of the code doesn't need to care\n if (port && port.plug === \"outputs\") {\n port.plug = \"output\";\n }\n\n if (port.plug === \"input\" || port.plug === \"input/output\") {\n inputPorts[port.name] = port;\n }\n if (port.plug === \"output\" || port.plug === \"input/output\") {\n outputPorts[port.name] = port;\n }\n });\n\n var existingInputs = Object.keys(nodeModel.getInputPorts());\n\n var inputPortsToRemove = difference(\n existingInputs,\n Object.keys(inputPorts)\n );\n var inputPortsToAdd = difference(Object.keys(inputPorts), existingInputs);\n\n // Update port types if it has changed\n nodeModel.updateInputPortTypes(inputPorts);\n\n // Remove and add input ports\n inputPortsToRemove.forEach(\n nodeModel.removeInputPortWithName.bind(nodeModel)\n );\n inputPortsToAdd.forEach(function (portName) {\n nodeModel.addInputPort(inputPorts[portName]);\n if (\n nodeModel.parameters &&\n nodeModel.parameters.hasOwnProperty(portName)\n ) {\n setInputValueOnNodeInstancesWithModel(\n context.rootComponent.nodeScope,\n nodeModel,\n portName,\n nodeModel.parameters[portName]\n );\n }\n });\n\n // Update port types if it has changed\n nodeModel.updateOutputPortTypes(outputPorts);\n\n // Remove and add output ports\n var existingOutputs = Object.keys(nodeModel.getOutputPorts());\n\n var outputPortsToRemove = difference(\n existingOutputs,\n Object.keys(outputPorts)\n );\n var outputPortsToAdd = difference(\n Object.keys(outputPorts),\n existingOutputs\n );\n\n outputPortsToRemove.forEach(\n nodeModel.removeOutputPortWithName.bind(nodeModel)\n );\n outputPortsToAdd.forEach(function (portName) {\n nodeModel.addOutputPort(outputPorts[portName]);\n });\n }\n\n function setInputValueOnNodeInstancesWithModel(\n nodeScope,\n nodeModel,\n port,\n value\n ) {\n var nodes = nodeScope.getNodesWithIdRecursive(nodeModel.id);\n nodes.forEach(function (node) {\n node.queueInput(port, value);\n });\n }\n\n var componentModel;\n if (event.componentName) {\n componentModel = graphModel.getComponentWithName(event.componentName);\n if (!componentModel) {\n //if we haven't received this component yet, just ignore the delta update\n return;\n }\n }\n\n //some ports are incorrectly named outputs instead of output, patch it here so\n //the rest of the code doesn't need to care\n if (event.port && event.port.plug === \"outputs\") {\n event.port.plug = \"output\";\n }\n\n var eventHandlers = {\n nodeAdded(event) {\n componentModel.importEditorNodeData(\n event.model,\n event.parentId,\n event.childIndex\n );\n },\n nodeRemoved: async function (event) {\n if (componentModel.hasNodeWithId(event.model.id)) {\n await componentModel.removeNodeWithId(event.model.id);\n }\n },\n connectionAdded(event) {\n componentModel.addConnection(event.model);\n },\n connectionRemoved(event) {\n componentModel.removeConnection(event.model);\n\n //revert to default value or parameter if this was the last connection to that port\n var targetNodeModel = componentModel.getNodeWithId(event.model.targetId);\n if (\n componentModel.getConnectionsToPort(\n targetNodeModel.id,\n event.model.targetId\n ).length === 0\n ) {\n var value = targetNodeModel.parameters[event.model.targetPort];\n if (value === undefined) {\n value = context.getDefaultValueForInput(\n targetNodeModel.type,\n event.model.targetPort\n );\n }\n\n setInputValueOnNodeInstancesWithModel(\n context.rootComponent.nodeScope,\n targetNodeModel,\n event.model.targetPort,\n value\n );\n }\n },\n parameterChanged(event) {\n const nodeModel = componentModel.getNodeWithId(event.nodeId);\n if (nodeModel === undefined) {\n console.log(\"parameterChanged: Unknown node id\", event);\n return;\n }\n\n //did we get a bunch of parameters at once?\n if (event.parameters) {\n //note: some props might be deleted, then they only exist in oldParameters\n const allParams = new Set(\n Object.keys(event.parameters).concat(Object.keys(event.oldParameters))\n );\n for (const param of allParams) {\n nodeModel.setParameter(param, event.parameters[param]);\n }\n }\n\n //did we get a single parameters?\n if (event.parameterName) {\n nodeModel.setParameter(\n event.parameterName,\n event.parameterValue,\n event.state\n );\n }\n },\n nodeAttached(event) {\n componentModel.setNodeParent(\n componentModel.getNodeWithId(event.nodeId),\n componentModel.getNodeWithId(event.parentId),\n event.childIndex\n );\n },\n nodeDetached(event) {\n componentModel.setNodeParent(\n componentModel.getNodeWithId(event.nodeId),\n null\n );\n componentModel.addRootId(event.nodeId);\n },\n componentAdded(event) {\n graphModel.importComponentFromEditorData(event.model);\n },\n componentRemoved: async function (event) {\n await graphModel.removeComponentWithName(event.componentName);\n },\n rootAdded(event) {\n componentModel.addRootId(event.nodeId);\n },\n portAdded(event) {\n var nodeModel = componentModel.getNodeWithId(event.nodeId);\n if (event.port.plug === \"input\" || event.port.plug === \"input/output\") {\n nodeModel.addInputPort(event.port);\n\n //if node already has an old value for this port, set that value on all instances of the node\n //example: expression a+b, a=1, b=2. User removes b and then adds it again, the value 2 should be restored since it's still in the model\n if (nodeModel.parameters.hasOwnProperty(event.port)) {\n setInputValueOnNodeInstancesWithModel(\n context.rootComponent.nodeScope,\n nodeModel,\n event.port,\n nodeModel.parameters[event.port]\n );\n }\n }\n if (event.port.plug === \"output\" || event.port.plug === \"input/output\") {\n nodeModel.addOutputPort(event.port);\n }\n },\n portRemoved(event) {\n var nodeModel = componentModel.getNodeWithId(event.nodeId);\n if (event.port.plug === \"input\" || event.port.plug === \"input/output\") {\n nodeModel.removeInputPortWithName(event.port.name);\n }\n if (event.port.plug === \"output\" || event.port.plug === \"input/output\") {\n nodeModel.removeOutputPortWithName(event.port.name);\n }\n },\n nodePortRenamed(event) {\n if (event.port.plug === \"input\" || event.port.plug === \"input/output\") {\n componentModel.renameInputPortOnNodeWithId(\n event.nodeId,\n event.oldName,\n event.port.name\n );\n }\n if (event.port.plug === \"output\" || event.port.plug === \"input/output\") {\n componentModel.renameOutputPortOnNodeWithId(\n event.nodeId,\n event.oldName,\n event.port.name\n );\n }\n var node = componentModel.getNodeWithId(event.nodeId);\n if (node.type === \"Component Inputs\") {\n componentModel.addInputPort(event.port);\n graphModel\n .getNodesWithType(componentModel.name)\n .forEach(function (componentInstance) {\n componentInstance.component.renameInputPortOnNodeWithId(\n componentInstance.id,\n event.oldName,\n event.port.name\n );\n });\n componentModel.removeInputPortWithName(event.oldName);\n } else if (node.type === \"Component Outputs\") {\n componentModel.addOutputPort(event.port);\n graphModel\n .getNodesWithType(componentModel.name)\n .forEach(function (componentInstance) {\n componentInstance.component.renameOutputPortOnNodeWithId(\n componentInstance.id,\n event.oldName,\n event.port.name\n );\n });\n componentModel.removeOutputPortWithName(event.oldName);\n }\n },\n componentPortsUpdated(event) {\n applyPortDelta(componentModel, event.ports);\n },\n instancePortsChanged(event) {\n if (!componentModel.hasNodeWithId(event.nodeId)) return;\n var nodeModel = componentModel.getNodeWithId(event.nodeId);\n applyPortDelta(nodeModel, event.ports);\n },\n componentRenamed(event) {\n graphModel.renameComponent(event.oldName, event.newName);\n },\n settingsChanged(event) {\n graphModel.setSettings(event.settings);\n },\n metadataChanged(event) {\n graphModel.setMetaData(event.key, event.data);\n },\n componentMetadataChanged(event) {\n const c = graphModel.getComponentWithName(event.componentName);\n if (!c) return;\n c.setMetadata(event.key, event.data);\n },\n variantParametersChanged(event) {\n if (event.variant) {\n //we got the whole variant\n graphModel.updateVariant(event.variant);\n } else {\n //we got a specific value to update\n graphModel.updateVariantParameter(\n event.variantName,\n event.variantTypeName,\n event.parameterName,\n event.parameterValue,\n event.state\n );\n\n //check if value has been deleted from the variant\n if (event.parameterValue === undefined) {\n //all active nodes with this variant will have to revert back to the default value, if they don't have local overrides\n const variant = graphModel.getVariant(\n event.variantTypeName,\n event.variantName\n );\n const nodes =\n context.rootComponent.nodeScope.getAllNodesWithVariantRecursive(\n variant\n );\n nodes.forEach((node) => {\n node.queueInput(\n event.parameterName,\n node.getParameter(event.parameterName)\n );\n });\n }\n }\n },\n variantDeleted(event) {\n graphModel.deleteVariant(event.variantTypeName, event.variantName);\n },\n variantChanged(event) {\n const nodeModel = componentModel.getNodeWithId(event.nodeId);\n const variant = graphModel.getVariant(nodeModel.type, event.variantName);\n\n nodeModel.setVariant(variant);\n },\n variantRenamed(event) {\n const variant = graphModel.getVariant(\n event.variantTypeName,\n event.oldVariantName\n );\n if (variant) {\n variant.name = variant.variantName;\n }\n },\n defaultStateTransitionChanged(event) {\n const nodeModel = componentModel.getNodeWithId(event.nodeId);\n nodeModel.setDefaultStateTransition(event.curve, event.state);\n },\n stateTransitionsChanged(event) {\n const nodeModel = componentModel.getNodeWithId(event.nodeId);\n if (event.parameterName) {\n nodeModel.setStateTransitionParamter(\n event.parameterName,\n event.curve,\n event.state\n );\n }\n },\n variantDefaultStateTransitionChanged(event) {\n graphModel.updateVariantDefaultStateTransition(\n event.variantName,\n event.variantTypeName,\n event.curve,\n event.state\n );\n },\n variantStateTransitionsChanged(event) {\n graphModel.updateVariantStateTransition(event);\n },\n routerIndexChanged(event) {\n graphModel.routerIndex = event.data;\n },\n };\n\n if (eventHandlers.hasOwnProperty(event.type)) {\n await eventHandlers[event.type](event);\n context.scheduleUpdate();\n } else {\n console.log(\"Unknown event\", event);\n }\n}\n","export async function asyncPool(poolLimit, values, iteratorFn) {\n const ret = [];\n const executing = [];\n for (const item of values) {\n const p = Promise.resolve().then(() => iteratorFn(item, values));\n ret.push(p);\n\n if (poolLimit <= values.length) {\n const e = p.then(() => executing.splice(executing.indexOf(e), 1));\n executing.push(e);\n if (executing.length >= poolLimit) {\n await Promise.race(executing);\n }\n }\n }\n\n return Promise.all(ret);\n}\n","export default {\n node: {\n name: \"Component Inputs\",\n shortDesc: \"This node is used to define the inputs of a component.\",\n docs: \"https://docs.noodl.net/nodes/component-utilities/component-inputs\",\n panels: [\n {\n name: \"PortEditor\",\n context: [\"select\", \"connectFrom\"],\n title: \"Inputs\",\n plug: \"output\",\n type: {\n name: \"*\",\n },\n canArrangeInGroups: true,\n },\n {\n name: \"PropertyEditor\",\n hidden: true,\n },\n ],\n getInspectInfo() {\n return {\n type: \"value\",\n value: this.nodeScope.componentOwner._internal.inputValues,\n };\n },\n color: \"component\",\n haveComponentPorts: true,\n category: \"Component Utilities\",\n methods: {\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n this.registerOutput(name, {\n getter() {\n return this.nodeScope.componentOwner._internal.inputValues[name];\n },\n });\n },\n _updateDependencies() {\n this.nodeScope.componentOwner.update();\n },\n },\n },\n};\n","export default {\n node: {\n category: \"Component Utilities\",\n name: \"Component Outputs\",\n shortDesc: \"This node is used to define the outputs of a component.\",\n docs: \"https://docs.noodl.net/nodes/component-utilities/component-outputs\",\n panels: [\n {\n name: \"PortEditor\",\n context: [\"select\", \"connectTo\"],\n title: \"Outputs\",\n plug: \"input\",\n type: {\n name: \"*\",\n },\n canArrangeInGroups: true,\n },\n {\n name: \"PropertyEditor\",\n hidden: true,\n },\n ],\n color: \"component\",\n haveComponentPorts: true,\n prototypeExtensions: {\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n this.registerInput(name, {\n set(value) {\n this.nodeScope.componentOwner.setOutputFromComponentOutput(\n name,\n value\n );\n },\n });\n },\n },\n },\n};\n","// ------------------------------------------------------------------------------\n// Model\n// ------------------------------------------------------------------------------\nfunction Model(id, data) {\n this.id = id;\n this.data = data;\n}\n\nconst models = (Model._models = {});\nconst proxies = {};\n\n// Get and set proxy\nconst _modelProxyHandler = {\n get(target, prop, receiver) {\n if (typeof target[prop] === \"function\") return target[prop].bind(target);\n else if (prop in target) return Reflect.get(target, prop, receiver);\n else return target.get(prop);\n },\n set(obj, prop, value) {\n if (prop === \"_class\") {\n obj._class = value;\n } else if (prop === \"id\") {\n console.log(\n `Noodl.Object warning: id is readonly (Id is ${obj.id}, trying to set to ${value})`\n );\n return true; //if a proxy doesn't return true an exception will be thrown\n } else {\n obj.set(prop, value);\n }\n return true;\n },\n ownKeys(target) {\n return Reflect.ownKeys(target.data);\n },\n getOwnPropertyDescriptor(target, prop) {\n return Object.getOwnPropertyDescriptor(target.data, prop);\n },\n};\n\n/**\n *\n * @param {*} id\n * @returns {Model}\n */\nModel.get = function (id) {\n if (id === undefined) id = Model.guid();\n if (!models[id]) {\n models[id] = new Model(id, {});\n proxies[id] = new Proxy(models[id], _modelProxyHandler);\n }\n return proxies[id];\n};\n\nModel.create = function (data) {\n var modelData = data ? data : {};\n var m = Model.get(modelData.id);\n for (var key in modelData) {\n if (key === \"id\") continue;\n m.set(key, modelData[key]);\n }\n\n return m;\n};\n\nModel.exists = function (id) {\n return models[id] !== undefined;\n};\n\nModel.instanceOf = function (collection) {\n return collection instanceof Model || collection.target instanceof Model;\n};\n\nfunction _randomString(size) {\n if (size === 0) {\n throw new Error(\"Zero-length randomString is useless.\");\n }\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" + \"abcdefghijklmnopqrstuvwxyz\" + \"0123456789\";\n let objectId = \"\";\n for (let i = 0; i < size; ++i) {\n objectId += chars[Math.floor((1 + Math.random()) * 0x10000) % chars.length];\n }\n return objectId;\n}\n\nModel.guid = function guid() {\n return _randomString(10);\n};\n\nModel.prototype.on = function (event, listener) {\n if (!this.listeners) this.listeners = {};\n if (!this.listeners[event]) this.listeners[event] = [];\n this.listeners[event].push(listener);\n};\n\nModel.prototype.off = function (event, listener) {\n if (!this.listeners) return;\n if (!this.listeners[event]) return;\n var idx = this.listeners[event].indexOf(listener);\n if (idx !== -1) this.listeners[event].splice(idx, 1);\n};\n\nModel.prototype.notify = function (event, args) {\n if (!this.listeners) return;\n if (!this.listeners[event]) return;\n\n var l = this.listeners[event].slice(); //clone in case listeners array is modified in the callbacks\n for (var i = 0; i < l.length; i++) {\n l[i](args);\n }\n};\n\nModel.prototype.setAll = function (obj) {\n for (var i in obj) {\n if (i === \"id\") continue; // Skip id\n if (this.data[i] !== obj[i]) {\n var old = this.data[i];\n this.data[i] = obj[i];\n this.notify(\"change\", { name: i, value: obj[i], old: old });\n }\n }\n};\n\nModel.prototype.fill = function (value = null) {\n for (const key in this.data) {\n if (key === \"id\") continue; // Skip id\n const temp = this.data[key];\n this.data[key] = value;\n this.notify(\"change\", { name: key, value: this.data[key], old: temp });\n }\n};\n\n/**\n * @param {string} name\n * @param {unknown} value\n * @param {{\n * resolve?: boolean;\n * forceChange?: boolean;\n * silent?: boolean;\n * }} args\n */\nModel.prototype.set = function (name, value, args) {\n if (args && args.resolve && name.indexOf(\".\") !== -1) {\n // We should resolve path references\n const path = name.split(\".\");\n let model = this;\n for (let i = 0; i < path.length - 1; i++) {\n const v = model.get(path[i]);\n if (Model.instanceOf(v)) model = v;\n else return; // Path resolve failed\n }\n model.set(path[path.length - 1], value);\n return;\n }\n\n const forceChange = args && args.forceChange;\n\n const oldValue = this.data[name];\n this.data[name] = value;\n\n if ((forceChange || oldValue !== value) && (!args || !args.silent)) {\n this.notify(\"change\", { name: name, value: value, old: oldValue });\n }\n};\n\n/**\n * @returns {string}\n */\nModel.prototype.getId = function () {\n return this.id;\n};\n\n/**\n * @param {string} name\n * @param {{\n * resolve?: boolean;\n * }} args\n * @returns {unknown}\n */\nModel.prototype.get = function (name, args) {\n if (args && args.resolve && name.indexOf(\".\") !== -1) {\n // We should resolve path references\n const path = name.split(\".\");\n let model = this;\n for (let i = 0; i < path.length - 1; i++) {\n const v = model.get(path[i]);\n if (Model.instanceOf(v)) model = v;\n else return; // Path resolve failed\n }\n return model.get(path[path.length - 1]);\n }\n\n return this.data[name];\n};\n\nModel.prototype.toJSON = function () {\n return Object.assign({}, this.data, { id: this.id });\n};\n\nModel.Scope = function () {\n this.models = {};\n this.proxies = {};\n};\n\nModel.Scope.prototype.get = function (id) {\n if (id === undefined) id = Model.guid();\n if (!this.models[id]) {\n this.models[id] = new Model(id, {});\n this.proxies[id] = new Proxy(this.models[id], _modelProxyHandler);\n }\n return this.proxies[id];\n};\n\nModel.Scope.prototype.create = function (data) {\n var modelData = data ? data : {};\n var m = this.get(modelData.id);\n for (var key in modelData) {\n if (key === \"id\") continue;\n m.set(key, modelData[key]);\n }\n\n return m;\n};\n\nModel.Scope.prototype.exists = function (id) {\n return this.models[id] !== undefined;\n};\n\nModel.Scope.prototype.instanceOf = function (collection) {\n return collection instanceof Model || collection.target instanceof Model;\n};\n\nModel.Scope.prototype.guid = function guid() {\n return _randomString(10);\n};\n\nModel.Scope.prototype.reset = function () {\n this.models = {};\n this.proxies = {};\n delete this._cloudStore;\n};\n\nexport { Model };\n","import { Node } from \"../../node\";\nimport { guid } from \"../../guid\";\nimport { Model } from \"../../model\";\n\nfunction sendSignalOnInput(itemNode, name) {\n itemNode.queueInput(name, true); // send signal\n itemNode.queueInput(name, false);\n}\n\nconst RunTasksDefinition = {\n name: \"RunTasks\",\n displayNodeName: \"Run Tasks\",\n docs: \"https://docs.noodl.net/nodes/data/run-tasks\",\n color: \"data\",\n category: \"Data\",\n initialize() {\n this._internal.queuedOperations = [];\n this._internal.state = \"idle\";\n this._internal.maxRunningTasks = 10;\n this._internal.activeTasks = new Map(); //id => ComponentInstanceNode\n },\n inputs: {\n items: {\n group: \"Data\",\n displayName: \"Items\",\n type: \"array\",\n set(value) {\n if (!value) return;\n if (value === this._internal.items) return;\n\n this._internal.items = value;\n },\n },\n stopOnFailure: {\n group: \"General\",\n displayName: \"Stop On Failure\",\n type: \"boolean\",\n default: false,\n set(value) {\n this._internal.stopOnFailure = value;\n },\n },\n maxRunningTasks: {\n group: \"General\",\n displayName: \"Max Running Tasks\",\n type: \"number\",\n default: 10,\n set(value) {\n this._internal.maxRunningTasks = value;\n },\n },\n taskTemplate: {\n type: \"component\",\n displayName: \"Template\",\n group: \"General\",\n set(value) {\n this._internal.template = value;\n },\n },\n run: {\n group: \"General\",\n displayName: \"Do\",\n type: \"signal\",\n valueChangedToTrue() {\n this.scheduleRun();\n },\n },\n abort: {\n group: \"General\",\n displayName: \"Abort\",\n type: \"signal\",\n valueChangedToTrue() {\n this.scheduleAbort();\n },\n },\n },\n outputs: {\n success: {\n type: \"signal\",\n group: \"Events\",\n displayName: \"Success\",\n },\n failure: {\n type: \"signal\",\n group: \"Events\",\n displayName: \"Failure\",\n },\n done: {\n type: \"signal\",\n group: \"Events\",\n displayName: \"Done\",\n },\n aborted: {\n type: \"signal\",\n group: \"Events\",\n displayName: \"Aborted\",\n },\n },\n methods: {\n scheduleRun() {\n var internal = this._internal;\n if (!internal.hasScheduledRun) {\n internal.hasScheduledRun = true;\n this.scheduleAfterInputsHaveUpdated(() => {\n this._queueOperation(() => {\n internal.hasScheduledRun = false;\n this.run();\n });\n });\n }\n },\n scheduleAbort() {\n var internal = this._internal;\n if (!internal.hasScheduledAbort) {\n internal.hasScheduledAbort = true;\n this.scheduleAfterInputsHaveUpdated(() => {\n this._queueOperation(() => {\n internal.hasScheduledAbort = false;\n this.abort();\n });\n });\n }\n },\n async createTaskComponent(item) {\n const internal = this._internal;\n\n const modelScope = this.nodeScope.modelScope || Model;\n const model = modelScope.create(item);\n\n var itemNode = await this.nodeScope.createNode(\n internal.template,\n guid(),\n {\n _forEachModel: model,\n _forEachNode: this,\n }\n );\n\n // This is needed to make sure any action connected to \"Do\"\n // is not run directly\n const _isInputConnected = itemNode.isInputConnected.bind(itemNode);\n itemNode.isInputConnected = (name) => {\n if (name === \"Do\") return true;\n return _isInputConnected(name);\n };\n\n // Set the Id as an input\n if (itemNode.hasInput(\"Id\")) {\n itemNode.setInputValue(\"Id\", model.getId());\n }\n if (itemNode.hasInput(\"id\")) {\n itemNode.setInputValue(\"id\", model.getId());\n }\n\n // Push all other values also as inputs\n // if they exist as component inputs\n for (var inputKey in itemNode._inputs) {\n if (model.data[inputKey] !== undefined)\n itemNode.setInputValue(inputKey, model.data[inputKey]);\n }\n\n // capture signals\n itemNode._internal.creatorCallbacks = {\n onOutputChanged: (name, value, oldValue) => {\n if (\n (oldValue === false || oldValue === undefined) &&\n value === true\n ) {\n this.itemOutputSignalTriggered(name, model, itemNode);\n }\n },\n };\n\n return itemNode;\n },\n async startTask(task) {\n const internal = this._internal;\n\n try {\n const taskComponent = await this.createTaskComponent(task);\n internal.runningTasks++;\n sendSignalOnInput(taskComponent, \"Do\");\n internal.activeTasks.set(taskComponent.id, taskComponent);\n } catch (e) {\n // Something went wrong starting the task\n console.log(e);\n }\n },\n async run() {\n const internal = this._internal;\n\n if (this.context.editorConnection) {\n if (internal.state !== \"idle\") {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"run-tasks\",\n {\n message: \"Cannot start when not in idle mode\",\n }\n );\n } else if (!internal.template) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"run-tasks\",\n {\n message: \"No task template specified.\",\n }\n );\n } else if (!internal.items) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"run-tasks\",\n {\n message: \"No items array provided.\",\n }\n );\n } else {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"run-tasks\"\n );\n }\n }\n\n if (internal.state !== \"idle\") {\n return;\n }\n\n if (!internal.template) {\n return;\n }\n\n if (!internal.items) {\n return;\n }\n\n internal.state = \"running\";\n internal.numTasks = internal.items.length;\n internal.failedTasks = 0;\n internal.completedTasks = 0;\n internal.queuedTasks = [].concat(internal.items);\n internal.runningTasks = 0;\n\n // No tasks\n if (internal.items.length === 0) {\n this.sendSignalOnOutput(\"success\");\n internal.state = \"idle\";\n }\n\n // Start tasks\n for (\n let i = 0;\n i < Math.min(internal.maxRunningTasks, internal.queuedTasks.length);\n i++\n ) {\n const task = internal.queuedTasks.shift();\n if (!task) break;\n\n this.startTask(task);\n }\n },\n abort() {\n const internal = this._internal;\n\n internal.state = \"aborted\";\n },\n itemOutputSignalTriggered(name, model, itemNode) {\n const internal = this._internal;\n\n if (internal.state === \"idle\") {\n // Signal while we are not running is ignored\n return;\n }\n\n const checkDone = () => {\n if (internal.state === \"aborted\") {\n this.sendSignalOnOutput(\"aborted\");\n internal.state = \"idle\";\n return;\n }\n\n if (internal.completedTasks === internal.numTasks) {\n if (internal.failedTasks === 0) this.sendSignalOnOutput(\"success\");\n else this.sendSignalOnOutput(\"failure\");\n this.sendSignalOnOutput(\"done\");\n internal.state = \"idle\";\n } else {\n if (internal.stopOnFailure) {\n // Only continue if there are no failed tasks, otherwise aborted\n if (internal.failedTasks === 0) {\n internal.runningTasks++;\n const task = internal.queuedTasks.shift();\n if (task) this.startTask(task);\n } else {\n this.sendSignalOnOutput(\"failure\");\n this.sendSignalOnOutput(\"aborted\");\n }\n } else {\n internal.runningTasks++;\n const task = internal.queuedTasks.shift();\n if (task) this.startTask(task);\n }\n }\n };\n\n if (name === \"Success\") {\n internal.completedTasks++;\n internal.runningTasks--;\n checkDone();\n } else if (name === \"Failure\") {\n internal.completedTasks++;\n internal.failedTasks++;\n internal.runningTasks--;\n checkDone();\n }\n\n internal.activeTasks.delete(itemNode.id);\n this.nodeScope.deleteNode(itemNode);\n },\n _queueOperation(op) {\n this._internal.queuedOperations.push(op);\n this._runQueueOperations();\n },\n async _runQueueOperations() {\n if (this.runningOperations) {\n return;\n }\n this.runningOperations = true;\n\n while (this._internal.queuedOperations.length) {\n const op = this._internal.queuedOperations.shift();\n await op();\n }\n\n this.runningOperations = false;\n },\n },\n _deleteAllTasks() {\n for (const taskComponent of this._internal.activeTasks) {\n this.nodeScope.deleteNode(taskComponent);\n }\n this._internal.activeTasks.clear();\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n this._deleteAllTasks();\n },\n};\n\nexport default {\n node: RunTasksDefinition,\n};\n","const defaultRequestScript =\n \"\" +\n \"//Add custom code to setup the request object before the request\\n\" +\n \"//is made.\\n\" +\n \"//\\n\" +\n \"//*Request.resource contains the resource path of the request.\\n\" +\n \"//*Request.method contains the method, GET, POST, PUT or DELETE.\\n\" +\n \"//*Request.headers is a map where you can add additional headers.\\n\" +\n \"//*Request.parameters is a map the parameters that will be appended\\n\" +\n \"// to the url.\\n\" +\n \"//*Request.content contains the content of the request as a javascript\\n\" +\n \"// object.\\n\" +\n \"//\\n\";\n\nconst defaultResponseScript =\n \"\" +\n \"// Add custom code to convert the response content to outputs\\n\" +\n \"//\\n\" +\n \"//*Response.status The status code of the response\\n\" +\n \"//*Response.content The content of the response as a javascript\\n\" +\n \"// object.\\n\" +\n \"//*Response.request The request object that resulted in the response.\\n\" +\n \"//\\n\" +\n \"//*Inputs and *Outputs contain the inputs and outputs of the node.\\n\";\n\nconst RestNode = {\n name: \"REST2\",\n displayNodeName: \"REST\",\n docs: \"https://docs.noodl.net/nodes/data/rest\",\n category: \"Data\",\n color: \"data\",\n searchTags: [\"http\", \"request\", \"fetch\"],\n initialize() {\n this._internal.inputValues = {};\n this._internal.outputValues = {};\n\n this._internal.outputValuesProxy = new Proxy(this._internal.outputValues, {\n set: (obj, prop, value) => {\n //only send outputs when they change.\n //Some Noodl projects rely on this behavior, so changing it breaks backwards compability\n if (value !== this._internal.outputValues[prop]) {\n this.registerOutputIfNeeded(\"out-\" + prop);\n\n this._internal.outputValues[prop] = value;\n this.flagOutputDirty(\"out-\" + prop);\n }\n return true;\n },\n });\n\n this._internal.self = {};\n },\n getInspectInfo() {\n return this._internal.inspectData\n ? { type: \"value\", value: this._internal.inspectData }\n : { type: \"text\", value: \"[Not executed yet]\" };\n },\n inputs: {\n resource: {\n type: \"string\",\n displayName: \"Resource\",\n group: \"Request\",\n default: \"/\",\n set(value) {\n this._internal.resource = value;\n },\n },\n method: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"GET\", value: \"GET\" },\n { label: \"POST\", value: \"POST\" },\n { label: \"PUT\", value: \"PUT\" },\n { label: \"PATCH\", value: \"PATCH\" },\n { label: \"DELETE\", value: \"DELETE\" },\n ],\n },\n displayName: \"Method\",\n group: \"Request\",\n default: \"GET\",\n set(value) {\n this._internal.method = value;\n },\n },\n /* scriptInputs: {\n type: { name: 'proplist', allowEditOnly: true },\n group: 'Inputs',\n set(value) {\n // this._internal.scriptInputs = value; \n }\n },\n scriptOutputs: {\n type: { name: 'proplist', allowEditOnly: true },\n group: 'Outputs',\n set(value) {\n // this._internal.scriptOutputs = value; \n }\n },*/\n requestScript: {\n type: {\n name: \"string\",\n allowEditOnly: true,\n codeeditor: \"javascript\",\n },\n displayName: \"Request\",\n default: defaultRequestScript,\n group: \"Scripts\",\n set(script) {\n try {\n this._internal.requestFunc = new Function(\n \"Inputs\",\n \"Outputs\",\n \"Request\",\n script\n );\n } catch (e) {\n console.log(e);\n }\n },\n },\n responseScript: {\n type: {\n name: \"string\",\n allowEditOnly: true,\n codeeditor: \"javascript\",\n },\n displayName: \"Response\",\n default: defaultResponseScript,\n group: \"Scripts\",\n set(script) {\n try {\n this._internal.responseFunc = new Function(\n \"Inputs\",\n \"Outputs\",\n \"Response\",\n script\n );\n } catch (e) {\n console.log(e);\n }\n },\n },\n fetch: {\n type: \"signal\",\n displayName: \"Fetch\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleFetch();\n },\n },\n cancel: {\n type: \"signal\",\n displayName: \"Cancel\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.cancelFetch();\n },\n },\n },\n outputs: {\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n success: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n canceled: {\n type: \"signal\",\n displayName: \"Canceled\",\n group: \"Events\",\n },\n },\n prototypeExtensions: {\n getScriptOutputValue(name) {\n return this._internal.outputValues[name];\n },\n setScriptInputValue(name, value) {\n return (this._internal.inputValues[name] = value);\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name.startsWith(\"out-\"))\n return this.registerOutput(name, {\n getter: this.getScriptOutputValue.bind(\n this,\n name.substring(\"out-\".length)\n ),\n });\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"in-\"))\n return this.registerInput(name, {\n set: this.setScriptInputValue.bind(\n this,\n name.substring(\"in-\".length)\n ),\n });\n\n /* if (name.startsWith('intype-')) return this.registerInput(name, {\n set: function() {} // Ignore input type\n })\n\n if (name.startsWith('outtype-')) return this.registerInput(name, {\n set: function() {} // Ignore output type\n })*/\n },\n scheduleFetch() {\n var internal = this._internal;\n if (!internal.hasScheduledFetch) {\n internal.hasScheduledFetch = true;\n this.scheduleAfterInputsHaveUpdated(this.doFetch.bind(this));\n }\n },\n doResponse(status, response, request) {\n // Process the response content with the response function\n if (this._internal.responseFunc) {\n this._internal.responseFunc.apply(this._internal.self, [\n this._internal.inputValues,\n this._internal.outputValuesProxy,\n { status: status, content: response, request: request },\n ]);\n }\n\n this._internal.inspectData = { status: status, content: response };\n\n // Flag status\n if (status >= 200 && status < 300) {\n this.sendSignalOnOutput(\"success\");\n } else {\n this.sendSignalOnOutput(\"failure\");\n }\n },\n doExternalFetch(request) {\n var url = request.resource;\n\n // Append parameters from request as query\n if (Object.keys(request.parameters).length > 0) {\n var parameters = Object.keys(request.parameters).map(function (p) {\n return p + \"=\" + encodeURIComponent(request.parameters[p]);\n });\n url += \"?\" + parameters.join(\"&\");\n }\n\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // Running in browser\n var _this = this;\n var xhr = new window.XMLHttpRequest();\n this._xhr = xhr;\n\n xhr.open(request.method, url, true);\n for (var header in request.headers) {\n xhr.setRequestHeader(header, request.headers[header]);\n }\n xhr.onreadystatechange = function () {\n // XMLHttpRequest.DONE = 4, but torped runtime doesn't support enum\n\n var sentResponse = false;\n\n if (\n this.readyState === 4 ||\n this.readyState === XMLHttpRequest.DONE\n ) {\n var statusCode = this.status;\n var responseType = this.getResponseHeader(\"content-type\");\n var rawResponse = this.response;\n delete this._xhr;\n\n if (responseType) {\n responseType = responseType.toLowerCase();\n const responseData =\n responseType.indexOf(\"json\") !== -1\n ? JSON.parse(rawResponse)\n : rawResponse;\n\n _this.doResponse(statusCode, responseData, request);\n sentResponse = true;\n }\n\n if (sentResponse === false) {\n _this.doResponse(statusCode, rawResponse, request);\n }\n }\n };\n xhr.onerror = function (e) {\n //console.log('REST: Failed to request', url);\n delete this._xhr;\n _this.sendSignalOnOutput(\"failure\");\n };\n\n xhr.onabort = function () {\n delete this._xhr;\n _this.sendSignalOnOutput(\"canceled\");\n };\n\n if (request.content) {\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n xhr.send(JSON.stringify(request.content));\n } else {\n xhr.send();\n }\n } else {\n // Running in cloud runtime\n const headers = Object.assign(\n {},\n request.headers,\n request.content\n ? {\n \"Content-Type\": \"application/json\",\n }\n : {}\n );\n fetch(url, {\n method: request.method,\n headers,\n body: request.content ? JSON.stringify(request.content) : undefined,\n })\n .then((response) => {\n const responseType = response.headers.get(\"content-type\");\n if (responseType) {\n if (responseType.indexOf(\"/json\") !== -1) {\n response.json().then((json) => {\n this.doResponse(response.status, json, request);\n });\n } else {\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"rest-run-waring-\",\n {\n message:\n \"REST only supports json content type in response.\",\n }\n );\n }\n }\n } else {\n response.text().then((raw) => {\n this.doResponse(response.status, raw, request);\n });\n }\n })\n .catch((e) => {\n console.log(\"REST: Failed to request\", url);\n console.log(e);\n this.sendSignalOnOutput(\"failure\");\n });\n }\n },\n doFetch() {\n this._internal.hasScheduledFetch = false;\n\n // Format resource path\n var resource = this._internal.resource;\n if (resource) {\n for (var key in this._internal.inputValues) {\n resource = resource.replace(\n \"{\" + key + \"}\",\n this._internal.inputValues[key]\n );\n }\n }\n\n // Setup the request\n var request = {\n resource: resource,\n headers: {},\n method:\n this._internal.method !== undefined ? this._internal.method : \"GET\",\n parameters: {},\n };\n\n // Process the request content with the preprocess function\n if (this._internal.requestFunc) {\n this._internal.requestFunc.apply(this._internal.self, [\n this._internal.inputValues,\n this._internal.outputValuesProxy,\n request,\n ]);\n }\n\n // Perform request\n this.doExternalFetch(request);\n },\n cancelFetch() {\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n this._xhr && this._xhr.abort();\n } else {\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"rest-run-waring-\",\n {\n message: \"REST doesn't support cancel in cloud functions.\",\n }\n );\n }\n }\n },\n },\n};\n\nfunction _parseScriptForErrors(script, args, name, node, context, ports) {\n // Clear run warnings if the script is edited\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"rest-run-waring-\" + name\n );\n\n if (script === undefined) {\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"rest-parse-waring-\" + name\n );\n return;\n }\n\n try {\n new Function(...args, script);\n\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"rest-parse-waring-\" + name\n );\n } catch (e) {\n context.editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"rest-parse-waring-\" + name,\n {\n message: \"<strong>\" + name + \"</strong>: \" + e.message,\n showGlobally: true,\n }\n );\n }\n\n // Extract inputs and outputs\n function _exists(port) {\n return ports.find((p) => p.name === port) !== undefined;\n }\n\n const scriptWithoutComments = script.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g, \"\"); // Remove comments\n const inputs = scriptWithoutComments.match(/Inputs\\.[A-Za-z0-9]+/g);\n if (inputs) {\n const unique = {};\n inputs.forEach((v) => {\n unique[v.substring(\"Inputs.\".length)] = true;\n });\n\n Object.keys(unique).forEach((p) => {\n if (_exists(\"in-\" + p)) return;\n\n ports.push({\n name: \"in-\" + p,\n displayName: p,\n plug: \"input\",\n type: \"*\",\n group: \"Inputs\",\n });\n });\n }\n\n const outputs = scriptWithoutComments.match(/Outputs\\.[A-Za-z0-9]+/g);\n if (outputs) {\n const unique = {};\n outputs.forEach((v) => {\n unique[v.substring(\"Outputs.\".length)] = true;\n });\n\n Object.keys(unique).forEach((p) => {\n if (_exists(\"out-\" + p)) return;\n\n ports.push({\n name: \"out-\" + p,\n displayName: p,\n plug: \"output\",\n type: \"*\",\n group: \"Outputs\",\n });\n });\n }\n}\n\nexport default {\n node: RestNode,\n setup(context, graphModel) {\n if (!context.editorConnection) {\n return;\n }\n\n function _managePortsForNode(node) {\n function _updatePorts() {\n if (!node.parameters) {\n return;\n }\n\n var ports = [];\n function exists(name) {\n for (var i = 0; i < ports.length; i++)\n if (ports[i].name === name && ports[i].plug === \"input\")\n return true;\n return false;\n }\n\n /* const _typeEnums = [{value:'string',label:'String'},\n {value:'boolean',label:'Boolean'},\n {value:'number',label:'Number'},\n {value:'color',label:'Color'},\n {value:'object',label:'Object'},\n {value:'array',label:'Array'}]*/\n\n // Inputs\n /* if (node.parameters['scriptInputs'] !== undefined && node.parameters['scriptInputs'].length > 0) {\n node.parameters['scriptInputs'].forEach((p) => {\n // Type for input\n ports.push({\n name: 'intype-' + p.label,\n displayName: 'Type',\n plug: 'input',\n type: { name: 'enum', enums: _typeEnums, allowEditOnly: true },\n default: 'string',\n parent: 'scriptInputs',\n parentItemId: p.id\n })\n \n // Default Value for input\n ports.push({\n name: 'in-' + p.label,\n displayName: p.label,\n plug: 'input',\n type: node.parameters['intype-' + p.label] || 'string',\n group: 'Input Values'\n })\n })\n }*/\n\n // Outputs\n /* if (node.parameters['scriptOutputs'] !== undefined && node.parameters['scriptOutputs'].length > 0) {\n node.parameters['scriptOutputs'].forEach((p) => {\n // Type for output\n ports.push({\n name: 'outtype-' + p.label,\n displayName: 'Type',\n plug: 'input',\n type: { name: 'enum', enums: _typeEnums, allowEditOnly: true },\n default: 'string',\n parent: 'scriptOutputs',\n parentItemId: p.id\n })\n \n // Value for output\n ports.push({\n name: 'out-' + p.label,\n displayName: p.label,\n plug: 'output',\n type: node.parameters['outtype-' + p.label] || '*',\n group: 'Outputs',\n })\n })\n }*/\n\n // Parse resource path inputs\n if (node.parameters.resource) {\n var inputs = node.parameters.resource.match(/\\{[A-Za-z0-9_]*\\}/g);\n for (var i in inputs) {\n var def = inputs[i];\n var name = def.replace(\"{\", \"\").replace(\"}\", \"\");\n if (exists(\"in-\" + name)) continue;\n\n ports.push({\n name: \"in-\" + name,\n displayName: name,\n type: \"string\",\n plug: \"input\",\n group: \"Inputs\",\n });\n }\n }\n\n if (node.parameters[\"requestScript\"]) {\n _parseScriptForErrors(\n node.parameters[\"requestScript\"],\n [\"Inputs\", \"Outputs\", \"Request\"],\n \"Request script\",\n node,\n context,\n ports\n );\n }\n\n if (node.parameters[\"responseScript\"]) {\n _parseScriptForErrors(\n node.parameters[\"responseScript\"],\n [\"Inputs\", \"Outputs\", \"Response\"],\n \"Response script\",\n node,\n context,\n ports\n );\n }\n\n context.editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n _updatePorts();\n node.on(\"parameterUpdated\", function () {\n _updatePorts();\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.REST2\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"REST2\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order of result values is determined by the\n * order they occur in the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = difference;\n","import difference from \"lodash.difference\";\n\n//import Model from \"./data/model\";\n\nconst ExpressionNode = {\n name: \"Expression\",\n docs: \"https://docs.noodl.net/nodes/math/expression\",\n usePortAsLabel: \"expression\",\n category: \"CustomCode\",\n color: \"javascript\",\n nodeDoubleClickAction: {\n focusPort: \"Expression\",\n },\n searchTags: [\"javascript\"],\n initialize() {\n var internal = this._internal;\n\n internal.scope = {};\n internal.hasScheduledEvaluation = false;\n\n internal.code = undefined;\n internal.cachedValue = 0;\n internal.currentExpression = \"\";\n internal.compiledFunction = undefined;\n internal.inputNames = [];\n internal.inputValues = [];\n },\n getInspectInfo() {\n return this._internal.cachedValue;\n },\n inputs: {\n expression: {\n group: \"General\",\n inputPriority: 1,\n type: {\n name: \"string\",\n allowEditOnly: true,\n codeeditor: \"javascript\",\n },\n displayName: \"Expression\",\n set(value) {\n var internal = this._internal;\n internal.currentExpression =\n functionPreamble + \"return (\" + value + \");\";\n internal.compiledFunction = undefined;\n\n var newInputs = parsePorts(value);\n\n var inputsToAdd = difference(newInputs, internal.inputNames);\n var inputsToRemove = difference(internal.inputNames, newInputs);\n\n var self = this;\n inputsToRemove.forEach(function (name) {\n self.deregisterInput(name);\n delete internal.scope[name];\n });\n\n inputsToAdd.forEach(function (name) {\n if (self.hasInput(name)) {\n return;\n }\n\n self.registerInput(name, {\n set(value) {\n internal.scope[name] = value;\n if (!this.isInputConnected(\"run\"))\n this._scheduleEvaluateExpression();\n },\n });\n\n internal.scope[name] = 0;\n self._inputValues[name] = 0;\n });\n\n /* if(value.indexOf('Vars') !== -1 || value.indexOf('Variables') !== -1) {\n // This expression is using variables, it should listen for changes\n this._internal.onVariablesChangedCallback = (args) => {\n this._scheduleEvaluateExpression()\n }\n\n Model.get('--ndl--global-variables').off('change',this._internal.onVariablesChangedCallback)\n Model.get('--ndl--global-variables').on('change',this._internal.onVariablesChangedCallback)\n }*/\n\n internal.inputNames = Object.keys(internal.scope);\n if (!this.isInputConnected(\"run\")) this._scheduleEvaluateExpression();\n },\n },\n run: {\n group: \"Actions\",\n displayName: \"Run\",\n type: \"signal\",\n valueChangedToTrue() {\n this._scheduleEvaluateExpression();\n },\n },\n },\n outputs: {\n result: {\n group: \"Result\",\n type: \"*\",\n displayName: \"Result\",\n getter() {\n if (!this._internal.currentExpression) {\n return 0;\n }\n\n return this._internal.cachedValue;\n },\n },\n isTrue: {\n group: \"Result\",\n type: \"boolean\",\n displayName: \"Is True\",\n getter() {\n if (!this._internal.currentExpression) {\n return false;\n }\n\n return !!this._internal.cachedValue;\n },\n },\n isFalse: {\n group: \"Result\",\n type: \"boolean\",\n displayName: \"Is False\",\n getter() {\n if (!this._internal.currentExpression) {\n return true;\n }\n\n return !this._internal.cachedValue;\n },\n },\n isTrueEv: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"On True\",\n },\n isFalseEv: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"On False\",\n },\n },\n prototypeExtensions: {\n registerInputIfNeeded: {\n value(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n this._internal.scope[name] = 0;\n this._inputValues[name] = 0;\n\n this.registerInput(name, {\n set(value) {\n this._internal.scope[name] = value;\n if (!this.isInputConnected(\"run\"))\n this._scheduleEvaluateExpression();\n },\n });\n },\n },\n _scheduleEvaluateExpression: {\n value() {\n var internal = this._internal;\n if (internal.hasScheduledEvaluation === false) {\n internal.hasScheduledEvaluation = true;\n this.flagDirty();\n this.scheduleAfterInputsHaveUpdated(function () {\n var lastValue = internal.cachedValue;\n internal.cachedValue = this._calculateExpression();\n if (lastValue !== internal.cachedValue) {\n this.flagOutputDirty(\"result\");\n this.flagOutputDirty(\"isTrue\");\n this.flagOutputDirty(\"isFalse\");\n }\n if (internal.cachedValue) this.sendSignalOnOutput(\"isTrueEv\");\n else this.sendSignalOnOutput(\"isFalseEv\");\n internal.hasScheduledEvaluation = false;\n });\n }\n },\n },\n _calculateExpression: {\n value() {\n var internal = this._internal;\n\n if (!internal.compiledFunction) {\n internal.compiledFunction = this._compileFunction();\n }\n for (var i = 0; i < internal.inputNames.length; ++i) {\n var inputValue = internal.scope[internal.inputNames[i]];\n internal.inputValues[i] = inputValue;\n }\n try {\n return internal.compiledFunction.apply(null, internal.inputValues);\n } catch (e) {\n console.error(\"Error in expression:\", e.message);\n }\n return 0;\n },\n },\n _compileFunction: {\n value() {\n var expression = this._internal.currentExpression;\n var args = Object.keys(this._internal.scope);\n\n var key = expression + args.join(\" \");\n\n if (compiledFunctionsCache.hasOwnProperty(key) === false) {\n args.push(expression);\n\n try {\n compiledFunctionsCache[key] = construct(Function, args);\n } catch (e) {\n console.error(\"Failed to compile JS function\", e.message);\n }\n }\n return compiledFunctionsCache[key];\n },\n },\n },\n};\n\nvar functionPreamble = [\n \"var min = Math.min,\" +\n \" max = Math.max,\" +\n \" cos = Math.cos,\" +\n \" sin = Math.sin,\" +\n \" tan = Math.tan,\" +\n \" sqrt = Math.sqrt,\" +\n \" pi = Math.PI,\" +\n \" round = Math.round,\" +\n \" floor = Math.floor,\" +\n \" ceil = Math.ceil,\" +\n \" abs = Math.abs,\" +\n \" random = Math.random;\",\n /* ' Vars = Variables = Noodl.Object.get(\"--ndl--global-variables\");' */\n].join(\"\");\n\n//Since apply cannot be used on constructors (i.e. new Something) we need this hax\n//see http://stackoverflow.com/questions/1606797/use-of-apply-with-new-operator-is-this-possible\nfunction construct(constructor, args) {\n function F() {\n return constructor.apply(this, args);\n }\n F.prototype = constructor.prototype;\n return new F();\n}\n\nvar compiledFunctionsCache = {};\n\nvar portsToIgnore = [\n \"min\",\n \"max\",\n \"cos\",\n \"sin\",\n \"tan\",\n \"sqrt\",\n \"pi\",\n \"round\",\n \"floor\",\n \"ceil\",\n \"abs\",\n \"random\",\n \"Math\",\n \"window\",\n \"document\",\n \"undefined\",\n \"Vars\",\n \"true\",\n \"false\",\n \"null\",\n \"Boolean\",\n];\n\nfunction parsePorts(expression) {\n var ports = [];\n\n function addPort(name) {\n if (portsToIgnore.indexOf(name) !== -1) return;\n if (\n ports.some(function (p) {\n return p === name;\n })\n )\n return;\n\n ports.push(name);\n }\n\n // First remove all strings\n expression = expression\n .replace(/\\\"([^\\\"]*)\\\"/g, \"\")\n .replace(/\\'([^\\']*)\\'/g, \"\");\n\n // Extract identifiers\n var identifiers = expression.matchAll(/[a-zA-Z\\_\\$][a-zA-Z0-9\\.\\_\\$]*/g);\n for (const _id of identifiers) {\n var name = _id[0];\n if (name.indexOf(\".\") !== -1) {\n name = name.split(\".\")[0]; // Take first symbol on \".\" sequence\n }\n\n addPort(name);\n }\n\n return ports;\n}\n\nfunction updatePorts(nodeId, expression, editorConnection) {\n var portNames = parsePorts(expression);\n\n var ports = portNames.map(function (name) {\n return {\n group: \"Parameters\",\n name: name,\n type: {\n name: \"*\",\n editAsType: \"string\",\n },\n plug: \"input\",\n };\n });\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nfunction evalCompileWarnings(editorConnection, node) {\n try {\n new Function(node.parameters.expression);\n editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"expression-compile-error\"\n );\n } catch (e) {\n editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"expression-compile-error\",\n {\n message: e.message,\n }\n );\n }\n}\n\nexport default {\n node: ExpressionNode,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.Expression\", function (node) {\n if (node.parameters.expression) {\n updatePorts(\n node.id,\n node.parameters.expression,\n context.editorConnection\n );\n evalCompileWarnings(context.editorConnection, node);\n }\n node.on(\"parameterUpdated\", function (event) {\n if (event.name === \"expression\") {\n updatePorts(\n node.id,\n node.parameters.expression,\n context.editorConnection\n );\n evalCompileWarnings(context.editorConnection, node);\n }\n });\n });\n },\n};\n","//this just assumes the base url is '/' always\nexport function getAbsoluteUrl(_url) {\n //convert to string in case the _url is a Cloud File (which is an object with a custom toString())\n const url = String(_url);\n\n //only add a the base url if this is a local URL (e.g. not a https url or base64 string)\n if (\n !url ||\n url[0] === \"/\" ||\n url.includes(\"://\") ||\n url.startsWith(\"data:\")\n ) {\n return url;\n }\n\n return (Noodl.baseUrl || \"/\") + url;\n}\n\n/**\n * Log an error thrown by the JavaScript nodes.\n *\n * @param {any} error\n */\nexport function logJavaScriptNodeError(error) {\n if (typeof error === \"string\") {\n console.log(\"Error in JS node run code.\", error);\n } else {\n console.log(\n \"Error in JS node run code.\",\n Object.getPrototypeOf(error).constructor.name + \": \" + error.message,\n error.stack\n );\n }\n}\n","import { Model } from \"./model\";\nimport { getAbsoluteUrl } from \"./utils\";\n\nvar userFunctionsCache = {};\n\nfunction JavascriptNodeParser(code, options) {\n this.inputs = {};\n this.outputs = {};\n this.error = undefined;\n this.code = code;\n\n const node = options ? options.node : undefined;\n this._initializeAPIs();\n\n var userCode = userFunctionsCache[code];\n if (!userCode) {\n try {\n userCode = new Function(\n [\"define\", \"script\", \"Node\", \"Component\"],\n JavascriptNodeParser.getCodePrefix() + code\n );\n userFunctionsCache[code] = userCode;\n } catch (e) {\n this.error = e.message;\n console.error(e);\n }\n }\n if (userCode) {\n try {\n userCode(\n this.define.bind(this),\n this.script.bind(this),\n this.apis.Node,\n node ? JavascriptNodeParser.getComponentScopeForNode(node) : {}\n ); //noodlJavascriptAPI);\n\n this._afterSourced();\n } catch (e) {\n this.error = e.message;\n console.error(e);\n }\n }\n}\n\n// First generation API\nJavascriptNodeParser.prototype.define = function (userObject) {\n this.inputs = userObject.inputs || {};\n this.outputs = userObject.outputs || {};\n this.setup = userObject.setup;\n this.change = userObject.run || userObject.change;\n this.destroy = userObject.destroy;\n\n this.definedObject = userObject;\n};\n\n// Second generation API\nfunction _scriptExtend(_this) {\n var _extended = {\n inputs: _this.inputs || {},\n outputs: _this.outputs || {},\n\n setup(inputs, outputs) {\n this.inputs = inputs;\n this.outputs = outputs;\n\n this.setOutputs = function (states) {\n for (var key in states) {\n this.outputs[key] = states[key];\n this.flagOutputDirty(key);\n }\n };\n\n if (_this.methods) {\n for (var key in _this.methods) {\n this[key] = _this.methods[key];\n }\n }\n\n _this.setup && _this.setup.apply(this);\n },\n\n destroy(inputs, outputs) {\n this.inputs = inputs;\n this.outputs = outputs;\n\n _this.destroy && _this.destroy.apply(this);\n },\n\n change(inputs, outputs) {\n this.inputs = inputs;\n this.outputs = outputs;\n\n // Detect property changed\n var old = this._oldInputs || {};\n\n if (_this.changed) {\n for (var key in inputs) {\n if (inputs[key] !== old[key]) {\n var changedFunction = _this.changed[key];\n if (typeof changedFunction === \"function\")\n changedFunction.apply(this, [inputs[key], old[key]]);\n }\n }\n }\n\n this._oldInputs = Object.assign({}, inputs);\n },\n };\n\n if (_this.signals) {\n for (var key in _this.signals) {\n _extended[key] = _this.signals[key];\n\n _extended.inputs[key] = \"signal\";\n }\n }\n\n return _extended;\n}\n\nJavascriptNodeParser.prototype.script = function (userObject) {\n var _userObjectExtended = _scriptExtend(userObject);\n this.inputs = _userObjectExtended.inputs || {};\n this.outputs = _userObjectExtended.outputs || {};\n this.setup = _userObjectExtended.setup;\n this.change = _userObjectExtended.run || _userObjectExtended.change;\n this.destroy = _userObjectExtended.destroy;\n\n this.definedObject = _userObjectExtended;\n};\n\n// Third generation API\n\n// Node.Setters.Hej = function(value) {...}\n// Node.OnInputsChanged = function() {...}\n// Node.Signals.Hej = function(value) {...}\n// Node.OnInit = function() {...}\n// Node.OnDestroy = function() {...}\n// Node.Inputs.A\n// Node.Outputs.A = 10;\n// Node.Outputs.Done()\n// Node.setOutputs({...})\n// Component.Object, Component.ParentObject\nJavascriptNodeParser.prototype._initializeAPIs = function () {\n this.apis = {};\n\n this.apis.Node = {\n Inputs: {},\n Outputs: {},\n Signals: {},\n Setters: {},\n };\n};\n\nJavascriptNodeParser.prototype._afterSourced = function () {\n if (this.definedObject !== undefined) return; // a legacy API have been used\n\n var _Node = this.apis.Node;\n\n // Merge inputs and outputs from node extension\n this.inputs = Object.assign({}, _Node.Inputs || {});\n this.outputs = Object.assign({}, _Node.Outputs || {});\n\n this.setup = function (inputs, outputs) {\n const _this = this;\n\n _Node.setOutputs = function (_outputs) {\n for (var key in _outputs) {\n outputs[key] = _outputs[key];\n _this.flagOutputDirty(key);\n }\n };\n\n _Node.OnInit && _Node.OnInit.apply(this);\n };\n\n this.destroy = _Node.OnDestroy || this.destory;\n this.change = (inputs, outputs, changedInputs) => {\n for (var key in changedInputs) {\n if (typeof _Node.Setters[key] === \"function\") {\n _Node.Setters[key](inputs[key]);\n }\n }\n\n if (typeof _Node.OnInputsChanged === \"function\") {\n _Node.OnInputsChanged();\n }\n };\n\n this.definedObject = {\n inputs: this.inputs,\n outputs: this.outputs,\n setup: this.setup,\n destroy: this.destroy,\n change: this.change,\n };\n\n // Set all signals as signal inputs\n if (_Node.Signals !== undefined) {\n for (var key in _Node.Signals) {\n if (typeof _Node.Signals[key] === \"function\") {\n this.inputs[key] = \"signal\";\n\n this.definedObject[key] = _Node.Signals[key];\n }\n }\n }\n};\n\nJavascriptNodeParser.createFromCode = function (code, options) {\n return new JavascriptNodeParser(code, options);\n};\n\nJavascriptNodeParser.createFromURL = function (url, callback, options) {\n url = getAbsoluteUrl(url);\n\n var xhr = new window.XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.onreadystatechange = function () {\n // XMLHttpRequest.DONE = 4, but torped runtime doesn't support enum\n if (this.readyState === 4 || this.readyState === XMLHttpRequest.DONE) {\n callback(new JavascriptNodeParser(this.response));\n }\n };\n xhr.onerror = function () {\n console.log(\"Failed to request\", url);\n };\n xhr.send();\n};\n\nJavascriptNodeParser.parseAndAddPortsFromScript = function (\n script,\n ports,\n options\n) {\n // Extract inputs and outputs\n function _exists(port) {\n if (typeof port === \"string\")\n return ports.find((p) => p.name === port) !== undefined;\n else\n return (\n ports.find((p) => p.name === port.name && p.plug === port.plug) !==\n undefined\n );\n }\n\n function _addPortsFromMatch(match, options) {\n if (match === undefined || match === null) return;\n\n const unique = {};\n for (const _s of match) {\n let name = _s[1];\n if (name === undefined) continue;\n\n unique[name] = true;\n }\n\n Object.keys(unique).forEach((p) => {\n if (\n _exists({\n name: options.prefix + p,\n plug: options.plug,\n })\n )\n return;\n\n ports.push({\n name: options.prefix + p,\n displayName: p,\n plug: options.plug,\n type: options.type,\n group: options.group,\n });\n });\n }\n\n // const scriptWithoutComments = script.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g,''); // Remove comments\n\n // Regular Inputs. notation\n if (!options.skipInputs) {\n _addPortsFromMatch(script.matchAll(/Inputs\\.([A-Za-z0-9_]+)/g), {\n type: options.inputType || \"*\",\n plug: \"input\",\n group: options.inputGroup || \"Inputs\",\n prefix: options.inputPrefix || \"\",\n });\n\n // Inputs with Inputs[\"A\"] notation\n _addPortsFromMatch(\n script.matchAll(/Inputs\\s*\\[\\s*(?:'|\")(.*)(?:'|\")\\s*\\]/g),\n {\n type: options.inputType || \"*\",\n plug: \"inputs\",\n group: options.inputGroup || \"Inputs\",\n prefix: options.inputPrefix || \"\",\n }\n );\n }\n\n if (!options.skipOutputs) {\n if (!options.skipOutputSignals) {\n // Output signals, Output.Done()\n _addPortsFromMatch(\n script.matchAll(/Outputs\\.([A-Za-z0-9]+)\\s*\\(\\s*\\)/g),\n {\n type: \"signal\",\n plug: \"output\",\n group: \"Outputs\",\n prefix: options.outputPrefix || \"\",\n }\n );\n\n // Output signals, Outputs[\"Done\"]()\n _addPortsFromMatch(\n script.matchAll(/Outputs\\s*\\[\\s*(?:'|\")(.*)(?:'|\")\\s*\\]\\(\\s*\\)/g),\n {\n type: \"signal\",\n plug: \"output\",\n group: \"Outputs\",\n prefix: options.outputPrefix || \"\",\n }\n );\n }\n\n if (!options.skipRegularOutputs) {\n // Regular output Outputs. notation\n _addPortsFromMatch(script.matchAll(/Outputs\\.([A-Za-z0-9_]+)/g), {\n type: \"*\",\n plug: \"output\",\n group: \"Outputs\",\n prefix: options.outputPrefix || \"\",\n });\n\n // Outputs with Outputs[\"A\"] notation\n _addPortsFromMatch(script.matchAll(/Outputs\\s*\\[\\s*\\\"([^\\\"]*)\\\"\\s*\\]/g), {\n type: \"*\",\n plug: \"output\",\n group: \"Outputs\",\n prefix: options.outputPrefix || \"\",\n });\n }\n }\n};\n\nJavascriptNodeParser.prototype.getPorts = function () {\n var ports = [];\n\n var self = this;\n\n Object.keys(this.inputs).forEach(function (name) {\n var inputPort = self.inputs[name];\n\n var port = {\n name: name,\n plug: \"input\",\n };\n if (typeof inputPort === \"string\") {\n port.type = {\n name: inputPort,\n };\n port.group = \"Inputs\";\n } else {\n for (var p in inputPort) {\n port[p] = inputPort[p];\n }\n }\n\n ports.push(port);\n });\n\n Object.keys(this.outputs).forEach(function (name) {\n ports.push({\n name: name,\n type: {\n name: self.outputs[name],\n },\n plug: \"output\",\n group: \"Outputs\",\n });\n });\n\n JavascriptNodeParser.parseAndAddPortsFromScript(this.code, ports, {});\n\n return ports;\n};\n\nconst _componentScopes = {};\n\nfunction _findParentComponentStateModelId(node) {\n function getParentComponent(component) {\n let parent;\n if (component.getRoots().length > 0) {\n //visual\n const root = component.getRoots()[0];\n\n if (root.getVisualParentNode) {\n //regular visual node\n if (root.getVisualParentNode()) {\n parent = root.getVisualParentNode().nodeScope.componentOwner;\n }\n } else if (root.parentNodeScope) {\n //component instance node\n parent = component.parentNodeScope.componentOwner;\n }\n } else if (component.parentNodeScope) {\n parent = component.parentNodeScope.componentOwner;\n }\n\n //check that a parent exists and that the component is different\n if (\n parent &&\n parent.nodeScope &&\n parent.nodeScope.componentOwner !== component\n ) {\n //check if parent has a Component State node\n if (\n parent.nodeScope.getNodesWithType(\"net.noodl.ComponentObject\").length >\n 0\n ) {\n return parent;\n }\n\n if (parent.nodeScope.getNodesWithType(\"Component State\").length > 0) {\n return parent;\n }\n\n //if not, continue searching up the tree\n return getParentComponent(parent);\n }\n }\n\n const parent = getParentComponent(node.nodeScope.componentOwner);\n if (!parent) return;\n\n //this._internal.parentComponentName = parent.name;\n\n return \"componentState\" + parent.getInstanceId();\n}\n\nfunction _findForEachModel(node) {\n var component = node.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n return component !== undefined ? component._forEachModel : undefined;\n}\n\nJavascriptNodeParser.getComponentScopeForNode = function (node) {\n const componentId = node.nodeScope.componentOwner.getInstanceId();\n\n if (_componentScopes[componentId] === undefined) {\n _componentScopes[componentId] = {};\n\n const componentObject = (node.nodeScope.modelScope || Model).get(\n \"componentState\" + componentId\n );\n\n _componentScopes[componentId].Object = componentObject;\n }\n\n // This should be done each time, since the component can be moved\n const parentComponentObjectId = _findParentComponentStateModelId(node);\n const parentComponentObject =\n parentComponentObjectId !== undefined\n ? (node.nodeScope.modelScope || Model).get(parentComponentObjectId)\n : undefined;\n\n _componentScopes[componentId].ParentObject = parentComponentObject;\n\n // Set the for each model\n _componentScopes[componentId].RepeaterObject = _findForEachModel(node);\n\n return _componentScopes[componentId];\n};\n\nJavascriptNodeParser.getCodePrefix = function () {\n // API\n return \"const Script = (typeof Node !== 'undefined')?Node:undefined;\\n\";\n};\n\nJavascriptNodeParser.createNoodlAPI = function () {\n // If we are running in browser mode and there is a global Noodl API object, use it. If not\n // create a new one for this scope.\n return typeof window !== \"undefined\" && window.Noodl !== undefined\n ? window.Noodl\n : {};\n};\n\nexport { JavascriptNodeParser };\n","import { JavascriptNodeParser } from \"../../javascriptnodeparser\";\nimport { logJavaScriptNodeError } from \"../../utils\";\n\nconst SimpleJavascriptNode = {\n name: \"JavaScriptFunction\",\n displayNodeName: \"Function\",\n docs: \"https://docs.noodl.net/nodes/javascript/function\",\n category: \"CustomCode\",\n color: \"javascript\",\n nodeDoubleClickAction: {\n focusPort: \"Script\",\n },\n searchTags: [\"javascript\"],\n exportDynamicPorts: true,\n initialize() {\n this._internal.inputValues = {};\n this._internal.outputValues = {};\n\n this._internal.outputValuesProxy = new Proxy(this._internal.outputValues, {\n set: (obj, prop, value) => {\n //a function node can continue running after it has been deleted. E.g. with timeouts or event listeners that hasn't been removed.\n //if the node is deleted, just do nothing\n if (this._deleted) {\n return;\n }\n\n //only send outputs when they change.\n //Some Noodl projects rely on this behavior, so changing it breaks backwards compability\n if (value !== this._internal.outputValues[prop]) {\n this.registerOutputIfNeeded(\"out-\" + prop);\n\n this._internal.outputValues[prop] = value;\n this.flagOutputDirty(\"out-\" + prop);\n }\n return true;\n },\n });\n\n this._internal._this = {};\n },\n getInspectInfo() {\n return [\n {\n type: \"value\",\n value: {\n inputs: this._internal.inputValues,\n outputs: this._internal.outputValues,\n },\n },\n ];\n },\n inputs: {\n scriptInputs: {\n type: {\n name: \"proplist\",\n allowEditOnly: true,\n },\n group: \"Script Inputs\",\n set(value) {\n // ignore\n },\n },\n scriptOutputs: {\n type: {\n name: \"proplist\",\n allowEditOnly: true,\n },\n group: \"Script Outputs\",\n set(value) {\n // ignore\n },\n },\n functionScript: {\n displayName: \"Script\",\n plug: \"input\",\n type: {\n name: \"string\",\n allowEditOnly: true,\n codeeditor: \"javascript\",\n },\n group: \"General\",\n set(script) {\n if (script === undefined) {\n this._internal.func = undefined;\n return;\n }\n\n this._internal.func = this.parseScript(script);\n\n if (!this.isInputConnected(\"run\")) this.scheduleRun();\n },\n },\n run: {\n type: \"signal\",\n displayName: \"Run\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleRun();\n },\n },\n },\n outputs: {},\n methods: {\n scheduleRun() {\n if (this.runScheduled) return;\n this.runScheduled = true;\n\n this.scheduleAfterInputsHaveUpdated(() => {\n this.runScheduled = false;\n\n if (!this._deleted) {\n this.runScript();\n }\n });\n },\n runScript: async function () {\n const func = this._internal.func;\n\n if (func === undefined) return;\n\n const inputs = this._internal.inputValues;\n const outputs = this._internal.outputValuesProxy;\n\n // Prepare send signal functions\n for (const key in this.model.outputPorts) {\n if (this._isSignalType(key)) {\n const _sendSignal = () => {\n if (this.hasOutput(key)) this.sendSignalOnOutput(key);\n };\n this._internal.outputValues[key.substring(\"out-\".length)] =\n _sendSignal;\n this._internal.outputValues[key.substring(\"out-\".length)].send =\n _sendSignal;\n }\n }\n\n try {\n await func.apply(this._internal._this, [\n inputs,\n outputs,\n JavascriptNodeParser.createNoodlAPI(this.nodeScope.modelScope),\n JavascriptNodeParser.getComponentScopeForNode(this),\n ]);\n } catch (e) {\n logJavaScriptNodeError(e);\n\n if (\n this.context.editorConnection &&\n this.context.isWarningTypeEnabled(\"javascriptExecution\")\n ) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"js-function-run-waring\",\n {\n showGlobally: true,\n message: e.message,\n stack: e.stack,\n }\n );\n }\n }\n },\n setScriptInputValue(name, value) {\n this._internal.inputValues[name] = value;\n\n if (!this.isInputConnected(\"run\")) this.scheduleRun();\n },\n getScriptOutputValue(name) {\n if (this._isSignalType(name)) {\n return undefined;\n }\n return this._internal.outputValues[name];\n },\n setScriptInputType(name, type) {\n this._internal.inputTypes[name] = type;\n },\n setScriptOutputType(name, type) {\n this._internal.outputTypes[name] = type;\n },\n parseScript(script) {\n var func;\n try {\n const AsyncFunction = Object.getPrototypeOf(\n async function () {}\n ).constructor;\n func = new AsyncFunction(\n \"Inputs\",\n \"Outputs\",\n \"Noodl\",\n \"Component\",\n JavascriptNodeParser.getCodePrefix() + script\n );\n } catch (e) {\n console.log(\"Error while parsing action script: \" + e);\n }\n\n return func;\n },\n _isSignalType(name) {\n // This will catch signals in script that may not have been delivered by the editor yet\n return (\n this.model.outputPorts[name] &&\n this.model.outputPorts[name].type === \"signal\"\n );\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"in-\")) {\n const n = name.substring(\"in-\".length);\n\n const input = {\n set: this.setScriptInputValue.bind(this, n),\n };\n\n //make sure we register the type as well, so Noodl resolves types like color styles to an actual color\n if (this.model && this.model.parameters[\"intype-\" + n]) {\n input.type = this.model.parameters[\"intype-\" + n];\n }\n\n this.registerInput(name, input);\n }\n\n if (name.startsWith(\"intype-\")) {\n const n = name.substring(\"intype-\".length);\n\n this.registerInput(name, {\n set(value) {\n //make sure we register the type as well, so Noodl resolves types like color styles to an actual color\n if (this.hasInput(\"in\" + n)) {\n this.getInput(\"in\" + n).type = value;\n }\n },\n });\n }\n\n if (name.startsWith(\"outtype-\")) {\n this.registerInput(name, {\n set() {}, // Ignore\n });\n }\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name.startsWith(\"out-\"))\n return this.registerOutput(name, {\n getter: this.getScriptOutputValue.bind(\n this,\n name.substring(\"out-\".length)\n ),\n });\n },\n },\n};\n\nfunction _parseScriptForErrorsAndPorts(script, name, node, context, ports) {\n // Clear run warnings if the script is edited\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"js-function-run-waring\"\n );\n\n if (script === undefined) {\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"js-function-parse-waring\"\n );\n return;\n }\n\n try {\n const AsyncFunction = Object.getPrototypeOf(\n async function () {}\n ).constructor;\n new AsyncFunction(\"Inputs\", \"Outputs\", \"Noodl\", \"Component\", script);\n\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"js-function-parse-waring\"\n );\n } catch (e) {\n context.editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"js-function-parse-waring\",\n {\n showGlobally: true,\n message: e.message,\n }\n );\n }\n\n JavascriptNodeParser.parseAndAddPortsFromScript(script, ports, {\n inputPrefix: \"in-\",\n outputPrefix: \"out-\",\n });\n}\n\nconst inputTypeEnums = [\n {\n value: \"string\",\n label: \"String\",\n },\n {\n value: \"boolean\",\n label: \"Boolean\",\n },\n {\n value: \"number\",\n label: \"Number\",\n },\n {\n value: \"object\",\n label: \"Object\",\n },\n {\n value: \"date\",\n label: \"Date\",\n },\n {\n value: \"array\",\n label: \"Array\",\n },\n {\n value: \"color\",\n label: \"Color\",\n },\n];\n\nexport default {\n node: SimpleJavascriptNode,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n function _updatePorts() {\n var ports = [];\n\n const _outputTypeEnums = inputTypeEnums.concat([\n {\n value: \"signal\",\n label: \"Signal\",\n },\n ]);\n\n // Outputs\n if (\n node.parameters[\"scriptOutputs\"] !== undefined &&\n node.parameters[\"scriptOutputs\"].length > 0\n ) {\n node.parameters[\"scriptOutputs\"].forEach((p) => {\n // Type for output\n ports.push({\n name: \"outtype-\" + p.label,\n displayName: \"Type\",\n editorName: p.label + \" | Type\",\n plug: \"input\",\n type: {\n name: \"enum\",\n enums: _outputTypeEnums,\n allowEditOnly: true,\n },\n default: \"string\",\n parent: \"scriptOutputs\",\n parentItemId: p.id,\n });\n\n // Value for output\n ports.push({\n name: \"out-\" + p.label,\n displayName: p.label,\n plug: \"output\",\n type: node.parameters[\"outtype-\" + p.label] || \"*\",\n group: \"Outputs\",\n });\n });\n }\n\n // Inputs\n if (\n node.parameters[\"scriptInputs\"] !== undefined &&\n node.parameters[\"scriptInputs\"].length > 0\n ) {\n node.parameters[\"scriptInputs\"].forEach((p) => {\n // Type for input\n ports.push({\n name: \"intype-\" + p.label,\n displayName: \"Type\",\n editorName: p.label + \" | Type\",\n plug: \"input\",\n type: {\n name: \"enum\",\n enums: inputTypeEnums,\n allowEditOnly: true,\n },\n default: \"string\",\n parent: \"scriptInputs\",\n parentItemId: p.id,\n });\n\n // Default Value for input\n ports.push({\n name: \"in-\" + p.label,\n displayName: p.label,\n plug: \"input\",\n type: node.parameters[\"intype-\" + p.label] || \"string\",\n group: \"Inputs\",\n });\n });\n }\n\n _parseScriptForErrorsAndPorts(\n node.parameters[\"functionScript\"],\n \"Script \",\n node,\n context,\n ports\n );\n\n // Push output ports that are signals directly to the model, it's needed by the initial run of\n // the script function\n ports.forEach((p) => {\n if (p.type === \"signal\" && p.plug === \"output\") {\n node.outputPorts[p.name] = p;\n }\n });\n\n context.editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n _updatePorts();\n node.on(\"parameterUpdated\", function (ev) {\n _updatePorts();\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.JavaScriptFunction\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"JavaScriptFunction\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { Model } from \"./model\";\n\n// Get and set proxy\n/*const proxies = {}\nconst _collectionProxyHandler = {\n get: function(target,prop,receiver) {\n if(typeof target[prop] === 'function')\n return target[prop].bind(target);\n else if(prop === 'length')\n return target.size()\n else if(target.items[prop] !== undefined)\n return target.get(prop)\n else\n return Reflect.get(target,prop,receiver)\n },\n set: function(obj,prop,value) {\n if(prop === 'id') {\n console.log(`Noodl.Object warning: id is readonly (Id is ${obj.id}, trying to set to ${value})`);\n return true; //if a proxy doesn't return true an exception will be thrown\n }\n else\n return Reflect.set(target,prop,receiver)\n }\n}\n\nfunction Collection(id) {\n this.id = id;\n this.items = [];\n}\n\nvar collections = Collection._collections = {};\n\nCollection.create = function(items) {\n const name = Model.guid();\n collections[name] = new Collection(name);\n if(items) {\n collections[name].set(items);\n }\n return collections[name];\n}\n\nCollection.get = function(name) {\n if(name === undefined) name = Model.guid();\n if(!collections[name]) {\n collections[name] = new Collection(name);\n proxies[name] = new Proxy(collections[name],_collectionProxyHandler);\n }\n return proxies[name];\n}\n\nCollection.instanceOf = function(collection) {\n return collection && (collection instanceof Collection || collection.target instanceof Collection);\n}\n\nCollection.exists = function(name) {\n return collections[name] !== undefined;\n}\n\nCollection.prototype.getId = function() {\n return this.id;\n}\n\nCollection.prototype.on = function(event,listener) {\n if(!this.listeners) this.listeners = {};\n if(!this.listeners[event]) this.listeners[event] = [];\n this.listeners[event].push(listener);\n}\n\nCollection.prototype.off = function(event,listener) {\n if(!this.listeners) return;\n if(!this.listeners[event]) return;\n var idx = this.listeners[event].indexOf(listener);\n if(idx!==-1) this.listeners[event].splice(idx,1);\n}\n\nCollection.prototype.notify = async function(event,args) {\n if(!this.listeners) return;\n if(!this.listeners[event]) return;\n \n var l = this.listeners[event].slice(); //clone in case listeners array is modified in the callbacks\n for(var i = 0; i < l.length; i++) {\n await l[i](args);\n } \n}\n\nCollection.prototype.set = function(src) {\n var length,i;\n \n if(src === this) return;\n \n function keyIndex(a) {\n var keys = {};\n var length = a.length;\n for(var i = 0; i < length; i++) { \n var item = a[i]; \n keys[item.getId()] = item;\n }\n return keys;\n }\n \n // Src can be a collection, or an array\n var src = Collection.instanceOf(src)?src.items:src;\n var bItems = [];\n length = src.length;\n for(i = 0; i < length; i++) {\n var item = src[i];\n if(Model.instanceOf(item))\n bItems.push(item);\n else\n bItems.push(Model.create(item));\n }\n \n var aItems = this.items; \n var aKeys = keyIndex(aItems);\n var bKeys = keyIndex(bItems);\n \n // First remove all items not in the new collection\n length = aItems.length;\n for(i = 0; i < length; i++) {\n if(!bKeys.hasOwnProperty(aItems[i].getId())) {\n // This item is not present in new collection, remove it\n this.removeAtIndex(i);\n i--;\n length--;\n }\n }\n \n // Reorder items\n for(i = 0; i < Math.min(aItems.length,bItems.length); i++) {\n if(aItems[i] !== bItems[i]) {\n if(aKeys.hasOwnProperty(bItems[i].getId())) { \n // The bItem exist in the collection but is in the wrong place\n this.remove(bItems[i]);\n }\n\n // This is a new item, add it at correct index\n this.addAtIndex(bItems[i],i);\n } \n }\n \n // Add remaining items\n for(i = aItems.length; i < bItems.length; i++) {\n this.add(bItems[i]);\n }\n \n}\n\nCollection.prototype.contains = function(item) {\n return this.items.indexOf(item)!==-1;\n}\n\nCollection.prototype.add = async function(item) {\n if(this.contains(item)) return; // Already contains item\n \n this.items.push(item);\n await this.notify('add',{item:item,index:this.items.length-1});\n await this.notify('change');\n await item.notify('add',{collection:this});\n}\n\nCollection.prototype.addAtIndex = async function(item,index) {\n if(this.contains(item)) return; // Already contains item\n\n this.items.splice(index,0,item);\n await this.notify('add',{item:item,index:index});\n await this.notify('change');\n await item.notify('add',{collection:this,index:index});\n}\n\nCollection.prototype.removeAtIndex = async function(idx) {\n var item = this.items[idx];\n this.items.splice(idx,1);\n await this.notify('remove',{item:item,index:idx});\n await this.notify('change');\n await item.notify('remove',{collection:this}); \n}\n\nCollection.prototype.remove = function(item) {\n var idx = this.items.indexOf(item);\n if(idx !== -1) this.removeAtIndex(idx);\n}\n\nCollection.prototype.size = function() {\n return this.items.length;\n}\n\nCollection.prototype.get = function(index) {\n return this.items[index];\n}\n\nCollection.prototype.each = function(callback) {\n for(var i = 0; i < this.items.length; i++) {\n callback(this.items[i],i);\n }\n}\n\nCollection.prototype.forEach = Collection.prototype.each;\n\nCollection.prototype.map = function(fn) {\n return this.items.map(fn);\n}\n\nCollection.prototype.filter = function(fn) {\n return this.items.filter(fn);\n}\n\nCollection.prototype.find = function(predicate, thisArg) {\n return this.items.find(predicate, thisArg);\n}\n\nCollection.prototype.findIndex = function(predicate, thisArg) {\n return this.items.findIndex(predicate, thisArg);\n} \n\nCollection.prototype.toJSON = function() {\n return this.map(function(m) {\n return m.toJSON()\n })\n}*/\n\n// ----\nObject.defineProperty(Array.prototype, \"items\", {\n enumerable: false,\n get() {\n return this;\n },\n set(data) {\n this.set(data);\n },\n});\nObject.defineProperty(Array.prototype, \"each\", {\n enumerable: false,\n writable: false,\n value: Array.prototype.forEach,\n});\nObject.defineProperty(Array.prototype, \"size\", {\n enumerable: false,\n writable: false,\n value() {\n return this.length;\n },\n});\nObject.defineProperty(Array.prototype, \"get\", {\n enumerable: false,\n writable: false,\n value(index) {\n return this[index];\n },\n});\nObject.defineProperty(Array.prototype, \"getId\", {\n enumerable: false,\n writable: false,\n value() {\n return this._id;\n },\n});\nObject.defineProperty(Array.prototype, \"id\", {\n enumerable: false,\n get() {\n return this.getId();\n },\n});\nObject.defineProperty(Array.prototype, \"set\", {\n enumerable: false,\n writable: false,\n value(src) {\n var length, i;\n\n if (src === this) return;\n\n src = src || []; //handle if src is undefined\n\n function keyIndex(a) {\n var keys = {};\n var length = a.length;\n for (var i = 0; i < length; i++) {\n var item = a[i];\n keys[item.getId()] = item;\n }\n return keys;\n }\n\n // Src can be a collection, or an array\n var bItems = [];\n length = src.length;\n for (i = 0; i < length; i++) {\n var item = src[i];\n if (Model.instanceOf(item)) bItems.push(item);\n else bItems.push(Model.create(item));\n }\n\n var aItems = this.items;\n var aKeys = keyIndex(aItems);\n var bKeys = keyIndex(bItems);\n\n // First remove all items not in the new collection\n length = aItems.length;\n for (i = 0; i < length; i++) {\n if (!bKeys.hasOwnProperty(aItems[i].getId())) {\n // This item is not present in new collection, remove it\n this.removeAtIndex(i);\n i--;\n length--;\n }\n }\n\n // Reorder items\n for (i = 0; i < Math.min(aItems.length, bItems.length); i++) {\n if (aItems[i] !== bItems[i]) {\n if (aKeys.hasOwnProperty(bItems[i].getId())) {\n // The bItem exist in the collection but is in the wrong place\n this.remove(bItems[i]);\n }\n\n // This is a new item, add it at correct index\n this.addAtIndex(bItems[i], i);\n }\n }\n\n // Add remaining items\n for (i = aItems.length; i < bItems.length; i++) {\n this.add(bItems[i]);\n }\n },\n});\n\nObject.defineProperty(Array.prototype, \"notify\", {\n enumerable: false,\n writable: false,\n value: async function (event, args) {\n if (!this._listeners) return;\n if (!this._listeners[event]) return;\n\n var l = this._listeners[event].slice(); //clone in case listeners array is modified in the callbacks\n for (var i = 0; i < l.length; i++) {\n await l[i](args);\n }\n },\n});\n\nObject.defineProperty(Array.prototype, \"contains\", {\n enumerable: false,\n writable: false,\n value(item) {\n return this.indexOf(item) !== -1;\n },\n});\n\nObject.defineProperty(Array.prototype, \"add\", {\n enumerable: false,\n writable: false,\n value: async function (item) {\n if (this.contains(item)) return; // Already contains item\n\n this.items.push(item);\n await this.notify(\"add\", { item: item, index: this.items.length - 1 });\n await this.notify(\"change\");\n await item.notify(\"add\", { collection: this });\n },\n});\n\nObject.defineProperty(Array.prototype, \"remove\", {\n enumerable: false,\n writable: false,\n value(item) {\n var idx = this.items.indexOf(item);\n if (idx !== -1) this.removeAtIndex(idx);\n },\n});\n\nObject.defineProperty(Array.prototype, \"addAtIndex\", {\n enumerable: false,\n writable: false,\n value: async function (item, index) {\n if (this.contains(item)) return; // Already contains item\n\n this.items.splice(index, 0, item);\n await this.notify(\"add\", { item: item, index: index });\n await this.notify(\"change\");\n await item.notify(\"add\", { collection: this, index: index });\n },\n});\n\nObject.defineProperty(Array.prototype, \"removeAtIndex\", {\n enumerable: false,\n writable: false,\n value: async function (idx) {\n var item = this.items[idx];\n this.items.splice(idx, 1);\n await this.notify(\"remove\", { item: item, index: idx });\n await this.notify(\"change\");\n await item.notify(\"remove\", { collection: this });\n },\n});\n\nObject.defineProperty(Array.prototype, \"on\", {\n enumerable: false,\n writable: false,\n value(event, listener) {\n if (!this._listeners)\n Object.defineProperty(this, \"_listeners\", {\n enumerable: false,\n writable: false,\n value: {},\n });\n if (!this._listeners[event]) this._listeners[event] = [];\n this._listeners[event].push(listener);\n },\n});\n\nObject.defineProperty(Array.prototype, \"off\", {\n enumerable: false,\n writable: false,\n value(event, listener) {\n if (!this._listeners) return;\n if (!this._listeners[event]) return;\n var idx = this._listeners[event].indexOf(listener);\n if (idx !== -1) this._listeners[event].splice(idx, 1);\n },\n});\n\nclass Collection extends Array {}\n\nconst collections = (Collection._collections = {});\n\nCollection.create = function (items) {\n const name = Model.guid();\n collections[name] = new Collection();\n Object.defineProperty(collections[name], \"_id\", {\n enumerable: false,\n writable: false,\n value: name,\n });\n if (items) {\n collections[name].set(items);\n }\n return collections[name];\n};\n\n/**\n * @param {string} name\n * @returns {Collection}\n */\nCollection.get = function (name) {\n if (name === undefined) name = Model.guid();\n if (!collections[name]) {\n collections[name] = new Collection();\n Object.defineProperty(collections[name], \"_id\", {\n enumerable: false,\n writable: false,\n value: name,\n });\n }\n\n return collections[name];\n};\n\nCollection.instanceOf = function (collection) {\n return collection instanceof Collection;\n};\n\nCollection.exists = function (name) {\n return collections[name] !== undefined;\n};\n\nexport { Collection };\n","import { CloudStore } from \"./cloudstore\";\nimport { Model } from \"../model\";\n\nfunction convertVisualFilter(query, options) {\n var inputs = options.queryParameters;\n\n if (query.combinator !== undefined && query.rules !== undefined) {\n if (query.rules.length === 0) return;\n else if (query.rules.length === 1)\n return convertVisualFilter(query.rules[0], options);\n else {\n const _res = {};\n const _op = \"$\" + query.combinator;\n _res[_op] = [];\n query.rules.forEach((r) => {\n var cond = convertVisualFilter(r, options);\n if (cond !== undefined) _res[_op].push(cond);\n });\n\n return _res;\n }\n } else if (query.operator === \"related to\") {\n var value = query.input !== undefined ? inputs[query.input] : undefined;\n if (value === undefined) return;\n\n return {\n $relatedTo: {\n object: {\n __type: \"Pointer\",\n objectId: value,\n className: query.relatedTo,\n },\n key: query.relationProperty,\n },\n };\n } else {\n const _res = {};\n var cond;\n var value = query.input !== undefined ? inputs[query.input] : query.value;\n\n if (query.operator === \"exist\") {\n _res[query.property] = { $exists: true };\n return _res;\n } else if (query.operator === \"not exist\") {\n _res[query.property] = { $exists: false };\n return _res;\n }\n\n if (value === undefined) return;\n\n if (CloudStore._collections[options.collectionName])\n var schema = CloudStore._collections[options.collectionName].schema;\n\n var propertyType =\n schema && schema.properties && schema.properties[query.property]\n ? schema.properties[query.property].type\n : undefined;\n\n if (propertyType === \"Date\") {\n if (!(value instanceof Date)) value = new Date(value.toString());\n value = { __type: \"Date\", iso: value.toISOString() };\n }\n\n if (query.operator === \"greater than\") cond = { $gt: value };\n else if (query.operator === \"greater than or equal to\")\n cond = { $gte: value };\n else if (query.operator === \"less than\") cond = { $lt: value };\n else if (query.operator === \"less than or equal to\") cond = { $lte: value };\n else if (query.operator === \"equal to\") cond = { $eq: value };\n else if (query.operator === \"not equal to\") cond = { $ne: value };\n else if (query.operator === \"points to\") {\n var targetClass =\n schema && schema.properties && schema.properties[query.property]\n ? schema.properties[query.property].targetClass\n : undefined;\n\n cond = {\n $eq: { __type: \"Pointer\", objectId: value, className: targetClass },\n };\n } else if (query.operator === \"contain\") {\n cond = { $regex: value, $options: \"i\" };\n }\n\n _res[query.property] = cond;\n\n return _res;\n }\n}\n\nfunction matchesQuery(model, query) {\n var match = true;\n\n if (query === undefined) return true;\n\n if (query[\"$and\"] !== undefined) {\n query[\"$and\"].forEach((q) => {\n match &= matchesQuery(model, q);\n });\n } else if (query[\"$or\"] !== undefined) {\n match = false;\n query[\"$or\"].forEach((q) => {\n match |= matchesQuery(model, q);\n });\n } else {\n var keys = Object.keys(query);\n keys.forEach((k) => {\n if (k === \"objectId\") {\n if (query[k][\"$eq\"] !== undefined)\n match &= model.getId() === query[k][\"$eq\"];\n else if (query[k][\"$in\"] !== undefined)\n match &= query[k][\"$in\"].indexOf(model.getId()) !== -1;\n } else if (k === \"$relatedTo\") {\n match = false; // cannot resolve relation queries locally\n } else {\n var value = model.get(k);\n if (\n query[k][\"$eq\"] !== undefined &&\n query[k][\"$eq\"].__type === \"Pointer\"\n )\n match &= value === query[k][\"$eq\"].objectId;\n else if (query[k][\"$eq\"] !== undefined)\n match &= value == query[k][\"$eq\"];\n else if (query[k][\"$ne\"] !== undefined)\n match &= value != query[k][\"$ne\"];\n else if (query[k][\"$lt\"] !== undefined)\n match &= value < query[k][\"$lt\"];\n else if (query[k][\"$lte\"] !== undefined)\n match &= value <= query[k][\"$lt\"];\n else if (query[k][\"$gt\"] !== undefined)\n match &= value > query[k][\"$gt\"];\n else if (query[k][\"$gte\"] !== undefined)\n match &= value >= query[k][\"$gte\"];\n else if (query[k][\"$exists\"] !== undefined)\n match &= value !== undefined;\n else if (query[k][\"$in\"] !== undefined)\n match &= query[k][\"$in\"].indexOf(value) !== -1;\n else if (query[k][\"$nin\"] !== undefined)\n match &= query[k][\"$in\"].indexOf(value) === -1;\n else if (query[k][\"$regex\"] !== undefined)\n match &= new RegExp(query[k][\"$regex\"], query[k][\"$options\"]).test(\n value\n );\n }\n });\n }\n return match;\n}\n\nfunction compareObjects(sort, a, b) {\n for (var i = 0; i < sort.length; i++) {\n let _s = sort[i];\n if (_s[0] === \"-\") {\n // Descending\n let prop = _s.substring(1);\n if (a.get(prop) > b.get(prop)) return -1;\n else if (a.get(prop) < b.get(prop)) return 1;\n } else {\n // Ascending\n if (a.get(_s) > b.get(_s)) return 1;\n else if (a.get(_s) < b.get(_s)) return -1;\n }\n }\n return 0;\n}\n\nfunction convertVisualSorting(sorting) {\n return sorting.map((s) => {\n return (s.order === \"descending\" ? \"-\" : \"\") + s.property;\n });\n}\n\nfunction _value(v) {\n if (v instanceof Date && typeof v.toISOString === \"function\") {\n return {\n __type: \"Date\",\n iso: v.toISOString(),\n };\n }\n return v;\n}\n\n/**\n *\n * @param {Record<string, unknown>} filter\n * @param {{\n * collectionName?: string;\n * modelScope?: unknown;\n * error: (error: string) => void;\n * }} options\n * @returns\n */\nfunction convertFilterOp(filter, options) {\n const keys = Object.keys(filter);\n if (keys.length === 0) return {};\n if (keys.length !== 1) {\n return options.error(\n \"Filter must only have one key found \" + keys.join(\",\")\n );\n }\n\n const res = {};\n const key = keys[0];\n if (filter[\"and\"] !== undefined && Array.isArray(filter[\"and\"])) {\n res[\"$and\"] = filter[\"and\"].map((f) => convertFilterOp(f, options));\n } else if (filter[\"or\"] !== undefined && Array.isArray(filter[\"or\"])) {\n res[\"$or\"] = filter[\"or\"].map((f) => convertFilterOp(f, options));\n } else if (filter[\"idEqualTo\"] !== undefined) {\n res[\"objectId\"] = { $eq: filter[\"idEqualTo\"] };\n } else if (filter[\"idContainedIn\"] !== undefined) {\n res[\"objectId\"] = { $in: filter[\"idContainedIn\"] };\n } else if (filter[\"relatedTo\"] !== undefined) {\n const modelId = filter[\"relatedTo\"][\"id\"];\n if (modelId === undefined) {\n return options.error(\"Must provide id in relatedTo filter\");\n }\n\n const relationKey = filter[\"relatedTo\"][\"key\"];\n if (relationKey === undefined) {\n return options.error(\"Must provide key in relatedTo filter\");\n }\n\n const className =\n filter[\"relatedTo\"][\"className\"] ||\n (options.modelScope || Model).get(modelId)?._class;\n if (typeof className === \"undefined\") {\n // Either the pointer is loaded as an object or we allow passing in the className.\n return options.error(\"Must preload the Pointer or include className\");\n }\n\n res[\"$relatedTo\"] = {\n object: {\n __type: \"Pointer\",\n objectId: modelId,\n className,\n },\n key: relationKey,\n };\n } else if (typeof filter[key] === \"object\") {\n const opAndValue = filter[key];\n if (opAndValue[\"equalTo\"] !== undefined)\n res[key] = { $eq: _value(opAndValue[\"equalTo\"]) };\n else if (opAndValue[\"notEqualTo\"] !== undefined)\n res[key] = { $ne: _value(opAndValue[\"notEqualTo\"]) };\n else if (opAndValue[\"lessThan\"] !== undefined)\n res[key] = { $lt: _value(opAndValue[\"lessThan\"]) };\n else if (opAndValue[\"greaterThan\"] !== undefined)\n res[key] = { $gt: _value(opAndValue[\"greaterThan\"]) };\n else if (opAndValue[\"lessThanOrEqualTo\"] !== undefined)\n res[key] = { $lte: _value(opAndValue[\"lessThanOrEqualTo\"]) };\n else if (opAndValue[\"greaterThanOrEqualTo\"] !== undefined)\n res[key] = { $gte: _value(opAndValue[\"greaterThanOrEqualTo\"]) };\n else if (opAndValue[\"exists\"] !== undefined)\n res[key] = { $exists: opAndValue[\"exists\"] };\n else if (opAndValue[\"containedIn\"] !== undefined)\n res[key] = { $in: opAndValue[\"containedIn\"] };\n else if (opAndValue[\"notContainedIn\"] !== undefined)\n res[key] = { $nin: opAndValue[\"notContainedIn\"] };\n else if (opAndValue[\"pointsTo\"] !== undefined) {\n let schema = null;\n if (CloudStore._collections[options.collectionName]) {\n schema = CloudStore._collections[options.collectionName].schema;\n }\n\n const targetClass =\n schema && schema.properties && schema.properties[key]\n ? schema.properties[key].targetClass\n : undefined;\n const type =\n schema && schema.properties && schema.properties[key]\n ? schema.properties[key].type\n : undefined;\n\n if (type === \"Relation\") {\n res[key] = {\n __type: \"Pointer\",\n objectId: opAndValue[\"pointsTo\"],\n className: targetClass,\n };\n } else {\n if (Array.isArray(opAndValue[\"pointsTo\"])) {\n res[key] = {\n $in: opAndValue[\"pointsTo\"].map((v) => {\n return { __type: \"Pointer\", objectId: v, className: targetClass };\n }),\n };\n } else {\n res[key] = {\n $eq: {\n __type: \"Pointer\",\n objectId: opAndValue[\"pointsTo\"],\n className: targetClass,\n },\n };\n }\n }\n } else if (opAndValue[\"matchesRegex\"] !== undefined) {\n res[key] = {\n $regex: opAndValue[\"matchesRegex\"],\n $options: opAndValue[\"options\"],\n };\n } else if (\n opAndValue[\"text\"] !== undefined &&\n opAndValue[\"text\"][\"search\"] !== undefined\n ) {\n var _v = opAndValue[\"text\"][\"search\"];\n if (typeof _v === \"string\")\n res[key] = { $text: { $search: { $term: _v, $caseSensitive: false } } };\n else\n res[key] = {\n $text: {\n $search: {\n $term: _v.term,\n $language: _v.language,\n $caseSensitive: _v.caseSensitive,\n $diacriticSensitive: _v.diacriticSensitive,\n },\n },\n };\n // Geo points\n } else if (opAndValue[\"nearSphere\"] !== undefined) {\n var _v = opAndValue[\"nearSphere\"];\n res[key] = {\n $nearSphere: {\n __type: \"GeoPoint\",\n latitude: _v.latitude,\n longitude: _v.longitude,\n },\n $maxDistanceInMiles: _v.$maxDistanceInMiles,\n $maxDistanceInKilometers: _v.maxDistanceInKilometers,\n $maxDistanceInRadians: _v.maxDistanceInRadians,\n };\n } else if (opAndValue[\"withinBox\"] !== undefined) {\n var _v = opAndValue[\"withinBox\"];\n res[key] = {\n $within: {\n $box: _v.map((gp) => ({\n __type: \"GeoPoint\",\n latitude: gp.latitude,\n longitude: gp.longitude,\n })),\n },\n };\n } else if (opAndValue[\"withinPolygon\"] !== undefined) {\n var _v = opAndValue[\"withinPolygon\"];\n res[key] = {\n $geoWithin: {\n $polygon: _v.map((gp) => ({\n __type: \"GeoPoint\",\n latitude: gp.latitude,\n longitude: gp.longitude,\n })),\n },\n };\n }\n } else {\n options.error(\"Unrecognized filter keys \" + keys.join(\",\"));\n }\n\n return res;\n}\n\nexport {\n convertVisualFilter,\n compareObjects,\n matchesQuery,\n convertVisualSorting,\n convertFilterOp,\n};\n","import { Node } from \"../../../node\";\nimport { createSetter } from \"../../../edgetriggeredinput\";\n\nimport { Model } from \"../../../model\";\nimport { Collection } from \"../../../collection\";\nimport { CloudStore } from \"../../../api/cloudstore\";\nimport { JavascriptNodeParser } from \"../../../javascriptnodeparser\";\nimport * as QueryUtils from \"../../../api/queryutils\";\n\nvar DbCollectionNode = {\n name: \"DbCollection2\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/query-records\",\n displayName: \"Query Records\",\n /* shortDesc: \"A database collection.\",*/\n category: \"Cloud Services\",\n usePortAsLabel: \"collectionName\",\n color: \"data\",\n initialize() {\n var _this = this;\n this._internal.queryParameters = {};\n\n var collectionChangedScheduled = false;\n this._internal.collectionChangedCallback = function () {\n //this can be called multiple times when adding/removing more than one item\n //so optimize by only updating outputs once\n if (collectionChangedScheduled) return;\n collectionChangedScheduled = true;\n\n _this.scheduleAfterInputsHaveUpdated(function () {\n _this.flagOutputDirty(\"count\");\n _this.flagOutputDirty(\"firstItemId\");\n _this.flagOutputDirty(\"isEmpty\");\n collectionChangedScheduled = false;\n });\n };\n\n this._internal.cloudStoreEvents = function (args) {\n if (_this.isInputConnected(\"storageFetch\") === true) return;\n\n if (_this._internal.collection === undefined) return;\n if (args.collection !== _this._internal.name) return;\n\n function _addModelAtCorrectIndex(m) {\n if (_this._internal.currentQuery.sort !== undefined) {\n // We need to add it at the right index\n for (var i = 0; i < _this._internal.collection.size(); i++)\n if (\n QueryUtils.compareObjects(\n _this._internal.currentQuery.sort,\n _this._internal.collection.get(i),\n m\n ) > 0\n )\n break;\n\n _this._internal.collection.addAtIndex(m, i);\n } else {\n _this._internal.collection.add(m);\n }\n\n // Make sure we don't exceed limit\n let size = _this._internal.collection.size();\n if (\n _this._internal.currentQuery.limit !== undefined &&\n size > _this._internal.currentQuery.limit\n )\n _this._internal.collection.remove(\n _this._internal.collection.get(\n _this._internal.currentQuery.sort !== undefined &&\n _this._internal.currentQuery.sort[0][0] === \"-\"\n ? size - 1\n : 0\n )\n );\n\n //Send the array again over the items output to trigger function nodes etc that might be connected\n _this.flagOutputDirty(\"items\");\n\n _this.flagOutputDirty(\"count\");\n _this.flagOutputDirty(\"firstItemId\");\n _this.flagOutputDirty(\"isEmpty\");\n }\n\n if (args.type === \"create\") {\n const m = Model.get(args.object.objectId);\n if (m !== undefined) {\n // Check if the object matches the current query\n if (QueryUtils.matchesQuery(m, _this._internal.currentQuery.where)) {\n // If matches the query, add the item to results\n _addModelAtCorrectIndex(m);\n }\n }\n } else if (args.type === \"save\") {\n const m = Model.get(args.objectId);\n if (m !== undefined) {\n const matchesQuery = QueryUtils.matchesQuery(\n m,\n _this._internal.currentQuery.where\n );\n\n if (!matchesQuery && _this._internal.collection.contains(m)) {\n // The record no longer matches the filter, remove it\n _this._internal.collection.remove(m);\n\n //Send the array again over the items output to trigger function nodes etc that might be connected\n _this.flagOutputDirty(\"items\");\n\n _this.flagOutputDirty(\"count\");\n _this.flagOutputDirty(\"firstItemId\");\n _this.flagOutputDirty(\"isEmpty\");\n } else if (matchesQuery && !_this._internal.collection.contains(m)) {\n // It's not part of the result collection but now matches they query, add it and resort\n _addModelAtCorrectIndex(m);\n }\n }\n } else if (args.type === \"delete\") {\n const m = Model.get(args.objectId);\n if (m !== undefined) {\n _this._internal.collection.remove(m);\n\n //Send the array again over the items output to trigger function nodes etc that might be connected\n _this.flagOutputDirty(\"items\");\n\n _this.flagOutputDirty(\"count\");\n _this.flagOutputDirty(\"firstItemId\");\n _this.flagOutputDirty(\"isEmpty\");\n }\n }\n };\n\n // Listening to cloud store events is only for the global model scope, only valid in browser\n // in cloud runtime its a nop\n const cloudstore = CloudStore.forScope(this.nodeScope.modelScope);\n cloudstore.on(\"save\", this._internal.cloudStoreEvents);\n cloudstore.on(\"create\", this._internal.cloudStoreEvents);\n cloudstore.on(\"delete\", this._internal.cloudStoreEvents);\n\n this._internal.storageSettings = {};\n },\n getInspectInfo() {\n const collection = this._internal.collection;\n if (!collection) {\n return { type: \"text\", value: \"[Not executed yet]\" };\n }\n\n return [\n {\n type: \"value\",\n value: collection.items,\n },\n ];\n },\n inputs: {},\n outputs: {\n items: {\n type: \"array\",\n displayName: \"Items\",\n group: \"General\",\n getter() {\n return this._internal.collection;\n },\n },\n firstItemId: {\n type: \"string\",\n displayName: \"First Record Id\",\n group: \"General\",\n getter() {\n if (this._internal.collection) {\n var firstItem = this._internal.collection.get(0);\n if (firstItem !== undefined) return firstItem.getId();\n }\n },\n },\n isEmpty: {\n type: \"boolean\",\n displayName: \"Is Empty\",\n group: \"General\",\n getter() {\n if (this._internal.collection) {\n return this._internal.collection.size() === 0;\n }\n return true;\n },\n },\n count: {\n type: \"number\",\n displayName: \"Count\",\n group: \"General\",\n getter() {\n return this._internal.collection ? this._internal.collection.size() : 0;\n },\n },\n fetched: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"Success\",\n },\n failure: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"Failure\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n },\n prototypeExtensions: {\n setCollectionName(name) {\n this._internal.name = name;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n },\n setCollection(collection) {\n this.bindCollection(collection);\n this.flagOutputDirty(\"firstItemId\");\n this.flagOutputDirty(\"isEmpty\");\n this.flagOutputDirty(\"items\");\n this.flagOutputDirty(\"count\");\n },\n unbindCurrentCollection() {\n var collection = this._internal.collection;\n if (!collection) return;\n collection.off(\"change\", this._internal.collectionChangedCallback);\n this._internal.collection = undefined;\n },\n bindCollection(collection) {\n this.unbindCurrentCollection();\n this._internal.collection = collection;\n collection &&\n collection.on(\"change\", this._internal.collectionChangedCallback);\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n this.unbindCurrentCollection();\n\n const cloudstore = CloudStore.forScope(this.nodeScope.modelScope);\n cloudstore.off(\"insert\", this._internal.cloudStoreEvents);\n cloudstore.off(\"delete\", this._internal.cloudStoreEvents);\n cloudstore.off(\"save\", this._internal.cloudStoreEvents);\n },\n setError(err) {\n this._internal.err = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n },\n scheduleFetch() {\n var internal = this._internal;\n\n if (internal.fetchScheduled) return;\n internal.fetchScheduled = true;\n this.scheduleAfterInputsHaveUpdated(() => {\n internal.fetchScheduled = false;\n\n this.fetch();\n });\n },\n fetch() {\n if (this.context.editorConnection) {\n if (this._internal.name === undefined) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"query-collection\",\n {\n message: \"No collection specified for query\",\n }\n );\n } else {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"query-collection\"\n );\n }\n }\n\n const _c = Collection.get();\n const f = this.getStorageFilter();\n const limit = this.getStorageLimit();\n const skip = this.getStorageSkip();\n const count = this.getStorageFetchTotalCount();\n this._internal.currentQuery = {\n where: f.where,\n sort: f.sort,\n limit: limit,\n skip: skip,\n };\n CloudStore.forScope(this.nodeScope.modelScope).query({\n collection: this._internal.name,\n where: f.where,\n sort: f.sort,\n limit: limit,\n skip: skip,\n count: count,\n success: (results, count) => {\n if (results !== undefined) {\n _c.set(\n results.map((i) => {\n var m = CloudStore._fromJSON(\n i,\n this._internal.name,\n this.nodeScope.modelScope\n );\n\n return m;\n })\n );\n }\n if (count !== undefined) {\n this._internal.storageSettings.storageTotalCount = count;\n if (this.hasOutput(\"storageTotalCount\"))\n this.flagOutputDirty(\"storageTotalCount\");\n }\n this.setCollection(_c);\n this.sendSignalOnOutput(\"fetched\");\n },\n error: (err) => {\n this.setCollection(_c);\n this.setError(err || \"Failed to fetch.\");\n },\n });\n },\n getStorageFilter() {\n const storageSettings = this._internal.storageSettings;\n if (\n storageSettings[\"storageFilterType\"] === undefined ||\n storageSettings[\"storageFilterType\"] === \"simple\"\n ) {\n // Create simple filter\n const _where =\n this._internal.visualFilter !== undefined\n ? QueryUtils.convertVisualFilter(this._internal.visualFilter, {\n queryParameters: this._internal.queryParameters,\n collectionName: this._internal.name,\n })\n : undefined;\n\n const _sort =\n this._internal.visualSorting !== undefined\n ? QueryUtils.convertVisualSorting(this._internal.visualSorting)\n : undefined;\n\n return {\n where: _where,\n sort: _sort,\n };\n } else if (storageSettings[\"storageFilterType\"] === \"json\") {\n // JSON filter\n if (!this._internal.filterFunc) {\n try {\n var filterCode = storageSettings[\"storageJSONFilter\"];\n\n // Parse out variables\n filterCode = filterCode.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g, \"\"); // Remove comments\n this._internal.filterVariables =\n filterCode.match(/\\$[A-Za-z0-9]+/g) || [];\n\n var args = [\"filter\", \"where\", \"sort\", \"Inputs\"]\n .concat(this._internal.filterVariables)\n .concat([filterCode]);\n this._internal.filterFunc = Function.apply(null, args);\n } catch (e) {\n this._internal.filterFunc = undefined;\n console.log(\"Error while parsing filter script: \" + e);\n }\n }\n\n if (!this._internal.filterFunc) return;\n\n var _filter = {},\n _sort = [],\n _this = this;\n\n // Collect filter variables\n var _filterCb = function (f) {\n _filter = QueryUtils.convertFilterOp(f, {\n collectionName: _this._internal.name,\n error(err) {\n _this.context.editorConnection.sendWarning(\n _this.nodeScope.componentOwner.name,\n _this.id,\n \"query-collection-filter\",\n {\n message: err,\n }\n );\n },\n });\n };\n var _sortCb = function (s) {\n _sort = s;\n };\n\n // Extract inputs\n const inputs = {};\n for (let key in storageSettings) {\n if (key.startsWith(\"storageFilterValue-\"))\n inputs[key.substring(\"storageFilterValue-\".length)] =\n storageSettings[key];\n }\n\n var filterFuncArgs = [_filterCb, _filterCb, _sortCb, inputs]; // One for filter, one for where\n\n this._internal.filterVariables.forEach((v) => {\n filterFuncArgs.push(\n storageSettings[\"storageFilterValue-\" + v.substring(1)]\n );\n });\n\n // Run the code to get the filter\n try {\n this._internal.filterFunc.apply(this, filterFuncArgs);\n } catch (e) {\n console.log(\"Error while running filter script: \" + e);\n }\n\n return { where: _filter, sort: _sort };\n }\n },\n getStorageLimit() {\n const storageSettings = this._internal.storageSettings;\n\n if (!storageSettings[\"storageEnableLimit\"]) return;\n else return storageSettings[\"storageLimit\"] || 10;\n },\n getStorageSkip() {\n const storageSettings = this._internal.storageSettings;\n\n if (!storageSettings[\"storageEnableLimit\"]) return;\n else return storageSettings[\"storageSkip\"] || 0;\n },\n getStorageFetchTotalCount() {\n const storageSettings = this._internal.storageSettings;\n\n return !!storageSettings[\"storageEnableCount\"];\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n this.registerOutput(name, {\n getter: userOutputGetter.bind(this, name),\n });\n },\n setVisualFilter(value) {\n this._internal.visualFilter = value;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n },\n setVisualSorting(value) {\n this._internal.visualSorting = value;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n },\n setQueryParameter(name, value) {\n this._internal.queryParameters[name] = value;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n },\n registerInputIfNeeded(name) {\n var _this = this;\n\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"qp-\"))\n return this.registerInput(name, {\n set: this.setQueryParameter.bind(this, name.substring(\"qp-\".length)),\n });\n\n const dynamicSignals = {\n storageFetch: this.scheduleFetch.bind(this),\n };\n\n if (dynamicSignals[name])\n return this.registerInput(name, {\n set: createSetter({\n valueChangedToTrue: dynamicSignals[name],\n }),\n });\n\n const dynamicSetters = {\n collectionName: this.setCollectionName.bind(this),\n visualFilter: this.setVisualFilter.bind(this),\n visualSort: this.setVisualSorting.bind(this),\n };\n\n if (dynamicSetters[name])\n return this.registerInput(name, {\n set: dynamicSetters[name],\n });\n\n this.registerInput(name, {\n set: userInputSetter.bind(this, name),\n });\n },\n },\n};\n\nfunction userOutputGetter(name) {\n /* jshint validthis:true */\n return this._internal.storageSettings[name];\n}\n\nfunction userInputSetter(name, value) {\n /* jshint validthis:true */\n this._internal.storageSettings[name] = value;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n}\n\nconst _defaultJSONQuery =\n \"// Write your query script here, check out the reference documentation for examples\\n\" +\n \"where({ })\\n\";\n\nfunction updatePorts(nodeId, parameters, editorConnection, graphModel) {\n var ports = [];\n\n const dbCollections = graphModel.getMetaData(\"dbCollections\");\n const systemCollections = graphModel.getMetaData(\"systemCollections\");\n\n const _systemClasses = [\n { label: \"User\", value: \"_User\" },\n { label: \"Role\", value: \"_Role\" },\n ];\n ports.push({\n name: \"collectionName\",\n type: {\n name: \"enum\",\n enums: _systemClasses.concat(\n dbCollections !== undefined\n ? dbCollections.map((c) => {\n return { value: c.name, label: c.name };\n })\n : []\n ),\n allowEditOnly: true,\n },\n displayName: \"Class\",\n plug: \"input\",\n group: \"General\",\n });\n\n ports.push({\n name: \"storageFilterType\",\n type: {\n name: \"enum\",\n allowEditOnly: true,\n enums: [\n { value: \"simple\", label: \"Visual\" },\n { value: \"json\", label: \"Javascript\" },\n ],\n },\n displayName: \"Filter\",\n default: \"simple\",\n plug: \"input\",\n group: \"General\",\n });\n\n // Limit\n ports.push({\n type: \"boolean\",\n plug: \"input\",\n group: \"Limit\",\n name: \"storageEnableLimit\",\n displayName: \"Use limit\",\n });\n\n if (parameters[\"storageEnableLimit\"]) {\n ports.push({\n type: \"number\",\n default: 10,\n plug: \"input\",\n group: \"Limit\",\n name: \"storageLimit\",\n displayName: \"Limit\",\n });\n\n ports.push({\n type: \"number\",\n default: 0,\n plug: \"input\",\n group: \"Limit\",\n name: \"storageSkip\",\n displayName: \"Skip\",\n });\n }\n\n ports.push({\n type: \"signal\",\n plug: \"input\",\n group: \"Actions\",\n name: \"storageFetch\",\n displayName: \"Do\",\n });\n\n // Total Count\n ports.push({\n type: \"boolean\",\n plug: \"input\",\n group: \"Total Count\",\n name: \"storageEnableCount\",\n displayName: \"Fetch total count\",\n });\n\n if (parameters[\"storageEnableCount\"]) {\n ports.push({\n type: \"number\",\n plug: \"output\",\n group: \"General\",\n name: \"storageTotalCount\",\n displayName: \"Total Count\",\n });\n }\n\n // Simple query\n if (\n parameters[\"storageFilterType\"] === undefined ||\n parameters[\"storageFilterType\"] === \"simple\"\n ) {\n if (parameters.collectionName !== undefined) {\n var c =\n dbCollections &&\n dbCollections.find((c) => c.name === parameters.collectionName);\n if (c === undefined && systemCollections)\n c = systemCollections.find((c) => c.name === parameters.collectionName);\n if (c && c.schema && c.schema.properties) {\n const schema = JSON.parse(JSON.stringify(c.schema));\n\n // Find all records that have a relation with this type\n function _findRelations(c) {\n if (c.schema !== undefined && c.schema.properties !== undefined)\n for (var key in c.schema.properties) {\n var p = c.schema.properties[key];\n if (\n p.type === \"Relation\" &&\n p.targetClass === parameters.collectionName\n ) {\n if (schema.relations === undefined) schema.relations = {};\n if (schema.relations[c.name] === undefined)\n schema.relations[c.name] = [];\n\n schema.relations[c.name].push({ property: key });\n }\n }\n }\n\n dbCollections && dbCollections.forEach(_findRelations);\n systemCollections && systemCollections.forEach(_findRelations);\n\n ports.push({\n name: \"visualFilter\",\n plug: \"input\",\n type: { name: \"query-filter\", schema: schema, allowEditOnly: true },\n displayName: \"Filter\",\n group: \"Filter\",\n });\n\n ports.push({\n name: \"visualSort\",\n plug: \"input\",\n type: { name: \"query-sorting\", schema: schema, allowEditOnly: true },\n displayName: \"Sort\",\n group: \"Sorting\",\n });\n }\n\n if (parameters.visualFilter !== undefined) {\n // Find all input ports\n const uniqueInputs = {};\n function _collectInputs(query) {\n if (query === undefined) return;\n if (query.rules !== undefined)\n query.rules.forEach((r) => _collectInputs(r));\n else if (query.input !== undefined) uniqueInputs[query.input] = true;\n }\n\n _collectInputs(parameters.visualFilter);\n Object.keys(uniqueInputs).forEach((input) => {\n ports.push({\n name: \"qp-\" + input,\n plug: \"input\",\n type: \"*\",\n displayName: input,\n group: \"Query Parameters\",\n });\n });\n }\n }\n }\n // JSON query\n else if (parameters[\"storageFilterType\"] === \"json\") {\n ports.push({\n type: { name: \"string\", allowEditOnly: true, codeeditor: \"javascript\" },\n plug: \"input\",\n group: \"Filter\",\n name: \"storageJSONFilter\",\n default: _defaultJSONQuery,\n displayName: \"Filter\",\n });\n\n var filter = parameters[\"storageJSONFilter\"];\n if (filter) {\n filter = filter.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g, \"\"); // Remove comments\n var variables = filter.match(/\\$[A-Za-z0-9]+/g);\n\n if (variables) {\n const unique = {};\n variables.forEach((v) => {\n unique[v] = true;\n });\n\n Object.keys(unique).forEach((p) => {\n ports.push({\n name: \"storageFilterValue-\" + p.substring(1),\n displayName: p.substring(1),\n group: \"Filter Values\",\n plug: \"input\",\n type: { name: \"*\", allowConnectionsOnly: true },\n });\n });\n }\n\n // Support variables with the \"Inputs.\"\" syntax\n JavascriptNodeParser.parseAndAddPortsFromScript(filter, ports, {\n inputPrefix: \"storageFilterValue-\",\n inputGroup: \"Filter Values\",\n inputType: { name: \"*\", allowConnectionsOnly: true },\n skipOutputs: true,\n });\n }\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: DbCollectionNode,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n\n node.on(\"parameterUpdated\", function (event) {\n if (\n event.name.startsWith(\"storage\") ||\n event.name === \"visualFilter\" ||\n event.name === \"collectionName\"\n ) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n }\n });\n\n graphModel.on(\"metadataChanged.dbCollections\", function (data) {\n CloudStore.invalidateCollections();\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n CloudStore.invalidateCollections();\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n\n graphModel.on(\"metadataChanged.cloudservices\", function (data) {\n CloudStore.instance._initCloudServices();\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.DbCollection2\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"DbCollection2\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { Node } from \"../../../node\";\nimport { createSetter } from \"../../../edgetriggeredinput\";\nimport { Model } from \"../../../model\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nconst ModelNodeDefinition = {\n name: \"DbModel2\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/record\",\n displayNodeName: \"Record\",\n shortDesc: \"Database model\",\n category: \"Cloud Services\",\n usePortAsLabel: \"collectionName\",\n color: \"data\",\n dynamicports: [\n {\n name: \"conditionalports/extended\",\n condition: \"idSource = explicit OR idSource NOT SET\",\n inputs: [\"modelId\"],\n },\n ],\n initialize() {\n const internal = this._internal;\n internal.inputValues = {};\n internal.relationModelIds = {};\n\n const _this = this;\n this._internal.onModelChangedCallback = function (args) {\n if (_this.isInputConnected(\"fetch\")) return;\n\n if (_this.hasOutput(\"prop-\" + args.name))\n _this.flagOutputDirty(\"prop-\" + args.name);\n\n if (_this.hasOutput(\"changed-\" + args.name))\n _this.sendSignalOnOutput(\"changed-\" + args.name);\n\n _this.sendSignalOnOutput(\"changed\");\n };\n },\n getInspectInfo() {\n const model = this._internal.model;\n if (!model) return \"[No Record]\";\n\n return [\n { type: \"text\", value: \"Id: \" + model.getId() },\n { type: \"value\", value: model.data },\n ];\n },\n outputs: {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model\n ? this._internal.model.getId()\n : this._internal.modelId;\n },\n },\n fetched: {\n type: \"signal\",\n displayName: \"Fetched\",\n group: \"Events\",\n },\n changed: {\n type: \"signal\",\n displayName: \"Changed\",\n group: \"Events\",\n },\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n },\n inputs: {\n idSource: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"Specify explicitly\", value: \"explicit\" },\n { label: \"From repeater\", value: \"foreach\" },\n ],\n allowEditOnly: true,\n },\n default: \"explicit\",\n displayName: \"Id Source\",\n group: \"General\",\n set(value) {\n if (value === \"foreach\") {\n this.scheduleAfterInputsHaveUpdated(() => {\n // Find closest nodescope that have a _forEachModel\n var component = this.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n this.setModel(\n component !== undefined ? component._forEachModel : undefined\n );\n });\n }\n },\n },\n modelId: {\n type: { name: \"string\", allowConnectionsOnly: true },\n displayName: \"Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) {\n // Can be passed as model as well\n value = value.getId();\n } else if (typeof value === \"object\") {\n // If this is an js object, dereference it\n value = Model.create(value).getId();\n }\n\n this._internal.modelId = value; // Wait to fetch data\n if (this.isInputConnected(\"fetch\") === false) {\n this.setModelID(value);\n } else {\n this.flagOutputDirty(\"id\");\n }\n },\n },\n fetch: {\n displayName: \"Fetch\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleFetch();\n },\n },\n },\n methods: {\n setCollectionID(id) {\n this._internal.collectionId = id;\n },\n setModelID(id) {\n var model = (this.nodeScope.modelScope || Model).get(id);\n // this._internal.modelIsNew = false;\n this.setModel(model);\n },\n setModel(model) {\n if (this._internal.model) {\n // Remove old listener if existing\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n }\n\n this._internal.model = model;\n this.flagOutputDirty(\"id\");\n model.on(\"change\", this._internal.onModelChangedCallback);\n\n // We have a new model, mark all outputs as dirty\n for (var key in model.data) {\n if (this.hasOutput(\"prop-\" + key)) {\n this.flagOutputDirty(\"prop-\" + key);\n }\n }\n this.sendSignalOnOutput(\"fetched\");\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n if (this._internal.model)\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n },\n scheduleOnce(type, cb) {\n const _this = this;\n const _type = \"hasScheduled\" + type;\n if (this._internal[_type]) return;\n this._internal[_type] = true;\n this.scheduleAfterInputsHaveUpdated(function () {\n _this._internal[_type] = false;\n cb();\n });\n },\n setError(err) {\n this._internal.error = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"storage-op-warning\",\n {\n message: err,\n showGlobally: true,\n }\n );\n }\n },\n clearWarnings() {\n if (this.context.editorConnection) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"storage-op-warning\"\n );\n }\n },\n scheduleFetch() {\n const _this = this;\n const internal = this._internal;\n\n this.scheduleOnce(\"Fetch\", function () {\n // Don't do fetch if no id\n if (internal.modelId === undefined || internal.modelId === \"\") {\n _this.setError(\"Missing Id.\");\n return;\n }\n\n const cloudstore = CloudStore.forScope(_this.nodeScope.modelScope);\n cloudstore.fetch({\n collection: internal.collectionId,\n objectId: internal.modelId, // Get the objectId part of the model id\n success(response) {\n const model = cloudstore._fromJSON(response, internal.collectionId);\n if (internal.model !== model) {\n // Check if we need to change model\n if (internal.model) {\n // Remove old listener if existing\n internal.model.off(\"change\", internal.onModelChangedCallback);\n }\n\n internal.model = model;\n model.on(\"change\", internal.onModelChangedCallback);\n }\n _this.flagOutputDirty(\"id\");\n\n delete response.objectId;\n\n for (const key in response) {\n if (_this.hasOutput(\"prop-\" + key)) {\n _this.flagOutputDirty(\"prop-\" + key);\n }\n }\n\n _this.sendSignalOnOutput(\"fetched\");\n },\n error(err) {\n _this.setError(err || \"Failed to fetch.\");\n },\n });\n });\n },\n scheduleStore() {\n var internal = this._internal;\n if (!internal.model) return;\n\n this.scheduleOnce(\"Store\", function () {\n for (var i in internal.inputValues) {\n internal.model.set(i, internal.inputValues[i], { resolve: true });\n }\n });\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerOutput(name, {\n getter: userOutputGetter.bind(this, name.substring(\"prop-\".length)),\n });\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n const dynamicSignals = {};\n\n if (dynamicSignals[name])\n return this.registerInput(name, {\n set: createSetter({\n valueChangedToTrue: dynamicSignals[name],\n }),\n });\n\n const dynamicSetters = {\n collectionName: this.setCollectionID.bind(this),\n };\n\n if (dynamicSetters[name])\n return this.registerInput(name, {\n set: dynamicSetters[name],\n });\n\n if (name.startsWith(\"prop-\"))\n this.registerInput(name, {\n set: userInputSetter.bind(this, name.substring(\"prop-\".length)),\n });\n },\n },\n};\n\nfunction userOutputGetter(name) {\n /* jshint validthis:true */\n return this._internal.model\n ? this._internal.model.get(name, { resolve: true })\n : undefined;\n}\n\nfunction userInputSetter(name, value) {\n //console.log('dbmodel setter:',name,value)\n /* jshint validthis:true */\n this._internal.inputValues[name] = value;\n}\n\nfunction updatePorts(nodeId, parameters, editorConnection, graphModel) {\n var ports = [];\n\n const dbCollections = graphModel.getMetaData(\"dbCollections\");\n const systemCollections = graphModel.getMetaData(\"systemCollections\");\n\n const _systemClasses = [\n { label: \"User\", value: \"_User\" },\n { label: \"Role\", value: \"_Role\" },\n ];\n ports.push({\n name: \"collectionName\",\n displayName: \"Class\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: _systemClasses.concat(\n dbCollections !== undefined\n ? dbCollections.map((c) => {\n return { value: c.name, label: c.name };\n })\n : []\n ),\n allowEditOnly: true,\n },\n plug: \"input\",\n });\n\n if (parameters.collectionName && dbCollections) {\n // Fetch ports from collection keys\n var c = dbCollections.find((c) => c.name === parameters.collectionName);\n if (c === undefined && systemCollections)\n c = systemCollections.find((c) => c.name === parameters.collectionName);\n if (c && c.schema && c.schema.properties) {\n var props = c.schema.properties;\n for (var key in props) {\n var p = props[key];\n if (ports.find((_p) => _p.name === key)) continue;\n\n if (p.type !== \"Relation\") {\n // Other schema type ports\n const _typeMap = {\n String: \"string\",\n Boolean: \"boolean\",\n Number: \"number\",\n Date: \"date\",\n };\n\n ports.push({\n type: {\n name: _typeMap[p.type] ? _typeMap[p.type] : \"*\",\n },\n plug: \"output\",\n group: \"Properties\",\n name: \"prop-\" + key,\n displayName: key,\n });\n\n ports.push({\n type: \"signal\",\n plug: \"output\",\n group: \"Changed Events\",\n displayName: key + \" Changed\",\n name: \"changed-\" + key,\n });\n }\n }\n }\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: ModelNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n\n node.on(\"parameterUpdated\", function () {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n\n graphModel.on(\"metadataChanged.dbCollections\", function () {\n CloudStore.invalidateCollections();\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function () {\n CloudStore.invalidateCollections();\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.DbModel2\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"DbModel2\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { Model } from \"../../../model\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nexport function addBaseInfo(def, opts) {\n const _includeInputProperties =\n opts === undefined || opts.includeInputProperties;\n const _includeRelations = opts !== undefined && opts.includeRelations;\n\n Object.assign(def.node, {\n category: \"Data\",\n color: \"data\",\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n // Outputs\n Object.assign(def.node.outputs, {\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n });\n\n // Methods\n Object.assign(def.node.methods, {\n scheduleOnce(type, cb) {\n const _this = this;\n const _type = \"hasScheduled\" + type;\n if (this._internal[_type]) return;\n this._internal[_type] = true;\n this.scheduleAfterInputsHaveUpdated(function () {\n _this._internal[_type] = false;\n cb();\n });\n },\n checkWarningsBeforeCloudOp() {\n //clear all errors first\n this.clearWarnings();\n\n if (!this._internal.collectionId) {\n this.setError(\"No class name specified\");\n return false;\n }\n\n return true;\n },\n setError(err) {\n this._internal.error = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"storage-op-warning\",\n {\n message: err,\n showGlobally: true,\n }\n );\n }\n },\n clearWarnings() {\n if (this.context.editorConnection) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"storage-op-warning\"\n );\n }\n },\n });\n\n // Setup\n Object.assign(def, {\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n function _updatePorts() {\n var ports = [];\n\n const dbCollections = graphModel.getMetaData(\"dbCollections\");\n const systemCollections = graphModel.getMetaData(\"systemCollections\");\n\n const _systemClasses = [\n { label: \"User\", value: \"_User\" },\n { label: \"Role\", value: \"_Role\" },\n ];\n\n const parameters = node.parameters;\n\n ports.push({\n name: \"collectionName\",\n displayName: \"Class\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: _systemClasses.concat(\n dbCollections !== undefined\n ? dbCollections.map((c) => {\n return { value: c.name, label: c.name };\n })\n : []\n ),\n allowEditOnly: true,\n },\n plug: \"input\",\n });\n\n if (_includeRelations && parameters.collectionName && dbCollections) {\n // Fetch ports from collection keys\n var c = dbCollections.find(\n (c) => c.name === parameters.collectionName\n );\n if (c === undefined && systemCollections)\n c = systemCollections.find(\n (c) => c.name === parameters.collectionName\n );\n if (c && c.schema && c.schema.properties) {\n const props = c.schema.properties;\n const enums = Object.keys(props)\n .filter((key) => props[key].type === \"Relation\")\n .map((key) => ({ label: key, value: key }));\n\n ports.push({\n name: \"relationProperty\",\n displayName: \"Relation\",\n group: \"General\",\n type: { name: \"enum\", enums: enums, allowEditOnly: true },\n plug: \"input\",\n });\n }\n }\n\n if (\n _includeInputProperties &&\n parameters.collectionName &&\n dbCollections\n ) {\n const _typeMap = {\n String: \"string\",\n Boolean: \"boolean\",\n Number: \"number\",\n Date: \"date\",\n };\n\n // Fetch ports from collection keys\n var c = dbCollections.find(\n (c) => c.name === parameters.collectionName\n );\n if (c === undefined && systemCollections)\n c = systemCollections.find(\n (c) => c.name === parameters.collectionName\n );\n if (c && c.schema && c.schema.properties) {\n var props = c.schema.properties;\n for (var key in props) {\n var p = props[key];\n if (ports.find((_p) => _p.name === key)) continue;\n\n ports.push({\n type: {\n name: _typeMap[p.type] ? _typeMap[p.type] : \"*\",\n },\n plug: \"input\",\n group: \"Properties\",\n name: \"prop-\" + key,\n displayName: key,\n });\n }\n }\n }\n\n def._additionalDynamicPorts &&\n def._additionalDynamicPorts(node, ports, graphModel);\n\n context.editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n _updatePorts();\n\n node.on(\"parameterUpdated\", function (event) {\n _updatePorts();\n });\n\n graphModel.on(\"metadataChanged.dbCollections\", function (data) {\n CloudStore.invalidateCollections();\n _updatePorts();\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n CloudStore.invalidateCollections();\n _updatePorts();\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.\" + def.node.name, function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(def.node.name)) {\n _managePortsForNode(node);\n }\n });\n },\n });\n}\n\nexport function addModelId(def, opts) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n const _includeInputs = opts === undefined || opts.includeInputs;\n const _includeOutputs = opts === undefined || opts.includeOutputs;\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n if (_includeInputs) {\n Object.assign(def.node, {\n usePortAsLabel: \"collectionName\",\n });\n\n def.node.dynamicports = (def.node.dynamicports || []).concat([\n {\n name: \"conditionalports/extended\",\n condition: \"idSource = explicit OR idSource NOT SET\",\n inputs: [\"modelId\"],\n },\n ]);\n\n // Inputs\n Object.assign(def.node.inputs, {\n idSource: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"Specify explicitly\", value: \"explicit\" },\n { label: \"From repeater\", value: \"foreach\" },\n ],\n allowEditOnly: true,\n },\n default: \"explicit\",\n displayName: \"Id Source\",\n group: \"General\",\n tooltip:\n \"Choose if you want to specify the Id explicitly, \\n or if you want it to be that of the current record in a repeater.\",\n set(value) {\n if (value === \"foreach\") {\n this.scheduleAfterInputsHaveUpdated(() => {\n // Find closest nodescope that have a _forEachModel\n var component = this.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n this.setModel(\n component !== undefined ? component._forEachModel : undefined\n );\n });\n }\n },\n },\n modelId: {\n type: {\n name: \"string\",\n identifierOf: \"ModelName\",\n identifierDisplayName: \"Object Ids\",\n },\n displayName: \"Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) value = value.getId(); // Can be passed as model as well\n this._internal.modelId = value; // Wait to fetch data\n this.setModelID(value);\n },\n },\n });\n }\n\n // Outputs\n if (_includeOutputs) {\n Object.assign(def.node.outputs, {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model\n ? this._internal.model.getId()\n : this._internal.modelId;\n },\n },\n });\n }\n\n // Methods\n Object.assign(def.node.methods, {\n setCollectionID(id) {\n this._internal.collectionId = id;\n this.clearWarnings();\n },\n setModelID(id) {\n var model = (this.nodeScope.modelScope || Model).get(id);\n this.setModel(model);\n },\n setModel(model) {\n this._internal.model = model;\n this.flagOutputDirty(\"id\");\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name === \"collectionName\")\n this.registerInput(name, {\n set: this.setCollectionID.bind(this),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _methods.registerInputIfNeeded.call(this, name);\n },\n });\n}\n\nexport function addInputProperties(def) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n Object.assign(def.node, {\n initialize() {\n var internal = this._internal;\n internal.inputValues = {};\n\n _def.node.initialize && _def.node.initialize.call(this);\n },\n });\n\n // Outputs\n Object.assign(def.node.outputs, {});\n\n // Inputs\n Object.assign(def.node.inputs, {});\n\n // Methods\n Object.assign(def.node.methods, {\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerInput(name, {\n set: this._setInputValue.bind(this, name.substring(\"prop-\".length)),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _methods.registerInputIfNeeded.call(this, name);\n },\n _setInputValue(name, value) {\n this._internal.inputValues[name] = value;\n },\n });\n}\n\nexport function addRelationProperty(def) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n // Inputs\n Object.assign(def.node.inputs, {\n targetId: {\n type: { name: \"string\", allowConnectionsOnly: true },\n displayName: \"Target Record Id\",\n group: \"General\",\n set(value) {\n this._internal.targetModelId = value;\n },\n },\n });\n\n // Methods\n Object.assign(def.node.methods, {\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name === \"relationProperty\")\n this.registerInput(name, {\n set: this.setRelationProperty.bind(this),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _methods.registerInputIfNeeded.call(this, name);\n },\n setRelationProperty(value) {\n this._internal.relationProperty = value;\n },\n });\n}\n\nfunction _getCurrentUser(modelScope) {\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // We are running in browser, try to find the current user\n\n var _cu =\n localStorage[\"Parse/\" + CloudStore.instance.appId + \"/currentUser\"];\n if (_cu !== undefined) {\n let cu;\n try {\n cu = JSON.parse(_cu);\n } catch (e) {}\n\n return cu !== undefined ? cu.objectId : undefined;\n }\n } else {\n // Assume we are running in cloud runtime\n const request = modelScope.get(\"Request\");\n return request.UserId;\n }\n}\n\nexport function addAccessControl(def) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n Object.assign(def.node, {\n initialize() {\n var internal = this._internal;\n internal.accessControl = {};\n\n _def.node.initialize && _def.node.initialize.call(this);\n },\n });\n\n // Inputs\n Object.assign(def.node.inputs, {\n accessControl: {\n type: { name: \"proplist\", autoName: \"Rule\", allowEditOnly: true },\n index: 1000,\n displayName: \"Access Control Rules\",\n group: \"Access Control Rules\",\n set(value) {\n this._internal.accessControlRules = value;\n },\n },\n });\n\n // Dynamic ports\n const _super = def._additionalDynamicPorts;\n def._additionalDynamicPorts = function (node, ports, graphModel) {\n if (\n node.parameters[\"accessControl\"] !== undefined &&\n node.parameters[\"accessControl\"].length > 0\n ) {\n node.parameters[\"accessControl\"].forEach((ac) => {\n const prefix = \"acl-\" + ac.id;\n // User or role?\n ports.push({\n name: prefix + \"-target\",\n displayName: \"Target\",\n editorName: ac.label + \" | Target\",\n plug: \"input\",\n type: {\n name: \"enum\",\n enums: [\n { value: \"user\", label: \"User\" },\n { value: \"everyone\", label: \"Everyone\" },\n { value: \"role\", label: \"Role\" },\n ],\n allowEditOnly: true,\n },\n group: ac.label + \" Access Rule\",\n default: \"user\",\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n\n if (node.parameters[prefix + \"-target\"] === \"role\") {\n ports.push({\n name: prefix + \"-role\",\n displayName: \"Role\",\n editorName: ac.label + \" | Role\",\n group: ac.label + \" Access Rule\",\n plug: \"input\",\n type: \"string\",\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n } else if (\n node.parameters[prefix + \"-target\"] === undefined ||\n node.parameters[prefix + \"-target\"] === \"user\"\n ) {\n ports.push({\n name: prefix + \"-userid\",\n displayName: \"User Id\",\n group: ac.label + \" Access Rule\",\n editorName: ac.label + \" | User Id\",\n plug: \"input\",\n type: { name: \"string\", allowConnectionsOnly: true },\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n }\n\n // Read\n ports.push({\n name: prefix + \"-read\",\n displayName: \"Read\",\n editorName: ac.label + \" | Read\",\n group: ac.label + \" Access Rule\",\n plug: \"input\",\n type: { name: \"boolean\" },\n default: true,\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n\n // Write\n ports.push({\n name: prefix + \"-write\",\n displayName: \"Write\",\n editorName: ac.label + \" | Write\",\n group: ac.label + \" Access Rule\",\n plug: \"input\",\n type: { name: \"boolean\" },\n default: true,\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n });\n }\n\n _super && _super(node, ports, graphModel);\n };\n\n // Methods\n Object.assign(def.node.methods, {\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"acl-\"))\n this.registerInput(name, {\n set: this.setAccessControl.bind(this, name),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _methods.registerInputIfNeeded.call(this, name);\n },\n _getACL() {\n let acl = {};\n\n function _rule(rule) {\n return {\n read: rule.read === undefined ? true : rule.read,\n write: rule.write === undefined ? true : rule.write,\n };\n }\n\n const currentUserId = _getCurrentUser(this.nodeScope.modelScope);\n\n if (this._internal.accessControlRules !== undefined) {\n this._internal.accessControlRules.forEach((r) => {\n const rule = this._internal.accessControl[r.id];\n\n if (rule === undefined) {\n const userId = currentUserId;\n if (userId !== undefined) acl[userId] = { write: true, read: true };\n } else if (rule.target === \"everyone\") {\n acl[\"*\"] = _rule(rule);\n } else if (rule.target === \"user\") {\n const userId = rule.userid || currentUserId;\n acl[userId] = _rule(rule);\n } else if (rule.target === \"role\") {\n acl[\"role:\" + rule.role] = _rule(rule);\n }\n });\n }\n\n return Object.keys(acl).length > 0 ? acl : undefined;\n },\n setAccessControl(name, value) {\n const _parts = name.split(\"-\");\n\n if (this._internal.accessControl[_parts[1]] === undefined)\n this._internal.accessControl[_parts[1]] = {};\n this._internal.accessControl[_parts[1]][_parts[2]] = value;\n },\n });\n}\n","import * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nconst SetDbModelPropertiedNodeDefinition = {\n node: {\n name: \"SetDbModelProperties\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/set-record-properties\",\n displayNodeName: \"Set Record Properties\",\n usePortAsLabel: \"collectionName\",\n dynamicports: [\n {\n name: \"conditionalports/extended\",\n condition: \"storeType = cloud OR storeType NOT SET\",\n inputs: [\"storeProperties\"],\n },\n ],\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n if (\n this._internal.storeType === undefined ||\n this._internal.storeType === \"cloud\"\n )\n this.scheduleSave();\n else this.scheduleStore();\n },\n },\n storeProperties: {\n displayName: \"Properties to store\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: [\n { label: \"Only specified\", value: \"specified\" },\n { label: \"All\", value: \"all\" },\n ],\n },\n default: \"specified\",\n set(value) {\n this._internal.storeProperties = value;\n },\n },\n storeType: {\n displayName: \"Store to\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: [\n { label: \"Cloud and local\", value: \"cloud\" },\n { label: \"Local only\", value: \"local\" },\n ],\n },\n default: \"cloud\",\n set(value) {\n this._internal.storeType = value;\n },\n },\n },\n outputs: {\n stored: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n scheduleSave() {\n const _this = this;\n const internal = this._internal;\n\n if (!this.checkWarningsBeforeCloudOp()) return;\n\n this.scheduleOnce(\"StorageSave\", function () {\n if (!internal.model) {\n _this.setError(\"Missing Record Id\");\n return;\n }\n\n const model = internal.model;\n for (const key in internal.inputValues) {\n model.set(key, internal.inputValues[key], { resolve: true });\n }\n\n CloudStore.forScope(_this.nodeScope.modelScope).save({\n collection: internal.collectionId,\n objectId: model.getId(), // Get the objectId part of the model id\n data:\n internal.storeProperties === \"all\"\n ? model.data\n : internal.inputValues, // Only store input values by default, if not explicitly specified\n acl: _this._getACL(),\n success(response) {\n for (var key in response) {\n model.set(key, response[key]);\n }\n\n _this.sendSignalOnOutput(\"stored\");\n },\n error(err) {\n _this.setError(err || \"Failed to save.\");\n },\n });\n });\n },\n scheduleStore() {\n if (this.hasScheduledStore) return;\n this.hasScheduledStore = true;\n\n var internal = this._internal;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledStore = false;\n if (!internal.model) return;\n\n for (var i in internal.inputValues) {\n internal.model.set(i, internal.inputValues[i], { resolve: true });\n }\n this.sendSignalOnOutput(\"stored\");\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(SetDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addModelId(SetDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addInputProperties(SetDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addAccessControl(SetDbModelPropertiedNodeDefinition);\n\nexport default SetDbModelPropertiedNodeDefinition;\n","import * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nvar DeleteDbModelPropertiedNodeDefinition = {\n node: {\n name: \"DeleteDbModelProperties\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/delete-record\",\n displayNodeName: \"Delete Record\",\n shortDesc:\n \"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.storageDelete();\n },\n },\n },\n outputs: {\n deleted: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n storageDelete() {\n const _this = this;\n const internal = this._internal;\n\n if (!this.checkWarningsBeforeCloudOp()) return;\n\n this.scheduleOnce(\"StorageDelete\", function () {\n if (!internal.model) {\n _this.setError(\"Missing Record Id\");\n return;\n }\n\n CloudStore.forScope(_this.nodeScope.ModelScope).delete({\n collection: internal.collectionId,\n objectId: internal.model.getId(), // Get the objectId part of the model id,\n success() {\n internal.model.notify(\"delete\"); // Notify that this model has been deleted\n _this.sendSignalOnOutput(\"deleted\");\n },\n error(err) {\n _this.setError(err || \"Failed to delete.\");\n },\n });\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(DeleteDbModelPropertiedNodeDefinition, {\n includeInputProperties: false,\n});\nDbModelCRUDBase.addModelId(DeleteDbModelPropertiedNodeDefinition);\n\nexport default DeleteDbModelPropertiedNodeDefinition;\n","import { Model } from \"../../../model\";\nimport * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nvar NewDbModelPropertiedNodeDefinition = {\n node: {\n name: \"NewDbModelProperties\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/create-new-record\",\n displayName: \"Create New Record\",\n usePortAsLabel: \"collectionName\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.storageInsert();\n },\n },\n sourceObjectId: {\n type: { name: \"string\", allowConnectionsOnly: true },\n displayName: \"Source Object Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) value = value.getId(); // Can be passed as model as well\n this._internal.sourceObjectId = value; // Wait to fetch data\n },\n },\n },\n outputs: {\n created: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n storageInsert() {\n const internal = this._internal;\n\n if (!this.checkWarningsBeforeCloudOp()) return;\n\n this.scheduleOnce(\"StorageInsert\", () => {\n const initValues = Object.assign(\n {},\n internal.sourceObjectId\n ? (this.nodeScope.modelScope || Model).get(\n internal.sourceObjectId\n ).data\n : {},\n internal.inputValues\n );\n\n const cloudstore = CloudStore.forScope(this.nodeScope.modelScope);\n cloudstore.create({\n collection: internal.collectionId,\n data: initValues,\n acl: this._getACL(),\n success: (data) => {\n // Successfully created\n const m = cloudstore._fromJSON(data, internal.collectionId);\n this.setModel(m);\n this.sendSignalOnOutput(\"created\");\n },\n error: (err) => {\n this.setError(err || \"Failed to insert.\");\n },\n });\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(NewDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addModelId(NewDbModelPropertiedNodeDefinition, {\n includeOutputs: true,\n});\nDbModelCRUDBase.addInputProperties(NewDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addAccessControl(NewDbModelPropertiedNodeDefinition);\n\nexport default NewDbModelPropertiedNodeDefinition;\n","import { Model } from \"../../../model\";\nimport * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nvar AddDbModelRelationNodeDefinition = {\n node: {\n name: \"AddDbModelRelation\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/add-record-relation\",\n displayNodeName: \"Add Record Relation\",\n usePortAsLabel: \"collectionName\",\n // shortDesc: \"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleAddRelation();\n },\n },\n },\n outputs: {\n relationAdded: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n validateInputs() {\n if (!this.context.editorConnection) return;\n\n const _warning = (message) => {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"add-relation\",\n {\n message,\n }\n );\n };\n\n if (this._internal.collectionId === undefined) {\n _warning(\"No class specified\");\n } else if (this._internal.relationProperty === undefined) {\n _warning(\"No relation property specified\");\n } else if (this._internal.targetModelId === undefined) {\n _warning(\n \"No target record Id (the record to add a relation to) specified\"\n );\n } else if (this._internal.model === undefined) {\n _warning(\n \"No record Id specified (the record that should get the relation)\"\n );\n } else {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"add-relation\"\n );\n }\n },\n scheduleAddRelation(key) {\n const _this = this;\n const internal = this._internal;\n\n this.scheduleOnce(\"StorageAddRelation\", function () {\n _this.validateInputs();\n\n if (!internal.model) return;\n var model = internal.model;\n\n var targetModelId = internal.targetModelId;\n if (targetModelId === undefined) return;\n\n CloudStore.forScope(_this.nodeScope.modelScope).addRelation({\n collection: internal.collectionId,\n objectId: model.getId(),\n key: internal.relationProperty,\n targetObjectId: targetModelId,\n targetClass: (_this.nodeScope.modelScope || Model).get(\n targetModelId\n )._class,\n success(response) {\n for (var _key in response) {\n model.set(_key, response[_key]);\n }\n\n // Successfully added relation\n _this.sendSignalOnOutput(\"relationAdded\");\n },\n error(err) {\n _this.setError(err || \"Failed to add relation.\");\n },\n });\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(AddDbModelRelationNodeDefinition, {\n includeRelations: true,\n});\nDbModelCRUDBase.addModelId(AddDbModelRelationNodeDefinition);\nDbModelCRUDBase.addRelationProperty(AddDbModelRelationNodeDefinition);\n\nexport default AddDbModelRelationNodeDefinition;\n","import { Model } from \"../../../model\";\nimport * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nvar AddDbModelRelationNodeDefinition = {\n node: {\n name: \"RemoveDbModelRelation\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/remove-record-relation\",\n displayName: \"Remove Record Relation\",\n usePortAsLabel: \"collectionName\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleRemoveRelation();\n },\n },\n },\n outputs: {\n relationRemoved: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n validateInputs() {\n if (!this.context.editorConnection) return;\n\n const _warning = (message) => {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"add-relation\",\n {\n message,\n }\n );\n };\n\n if (this._internal.collectionId === undefined) {\n _warning(\"No class specified\");\n } else if (this._internal.relationProperty === undefined) {\n _warning(\"No relation property specified\");\n } else if (this._internal.targetModelId === undefined) {\n _warning(\n \"No target record Id (the record to add a relation to) specified\"\n );\n } else if (this._internal.model === undefined) {\n _warning(\n \"No record Id specified (the record that should get the relation)\"\n );\n } else {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"add-relation\"\n );\n }\n },\n scheduleRemoveRelation(key) {\n const _this = this;\n const internal = this._internal;\n\n this.scheduleOnce(\"StorageRemoveRelation\", function () {\n _this.validateInputs();\n\n if (!internal.model) return;\n var model = internal.model;\n\n var targetModelId = internal.targetModelId;\n if (targetModelId === undefined) return;\n\n CloudStore.forScope(_this.nodeScope.modelScope).removeRelation({\n collection: internal.collectionId,\n objectId: model.getId(),\n key: internal.relationProperty,\n targetObjectId: targetModelId,\n targetClass: (_this.nodeScope.modelScope || Model).get(\n targetModelId\n )._class,\n success(response) {\n for (var _key in response) {\n model.set(_key, response[_key]);\n }\n\n // Successfully removed relation\n _this.sendSignalOnOutput(\"relationRemoved\");\n },\n error(err) {\n _this.setError(err || \"Failed to remove relation.\");\n },\n });\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(AddDbModelRelationNodeDefinition, {\n includeRelations: true,\n});\nDbModelCRUDBase.addModelId(AddDbModelRelationNodeDefinition);\nDbModelCRUDBase.addRelationProperty(AddDbModelRelationNodeDefinition);\n\nexport default AddDbModelRelationNodeDefinition;\n","import { Node } from \"../../../node\";\nimport { Collection } from \"../../../collection\";\nimport { Model } from \"../../../model\";\nimport { CloudStore } from \"../../../api/cloudstore\";\nimport * as QueryUtils from \"../../../api/queryutils\";\n\nvar FilterDBModelsNode = {\n name: \"FilterDBModels\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/filter-records\",\n displayNodeName: \"Filter Records\",\n shortDesc: \"Filter, sort and limit array\",\n category: \"Data\",\n color: \"data\",\n initialize() {\n var _this = this;\n\n this._internal.collectionChangedCallback = function () {\n if (_this.isInputConnected(\"filter\") === true) return;\n\n _this.scheduleFilter();\n };\n\n this._internal.cloudStoreEvents = function (args) {\n if (_this.isInputConnected(\"filter\") === true) return;\n\n if (_this._internal.visualFilter === undefined) return;\n if (_this._internal.collection === undefined) return;\n if (args.collection !== _this._internal.collectionName) return;\n\n if (\n args.objectId !== undefined &&\n _this._internal.collection.contains(Model.get(args.objectId))\n )\n _this.scheduleFilter();\n };\n\n CloudStore.instance.on(\"save\", this._internal.cloudStoreEvents);\n\n this._internal.enabled = true;\n this._internal.filterSettings = {};\n this._internal.filterParameters = {};\n // this._internal.filteredCollection = Collection.get();\n },\n getInspectInfo() {\n const collection = this._internal.filteredCollection;\n\n if (!collection) {\n return { type: \"text\", value: \"[Not executed yet]\" };\n }\n\n return [\n {\n type: \"text\",\n value: \"Id: \" + collection.getId(),\n },\n {\n type: \"value\",\n value: collection.items,\n },\n ];\n },\n inputs: {\n items: {\n type: \"array\",\n displayName: \"Items\",\n group: \"General\",\n set(value) {\n this.bindCollection(value);\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n },\n enabled: {\n type: \"boolean\",\n group: \"General\",\n displayName: \"Enabled\",\n default: true,\n set(value) {\n this._internal.enabled = value;\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n },\n filter: {\n type: \"signal\",\n group: \"Actions\",\n displayName: \"Filter\",\n valueChangedToTrue() {\n this.scheduleFilter();\n },\n },\n },\n outputs: {\n items: {\n type: \"array\",\n displayName: \"Items\",\n group: \"General\",\n getter() {\n return this._internal.filteredCollection;\n },\n },\n firstItemId: {\n type: \"string\",\n displayName: \"First Record Id\",\n group: \"General\",\n getter() {\n if (this._internal.filteredCollection !== undefined) {\n const firstItem = this._internal.filteredCollection.get(0);\n if (firstItem !== undefined) return firstItem.getId();\n }\n },\n },\n /* firstItem:{\n type: 'object',\n displayName: 'First Item',\n group: 'General',\n getter() {\n if(this._internal.filteredCollection !== undefined) {\n return this._internal.filteredCollection.get(0);\n }\n } \n }, */\n count: {\n type: \"number\",\n displayName: \"Count\",\n group: \"General\",\n getter() {\n return this._internal.filteredCollection\n ? this._internal.filteredCollection.size()\n : 0;\n },\n },\n modified: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"Filtered\",\n },\n },\n prototypeExtensions: {\n unbindCurrentCollection() {\n var collection = this._internal.collection;\n if (!collection) return;\n collection.off(\"change\", this._internal.collectionChangedCallback);\n this._internal.collection = undefined;\n },\n bindCollection(collection) {\n this.unbindCurrentCollection();\n this._internal.collection = collection;\n collection &&\n collection.on(\"change\", this._internal.collectionChangedCallback);\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n this.unbindCurrentCollection();\n\n CloudStore.instance.off(\"save\", this._internal.cloudStoreEvents);\n },\n /* getFilter() {\n const filterSettings = this._internal.filterSettings;\n\n const options = ['case'] // List all supported options here\n\n if (filterSettings['filterFilter']) {\n const filters = filterSettings['filterFilter'].split(',');\n var _filter = {};\n filters.forEach(function (f) {\n var op = '$' + (filterSettings['filterFilterOp-' + f] || 'eq');\n _filter[f] = {};\n _filter[f][op] = filterSettings['filterFilterValue-' + f];\n\n options.forEach((o) => {\n var option = filterSettings['filterFilterOption-' + o + '-' + f];\n if(option) _filter[f]['$' + o] = option\n })\n })\n return _filter;\n }\n },\n getSort: function() {\n const filterSettings = this._internal.filterSettings;\n\n if (filterSettings['filterSort']) {\n const sort = filterSettings['filterSort'].split(',');\n var _sort = {};\n sort.forEach(function (s) {\n _sort[s] = filterSettings['filterSort-'+s] === 'descending'?-1:1;\n })\n return _sort;\n }\n },*/\n getLimit() {\n const filterSettings = this._internal.filterSettings;\n\n if (!filterSettings[\"filterEnableLimit\"]) return;\n else return filterSettings[\"filterLimit\"] || 10;\n },\n getSkip() {\n const filterSettings = this._internal.filterSettings;\n\n if (!filterSettings[\"filterEnableLimit\"]) return;\n else return filterSettings[\"filterSkip\"] || 0;\n },\n scheduleFilter() {\n if (this.collectionChangedScheduled) return;\n this.collectionChangedScheduled = true;\n\n this.scheduleAfterInputsHaveUpdated(() => {\n this.collectionChangedScheduled = false;\n if (!this._internal.collection) return;\n\n // Apply filter and write to output collection\n var filtered = [].concat(this._internal.collection.items);\n\n if (this._internal.enabled) {\n const _filter = this._internal.visualFilter;\n if (_filter !== undefined) {\n var filter = QueryUtils.convertVisualFilter(_filter, {\n queryParameters: this._internal.filterParameters,\n collectionName: this._internal.collectionName,\n });\n if (filter)\n filtered = filtered.filter((m) =>\n QueryUtils.matchesQuery(m, filter)\n );\n }\n\n var _sort = this._internal.visualSorting;\n if (_sort !== undefined && _sort.length > 0) {\n var sort = QueryUtils.convertVisualSorting(_sort);\n }\n if (sort) filtered.sort(QueryUtils.compareObjects.bind(this, sort));\n\n var skip = this.getSkip();\n if (skip) filtered = filtered.slice(skip, filtered.length);\n\n var limit = this.getLimit();\n if (limit) filtered = filtered.slice(0, limit);\n }\n\n this._internal.filteredCollection = Collection.create(filtered);\n\n this.sendSignalOnOutput(\"modified\");\n this.flagOutputDirty(\"firstItemId\");\n this.flagOutputDirty(\"items\");\n this.flagOutputDirty(\"count\");\n });\n },\n setCollectionName(name) {\n this._internal.collectionName = name;\n },\n setVisualFilter(value) {\n this._internal.visualFilter = value;\n\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n setVisualSorting(value) {\n this._internal.visualSorting = value;\n\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n setFilterParameter(name, value) {\n this._internal.filterParameters[name] = value;\n\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n registerInputIfNeeded(name) {\n var _this = this;\n\n if (this.hasInput(name)) {\n return;\n }\n\n if (name === \"collectionName\")\n return this.registerInput(name, {\n set: this.setCollectionName.bind(this),\n });\n\n if (name === \"visualFilter\")\n return this.registerInput(name, {\n set: this.setVisualFilter.bind(this),\n });\n\n if (name === \"visualSorting\")\n return this.registerInput(name, {\n set: this.setVisualSorting.bind(this),\n });\n\n if (name.startsWith(\"fp-\"))\n return this.registerInput(name, {\n set: this.setFilterParameter.bind(this, name.substring(\"fp-\".length)),\n });\n\n this.registerInput(name, {\n set: userInputSetter.bind(this, name),\n });\n },\n },\n};\n\nfunction userInputSetter(name, value) {\n /* jshint validthis:true */\n this._internal.filterSettings[name] = value;\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n}\n\nfunction updatePorts(nodeId, parameters, editorConnection, dbCollections) {\n var ports = [];\n\n ports.push({\n name: \"collectionName\",\n type: {\n name: \"enum\",\n enums:\n dbCollections !== undefined\n ? dbCollections.map((c) => {\n return { value: c.name, label: c.name };\n })\n : [],\n allowEditOnly: true,\n },\n displayName: \"Class\",\n plug: \"input\",\n group: \"General\",\n });\n\n ports.push({\n type: \"boolean\",\n plug: \"input\",\n group: \"Limit\",\n name: \"filterEnableLimit\",\n displayName: \"Use limit\",\n });\n\n if (parameters[\"filterEnableLimit\"]) {\n ports.push({\n type: \"number\",\n default: 10,\n plug: \"input\",\n group: \"Limit\",\n name: \"filterLimit\",\n displayName: \"Limit\",\n });\n\n ports.push({\n type: \"number\",\n default: 0,\n plug: \"input\",\n group: \"Limit\",\n name: \"filterSkip\",\n displayName: \"Skip\",\n });\n }\n\n if (parameters.collectionName !== undefined) {\n var c = dbCollections.find((c) => c.name === parameters.collectionName);\n if (c && c.schema && c.schema.properties) {\n const schema = JSON.parse(JSON.stringify(c.schema));\n\n const _supportedTypes = {\n Boolean: true,\n String: true,\n Date: true,\n Number: true,\n Pointer: true,\n };\n for (var key in schema.properties) {\n if (!_supportedTypes[schema.properties[key].type])\n delete schema.properties[key];\n }\n\n ports.push({\n name: \"visualFilter\",\n plug: \"input\",\n type: { name: \"query-filter\", schema: schema, allowEditOnly: true },\n displayName: \"Filter\",\n group: \"Filter\",\n });\n\n ports.push({\n name: \"visualSorting\",\n plug: \"input\",\n type: { name: \"query-sorting\", schema: schema, allowEditOnly: true },\n displayName: \"Sorting\",\n group: \"Sorting\",\n });\n }\n\n if (parameters.visualFilter !== undefined) {\n // Find all input ports\n const uniqueInputs = {};\n function _collectInputs(query) {\n if (query === undefined) return;\n if (query.rules !== undefined)\n query.rules.forEach((r) => _collectInputs(r));\n else if (query.input !== undefined) uniqueInputs[query.input] = true;\n }\n\n _collectInputs(parameters.visualFilter);\n Object.keys(uniqueInputs).forEach((input) => {\n ports.push({\n name: \"fp-\" + input,\n plug: \"input\",\n type: \"*\",\n displayName: input,\n group: \"Filter Parameters\",\n });\n });\n }\n }\n\n /* ports.push({\n type: { name: 'stringlist', allowEditOnly: true },\n plug: 'input',\n group: 'Filter',\n name: 'filterFilter',\n displayName: 'Filter',\n })\n\n ports.push({\n type: { name: 'stringlist', allowEditOnly: true },\n plug: 'input',\n group: 'Sort',\n name: 'filterSort',\n displayName: 'Sort',\n }) \n\n const filterOps = {\n \"string\": [{ value: 'eq', label: 'Equals' }, { value: 'neq', label: 'Not Equals' },{value: 'regex', label: 'Matches RegEx'}],\n \"boolean\": [{ value: 'eq', label: 'Equals' }, { value: 'neq', label: 'Not Equals' }],\n \"number\": [{ value: 'eq', label: 'Equals' }, { value: 'neq', label: 'Not Equals' }, { value: 'lt', label: 'Less than' }, { value: 'gt', label: 'Greater than' },\n { value: 'gte', label: 'Greater than or equal' }, { value: 'lte', label: 'Less than or equal' }]\n }\n\n if (parameters['filterFilter']) {\n var filters = parameters['filterFilter'].split(',');\n filters.forEach((f) => {\n // Type\n ports.push({\n type: { name: 'enum', enums: [{ value: 'string', label: 'String' }, { value: 'number', label: 'Number' }, { value: 'boolean', label: 'Boolean' }] },\n default: 'string',\n plug: 'input',\n group: f + ' filter',\n displayName: 'Type',\n editorName: f + ' filter | Type',\n name: 'filterFilterType-' + f\n })\n\n var type = parameters['filterFilterType-' + f];\n\n // String filter type\n ports.push({\n type: { name: 'enum', enums: filterOps[type || 'string'] },\n default: 'eq',\n plug: 'input',\n group: f + ' filter',\n displayName: 'Op',\n editorName: f + ' filter| Op',\n name: 'filterFilterOp-' + f\n })\n\n // Case sensitivite option\n if(parameters['filterFilterOp-' + f] === 'regex') {\n ports.push({\n type: 'boolean',\n default: false,\n plug: 'input',\n group: f + ' filter',\n displayName: 'Case sensitive',\n editorName: f + ' filter| Case',\n name: 'filterFilterOption-case-' + f\n })\n }\n\n ports.push({\n type: type || 'string',\n plug: 'input',\n group: f + ' filter',\n displayName: 'Value',\n editorName: f + ' Filter Value',\n name: 'filterFilterValue-' + f\n })\n\n })\n }\n\n if (parameters['filterSort']) {\n var filters = parameters['filterSort'].split(',');\n filters.forEach((f) => {\n ports.push({\n type: { name: 'enum', enums: [{ value: 'ascending', label: 'Ascending' }, { value: 'descending', label: 'Descending' }] },\n default: 'ascending',\n plug: 'input',\n group: f + ' sort',\n displayName: 'Sort',\n editorName: f + ' sorting',\n name: 'filterSort-' + f\n })\n })\n }*/\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: FilterDBModelsNode,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.FilterDBModels\", function (node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"dbCollections\")\n );\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"dbCollections\")\n );\n });\n\n graphModel.on(\"metadataChanged.dbCollections\", function (data) {\n CloudStore.invalidateCollections();\n updatePorts(node.id, node.parameters, context.editorConnection, data);\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n CloudStore.invalidateCollections();\n updatePorts(node.id, node.parameters, context.editorConnection, data);\n });\n });\n },\n};\n","import { Node } from \"../../../node\";\nimport { Model } from \"../../../model\";\n\nvar ModelNodeDefinition = {\n name: \"Model2\",\n docs: \"https://docs.noodl.net/nodes/data/object/object-node\",\n displayNodeName: \"Object\",\n shortDesc:\n \"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.\",\n category: \"Data\",\n usePortAsLabel: \"modelId\",\n color: \"data\",\n dynamicports: [\n {\n name: \"conditionalports/extended\",\n condition: \"idSource = explicit OR idSource NOT SET\",\n inputs: [\"modelId\"],\n },\n ],\n initialize() {\n var internal = this._internal;\n internal.inputValues = {};\n internal.dirtyValues = {};\n\n var _this = this;\n this._internal.onModelChangedCallback = function (args) {\n if (_this.isInputConnected(\"fetch\") === true) return;\n\n if (_this.hasOutput(\"prop-\" + args.name))\n _this.flagOutputDirty(\"prop-\" + args.name);\n\n if (_this.hasOutput(\"changed-\" + args.name))\n _this.sendSignalOnOutput(\"changed-\" + args.name);\n\n _this.sendSignalOnOutput(\"changed\");\n };\n },\n getInspectInfo() {\n const model = this._internal.model;\n if (!model) return \"[No Object]\";\n\n return [\n { type: \"text\", value: \"Id: \" + model.getId() },\n { type: \"value\", value: model.data },\n ];\n },\n outputs: {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model\n ? this._internal.model.getId()\n : this._internal.modelId;\n },\n },\n changed: {\n type: \"signal\",\n displayName: \"Changed\",\n group: \"Events\",\n },\n fetched: {\n type: \"signal\",\n displayName: \"Fetched\",\n group: \"Events\",\n },\n },\n inputs: {\n idSource: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"Specify explicitly\", value: \"explicit\" },\n { label: \"From repeater\", value: \"foreach\" },\n ],\n allowEditOnly: true,\n },\n default: \"explicit\",\n displayName: \"Get Id from\",\n group: \"General\",\n set(value) {\n if (value === \"foreach\") {\n this.scheduleAfterInputsHaveUpdated(() => {\n // Find closest nodescope that have a _forEachModel\n var component = this.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n this.setModel(\n component !== undefined ? component._forEachModel : undefined\n );\n });\n }\n },\n },\n modelId: {\n type: {\n name: \"string\",\n identifierOf: \"ModelName\",\n identifierDisplayName: \"Object Ids\",\n },\n displayName: \"Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) value = value.getId();\n // Can be passed as model as well\n else if (typeof value === \"object\") value = Model.create(value).getId(); // If this is an js object, dereference it\n\n this._internal.modelId = value; // Wait to fetch data\n if (this.isInputConnected(\"fetch\") === false) this.setModelID(value);\n else {\n this.flagOutputDirty(\"id\");\n }\n },\n },\n properties: {\n type: { name: \"stringlist\", allowEditOnly: true },\n displayName: \"Properties\",\n group: \"Properties\",\n set(value) {},\n },\n fetch: {\n displayName: \"Fetch\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleSetModel();\n },\n },\n },\n prototypeExtensions: {\n scheduleStore() {\n if (this.hasScheduledStore) return;\n this.hasScheduledStore = true;\n\n var internal = this._internal;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledStore = false;\n if (!internal.model) return;\n\n for (var i in internal.dirtyValues) {\n internal.model.set(i, internal.inputValues[i], { resolve: true });\n }\n internal.dirtyValues = {}; // Reset dirty values\n });\n },\n scheduleSetModel() {\n if (this.hasScheduledSetModel) return;\n this.hasScheduledSetModel = true;\n\n var internal = this._internal;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledSetModel = false;\n this.setModelID(this._internal.modelId);\n });\n },\n setModelID(id) {\n var model = (this.nodeScope.modelScope || Model).get(id);\n this.setModel(model);\n this.sendSignalOnOutput(\"fetched\");\n },\n setModel(model) {\n if (this._internal.model)\n // Remove old listener if existing\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n\n this._internal.model = model;\n this.flagOutputDirty(\"id\");\n\n // In set idSource, we are calling setModel with undefined\n if (model) {\n model.on(\"change\", this._internal.onModelChangedCallback);\n\n // We have a new model, mark all outputs as dirty\n for (var key in model.data) {\n if (this.hasOutput(\"prop-\" + key))\n this.flagOutputDirty(\"prop-\" + key);\n }\n }\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n if (this._internal.model)\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerOutput(name, {\n getter: userOutputGetter.bind(this, name.substring(\"prop-\".length)),\n });\n },\n registerInputIfNeeded(name) {\n var _this = this;\n\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerInput(name, {\n set: userInputSetter.bind(this, name.substring(\"prop-\".length)),\n });\n },\n },\n};\n\nfunction userOutputGetter(name) {\n /* jshint validthis:true */\n return this._internal.model\n ? this._internal.model.get(name, { resolve: true })\n : undefined;\n}\n\nfunction userInputSetter(name, value) {\n /* jshint validthis:true */\n this._internal.inputValues[name] = value;\n\n // Store on change if no connection to store or new\n const model = this._internal.model;\n const valueChanged = model ? model.get(name) !== value : true;\n if (valueChanged) {\n this._internal.dirtyValues[name] = true;\n this.scheduleStore();\n }\n}\n\nfunction updatePorts(nodeId, parameters, editorConnection) {\n var ports = [];\n\n // Add value outputs\n var properties = parameters.properties;\n if (properties) {\n properties = properties ? properties.split(\",\") : undefined;\n for (var i in properties) {\n var p = properties[i];\n\n ports.push({\n type: {\n name: \"*\",\n allowConnectionsOnly: true,\n },\n plug: \"input/output\",\n group: \"Properties\",\n name: \"prop-\" + p,\n displayName: p,\n });\n\n ports.push({\n type: \"signal\",\n plug: \"output\",\n group: \"Changed Events\",\n displayName: p + \" Changed\",\n name: \"changed-\" + p,\n });\n }\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports, {\n detectRenamed: {\n plug: \"input/output\",\n },\n });\n}\n\nexport default {\n node: ModelNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.Model2\", function (node) {\n updatePorts(node.id, node.parameters, context.editorConnection);\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(node.id, node.parameters, context.editorConnection);\n });\n });\n },\n};\n","import { Collection } from \"../../../collection\";\nimport { Model } from \"../../../model\";\n\nexport function addBaseInfo(def) {\n Object.assign(def.node, {\n category: \"Data\",\n color: \"data\",\n });\n}\n\nexport function addModelId(def, opts) {\n const _includeInputs = opts === undefined || opts.includeInputs;\n const _includeOutputs = opts === undefined || opts.includeOutputs;\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n if (_includeInputs) {\n Object.assign(def.node, {\n usePortAsLabel: \"modelId\",\n });\n\n def.node.dynamicports = (def.node.dynamicports || []).concat([\n {\n name: \"conditionalports/extended\",\n condition: \"idSource = explicit OR idSource NOT SET\",\n inputs: [\"modelId\"],\n },\n ]);\n\n // Inputs\n Object.assign(def.node.inputs, {\n idSource: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"Specify explicitly\", value: \"explicit\" },\n { label: \"From repeater\", value: \"foreach\" },\n ],\n allowEditOnly: true,\n },\n default: \"explicit\",\n displayName: \"Id Source\",\n group: \"General\",\n set(value) {\n if (value === \"foreach\") {\n this.scheduleAfterInputsHaveUpdated(() => {\n // Find closest nodescope that have a _forEachModel\n var component = this.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n this.setModel(\n component !== undefined ? component._forEachModel : undefined\n );\n });\n }\n },\n },\n modelId: {\n type: {\n name: \"string\",\n identifierOf: \"ModelName\",\n identifierDisplayName: \"Object Ids\",\n },\n displayName: \"Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) value = value.getId(); // Can be passed as model as well\n this._internal.modelId = value; // Wait to fetch data\n this.setModelID(value);\n },\n },\n });\n }\n\n // Outputs\n if (_includeOutputs) {\n Object.assign(def.node.outputs, {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model\n ? this._internal.model.getId()\n : this._internal.modelId;\n },\n },\n });\n }\n\n // Methods\n Object.assign(def.node.methods, {\n setModelID(id) {\n var model = (this.nodeScope.modelScope || Model).get(id);\n this.setModel(model);\n },\n setModel(model) {\n this._internal.model = model;\n this.flagOutputDirty(\"id\");\n },\n });\n\n //Inspect model\n if (!def.node.getInspectInfo) {\n def.node.getInspectInfo = function () {\n const model = this._internal.model;\n if (!model) return \"[No Object]\";\n\n return [\n { type: \"text\", value: \"Id: \" + model.getId() },\n { type: \"value\", value: model.data },\n ];\n };\n }\n}\n\nexport function addInputProperties(def) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n Object.assign(def, {\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.\" + def.node.name, function (node) {\n function _updatePorts() {\n var ports = [];\n\n const _types = [\n { label: \"String\", value: \"string\" },\n { label: \"Boolean\", value: \"boolean\" },\n { label: \"Number\", value: \"number\" },\n { label: \"Date\", value: \"date\" },\n { label: \"Array\", value: \"array\" },\n { label: \"Object\", value: \"object\" },\n { label: \"Any\", value: \"*\" },\n ];\n\n // Add value outputs\n var properties = node.parameters.properties;\n if (properties) {\n properties = properties ? properties.split(\",\") : undefined;\n for (var i in properties) {\n var p = properties[i];\n\n // Property input\n ports.push({\n type: {\n name:\n node.parameters[\"type-\" + p] === undefined\n ? \"*\"\n : node.parameters[\"type-\" + p],\n },\n plug: \"input\",\n group: \"Property Values\",\n displayName: p,\n // editorName:p,\n name: \"prop-\" + p,\n });\n\n // Property type\n ports.push({\n type: {\n name: \"enum\",\n enums: _types,\n allowEditOnly: true,\n },\n plug: \"input\",\n group: \"Property Types\",\n displayName: p,\n default: \"*\",\n name: \"type-\" + p,\n });\n }\n }\n\n context.editorConnection.sendDynamicPorts(node.id, ports, {\n detectRenamed: {\n plug: \"input\",\n },\n });\n }\n\n _updatePorts();\n\n node.on(\"parameterUpdated\", function (event) {\n _updatePorts();\n });\n });\n\n _def.setup && _def.setup(context, graphModel);\n },\n });\n\n // Initilize\n Object.assign(def.node, {\n initialize() {\n var internal = this._internal;\n internal.inputValues = {};\n internal.inputTypes = {};\n\n _def.node.initialize && _def.node.initialize.call(this);\n },\n });\n\n // Outputs\n Object.assign(def.node.outputs, {});\n\n // Inputs\n Object.assign(def.node.inputs, {\n properties: {\n type: { name: \"stringlist\", allowEditOnly: true },\n displayName: \"Properties\",\n group: \"Properties to set\",\n set(value) {},\n },\n });\n\n // Methods\n Object.assign(def.node.methods, {\n _pushInputValues(model) {\n var internal = this._internal;\n\n const _defaultValueForType = {\n boolean: false,\n string: \"\",\n number: 0,\n date: new Date(),\n };\n\n const _allKeys = {};\n for (const key in internal.inputTypes) _allKeys[key] = true;\n for (const key in internal.inputValues) _allKeys[key] = true;\n\n const properties = this.model.parameters.properties || \"\";\n\n const validProperties = properties.split(\",\");\n\n const keysToSet = Object.keys(_allKeys).filter(\n (key) => validProperties.indexOf(key) !== -1\n );\n\n for (const i of keysToSet) {\n var value = internal.inputValues[i];\n\n if (value !== undefined) {\n //Parse array types with string as javascript\n if (\n internal.inputTypes[i] !== undefined &&\n internal.inputTypes[i] === \"array\" &&\n typeof value === \"string\"\n ) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"invalid-array-\" + i\n );\n\n try {\n value = eval(value); //this might be static data in the form of javascript\n } catch (e) {\n if (value.indexOf(\"[\") !== -1 || value.indexOf(\"{\") !== -1) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"invalid-array-\" + i,\n {\n showGlobally: true,\n message: \"Invalid array<br>\" + e.toString(),\n }\n );\n value = [];\n } else {\n //backwards compability with how this node used to work\n value = Collection.get(value);\n }\n }\n }\n // Resolve object from IDs\n if (\n internal.inputTypes[i] !== undefined &&\n internal.inputTypes[i] === \"object\" &&\n typeof value === \"string\"\n ) {\n value = (this.nodeScope.modelScope || Model).get(value);\n }\n\n model.set(i, value, { resolve: true });\n } else {\n model.set(i, _defaultValueForType[internal.inputTypes[i]], {\n resolve: true,\n });\n }\n }\n },\n scheduleStore() {\n if (this.hasScheduledStore) return;\n this.hasScheduledStore = true;\n\n var internal = this._internal;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledStore = false;\n if (!internal.model) return;\n\n this._pushInputValues(internal.model);\n\n this.sendSignalOnOutput(\"stored\");\n });\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerInput(name, {\n set: this._setInputValue.bind(this, name.substring(\"prop-\".length)),\n });\n\n if (name.startsWith(\"type-\"))\n this.registerInput(name, {\n set: this._setInputType.bind(this, name.substring(\"type-\".length)),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _def.node.methods.registerInputIfNeeded.call(this, name);\n },\n _setInputValue(name, value) {\n this._internal.inputValues[name] = value;\n },\n _setInputType(name, value) {\n this._internal.inputTypes[name] = value;\n },\n });\n}\n","import * as ModelCRUDBase from \"./modelcrudbase\";\n\nvar SetModelPropertiedNodeDefinition = {\n node: {\n name: \"SetModelProperties\",\n docs: \"https://docs.noodl.net/nodes/data/object/set-object-properties\",\n displayNodeName: \"Set Object Properties\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleStore();\n },\n },\n },\n outputs: {\n stored: {\n type: \"signal\",\n displayName: \"Done\",\n group: \"Events\",\n },\n },\n },\n};\n\nModelCRUDBase.addBaseInfo(SetModelPropertiedNodeDefinition);\nModelCRUDBase.addModelId(SetModelPropertiedNodeDefinition);\nModelCRUDBase.addInputProperties(SetModelPropertiedNodeDefinition);\n\nexport default SetModelPropertiedNodeDefinition;\n","import { Model } from \"../../../model\";\nimport * as ModelCRUDBase from \"./modelcrudbase\";\n\nvar NewModelNodeDefinition = {\n node: {\n name: \"NewModel\",\n docs: \"https://docs.noodl.net/nodes/data/object/create-new-object\",\n displayNodeName: \"Create New Object\",\n inputs: {\n new: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleNew();\n },\n },\n },\n outputs: {\n created: {\n type: \"signal\",\n displayName: \"Done\",\n group: \"Events\",\n },\n },\n methods: {\n scheduleNew() {\n if (this.hasScheduledNew) return;\n this.hasScheduledNew = true;\n\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledNew = false;\n const newModel = (this.nodeScope.modelScope || Model).get();\n\n this._pushInputValues(newModel);\n\n this.setModel(newModel);\n\n this.sendSignalOnOutput(\"created\");\n });\n },\n },\n },\n};\n\nModelCRUDBase.addBaseInfo(NewModelNodeDefinition);\nModelCRUDBase.addModelId(NewModelNodeDefinition, { includeOutputs: true });\nModelCRUDBase.addInputProperties(NewModelNodeDefinition);\n\nexport default NewModelNodeDefinition;\n","import { CloudFile } from \"../../../api/cloudfile\";\n\nconst CloudFileNode = {\n name: \"Cloud File\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/cloud-file\",\n category: \"Cloud Services\",\n color: \"data\",\n getInspectInfo() {\n return this._internal.cloudFile && this._internal.cloudFile.getUrl();\n },\n outputs: {\n url: {\n type: \"string\",\n displayName: \"URL\",\n group: \"General\",\n get() {\n return this._internal.cloudFile && this._internal.cloudFile.getUrl();\n },\n },\n name: {\n type: \"string\",\n displayName: \"Name\",\n group: \"General\",\n get() {\n if (!this._internal.cloudFile) return;\n\n //parse prefixes the file with a guid_\n //remove it so the name is the same as the original file name\n const n = this._internal.cloudFile.getName().split(\"_\");\n return n.length === 1 ? n[0] : n.slice(1).join(\"_\");\n },\n },\n },\n inputs: {\n file: {\n type: \"cloudfile\",\n displayName: \"Cloud File\",\n group: \"General\",\n set(value) {\n if (value instanceof CloudFile === false) {\n return;\n }\n this._internal.cloudFile = value;\n this.flagOutputDirty(\"name\");\n this.flagOutputDirty(\"url\");\n },\n },\n },\n};\n\nexport default {\n node: CloudFileNode,\n};\n","import { Runtime } from \"../runtime\";\n\ndeclare const _noodl_cloud_runtime_version: string | undefined;\ndeclare const _noodl_cloudservices:\n | {\n endpoint: string;\n appId: string;\n masterKey?: string;\n }\n | undefined;\n\nexport class ConfigService {\n public static instance = new ConfigService();\n\n cacheDuration: number;\n configCachePending: any;\n configCache: any;\n // @ts-expect-error\n ttl: number;\n\n endpoint: string | undefined;\n appId: string | undefined;\n\n constructor() {\n this.cacheDuration = 15 * 60 * 1000; // 15 min cache\n }\n\n // @ts-expect-error\n _makeRequest(path, options) {\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // Running in browser\n var xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n var json;\n try {\n json = JSON.parse(xhr.response);\n } catch (e) {}\n\n if (xhr.status === 200 || xhr.status === 201) {\n options.success(json);\n } else\n options.error(\n json || { error: xhr.responseText, status: xhr.status }\n );\n }\n };\n\n // @ts-expect-error\n const cloudServices = Runtime.instance.getMetaData(\"cloudservices\");\n const appId = cloudServices.appId;\n const endpoint = cloudServices.endpoint;\n xhr.open(\"GET\", endpoint + path, true);\n\n xhr.setRequestHeader(\"X-Parse-Application-Id\", appId);\n\n xhr.send();\n } else {\n // Running in cloud runtime\n const endpoint =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.endpoint\n : this.endpoint;\n const appId =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.appId\n : this.appId;\n const masterKey =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.masterKey\n : undefined;\n\n fetch(endpoint + path, {\n method: \"GET\",\n // @ts-expect-error\n headers: {\n \"X-Parse-Application-Id\": appId,\n \"X-Parse-Master-Key\": masterKey,\n },\n })\n .then((r) => {\n if (r.status === 200 || r.status === 201) {\n r.json()\n .then((json) => options.success(json))\n .catch((e) =>\n options.error({\n error: \"Config: Failed to get json result.\",\n })\n );\n } else {\n r.json()\n .then((json) => options.error(json))\n .catch((e) => options.error({ error: \"Failed to fetch.\" }));\n }\n })\n .catch((e) => {\n options.error({ error: e.message });\n });\n }\n }\n\n _getConfig() {\n return new Promise((resolve, reject) => {\n this._makeRequest(\"/config\", {\n // @ts-expect-error\n success: (config) => {\n resolve(config.params || {});\n },\n // @ts-expect-error\n error: (err) => {\n reject(err);\n },\n });\n });\n }\n\n async getConfig() {\n if (this.configCachePending) return this.configCachePending;\n\n if (!this.configCache) {\n this.configCachePending = this._getConfig();\n\n this.configCache = await this.configCachePending;\n delete this.configCachePending;\n this.ttl = Date.now() + this.cacheDuration;\n return this.configCache;\n } else {\n // Update cache if ttl has passed\n if (Date.now() > this.ttl) {\n this._getConfig().then((config) => {\n this.configCache = config;\n this.ttl = Date.now() + this.cacheDuration;\n });\n }\n\n // But return currently cached\n return this.configCache;\n }\n }\n\n clearCache() {\n delete this.configCache;\n }\n}\n","import { ConfigService } from \"../../../api/configservice\";\n\nvar ConfigNodeDefinition = {\n name: \"DbConfig\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/config\",\n displayNodeName: \"Config\",\n category: \"Cloud Services\",\n usePortAsLabel: \"configKey\",\n color: \"data\",\n initialize() {\n var internal = this._internal;\n\n ConfigService.instance.getConfig().then((config) => {\n internal.config = config;\n if (this.hasOutput(\"value\")) this.flagOutputDirty(\"value\");\n });\n },\n getInspectInfo() {\n const value = this.getValue();\n\n if (value === undefined) return \"[No Value]\";\n\n return [{ type: \"value\", value: value }];\n },\n inputs: {},\n outputs: {},\n methods: {\n getValue() {\n const internal = this._internal;\n if (\n internal.useDevValue &&\n this.context.editorConnection &&\n this.context.editorConnection.isRunningLocally()\n ) {\n return internal.devValue;\n } else if (\n internal.config !== undefined &&\n internal.configKey !== undefined\n ) {\n return internal.config[internal.configKey];\n }\n },\n setInternal(key, value) {\n this._internal[key] = value;\n if (this.hasOutput(\"value\")) this.flagOutputDirty(\"value\");\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name === \"value\")\n return this.registerOutput(name, {\n getter: this.getValue.bind(this),\n });\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name === \"configKey\" || name === \"useDevValue\" || name === \"devValue\")\n return this.registerInput(name, {\n set: this.setInternal.bind(this, name),\n });\n },\n },\n};\n\nexport default {\n node: ConfigNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function updatePorts(node) {\n var ports = [];\n\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"dbconfig-warning\"\n );\n\n const configSchema = graphModel.getMetaData(\"dbConfigSchema\");\n let valueType;\n\n if (configSchema) {\n const isCloud = typeof _noodl_cloud_runtime_version !== \"undefined\";\n ports.push({\n name: \"configKey\",\n displayName: \"Parameter\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: Object.keys(configSchema)\n .filter((k) => isCloud || !configSchema[k].masterKeyOnly)\n .map((k) => ({ value: k, label: k })),\n allowEditOnly: true,\n },\n plug: \"input\",\n });\n\n if (\n node.parameters[\"configKey\"] !== undefined &&\n configSchema &&\n configSchema[node.parameters[\"configKey\"]]\n ) {\n valueType = configSchema[node.parameters[\"configKey\"]].type;\n\n if (\n valueType === \"string\" ||\n valueType === \"boolean\" ||\n valueType === \"number\" ||\n valueType === \"object\" ||\n valueType === \"array\"\n ) {\n ports.push({\n name: \"useDevValue\",\n displayName: \"Enable\",\n group: \"Local Override\",\n type: \"boolean\",\n default: false,\n plug: \"input\",\n });\n\n if (node.parameters[\"useDevValue\"] === true) {\n ports.push({\n name: \"devValue\",\n displayName: \"Value\",\n group: \"Local Override\",\n type: valueType,\n plug: \"input\",\n });\n }\n }\n } else if (node.parameters[\"configKey\"] !== undefined) {\n context.editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"dbconfig-warning\",\n {\n showGlobally: true,\n message:\n node.parameters[\"configKey\"] +\n \" config parameter is missing, add it to your cloud service.\",\n }\n );\n }\n } else {\n context.editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"dbconfig-warning\",\n {\n showGlobally: true,\n message: \"You need an active cloud service.\",\n }\n );\n }\n\n ports.push({\n name: \"value\",\n displayName: \"Value\",\n group: \"General\",\n type: valueType || \"*\",\n plug: \"output\",\n });\n\n context.editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n function _managePortsForNode(node) {\n updatePorts(node);\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(node);\n });\n\n graphModel.on(\"metadataChanged.dbConfigSchema\", function (data) {\n ConfigService.instance.clearCache();\n updatePorts(node);\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.DbConfig\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"DbConfig\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","export function createDefinition(args) {\n return {\n name: args.name,\n docs: args.docs,\n shortDesc: args.shortDesc,\n nodeDoubleClickAction: args.nodeDoubleClickAction,\n category: \"Variables\",\n initialize() {\n this._internal.currentValue = args.startValue;\n this._internal.latestValue = 0;\n },\n getInspectInfo() {\n const type = args.type.name === \"color\" ? \"color\" : \"text\";\n return [{ type, value: this._internal.currentValue }];\n },\n inputs: {\n value: {\n type: args.type,\n displayName: \"Value\",\n default: args.startValue,\n set(value) {\n if (this.isInputConnected(\"saveValue\") === false) {\n this.setValueTo(value);\n } else {\n this._internal.latestValue = value;\n }\n },\n },\n saveValue: {\n displayName: \"Set\",\n valueChangedToTrue() {\n this.scheduleAfterInputsHaveUpdated(function () {\n this.setValueTo(this._internal.latestValue);\n this.sendSignalOnOutput(\"stored\");\n });\n },\n },\n },\n outputs: {\n savedValue: {\n type: args.type.name,\n displayName: \"Value\",\n getter() {\n return this._internal.currentValue;\n },\n },\n changed: {\n type: \"signal\",\n displayName: \"Changed\",\n },\n stored: {\n type: \"signal\",\n displayName: \"Stored\",\n },\n },\n prototypeExtensions: {\n setValueTo(value) {\n value = args.cast(value);\n const changed = this._internal.currentValue !== value;\n this._internal.currentValue = value;\n\n if (changed) {\n this.flagOutputDirty(\"savedValue\");\n this.sendSignalOnOutput(\"changed\");\n args.onChanged && args.onChanged.call(this);\n }\n },\n },\n };\n}\n","import { createDefinition } from \"./variablebase\";\n\nconst NumberNode = createDefinition({\n name: \"Number\",\n docs: \"https://docs.noodl.net/nodes/data/number\",\n startValue: 0,\n nodeDoubleClickAction: {\n focusPort: \"value\",\n },\n type: {\n name: \"number\",\n },\n cast(value) {\n return Number(value);\n },\n});\n\nexport default {\n node: NumberNode,\n};\n","import { createDefinition } from \"./variablebase\";\nimport { extend } from \"../../../nodedefinition\";\n\nconst StringNode = createDefinition({\n name: \"String\",\n docs: \"https://docs.noodl.net/nodes/data/string\",\n shortDesc: \"Contains a string (text).\",\n startValue: \"\",\n nodeDoubleClickAction: {\n focusPort: \"value\",\n },\n type: {\n name: \"string\",\n },\n cast(value) {\n return String(value);\n },\n onChanged() {\n this.flagOutputDirty(\"length\");\n },\n});\n\nextend(StringNode, {\n usePortAsLabel: \"value\",\n portLabelTruncationMode: \"length\",\n outputs: {\n length: {\n type: \"number\",\n displayName: \"Length\",\n getter() {\n return this._internal.currentValue.length;\n },\n },\n },\n});\n\nexport default {\n node: StringNode,\n};\n","import { createDefinition } from \"./variablebase\";\n\nconst BooleanNode = createDefinition({\n name: \"Boolean\",\n docs: \"https://docs.noodl.net/nodes/data/boolean\",\n startValue: false,\n type: {\n name: \"boolean\",\n },\n cast(value) {\n return Boolean(value);\n },\n});\n\nexport default {\n node: BooleanNode,\n};\n","const ConditionNode = {\n name: \"Condition\",\n docs: \"https://docs.noodl.net/nodes/utilities/logic/condition\",\n category: \"Logic\",\n initialize() {},\n getInspectInfo() {\n const condition = this.getInputValue(\"condition\");\n let value;\n if (condition === undefined) {\n value = \"[No input]\";\n }\n value = condition;\n return [\n {\n type: \"value\",\n value,\n },\n ];\n },\n inputs: {\n condition: {\n type: \"boolean\",\n displayName: \"Condition\",\n group: \"General\",\n set(value) {\n if (!this.isInputConnected(\"eval\")) {\n // Evaluate right away\n this.scheduleEvaluate();\n }\n },\n },\n eval: {\n type: \"signal\",\n displayName: \"Evaluate\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleEvaluate();\n },\n },\n },\n outputs: {\n ontrue: {\n type: \"signal\",\n displayName: \"On True\",\n group: \"Events\",\n },\n onfalse: {\n type: \"signal\",\n displayName: \"On False\",\n group: \"Events\",\n },\n result: {\n type: \"boolean\",\n displayName: \"Is True\",\n group: \"Booleans\",\n get() {\n return !!this.getInputValue(\"condition\");\n },\n },\n isfalse: {\n type: \"boolean\",\n displayName: \"Is False\",\n group: \"Booleans\",\n get() {\n return !this.getInputValue(\"condition\");\n },\n },\n },\n methods: {\n scheduleEvaluate() {\n this.scheduleAfterInputsHaveUpdated(() => {\n this.flagOutputDirty(\"result\");\n this.flagOutputDirty(\"isfalse\");\n\n const condition = this.getInputValue(\"condition\");\n this.sendSignalOnOutput(condition ? \"ontrue\" : \"onfalse\");\n });\n },\n },\n};\n\nexport default {\n node: ConditionNode,\n};\n","const AndNode = {\n name: \"And\",\n docs: \"https://docs.noodl.net/nodes/logic/and\",\n category: \"Logic\",\n initialize() {\n this._internal.inputs = [];\n },\n getInspectInfo() {\n return and(this._internal.inputs);\n },\n numberedInputs: {\n input: {\n displayPrefix: \"Input\",\n type: \"boolean\",\n createSetter(index) {\n return function (value) {\n value = value ? true : false;\n\n if (this._internal.inputs[index] === value) {\n return;\n }\n\n this._internal.inputs[index] = value;\n const result = and(this._internal.inputs);\n\n if (this._internal.result !== result) {\n this._internal.result = result;\n this.flagOutputDirty(\"result\");\n }\n };\n },\n },\n },\n outputs: {\n result: {\n type: \"boolean\",\n displayName: \"Result\",\n get() {\n return this._internal.result;\n },\n },\n },\n};\n\nexport default {\n node: AndNode,\n};\n\nfunction and(values) {\n //if none are false, then return true\n return values.length > 0 && values.some((v) => !v) === false;\n}\n","const OrNode = {\n name: \"Or\",\n docs: \"https://docs.noodl.net/nodes/logic/or\",\n category: \"Logic\",\n initialize() {\n this._internal.inputs = [];\n },\n getInspectInfo() {\n return this._internal.inputs.some(isTrue);\n },\n numberedInputs: {\n input: {\n type: \"boolean\",\n displayPrefix: \"Input\",\n createSetter(index) {\n return function (value) {\n if (this._internal.inputs[index] === value) {\n return;\n }\n\n this._internal.inputs[index] = value;\n this.flagOutputDirty(\"result\");\n };\n },\n },\n },\n outputs: {\n result: {\n type: \"boolean\",\n displayName: \"Result\",\n getter() {\n return this._internal.inputs.some(isTrue);\n },\n },\n },\n};\n\nexport default {\n node: OrNode,\n};\n\nfunction isTrue(value) {\n return value ? true : false;\n}\n","const BooleanToStringNode = {\n name: \"Boolean To String\",\n docs: \"https://docs.noodl.net/nodes/utilities/boolean-to-string\",\n category: \"Utilities\",\n initialize() {\n this._internal.inputs = [];\n this._internal.currentSelectedIndex = 0;\n this._internal.indexChanged = false;\n\n this._internal.trueString = \"\";\n this._internal.falseString = \"\";\n },\n inputs: {\n trueString: {\n displayName: \"String for true\",\n type: \"string\",\n set(value) {\n if (this._internal.trueString === value) return;\n this._internal.trueString = value;\n\n if (this._internal.currentInput) {\n this.flagOutputDirty(\"currentValue\");\n }\n },\n },\n falseString: {\n displayName: \"String for false\",\n type: \"string\",\n set(value) {\n if (this._internal.falseString === value) return;\n this._internal.falseString = value;\n\n if (!this._internal.currentInput) {\n this.flagOutputDirty(\"currentValue\");\n }\n },\n },\n input: {\n type: { name: \"boolean\" },\n displayName: \"Selector\",\n set(value) {\n if (this._internal.currentInput === value) return;\n\n this._internal.currentInput = value;\n this.flagOutputDirty(\"currentValue\");\n this.sendSignalOnOutput(\"inputChanged\");\n },\n },\n },\n outputs: {\n currentValue: {\n type: \"string\",\n displayName: \"Current Value\",\n group: \"Value\",\n getter() {\n return this._internal.currentInput\n ? this._internal.trueString\n : this._internal.falseString;\n },\n },\n inputChanged: {\n type: \"signal\",\n displayName: \"Selector Changed\",\n group: \"Signals\",\n },\n },\n};\n\nexport default {\n node: BooleanToStringNode,\n};\n","const DateToStringNode = {\n name: \"Date To String\",\n docs: \"https://docs.noodl.net/nodes/utilities/date-to-string\",\n category: \"Utilities\",\n initialize() {\n this._internal.formatString = \"{year}-{month}-{date}\";\n },\n inputs: {\n formatString: {\n displayName: \"Format\",\n type: \"string\",\n default: \"{year}-{month}-{date}\",\n set(value) {\n if (this._internal.formatString === value) return;\n this._internal.formatString = value;\n\n if (this._internal.currentInput !== undefined) {\n this._format();\n this.flagOutputDirty(\"currentValue\");\n }\n },\n },\n input: {\n type: { name: \"date\" },\n displayName: \"Date\",\n set(value) {\n const _value = typeof value === \"string\" ? new Date(value) : value;\n if (this._internal.currentInput === _value) return;\n\n this._internal.currentInput = _value;\n this._format();\n },\n },\n },\n outputs: {\n currentValue: {\n type: \"string\",\n displayName: \"Date String\",\n group: \"Value\",\n getter() {\n return this._internal.dateString;\n },\n },\n inputChanged: {\n type: \"signal\",\n displayName: \"Date Changed\",\n group: \"Signals\",\n },\n onError: {\n type: \"signal\",\n displayName: \"Invalid Date\",\n group: \"Signals\",\n },\n },\n methods: {\n _format() {\n try {\n const t = this._internal.currentInput;\n const format = this._internal.formatString;\n const date = (\"0\" + t.getDate()).slice(-2);\n const month = (\"0\" + (t.getMonth() + 1)).slice(-2);\n const monthShort = new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n }).format(t);\n const year = t.getFullYear();\n const yearShort = year.toString().substring(2);\n const hours = (\"0\" + t.getHours()).slice(-2);\n const minutes = (\"0\" + t.getMinutes()).slice(-2);\n const seconds = (\"0\" + t.getSeconds()).slice(-2);\n\n this._internal.dateString = format\n .replace(/\\{date\\}/g, date)\n .replace(/\\{month\\}/g, month)\n .replace(/\\{monthShort\\}/g, monthShort)\n .replace(/\\{year\\}/g, year)\n .replace(/\\{yearShort\\}/g, yearShort)\n .replace(/\\{hours\\}/g, hours)\n .replace(/\\{minutes\\}/g, minutes)\n .replace(/\\{seconds\\}/g, seconds);\n } catch (error) {\n // Set the output to be blank, makes it easier to handle.\n this._internal.dateString = \"\";\n this.flagOutputDirty(\"onError\");\n }\n\n // Flag that the value have changed\n this.flagOutputDirty(\"currentValue\");\n this.sendSignalOnOutput(\"inputChanged\");\n },\n },\n};\n\nexport default {\n node: DateToStringNode,\n};\n","const StringMapperNode = {\n name: \"String Mapper\",\n docs: \"https://docs.noodl.net/nodes/string-manipulation/string-mapper\",\n category: \"Utilities\",\n initialize() {\n this._internal.inputs = [];\n this._internal.mappings = [];\n },\n getInspectInfo() {\n return this._internal.mappedString;\n },\n numberedInputs: {\n input: {\n type: \"string\",\n displayPrefix: \"Input\",\n group: \"Inputs\",\n index: 10,\n createSetter(index) {\n return function (value) {\n value = value === undefined ? \"\" : value.toString();\n this._internal.inputs[index] = value;\n this.scheduleMapping();\n };\n },\n },\n output: {\n type: \"string\",\n displayPrefix: \"Mapping\",\n index: 1001,\n group: \"Mappings\",\n createSetter(index) {\n return function (value) {\n value = value === undefined ? \"\" : value.toString();\n this._internal.mappings[index] = value;\n this.scheduleMapping();\n };\n },\n },\n },\n inputs: {\n inputString: {\n type: {\n name: \"string\",\n },\n index: 1,\n displayName: \"Input String\",\n set(value) {\n this._internal.currentInputString =\n value !== undefined ? value.toString() : undefined;\n this.scheduleMapping();\n },\n },\n defaultMapping: {\n type: \"string\",\n displayName: \"Default\",\n index: 1000,\n group: \"Mappings\",\n set(value) {\n this._internal.defaultMapping = value;\n this.scheduleMapping();\n },\n },\n },\n outputs: {\n mappedString: {\n type: \"string\",\n displayName: \"Mapped String\",\n group: \"Value\",\n getter() {\n return this._internal.mappedString;\n },\n },\n },\n prototypeExtensions: {\n doMapping() {\n this._internal.hasScheduledFetch = false;\n var idx = this._internal.inputs.indexOf(\n this._internal.currentInputString\n );\n if (idx !== -1)\n this._internal.mappedString = this._internal.mappings[idx];\n else this._internal.mappedString = this._internal.defaultMapping;\n\n this.flagOutputDirty(\"mappedString\");\n },\n scheduleMapping() {\n var internal = this._internal;\n if (!internal.hasScheduledFetch) {\n internal.hasScheduledFetch = true;\n this.scheduleAfterInputsHaveUpdated(this.doMapping.bind(this));\n }\n },\n },\n};\n\nexport default {\n node: StringMapperNode,\n};\n","function invert(value) {\n if (value === undefined) {\n return undefined;\n }\n return !value;\n}\n\nconst InverterNode = {\n name: \"Inverter\",\n docs: \"https://docs.noodl.net/nodes/logic/inverter\",\n category: \"Logic\",\n initialize() {\n this._internal.currentValue = undefined;\n },\n getInspectInfo() {\n return String(invert(this._internal.currentValue));\n },\n inputs: {\n value: {\n type: {\n name: \"boolean\",\n },\n displayName: \"Value\",\n set(value) {\n this._internal.currentValue = value;\n this.flagOutputDirty(\"result\");\n },\n },\n },\n outputs: {\n result: {\n type: \"boolean\",\n displayName: \"Result\",\n getter() {\n return invert(this._internal.currentValue);\n },\n },\n },\n};\n\nexport default {\n node: InverterNode,\n};\n","const SubStringNode = {\n name: \"Substring\",\n docs: \"https://docs.noodl.net/nodes/string-manipulation/substring\",\n category: \"String Manipulation\",\n initialize() {\n var internal = this._internal;\n internal.startIndex = 0;\n internal.endIndex = -1;\n internal.cachedResult = \"\";\n internal.inputString = \"\";\n internal.resultDirty = false;\n },\n inputs: {\n start: {\n type: \"number\",\n displayName: \"Start\",\n default: 0,\n set(value) {\n this._internal.startIndex = value;\n this._internal.resultDirty = true;\n this.flagOutputDirty(\"result\");\n },\n },\n end: {\n type: \"number\",\n displayName: \"End\",\n default: 0,\n set(value) {\n this._internal.endIndex = value;\n this._internal.resultDirty = true;\n this.flagOutputDirty(\"result\");\n },\n },\n string: {\n type: {\n name: \"string\",\n },\n displayName: \"String\",\n default: \"\",\n set(value) {\n value = value.toString();\n this._internal.inputString = value;\n this._internal.resultDirty = true;\n this.flagOutputDirty(\"result\");\n },\n },\n },\n outputs: {\n result: {\n type: \"string\",\n displayName: \"Result\",\n getter() {\n var internal = this._internal;\n\n if (internal.resultDirty) {\n if (internal.endIndex === -1) {\n internal.cachedResult = internal.inputString.substr(\n internal.startIndex\n );\n } else {\n internal.cachedResult = internal.inputString.substr(\n internal.startIndex,\n internal.endIndex - internal.startIndex\n );\n }\n internal.resultDirty = false;\n }\n return internal.cachedResult;\n },\n },\n },\n};\n\nexport default {\n node: SubStringNode,\n};\n","const StringFormatDefinition = {\n name: \"String Format\",\n docs: \"https://docs.noodl.net/nodes/string-manipulation/string-format\",\n category: \"String Manipulation\",\n usePortAsLabel: \"format\",\n portLabelTruncationMode: \"length\",\n initialize() {\n const internal = this._internal;\n internal.format = \"\";\n internal.cachedResult = \"\";\n internal.resultDirty = false;\n internal.inputValues = {};\n },\n getInspectInfo() {\n return this.formatValue();\n },\n inputs: {\n format: {\n type: { name: \"string\", multiline: true },\n displayName: \"Format\",\n set(value) {\n if (this._internal.format === value) return;\n\n this._internal.format = value;\n this._internal.resultDirty = true;\n this.scheduleFormat();\n },\n },\n },\n outputs: {\n formatted: {\n type: \"string\",\n displayName: \"Formatted\",\n get() {\n return this.formatValue();\n },\n },\n },\n methods: {\n formatValue() {\n var internal = this._internal;\n\n if (internal.resultDirty) {\n var formatted = internal.format;\n\n var matches = internal.format.match(/\\{[A-Za-z0-9_]*\\}/g);\n var inputs = [];\n if (matches) {\n inputs = matches.map(function (name) {\n return name.replace(\"{\", \"\").replace(\"}\", \"\");\n });\n }\n\n inputs.forEach(function (name) {\n var v = internal.inputValues[name];\n formatted = formatted.replace(\n \"{\" + name + \"}\",\n v !== undefined ? v : \"\"\n );\n });\n\n internal.cachedResult = formatted;\n internal.resultDirty = false;\n }\n\n return internal.cachedResult;\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n this.registerInput(name, {\n set: userInputSetter.bind(this, name),\n });\n },\n scheduleFormat() {\n if (this.formatScheduled) return;\n\n this.formatScheduled = true;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.formatValue();\n this.flagOutputDirty(\"formatted\");\n this.formatScheduled = false;\n });\n },\n },\n};\n\nfunction userInputSetter(name, value) {\n /* jshint validthis:true */\n if (this._internal.inputValues[name] === value) return;\n\n this._internal.inputValues[name] = value;\n this._internal.resultDirty = true;\n this.scheduleFormat();\n}\n\nfunction updatePorts(id, format, editorConnection) {\n var inputs = format.match(/\\{[A-Za-z0-9_]*\\}/g) || [];\n var portsNames = inputs.map(function (def) {\n return def.replace(\"{\", \"\").replace(\"}\", \"\");\n });\n\n var ports = portsNames\n //get unique names\n .filter(function (value, index, self) {\n return self.indexOf(value) === index;\n })\n //and map names to ports\n .map(function (name) {\n return {\n name: name,\n type: \"string\",\n plug: \"input\",\n };\n });\n\n editorConnection.sendDynamicPorts(id, ports);\n}\n\nexport default {\n node: StringFormatDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.String Format\", function (node) {\n if (node.parameters.format) {\n updatePorts(node.id, node.parameters.format, context.editorConnection);\n }\n node.on(\"parameterUpdated\", function (event) {\n if (event.name === \"format\") {\n updatePorts(\n node.id,\n node.parameters.format,\n context.editorConnection\n );\n }\n });\n });\n },\n};\n","const CounterNode = {\n name: \"Counter\",\n docs: \"https://docs.noodl.net/nodes/math/counter\",\n category: \"Math\",\n initialize() {\n this._internal.currentValue = 0;\n this._internal.startValue = 0;\n this._internal.startValueSet = false;\n\n this._internal.limitsEnabled = false;\n this._internal.limitsMin = 0;\n this._internal.limitsMax = 0;\n },\n getInspectInfo() {\n return \"Count: \" + this._internal.currentValue;\n },\n inputs: {\n increase: {\n group: \"Actions\",\n displayName: \"Increase Count\",\n valueChangedToTrue() {\n if (\n this._internal.limitsEnabled &&\n this._internal.currentValue >= this._internal.limitsMax\n ) {\n return;\n }\n\n this._internal.currentValue++;\n this.flagOutputDirty(\"currentCount\");\n this.sendSignalOnOutput(\"countChanged\");\n },\n },\n decrease: {\n group: \"Actions\",\n displayName: \"Decrease Count\",\n valueChangedToTrue() {\n if (\n this._internal.limitsEnabled &&\n this._internal.currentValue <= this._internal.limitsMin\n ) {\n return;\n }\n\n this._internal.currentValue--;\n this.flagOutputDirty(\"currentCount\");\n this.sendSignalOnOutput(\"countChanged\");\n },\n },\n reset: {\n group: \"Actions\",\n displayName: \"Reset To Start\",\n valueChangedToTrue() {\n if (this.currentValue === 0) {\n return;\n }\n this._internal.currentValue = this._internal.startValue;\n this.flagOutputDirty(\"currentCount\");\n this.sendSignalOnOutput(\"countChanged\");\n },\n },\n startValue: {\n type: \"number\",\n displayName: \"Start Value\",\n default: 0,\n set(value) {\n this._internal.startValue = Number(value);\n\n if (this._internal.startValueSet === false) {\n this._internal.startValueSet = true;\n this._internal.currentValue = this._internal.startValue;\n this.flagOutputDirty(\"currentCount\");\n this.sendSignalOnOutput(\"countChanged\");\n }\n },\n },\n limitsMin: {\n type: {\n name: \"number\",\n },\n displayName: \"Min Value\",\n group: \"Limits\",\n default: 0,\n set(value) {\n this._internal.limitsMin = Number(value);\n },\n },\n limitsMax: {\n type: {\n name: \"number\",\n },\n displayName: \"Max Value\",\n group: \"Limits\",\n default: 0,\n set(value) {\n this._internal.limitsMax = Number(value);\n },\n },\n limitsEnabled: {\n type: {\n name: \"boolean\",\n },\n displayName: \"Limits Enabled\",\n group: \"Limits\",\n default: false,\n set(value) {\n this._internal.limitsEnabled = value ? true : false;\n },\n },\n },\n outputs: {\n currentCount: {\n displayName: \"Current Count\",\n type: \"number\",\n getter() {\n return this._internal.currentValue;\n },\n },\n countChanged: {\n displayName: \"Count Changed\",\n type: \"signal\",\n },\n },\n};\n\nexport default {\n node: CounterNode,\n};\n","import { Model } from \"../../model\";\n\nconst UniqueIdNode = {\n name: \"Unique Id\",\n docs: \"https://docs.noodl.net/nodes/utilities/unique-id\",\n category: \"String Manipulation\",\n initialize() {\n var internal = this._internal;\n internal.guid = Model.guid();\n },\n getInspectInfo() {\n return this._internal.guid;\n },\n inputs: {\n new: {\n displayName: \"New\",\n valueChangedToTrue() {\n var internal = this._internal;\n internal.guid = Model.guid();\n this.flagOutputDirty(\"guid\");\n },\n },\n },\n outputs: {\n guid: {\n type: \"string\",\n displayName: \"Id\",\n getter() {\n var internal = this._internal;\n return internal.guid;\n },\n },\n },\n prototypeExtensions: {},\n};\n\nexport default {\n node: UniqueIdNode,\n};\n","import { Runtime } from \"../../../runtime\";\n\nconst SetUserPropertiesNodeDefinition = {\n name: \"net.noodl.user.SetUserProperties\",\n docs: \"https://docs.noodl.net/nodes/data/user/set-user-properties\",\n displayNodeName: \"Set User Properties\",\n category: \"Cloud Services\",\n color: \"data\",\n initialize() {\n var internal = this._internal;\n\n internal.userProperties = {};\n },\n getInspectInfo() {},\n outputs: {\n success: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n },\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleStore();\n },\n },\n email: {\n displayName: \"Email\",\n type: \"string\",\n group: \"General\",\n set(value) {\n this._internal.email = value;\n },\n },\n username: {\n displayName: \"Username\",\n type: \"string\",\n group: \"General\",\n set(value) {\n this._internal.username = value;\n },\n },\n },\n methods: {\n setError(err) {\n this._internal.error = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"user-set-warning\",\n {\n message: err,\n showGlobally: true,\n }\n );\n }\n },\n clearWarnings() {\n if (this.context.editorConnection) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"user-set-warning\"\n );\n }\n },\n scheduleStore() {\n const internal = this._internal;\n\n if (this.storeScheduled === true) return;\n this.storeScheduled = true;\n\n this.scheduleAfterInputsHaveUpdated(() => {\n this.storeScheduled = false;\n\n const UserService = Runtime.Services.UserService;\n UserService.forScope(this.nodeScope.modelScope).setUserProperties({\n email: this._internal.email,\n username: this._internal.username,\n properties: internal.userProperties,\n success: () => {\n this.sendSignalOnOutput(\"success\");\n },\n error: (e) => {\n this.setError(e);\n },\n });\n });\n },\n setUserProperty(name, value) {\n this._internal.userProperties[name] = value;\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n return this.registerInput(name, {\n set: this.setUserProperty.bind(this, name.substring(\"prop-\".length)),\n });\n },\n },\n};\n\nfunction updatePorts(nodeId, parameters, editorConnection, systemCollections) {\n var ports = [];\n\n if (systemCollections) {\n // Fetch ports from collection keys\n var c = systemCollections.find((c) => c.name === \"_User\");\n if (c && c.schema && c.schema.properties) {\n var props = c.schema.properties;\n\n const _ignoreKeys =\n typeof _noodl_cloud_runtime_version === \"undefined\"\n ? [\n \"authData\",\n \"createdAt\",\n \"updatedAt\",\n \"email\",\n \"username\",\n \"emailVerified\",\n \"password\",\n ]\n : [\"authData\", \"createdAt\", \"updatedAt\", \"email\", \"username\"];\n\n for (var key in props) {\n if (_ignoreKeys.indexOf(key) !== -1) continue;\n\n var p = props[key];\n if (ports.find((_p) => _p.name === key)) continue;\n\n if (p.type === \"Relation\") {\n } else {\n // Other schema type ports\n const _typeMap = {\n String: \"string\",\n Boolean: \"boolean\",\n Number: \"number\",\n Date: \"date\",\n };\n\n ports.push({\n type: {\n name: _typeMap[p.type] ? _typeMap[p.type] : \"*\",\n },\n plug: \"input\",\n group: \"Properties\",\n name: \"prop-\" + key,\n displayName: key,\n });\n }\n }\n }\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: SetUserPropertiesNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"systemCollections\")\n );\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"systemCollections\")\n );\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n updatePorts(node.id, node.parameters, context.editorConnection, data);\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\n \"nodeAdded.net.noodl.user.SetUserProperties\",\n function (node) {\n _managePortsForNode(node);\n }\n );\n\n for (const node of graphModel.getNodesWithType(\n \"net.noodl.user.SetUserProperties\"\n )) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { Runtime } from \"../../../runtime\";\nimport { Node } from \"../../../node\";\n\nvar UserNodeDefinition = {\n name: \"net.noodl.user.User\",\n docs: \"https://docs.noodl.net/nodes/data/user/user-node\",\n displayNodeName: \"User\",\n category: \"Cloud Services\",\n color: \"data\",\n initialize() {\n var _this = this;\n this._internal.onModelChangedCallback = function (args) {\n if (_this.isInputConnected(\"fetch\")) return;\n\n if (_this.hasOutput(\"prop-\" + args.name))\n _this.flagOutputDirty(\"prop-\" + args.name);\n\n if (_this.hasOutput(\"changed-\" + args.name))\n _this.sendSignalOnOutput(\"changed-\" + args.name);\n\n _this.sendSignalOnOutput(\"changed\");\n };\n\n const userService = Runtime.Services.UserService.forScope(\n this.nodeScope.modelScope\n );\n\n this.setUserModel(userService.current);\n userService.on(\"loggedIn\", () => {\n this.setUserModel(userService.current);\n\n if (this.hasOutput(\"loggedIn\")) this.sendSignalOnOutput(\"loggedIn\");\n });\n\n userService.on(\"sessionGained\", () => {\n this.setUserModel(userService.current);\n });\n\n userService.on(\"loggedOut\", () => {\n this.setUserModel(undefined);\n if (this.hasOutput(\"loggedOut\")) this.sendSignalOnOutput(\"loggedOut\");\n });\n\n userService.on(\"sessionLost\", () => {\n this.setUserModel(undefined);\n if (this.hasOutput(\"sessionLost\")) this.sendSignalOnOutput(\"sessionLost\");\n });\n },\n getInspectInfo() {\n const model = this._internal.model;\n if (!model) return \"[No Model]\";\n\n return [\n { type: \"text\", value: \"Id: \" + model.getId() },\n { type: \"value\", value: this._internal.model.data },\n ];\n },\n outputs: {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model !== undefined\n ? this._internal.model.getId()\n : undefined;\n },\n },\n fetched: {\n type: \"signal\",\n displayName: \"Fetched\",\n group: \"Events\",\n },\n changed: {\n type: \"signal\",\n displayName: \"Changed\",\n group: \"Events\",\n },\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n username: {\n type: \"string\",\n displayName: \"Username\",\n group: \"General\",\n getter() {\n return this._internal.model !== undefined\n ? this._internal.model.get(\"username\")\n : undefined;\n },\n },\n email: {\n type: \"string\",\n displayName: \"Email\",\n group: \"General\",\n getter() {\n return this._internal.model !== undefined\n ? this._internal.model.get(\"email\")\n : undefined;\n },\n },\n authenticated: {\n type: \"boolean\",\n displayName: \"Authenticated\",\n group: \"General\",\n getter() {\n return this._internal.model !== undefined;\n },\n },\n /* loggedIn:{\n type:'signal',\n displayName:'Logged In',\n group:'Events'\n },\n loggedOut:{\n type:'signal',\n displayName:'Logged Out',\n group:'Events'\n },\n sessionLost:{\n type:'signal',\n displayName:'Session Lost',\n group:'Events'\n }, */\n },\n inputs: {\n fetch: {\n displayName: \"Fetch\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleFetch();\n },\n },\n },\n methods: {\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n if (this._internal.model)\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n },\n scheduleOnce(type, cb) {\n const _this = this;\n const _type = \"hasScheduled\" + type;\n if (this._internal[_type]) return;\n this._internal[_type] = true;\n this.scheduleAfterInputsHaveUpdated(function () {\n _this._internal[_type] = false;\n cb();\n });\n },\n setError(err) {\n this._internal.error = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"user-warning\",\n {\n message: err,\n showGlobally: true,\n }\n );\n }\n },\n clearWarnings() {\n if (this.context.editorConnection) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"user-warning\"\n );\n }\n },\n setUserModel(model) {\n const internal = this._internal;\n\n if (internal.model !== model) {\n // Check if we need to change model\n if (internal.model)\n // Remove old listener if existing\n internal.model.off(\"change\", internal.onModelChangedCallback);\n\n internal.model = model;\n if (model) model.on(\"change\", internal.onModelChangedCallback);\n }\n this.flagOutputDirty(\"id\");\n this.flagOutputDirty(\"authenticated\");\n this.flagOutputDirty(\"email\");\n this.flagOutputDirty(\"username\");\n\n // Notify all properties changed\n if (model)\n for (var key in model.data) {\n if (this.hasOutput(\"prop-\" + key))\n this.flagOutputDirty(\"prop-\" + key);\n }\n },\n scheduleFetch() {\n const internal = this._internal;\n\n this.scheduleOnce(\"Fetch\", () => {\n const userService = Runtime.Services.UserService.forScope(\n this.nodeScope.modelScope\n );\n userService.fetchCurrentUser({\n success: (response) => {\n this.setUserModel(userService.current);\n\n this.sendSignalOnOutput(\"fetched\");\n },\n error: (err) => {\n this.setError(err || \"Failed to fetch.\");\n },\n });\n });\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (\n name === \"loggedOut\" ||\n name === \"loggedIn\" ||\n name === \"sessionLost\"\n ) {\n this.registerOutput(name, {\n getter: () => {} /* No getter needed, signal */,\n });\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerOutput(name, {\n getter: this.getUserProperty.bind(\n this,\n name.substring(\"prop-\".length)\n ),\n });\n },\n getUserProperty(name) {\n return this._internal.model !== undefined\n ? this._internal.model.get(name)\n : undefined;\n },\n },\n};\n\nfunction updatePorts(nodeId, parameters, editorConnection, systemCollections) {\n var ports = [];\n\n if (systemCollections) {\n // Fetch ports from collection keys\n var c = systemCollections.find((c) => c.name === \"_User\");\n if (c && c.schema && c.schema.properties) {\n var props = c.schema.properties;\n const _ignoreKeys = [\"authData\", \"password\", \"username\", \"email\"];\n for (var key in props) {\n if (_ignoreKeys.indexOf(key) !== -1) continue;\n\n var p = props[key];\n if (ports.find((_p) => _p.name === key)) continue;\n\n if (p.type === \"Relation\") {\n } else {\n // Other schema type ports\n const _typeMap = {\n String: \"string\",\n Boolean: \"boolean\",\n Number: \"number\",\n Date: \"date\",\n };\n\n ports.push({\n type: {\n name: _typeMap[p.type] ? _typeMap[p.type] : \"*\",\n },\n plug: \"output\",\n group: \"Properties\",\n name: \"prop-\" + key,\n displayName: key,\n });\n\n ports.push({\n type: \"signal\",\n plug: \"output\",\n group: \"Changed Events\",\n displayName: key + \" Changed\",\n name: \"changed-\" + key,\n });\n }\n }\n }\n }\n\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // On the client we have some extra outputs\n ports.push({\n plug: \"output\",\n name: \"loggedIn\",\n type: \"signal\",\n displayName: \"Logged In\",\n group: \"Events\",\n });\n\n ports.push({\n plug: \"output\",\n name: \"loggedOut\",\n type: \"signal\",\n displayName: \"Logged Out\",\n group: \"Events\",\n });\n\n ports.push({\n plug: \"output\",\n name: \"sessionLost\",\n type: \"signal\",\n displayName: \"Session Lost\",\n group: \"Events\",\n });\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: UserNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"systemCollections\")\n );\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"systemCollections\")\n );\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n updatePorts(node.id, node.parameters, context.editorConnection, data);\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.net.noodl.user.User\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"net.noodl.user.User\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { NodeContext } from \"./nodecontext\";\nimport { EditorConnection } from \"./editorconnection\";\nimport { generateNodeLibrary } from \"./nodelibraryexport\";\nimport * as ProjectSettings from \"./projectsettings\";\nimport { GraphModel } from \"./models/graphmodel\";\nimport { defineNode } from \"./nodedefinition\";\nimport { Node } from \"./node\";\nimport * as EditorModelEventsHandler from \"./editormodeleventshandler\";\nimport { Services } from \"./services/services\";\nimport * as EdgeTriggeredInput from \"./edgetriggeredinput\";\n\nimport { EventEmitter } from \"./events\";\nimport { asyncPool } from \"./async-pool\";\n\nimport ComponentInputs from \"./nodes/componentinputs\";\nimport ComponentOutputs from \"./nodes/componentoutputs\";\n\nimport RunTasks from \"./nodes/std-library/runtasks\";\n\n// Data\nimport RestNode from \"./nodes/std-library/data/restnode\";\n\n// Custom code\nimport Expression from \"./nodes/std-library/expression\";\nimport SimpleJavaScript from \"./nodes/std-library/simplejavascript\";\n\n// Records\nimport DbCollectionNode2 from \"./nodes/std-library/data/dbcollectionnode2\";\nimport DbModelNode2 from \"./nodes/std-library/data/dbmodelnode2\";\nimport SetDbModelPropertiesNode from \"./nodes/std-library/data/setdbmodelpropertiesnode\";\nimport DeleteDbModelPropertiesNode from \"./nodes/std-library/data/deletedbmodelpropertiesnode\";\nimport NewDbModelPropertiesNode from \"./nodes/std-library/data/newdbmodelpropertiesnode\";\nimport DbModelNodeAddRelation from \"./nodes/std-library/data/dbmodelnode-addrelation\";\nimport DbModelNodeRemoveRelation from \"./nodes/std-library/data/dbmodelnode-removerelation\";\nimport FilterDbModelsNode from \"./nodes/std-library/data/filterdbmodelsnode\";\n\n// Object\nimport ModelNode2 from \"./nodes/std-library/data/modelnode2\";\nimport SetModelPropertiesNode from \"./nodes/std-library/data/setmodelpropertiesnode\";\nimport NewModelNode from \"./nodes/std-library/data/newmodelnode\";\n\n// Cloud\nimport CloudFileNode from \"./nodes/std-library/data/cloudfilenode\";\nimport DbConfig from \"./nodes/std-library/data/dbconfig\";\n\n// Variables\nimport NumberVar from \"./nodes/std-library/variables/number\";\nimport StringVar from \"./nodes/std-library/variables/string\";\nimport BooleanVar from \"./nodes/std-library/variables/boolean\";\n\n// Utils\nimport Condition from \"./nodes/std-library/condition\";\nimport And from \"./nodes/std-library/and\";\nimport Or from \"./nodes/std-library/or\";\nimport BooleanToString from \"./nodes/std-library/booleantostring\";\nimport DateToString from \"./nodes/std-library/datetostring\";\nimport StringMapper from \"./nodes/std-library/stringmapper\";\nimport Inverter from \"./nodes/std-library/inverter\";\nimport Substring from \"./nodes/std-library/substring\";\nimport StringFormat from \"./nodes/std-library/stringformat\";\nimport Counter from \"./nodes/std-library/counter\";\nimport UniqueId from \"./nodes/std-library/uniqueid\";\n\n// User\nimport SetUserProperties from \"./nodes/std-library/user/setuserproperties\";\nimport User from \"./nodes/std-library/user/user\";\n\nfunction registerNodes(Runtime) {\n [\n ComponentInputs,\n ComponentOutputs,\n\n RunTasks,\n\n RestNode,\n\n Expression,\n SimpleJavaScript,\n\n DbCollectionNode2,\n DbModelNode2,\n SetDbModelPropertiesNode,\n DeleteDbModelPropertiesNode,\n NewDbModelPropertiesNode,\n DbModelNodeAddRelation,\n DbModelNodeRemoveRelation,\n FilterDbModelsNode,\n\n ModelNode2,\n SetModelPropertiesNode,\n NewModelNode,\n\n CloudFileNode,\n DbConfig,\n\n NumberVar,\n StringVar,\n BooleanVar,\n\n Condition,\n And,\n Or,\n BooleanToString,\n DateToString,\n StringMapper,\n Inverter,\n Substring,\n StringFormat,\n Counter,\n UniqueId,\n\n SetUserProperties,\n User,\n ].forEach((node) => Runtime.registerNode(node));\n}\n\nfunction Runtime(args) {\n args = args || {};\n args.platform = args.platform || {};\n Runtime.instance = this;\n\n this.type = args.type || \"browser\";\n this.noodlModules = [];\n this.eventEmitter = new EventEmitter();\n this.updateScheduled = false;\n this.rootComponent = null;\n this._currentLoadedData = null;\n this.isWaitingForExport = true;\n this.graphModel = new GraphModel();\n this.errorHandlers = [];\n this.frameNumber = 0;\n this.dontCreateRootComponent = !!args.dontCreateRootComponent;\n this.componentFilter = args.componentFilter;\n\n this.runningInEditor = args.runDeployed ? false : true;\n\n this.platform = {\n requestUpdate: args.platform.requestUpdate,\n getCurrentTime: args.platform.getCurrentTime,\n webSocketOptions: args.platform.webSocketOptions,\n objectToString: args.platform.objectToString,\n };\n\n if (!args.platform.requestUpdate) {\n throw new Error(\"platform.requestUpdate must be set\");\n }\n\n if (!args.platform.getCurrentTime) {\n throw new Error(\"platform.getCurrentTime must be set\");\n }\n\n //Create an editor connection even if we're running deployed.\n //If won't connect and act as a \"noop\" in deployed mode,\n // and reduce the need for lots of if(editorConnection)\n this.editorConnection = new EditorConnection({\n platform: args.platform,\n runtimeType: this.type,\n });\n\n this.context = new NodeContext({\n runningInEditor: args.runDeployed ? false : true,\n editorConnection: this.editorConnection,\n platform: this.platform,\n graphModel: this.graphModel,\n });\n\n this.context.eventEmitter.on(\n \"scheduleUpdate\",\n this.scheduleUpdate.bind(this)\n );\n\n if (!args.runDeployed) {\n this._setupEditorCommunication(args);\n }\n\n this.registerGraphModelListeners();\n\n registerNodes(this);\n}\n\nRuntime.prototype.prefetchBundles = async function (\n bundleNames,\n numParallelFetches\n) {\n await asyncPool(numParallelFetches, bundleNames, async (name) => {\n await this.context.fetchComponentBundle(name);\n });\n};\n\nRuntime.prototype._setupEditorCommunication = function (args) {\n function objectEquals(x, y) {\n if (x === null || x === undefined || y === null || y === undefined) {\n return x === y;\n }\n if (x === y) {\n return true;\n }\n if (Array.isArray(x) && x.length !== y.length) {\n return false;\n }\n\n // if they are strictly equal, they both need to be object at least\n if (!(x instanceof Object)) {\n return false;\n }\n if (!(y instanceof Object)) {\n return false;\n }\n\n // recursive object equality check\n var p = Object.keys(x);\n return (\n Object.keys(y).every(function (i) {\n return p.indexOf(i) !== -1;\n }) &&\n p.every(function (i) {\n return objectEquals(x[i], y[i]);\n })\n );\n }\n\n this.editorConnection.on(\"exportDataFull\", async (exportData) => {\n if (this.graphModel.isEmpty() === false) {\n this.reload();\n return;\n }\n\n this.isWaitingForExport = false;\n if (objectEquals(this._currentLoadedData, exportData) === false) {\n if (this.componentFilter) {\n exportData.components = exportData.components.filter((c) =>\n this.componentFilter(c)\n );\n }\n\n await this.setData(exportData);\n\n //get the rest of the components\n //important to get all the dynamic ports evaluated\n if (exportData.componentIndex) {\n const allBundles = Object.keys(exportData.componentIndex);\n await this.prefetchBundles(allBundles, 2);\n }\n\n this.graphModel.emit(\"editorImportComplete\");\n }\n });\n\n this.editorConnection.on(\"reload\", this.reload.bind(this));\n this.editorConnection.on(\n \"modelUpdate\",\n this.onModelUpdateReceived.bind(this)\n );\n this.editorConnection.on(\n \"metadataUpdate\",\n this.onMetaDataUpdateReceived.bind(this)\n );\n\n this.editorConnection.on(\"connected\", () => {\n this.sendNodeLibrary();\n });\n};\n\nRuntime.prototype.setDebugInspectorsEnabled = function (enabled) {\n this.context.setDebugInspectorsEnabled(enabled);\n};\n\nRuntime.prototype.registerModule = function (module) {\n if (module.nodes) {\n for (let nodeDefinition of module.nodes) {\n if (!nodeDefinition.node) nodeDefinition = { node: nodeDefinition };\n nodeDefinition.node.module = module.name || \"Unknown Module\";\n this.registerNode(nodeDefinition);\n }\n }\n\n this.noodlModules.push(module);\n};\n\nRuntime.prototype.registerGraphModelListeners = function () {\n var self = this;\n\n this.graphModel.on(\n \"componentAdded\",\n function (component) {\n self.context.registerComponentModel(component);\n },\n this\n );\n\n this.graphModel.on(\n \"componentRemoved\",\n function (component) {\n self.context.deregisterComponentModel(component);\n },\n this\n );\n};\n\nRuntime.prototype.reload = function () {\n location.reload();\n};\n\nRuntime.prototype.registerNode = function (nodeDefinition) {\n if (nodeDefinition.node) {\n const definedNode = defineNode(nodeDefinition.node);\n this.context.nodeRegister.register(definedNode);\n\n definedNode.setupNumberedInputDynamicPorts &&\n definedNode.setupNumberedInputDynamicPorts(this.context, this.graphModel);\n } else {\n this.context.nodeRegister.register(nodeDefinition);\n }\n\n nodeDefinition.setup && nodeDefinition.setup(this.context, this.graphModel);\n};\n\nRuntime.prototype._setRootComponent = async function (rootComponentName) {\n if (this.rootComponent && this.rootComponent.name === rootComponentName)\n return;\n\n if (this.rootComponent) {\n this.rootComponent.model &&\n this.rootComponent.model.removeListenersWithRef(this);\n this.rootComponent = undefined;\n }\n\n if (rootComponentName) {\n this.rootComponent = await this.context.createComponentInstanceNode(\n rootComponentName,\n \"rootComponent\"\n );\n\n this.rootComponent.componentModel.on(\n \"rootAdded\",\n () => this.eventEmitter.emit(\"rootComponentUpdated\"),\n this\n );\n this.rootComponent.componentModel.on(\n \"rootRemoved\",\n () => this.eventEmitter.emit(\"rootComponentUpdated\"),\n this\n );\n\n this.context.setRootComponent(this.rootComponent);\n }\n\n this.eventEmitter.emit(\"rootComponentUpdated\");\n};\n\nRuntime.prototype.setData = async function (graphData) {\n // Added for SSR Support\n // In SSR, we re-load the graphData and when we render the componet it will\n // invoke this method again, which will cause a duplicate node exception.\n // To avoid this, we flag the runtime to not load again.\n if (this._disableLoad) return;\n\n this._currentLoadedData = graphData;\n await this.graphModel.importEditorData(graphData);\n\n // Run setup on all modules\n for (const module of this.noodlModules) {\n typeof module.setup === \"function\" && module.setup.apply(module);\n }\n\n if (this.dontCreateRootComponent !== true) {\n await this._setRootComponent(this.graphModel.rootComponent);\n\n //listen to delta updates on the root component\n this.graphModel.on(\"rootComponentNameUpdated\", (name) => {\n this._setRootComponent(name);\n });\n\n //check if the root component was deleted\n this.graphModel.on(\"componentRemoved\", (componentModel) => {\n if (\n this.rootComponent &&\n this.rootComponent.name === componentModel.name\n ) {\n this._setRootComponent(null);\n }\n });\n\n //check if the root component was added when it previously didn't exist (e.g. when user deletes it and then hits undo)\n this.graphModel.on(\"componentAdded\", (componentModel) => {\n setTimeout(() => {\n if (\n !this.rootComponent &&\n this.graphModel.rootComponent === componentModel.name\n ) {\n this._setRootComponent(componentModel.name);\n }\n }, 1);\n });\n }\n\n this.scheduleUpdate();\n};\n\nRuntime.prototype.scheduleUpdate = function () {\n if (this.updateScheduled) {\n return;\n }\n\n this.updateScheduled = true;\n this.platform.requestUpdate(Runtime.prototype._doUpdate.bind(this));\n};\n\nRuntime.prototype._doUpdate = function () {\n this.updateScheduled = false;\n\n this.context.currentFrameTime = this.platform.getCurrentTime();\n\n this.context.eventEmitter.emit(\"frameStart\");\n\n this.context.update();\n\n this.context.eventEmitter.emit(\"frameEnd\");\n\n this.frameNumber++;\n};\n\nRuntime.prototype.setProjectSettings = function (settings) {\n this.projectSettings = settings;\n};\n\nRuntime.prototype.getNodeLibrary = function () {\n var projectSettings = ProjectSettings.generateProjectSettings(\n this.graphModel.getSettings(),\n this.noodlModules\n );\n\n if (this.projectSettings) {\n this.projectSettings.ports &&\n (projectSettings.ports = projectSettings.ports.concat(\n this.projectSettings.ports\n ));\n this.projectSettings.dynamicports &&\n (projectSettings.dynamicports = projectSettings.ports.concat(\n this.projectSettings.dynamicports\n ));\n }\n\n var nodeLibrary = generateNodeLibrary(this.context.nodeRegister);\n nodeLibrary.projectsettings = projectSettings;\n return JSON.stringify(nodeLibrary, null, 3);\n};\n\nRuntime.prototype.sendNodeLibrary = function () {\n const nodeLibrary = this.getNodeLibrary();\n if (this.lastSentNodeLibrary !== nodeLibrary) {\n this.lastSentNodeLibrary = nodeLibrary;\n this.editorConnection.sendNodeLibrary(nodeLibrary);\n }\n};\n\nRuntime.prototype.connectToEditor = function (address) {\n this.editorConnection.connect(address);\n};\n\nRuntime.prototype.onMetaDataUpdateReceived = function (event) {\n if (!this.graphModel.isEmpty()) {\n EditorMetaDataEventsHandler.handleEvent(\n this.context,\n this.graphModel,\n event\n );\n }\n};\n\nRuntime.prototype.onModelUpdateReceived = async function (event) {\n if (this.isWaitingForExport) {\n return;\n }\n\n if (event.type === \"projectInstanceChanged\") {\n this.reload();\n }\n //wait for data to load before applying model changes\n else if (this.graphModel.isEmpty() === false) {\n await EditorModelEventsHandler.handleEvent(\n this.context,\n this.graphModel,\n event\n );\n }\n};\n\nRuntime.prototype.addErrorHandler = function (callback) {\n this.errorHandlers.push(callback);\n};\n\nRuntime.prototype.reportError = function (message) {\n this.errorHandlers.forEach(function (eh) {\n eh(message);\n });\n};\n\nRuntime.prototype.getProjectSettings = function () {\n return this.graphModel.getSettings();\n};\n\nRuntime.prototype.getMetaData = function (key) {\n return this.graphModel.getMetaData(key);\n};\n\nRuntime.Services = Services;\nRuntime.Node = Node;\nRuntime.NodeDefinition = { defineNode };\nRuntime.EdgeTriggeredInput = EdgeTriggeredInput;\n\nexport { Runtime };\n","import { Runtime } from \"../runtime\";\nimport { Model } from \"../model\";\nimport { Collection } from \"../collection\";\nimport { CloudFile } from \"./cloudfile\";\nimport { EventEmitter } from \"../events\";\n\nconst _protectedFields = {\n _common: [\"_createdAt\", \"_updatedAt\", \"objectId\"],\n _User: [\"_email_verify_token\"],\n};\n\nfunction _removeProtectedFields(data, className) {\n const _data = Object.assign({}, data);\n _protectedFields._common.forEach((f) => delete _data[f]);\n if (className && _protectedFields[className])\n _protectedFields[className].forEach((f) => delete _data[f]);\n\n return _data;\n}\n\nclass CloudStore {\n constructor(modelScope) {\n this._initCloudServices();\n\n this.events = new EventEmitter();\n this.events.setMaxListeners(10000);\n this.modelScope = modelScope;\n\n this._fromJSON = (item, collectionName) =>\n CloudStore._fromJSON(item, collectionName, modelScope);\n this._deserializeJSON = (data, type) =>\n CloudStore._deserializeJSON(data, type, modelScope);\n this._serializeObject = (data, collectionName) =>\n CloudStore._serializeObject(data, collectionName, modelScope);\n }\n\n _initCloudServices() {\n _collections = undefined; // clear collection cache, so it's refetched\n\n const cloudServices = Runtime.instance.getMetaData(\"cloudservices\");\n if (cloudServices) {\n this.appId = cloudServices.appId;\n this.endpoint = cloudServices.endpoint;\n }\n\n const dbVersionMajor = Runtime.instance.getMetaData(\"dbVersionMajor\");\n this.dbVersionMajor = dbVersionMajor;\n }\n\n on() {\n this.events.on.apply(this.events, arguments);\n }\n\n off() {\n this.events.off.apply(this.events, arguments);\n }\n\n _makeRequest(path, options) {\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // Running in browser\n var xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n var json;\n try {\n // In SSR, we dont have xhr.response\n json = JSON.parse(xhr.response || xhr.responseText);\n } catch (e) {}\n\n if (xhr.status === 200 || xhr.status === 201) {\n options.success(json);\n } else\n options.error(\n json || { error: xhr.responseText, status: xhr.status }\n );\n }\n };\n\n xhr.open(options.method || \"GET\", this.endpoint + path, true);\n\n xhr.setRequestHeader(\"X-Parse-Application-Id\", this.appId);\n if (typeof _noodl_cloudservices !== \"undefined\") {\n xhr.setRequestHeader(\n \"X-Parse-Master-Key\",\n _noodl_cloudservices.masterKey\n );\n }\n\n // Check for current users\n var _cu = localStorage[\"Parse/\" + this.appId + \"/currentUser\"];\n if (_cu !== undefined) {\n try {\n const currentUser = JSON.parse(_cu);\n xhr.setRequestHeader(\n \"X-Parse-Session-Token\",\n currentUser.sessionToken\n );\n } catch (e) {\n // Failed to extract session token\n }\n }\n\n if (options.onUploadProgress) {\n xhr.upload.onprogress = (pe) => options.onUploadProgress(pe);\n }\n\n if (options.content instanceof File) {\n xhr.send(options.content);\n } else {\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n xhr.send(JSON.stringify(options.content));\n }\n } else {\n // Running in cloud runtime\n const endpoint =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.endpoint\n : this.endpoint;\n const appId =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.appId\n : this.appId;\n const masterKey =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.masterKey\n : undefined;\n\n fetch(endpoint + path, {\n method: options.method || \"GET\",\n headers: {\n \"X-Parse-Application-Id\": appId,\n \"X-Parse-Master-Key\": masterKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(options.content),\n })\n .then((r) => {\n if (r.status === 200 || r.status === 201) {\n if (options.method === \"DELETE\") {\n options.success(undefined);\n } else {\n r.json()\n .then((json) => options.success(json))\n .catch((e) =>\n options.error({\n error: \"CloudStore: Failed to get json result.\",\n })\n );\n }\n } else {\n if (options.method === \"DELETE\") {\n options.error({ error: \"Failed to delete.\" });\n } else {\n r.json()\n .then((json) => options.error(json))\n .catch((e) => options.error({ error: \"Failed to fetch.\" }));\n }\n }\n })\n .catch((e) => {\n options.error({ error: e.message });\n });\n }\n }\n\n query(options) {\n this._makeRequest(\"/classes/\" + options.collection, {\n method: \"POST\",\n content: {\n _method: \"GET\",\n where: options.where,\n limit: options.limit,\n skip: options.skip,\n include: Array.isArray(options.include)\n ? options.include.join(\",\")\n : options.include,\n keys: Array.isArray(options.select)\n ? options.select.join(\",\")\n : options.select,\n order: Array.isArray(options.sort)\n ? options.sort.join(\",\")\n : options.sort,\n count: options.count,\n },\n success(response) {\n options.success(response.results, response.count);\n },\n error() {\n options.error();\n },\n });\n }\n\n aggregate(options) {\n const args = [];\n\n if (!options.group) {\n options.error(\"You need to provide group option.\");\n return;\n }\n\n if (options.limit) args.push(\"limit=\" + options.limit);\n if (options.skip) args.push(\"skip=\" + options.skip);\n\n const grouping = {};\n\n Object.keys(options.group).forEach((k) => {\n const _g = {};\n const group = options.group[k];\n if (group[\"avg\"] !== undefined) _g[\"$avg\"] = \"$\" + group[\"avg\"];\n else if (group[\"sum\"] !== undefined) _g[\"$sum\"] = \"$\" + group[\"sum\"];\n else if (group[\"max\"] !== undefined) _g[\"$max\"] = \"$\" + group[\"max\"];\n else if (group[\"min\"] !== undefined) _g[\"$min\"] = \"$\" + group[\"min\"];\n else if (group[\"distinct\"] !== undefined)\n _g[\"$addToSet\"] = \"$\" + group[\"distinct\"];\n\n grouping[k] = _g;\n });\n\n // I don't know which version the API was changed, lets just say above 4 for now.\n if (this.dbVersionMajor && this.dbVersionMajor > 4) {\n grouping._id = null;\n\n if (options.where)\n args.push(\n \"$match=\" + encodeURIComponent(JSON.stringify(options.where))\n );\n\n args.push(\"$group=\" + JSON.stringify(grouping));\n } else {\n grouping.objectId = null;\n\n if (options.where)\n args.push(\"match=\" + encodeURIComponent(JSON.stringify(options.where)));\n\n args.push(\"group=\" + JSON.stringify(grouping));\n }\n\n this._makeRequest(\n \"/aggregate/\" +\n options.collection +\n (args.length > 0 ? \"?\" + args.join(\"&\") : \"\"),\n {\n success(response) {\n const res = {};\n\n if (!response.results || response.results.length !== 1) {\n options.success({}); // No result\n return;\n }\n\n Object.keys(options.group).forEach((k) => {\n res[k] = response.results[0][k];\n });\n\n options.success(res);\n },\n error() {\n options.error();\n },\n }\n );\n }\n\n count(options) {\n const args = [];\n\n if (options.where)\n args.push(\"where=\" + encodeURIComponent(JSON.stringify(options.where)));\n args.push(\"limit=0\");\n args.push(\"count=1\");\n\n this._makeRequest(\n \"/classes/\" +\n options.collection +\n (args.length > 0 ? \"?\" + args.join(\"&\") : \"\"),\n {\n success(response) {\n options.success(response.count);\n },\n error() {\n options.error();\n },\n }\n );\n }\n\n distinct(options) {\n const args = [];\n\n if (options.where)\n args.push(\"where=\" + encodeURIComponent(JSON.stringify(options.where)));\n args.push(\"distinct=\" + options.property);\n\n this._makeRequest(\n \"/aggregate/\" +\n options.collection +\n (args.length > 0 ? \"?\" + args.join(\"&\") : \"\"),\n {\n success(response) {\n options.success(response.results);\n },\n error() {\n options.error();\n },\n }\n );\n }\n\n /**\n *\n * @param {{\n * objectId: string;\n * collection: string;\n * keys?: string[] | string;\n * include?: string[] | string;\n * excludeKeys?: string[] | string;\n * success: (data: unknown) => void;\n * error: (error: unknown) => void;\n * }} options\n */\n fetch(options) {\n const args = [];\n\n if (options.include) {\n args.push(\n \"include=\" +\n (Array.isArray(options.include)\n ? options.include.join(\",\")\n : options.include)\n );\n }\n\n if (options.keys) {\n args.push(\n \"keys=\" +\n (Array.isArray(options.keys) ? options.keys.join(\",\") : options.keys)\n );\n }\n\n if (options.excludeKeys) {\n args.push(\n \"excludeKeys=\" +\n (Array.isArray(options.excludeKeys)\n ? options.excludeKeys.join(\",\")\n : options.excludeKeys)\n );\n }\n\n this._makeRequest(\n \"/classes/\" +\n options.collection +\n \"/\" +\n options.objectId +\n (args.length > 0 ? \"?\" + args.join(\"&\") : \"\"),\n {\n method: \"GET\",\n success: (response) => {\n options.success(response);\n this.events.emit(\"fetch\", {\n type: \"fetch\",\n objectId: options.objectId,\n object: response,\n collection: options.collection,\n });\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n create(options) {\n this._makeRequest(\"/classes/\" + options.collection, {\n method: \"POST\",\n content: Object.assign(\n _removeProtectedFields(\n _serializeObject(options.data, options.collection),\n options.collection\n ),\n { ACL: options.acl }\n ),\n success: (response) => {\n const _obj = Object.assign({}, options.data, response);\n options.success(_obj);\n this.events.emit(\"create\", {\n type: \"create\",\n objectId: options.objectId,\n object: _obj,\n collection: options.collection,\n });\n },\n error(res) {\n options.error(res.error);\n },\n });\n }\n\n increment(options) {\n const data = {};\n\n for (let key in options.properties) {\n data[key] = { __op: \"Increment\", amount: options.properties[key] };\n }\n\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"PUT\",\n content: data,\n success: (response) => {\n options.success(response);\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n save(options) {\n const _data = Object.assign({}, options.data);\n delete _data.createdAt;\n delete _data.updatedAt;\n\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"PUT\",\n content: Object.assign(\n _removeProtectedFields(\n _serializeObject(_data, options.collection),\n options.collection\n ),\n {\n ACL: options.acl,\n }\n ),\n success: (response) => {\n options.success(response);\n this.events.emit(\"save\", {\n type: \"save\",\n objectId: options.objectId,\n object: Object.assign({}, options.data, response),\n collection: options.collection,\n });\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n delete(options) {\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"DELETE\",\n success: () => {\n options.success();\n this.events.emit(\"delete\", {\n type: \"delete\",\n objectId: options.objectId,\n collection: options.collection,\n });\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n addRelation(options) {\n const _content = {};\n _content[options.key] = {\n __op: \"AddRelation\",\n objects: [\n {\n __type: \"Pointer\",\n objectId: options.targetObjectId,\n className: options.targetClass,\n },\n ],\n };\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"PUT\",\n content: _content,\n success(response) {\n options.success(response);\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n removeRelation(options) {\n const _content = {};\n _content[options.key] = {\n __op: \"RemoveRelation\",\n objects: [\n {\n __type: \"Pointer\",\n objectId: options.targetObjectId,\n className: options.targetClass,\n },\n ],\n };\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"PUT\",\n content: _content,\n success(response) {\n options.success(response);\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n uploadFile(options) {\n this._makeRequest(\"/files/\" + options.file.name, {\n method: \"POST\",\n content: options.file,\n contentType: options.file.type,\n success: (response) =>\n options.success(Object.assign({}, options.data, response)),\n error: (err) => options.error(err),\n onUploadProgress: options.onUploadProgress,\n });\n }\n\n /**\n * Users holding the master key are allowed to delete files\n *\n * @param {{\n * file: {\n * name: string;\n * }\n * success: (data: unknown) => void;\n * error: (error: unknown) => void;\n * }} options\n */\n deleteFile(options) {\n this._makeRequest(\"/files/\" + options.file.name, {\n method: \"DELETE\",\n success: (response) =>\n options.success(Object.assign({}, options.data, response)),\n error: (err) => options.error(err),\n });\n }\n}\n\nfunction _isArrayOfObjects(a) {\n if (!Array.isArray(a)) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (typeof a[i] !== \"object\" || a[i] === null) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction _toJSON(obj) {\n if (obj instanceof Model) {\n var res = {};\n for (var key in obj.data) {\n res[key] = _toJSON(obj.data[key]);\n }\n return res;\n } else if (obj instanceof Collection) {\n var res = [];\n obj.items.forEach((m) => {\n res.push(_toJSON(m));\n });\n return res;\n }\n return obj;\n}\n\nfunction _serializeObject(data, collectionName, modelScope) {\n if (CloudStore._collections[collectionName])\n var schema = CloudStore._collections[collectionName].schema;\n\n for (var key in data) {\n var _type =\n schema && schema.properties && schema.properties[key]\n ? schema.properties[key].type\n : undefined;\n\n if (data[key] === undefined || data[key] === null) {\n // Keep null and undefined as is\n } else if (_type === \"Pointer\" && typeof data[key] === \"string\") {\n // This is a string pointer to an object\n data[key] = {\n __type: \"Pointer\",\n className: schema.properties[key].targetClass,\n objectId: data[key],\n };\n } else if (\n _type === \"Pointer\" &&\n typeof data[key] === \"object\" &&\n (modelScope || Model).instanceOf(data[key])\n ) {\n // This is an embedded object that should be stored as pointer\n data[key] = {\n __type: \"Pointer\",\n className: schema.properties[key].targetClass,\n objectId: data[key].getId(),\n };\n } else if (\n _type === \"Date\" &&\n (typeof data[key] === \"string\" || data[key] instanceof Date)\n ) {\n data[key] = {\n __type: \"Date\",\n iso: data[key] instanceof Date ? data[key].toISOString() : data[key],\n };\n } else if (_type === \"File\" && data[key] instanceof CloudFile) {\n const cloudFile = data[key];\n data[key] = {\n __type: \"File\",\n url: cloudFile.getUrl(),\n name: cloudFile.getName(),\n };\n } else if (\n _type === \"Array\" &&\n typeof data[key] === \"string\" &&\n Collection.exists(data[key])\n ) {\n data[key] = _toJSON(Collection.get(data[key]));\n } else if (\n _type === \"Object\" &&\n typeof data[key] === \"string\" &&\n (modelScope || Model).exists(data[key])\n ) {\n data[key] = _toJSON((modelScope || Model).get(data[key]));\n } else if (_type === \"GeoPoint\" && typeof data[key] === \"object\") {\n data[key] = {\n __type: \"GeoPoint\",\n latitude: Number(data[key].latitude),\n longitude: Number(data[key].longitude),\n };\n } else data[key] = _toJSON(data[key]);\n }\n\n return data;\n}\n\n/**\n *\n * @param {unknown} data\n * @param {string} type\n * @param {*} modelScope\n * @returns\n */\nfunction _deserializeJSON(data, type, modelScope) {\n if (data === undefined) return undefined;\n if (data === null) return null;\n\n if (type === \"Relation\" && data.__type === \"Relation\") {\n return undefined; // Ignore relation fields\n }\n\n // This is a pointer type, resolve into id\n if (type === \"Pointer\" && data.__type === \"Pointer\") {\n return data.objectId;\n }\n\n if (type === \"Date\" && data.__type === \"Date\") {\n return new Date(data.iso);\n }\n\n if (type === \"Date\" && typeof data === \"string\") {\n return new Date(data);\n }\n\n if (type === \"File\" && data.__type === \"File\") {\n return new CloudFile(data);\n }\n\n if (type === \"GeoPoint\" && data.__type === \"GeoPoint\") {\n return {\n latitude: data.latitude,\n longitude: data.longitude,\n };\n }\n\n if (_isArrayOfObjects(data)) {\n const a = [];\n for (let i = 0; i < data.length; i++) {\n a.push(_deserializeJSON(data[i], undefined, modelScope));\n }\n const c = Collection.get();\n c.set(a);\n return c;\n }\n\n // An array with mixed types\n if (Array.isArray(data)) {\n return data;\n }\n\n // This is an array with mixed data, just return it\n if (\n data &&\n data.__type === \"Object\" &&\n data.className !== undefined &&\n data.objectId !== undefined\n ) {\n const _data = Object.assign({}, data);\n delete _data.className;\n delete _data.__type;\n return _fromJSON(_data, data.className, modelScope);\n }\n\n if (typeof data === \"object\" && data !== null) {\n // Try to get the model by id, if it is defined, otherwise we create a new unique id.\n const model = (modelScope || Model).get(data.id);\n for (const key in data) {\n const nestedValue = _deserializeJSON(data[key], undefined, modelScope);\n model.set(key, nestedValue);\n }\n return model;\n }\n\n return data;\n}\n\nfunction _fromJSON(item, collectionName, modelScope) {\n const modelStore = modelScope || Model;\n\n // Try to get the model by the object id (record) or id, otherwise we create a new unique id.\n const model = modelStore.get(item.objectId || item.id);\n model._class = collectionName;\n\n let schema = undefined;\n if (\n collectionName !== undefined &&\n CloudStore._collections[collectionName] !== undefined\n ) {\n schema = CloudStore._collections[collectionName].schema;\n }\n\n for (const key in item) {\n if (key === \"objectId\" || key === \"ACL\") {\n continue;\n }\n\n const _type =\n schema && schema.properties && schema.properties[key]\n ? schema.properties[key].type\n : undefined;\n const nestedValue = _deserializeJSON(item[key], _type, modelScope);\n model.set(key, nestedValue);\n }\n\n return model;\n}\n\nCloudStore._fromJSON = _fromJSON;\nCloudStore._deserializeJSON = _deserializeJSON;\nCloudStore._serializeObject = _serializeObject;\n\nCloudStore.forScope = (modelScope) => {\n if (modelScope === undefined) return CloudStore.instance;\n if (modelScope._cloudStore) return modelScope._cloudStore;\n\n modelScope._cloudStore = new CloudStore(modelScope);\n return modelScope._cloudStore;\n};\n\nvar _instance;\nObject.defineProperty(CloudStore, \"instance\", {\n get() {\n if (_instance === undefined) _instance = new CloudStore();\n return _instance;\n },\n});\n\nvar _collections;\nObject.defineProperty(CloudStore, \"_collections\", {\n get() {\n if (_collections === undefined) {\n _collections = {};\n const dbCollections = Runtime.instance.getMetaData(\"dbCollections\") || [];\n dbCollections.forEach((c) => {\n _collections[c.name] = c;\n });\n\n const systemCollections =\n Runtime.instance.getMetaData(\"systemCollections\") || [];\n systemCollections.forEach((c) => {\n _collections[c.name] = c;\n });\n }\n return _collections;\n },\n});\n\nCloudStore.invalidateCollections = () => {\n _collections = undefined;\n};\n\nexport { CloudStore };\n","import { CloudStore } from \"./cloudstore\";\nimport * as QueryUtils from \"./queryutils\";\nimport { Model } from \"../model\";\n\nfunction createRecordsAPI(modelScope) {\n let _cloudstore;\n const cloudstore = () => {\n // We must create the cloud store just in time so all meta data is loaded\n if (!_cloudstore) _cloudstore = new CloudStore(modelScope);\n return _cloudstore;\n };\n\n return {\n async query(className, query, options) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().query({\n collection: className,\n where: QueryUtils.convertFilterOp(query || {}, {\n collectionName: className,\n error: (e) => reject(e),\n modelScope,\n }),\n limit: options ? options.limit : undefined,\n sort: options ? options.sort : undefined,\n skip: options ? options.skip : undefined,\n include: options ? options.include : undefined,\n select: options ? options.select : undefined,\n count: options ? options.count : undefined,\n success: (results, count) => {\n const _results = results.map((r) =>\n cloudstore()._fromJSON(r, className)\n );\n if (count !== undefined) resolve({ results: _results, count });\n else resolve(_results);\n },\n error: (err) => {\n reject(Error(err || \"Failed to query.\"));\n },\n });\n });\n },\n\n async count(className, query) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().count({\n collection: className,\n where: query\n ? QueryUtils.convertFilterOp(query || {}, {\n collectionName: className,\n error: (e) => reject(e),\n modelScope,\n })\n : undefined,\n success: (count) => {\n resolve(count);\n },\n error: (err) => {\n reject(Error(err || \"Failed to query.\"));\n },\n });\n });\n },\n\n async distinct(className, property, query) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().distinct({\n collection: className,\n property,\n where: query\n ? QueryUtils.convertFilterOp(query || {}, {\n collectionName: className,\n error: (e) => reject(e),\n modelScope,\n })\n : undefined,\n success: (results) => {\n resolve(results);\n },\n error: (err) => {\n reject(Error(err || \"Failed to query.\"));\n },\n });\n });\n },\n\n async aggregate(className, group, query) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().aggregate({\n collection: className,\n group,\n where: query\n ? QueryUtils.convertFilterOp(query || {}, {\n collectionName: className,\n error: (e) => reject(e),\n modelScope,\n })\n : undefined,\n success: (results) => {\n resolve(results);\n },\n error: (err) => {\n reject(Error(err || \"Failed to aggregate.\"));\n },\n });\n });\n },\n\n /**\n *\n * @param {string | { getId(): string; }} objectOrId\n * @param {{\n * className: string;\n * keys?: string[] | string;\n * include?: string[] | string;\n * excludeKeys?: string[] | string;\n * }} options\n * @returns {Promise<unknown>}\n */\n async fetch(objectOrId, options) {\n if (typeof objectOrId === \"undefined\")\n return Promise.reject(new Error(\"'objectOrId' is undefined.\"));\n if (typeof objectOrId !== \"string\") objectOrId = objectOrId.getId();\n const className =\n (options ? options.className : undefined) ||\n (modelScope || Model).get(objectOrId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) {\n return reject(\"No class name specified\");\n }\n\n cloudstore().fetch({\n collection: className,\n objectId: objectOrId,\n keys: options?.keys,\n include: options?.include,\n excludeKeys: options?.excludeKeys,\n success(response) {\n const record = cloudstore()._fromJSON(response, className);\n resolve(record);\n },\n error(err) {\n reject(Error(err || \"Failed to fetch.\"));\n },\n });\n });\n },\n\n async increment(objectOrId, properties, options) {\n if (typeof objectOrId === \"undefined\")\n return Promise.reject(new Error(\"'objectOrId' is undefined.\"));\n if (typeof objectOrId !== \"string\") objectOrId = objectOrId.getId();\n const className =\n (options ? options.className : undefined) ||\n (modelScope || Model).get(objectOrId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n\n cloudstore().increment({\n collection: className,\n objectId: objectOrId,\n properties,\n success: (response) => {\n cloudstore()._fromJSON(\n Object.assign({ objectId: objectOrId }, response),\n className\n ); // Update values\n\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to increment.\"));\n },\n });\n });\n },\n\n async save(objectOrId, properties, options) {\n if (typeof objectOrId === \"undefined\")\n return Promise.reject(new Error(\"'objectOrId' is undefined.\"));\n if (typeof objectOrId !== \"string\") objectOrId = objectOrId.getId();\n const className =\n (options ? options.className : undefined) ||\n (modelScope || Model).get(objectOrId)._class;\n\n const model = (modelScope || Model).get(objectOrId);\n if (properties) {\n Object.keys(properties).forEach((p) => {\n model.set(p, properties[p]);\n });\n }\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n\n cloudstore().save({\n collection: className,\n objectId: objectOrId,\n data: properties || model.data,\n acl: options ? options.acl : undefined,\n success: (response) => {\n cloudstore()._fromJSON(\n Object.assign({ objectId: objectOrId }, response),\n className\n ); // Assign updated at\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to save.\"));\n },\n });\n });\n },\n\n async create(className, properties, options) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().create({\n collection: className,\n data: properties,\n acl: options ? options.acl : undefined,\n success: (data) => {\n // Successfully created\n const m = cloudstore()._fromJSON(data, className);\n resolve(m);\n },\n error: (err) => {\n reject(Error(err || \"Failed to insert.\"));\n },\n });\n });\n },\n\n async delete(objectOrId, options) {\n if (typeof objectOrId === \"undefined\")\n return Promise.reject(new Error(\"'objectOrId' is undefined.\"));\n if (typeof objectOrId !== \"string\") objectOrId = objectOrId.getId();\n const className =\n (options ? options.className : undefined) ||\n (modelScope || Model).get(objectOrId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n\n cloudstore().delete({\n collection: className,\n objectId: objectOrId,\n success: () => {\n (modelScope || Model).get(objectOrId).notify(\"delete\");\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to delete.\"));\n },\n });\n });\n },\n\n async addRelation(options) {\n const recordId = options.recordId || options.record.getId();\n const className =\n options.className || (modelScope || Model).get(recordId)._class;\n\n const targetRecordId =\n options.targetRecordId || options.targetRecord.getId();\n const targetClassName =\n options.targetClassName ||\n (modelScope || Model).get(targetRecordId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n if (!targetClassName) return reject(\"No target class name specified\");\n\n cloudstore().addRelation({\n collection: className,\n objectId: recordId,\n key: options.key,\n targetObjectId: targetRecordId,\n targetClass: targetClassName,\n success: (response) => {\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to add relation.\"));\n },\n });\n });\n },\n\n async removeRelation(options) {\n const recordId = options.recordId || options.record.getId();\n const className =\n options.className || (modelScope || Model).get(recordId)._class;\n\n const targetRecordId =\n options.targetRecordId || options.targetRecord.getId();\n const targetClassName =\n options.targetClassName ||\n (modelScope || Model).get(targetRecordId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n if (!targetClassName) return reject(\"No target class name specified\");\n\n cloudstore().removeRelation({\n collection: className,\n objectId: recordId,\n key: options.key,\n targetObjectId: targetRecordId,\n targetClass: targetClassName,\n success: (response) => {\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to add relation.\"));\n },\n });\n });\n },\n };\n}\n\nexport { createRecordsAPI };\n"],"names":["name","url","target","receiver","args","warning","value","listener","arg","n","that","type","i","doError","events","er","err","handler","len","listeners","prepend","m","existing","w","state","wrapped","list","position","originalListener","keys","key","unwrap","evlistener","emitter","arr","copy","index","ret","resolve","reject","errorListener","resolver","flags","wrapListener","context","nodeDefinition","id","nodeScope","inputName","metadata","scheduler","requestFrameCallback","timer","currentTime","remainingTimers","finishedTimers","timersThisFrame","t","localT","graphModel","getNodeScope","variant","typename","nodesWithVariant","node","inputPortName","connection","input","defaultUnit","inputs","newValue","output","newOutput","outputs","sourceNode","sourcePortName","sourcePort","outputValue","sourceNodeId","inputsToPort","c","maxUpdateIterations","inputNames","hasMoreInputs","queue","afterInputCallbacks","e","connectedPorts","outputName","queueValue","callback","nodeModel","port","deleteListener","event","defaultValue","s4","componentOwner","data","requiredKeys","connectionData","targetNode","parameters","b","inputA","inputB","updateOnDirtyFlagging","parentInstance","nodeInstance","childIndex","extraProps","prop","findNodesWithIdRec","scope","result","componentIds","nodeId","componentId","self","ids","findNodesWithTypeRec","res","connectionModel","componentModel","nodes","conn","child","connectionFrom","connectionTo","eventName","propagation","sendEventInThisScope","_exclude","eventReceivers","eventReceiver","consumed","parentNodeScope","children","_c","roots","root","removeNodesWithId","array","componentInput","prevChildRoot","newChildRoot","childRoot","componentInputs","componentOutput","inspectors","clientId","connectionId","rootComponent","inspector","loop","iterations","dirtyNodes","callbacks","eventEmitter","func","fetchBundle","bundleUrl","response","component","promise","bundleName","bundleDep","componentName","timestamp","connections","now","connectionIds","con","info","valuesToSend","inspectorValue","enabled","channelName","inputValues","onShow","onClose","popupComponent","params","popupNode","inputKey","group","bodyScroll","closePopupNodes","j","action","results","warningTypes","nodeType","inputMetadata","ref","map","warningKeys","opts","_opts","runningLocallyInBrowser","address","evt","text","message","content","seen","dt","trySend","msg","chunkSize","chunk","connectionMap","connectionsToPulse","before","after","ports","options","hash","detectRenamed","renamed","d","patches","request","nodelibrary","nodeMetadata","dynamicports","dp","dynamicPortGroup","portName","portData","plugType","nodeRegister","obj","nodeTypes","nodeObj","selectorNames","conditionalPortNames","exportOutput","coreNodes","moduleNodes","modules","p","projectSettings","stateTransitions","parameter","curve","stateTransition","changed","nodeData","targetPortName","rootId","oldName","newName","childModel","newParentModel","parentId","componentData","sheetName","bundles","isOnDefaultSheet","recurse","bundle","dep","exportData","componentNames","inputPorts","outputPorts","settings","v","variantName","variantTypeName","parameterName","parameterValue","transition","currentValue","cls","object","numberedInputs","oldRegisterInputIfNeeded","defaultValues","inputsMetadata","propName","NodeConstructor","editorConnection","collectPorts","portNames","numPorts","updatePorts","obj1","obj2","oldInit","difference","array1","array2","valueSet","applyPortDelta","newPorts","existingInputs","inputPortsToRemove","inputPortsToAdd","setInputValueOnNodeInstancesWithModel","existingOutputs","outputPortsToRemove","outputPortsToAdd","eventHandlers","targetNodeModel","allParams","param","componentInstance","poolLimit","values","iteratorFn","executing","item","modelData","collection","size","chars","objectId","guid","idx","l","old","temp","path","model","forceChange","oldValue","itemNode","internal","_isInputConnected","task","taskComponent","checkDone","op","script","status","_this","xhr","header","sentResponse","statusCode","responseType","rawResponse","responseData","headers","json","raw","resource","_exists","scriptWithoutComments","unique","_managePortsForNode","_updatePorts","exists","def","LARGE_ARRAY_SIZE","HASH_UNDEFINED","MAX_SAFE_INTEGER","argsTag","funcTag","genTag","reRegExpChar","reIsHostCtor","freeGlobal","global","freeSelf","apply","thisArg","arrayIncludes","length","baseIndexOf","arrayPush","offset","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","cacheHas","cache","getValue","isHostObject","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","uid","funcToString","hasOwnProperty","objectToString","reIsNative","Symbol","propertyIsEnumerable","splice","spreadableSymbol","nativeMax","Map","getNative","nativeCreate","Hash","entries","entry","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","setCacheAdd","setCacheHas","eq","baseDifference","iteratee","comparator","includes","isCommon","valuesLength","outer","computed","valuesIndex","baseFlatten","depth","isStrict","isFlattenable","baseIsNative","isObject","isMasked","pattern","isFunction","toSource","baseRest","start","otherArgs","isKeyable","isArray","isArguments","isArrayLikeObject","other","isArrayLike","isLength","isObjectLike","tag","newInputs","inputsToAdd","inputsToRemove","lastValue","inputValue","expression","constructor","F","addPort","identifiers","_id","_url","error","code","userCode","userObject","_extended","states","changedFunction","_userObjectExtended","_Node","_outputs","changedInputs","_addPortsFromMatch","match","_s","inputPort","getParentComponent","parent","componentObject","parentComponentObjectId","parentComponentObject","_sendSignal","AsyncFunction","_outputTypeEnums","ev","src","keyIndex","a","bItems","aItems","aKeys","bKeys","items","query","_res","_op","r","cond","schema","propertyType","targetClass","q","k","sort","sorting","s","filter","f","modelId","relationKey","className","opAndValue","_v","gp","collectionChangedScheduled","_addModelAtCorrectIndex","QueryUtils.compareObjects","QueryUtils.matchesQuery","matchesQuery","cloudstore","firstItem","limit","skip","count","storageSettings","_where","QueryUtils.convertVisualFilter","_sort","QueryUtils.convertVisualSorting","filterCode","_filter","_filterCb","QueryUtils.convertFilterOp","_sortCb","filterFuncArgs","userOutputGetter","dynamicSignals","dynamicSetters","userInputSetter","dbCollections","systemCollections","_systemClasses","_findRelations","_collectInputs","uniqueInputs","variables","ModelNodeDefinition","cb","_type","props","_p","_typeMap","addBaseInfo","_includeInputProperties","_includeRelations","enums","addModelId","_methods","_includeInputs","_includeOutputs","addInputProperties","_def","modelScope","_cu","cu","_super","ac","prefix","acl","_rule","rule","currentUserId","userId","_parts","DbModelCRUDBase.addBaseInfo","DbModelCRUDBase.addModelId","DbModelCRUDBase.addInputProperties","DbModelCRUDBase.addAccessControl","initValues","AddDbModelRelationNodeDefinition","_warning","targetModelId","_key","DbModelCRUDBase.addRelationProperty","filterSettings","filtered","_supportedTypes","properties","_types","ModelCRUDBase.addBaseInfo","ModelCRUDBase.addModelId","ModelCRUDBase.addInputProperties","newModel","_ConfigService","cloudServices","appId","endpoint","masterKey","config","configSchema","valueType","isCloud","condition","_value","format","date","month","monthShort","year","yearShort","hours","minutes","seconds","formatted","matches","portsNames","_ignoreKeys","userService","Runtime","RestNode","SetDbModelPropertiesNode","DeleteDbModelPropertiesNode","NewDbModelPropertiesNode","DbModelNodeAddRelation","DbModelNodeRemoveRelation","SetModelPropertiesNode","NewModelNode","CloudFileNode","bundleNames","numParallelFetches","objectEquals","x","y","allBundles","module","definedNode","rootComponentName","graphData","ProjectSettings.generateProjectSettings","nodeLibrary","EditorModelEventsHandler.handleEvent","eh","_data","collectionName","dbVersionMajor","currentUser","pe","grouping","_g","_obj","_content","cloudFile","nestedValue","_cloudstore","_results","property","objectOrId","record","recordId","targetRecordId","targetClassName"],"mappings":"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","x_google_ignoreList":[29]}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/api/cloudfile.js","../src/events.js","../src/noderegister.js","../src/timerscheduler.js","../src/variants.js","../src/outputproperty.js","../src/node.js","../src/guid.js","../src/nodescope.js","../src/nodes/componentinstance.js","../src/nodecontext.js","../src/eventsender.js","../src/services/services.js","../src/editorconnection.activewarnings.js","../src/editorconnection.js","../src/nodelibraryexport.js","../src/projectsettings.js","../src/models/nodemodel.js","../src/models/componentmodel.js","../src/models/graphmodel.js","../src/edgetriggeredinput.js","../src/nodedefinition.ts","../src/editormodeleventshandler.js","../src/async-pool.js","../src/nodes/componentinputs.js","../src/nodes/componentoutputs.js","../src/model.js","../src/nodes/std-library/runtasks.js","../src/nodes/std-library/data/restnode.js","../../../node_modules/.pnpm/lodash.difference@4.5.0/node_modules/lodash.difference/index.js","../src/nodes/std-library/expression.js","../src/utils.js","../src/javascriptnodeparser.js","../src/nodes/std-library/simplejavascript.js","../src/collection.js","../src/api/queryutils.js","../src/nodes/std-library/data/dbcollectionnode2.js","../src/nodes/std-library/data/dbmodelnode2.js","../src/nodes/std-library/data/dbmodelcrudbase.js","../src/nodes/std-library/data/setdbmodelpropertiesnode.js","../src/nodes/std-library/data/deletedbmodelpropertiesnode.js","../src/nodes/std-library/data/newdbmodelpropertiesnode.js","../src/nodes/std-library/data/dbmodelnode-addrelation.js","../src/nodes/std-library/data/dbmodelnode-removerelation.js","../src/nodes/std-library/data/filterdbmodelsnode.js","../src/nodes/std-library/data/modelnode2.js","../src/nodes/std-library/data/modelcrudbase.js","../src/nodes/std-library/data/setmodelpropertiesnode.js","../src/nodes/std-library/data/newmodelnode.js","../src/nodes/std-library/data/cloudfilenode.js","../src/api/configservice.ts","../src/nodes/std-library/data/dbconfig.js","../src/nodes/std-library/variables/variablebase.js","../src/nodes/std-library/variables/number.js","../src/nodes/std-library/variables/string.js","../src/nodes/std-library/variables/boolean.js","../src/nodes/std-library/condition.js","../src/nodes/std-library/and.js","../src/nodes/std-library/or.js","../src/nodes/std-library/booleantostring.js","../src/nodes/std-library/datetostring.js","../src/nodes/std-library/stringmapper.js","../src/nodes/std-library/inverter.js","../src/nodes/std-library/substring.js","../src/nodes/std-library/stringformat.js","../src/nodes/std-library/counter.js","../src/nodes/std-library/uniqueid.js","../src/nodes/std-library/user/setuserproperties.js","../src/nodes/std-library/user/user.js","../src/runtime.js","../src/api/cloudstore.js","../src/api/records.js"],"sourcesContent":["class CloudFile {\n constructor({ name, url }) {\n this.name = name;\n this.url = url;\n }\n\n getUrl() {\n return this.url;\n }\n\n getName() {\n return this.name;\n }\n\n toString() {\n return this.url;\n }\n}\n\nexport { CloudFile };\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar R = typeof Reflect === \"object\" ? Reflect : null;\nvar ReflectApply =\n R && typeof R.apply === \"function\"\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n };\n\nvar ReflectOwnKeys;\nif (R && typeof R.ownKeys === \"function\") {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target).concat(\n Object.getOwnPropertySymbols(target)\n );\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN =\n Number.isNaN ||\n function NumberIsNaN(value) {\n return value !== value;\n };\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nexport { EventEmitter };\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== \"function\") {\n throw new TypeError(\n 'The \"listener\" argument must be of type Function. Received type ' +\n typeof listener\n );\n }\n}\n\nObject.defineProperty(EventEmitter, \"defaultMaxListeners\", {\n enumerable: true,\n get() {\n return defaultMaxListeners;\n },\n set(arg) {\n if (typeof arg !== \"number\" || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError(\n 'The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' +\n arg +\n \".\"\n );\n }\n defaultMaxListeners = arg;\n },\n});\n\nEventEmitter.init = function () {\n if (\n this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events\n ) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== \"number\" || n < 0 || NumberIsNaN(n)) {\n throw new RangeError(\n 'The value of \"n\" is out of range. It must be a non-negative number. Received ' +\n n +\n \".\"\n );\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = type === \"error\";\n\n var events = this._events;\n if (events !== undefined) doError = doError && events.error === undefined;\n else if (!doError) return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0) er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error(\n \"Unhandled error.\" + (er ? \" (\" + er.message + \")\" : \"\")\n );\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined) return false;\n\n if (typeof handler === \"function\") {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit(\n \"newListener\",\n type,\n listener.listener ? listener.listener : listener\n );\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === \"function\") {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend\n ? [listener, existing]\n : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error(\n \"Possible EventEmitter memory leak detected. \" +\n existing.length +\n \" \" +\n String(type) +\n \" listeners \" +\n \"added. Use emitter.setMaxListeners() to \" +\n \"increase limit\"\n );\n w.name = \"MaxListenersExceededWarning\";\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener = function prependListener(\n type,\n listener\n) {\n return _addListener(this, type, listener, true);\n};\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0) return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = {\n fired: false,\n wrapFn: undefined,\n target: target,\n type: type,\n listener: listener,\n };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener = function prependOnceListener(\n type,\n listener\n) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n};\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener = function removeListener(\n type,\n listener\n) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined) return this;\n\n list = events[type];\n if (list === undefined) return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0) this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit(\"removeListener\", type, list.listener || listener);\n }\n } else if (typeof list !== \"function\") {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0) return this;\n\n if (position === 0) list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1) events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit(\"removeListener\", type, originalListener || listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined) return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0) this._events = Object.create(null);\n else delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === \"removeListener\") continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners(\"removeListener\");\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === \"function\") {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n};\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined) return [];\n\n var evlistener = events[type];\n if (evlistener === undefined) return [];\n\n if (typeof evlistener === \"function\")\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap\n ? unwrapListeners(evlistener)\n : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function (emitter, type) {\n if (typeof emitter.listenerCount === \"function\") {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === \"function\") {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i) copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++) list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nexport function once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === \"function\") {\n emitter.removeListener(\"error\", errorListener);\n }\n resolve([].slice.call(arguments));\n }\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== \"error\") {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === \"function\") {\n eventTargetAgnosticAddListener(emitter, \"error\", handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === \"function\") {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === \"function\") {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError(\n 'The \"emitter\" argument must be of type EventEmitter. Received type ' +\n typeof emitter\n );\n }\n}\n","function NodeRegister(context) {\n this._constructors = {};\n this.context = context;\n}\n\nNodeRegister.prototype.register = function (nodeDefinition) {\n var name = nodeDefinition.metadata.name;\n\n this._constructors[name] = nodeDefinition;\n};\n\nNodeRegister.prototype.createNode = function (name, id, nodeScope) {\n if (this._constructors.hasOwnProperty(name) === false) {\n throw new Error(\"Unknown node type with name \" + name);\n }\n\n return this._constructors[name](this.context, id, nodeScope);\n};\n\nNodeRegister.prototype.getNodeMetadata = function (type) {\n if (this._constructors.hasOwnProperty(type) === false) {\n throw new Error(\"Unknown node type with name \" + type);\n }\n\n return this._constructors[type].metadata;\n};\n\nNodeRegister.prototype.hasNode = function (type) {\n return this._constructors.hasOwnProperty(type);\n};\n\nNodeRegister.prototype.getInputType = function (type, inputName) {\n const metadata = this.getNodeMetadata(type);\n return metadata.inputs[inputName] && metadata.inputs[inputName].type;\n};\n\nexport { NodeRegister };\n","function Timer(scheduler, args) {\n this.duration = args.duration || 0;\n this._isRunning = false;\n this._hasCalledOnStart = false;\n this.scheduler = scheduler;\n this.repeatCount = 1;\n this.delay = 0;\n\n for (var arg in args) {\n this[arg] = args[arg];\n }\n}\n\nTimer.prototype.start = function () {\n if (this._isRunning) {\n this.stop();\n }\n\n this.scheduler.scheduleTimer(this);\n return this;\n};\n\nTimer.prototype.stop = function () {\n this.scheduler.stopTimer(this);\n this._hasCalledOnStart = false;\n this._isRunning = false;\n this._wasStopped = true; // This is used to avoid calling onFinish\n};\n\nTimer.prototype.isRunning = function () {\n return this._isRunning;\n};\n\nTimer.prototype.durationLeft = function () {\n return this._durationLeft;\n};\n\nfunction TimerScheduler(requestFrameCallback) {\n this.requestFrame = requestFrameCallback;\n this.runningTimers = [];\n this.newTimers = [];\n}\n\nTimerScheduler.prototype.createTimer = function (args) {\n return new Timer(this, args);\n};\n\nTimerScheduler.prototype.scheduleTimer = function (timer) {\n if (this.newTimers.indexOf(timer) === -1) {\n if (timer.repeatCount === 0) {\n timer.repeatCount = 100000;\n }\n\n this.newTimers.push(timer);\n this.requestFrame();\n }\n};\n\nTimerScheduler.prototype.stopTimer = function (timer) {\n var index;\n\n if (timer._isRunning) {\n index = this.runningTimers.indexOf(timer);\n if (index !== -1) {\n this.runningTimers.splice(index, 1);\n }\n\n if (timer.onStop && !timer._wasStopped) {\n timer.onStop();\n }\n } else {\n index = this.newTimers.indexOf(timer);\n if (index !== -1) {\n this.newTimers.splice(index, 1);\n }\n }\n};\n\nTimerScheduler.prototype.runTimers = function (currentTime) {\n var remainingTimers = [],\n finishedTimers = [],\n timersThisFrame = [];\n\n var i,\n len = this.runningTimers.length,\n timer;\n\n //copy timer list in case timers are added or removed during onStart or onRunning\n for (i = 0; i < len; ++i) {\n timersThisFrame[i] = this.runningTimers[i];\n }\n\n for (i = 0; i < len; ++i) {\n timer = timersThisFrame[i];\n if (timer && currentTime >= timer._start) {\n if (timer._hasCalledOnStart === false && timer.onStart) {\n timer.onStart();\n timer._hasCalledOnStart = true;\n }\n\n var t;\n if (timer.duration > 0) {\n t = (currentTime - timer._start) / (timer.duration * timer.repeatCount);\n } else {\n t = 1.0;\n }\n\n timer._durationLeft = timer.duration * (1 - t);\n\n var localT = t * timer.repeatCount - Math.floor(t * timer.repeatCount);\n if (t >= 1.0) {\n localT = 1.0;\n }\n\n if (timer.onRunning) {\n timer.onRunning(localT);\n }\n\n if (t < 1.0 && timer._isRunning) {\n remainingTimers.push(timer);\n } else if (!timer._wasStopped) {\n finishedTimers.push(timer);\n }\n } else {\n remainingTimers.push(timer);\n }\n }\n\n this.runningTimers = remainingTimers;\n\n for (i = 0; i < finishedTimers.length; ++i) {\n finishedTimers[i]._isRunning = false;\n finishedTimers[i]._hasCalledOnStart = false;\n if (finishedTimers[i].onFinish) {\n finishedTimers[i].onFinish();\n }\n }\n\n //add newly queued timers\n if (this.newTimers.length > 0) {\n for (i = 0; i < this.newTimers.length; ++i) {\n timer = this.newTimers[i];\n timer._start = currentTime + timer.delay;\n timer._isRunning = true;\n timer._wasStopped = false;\n this.runningTimers.push(timer);\n\n if (timer.delay === 0) {\n //play first timer frame directly to keep everything nicely synched\n if (timer.onStart) {\n timer.onStart();\n timer._hasCalledOnStart = true;\n }\n if (timer.onRunning) {\n timer.onRunning(0);\n }\n }\n }\n this.newTimers.length = 0;\n }\n};\n\nTimerScheduler.prototype.hasPendingTimers = function () {\n return this.runningTimers.length > 0 || this.newTimers.length > 0;\n};\n\nexport { TimerScheduler };\n","export class Variants {\n constructor({ graphModel, getNodeScope }) {\n this.getNodeScope = getNodeScope;\n\n if (graphModel) {\n this.graphModel = graphModel;\n graphModel.on(\"variantUpdated\", (variant) =>\n this.onVariantUpdated(variant)\n );\n }\n }\n\n getVariant(typename, name) {\n if (!this.graphModel) return undefined;\n\n return this.graphModel.getVariant(typename, name);\n }\n\n onVariantUpdated(variant) {\n const nodeScope = this.getNodeScope();\n if (!nodeScope) return;\n\n //get all nodes with the type the variant applies to\n const nodes = nodeScope.getNodesWithTypeRecursive(variant.typename);\n\n //and filter for the ones using the updated variant\n const nodesWithVariant = nodes.filter((node) => {\n //if a variant has been set during runtime, it'll override the value from the model\n if (node.variant) return node.variant.name === variant.name;\n\n //otherwise check the model (which always matches the editor)\n return node.model && node.model.variant === variant.name;\n });\n\n //and re-apply the variant\n for (const node of nodesWithVariant) {\n node.setVariant(variant);\n }\n }\n}\n","/**\n * @class OutputProperty\n *\n * @param args Arguments\n * @param {Function} args.getter Function that returns the value\n * @param {Node} args.owner Port owner\n * @param {string} args.type Output value type\n * @constructor\n */\nfunction OutputProperty(args) {\n if (!args.owner) {\n throw new Error(\"Owner must be set\");\n }\n this.getter = args.getter;\n this.connections = [];\n this.owner = args.owner;\n this.name = args.name;\n this.onFirstConnectionAdded = args.onFirstConnectionAdded;\n this.onLastConnectionRemoved = args.onLastConnectionRemoved;\n\n this._id = undefined;\n}\n\nObject.defineProperties(OutputProperty.prototype, {\n /**\n * Gets the current value\n * @name OutputProperty#value\n * @readonly\n */\n value: {\n get() {\n return this.getter.call(this.owner);\n },\n },\n\n id: {\n get() {\n if (!this._id) {\n this._id = this.owner.id + this.name;\n }\n return this._id;\n },\n },\n\n /**\n * Registers a connection to propagate dirtiness\n * Also records which input port it's connected to so nodes like\n * Animation can set it's implicit start value\n * @name OutputProperty#registerConnection\n * @readonly\n */\n registerConnection: {\n value(node, inputPortName) {\n this.connections.push({\n node: node,\n inputPortName: inputPortName,\n });\n\n if (this.connections.length === 1 && this.onFirstConnectionAdded) {\n this.onFirstConnectionAdded.call(this.owner);\n }\n },\n },\n\n /**\n * Deregisters a connection to a specific input port\n * @name OutputProperty#deregisterConnection\n * @readonly\n */\n deregisterConnection: {\n value(node, inputPortName) {\n for (var i = 0; i < this.connections.length; i++) {\n var connection = this.connections[i];\n if (\n connection.node === node &&\n connection.inputPortName === inputPortName\n ) {\n this.connections.splice(i, 1);\n break;\n }\n }\n\n if (this.connections.length === 0 && this.onLastConnectionRemoved) {\n this.onLastConnectionRemoved.call(this.owner);\n }\n },\n },\n\n /**\n * Sets dirty flag of all nodes that depend on this output port\n * @name OutputProperty#flagDependeesDirty\n * @readonly\n */\n flagDependeesDirty: {\n value(value) {\n for (var i = 0, len = this.connections.length; i < len; i++) {\n this.connections[i].node.flagDirty();\n }\n },\n },\n sendValue: {\n value(value) {\n if (this._lastUpdateIteration !== this.owner._updatedAtIteration) {\n this._lastUpdateIteration = this.owner._updatedAtIteration;\n this.valuesSendThisIteration = 0;\n } else {\n this.valuesSendThisIteration++;\n }\n\n if (this.valuesSendThisIteration > 500) {\n //this will make the owner send a warning and stop its update\n this.owner._cyclicLoop = true;\n }\n\n for (var i = 0, len = this.connections.length; i < len; i++) {\n var connection = this.connections[i];\n connection.node._setValueFromConnection(\n connection.inputPortName,\n value\n );\n }\n },\n },\n /**\n * @name OutputProperty#hasConnections\n * @readonly\n */\n hasConnections: {\n value() {\n return this.connections.length > 0;\n },\n },\n});\n\nexport { OutputProperty };\n","import { OutputProperty } from \"./outputproperty\";\n\n/**\n * Base class for all Nodes\n * @constructor\n */\nfunction Node(context, id) {\n this.id = id;\n this.context = context;\n this._dirty = false;\n\n this._inputs = {};\n this._inputValues = {};\n this._outputs = {};\n\n this._inputConnections = {};\n this._outputList = [];\n this._isUpdating = false;\n this._inputValuesQueue = {};\n this._afterInputsHaveUpdatedCallbacks = [];\n\n this._internal = {};\n this._signalsSentThisUpdate = {};\n\n this._deleted = false;\n this._deleteListeners = [];\n this._isFirstUpdate = true;\n\n this._valuesFromConnections = {};\n this.updateOnDirtyFlagging = true;\n}\n\nNode.prototype.getInputValue = function (name) {\n return this._inputValues[name];\n};\n\nNode.prototype.registerInput = function (name, input) {\n if (this.hasInput(name)) {\n throw new Error(\"Input property \" + name + \" already registered\");\n }\n\n this._inputs[name] = input;\n\n if (input.type && input.type.units) {\n const defaultUnit = input.type.defaultUnit || input.type.units[0];\n this._inputValues[name] = {\n value: input.default,\n type: defaultUnit,\n };\n } else if (input.hasOwnProperty(\"default\")) {\n this._inputValues[name] = input.default;\n }\n};\n\nNode.prototype.deregisterInput = function (name) {\n if (this.hasInput(name) === false) {\n throw new Error(\"Input property \" + name + \" doesn't exist\");\n }\n delete this._inputs[name];\n delete this._inputValues[name];\n};\n\nNode.prototype.registerInputs = function (inputs) {\n for (const name in inputs) {\n this.registerInput(name, inputs[name]);\n }\n};\n\nNode.prototype.getInput = function (name) {\n if (this.hasInput(name) === false) {\n console.log(\"Node \" + this.name + \": Invalid input property \" + name);\n return undefined;\n }\n\n return this._inputs[name];\n};\n\nNode.prototype.hasInput = function (name) {\n return name in this._inputs;\n};\n\nNode.prototype.registerInputIfNeeded = function () {\n //noop, can be overriden by subclasses\n};\n\nNode.prototype.setInputValue = function (name, value) {\n const input = this.getInput(name);\n if (!input) {\n console.log(\"node doesn't have input\", name);\n return;\n }\n\n //inputs with units always expect objects in the shape of {value, unit, ...}\n //these inputs might sometimes get raw numbers without units, and in those cases\n //Noodl should just update the value and not the other parameters\n const currentInputValue = this._inputValues[name];\n\n if (isNaN(value) === false && currentInputValue && currentInputValue.unit) {\n //update the value, and keep the other parameters\n const newValue = Object.assign({}, currentInputValue); //copy it, so we don't modify the original object (e.g. it might come from a variant)\n newValue.value = value;\n value = newValue;\n }\n\n //Save the current input value. Save it before resolving color styles so delta updates on color styles work correctly\n this._inputValues[name] = value;\n\n if (input.type === \"color\" && this.context && this.context.styles) {\n value = this.context.styles.resolveColor(value);\n } else if (input.type === \"array\" && typeof value === \"string\") {\n try {\n value = eval(value);\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"invalid-array-\" + name\n );\n } catch (e) {\n value = [];\n console.log(e);\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"invalid-array-\" + name,\n {\n showGlobally: true,\n message: \"Invalid array<br>\" + e.toString(),\n }\n );\n }\n }\n }\n\n input.set.call(this, value);\n};\n\nNode.prototype.hasOutput = function (name) {\n return name in this._outputs;\n};\n\nNode.prototype.registerOutput = function (name, output) {\n if (this.hasOutput(name)) {\n throw new Error(\"Output property \" + name + \" already registered\");\n }\n\n const newOutput = new OutputProperty({\n owner: this,\n getter: output.get || output.getter,\n name: name,\n onFirstConnectionAdded: output.onFirstConnectionAdded,\n onLastConnectionRemoved: output.onLastConnectionRemoved,\n });\n\n this._outputs[name] = newOutput;\n this._outputList.push(newOutput);\n};\n\nNode.prototype.deregisterOutput = function (name) {\n if (this.hasOutput(name) === false) {\n throw new Error(\"Output property \" + name + \" isn't registered\");\n }\n\n const output = this._outputs[name];\n\n if (output.hasConnections()) {\n throw new Error(\n \"Output property \" + name + \" has connections and can't be removed\"\n );\n }\n\n delete this._outputs[name];\n var index = this._outputList.indexOf(output);\n this._outputList.splice(index, 1);\n};\n\nNode.prototype.registerOutputs = function (outputs) {\n for (var name in outputs) {\n this.registerOutput(name, outputs[name]);\n }\n};\n\nNode.prototype.registerOutputIfNeeded = function () {\n //noop, can be overriden by subclasses\n};\n\nNode.prototype.getOutput = function (name) {\n if (this.hasOutput(name) === false) {\n throw new Error(\"Node \" + this.name + \" doesn't have a port named \" + name);\n }\n return this._outputs[name];\n};\n\nNode.prototype.connectInput = function (inputName, sourceNode, sourcePortName) {\n if (this.hasInput(inputName) === false) {\n throw new Error(\n \"Invalid connection, input doesn't exist. Trying to connect from \" +\n sourceNode.name +\n \" output \" +\n sourcePortName +\n \" to \" +\n this.name +\n \" input \" +\n inputName\n );\n }\n\n var sourcePort = sourceNode.getOutput(sourcePortName);\n sourcePort.registerConnection(this, inputName);\n\n if (!this._inputConnections[inputName]) {\n this._inputConnections[inputName] = [];\n }\n\n this._inputConnections[inputName].push(sourcePort);\n\n if (sourceNode._signalsSentThisUpdate[sourcePortName]) {\n this._setValueFromConnection(inputName, true);\n this._setValueFromConnection(inputName, false);\n } else {\n var outputValue = sourcePort.value;\n if (outputValue !== undefined) {\n this._setValueFromConnection(inputName, outputValue);\n\n if (this.context) {\n // Send value to editor for connection debugging.\n // Conceptually the value has already been sent,\n // but the editor needs to be notified after a connection is created\n this.context.connectionSentValue(sourcePort, sourcePort.value);\n }\n }\n }\n\n this.flagDirty();\n};\n\nNode.prototype.removeInputConnection = function (\n inputName,\n sourceNodeId,\n sourcePortName\n) {\n if (!this._inputConnections[inputName]) {\n throw new Error(\"Node removeInputConnection: Input doesn't exist\");\n }\n\n const inputsToPort = this._inputConnections[inputName];\n\n for (let i = 0; i < inputsToPort.length; i++) {\n const sourcePort = inputsToPort[i];\n if (\n sourcePort.owner.id === sourceNodeId &&\n sourcePort.name === sourcePortName\n ) {\n inputsToPort.splice(i, 1);\n\n //remove the output from the source node\n const output = sourcePort.owner.getOutput(sourcePortName);\n output.deregisterConnection(this, inputName);\n break;\n }\n }\n\n if (inputsToPort.length === 0) {\n //no inputs left, remove the bookkeeping that traces values sent to this node as inputs\n delete this._valuesFromConnections[inputName];\n }\n};\n\nNode.prototype.isInputConnected = function (inputName) {\n if (!this._inputConnections.hasOwnProperty(inputName)) {\n return false;\n }\n\n //We have connections, but they might be from non-connected component inputs.\n // If they are from a component input then check the input on the component instance.\n return this._inputConnections[inputName].some((c) => {\n //if this is not a component input, then we have a proper connection\n if (c.owner.name !== \"Component Inputs\") return true;\n\n //the name of the output from the component input, is the same as the component instance input\n const component = c.owner.nodeScope.componentOwner;\n return component.isInputConnected(c.name);\n });\n};\n\nNode.prototype.update = function () {\n if (this._isUpdating || this._dirty === false) {\n return;\n }\n\n if (this._updatedAtIteration !== this.context.updateIteration) {\n this._updatedAtIteration = this.context.updateIteration;\n this._updateIteration = 0;\n if (this._cyclicLoop) this._cyclicLoop = false;\n }\n\n this._isUpdating = true;\n const maxUpdateIterations = 100;\n\n try {\n while (this._dirty && !this._cyclicLoop) {\n this._updateDependencies();\n\n //all inputs are now updated, flag as not dirty\n this._dirty = false;\n\n const inputNames = Object.keys(this._inputValuesQueue);\n\n let hasMoreInputs = true;\n\n while (hasMoreInputs && !this._cyclicLoop) {\n hasMoreInputs = false;\n\n for (let i = 0; i < inputNames.length; i++) {\n const inputName = inputNames[i];\n const queue = this._inputValuesQueue[inputName];\n if (queue.length > 0) {\n this.setInputValue(inputName, queue.shift());\n if (queue.length > 0) {\n hasMoreInputs = true;\n }\n }\n }\n\n const afterInputCallbacks = this._afterInputsHaveUpdatedCallbacks;\n this._afterInputsHaveUpdatedCallbacks = [];\n for (let i = 0; i < afterInputCallbacks.length; i++) {\n afterInputCallbacks[i].call(this);\n }\n }\n this._updateIteration++;\n\n if (this._updateIteration >= maxUpdateIterations) {\n this._cyclicLoop = true;\n }\n }\n } catch (e) {\n this._isUpdating = false;\n throw e;\n }\n\n if (this._cyclicLoop) {\n //flag the node as dirty again to let it contiune next frame so we don't just stop it\n //This will allow the browser a chance to render and run other code\n this.context.scheduleNextFrame(() => {\n this.context.nodeIsDirty(this);\n });\n\n if (\n this.context.editorConnection &&\n !this._cyclicWarningSent &&\n this.context.isWarningTypeEnabled(\"cyclicLoops\")\n ) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"cyclic-loop\",\n {\n showGlobally: true,\n message: \"Cyclic loop detected\",\n }\n );\n this._cyclicWarningSent = true;\n console.log(\"cycle detected\", {\n id: this.id,\n name: this.name,\n component: this.nodeScope.componentOwner.name,\n });\n }\n }\n\n this._isFirstUpdate = false;\n this._isUpdating = false;\n};\n\nNode.prototype._updateDependencies = function () {\n for (var inputName in this._inputConnections) {\n var connectedPorts = this._inputConnections[inputName];\n for (var i = 0; i < connectedPorts.length; ++i) {\n connectedPorts[i].owner.update();\n }\n }\n};\n\nNode.prototype.flagDirty = function () {\n if (this._dirty) {\n return;\n }\n\n this._dirty = true;\n\n //a hack to not update nodes as a component is being created.\n //Nodes should update once all connections are in place, so inputs that rely on connections, e.g. \"Run\" on a Function node, have the correct context before running.\n //This flag is being updated externally by the NodeScope and _performDirtyUpdate will be called when the component setup is done\n if (this.updateOnDirtyFlagging) {\n this._performDirtyUpdate();\n }\n};\n\nNode.prototype._performDirtyUpdate = function () {\n this.context && this.context.nodeIsDirty(this);\n\n for (var i = 0; i < this._outputList.length; ++i) {\n this._outputList[i].flagDependeesDirty();\n }\n};\n\nNode.prototype.sendValue = function (name, value) {\n if (this.hasOutput(name) === false) {\n console.log(\"Error: Node\", this.name, \"doesn't have a output named\", name);\n return;\n }\n\n if (value === undefined) {\n return;\n }\n\n const output = this.getOutput(name);\n output.sendValue(value);\n\n if (this.context) {\n this.context.connectionSentValue(output, value);\n }\n};\n\nNode.prototype.flagOutputDirty = function (name) {\n const output = this.getOutput(name);\n this.sendValue(name, output.value);\n};\n\nNode.prototype.flagAllOutputsDirty = function () {\n for (const output of this._outputList) {\n this.sendValue(output.name, output.value);\n }\n};\n\nNode.prototype.sendSignalOnOutput = function (outputName) {\n if (this.hasOutput(outputName) === false) {\n console.log(\n \"Error: Node\",\n this.name,\n \"doesn't have a output named\",\n outputName\n );\n return;\n }\n\n const output = this.getOutput(outputName);\n output.sendValue(true);\n output.sendValue(false);\n\n this._signalsSentThisUpdate[outputName] = true;\n this.scheduleAfterInputsHaveUpdated(function () {\n this._signalsSentThisUpdate[outputName] = false;\n });\n\n if (this.context) {\n this.context.connectionSentSignal(output);\n }\n};\n\nNode.prototype._setValueFromConnection = function (inputName, value) {\n this._valuesFromConnections[inputName] = value;\n this.queueInput(inputName, value);\n};\n\nNode.prototype._hasInputBeenSetFromAConnection = function (inputName) {\n return this._valuesFromConnections.hasOwnProperty(inputName);\n};\n\nNode.prototype.queueInput = function (inputName, value) {\n if (!this._inputValuesQueue[inputName]) {\n this._inputValuesQueue[inputName] = [];\n }\n\n //when values are queued during the very first update, make the last value overwrite previous ones\n //so a chain with multiple nodes with values that connect to each other all\n //consolidate to a single value, instead of piling up in the queue\n if (this._isFirstUpdate) {\n //signals need two values, so make sure we don't suppress the 'false' that comes directly\n //after a 'true'\n const queueValue = this._inputValuesQueue[inputName][0];\n const isSignal = queueValue === true; // && value === true;\n if (!isSignal) {\n //default units are set as an object {value, unit}\n //subsequent inputs can be unitless. and will will then overwrite those\n //and the node will get a value without ever getting a unit.\n //To make sure that doesn't happen, look at the value being overwritten\n //and use the unit from that before overwriting\n if (\n queueValue instanceof Object &&\n queueValue.unit &&\n value instanceof Object === false\n ) {\n value = {\n value,\n unit: queueValue.unit,\n };\n }\n\n this._inputValuesQueue[inputName].length = 0;\n }\n }\n\n this._inputValuesQueue[inputName].push(value);\n this.flagDirty();\n};\n\nNode.prototype.scheduleAfterInputsHaveUpdated = function (callback) {\n this._afterInputsHaveUpdatedCallbacks.push(callback);\n this.flagDirty();\n};\n\nNode.prototype.setNodeModel = function (nodeModel) {\n this.model = nodeModel;\n nodeModel.on(\"parameterUpdated\", this._onNodeModelParameterUpdated, this);\n nodeModel.on(\"variantUpdated\", this._onNodeModelVariantUpdated, this);\n\n nodeModel.on(\n \"inputPortRemoved\",\n (port) => {\n if (this.hasInput(port.name)) {\n this.deregisterInput(port.name);\n }\n },\n this\n );\n\n nodeModel.on(\n \"outputPortRemoved\",\n (port) => {\n if (this.hasOutput(port.name)) {\n this.deregisterOutput(port.name);\n }\n },\n this\n );\n};\n\nNode.prototype.addDeleteListener = function (listener) {\n this._deleteListeners.push(listener);\n};\n\nNode.prototype._onNodeDeleted = function () {\n if (this.model) {\n this.model.removeListenersWithRef(this);\n this.model = undefined;\n }\n\n this._deleted = true;\n\n for (const deleteListener of this._deleteListeners) {\n deleteListener.call(this);\n }\n};\n\nNode.prototype._onNodeModelParameterUpdated = function (event) {\n this.registerInputIfNeeded(event.name);\n\n if (event.value !== undefined) {\n if (event.state) {\n //this parameter is only used in a certain visual state\n //make sure we are in that state before setting it\n\n if (!this._getVisualStates) {\n console.log(\n \"Node has nos visual states, but got a parameter for state\",\n event.state\n );\n return;\n }\n\n const states = this._getVisualStates();\n if (states.indexOf(event.state) !== -1) {\n this.queueInput(event.name, event.value);\n }\n } else {\n this.queueInput(event.name, event.value);\n }\n } else {\n //parameter is undefined, that means it has been removed and we should reset to default\n let defaultValue;\n\n const variant = this.variant;\n\n if (event.state) {\n //local value has been reset, check the variant first\n if (\n variant &&\n variant.stateParameters.hasOwnProperty(event.state) &&\n variant.stateParameters[event.state].hasOwnProperty(event.name)\n ) {\n defaultValue = variant.stateParameters[event.state][event.name];\n }\n //and if variant has no value in that state, check for local values in the neutral state\n else if (this.model.parameters.hasOwnProperty(event.name)) {\n defaultValue = this.model.parameters[event.name];\n }\n //and then look in the variant neutral values\n else if (variant && variant.parameters.hasOwnProperty(event.name)) {\n defaultValue = variant.parameters[event.name];\n }\n } else if (variant && variant.parameters.hasOwnProperty(event.name)) {\n defaultValue = variant.parameters[event.name];\n }\n\n if (defaultValue === undefined) {\n //get the default value for the port\n defaultValue = this.context.getDefaultValueForInput(\n this.model.type,\n event.name\n );\n\n //when a paramter that's used by a text style is reset, Noodl will modify the original dom node, outside of React\n //React will then re-render, and should apply the values from the text style, but won't see any delta in the virtual dom,\n //even though there is a diff to the real dom.\n //to fix that, we just force React to re-render the entire node\n this._resetReactVirtualDOM && this._resetReactVirtualDOM();\n }\n\n this.queueInput(event.name, defaultValue);\n }\n};\n\nNode.prototype._onNodeModelVariantUpdated = function (variant) {\n this.setVariant(variant);\n};\n\nexport { Node };\n","//adapted from http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\nexport function guid() {\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n return (\n s4() +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n s4() +\n s4()\n );\n}\n","import { guid } from \"./guid\";\nimport { ComponentInstanceNode } from \"./nodes/componentinstance\";\n\nfunction NodeScope(context, componentOwner) {\n this.context = context;\n this.nodes = {};\n this.componentOwner = componentOwner; //Component Instance that owns this NodeScope\n this.componentInstanceChildren = {};\n}\n\nfunction verifyData(data, requiredKeys) {\n requiredKeys.forEach(function (key) {\n if (!data[key]) {\n throw new Error(\"Missing \" + key);\n }\n });\n}\n\nNodeScope.prototype.addConnection = function (connectionData) {\n try {\n verifyData(connectionData, [\n \"sourceId\",\n \"sourcePort\",\n \"targetId\",\n \"targetPort\",\n ]);\n } catch (e) {\n throw new Error(\"Error in connection: \" + e.message);\n }\n\n try {\n var sourceNode = this.getNodeWithId(connectionData.sourceId),\n targetNode = this.getNodeWithId(connectionData.targetId);\n\n targetNode.registerInputIfNeeded(connectionData.targetPort);\n sourceNode.registerOutputIfNeeded(connectionData.sourcePort);\n targetNode.connectInput(\n connectionData.targetPort,\n sourceNode,\n connectionData.sourcePort\n );\n } catch (e) {\n console.error(e.message);\n }\n};\n\nNodeScope.prototype.setNodeParameters = function (node, nodeModel) {\n const variant = this.context.variants.getVariant(\n nodeModel.type,\n nodeModel.variant\n );\n\n if (variant) {\n //apply the variant (this will also apply the parameters)\n node.setVariant(variant);\n } else {\n const parameters = nodeModel.parameters;\n\n var inputNames = Object.keys(parameters);\n\n if (this.context.nodeRegister.hasNode(node.name)) {\n var metadata = this.context.nodeRegister.getNodeMetadata(node.name);\n inputNames.sort(function (a, b) {\n var inputA = metadata.inputs[a];\n var inputB = metadata.inputs[b];\n return (\n (inputB ? inputB.inputPriority : 0) -\n (inputA ? inputA.inputPriority : 0)\n );\n });\n }\n\n inputNames.forEach((inputName) => {\n node.registerInputIfNeeded(inputName);\n\n //protect against obsolete parameters\n if (node.hasInput(inputName) === false) {\n return;\n }\n\n node.queueInput(inputName, parameters[inputName]);\n });\n }\n};\n\nNodeScope.prototype.createNodeFromModel = async function (\n nodeModel,\n updateOnDirtyFlagging\n) {\n if (nodeModel.type === \"Component Children\") {\n if (nodeModel.parent) {\n var parentInstance = this.getNodeWithId(nodeModel.parent.id);\n this.componentOwner.setChildRoot(parentInstance);\n }\n return;\n }\n\n var node;\n try {\n node = await this.createNode(nodeModel.type, nodeModel.id);\n node.updateOnDirtyFlagging = updateOnDirtyFlagging === false ? false : true;\n node.setNodeModel(nodeModel);\n } catch (e) {\n console.error(e.message);\n if (\n this.context.editorConnection &&\n this.context.isWarningTypeEnabled(\"nodescope\")\n ) {\n this.context.editorConnection.sendWarning(\n this.componentOwner.name,\n nodeModel.id,\n \"nodelibrary-unknown-node\",\n {\n message: e.message,\n showGlobally: true,\n }\n );\n }\n return;\n }\n\n if (nodeModel.variant && node.setVariant) node.setVariant(nodeModel.variant);\n this.setNodeParameters(node, nodeModel);\n\n if (nodeModel.parent) {\n this.insertNodeInTree(node, nodeModel);\n }\n\n return node;\n};\n\nNodeScope.prototype.insertNodeInTree = function (nodeInstance, nodeModel) {\n var parentInstance = this.getNodeWithId(nodeModel.parent.id);\n var childIndex = nodeModel.parent.children.indexOf(nodeModel);\n\n if (!parentInstance.addChild) {\n throw new Error(\n \"Node \" +\n parentInstance.id +\n \" of type \" +\n parentInstance.constructor.name +\n \" can't have children\"\n );\n }\n\n parentInstance.addChild(nodeInstance, childIndex);\n};\n\nNodeScope.prototype.getNodeWithId = function (id) {\n if (this.nodes.hasOwnProperty(id) === false) {\n throw new Error(\"Unknown node id \" + id);\n }\n return this.nodes[id];\n};\n\nNodeScope.prototype.hasNodeWithId = function (id) {\n return this.nodes.hasOwnProperty(id);\n};\n\nNodeScope.prototype.createPrimitiveNode = function (name, id, extraProps) {\n if (!id) id = guid();\n\n if (this.nodes.hasOwnProperty(id)) {\n throw Error(\"duplicate id \" + id);\n }\n\n const node = this.context.nodeRegister.createNode(name, id, this);\n if (extraProps) {\n for (const prop in extraProps) {\n node[prop] = extraProps[prop];\n }\n }\n\n this.nodes[id] = node;\n return node;\n};\n\nNodeScope.prototype.createNode = async function (name, id, extraProps) {\n if (!id) id = guid();\n\n if (this.nodes.hasOwnProperty(id)) {\n throw Error(\"duplicate id \" + id);\n }\n\n let node;\n\n if (this.context.nodeRegister.hasNode(name)) {\n node = this.context.nodeRegister.createNode(name, id, this);\n if (extraProps) {\n for (const prop in extraProps) {\n node[prop] = extraProps[prop];\n }\n }\n } else {\n node = await this.context.createComponentInstanceNode(\n name,\n id,\n this,\n extraProps\n );\n this.componentInstanceChildren[id] = node;\n }\n\n this.nodes[id] = node;\n return node;\n};\n\nNodeScope.prototype.getNodesWithIdRecursive = function (id) {\n function findNodesWithIdRec(scope, id, result) {\n if (scope.nodes.hasOwnProperty(id)) {\n result.push(scope.nodes[id]);\n }\n\n var componentIds = Object.keys(scope.nodes).filter(function (nodeId) {\n return scope.nodes[nodeId] instanceof ComponentInstanceNode;\n });\n\n componentIds.forEach(function (componentId) {\n findNodesWithIdRec(scope.nodes[componentId].nodeScope, id, result);\n });\n }\n\n var result = [];\n findNodesWithIdRec(this, id, result);\n return result;\n};\n\nNodeScope.prototype.getNodesWithType = function (name) {\n var self = this;\n var ids = Object.keys(this.nodes).filter(function (id) {\n return self.nodes[id].name === name;\n });\n return ids.map(function (id) {\n return self.nodes[id];\n });\n};\n\nNodeScope.prototype.getNodesWithTypeRecursive = function (name) {\n var self = this;\n function findNodesWithTypeRec() {\n result = result.concat(self.getNodesWithType(name));\n\n var componentIds = Object.keys(self.nodes).filter(function (nodeId) {\n return self.nodes[nodeId] instanceof ComponentInstanceNode;\n });\n\n componentIds.forEach(function (componentId) {\n var res =\n self.nodes[componentId].nodeScope.getNodesWithTypeRecursive(name);\n result = result.concat(res);\n });\n }\n\n var result = [];\n findNodesWithTypeRec(result);\n return result;\n};\n\nNodeScope.prototype.getAllNodesRecursive = function () {\n let result = [];\n\n const getAllNodesRec = () => {\n result = result.concat(Object.values(this.nodes));\n\n var componentIds = Object.keys(this.nodes).filter((nodeId) => {\n return this.nodes[nodeId] instanceof ComponentInstanceNode;\n });\n\n componentIds.forEach((componentId) => {\n var res = this.nodes[componentId].nodeScope.getAllNodesRecursive();\n result = result.concat(res);\n });\n };\n\n getAllNodesRec(result);\n return result;\n};\n\nNodeScope.prototype.getAllNodesWithVariantRecursive = function (variant) {\n const nodes = this.getAllNodesRecursive();\n return nodes.filter((node) => node.variant === variant);\n};\n\nNodeScope.prototype.onNodeModelRemoved = function (nodeModel) {\n var nodeInstance = this.getNodeWithId(nodeModel.id);\n\n if (nodeModel.parent) {\n var parentInstance = this.getNodeWithId(nodeModel.parent.id);\n parentInstance.removeChild(nodeInstance);\n }\n\n nodeInstance._onNodeDeleted();\n delete this.nodes[nodeInstance.id];\n delete this.componentInstanceChildren[nodeInstance.id];\n};\n\nNodeScope.prototype.removeConnection = function (connectionModel) {\n var targetNode = this.getNodeWithId(connectionModel.targetId);\n targetNode.removeInputConnection(\n connectionModel.targetPort,\n connectionModel.sourceId,\n connectionModel.sourcePort\n );\n};\n\nNodeScope.prototype.setComponentModel = async function (componentModel) {\n this.componentModel = componentModel;\n\n const nodes = [];\n\n //create all nodes\n for (const nodeModel of componentModel.getAllNodes()) {\n const node = await this.createNodeFromModel(nodeModel, false);\n if (node) nodes.push(node);\n }\n\n componentModel\n .getAllConnections()\n .forEach((conn) => this.addConnection(conn));\n\n //now that all nodes and connections are setup, trigger the dirty flagging so nodes can run with all the connections in place\n nodes.forEach((node) => (node.updateOnDirtyFlagging = true));\n\n nodes.forEach((node) => {\n if (node._dirty) {\n node._performDirtyUpdate();\n }\n });\n\n componentModel.on(\n \"connectionAdded\",\n (conn) => this.addConnection(conn),\n this\n );\n componentModel.on(\"connectionRemoved\", this.removeConnection, this);\n componentModel.on(\"nodeAdded\", this.createNodeFromModel, this);\n\n var self = this;\n componentModel.on(\n \"nodeParentWillBeRemoved\",\n function (nodeModel) {\n if (nodeModel.type === \"Component Children\") {\n if (nodeModel.parent) {\n this.componentOwner.setChildRoot(null);\n }\n return;\n }\n\n const nodeInstance = self.getNodeWithId(nodeModel.id);\n if (nodeInstance.parent) {\n nodeInstance.parent.removeChild(nodeInstance);\n }\n },\n this\n );\n\n componentModel.on(\n \"nodeParentUpdated\",\n function (nodeModel) {\n if (nodeModel.type === \"Component Children\") {\n var parentInstance = this.getNodeWithId(nodeModel.parent.id);\n this.componentOwner.setChildRoot(parentInstance);\n } else {\n var nodeInstance = self.getNodeWithId(nodeModel.id);\n self.insertNodeInTree(nodeInstance, nodeModel);\n }\n },\n this\n );\n\n componentModel.on(\n \"nodeRemoved\",\n function (nodeModel) {\n if (nodeModel.type !== \"Component Children\") {\n self.onNodeModelRemoved(nodeModel);\n }\n },\n this\n );\n\n for (const id in this.nodes) {\n const node = this.nodes[id];\n node.nodeScopeDidInitialize && node.nodeScopeDidInitialize();\n }\n};\n\nNodeScope.prototype.reset = function () {\n if (this.componentModel) {\n this.componentModel.removeListenersWithRef(this);\n this.componentModel = undefined;\n }\n\n Object.keys(this.nodes).forEach((id) => {\n if (this.nodes.hasOwnProperty(id)) {\n this.deleteNode(this.nodes[id]);\n }\n });\n};\n\nNodeScope.prototype.deleteNode = function (nodeInstance) {\n if (this.nodes.hasOwnProperty(nodeInstance.id) === false) {\n console.error(\n \"Node doesn't belong to this scope\",\n nodeInstance.id,\n nodeInstance.name\n );\n return;\n }\n\n if (nodeInstance.parent) {\n nodeInstance.parent.removeChild(nodeInstance);\n }\n\n //depth first\n if (nodeInstance.getChildren) {\n nodeInstance.getChildren().forEach((child) => {\n nodeInstance.removeChild(child);\n //the child might be created in a different scope\n //if the child is a component instance, we want its parent scope, not the inner scope\n const nodeScope = child.parentNodeScope || child.nodeScope;\n nodeScope.deleteNode(child);\n });\n }\n\n if (this.componentModel) {\n const connectionFrom = this.componentModel.getConnectionsFrom(\n nodeInstance.id\n );\n const connectionTo = this.componentModel.getConnectionsTo(nodeInstance.id);\n\n connectionFrom.concat(connectionTo).forEach((connection) => {\n if (\n this.nodes.hasOwnProperty(connection.targetId) &&\n this.nodes.hasOwnProperty(connection.sourceId)\n ) {\n this.removeConnection(connection);\n }\n });\n }\n\n nodeInstance._onNodeDeleted();\n delete this.nodes[nodeInstance.id];\n delete this.componentInstanceChildren[nodeInstance.id]; //in case this is a component\n};\n\nNodeScope.prototype.sendEventFromThisScope = function (\n eventName,\n data,\n propagation,\n sendEventInThisScope,\n _exclude\n) {\n if (sendEventInThisScope) {\n var eventReceivers = this.getNodesWithType(\"Event Receiver\").filter(\n function (eventReceiver) {\n return eventReceiver.getChannelName() === eventName;\n }\n );\n\n for (var i = 0; i < eventReceivers.length; i++) {\n var consumed = eventReceivers[i].handleEvent(data);\n if (consumed) return true;\n }\n }\n\n if (propagation === \"parent\" && this.componentOwner.parentNodeScope) {\n // Send event to parent scope\n //either the scope of the visual parent if there is one, otherwise the parent component\n const parentNodeScope = this.componentOwner.parent\n ? this.componentOwner.parent.nodeScope\n : this.componentOwner.parentNodeScope;\n if (!parentNodeScope) return;\n parentNodeScope.sendEventFromThisScope(eventName, data, propagation, true);\n } else if (propagation === \"children\") {\n // Send event to all child scopes\n var nodes = this.nodes;\n for (var nodeId in nodes) {\n var children = nodes[nodeId].children;\n if (children)\n children.forEach((child) => {\n if (\n child.name &&\n this.context.hasComponentModelWithName(child.name)\n ) {\n // This is a component instance child\n var consumed = child.nodeScope.sendEventFromThisScope(\n eventName,\n data,\n propagation,\n true\n );\n if (consumed) return true;\n }\n });\n }\n } else if (propagation === \"siblings\") {\n // Send event to all siblings, that is all children of the parent scope except this scope\n let parentNodeScope;\n if (this.componentOwner.parent) {\n parentNodeScope = this.componentOwner.parent.nodeScope;\n } else {\n parentNodeScope = this.componentOwner.parentNodeScope;\n }\n\n if (!parentNodeScope) return;\n\n var nodes = parentNodeScope.nodes;\n for (var nodeId in nodes) {\n var children = nodes[nodeId].children;\n if (children) {\n var _c = children.filter(\n (child) =>\n child.name &&\n this.context.hasComponentModelWithName(child.name) &&\n child.nodeScope !== this\n );\n _c.forEach((child) => {\n var consumed = child.nodeScope.sendEventFromThisScope(\n eventName,\n data,\n null,\n true\n );\n if (consumed) return true;\n });\n }\n }\n }\n\n return false;\n};\n\nexport { NodeScope };\n","import { Node } from \"../node\";\nimport { NodeScope } from \"../nodescope\";\n\nlet componentIdCounter = 0;\n\nfunction ComponentInstanceNode(context, id, parentNodeScope) {\n Node.call(this, context, id);\n\n this.nodeScope = new NodeScope(context, this);\n this.parentNodeScope = parentNodeScope;\n this._internal.childRoot = null;\n this._internal.componentOutputValues = {};\n this._internal.componentOutputs = [];\n this._internal.componentInputs = [];\n this._internal.inputValues = {};\n this._internal.roots = [];\n\n this._internal.instanceId = \"__$ndl_componentInstaceId\" + componentIdCounter;\n\n this.nodeScope.modelScope = parentNodeScope\n ? parentNodeScope.modelScope\n : undefined;\n\n componentIdCounter++;\n}\n\nComponentInstanceNode.prototype = Object.create(Node.prototype, {\n setComponentModel: {\n value: async function (componentModel) {\n this.componentModel = componentModel;\n var self = this;\n\n await this.nodeScope.setComponentModel(componentModel);\n\n this._internal.componentInputs =\n this.nodeScope.getNodesWithType(\"Component Inputs\");\n this._internal.componentOutputs =\n this.nodeScope.getNodesWithType(\"Component Outputs\");\n\n Object.values(componentModel.getInputPorts()).forEach(\n this.registerComponentInputPort.bind(this)\n );\n Object.values(componentModel.getOutputPorts()).forEach(\n this.registerComponentOutputPort.bind(this)\n );\n\n const roots = componentModel.roots || [];\n this._internal.roots = roots.map((id) =>\n this.nodeScope.getNodeWithId(id)\n );\n\n componentModel.on(\n \"rootAdded\",\n (id) => {\n this._internal.roots.push(this.nodeScope.getNodeWithId(id));\n this.forceUpdate();\n },\n this\n );\n\n componentModel.on(\n \"rootRemoved\",\n function (id) {\n const index = this._internal.roots.findIndex(\n (root) => root.id === id\n );\n if (index !== -1) {\n this._internal.roots.splice(index, 1);\n }\n this.forceUpdate();\n },\n this\n );\n\n componentModel.on(\n \"inputPortAdded\",\n this.registerComponentInputPort.bind(this),\n this\n );\n componentModel.on(\n \"outputPortAdded\",\n this.registerComponentOutputPort.bind(this),\n this\n );\n\n componentModel.on(\n \"inputPortRemoved\",\n function (port) {\n if (self.hasInput(port.name)) {\n self.deregisterInput(port.name);\n }\n },\n this\n );\n componentModel.on(\n \"outputPortRemoved\",\n function (port) {\n if (this.hasOutput(port.name)) {\n self.deregisterOutput(port.name);\n }\n },\n this\n );\n\n componentModel.on(\n \"nodeAdded\",\n function (node) {\n if (node.type === \"Component Inputs\") {\n self._internal.componentInputs.push(\n self.nodeScope.getNodeWithId(node.id)\n );\n } else if (node.type === \"Component Outputs\") {\n self._internal.componentOutputs.push(\n self.nodeScope.getNodeWithId(node.id)\n );\n }\n },\n this\n );\n\n componentModel.on(\n \"nodeRemoved\",\n function (node) {\n function removeNodesWithId(array, id) {\n return array.filter((e) => e.id !== id);\n }\n if (node.type === \"Component Inputs\") {\n self._internal.componentInputs = removeNodesWithId(\n self._internal.componentInputs,\n node.id\n );\n } else if (node.type === \"Component Outputs\") {\n self._internal.componentOutputs = removeNodesWithId(\n self._internal.componentOutputs,\n node.id\n );\n }\n },\n this\n );\n\n componentModel.on(\n \"renamed\",\n function (event) {\n self.name = event.newName;\n },\n this\n );\n },\n },\n _onNodeDeleted: {\n value() {\n if (this.componentModel) {\n this.componentModel.removeListenersWithRef(this);\n this.componentModel = undefined;\n }\n\n this.nodeScope.reset();\n Node.prototype._onNodeDeleted.call(this);\n },\n },\n registerComponentInputPort: {\n value(port) {\n this.registerInput(port.name, {\n set(value) {\n this._internal.inputValues[port.name] = value;\n this._internal.componentInputs.forEach(function (componentInput) {\n componentInput.registerOutputIfNeeded(port.name);\n componentInput.flagOutputDirty(port.name);\n });\n },\n });\n },\n },\n registerComponentOutputPort: {\n value(port) {\n this.registerOutput(port.name, {\n getter() {\n return this._internal.componentOutputValues[port.name];\n },\n });\n },\n },\n setOutputFromComponentOutput: {\n value(name, value) {\n if (this.hasOutput(name) === false) {\n return;\n }\n\n this._internal.creatorCallbacks &&\n this._internal.creatorCallbacks.onOutputChanged &&\n this._internal.creatorCallbacks.onOutputChanged(\n name,\n value,\n this._internal.componentOutputValues[name]\n );\n\n this._internal.componentOutputValues[name] = value;\n this.flagOutputDirty(name);\n },\n },\n setChildRoot: {\n value(node) {\n const prevChildRoot = this._internal.childRoot;\n const newChildRoot = node;\n\n this._internal.childRoot = newChildRoot;\n\n if (this.model && this.model.children) {\n const parentNodeScope = this.parentNodeScope;\n\n const children = this.model.children\n .filter((child) => child.type !== \"Component Children\")\n .map((child) => parentNodeScope.getNodeWithId(child.id));\n\n if (prevChildRoot) {\n for (let i = 0; i < children.length; i++) {\n if (prevChildRoot.isChild(children[i])) {\n prevChildRoot.removeChild(children[i]);\n }\n }\n }\n\n if (newChildRoot) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const index = child.model.parent.children.indexOf(child.model);\n this.addChild(child, index);\n }\n }\n }\n },\n },\n getChildRootIndex: {\n value() {\n if (\n !this._internal.childRoot ||\n !this._internal.childRoot.model ||\n !this._internal.childRoot.model.children\n ) {\n return 0;\n }\n\n var children = this._internal.childRoot.model.children;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].type === \"Component Children\") {\n return i;\n }\n }\n\n return 0;\n },\n },\n getChildRoot: {\n value() {\n if (this._internal.childRoot) {\n return this._internal.childRoot;\n }\n return null;\n },\n },\n getRoots: {\n value() {\n return this._internal.roots;\n },\n },\n /** Added for SSR Support */\n triggerDidMount: {\n value() {\n this._internal.roots.forEach((root) => {\n root.triggerDidMount && root.triggerDidMount();\n });\n },\n },\n render: {\n value() {\n if (this._internal.roots.length === 0) {\n return null;\n }\n\n return this._internal.roots[0].render();\n },\n },\n setChildIndex: {\n value(childIndex) {\n // NOTE: setChildIndex can be undefined when it is not a React node,\n // but still a visual node like the foreach (Repeater) node.\n this.getRoots().forEach(\n (root) => root.setChildIndex && root.setChildIndex(childIndex)\n );\n },\n },\n addChild: {\n value(child, index) {\n this.getChildRoot().addChild(child, index + this.getChildRootIndex());\n },\n },\n removeChild: {\n value(child) {\n this.getChildRoot().removeChild(child);\n },\n },\n getChildren: {\n value(child) {\n const childRoot = this.getChildRoot();\n return childRoot ? childRoot.getChildren() : [];\n },\n },\n isChild: {\n value(child) {\n if (!this.getChildRoot()) {\n return false;\n }\n\n return this.getChildRoot().isChild(child);\n },\n },\n contains: {\n value(node) {\n return this.getRoots().some(\n (root) => root.contains && root.contains(node)\n );\n },\n },\n _performDirtyUpdate: {\n value() {\n Node.prototype._performDirtyUpdate.call(this);\n\n var componentInputs = this._internal.componentInputs;\n for (var i = 0, len = componentInputs.length; i < len; i++) {\n componentInputs[i].flagDirty();\n }\n\n this._internal.componentOutputs.forEach(function (componentOutput) {\n componentOutput.flagDirty();\n });\n },\n },\n getRef: {\n value() {\n const root = this._internal.roots[0];\n return root ? root.getRef() : undefined;\n },\n },\n update: {\n value() {\n Node.prototype.update.call(this);\n\n this._internal.componentOutputs.forEach(function (componentOutput) {\n componentOutput.update();\n });\n },\n },\n forceUpdate: {\n //this is only used when roots are added or removed\n value() {\n if (!this.parent) return;\n\n //the parent will need to re-render the roots of this component instance\n //TODO: make this use a cleaner API, and only invalidate the affected child, instead of all children\n this.parent.cachedChildren = undefined;\n this.parent.forceUpdate();\n },\n },\n getInstanceId: {\n value() {\n return this._internal.instanceId;\n },\n },\n});\n\nComponentInstanceNode.prototype.constructor = ComponentInstanceNode;\nexport { ComponentInstanceNode };\n","import { EventEmitter } from \"./events\";\nimport { NodeRegister } from \"./noderegister\";\nimport { TimerScheduler } from \"./timerscheduler\";\nimport { Variants } from \"./variants\";\nimport { ComponentInstanceNode } from \"./nodes/componentinstance\";\n\nfunction NodeContext(args) {\n args = args || {};\n args.runningInEditor = args.hasOwnProperty(\"runningInEditor\")\n ? args.runningInEditor\n : false;\n\n this._dirtyNodes = [];\n this.callbacksAfterUpdate = [];\n\n this.graphModel = args.graphModel;\n\n this.platform = args.platform;\n\n this.eventEmitter = new EventEmitter();\n this.eventEmitter.setMaxListeners(1000000);\n\n this.eventSenderEmitter = new EventEmitter(); //used by event senders and receivers\n this.eventSenderEmitter.setMaxListeners(1000000);\n\n this.globalValues = {};\n this.globalsEventEmitter = new EventEmitter();\n this.globalsEventEmitter.setMaxListeners(1000000);\n\n this.runningInEditor = args.runningInEditor;\n this.currentFrameTime = 0;\n this.frameNumber = 0;\n this.updateIteration = 0;\n\n this.nodeRegister = new NodeRegister(this);\n this.timerScheduler = new TimerScheduler(this.scheduleUpdate.bind(this));\n\n this.componentModels = {};\n this.debugInspectorsEnabled = false;\n this.connectionsToPulse = {};\n this.connectionsToPulseChanged = false;\n\n this.debugInspectors = {};\n\n this.connectionPulsingCallbackScheduled = false;\n\n this.editorConnection = args.editorConnection;\n\n this.rootComponent = undefined;\n\n this._outputHistory = {};\n this._signalHistory = {};\n\n this.warningTypes = {}; //default is to send all warning types\n\n this.bundleFetchesInFlight = new Map();\n\n this.variants = new Variants({\n graphModel: this.graphModel,\n getNodeScope: () =>\n this.rootComponent ? this.rootComponent.nodeScope : null,\n });\n\n if (this.editorConnection) {\n this.editorConnection.on(\"debugInspectorsUpdated\", (inspectors) => {\n this.onDebugInspectorsUpdated(inspectors);\n });\n\n this.editorConnection.on(\n \"getConnectionValue\",\n ({ clientId, connectionId }) => {\n if (this.editorConnection.clientId !== clientId) return;\n const connection = this._outputHistory[connectionId];\n this.editorConnection.sendConnectionValue(\n connectionId,\n connection ? connection.value : undefined\n );\n }\n );\n }\n}\n\nNodeContext.prototype.setRootComponent = function (rootComponent) {\n this.rootComponent = rootComponent;\n};\n\nNodeContext.prototype.getCurrentTime = function () {\n return this.platform.getCurrentTime();\n};\n\nNodeContext.prototype.onDebugInspectorsUpdated = function (inspectors) {\n if (!this.debugInspectorsEnabled) return;\n\n inspectors = inspectors.map((inspector) => {\n if (inspector.type === \"connection\") {\n const connection = inspector.connection;\n inspector.id = connection.fromId + connection.fromProperty;\n } else if (inspector.type === \"node\") {\n inspector.id = inspector.nodeId;\n }\n return inspector;\n });\n\n this.debugInspectors = {};\n inspectors.forEach(\n (inspector) => (this.debugInspectors[inspector.id] = inspector)\n );\n\n this.sendDebugInspectorValues();\n};\n\nNodeContext.prototype.updateDirtyNodes = function () {\n var i, len;\n\n var loop = true,\n iterations = 0;\n\n this.updateIteration++;\n\n this.isUpdating = true;\n\n while (loop && iterations < 10) {\n var dirtyNodes = this._dirtyNodes;\n this._dirtyNodes = [];\n for (i = 0, len = dirtyNodes.length; i < len; ++i) {\n try {\n if (!dirtyNodes[i]._deleted) {\n dirtyNodes[i].update();\n }\n } catch (e) {\n console.error(e, e.stack);\n }\n }\n\n //make a new reference and reset array in case new callbacks are scheduled\n //by the current callbacks\n var callbacks = this.callbacksAfterUpdate;\n this.callbacksAfterUpdate = [];\n for (i = 0, len = callbacks.length; i < len; i++) {\n try {\n callbacks[i]();\n } catch (e) {\n console.error(e);\n }\n }\n\n loop = this.callbacksAfterUpdate.length > 0 || this._dirtyNodes.length > 0;\n iterations++;\n }\n\n this.isUpdating = false;\n};\n\nNodeContext.prototype.update = function () {\n this.frameNumber++;\n\n this.updateDirtyNodes();\n\n if (this.timerScheduler.hasPendingTimers()) {\n this.scheduleUpdate();\n this.timerScheduler.runTimers(this.currentFrameTime);\n }\n\n if (this.debugInspectorsEnabled) {\n this.sendDebugInspectorValues();\n }\n};\n\nNodeContext.prototype.reset = function () {\n //removes listeners like device orientation, websockets and more\n this.eventEmitter.emit(\"applicationDataReloaded\");\n\n var eventEmitter = this.eventEmitter;\n [\"frameStart\", \"frameEnd\"].forEach(function (name) {\n eventEmitter.removeAllListeners(name);\n });\n\n this.globalValues = {};\n this._dirtyNodes.length = 0;\n this.callbacksAfterUpdate.length = 0;\n\n this.timerScheduler.runningTimers = [];\n this.timerScheduler.newTimers = [];\n this.rootComponent = undefined;\n\n this.clearDebugInspectors();\n};\n\nNodeContext.prototype.nodeIsDirty = function (node) {\n this._dirtyNodes.push(node);\n this.scheduleUpdate();\n};\n\nNodeContext.prototype.scheduleUpdate = function () {\n this.eventEmitter.emit(\"scheduleUpdate\");\n};\n\nNodeContext.prototype.scheduleAfterUpdate = function (func) {\n this.callbacksAfterUpdate.push(func);\n this.scheduleUpdate();\n};\n\nNodeContext.prototype.scheduleNextFrame = function (func) {\n this.eventEmitter.once(\"frameStart\", func);\n this.scheduleUpdate();\n};\n\nNodeContext.prototype.setGlobalValue = function (name, value) {\n this.globalValues[name] = value;\n this.globalsEventEmitter.emit(name);\n};\n\nNodeContext.prototype.getGlobalValue = function (name) {\n return this.globalValues[name];\n};\n\nNodeContext.prototype.registerComponentModel = function (componentModel) {\n if (this.componentModels.hasOwnProperty(componentModel.name)) {\n throw new Error(\"Duplicate component name \" + componentModel.name);\n }\n this.componentModels[componentModel.name] = componentModel;\n\n var self = this;\n componentModel.on(\n \"renamed\",\n function (event) {\n delete self.componentModels[event.oldName];\n self.componentModels[event.newName] = componentModel;\n },\n this\n );\n};\n\nNodeContext.prototype.deregisterComponentModel = function (componentModel) {\n if (this.componentModels.hasOwnProperty(componentModel.name)) {\n this.componentModels[componentModel.name].removeListenersWithRef(this);\n delete this.componentModels[componentModel.name];\n }\n};\n\nNodeContext.prototype.fetchComponentBundle = async function (name) {\n const fetchBundle = async (name) => {\n let baseUrl = Noodl.Env[\"BaseUrl\"] || \"/\";\n let bundleUrl = `${baseUrl}noodl_bundles/${name}.json`;\n\n const response = await fetch(bundleUrl);\n if (response.status === 404) {\n throw new Error(\"Component not found \" + name);\n }\n\n const data = await response.json();\n for (const component of data) {\n if (this.graphModel.hasComponentWithName(component.name) === false) {\n await this.graphModel.importComponentFromEditorData(component);\n }\n }\n };\n\n if (this.bundleFetchesInFlight.has(name)) {\n await this.bundleFetchesInFlight.get(name);\n } else {\n const promise = fetchBundle(name);\n this.bundleFetchesInFlight.set(name, promise);\n await promise;\n //the promise is kept in bundleFetchesInFlight to mark what bundles have been downloaded\n //so eventual future requests will just await the resolved promise and resolve immediately\n }\n};\n\nNodeContext.prototype.getComponentModel = async function (name) {\n if (!name) {\n throw new Error(\"Component instance must have a name\");\n }\n\n if (this.componentModels.hasOwnProperty(name) === false) {\n const bundleName = this.graphModel.getBundleContainingComponent(name);\n if (!bundleName) {\n throw new Error(\"Can't find component model for \" + name);\n }\n\n //start fetching dependencies in the background\n for (const bundleDep of this.graphModel.getBundleDependencies(bundleName)) {\n this.fetchComponentBundle(bundleDep);\n }\n\n //and wait for the bundle that has the component we need\n await this.fetchComponentBundle(bundleName);\n }\n\n return this.componentModels[name];\n};\n\nNodeContext.prototype.hasComponentModelWithName = function (name) {\n return this.componentModels.hasOwnProperty(name);\n};\n\nNodeContext.prototype.createComponentInstanceNode = async function (\n componentName,\n id,\n nodeScope,\n extraProps\n) {\n var node = new ComponentInstanceNode(this, id, nodeScope);\n node.name = componentName;\n\n for (const prop in extraProps) {\n node[prop] = extraProps[prop];\n }\n\n const componentModel = await this.getComponentModel(componentName);\n await node.setComponentModel(componentModel);\n\n return node;\n};\n\nNodeContext.prototype._formatConnectionValue = function (value) {\n if (\n typeof value === \"object\" &&\n value &&\n value.constructor &&\n value.constructor.name === \"Node\"\n ) {\n value = \"<Node> \" + value.name;\n } else if (\n typeof value === \"object\" &&\n typeof window !== \"undefined\" &&\n value instanceof HTMLElement\n ) {\n value = `DOM Node <${value.tagName}>`;\n } else if (typeof value === \"string\" && !value.startsWith(\"[Signal]\")) {\n return '\"' + value + '\"';\n } else if (Number.isNaN(value)) {\n return \"NaN\";\n }\n\n return value;\n};\n\nNodeContext.prototype.connectionSentValue = function (output, value) {\n if (\n !this.editorConnection ||\n !this.editorConnection.isConnected() ||\n !this.debugInspectorsEnabled\n ) {\n return;\n }\n\n const timestamp = this.getCurrentTime();\n\n this._outputHistory[output.id] = {\n value,\n timestamp,\n };\n\n if (this.connectionsToPulse.hasOwnProperty(output.id)) {\n this.connectionsToPulse[output.id].timestamp = timestamp;\n return;\n }\n\n const connections = [];\n\n output.connections.forEach((connection) => {\n connections.push(\n output.owner.id +\n output.name +\n connection.node.id +\n connection.inputPortName\n );\n });\n\n this.connectionsToPulse[output.id] = {\n timestamp,\n connections: connections,\n };\n\n this.connectionsToPulseChanged = true;\n\n if (this.connectionPulsingCallbackScheduled === false) {\n this.connectionPulsingCallbackScheduled = true;\n setTimeout(this.clearOldConnectionPulsing.bind(this), 100);\n }\n};\n\nNodeContext.prototype.connectionSentSignal = function (output) {\n const id = output.id;\n if (!this._signalHistory.hasOwnProperty(id)) {\n this._signalHistory[id] = {\n count: 0,\n };\n }\n\n this._signalHistory[id].count++;\n\n this.connectionSentValue(\n output,\n \"[Signal] Trigger count \" + this._signalHistory[id].count\n );\n};\n\nNodeContext.prototype.clearDebugInspectors = function () {\n this.debugInspectors = {};\n this.connectionsToPulse = {};\n\n this.editorConnection.sendPulsingConnections(this.connectionsToPulse);\n};\n\nNodeContext.prototype.clearOldConnectionPulsing = function () {\n this.connectionPulsingCallbackScheduled = false;\n\n var now = this.getCurrentTime();\n var self = this;\n\n var connectionIds = Object.keys(this.connectionsToPulse);\n connectionIds.forEach(function (id) {\n var con = self.connectionsToPulse[id];\n if (now - con.timestamp > 100) {\n self.connectionsToPulseChanged = true;\n delete self.connectionsToPulse[id];\n }\n });\n\n if (this.connectionsToPulseChanged) {\n this.connectionsToPulseChanged = false;\n this.editorConnection.sendPulsingConnections(this.connectionsToPulse);\n }\n\n if (Object.keys(this.connectionsToPulse).length > 0) {\n this.connectionPulsingCallbackScheduled = true;\n setTimeout(this.clearOldConnectionPulsing.bind(this), 500);\n }\n};\n\nNodeContext.prototype._getDebugInspectorValueForNode = function (id) {\n if (!this.rootComponent) return;\n const nodes = this.rootComponent.nodeScope.getNodesWithIdRecursive(id);\n const node = nodes[nodes.length - 1];\n\n if (node && node.getInspectInfo) {\n const info = node.getInspectInfo();\n if (info !== undefined) {\n return { type: \"node\", id, value: info };\n }\n }\n};\n\nNodeContext.prototype.sendDebugInspectorValues = function () {\n const valuesToSend = [];\n\n for (const id in this.debugInspectors) {\n const inspector = this.debugInspectors[id];\n\n if (\n inspector.type === \"connection\" &&\n this._outputHistory.hasOwnProperty(id)\n ) {\n const value = this._outputHistory[id].value;\n\n valuesToSend.push({\n type: \"connection\",\n id,\n value: this._formatConnectionValue(value),\n });\n } else if (inspector.type === \"node\") {\n const inspectorValue = this._getDebugInspectorValueForNode(id);\n inspectorValue && valuesToSend.push(inspectorValue);\n }\n }\n\n if (valuesToSend.length > 0) {\n this.editorConnection.sendDebugInspectorValues(valuesToSend);\n }\n\n if (this.connectionsToPulseChanged) {\n this.connectionsToPulseChanged = false;\n this.editorConnection.sendPulsingConnections(this.connectionsToPulse);\n }\n};\n\nNodeContext.prototype.setDebugInspectorsEnabled = function (enabled) {\n this.debugInspectorsEnabled = enabled;\n this.editorConnection.debugInspectorsEnabled = enabled;\n if (enabled) {\n this.sendDebugInspectorValues();\n }\n};\n\nNodeContext.prototype.sendGlobalEventFromEventSender = function (\n channelName,\n inputValues\n) {\n this.eventSenderEmitter.emit(channelName, inputValues);\n};\n\nNodeContext.prototype.setPopupCallbacks = function ({ onShow, onClose }) {\n this.onShowPopup = onShow;\n this.onClosePopup = onClose;\n};\n\n/**\n * @param {string} popupComponent\n * @param {Record<string, unknown>} params\n * @param {{\n * senderNode?: unknown;\n * onClosePopup?: (action?: string, results: object) => void;\n * }} args\n * @returns\n */\nNodeContext.prototype.showPopup = async function (\n popupComponent,\n params,\n args\n) {\n if (!this.onShowPopup) return;\n\n const nodeScope = this.rootComponent.nodeScope;\n\n const popupNode = await nodeScope.createNode(popupComponent);\n for (const inputKey in params) {\n popupNode.setInputValue(inputKey, params[inputKey]);\n }\n\n popupNode.popupParent = args?.senderNode || null;\n\n // Create container group\n const group = nodeScope.createPrimitiveNode(\"Group\");\n group.setInputValue(\"flexDirection\", \"node\");\n group.setInputValue(\"cssClassName\", \"noodl-popup\");\n\n const bodyScroll = this.graphModel.getSettings().bodyScroll;\n\n //if the body can scroll the position of the popup needs to be fixed.\n group.setInputValue(\"position\", bodyScroll ? \"fixed\" : \"absolute\");\n\n var closePopupNodes = popupNode.nodeScope.getNodesWithType(\n \"NavigationClosePopup\"\n );\n if (closePopupNodes && closePopupNodes.length > 0) {\n for (var j = 0; j < closePopupNodes.length; j++) {\n closePopupNodes[j]._setCloseCallback((action, results) => {\n //close next frame so all nodes have a chance to update before being deleted\n this.scheduleNextFrame(() => {\n //avoid double callbacks\n if (!nodeScope.hasNodeWithId(group.id)) return;\n\n this.onClosePopup(group);\n nodeScope.deleteNode(group);\n args && args.onClosePopup && args.onClosePopup(action, results);\n });\n });\n }\n }\n\n this.onShowPopup(group);\n\n requestAnimationFrame(() => {\n //hack to make the react components have the right props\n //TODO: figure out why this requestAnimationFrame is necessary\n group.addChild(popupNode);\n });\n};\n\nNodeContext.prototype.setWarningTypes = function (warningTypes) {\n Object.assign(this.warningTypes, warningTypes);\n};\n\nNodeContext.prototype.isWarningTypeEnabled = function (warning) {\n if (!this.warningTypes.hasOwnProperty(warning)) {\n //if a level isn't set, default to true\n return true;\n }\n\n return this.warningTypes[warning] ? true : false;\n};\n\nNodeContext.prototype.getDefaultValueForInput = function (nodeType, inputName) {\n if (this.nodeRegister.hasNode(nodeType) === false) {\n return undefined;\n }\n\n const nodeMetadata = this.nodeRegister.getNodeMetadata(nodeType);\n const inputMetadata = nodeMetadata.inputs[inputName];\n\n if (!inputMetadata) {\n return undefined;\n }\n\n if (inputMetadata.type.defaultUnit) {\n return {\n value: inputMetadata.default,\n unit: inputMetadata.type.defaultUnit,\n };\n }\n\n return inputMetadata.default;\n};\n\nexport { NodeContext };\n","function EventSender() {\n this.listeners = {};\n this.listenersWithRefs = {};\n}\n\nEventSender.prototype.on = function (eventName, callback, ref) {\n if (ref) {\n if (!this.listenersWithRefs.hasOwnProperty(eventName)) {\n this.listenersWithRefs[eventName] = new Map();\n }\n\n if (!this.listenersWithRefs[eventName].get(ref)) {\n this.listenersWithRefs[eventName].set(ref, []);\n }\n\n this.listenersWithRefs[eventName].get(ref).push(callback);\n } else {\n if (!this.listeners.hasOwnProperty(eventName)) {\n this.listeners[eventName] = [];\n }\n\n this.listeners[eventName].push(callback);\n }\n};\n\nEventSender.prototype.removeListenersWithRef = function (ref) {\n Object.keys(this.listenersWithRefs).forEach((eventName) => {\n const listeners = this.listenersWithRefs[eventName];\n if (listeners.has(ref)) {\n listeners.delete(ref);\n }\n });\n};\n\nEventSender.prototype.removeAllListeners = function (eventName) {\n if (eventName) {\n delete this.listeners[eventName];\n delete this.listenersWithRefs[eventName];\n } else {\n this.listeners = {};\n this.listenersWithRefs = {};\n }\n};\n\nEventSender.prototype.emit = async function (eventName, data) {\n const array = this.listeners[eventName];\n\n if (array) {\n for (let i = 0; i < array.length; i++) {\n const callback = array[i];\n await Promise.resolve(callback.call(null, data));\n }\n }\n\n const map = this.listenersWithRefs[eventName];\n\n if (map) {\n for (const [ref, callbacks] of map) {\n for (const callback of callbacks) {\n await Promise.resolve(callback.call(ref, data));\n }\n }\n }\n};\n\nexport { EventSender };\n","import { EventEmitter } from \"../events\";\n\nfunction Services() {}\n\nServices.events = new EventEmitter();\n\nexport { Services };\n","//used to optimize warnings so we're not sending unneccessary warnings.\n//Improves editor performance, especially in larger projects\n\nexport class ActiveWarnings {\n constructor() {\n this.currentWarnings = new Map();\n }\n\n setWarning(nodeId, key, warning) {\n //Check if we've already sent this warning\n if (this.currentWarnings.has(nodeId)) {\n //we have sent warnings to this node before, check if we've sent this particular one before\n const warningKeys = this.currentWarnings.get(nodeId);\n if (warningKeys[key] === warning) {\n //we've already sent this warning, no need to send it again\n return false;\n }\n\n //new warning, remember that we sent it\n warningKeys[key] = warning;\n return true;\n } else {\n //new warning, we havent sent any warnings to this node before\n //Remember that we sent it\n this.currentWarnings.set(nodeId, { [key]: warning });\n return true;\n }\n }\n\n clearWarning(nodeId, key) {\n const warningKeys = this.currentWarnings.get(nodeId);\n\n if (!warningKeys || !warningKeys[key]) {\n //There are no warnings that we've sent on this node.\n //Save some performance by not sending an uneccesary message to the editor\n return false;\n }\n\n delete warningKeys[key];\n if (Object.keys(warningKeys).length === 0) {\n delete this.currentWarnings.delete(nodeId);\n }\n\n return true;\n }\n\n clearWarnings(nodeId) {\n if (this.currentWarnings.has(nodeId) === false) {\n //no warnings on this node, save some performance by not sending a message to the editor\n return false;\n }\n\n //no warnings for this node anymore\n this.currentWarnings.delete(nodeId);\n return true;\n }\n}\n","import { EventSender } from \"./eventsender\";\nimport { Services } from \"./services/services\";\nimport { guid } from \"./guid\";\nimport { ActiveWarnings } from \"./editorconnection.activewarnings\";\n\nfunction EditorConnection(opts) {\n var _opts = opts || {};\n\n EventSender.call(this);\n\n this.runtimeType = _opts.runtimeType;\n this.platform = _opts.platform;\n this.ws =\n (_opts.platform && _opts.platform.webSocketClass) ||\n (typeof WebSocket !== \"undefined\" ? WebSocket : undefined);\n this.wsOptions =\n (_opts.platform && _opts.platform.webSocketOptions) || undefined;\n this.reconnectOnClose = true;\n this.enableDebugger = false;\n\n this.lastSendTimestamp = 0;\n this.sendQueue = [];\n this.sendTimer = undefined;\n\n //used to optimize warnings so we're not sending unneccessary warnings.\n //Clan slow down the editor in large projects\n this.activeWarnings = new ActiveWarnings();\n}\n\nEditorConnection.prototype = Object.create(EventSender.prototype);\nEditorConnection.prototype.constructor = EditorConnection;\n\nEditorConnection.prototype.isRunningLocally = function () {\n var runningLocallyInBrowser =\n (this.platform.isRunningLocally && this.platform.isRunningLocally()) ||\n (typeof document !== \"undefined\" &&\n (document.location.hostname === \"localhost\" ||\n document.location.hostname === \"127.0.0.1\"));\n return runningLocallyInBrowser;\n};\n\nEditorConnection.prototype.connect = function (address) {\n this.socket = this.wsOptions\n ? new this.ws(address, this.wsOptions)\n : new this.ws(address);\n\n var self = this;\n\n this.socket.addEventListener(\"open\", function () {\n self.clientId = guid();\n self.socket.send(\n JSON.stringify({\n cmd: \"register\",\n type: \"viewer\",\n clientId: self.clientId,\n })\n );\n self.emit(\"connected\");\n });\n\n this.socket.addEventListener(\"close\", function (event) {\n if (self.reconnectOnClose) {\n self.reconnect(address);\n }\n console.log(\"Editor connection closed\", event.code, event.reason);\n self.emit(\"connectionClosed\");\n });\n\n this.socket.addEventListener(\"error\", function (evt) {\n console.log(\"Editor connection error, trying to reconnect\");\n });\n\n this.socket.addEventListener(\"message\", async (e) => {\n // NOTE: When the data is too big it seems to change from string to a blob\n const text = typeof e.data === \"string\" ? e.data : await e.data.text();\n const message = JSON.parse(text);\n\n let content;\n\n if (message.cmd === \"registered\") {\n //ignore\n } else if (message.cmd === \"export\") {\n content = JSON.parse(message.content);\n if (message.type === \"full\" && message.target === this.clientId) {\n self.emit(\"exportDataFull\", content);\n }\n } else if (message.cmd === \"hoverStart\") {\n self.emit(\"hoverStart\", message.content.id);\n } else if (message.cmd === \"hoverEnd\") {\n self.emit(\"hoverEnd\", message.content.id);\n } else if (message.cmd === \"refresh\") {\n self.emit(\"reload\");\n } else if (message.cmd === \"debugInspectors\") {\n if (this.debugInspectorsEnabled) {\n content = JSON.parse(message.content);\n self.emit(\"debugInspectorsUpdated\", content.inspectors);\n }\n } else if (message.cmd === \"debuggingEnabled\") {\n if (self.isRunningLocally()) {\n content = JSON.parse(message.content);\n self.emit(\"debuggingEnabledChanged\", content.enabled);\n }\n } else if (message.cmd === \"getConnectionValue\") {\n if (self.isRunningLocally()) {\n content = JSON.parse(message.content);\n await self.emit(\"getConnectionValue\", {\n clientId: content.clientId,\n connectionId: content.connectionId,\n });\n }\n } else if (message.cmd === \"modelUpdate\") {\n await self.emit(\"modelUpdate\", message.content);\n } else if (message.cmd === \"publish\") {\n Services.pubsub.routeMessage(message); // Publish a message from the pubsub service\n } else if (message.cmd === \"noodlModules\") {\n self.emit(\"noodlModules\", JSON.parse(message.content));\n } else if (message.cmd === \"mqttUpdate\") {\n self.emit(\"mqttUpdate\", message.content);\n } else if (message.cmd === \"activeComponentChanged\") {\n self.emit(\"activeComponentChanged\", message.component);\n } else {\n console.log(\"Command not implemented\", message);\n }\n });\n};\n\nEditorConnection.prototype.reconnect = function (address) {\n var self = this;\n\n setTimeout(function () {\n self.connect(address);\n }, 2000);\n};\n\nEditorConnection.prototype.isConnected = function () {\n return this.socket !== undefined && this.socket.readyState === this.ws.OPEN;\n};\n\n//JSON replacer to make cyclic objects non-cyclic.\n//Using this example: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value#examples\nconst getCircularReplacer = () => {\n const seen = new WeakSet();\n return (key, value) => {\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) {\n return \"[Circular]\";\n }\n seen.add(value);\n }\n return value;\n };\n};\n\nEditorConnection.prototype.send = function (data) {\n const now = this.platform.getCurrentTime();\n const dt = now - this.lastSendTimestamp;\n\n //Send objects as json and capture exceptions\n const trySend = (msg) => {\n try {\n this.socket.send(JSON.stringify(msg));\n } catch (e) {\n if (e.message && e.message.startsWith(\"Converting circular\")) {\n //the object is circular, try to address it\n try {\n this.socket.send(JSON.stringify(msg, getCircularReplacer()));\n } catch (e) {\n //still failed, give up\n console.log(\"failed to send message to editor\", msg, e);\n }\n } else {\n //message couldn't be serialized to json\n console.log(\"failed to send message to editor\", msg, e);\n }\n }\n };\n\n //batch messages so they're only sent at most every 200ms\n //note that the first message will always be sent immediately, and the ones for 200ms after\n //that one will be queued. So initial message response time is as low as possible (for hover etc)\n if (dt < 200 || this.sendTimer || !this.isConnected()) {\n this.sendQueue.push(data);\n if (!this.sendTimer) {\n this.sendTimer = setTimeout(() => {\n if (this.isConnected() === false) {\n return;\n }\n\n //send messages in chunks. If we send too many at once the editor UI can freeze for a while\n //since it's handling these in the renderer process\n const chunkSize = 50;\n for (let i = 0; i < this.sendQueue.length; i += chunkSize) {\n const chunk = this.sendQueue.slice(i, i + chunkSize);\n trySend(chunk);\n }\n\n this.sendQueue = [];\n this.sendTimer = undefined;\n this.lastSendTimestamp = this.platform.getCurrentTime();\n }, 100);\n }\n } else {\n this.lastSendTimestamp = now;\n trySend(data);\n }\n};\n\nEditorConnection.prototype.sendInspectId = function (id) {\n this.send({\n cmd: \"select\",\n type: \"viewer\",\n content: JSON.stringify({ id: id }),\n });\n};\n\nEditorConnection.prototype.sendSelectComponent = function (componentName) {\n this.send({\n cmd: \"select\",\n type: \"viewer\",\n content: JSON.stringify({ componentName }),\n });\n};\n\nEditorConnection.prototype.sendPulsingConnections = function (connectionMap) {\n var connectionsToPulse = [];\n Object.keys(connectionMap).forEach(function (c) {\n var connection = connectionMap[c];\n connectionsToPulse = connectionsToPulse.concat(connection.connections);\n });\n\n this.send({\n cmd: \"connectiondebugpulse\",\n type: \"viewer\",\n content: JSON.stringify({\n connectionsToPulse: connectionsToPulse,\n }),\n });\n};\n\nEditorConnection.prototype.sendDebugInspectorValues = function (inspectors) {\n this.send({\n cmd: \"debuginspectorvalues\",\n type: \"viewer\",\n content: { inspectors },\n });\n};\n\nEditorConnection.prototype.sendConnectionValue = function (\n connectionId,\n value\n) {\n this.send({\n cmd: \"connectionValue\",\n type: \"viewer\",\n content: { connectionId, value },\n });\n};\n\nconst dynamicPortsHash = {};\n\nfunction _detectRename(before, after) {\n if (!before || !after) return;\n\n if (before.length !== after.length) return; // Must be of same length\n\n var res = {};\n for (var i = 0; i < before.length; i++) {\n if (after.indexOf(before[i]) === -1) {\n if (res.before) return; // Can only be one from before that is missing\n res.before = before[i];\n }\n\n if (before.indexOf(after[i]) === -1) {\n if (res.after) return; // Only one can be missing,otherwise we cannot match\n res.after = after[i];\n }\n }\n\n return res.before && res.after ? res : undefined;\n}\n\nEditorConnection.prototype.sendDynamicPorts = function (id, ports, options) {\n var hash = JSON.stringify(ports);\n if (dynamicPortsHash[id] === hash) {\n // Make sure we don't resend the same port data\n return;\n }\n\n if (dynamicPortsHash[id] && ports && options && options.detectRenamed) {\n var detectRenamed = Array.isArray(options.detectRenamed)\n ? options.detectRenamed\n : [options.detectRenamed];\n\n var renamed = [];\n detectRenamed.forEach((d) => {\n var before = JSON.parse(dynamicPortsHash[id]),\n after = [].concat(ports);\n\n // Filter ports with correct prefix and plug\n if (d.prefix) {\n before = before.filter((p) => p.name.startsWith(d.prefix));\n after = after.filter((p) => p.name.startsWith(d.prefix));\n }\n\n if (d.plug) {\n before = before.filter((p) => p.plug === d.plug);\n after = after.filter((p) => p.plug === d.plug);\n }\n\n // Remove the prefix\n after = after.map((p) => p.name.substring((d.prefix || \"\").length));\n before = before.map((p) => p.name.substring((d.prefix || \"\").length));\n\n // Find the one that is renamed (if any)\n var res = _detectRename(before, after);\n if (res) {\n renamed.push({\n plug: d.plug,\n patterns: [(d.prefix || \"\") + \"{{*}}\"],\n before: res.before,\n after: res.after,\n });\n }\n });\n if (renamed.length > 0) options.renamed = renamed;\n\n delete options.detectRenamed;\n }\n\n dynamicPortsHash[id] = hash;\n\n this.send({\n cmd: \"instanceports\",\n type: \"viewer\",\n content: JSON.stringify({\n nodeid: id,\n ports: ports,\n options: options,\n }),\n });\n};\n\nEditorConnection.prototype.sendWarning = function (\n componentName,\n nodeId,\n key,\n warning\n) {\n const isNewWarning = this.activeWarnings.setWarning(nodeId, key, warning);\n\n if (isNewWarning) {\n this.send({\n cmd: \"showwarning\",\n type: \"viewer\",\n content: JSON.stringify({\n componentName: componentName,\n nodeId: nodeId,\n key: key,\n warning: warning,\n }),\n });\n }\n};\n\nEditorConnection.prototype.clearWarning = function (\n componentName,\n nodeId,\n key\n) {\n const hasWarning = this.activeWarnings.clearWarning(nodeId, key);\n\n if (hasWarning) {\n this.send({\n cmd: \"showwarning\",\n type: \"viewer\",\n content: JSON.stringify({\n componentName: componentName,\n nodeId: nodeId,\n key: key,\n warning: undefined,\n }),\n });\n }\n};\n\nEditorConnection.prototype.clearWarnings = function (componentName, nodeId) {\n const hasWarnings = this.activeWarnings.clearWarnings(nodeId);\n\n if (hasWarnings) {\n this.send({\n cmd: \"clearwarnings\",\n type: \"viewer\",\n content: JSON.stringify({\n componentName: componentName,\n nodeId: nodeId,\n }),\n });\n }\n};\n\nEditorConnection.prototype.sendPatches = function (patches) {\n this.send({\n cmd: \"patchproject\",\n type: \"viewer\",\n content: JSON.stringify(patches),\n });\n};\n\nEditorConnection.prototype.requestFullExport = function () {\n this.send({\n cmd: \"register\",\n type: \"viewer\",\n });\n};\n\nEditorConnection.prototype.requestNoodlModules = function () {\n this.send({\n cmd: \"getNoodlModules\",\n type: \"viewer\",\n });\n};\n\nvar serviceRequests = {};\nEditorConnection.prototype.sendServiceRequest = function (request, callback) {\n request.token = guid();\n request.clientId = this.clientId;\n serviceRequests[request.token] = callback;\n this.send(request);\n};\n\nEditorConnection.prototype.close = function () {\n this.reconnectOnClose = false;\n\n if (this.isConnected() === false) {\n return;\n }\n\n this.socket.close();\n};\n\nEditorConnection.prototype.sendNodeLibrary = function (nodelibrary) {\n this.send({\n cmd: \"nodelibrary\",\n type: \"viewer\",\n runtimeType: this.runtimeType,\n content: nodelibrary,\n clientId: this.clientId,\n });\n};\n\nEditorConnection.prototype.sendComponentMetadata = function (\n componentName,\n key,\n data\n) {\n this.send({\n cmd: \"componentMetadata\",\n type: \"viewer\",\n content: JSON.stringify({\n componentName,\n key,\n data,\n }),\n });\n};\n\nEditorConnection.prototype.sendProjectMetadata = function (key, data) {\n this.send({\n cmd: \"projectMetadata\",\n type: \"viewer\",\n content: JSON.stringify({\n key,\n data,\n }),\n });\n};\n\nexport { EditorConnection };\n","function formatDynamicPorts(nodeMetadata) {\n const dynamicports = [];\n\n for (const dp of nodeMetadata.dynamicports) {\n if (dp.ports || dp.template || dp.port || dp.channelPort) {\n //same format as editor expects, no need to transform it\n dynamicports.push(dp);\n } else if (dp.inputs || dp.outputs) {\n //inputs and outputs is just list of names\n //need to pull the metadata from the inputs/outputs since they\n //won't be registered by the editor (it's either a regular port\n // or a dynamic port, can't register both)\n const ports = [];\n\n if (dp.inputs) {\n for (const inputName of dp.inputs) {\n ports.push(\n formatPort(inputName, nodeMetadata.inputs[inputName], \"input\")\n );\n }\n }\n\n if (dp.outputs) {\n for (const outputName of dp.outputs) {\n ports.push(\n formatPort(outputName, nodeMetadata.outputs[outputName], \"output\")\n );\n }\n }\n\n const dynamicPortGroup = {\n name: dp.name || \"conditionalports/basic\",\n condition: dp.condition,\n ports,\n };\n\n dynamicports.push(dynamicPortGroup);\n }\n }\n\n return dynamicports;\n}\n\nfunction formatPort(portName, portData, plugType) {\n var port = {\n name: portName,\n type: portData.type,\n plug: plugType,\n };\n if (portData.group) {\n port.group = portData.group;\n }\n if (portData.displayName) {\n port.displayName = portData.displayName;\n }\n if (portData.description) {\n port.description = portData.description;\n }\n if (portData.editorName) {\n port.editorName = portData.editorName;\n }\n if (portData.default !== undefined) {\n port.default = portData.default;\n }\n if (portData.hasOwnProperty(\"index\")) {\n port.index = portData.index;\n }\n if (portData.tooltip) {\n port.tooltip = portData.tooltip;\n }\n if (portData.tab) {\n port.tab = portData.tab;\n }\n if (portData.popout) {\n port.popout = portData.popout;\n }\n if (portData.allowVisualStates) {\n port.allowVisualStates = portData.allowVisualStates;\n }\n return port;\n}\n\nfunction generateNodeLibrary(nodeRegister) {\n var obj = {\n //note: needs to include ALL types\n typecasts: [\n {\n from: \"string\",\n to: [\n \"number\",\n \"boolean\",\n \"image\",\n \"color\",\n \"enum\",\n \"textStyle\",\n \"dimension\",\n \"array\",\n \"object\",\n ],\n },\n {\n from: \"boolean\",\n to: [\"number\", \"string\", \"signal\"],\n },\n {\n from: \"number\",\n to: [\"boolean\", \"string\", \"dimension\"],\n },\n {\n from: \"date\",\n to: [\"string\"],\n },\n {\n from: \"signal\",\n to: [\"boolean\", \"number\"],\n },\n {\n from: \"image\",\n to: [],\n },\n {\n from: \"cloudfile\",\n to: [\"string\", \"image\"],\n },\n {\n from: \"color\",\n to: [],\n },\n {\n from: \"enum\",\n to: [],\n },\n {\n from: \"object\",\n to: [],\n },\n {\n from: \"domelement\",\n to: [],\n },\n {\n from: \"reference\",\n to: [],\n },\n {\n from: \"font\",\n to: [],\n },\n {\n from: \"textStyle\",\n to: [\"string\"],\n },\n {\n // Collection is deprecated but supported via typecasts\n from: \"collection\",\n to: [\"array\"],\n },\n {\n from: \"array\",\n to: [\"collection\"],\n },\n ],\n dynamicports: [\n {\n type: \"conditionalports\",\n name: \"basic\",\n },\n {\n type: \"expand\",\n name: \"basic\",\n },\n ],\n colors: {\n nodes: {\n component: {\n base: \"#643D8B\",\n baseHighlighted: \"#79559b\",\n header: \"#4E2877\",\n headerHighlighted: \"#643d8b\",\n outline: \"#4E2877\",\n outlineHighlighted: \"#b58900\",\n text: \"#dbd0e4\",\n },\n visual: {\n base: \"#315272\",\n baseHighlighted: \"#4d6784\",\n header: \"#173E5D\",\n headerHighlighted: \"#315272\",\n outline: \"#173E5D\",\n outlineHighlighted: \"#b58900\",\n text: \"#cfd5de\",\n },\n data: {\n base: \"#465524\",\n baseHighlighted: \"#5b6a37\",\n header: \"#314110\",\n headerHighlighted: \"#465524\",\n outline: \"#314110\",\n outlineHighlighted: \"#b58900\",\n text: \"#d2d6c5\",\n },\n javascript: {\n base: \"#7E3660\",\n baseHighlighted: \"#944e74\",\n header: \"#67214B\",\n headerHighlighted: \"#7e3660\",\n outline: \"#67214B\",\n outlineHighlighted: \"#d57bab\",\n text: \"#e4cfd9\",\n },\n default: {\n base: \"#4C4F59\",\n baseHighlighted: \"#62656e\",\n header: \"#373B45\",\n headerHighlighted: \"#4c4f59\",\n outline: \"#373B45\",\n outlineHighlighted: \"#b58900\",\n text: \"#d3d4d6\",\n },\n },\n connections: {\n signal: {\n normal: \"#006f82\",\n highlighted: \"#7ec2cf\",\n pulsing: \"#ffffff\",\n },\n default: {\n normal: \"#875d00\",\n highlighted: \"#e5ae32\",\n pulsing: \"#ffffff\",\n },\n },\n },\n nodetypes: [\n {\n name: \"Component Children\",\n shortDesc:\n \"This node is a placeholder for where children of this component will be inserted.\",\n docs: \"https://docs.noodl.net/nodes/component-utilities/component-children\",\n color: \"component\",\n allowAsChild: true,\n category: \"Visual\",\n haveComponentChildren: [\"Visual\"],\n },\n ],\n };\n\n var nodeTypes = Object.keys(nodeRegister._constructors);\n\n nodeTypes.forEach(function (type) {\n var nodeMetadata = nodeRegister._constructors[type].metadata;\n\n var nodeObj = {\n name: type,\n searchTags: nodeMetadata.searchTags,\n };\n obj.nodetypes.push(nodeObj);\n\n if (nodeMetadata.version) {\n nodeObj.version = nodeMetadata.version;\n }\n if (nodeMetadata.displayNodeName) {\n nodeObj.displayNodeName = nodeMetadata.displayNodeName;\n }\n if (nodeMetadata.nodeDoubleClickAction) {\n nodeObj.nodeDoubleClickAction = nodeMetadata.nodeDoubleClickAction;\n }\n if (nodeMetadata.shortDesc) {\n nodeObj.shortDesc = nodeMetadata.shortDesc;\n }\n if (nodeMetadata.module) {\n nodeObj.module = nodeMetadata.module;\n }\n if (nodeMetadata.deprecated) {\n nodeObj.deprecated = true;\n }\n if (nodeMetadata.haveComponentPorts) {\n nodeObj.haveComponentPorts = true;\n }\n if (nodeMetadata.category === \"Visual\") {\n nodeObj.allowAsChild = true;\n nodeObj.allowAsExportRoot = true;\n nodeObj.color = \"visual\";\n }\n\n if (nodeMetadata.allowAsExportRoot !== undefined) {\n nodeObj.allowAsExportRoot = nodeMetadata.allowAsExportRoot;\n }\n\n if (nodeMetadata.allowChildren) {\n nodeObj.allowChildrenWithCategory = [\"Visual\"];\n nodeObj.color = \"visual\";\n }\n if (nodeMetadata.allowChildrenWithCategory) {\n nodeObj.allowChildrenWithCategory =\n nodeMetadata.allowChildrenWithCategory;\n }\n if (nodeMetadata.singleton) {\n nodeObj.singleton = true;\n }\n if (nodeMetadata.allowAsChild) {\n nodeObj.allowAsChild = true;\n }\n if (nodeMetadata.docs) {\n nodeObj.docs = nodeMetadata.docs;\n }\n if (nodeMetadata.shortDocs) {\n nodeObj.shortDocs = nodeMetadata.shortDocs;\n } else if (\n nodeMetadata.docs &&\n nodeMetadata.docs.indexOf(\"https://docs.noodl.net\") === 0\n ) {\n nodeObj.shortDocs = nodeMetadata.docs.replace(\"/#\", \"\") + \"-short.md\";\n }\n nodeObj.category = nodeMetadata.category;\n\n if (nodeMetadata.panels) {\n nodeObj.panels = nodeMetadata.panels;\n }\n if (nodeMetadata.usePortAsLabel) {\n nodeObj.usePortAsLabel = nodeMetadata.usePortAsLabel;\n nodeObj.portLabelTruncationMode = nodeMetadata.portLabelTruncationMode;\n }\n if (nodeMetadata.color) {\n nodeObj.color = nodeMetadata.color;\n }\n if (nodeMetadata.dynamicports) {\n nodeObj.dynamicports = formatDynamicPorts(nodeMetadata);\n }\n if (nodeMetadata.exportDynamicPorts) {\n nodeObj.exportDynamicPorts = nodeMetadata.exportDynamicPorts;\n }\n if (nodeMetadata.visualStates) {\n nodeObj.visualStates = nodeMetadata.visualStates;\n }\n if (nodeMetadata.useVariants) {\n nodeObj.useVariants = nodeMetadata.useVariants;\n }\n if (nodeMetadata.connectionPanel) {\n nodeObj.connectionPanel = nodeMetadata.connectionPanel;\n }\n nodeObj.ports = [];\n\n var dynamicports = nodeObj.dynamicports || [];\n var selectorNames = {};\n var conditionalPortNames = {};\n\n //flag conditional ports so they don't get added from the normal ports, making them appear twice in the export\n /* dynamicports.filter(d=> d.name === 'conditionalports/basic')\n .forEach(d=> {\n d.ports.forEach(port=> {\n conditionalPortNames[port.plug + '/' + port.name] = true;\n });\n });*/\n\n //same for channel ports\n dynamicports\n .filter((d) => d.channelPort !== undefined)\n .forEach((port) => {\n conditionalPortNames[\n port.channelPort.plug + \"/\" + port.channelPort.name\n ] = true;\n });\n\n if (dynamicports.length) {\n nodeObj.dynamicports = dynamicports;\n }\n\n Object.keys(nodeMetadata.inputs).forEach(function (inputName) {\n if (\n selectorNames.hasOwnProperty(\"input/\" + inputName) ||\n conditionalPortNames.hasOwnProperty(\"input/\" + inputName)\n ) {\n //this is a selector or dynamic port. It's already been registered\n return;\n }\n var port = nodeMetadata.inputs[inputName];\n if (port.exportToEditor === false) {\n return;\n }\n\n nodeObj.ports.push(formatPort(inputName, port, \"input\"));\n });\n\n function exportOutput(name, output) {\n var port = {\n name: name,\n type: output.type,\n plug: \"output\",\n };\n if (output.group) {\n port.group = output.group;\n }\n if (output.displayName) {\n port.displayName = output.displayName;\n }\n if (output.editorName) {\n port.editorName = output.editorName;\n }\n if (output.hasOwnProperty(\"index\")) {\n port.index = output.index;\n }\n nodeObj.ports.push(port);\n }\n\n Object.keys(nodeMetadata.outputs).forEach(function (prop) {\n if (\n selectorNames.hasOwnProperty(\"output/\" + prop) ||\n conditionalPortNames.hasOwnProperty(\"output/\" + prop)\n ) {\n //this is a selector or dynamic port. It's already been registered\n return;\n }\n\n var output = nodeMetadata.outputs[prop];\n exportOutput(prop, output);\n });\n });\n\n const coreNodes = [\n {\n name: \"UI Elements\",\n description: \"Buttons, inputs, containers, media\",\n type: \"visual\",\n subCategories: [\n {\n name: \"Basic Elements\",\n items: [\n \"Group\",\n \"net.noodl.visual.columns\",\n \"Text\",\n \"Image\",\n \"Video\",\n \"Circle\",\n \"net.noodl.visual.icon\",\n ],\n },\n {\n name: \"UI Controls\",\n items: [\n \"net.noodl.controls.button\",\n \"net.noodl.controls.checkbox\",\n \"net.noodl.controls.options\",\n \"net.noodl.controls.radiobutton\",\n \"Radio Button Group\",\n \"net.noodl.controls.range\",\n \"net.noodl.controls.textinput\",\n ],\n },\n ],\n },\n {\n name: \"Navigation & Popups\",\n description: \"Page routing, navigation, popups\",\n type: \"logic\",\n subCategories: [\n {\n name: \"Navigation\",\n items: [\n \"Router\",\n \"RouterNavigate\",\n \"PageInputs\",\n \"net.noodl.externallink\",\n \"PageStackNavigateToPath\",\n ],\n },\n {\n name: \"Component Stack\",\n items: [\"Page Stack\", \"PageStackNavigate\", \"PageStackNavigateBack\"],\n },\n {\n name: \"Popups\",\n items: [\"NavigationShowPopup\", \"NavigationClosePopup\"],\n },\n ],\n },\n {\n name: \"Logic & Utilities\",\n description: \"Logic, events, string manipulation\",\n type: \"logic\",\n subCategories: [\n {\n name: \"General Utils\",\n items: [\n \"States\",\n \"Value Changed\",\n \"Timer\",\n \"Color Blend\",\n \"Number Remapper\",\n \"Counter\",\n \"Drag\",\n \"net.noodl.animatetovalue\",\n ],\n },\n {\n name: \"Logic\",\n items: [\n \"Boolean To String\",\n \"Switch\",\n \"And\",\n \"Or\",\n \"Condition\",\n \"Inverter\",\n ],\n },\n {\n name: \"Events\",\n items: [\"Event Sender\", \"Event Receiver\"],\n },\n {\n name: \"String Manipulation\",\n items: [\n \"Substring\",\n \"String Mapper\",\n \"String Format\",\n \"Date To String\",\n \"Unique Id\",\n ],\n },\n {\n name: \"System\",\n items: [\"Screen Resolution\", \"Open File Picker\"],\n },\n {\n name: \"Variables\",\n items: [\"String\", \"Boolean\", \"Color\", \"Number\"],\n },\n ],\n },\n {\n name: \"Component Utilities\",\n description: \"Component inputs, outputs & object\",\n type: \"component\",\n subCategories: [\n {\n name: \"\",\n items: [\n \"Component Inputs\",\n \"Component Outputs\",\n \"Component Children\",\n \"net.noodl.ComponentObject\",\n \"net.noodl.ParentComponentObject\",\n \"net.noodl.SetComponentObjectProperties\",\n \"net.noodl.SetParentComponentObjectProperties\",\n ],\n },\n ],\n },\n {\n name: \"Read & Write Data\",\n description: \"Arrays, objects, cloud data\",\n type: \"data\",\n subCategories: [\n {\n name: \"\",\n items: [\n \"RunTasks\",\n \"For Each\",\n \"For Each Actions\",\n \"Model2\",\n \"SetModelProperties\",\n \"NewModel\",\n \"Set Variable\",\n \"Variable2\",\n ],\n },\n {\n name: \"Array\",\n items: [\n \"Collection2\",\n \"CollectionNew\",\n \"CollectionRemove\",\n \"CollectionClear\",\n \"CollectionInsert\",\n \"Filter Collection\",\n \"Map Collection\",\n \"Static Data\",\n ],\n },\n {\n name: \"Cloud Data\",\n items: [\n \"DbModel2\",\n \"NewDbModelProperties\",\n \"FilterDBModels\",\n \"SetDbModelProperties\",\n \"DbCollection2\",\n \"DeleteDbModelProperties\",\n \"AddDbModelRelation\",\n \"RemoveDbModelRelation\",\n \"Cloud File\",\n \"Upload File\",\n \"CloudFunction2\",\n \"DbConfig\",\n ],\n },\n {\n name: \"User\",\n items: [\n \"net.noodl.user.LogIn\",\n \"net.noodl.user.LogOut\",\n \"net.noodl.user.SignUp\",\n \"net.noodl.user.User\",\n \"net.noodl.user.SetUserProperties\",\n \"net.noodl.user.VerifyEmail\",\n \"net.noodl.user.SendEmailVerification\",\n \"net.noodl.user.ResetPassword\",\n \"net.noodl.user.RequestPasswordReset\",\n ],\n },\n {\n name: \"External Data\",\n items: [\"REST2\"],\n },\n ],\n },\n {\n name: \"Custom Code\",\n description: \"Custom JavaScript and CSS\",\n type: \"javascript\",\n subCategories: [\n {\n name: \"\",\n items: [\n \"Expression\",\n \"JavaScriptFunction\",\n \"Javascript2\",\n \"CSS Definition\",\n ],\n },\n ],\n },\n {\n name: \"Cloud Functions\",\n description: \"Nodes to be used in cloud functions\",\n type: \"data\",\n subCategories: [\n {\n name: \"\",\n items: [\"noodl.cloud.request\", \"noodl.cloud.response\"],\n },\n {\n name: \"Cloud Data\",\n items: [\"noodl.cloud.aggregate\"],\n },\n ],\n },\n ];\n\n obj.nodeIndex = {\n coreNodes,\n };\n\n const moduleNodes = [];\n\n nodeTypes.forEach((type) => {\n const nodeMetadata = nodeRegister._constructors[type].metadata;\n if (nodeMetadata.module) {\n moduleNodes.push(type);\n }\n });\n\n if (moduleNodes.length) {\n obj.nodeIndex.moduleNodes = [\n {\n name: \"\",\n items: moduleNodes,\n },\n ];\n }\n\n return obj;\n}\n\nexport { generateNodeLibrary };\n","function addModuleSettings(result, modules) {\n // Add module settings\n for (var i = 0; i < modules.length; i++) {\n var m = modules[i];\n if (m.settings) {\n m.settings.forEach(function (p) {\n result.ports.push(p);\n });\n }\n }\n}\n\nexport function generateProjectSettings(projectSettings, modules) {\n const result = {\n dynamicports: [],\n ports: [],\n };\n\n addModuleSettings(result, modules);\n\n return result;\n}\n","import { EventSender } from \"../eventsender\";\n\nfunction NodeModel(id, type) {\n EventSender.call(this);\n\n this.id = id;\n this.type = type;\n\n this.inputs = [];\n this.outputs = [];\n this.children = [];\n this.parameters = {};\n this.inputPorts = {};\n this.outputPorts = {};\n}\n\nNodeModel.prototype = Object.create(EventSender.prototype);\n\nNodeModel.prototype.setParameter = function (name, value, state) {\n if (state) {\n if (!this.stateParameters) this.stateParameters = {};\n if (!this.stateParameters[state]) this.stateParameters[state] = {};\n\n if (value === undefined) {\n delete this.stateParameters[state][name];\n } else {\n this.stateParameters[state][name] = value;\n }\n } else {\n if (value === undefined) {\n delete this.parameters[name];\n } else {\n this.parameters[name] = value;\n }\n }\n\n this.emit(\"parameterUpdated\", { name, value, state });\n};\n\nNodeModel.prototype.setParameters = function (parameters) {\n Object.keys(parameters).forEach((name) => {\n this.setParameter(name, parameters[name]);\n });\n};\n\nNodeModel.prototype.setStateParameters = function (parameters) {\n this.stateParameters = parameters;\n};\n\nNodeModel.prototype.setStateTransitions = function (stateTransitions) {\n this.stateTransitions = stateTransitions;\n};\n\nNodeModel.prototype.setStateTransitionParamter = function (\n parameter,\n curve,\n state\n) {\n if (!this.stateTransitions) {\n this.stateTransitions = {};\n }\n\n if (curve) {\n this.stateTransitions[state][parameter] = curve;\n } else {\n delete this.stateTransitions[state][parameter];\n }\n};\n\nNodeModel.prototype.setDefaultStateTransition = function (\n stateTransition,\n state\n) {\n if (!this.defaultStateTransitions) {\n this.defaultStateTransitions = {};\n }\n this.defaultStateTransitions[state] = stateTransition;\n};\n\nNodeModel.prototype.addInputPort = function (port) {\n this.inputPorts[port.name] = port;\n this.emit(\"inputPortAdded\", port);\n};\n\nNodeModel.prototype.getInputPort = function (portName) {\n return this.inputPorts[portName];\n};\n\nNodeModel.prototype.getInputPorts = function () {\n return this.inputPorts;\n};\n\nNodeModel.prototype.removeInputPortWithName = function (portName) {\n if (this.inputPorts.hasOwnProperty(portName)) {\n var port = this.inputPorts[portName];\n delete this.inputPorts[portName];\n this.emit(\"inputPortRemoved\", port);\n }\n};\n\nNodeModel.prototype.updateInputPortTypes = function (ports) {\n var changed = false;\n for (var key in ports) {\n if (this.inputPorts[key] !== undefined) {\n this.inputPorts[key].type = ports[key].type;\n changed = true;\n }\n }\n changed && this.emit(\"inputPortTypesUpdated\");\n};\n\nNodeModel.prototype.addOutputPort = function (port) {\n this.outputPorts[port.name] = port;\n this.emit(\"outputPortAdded\", port);\n};\n\nNodeModel.prototype.getOutputPort = function (portName) {\n return this.outputPorts[portName];\n};\n\nNodeModel.prototype.getOutputPorts = function () {\n return this.outputPorts;\n};\n\nNodeModel.prototype.removeOutputPortWithName = function (portName) {\n if (this.outputPorts.hasOwnProperty(portName)) {\n var port = this.outputPorts[portName];\n delete this.outputPorts[portName];\n this.emit(\"outputPortRemoved\", port);\n }\n};\n\nNodeModel.prototype.updateOutputPortTypes = function (ports) {\n var changed = false;\n for (var key in ports) {\n if (this.outputPorts[key] !== undefined) {\n this.outputPorts[key].type = ports[key].type;\n changed = true;\n }\n }\n changed && this.emit(\"outputPortTypesUpdated\");\n};\n\nNodeModel.prototype.addChild = function (child, index) {\n child.parent = this;\n if (index === undefined) {\n this.children.push(child);\n } else {\n this.children.splice(index, 0, child);\n }\n this.emit(\"childAdded\", child);\n};\n\nNodeModel.prototype.removeChild = function (child) {\n child.parent = undefined;\n var index = this.children.indexOf(child);\n this.children.splice(index, 1);\n this.emit(\"childRemoved\", child);\n};\n\nNodeModel.prototype.reset = function () {\n this.removeAllListeners();\n};\n\nNodeModel.prototype.setVariant = function (variant) {\n this.variant = variant;\n this.emit(\"variantUpdated\", variant);\n};\n\nNodeModel.createFromExportData = function (nodeData) {\n var node = new NodeModel(nodeData.id, nodeData.type);\n nodeData.parameters && node.setParameters(nodeData.parameters);\n nodeData.stateParameters && node.setStateParameters(nodeData.stateParameters);\n nodeData.stateTransitions &&\n node.setStateTransitions(nodeData.stateTransitions);\n\n if (nodeData.defaultStateTransitions) {\n for (const state in nodeData.defaultStateTransitions) {\n node.setDefaultStateTransition(\n nodeData.defaultStateTransitions[state],\n state\n );\n }\n }\n\n nodeData.ports &&\n nodeData.ports.forEach(function (port) {\n //some ports are incorrectly named outputs instead of output, patch it here so\n //the rest of the code doesn't need to care\n if (port.plug === \"outputs\") {\n port.plug = \"output\";\n }\n\n if (port.plug === \"input\" || port.plug === \"input/output\") {\n node.addInputPort(port);\n }\n if (port.plug === \"output\" || port.plug === \"input/output\") {\n node.addOutputPort(port);\n }\n });\n\n nodeData.variant && node.setVariant(nodeData.variant);\n\n return node;\n};\n\nexport { NodeModel };\n","import { NodeModel } from \"./nodemodel\";\nimport { EventSender } from \"../eventsender\";\n\nfunction ComponentModel(name) {\n EventSender.call(this);\n\n this.name = name;\n this.nodes = [];\n this.connections = [];\n this.roots = [];\n this.inputPorts = {};\n this.outputPorts = {};\n this.metadata = {};\n}\n\nComponentModel.prototype = Object.create(EventSender.prototype);\n\nComponentModel.prototype.addNode = async function (node) {\n node.component = this;\n this.nodes[node.id] = node;\n await this.emit(\"nodeAdded\", node);\n};\n\nComponentModel.prototype.hasNodeWithId = function (id) {\n return this.getNodeWithId(id) !== undefined;\n};\n\nComponentModel.prototype.getNodeWithId = function (id) {\n return this.nodes[id];\n};\n\nComponentModel.prototype.getAllNodes = function () {\n return Object.values(this.nodes);\n};\n\nComponentModel.prototype.getNodesWithType = function (type) {\n var nodes = [];\n var self = this;\n Object.keys(this.nodes).forEach(function (id) {\n var node = self.nodes[id];\n if (node.type === type) {\n nodes.push(node);\n }\n });\n\n return nodes;\n};\n\nComponentModel.prototype.addConnection = function (connection) {\n this.connections.push(connection);\n this.emit(\"connectionAdded\", connection);\n\n //emit an event on the target node model\n //used by numbered inputs\n if (connection.targetId) {\n const node = this.getNodeWithId(connection.targetId);\n if (node) {\n node.emit(\"inputConnectionAdded\", connection);\n }\n }\n};\n\nComponentModel.prototype.removeConnection = function (connection) {\n const index = this.connections.findIndex((con) => {\n return (\n con.sourceId === connection.sourceId &&\n con.sourcePort === connection.sourcePort &&\n con.targetId === connection.targetId &&\n con.targetPort === connection.targetPort\n );\n });\n\n if (index === -1) {\n console.log(\"Connection doesn't exist\", connection);\n return;\n }\n\n this.connections.splice(index, 1);\n this.emit(\"connectionRemoved\", connection);\n\n //emit an event on the target node model\n //used by numbered inputs\n if (connection.targetId) {\n const node = this.getNodeWithId(connection.targetId);\n if (node) {\n node.emit(\"inputConnectionRemoved\", connection);\n }\n }\n};\n\nComponentModel.prototype.getConnectionsFromPort = function (\n nodeId,\n sourcePortName\n) {\n return this.connections.filter(function (connection) {\n return (\n connection.sourceId === nodeId && connection.sourcePort === sourcePortName\n );\n });\n};\n\nComponentModel.prototype.getConnectionsToPort = function (\n nodeId,\n targetPortName\n) {\n return this.connections.filter(function (connection) {\n return (\n connection.targetId === nodeId && connection.targetPort === targetPortName\n );\n });\n};\n\nComponentModel.prototype.getConnectionsFrom = function (nodeId) {\n return this.connections.filter(function (connection) {\n return connection.sourceId === nodeId;\n });\n};\n\nComponentModel.prototype.getConnectionsTo = function (nodeId) {\n return this.connections.filter(function (connection) {\n return connection.targetId === nodeId;\n });\n};\n\nComponentModel.prototype.addRootId = function (rootId) {\n if (this.roots.indexOf(rootId) !== -1) {\n return;\n }\n this.roots.push(rootId);\n this.emit(\"rootAdded\", rootId);\n};\n\nComponentModel.prototype.removeRootId = function (rootId) {\n const index = this.roots.indexOf(rootId);\n if (index !== -1) {\n this.roots.splice(index, 1);\n this.emit(\"rootRemoved\", rootId);\n }\n};\n\nComponentModel.prototype.getRoots = function () {\n return this.roots;\n};\n\nComponentModel.prototype.removeNodeWithId = async function (id) {\n const node = this.getNodeWithId(id);\n\n if (!node) {\n console.warn(\"ERROR: Attempted to remove non-existing node with ID:\", id);\n return false;\n }\n\n //remove children first\n while (node.children.length > 0) {\n const child = node.children[0];\n const childRemoved = await this.removeNodeWithId(child.id);\n if (!childRemoved) {\n // Workaround for corrupt node trees, should never happen, a remove should always be successful\n node.children.shift();\n }\n }\n\n const connections = this.getConnectionsTo(id).concat(\n this.getConnectionsFrom(id)\n );\n\n for (let i = 0; i < connections.length; i++) {\n this.removeConnection(connections[i]);\n }\n\n this.setNodeParent(node, null);\n\n if (this.roots.indexOf(node.id) !== -1) {\n this.removeRootId(node.id);\n }\n\n await this.emit(\"nodeRemoved\", node);\n\n node.removeAllListeners();\n delete this.nodes[id];\n\n await this.emit(\"nodeWasRemoved\", node);\n return true;\n};\n\nComponentModel.prototype.getAllConnections = function () {\n return this.connections;\n};\n\nComponentModel.prototype.getInputPorts = function () {\n return this.inputPorts;\n};\n\nComponentModel.prototype.getOutputPorts = function () {\n return this.outputPorts;\n};\n\nComponentModel.prototype.addInputPort = function (port) {\n this.inputPorts[port.name] = port;\n this.emit(\"inputPortAdded\", port);\n};\n\nComponentModel.prototype.addOutputPort = function (port) {\n this.outputPorts[port.name] = port;\n this.emit(\"outputPortAdded\", port);\n};\n\nComponentModel.prototype.removeOutputPortWithName = function (portName) {\n if (this.outputPorts.hasOwnProperty(portName)) {\n var port = this.outputPorts[portName];\n delete this.outputPorts[portName];\n this.emit(\"outputPortRemoved\", port);\n }\n};\n\nComponentModel.prototype.removeInputPortWithName = function (portName) {\n if (this.inputPorts.hasOwnProperty(portName)) {\n var port = this.inputPorts[portName];\n delete this.inputPorts[portName];\n this.emit(\"inputPortRemoved\", port);\n }\n};\n\nComponentModel.prototype.updateInputPortTypes = function (ports) {\n var changed = false;\n for (var key in ports) {\n if (this.inputPorts[key] !== undefined) {\n this.inputPorts[key].type = ports[key].type;\n changed = true;\n }\n }\n changed && this.emit(\"inputPortTypesUpdated\");\n};\n\nComponentModel.prototype.updateOutputPortTypes = function (ports) {\n var changed = false;\n for (var key in ports) {\n if (this.outputPorts[key] !== undefined) {\n this.outputPorts[key].type = ports[key].type;\n changed = true;\n }\n }\n changed && this.emit(\"outputPortTypesUpdated\");\n};\n\nComponentModel.prototype.renameInputPortOnNodeWithId = function (\n id,\n oldName,\n newName\n) {\n //remove connections\n var connections = this.getConnectionsToPort(id, oldName);\n connections.forEach(this.removeConnection.bind(this));\n\n //get port before deleting it\n var nodeModel = this.getNodeWithId(id);\n var port = { ...nodeModel.getInputPort(oldName) };\n\n //remove old port\n if (port) {\n nodeModel.removeInputPortWithName(oldName);\n\n //rename and add new port\n port.name = newName;\n nodeModel.addInputPort(port);\n }\n\n //add new connection\n connections.forEach(function (connection) {\n connection.targetPort = newName;\n });\n\n connections.forEach(this.addConnection.bind(this));\n};\n\nComponentModel.prototype.renameOutputPortOnNodeWithId = function (\n id,\n oldName,\n newName\n) {\n //remove connections\n var connections = this.getConnectionsFromPort(id, oldName);\n connections.forEach(this.removeConnection.bind(this));\n\n //get port before deleting it\n var nodeModel = this.getNodeWithId(id);\n var port = { ...nodeModel.getOutputPort(oldName) };\n\n //remove old port\n nodeModel.removeOutputPortWithName(oldName);\n\n //rename and add new port\n port.name = newName;\n nodeModel.addOutputPort(port);\n\n //add new connection\n connections.forEach(function (connection) {\n connection.sourcePort = newName;\n });\n\n connections.forEach(this.addConnection.bind(this));\n};\n\nComponentModel.prototype.setNodeParent = function (\n childModel,\n newParentModel,\n index\n) {\n if (this.roots.indexOf(childModel.id) !== -1) {\n this.removeRootId(childModel.id);\n }\n\n if (childModel.parent) {\n this.emit(\"nodeParentWillBeRemoved\", childModel);\n childModel.parent.removeChild(childModel);\n }\n childModel.emit(\"parentUpdated\", newParentModel);\n if (newParentModel) {\n newParentModel.addChild(childModel, index);\n this.emit(\"nodeParentUpdated\", childModel);\n }\n};\n\nComponentModel.prototype.importEditorNodeData = async function (\n nodeData,\n parentId,\n childIndex\n) {\n var nodeModel = NodeModel.createFromExportData(nodeData);\n await this.addNode(nodeModel);\n\n if (parentId) {\n this.setNodeParent(nodeModel, this.getNodeWithId(parentId), childIndex);\n }\n\n if (nodeData.children) {\n for (let i = 0; i < nodeData.children.length; i++) {\n const child = nodeData.children[i];\n await this.importEditorNodeData(child, nodeModel.id, i);\n }\n }\n};\n\nComponentModel.prototype.reset = async function () {\n while (this.roots.length) {\n await this.removeNodeWithId(this.roots[0]);\n }\n\n for (const id of this.nodes) {\n //note: with an incomplete library there will be no roots\n //so some of the nodes will have children, which will be recursively removed by\n //removeNodeWithId(), so some IDs from the Object.keys(this.nodes) that runs this loop\n //will already have been removed, so check if they exist before removing\n if (this.hasNodeWithId(id)) {\n await this.removeNodeWithId(id);\n }\n }\n\n if (this.nodes.length > 0) {\n throw new Error(\"Not all nodes were removed during a reset\");\n }\n\n if (this.connections.length > 0) {\n throw new Error(\"Not all connections were removed during a reset\");\n }\n};\n\nComponentModel.prototype.rename = function (newName) {\n var oldName = this.name;\n this.name = newName;\n this.emit(\"renamed\", { oldName: oldName, newName: newName });\n};\n\nComponentModel.prototype.setMetadata = function (key, data) {\n this.metadata[key] = data;\n};\n\nComponentModel.prototype.getMetadata = function (key) {\n if (!key) return this.metadata;\n return this.metadata[key];\n};\n\nComponentModel.createFromExportData = async function (componentData) {\n var componentModel = new ComponentModel(componentData.name);\n\n if (componentData.metadata) {\n for (const key in componentData.metadata) {\n componentModel.setMetadata(key, componentData.metadata[key]);\n }\n }\n\n componentData.ports &&\n componentData.ports.forEach(function (port) {\n if (port.plug === \"input\" || port.plug === \"input/output\") {\n componentModel.addInputPort(port);\n }\n if (port.plug === \"output\" || port.plug === \"input/output\") {\n componentModel.addOutputPort(port);\n }\n });\n\n if (componentData.nodes) {\n for (const node of componentData.nodes) {\n await componentModel.importEditorNodeData(node);\n }\n }\n\n componentData.connections &&\n componentData.connections.forEach((connection) =>\n componentModel.addConnection(connection)\n );\n componentData.roots &&\n componentData.roots.forEach((root) => componentModel.addRootId(root));\n\n return componentModel;\n};\n\nexport { ComponentModel };\n","import { ComponentModel } from \"./componentmodel\";\nimport { EventSender } from \"../eventsender\";\n\nfunction GraphModel() {\n EventSender.call(this);\n this.components = {};\n\n this.settings = {};\n\n this.metadata = {};\n}\n\nGraphModel.prototype = Object.create(EventSender.prototype);\n\nGraphModel.prototype.importComponentFromEditorData = async function (\n componentData\n) {\n var componentModel = await ComponentModel.createFromExportData(componentData);\n this.addComponent(componentModel);\n};\n\nGraphModel.prototype.getBundleContainingComponent = function (name) {\n return this.componentToBundleMap.get(name);\n};\n\nGraphModel.prototype.getBundlesContainingSheet = function (sheetName) {\n const bundles = new Set();\n for (const name of this.componentToBundleMap.keys()) {\n const isOnDefaultSheet = name.indexOf(\"/#\") !== 0;\n\n const isMatch =\n (isOnDefaultSheet && sheetName === \"Default\") ||\n (!isOnDefaultSheet && name.indexOf(\"/#\" + sheetName) === 0);\n\n if (isMatch) {\n bundles.add(this.componentToBundleMap.get(name));\n }\n }\n return Array.from(bundles);\n};\n\nGraphModel.prototype.getBundleDependencies = function (bundleName) {\n const result = new Set();\n\n const recurse = (name) => {\n const bundle = this.componentIndex[name];\n for (const dep of bundle.dependencies) {\n if (!result.has(dep)) {\n result.add(dep);\n recurse(dep);\n }\n }\n };\n\n recurse(bundleName);\n\n return Array.from(result);\n};\n\nGraphModel.prototype.importEditorData = async function (exportData) {\n this.componentIndex = exportData.componentIndex;\n this.routerIndex = exportData.routerIndex;\n\n this.componentToBundleMap = new Map();\n\n for (const bundleName in exportData.componentIndex) {\n const bundle = exportData.componentIndex[bundleName];\n\n for (const componentName of bundle.components) {\n this.componentToBundleMap.set(componentName, bundleName);\n }\n }\n\n this.variants = exportData.variants || [];\n\n exportData.settings && this.setSettings(exportData.settings);\n\n exportData.metadata && this.setAllMetaData(exportData.metadata);\n\n for (const component of exportData.components) {\n await this.importComponentFromEditorData(component);\n }\n\n this.setRootComponentName(exportData.rootComponent);\n};\n\nGraphModel.prototype.setRootComponentName = function (componentName) {\n this.rootComponent = componentName;\n this.emit(\"rootComponentNameUpdated\", componentName);\n};\n\nGraphModel.prototype.getNodesWithType = function (type) {\n var nodes = [];\n\n var componentNames = Object.keys(this.components);\n for (var i = 0; i < componentNames.length; i++) {\n var component = this.components[componentNames[i]];\n nodes = nodes.concat(component.getNodesWithType(type));\n }\n return nodes;\n};\n\nGraphModel.prototype.getComponentWithName = function (type) {\n return this.components[type];\n};\n\nGraphModel.prototype.hasComponentWithName = function (type) {\n return this.components[type] ? true : false;\n};\n\nGraphModel.prototype.getAllComponents = function () {\n return Object.keys(this.components).map((name) => {\n return this.components[name];\n });\n};\n\nGraphModel.prototype.getAllNodes = function () {\n var nodes = [];\n\n var componentNames = Object.keys(this.components);\n for (var i = 0; i < componentNames.length; i++) {\n var component = this.components[componentNames[i]];\n nodes = nodes.concat(component.getAllNodes());\n }\n\n return nodes;\n};\n\nGraphModel.prototype.addComponent = function (component) {\n this.components[component.name] = component;\n\n //nodes that are already added are missing component input/output ports if the component is registered after the nodes\n //now when we have the component info, add them to the node instance models\n this.getNodesWithType(component.name).forEach(\n this._addComponentPorts.bind(this)\n );\n\n //emit the \"nodeAdded\" event for every node already in the component\n component.getAllNodes().forEach(this._onNodeAdded.bind(this));\n\n //emit the same event for future nodes that will be added\n component.on(\"nodeAdded\", this._onNodeAdded.bind(this), this);\n\n //and for nodes that are removed\n component.on(\"nodeRemoved\", this._onNodeRemoved.bind(this), this);\n component.on(\"nodeWasRemoved\", this._onNodeWasRemoved.bind(this), this);\n\n this.emit(\"componentAdded\", component);\n};\n\nGraphModel.prototype.removeComponentWithName = async function (componentName) {\n if (this.components.hasOwnProperty(componentName) === false) {\n console.error(\n \"GraphModel: Component with name \" + componentName + \" not in graph\"\n );\n return;\n }\n\n var component = this.components[componentName];\n await component.reset();\n\n component.removeAllListeners();\n delete this.components[component.name];\n\n this.emit(\"componentRemoved\", component);\n};\n\nGraphModel.prototype.renameComponent = function (componentName, newName) {\n if (this.components.hasOwnProperty(componentName) === false) {\n console.error(\n \"GraphModel: Component with name \" + componentName + \" not in graph\"\n );\n return;\n }\n\n this.getNodesWithType(componentName).forEach(function (nodeModel) {\n nodeModel.type = newName;\n });\n\n var component = this.components[componentName];\n component.rename(newName);\n\n delete this.components[componentName];\n this.components[newName] = component;\n\n this.emit(\"componentRenamed\", component);\n};\n\nGraphModel.prototype._addComponentPorts = function (node) {\n //check if this node is a known component and add port to the model\n if (this.components.hasOwnProperty(node.type)) {\n //a component was created, add component ports to model\n var component = this.components[node.type];\n\n const inputPorts = component.getInputPorts();\n const outputPorts = component.getOutputPorts();\n\n Object.keys(inputPorts).forEach((portName) => {\n node.addInputPort(inputPorts[portName]);\n });\n\n Object.keys(outputPorts).forEach((portName) => {\n node.addOutputPort(outputPorts[portName]);\n });\n }\n};\n\nGraphModel.prototype._onNodeAdded = function (node) {\n this._addComponentPorts(node);\n\n this.emit(\"nodeAdded\", node);\n this.emit(\"nodeAdded.\" + node.type, node);\n};\n\nGraphModel.prototype._onNodeRemoved = function (node) {\n this.emit(\"nodeRemoved\", node);\n this.emit(\"nodeRemoved.\" + node.type, node);\n};\n\nGraphModel.prototype._onNodeWasRemoved = function (node) {\n this.emit(\"nodeWasRemoved\", node);\n this.emit(\"nodeWasRemoved.\" + node.type, node);\n};\n\nGraphModel.prototype.reset = async function () {\n for (const componentName of Object.keys(this.components)) {\n await this.removeComponentWithName(componentName);\n }\n this.setSettings({});\n};\n\nGraphModel.prototype.isEmpty = function () {\n return Object.keys(this.components).length === 0;\n};\n\nGraphModel.prototype.setSettings = function (settings) {\n this.settings = settings;\n this.emit(\"projectSettingsChanged\", settings);\n};\n\nGraphModel.prototype.getSettings = function () {\n return this.settings;\n};\n\nGraphModel.prototype.setAllMetaData = function (metadata) {\n for (const p in metadata) {\n this.setMetaData(p, metadata[p]);\n }\n};\n\nGraphModel.prototype.setMetaData = function (key, data) {\n //metadata changes can trigger lots of ports to evaluate (e.g. when a database model has been changed)\n //check if the data actually has been updated before since the editor can send the same data multiple times\n if (\n this.metadata[key] &&\n JSON.stringify(this.metadata[key]) === JSON.stringify(data)\n ) {\n return;\n }\n\n this.metadata[key] = data;\n this.emit(\"metadataChanged\", { key, data });\n this.emit(\"metadataChanged.\" + key, data);\n};\n\nGraphModel.prototype.getMetaData = function (key) {\n if (key) return this.metadata[key];\n return this.metadata;\n};\n\nGraphModel.prototype.getVariants = function () {\n return this.variants || [];\n};\n\nGraphModel.prototype.getVariant = function (typename, name) {\n return this.variants.find((v) => v.name === name && v.typename === typename);\n};\n\nGraphModel.prototype.updateVariant = function (variant) {\n const i = this.variants.findIndex(\n (v) => v.name === variant.name && v.typename === variant.typename\n );\n if (i !== -1) this.variants.splice(i, 1);\n this.variants.push(variant);\n\n this.emit(\"variantUpdated\", variant);\n};\n\nGraphModel.prototype.updateVariantParameter = function (\n variantName,\n variantTypeName,\n parameterName,\n parameterValue,\n state\n) {\n const variant = this.getVariant(variantTypeName, variantName);\n if (!variant) {\n console.log(\n \"updateVariantParameter: can't find variant\",\n variantName,\n variantTypeName\n );\n return;\n }\n\n if (!state) {\n if (parameterValue === undefined) {\n delete variant.parameters[parameterName];\n } else {\n variant.parameters[parameterName] = parameterValue;\n }\n } else {\n if (!variant.stateParameters.hasOwnProperty(state)) {\n variant.stateParameters[state] = {};\n }\n\n if (parameterValue === undefined) {\n delete variant.stateParameters[state][parameterName];\n } else {\n variant.stateParameters[state][parameterName] = parameterValue;\n }\n }\n\n this.emit(\"variantUpdated\", variant);\n};\n\nGraphModel.prototype.updateVariantDefaultStateTransition = function (\n variantName,\n variantTypeName,\n transition,\n state\n) {\n const variant = this.getVariant(variantTypeName, variantName);\n if (!variant) return;\n\n variant.defaultStateTransitions[state] = transition;\n this.emit(\"variantUpdated\", variant);\n};\n\nGraphModel.prototype.updateVariantStateTransition = function (args) {\n const { variantTypeName, variantName, state, parameterName, curve } = args;\n\n const variant = this.getVariant(variantTypeName, variantName);\n if (!variant) return;\n\n if (!variant.stateTransitions[state]) {\n variant.stateTransitions[state] = {};\n }\n\n variant.stateTransitions[state][parameterName] = curve;\n};\n\nGraphModel.prototype.deleteVariant = function (typename, name) {\n const i = this.variants.findIndex(\n (v) => v.name === name && v.typename === typename\n );\n if (i !== -1) this.variants.splice(i, 1);\n};\n\nexport { GraphModel };\n","export function createSetter(args) {\n var currentValue = false;\n\n return function (value) {\n value = value ? true : false;\n //value changed from false to true\n if (value && currentValue === false) {\n args.valueChangedToTrue.call(this);\n }\n currentValue = value;\n };\n}\n","import { Node } from \"./node\";\nimport { createSetter } from \"./edgetriggeredinput\";\n\nfunction createNodeConstructor(opts: {\n name: string;\n getInspectInfo?: () => any;\n nodeScopeDidInitialize?: () => void;\n prototypeExtensions?: PropertyDescriptorMap;\n}) {\n const cls = class extends Node {\n constructor(context: any, id: any) {\n super(context, id);\n }\n\n getInspectInfo() {\n return opts.getInspectInfo?.call(this) ?? undefined;\n }\n\n nodeScopeDidInitialize() {\n return opts.nodeScopeDidInitialize?.call(this) ?? undefined;\n }\n };\n\n // Apply prototypeExtensions if provided\n if (opts.prototypeExtensions) {\n Object.defineProperties(cls.prototype, opts.prototypeExtensions);\n }\n\n // Optionally assign a name (not necessary, but mirrors old behavior)\n Object.defineProperty(cls.prototype, \"name\", {\n value: opts.name,\n });\n\n return cls;\n}\n\n// @ts-expect-error\nfunction registerInput(object, metadata, name, input) {\n if (object.hasOwnProperty(name)) {\n throw new Error(\"Input property \" + name + \" already registered\");\n }\n\n if (!input.set && !input.valueChangedToTrue) {\n input.set = () => {};\n }\n\n if (input.set) {\n object[name] = {\n set: input.set,\n };\n\n //types to keep in the input on the node instances\n //color and textStyles are used for style updates\n //array is for supporting eval:ing strings\n const typesToSaveInInput = [\"color\", \"textStyle\", \"array\"];\n\n typesToSaveInInput.forEach((type) => {\n if (input.type && (input.type === type || input.type.name === type)) {\n object[name].type = type;\n }\n });\n }\n\n if (input.setUnitType) {\n object[name].setUnitType = input.setUnitType;\n }\n\n metadata.inputs[name] = {\n displayName: input.displayName,\n editorName: input.editorName,\n group: input.group,\n type: input.type,\n default: input.default,\n index: input.index,\n exportToEditor: input.hasOwnProperty(\"exportToEditor\")\n ? input.exportToEditor\n : true,\n inputPriority: input.inputPriority || 0,\n tooltip: input.tooltip,\n tab: input.tab,\n popout: input.popout,\n allowVisualStates: input.allowVisualStates,\n nodeDoubleClickAction: input.nodeDoubleClickAction,\n };\n\n if (input.valueChangedToTrue) {\n metadata.inputs[name].type = {\n name: \"signal\",\n allowConnectionsOnly: true,\n };\n }\n}\n\n// @ts-expect-error\nfunction registerInputs(object, metadata, inputs) {\n Object.keys(inputs).forEach(function (inputName) {\n registerInput(object, metadata, inputName, inputs[inputName]);\n });\n}\n\n// @ts-expect-error\nfunction registerNumberedInputs(node, numberedInputs) {\n for (const inputName of Object.keys(numberedInputs)) {\n registerNumberedInput(node, inputName, numberedInputs[inputName]);\n }\n}\n\n// @ts-expect-error\nfunction registerNumberedInput(node, name, input) {\n const oldRegisterInputIfNeeded = node.registerInputIfNeeded;\n\n // @ts-expect-error\n node.registerInputIfNeeded = function (inputName) {\n if (oldRegisterInputIfNeeded) {\n oldRegisterInputIfNeeded.call(node, inputName);\n }\n\n if (node.hasInput(inputName) || !inputName.startsWith(name)) {\n return;\n }\n\n const index = Number(inputName.slice(name.length + 1)); // inputName is \"nameOfInput xxx\" where xxx is the index\n\n node.registerInput(inputName, {\n type: input.type,\n set: input.createSetter.call(node, index),\n });\n };\n}\n\n// @ts-expect-error\nfunction registerOutputsMetadata(metadata, outputs) {\n Object.keys(outputs).forEach(function (name) {\n var output = outputs[name];\n\n metadata.outputs[name] = {\n displayName: output.displayName,\n editorName: output.editorName,\n group: output.group,\n type: output.type,\n index: output.index,\n exportToEditor: output.hasOwnProperty(\"exportToEditor\")\n ? output.exportToEditor\n : true,\n };\n });\n}\n\n// @ts-expect-error\nfunction initializeDefaultValues(defaultValues, inputsMetadata) {\n Object.keys(inputsMetadata).forEach((name) => {\n const defaultValue = inputsMetadata[name].default;\n if (defaultValue === undefined) return;\n\n if (inputsMetadata[name].type.defaultUnit) {\n defaultValues[name] = {\n unit: inputsMetadata[name].type.defaultUnit,\n value: defaultValue,\n };\n } else {\n defaultValues[name] = defaultValue;\n }\n });\n}\n\n// @ts-expect-error\nexport function defineNode(opts) {\n if (!opts.category) {\n throw new Error(\"Node must have a category\");\n }\n\n if (!opts.name) {\n throw new Error(\"Node must have a name\");\n }\n\n const metadata = {\n inputs: {},\n outputs: {},\n category: opts.category,\n dynamicports: opts.dynamicports,\n exportDynamicPorts: opts.exportDynamicPorts,\n useVariants: opts.useVariants,\n allowChildren: opts.allowChildren,\n allowChildrenWithCategory: opts.allowChildrenWithCategory,\n singleton: opts.singleton,\n connectionPanel: opts.connectionPanel,\n allowAsChild: opts.allowAsChild,\n visualStates: opts.visualStates,\n panels: opts.panels,\n color: opts.color,\n usePortAsLabel: opts.usePortAsLabel,\n portLabelTruncationMode: opts.portLabelTruncationMode,\n name: opts.name,\n displayNodeName: opts.displayNodeName || opts.displayName,\n deprecated: opts.deprecated,\n haveComponentPorts: opts.haveComponentPorts,\n version: opts.version,\n module: opts.module,\n docs: opts.docs,\n allowAsExportRoot: opts.allowAsExportRoot,\n nodeDoubleClickAction: opts.nodeDoubleClickAction,\n searchTags: opts.searchTags,\n };\n\n opts._internal = opts._internal || {};\n\n //prototypeExtensions - old API\n //methods - new API\n opts.prototypeExtensions = opts.methods || opts.prototypeExtensions || {};\n opts.inputs = opts.inputs || {};\n opts.outputs = opts.outputs || {};\n opts.initialize = opts.initialize || function () {};\n\n let inputs = {};\n\n registerInputs(inputs, metadata, opts.inputs);\n registerOutputsMetadata(metadata, opts.outputs);\n\n Object.keys(opts.prototypeExtensions).forEach(function (propName) {\n if (!opts.prototypeExtensions[propName].value) {\n opts.prototypeExtensions[propName] = {\n value: opts.prototypeExtensions[propName],\n };\n }\n });\n\n const NodeConstructor = createNodeConstructor({\n name: opts.name,\n getInspectInfo: opts.getInspectInfo,\n nodeScopeDidInitialize: opts.nodeScopeDidInitialize,\n prototypeExtensions: opts.prototypeExtensions,\n });\n\n // @ts-expect-error\n const nodeDefinition = function (context, id, nodeScope) {\n const node = new NodeConstructor(context, id);\n\n //create all inputs. Use the inputs object for setters that don't have state and can be shared\n node._inputs = Object.create(inputs);\n\n //all inputs that use the valueChangedToTrue have state and need to be instanced\n Object.keys(opts.inputs).forEach(function (name) {\n var input = opts.inputs[name];\n if (input.valueChangedToTrue) {\n // @ts-expect-error\n node._inputs[name] = {\n set: createSetter({\n valueChangedToTrue: input.valueChangedToTrue,\n }),\n };\n }\n });\n\n Object.keys(opts.outputs).forEach(function (name) {\n var output = opts.outputs[name];\n if (output.type === \"signal\") {\n node.registerOutput(name, {\n getter() {\n //signals are always emitted as a sequence of false, true, so this getter is never used\n return undefined;\n },\n });\n } else {\n node.registerOutput(name, output);\n }\n });\n\n opts.numberedInputs && registerNumberedInputs(node, opts.numberedInputs);\n\n // @ts-expect-error\n node.nodeScope = nodeScope;\n initializeDefaultValues(node._inputValues, metadata.inputs);\n\n opts.initialize.call(node);\n\n return node;\n };\n\n nodeDefinition.metadata = metadata;\n\n if (opts.numberedInputs)\n registerSetupFunctionForNumberedInputs(\n nodeDefinition,\n opts.name,\n opts.numberedInputs\n );\n\n return nodeDefinition;\n}\n\nfunction registerSetupFunctionForNumberedInputs(\n // @ts-expect-error\n nodeDefinition,\n // @ts-expect-error\n nodeType,\n // @ts-expect-error\n numberedInputs\n) {\n const inputNames = Object.keys(numberedInputs);\n\n if (!inputNames.length) return;\n\n nodeDefinition.setupNumberedInputDynamicPorts = function (\n // @ts-expect-error\n context,\n // @ts-expect-error\n graphModel\n ) {\n const editorConnection = context.editorConnection;\n\n if (!editorConnection || !editorConnection.isRunningLocally()) {\n return;\n }\n\n // @ts-expect-error\n function collectPorts(node, inputName, input) {\n const connections = node.component\n .getConnectionsTo(node.id)\n // @ts-expect-error\n .map((c) => c.targetPort);\n\n const allPortNames = Object.keys(node.parameters).concat(connections);\n const portNames = allPortNames.filter((p) =>\n p.startsWith(inputName + \" \")\n );\n\n //Figure out how many we need to create\n //It needs to be the highest index + 1\n //Only parameters with values are present, e.g. input 3 can be missing even if input 4 is defined\n const maxIndex = portNames.length\n ? 1 +\n Math.max(\n ...portNames.map((p) => Number(p.slice(inputName.length + 1)))\n )\n : 0;\n const numPorts = maxIndex + 1;\n\n const ports = [];\n\n for (let i = 0; i < numPorts; i++) {\n const port = {\n name: inputName + \" \" + i,\n displayName: (input.displayPrefix || inputName) + \" \" + i,\n type: input.type,\n plug: \"input\",\n group: input.group,\n };\n\n if (input.hasOwnProperty(\"index\")) {\n // @ts-expect-error\n port.index = input.index + i;\n }\n\n ports.push(port);\n }\n\n return ports;\n }\n\n // @ts-expect-error\n function updatePorts(node) {\n const ports = inputNames\n .map((inputName) =>\n collectPorts(node, inputName, numberedInputs[inputName])\n )\n // @ts-expect-error\n .flat();\n editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n // @ts-expect-error\n graphModel.on(\"nodeAdded.\" + nodeType, (node) => {\n updatePorts(node);\n node.on(\"parameterUpdated\", () => {\n updatePorts(node);\n });\n\n node.on(\"inputConnectionAdded\", () => {\n updatePorts(node);\n });\n\n node.on(\"inputConnectionRemoved\", () => {\n updatePorts(node);\n });\n });\n };\n}\n\n// @ts-expect-error\nexport function extend(obj1, obj2) {\n for (var p in obj2) {\n if (p === \"initialize\" && obj1.initialize) {\n var oldInit = obj1.initialize;\n obj1.initialize = function () {\n oldInit.call(this);\n obj2.initialize.call(this);\n };\n } else if (obj2[p] && obj2[p].constructor === Object) {\n obj1[p] = extend(obj1[p] || {}, obj2[p]);\n } else if (\n obj2[p] &&\n obj2[p].constructor === Array &&\n obj1[p] &&\n obj1[p].constructor == Array\n ) {\n obj1[p] = obj1[p].concat(obj2[p]);\n } else {\n obj1[p] = obj2[p];\n }\n }\n return obj1;\n}\n","function difference(array1, array2) {\n const valueSet = new Set(array2);\n return array1.filter((e) => !valueSet.has(e));\n}\n\nexport async function handleEvent(context, graphModel, event) {\n function applyPortDelta(nodeModel, newPorts) {\n var inputPorts = {};\n var outputPorts = {};\n\n newPorts.forEach(function (port) {\n //some ports are incorrectly named outputs instead of output, patch it here so\n //the rest of the code doesn't need to care\n if (port && port.plug === \"outputs\") {\n port.plug = \"output\";\n }\n\n if (port.plug === \"input\" || port.plug === \"input/output\") {\n inputPorts[port.name] = port;\n }\n if (port.plug === \"output\" || port.plug === \"input/output\") {\n outputPorts[port.name] = port;\n }\n });\n\n var existingInputs = Object.keys(nodeModel.getInputPorts());\n\n var inputPortsToRemove = difference(\n existingInputs,\n Object.keys(inputPorts)\n );\n var inputPortsToAdd = difference(Object.keys(inputPorts), existingInputs);\n\n // Update port types if it has changed\n nodeModel.updateInputPortTypes(inputPorts);\n\n // Remove and add input ports\n inputPortsToRemove.forEach(\n nodeModel.removeInputPortWithName.bind(nodeModel)\n );\n inputPortsToAdd.forEach(function (portName) {\n nodeModel.addInputPort(inputPorts[portName]);\n if (\n nodeModel.parameters &&\n nodeModel.parameters.hasOwnProperty(portName)\n ) {\n setInputValueOnNodeInstancesWithModel(\n context.rootComponent.nodeScope,\n nodeModel,\n portName,\n nodeModel.parameters[portName]\n );\n }\n });\n\n // Update port types if it has changed\n nodeModel.updateOutputPortTypes(outputPorts);\n\n // Remove and add output ports\n var existingOutputs = Object.keys(nodeModel.getOutputPorts());\n\n var outputPortsToRemove = difference(\n existingOutputs,\n Object.keys(outputPorts)\n );\n var outputPortsToAdd = difference(\n Object.keys(outputPorts),\n existingOutputs\n );\n\n outputPortsToRemove.forEach(\n nodeModel.removeOutputPortWithName.bind(nodeModel)\n );\n outputPortsToAdd.forEach(function (portName) {\n nodeModel.addOutputPort(outputPorts[portName]);\n });\n }\n\n function setInputValueOnNodeInstancesWithModel(\n nodeScope,\n nodeModel,\n port,\n value\n ) {\n var nodes = nodeScope.getNodesWithIdRecursive(nodeModel.id);\n nodes.forEach(function (node) {\n node.queueInput(port, value);\n });\n }\n\n var componentModel;\n if (event.componentName) {\n componentModel = graphModel.getComponentWithName(event.componentName);\n if (!componentModel) {\n //if we haven't received this component yet, just ignore the delta update\n return;\n }\n }\n\n //some ports are incorrectly named outputs instead of output, patch it here so\n //the rest of the code doesn't need to care\n if (event.port && event.port.plug === \"outputs\") {\n event.port.plug = \"output\";\n }\n\n var eventHandlers = {\n nodeAdded(event) {\n componentModel.importEditorNodeData(\n event.model,\n event.parentId,\n event.childIndex\n );\n },\n nodeRemoved: async function (event) {\n if (componentModel.hasNodeWithId(event.model.id)) {\n await componentModel.removeNodeWithId(event.model.id);\n }\n },\n connectionAdded(event) {\n componentModel.addConnection(event.model);\n },\n connectionRemoved(event) {\n componentModel.removeConnection(event.model);\n\n //revert to default value or parameter if this was the last connection to that port\n var targetNodeModel = componentModel.getNodeWithId(event.model.targetId);\n if (\n componentModel.getConnectionsToPort(\n targetNodeModel.id,\n event.model.targetId\n ).length === 0\n ) {\n var value = targetNodeModel.parameters[event.model.targetPort];\n if (value === undefined) {\n value = context.getDefaultValueForInput(\n targetNodeModel.type,\n event.model.targetPort\n );\n }\n\n setInputValueOnNodeInstancesWithModel(\n context.rootComponent.nodeScope,\n targetNodeModel,\n event.model.targetPort,\n value\n );\n }\n },\n parameterChanged(event) {\n const nodeModel = componentModel.getNodeWithId(event.nodeId);\n if (nodeModel === undefined) {\n console.log(\"parameterChanged: Unknown node id\", event);\n return;\n }\n\n //did we get a bunch of parameters at once?\n if (event.parameters) {\n //note: some props might be deleted, then they only exist in oldParameters\n const allParams = new Set(\n Object.keys(event.parameters).concat(Object.keys(event.oldParameters))\n );\n for (const param of allParams) {\n nodeModel.setParameter(param, event.parameters[param]);\n }\n }\n\n //did we get a single parameters?\n if (event.parameterName) {\n nodeModel.setParameter(\n event.parameterName,\n event.parameterValue,\n event.state\n );\n }\n },\n nodeAttached(event) {\n componentModel.setNodeParent(\n componentModel.getNodeWithId(event.nodeId),\n componentModel.getNodeWithId(event.parentId),\n event.childIndex\n );\n },\n nodeDetached(event) {\n componentModel.setNodeParent(\n componentModel.getNodeWithId(event.nodeId),\n null\n );\n componentModel.addRootId(event.nodeId);\n },\n componentAdded(event) {\n graphModel.importComponentFromEditorData(event.model);\n },\n componentRemoved: async function (event) {\n await graphModel.removeComponentWithName(event.componentName);\n },\n rootAdded(event) {\n componentModel.addRootId(event.nodeId);\n },\n portAdded(event) {\n var nodeModel = componentModel.getNodeWithId(event.nodeId);\n if (event.port.plug === \"input\" || event.port.plug === \"input/output\") {\n nodeModel.addInputPort(event.port);\n\n //if node already has an old value for this port, set that value on all instances of the node\n //example: expression a+b, a=1, b=2. User removes b and then adds it again, the value 2 should be restored since it's still in the model\n if (nodeModel.parameters.hasOwnProperty(event.port)) {\n setInputValueOnNodeInstancesWithModel(\n context.rootComponent.nodeScope,\n nodeModel,\n event.port,\n nodeModel.parameters[event.port]\n );\n }\n }\n if (event.port.plug === \"output\" || event.port.plug === \"input/output\") {\n nodeModel.addOutputPort(event.port);\n }\n },\n portRemoved(event) {\n var nodeModel = componentModel.getNodeWithId(event.nodeId);\n if (event.port.plug === \"input\" || event.port.plug === \"input/output\") {\n nodeModel.removeInputPortWithName(event.port.name);\n }\n if (event.port.plug === \"output\" || event.port.plug === \"input/output\") {\n nodeModel.removeOutputPortWithName(event.port.name);\n }\n },\n nodePortRenamed(event) {\n if (event.port.plug === \"input\" || event.port.plug === \"input/output\") {\n componentModel.renameInputPortOnNodeWithId(\n event.nodeId,\n event.oldName,\n event.port.name\n );\n }\n if (event.port.plug === \"output\" || event.port.plug === \"input/output\") {\n componentModel.renameOutputPortOnNodeWithId(\n event.nodeId,\n event.oldName,\n event.port.name\n );\n }\n var node = componentModel.getNodeWithId(event.nodeId);\n if (node.type === \"Component Inputs\") {\n componentModel.addInputPort(event.port);\n graphModel\n .getNodesWithType(componentModel.name)\n .forEach(function (componentInstance) {\n componentInstance.component.renameInputPortOnNodeWithId(\n componentInstance.id,\n event.oldName,\n event.port.name\n );\n });\n componentModel.removeInputPortWithName(event.oldName);\n } else if (node.type === \"Component Outputs\") {\n componentModel.addOutputPort(event.port);\n graphModel\n .getNodesWithType(componentModel.name)\n .forEach(function (componentInstance) {\n componentInstance.component.renameOutputPortOnNodeWithId(\n componentInstance.id,\n event.oldName,\n event.port.name\n );\n });\n componentModel.removeOutputPortWithName(event.oldName);\n }\n },\n componentPortsUpdated(event) {\n applyPortDelta(componentModel, event.ports);\n },\n instancePortsChanged(event) {\n if (!componentModel.hasNodeWithId(event.nodeId)) return;\n var nodeModel = componentModel.getNodeWithId(event.nodeId);\n applyPortDelta(nodeModel, event.ports);\n },\n componentRenamed(event) {\n graphModel.renameComponent(event.oldName, event.newName);\n },\n settingsChanged(event) {\n graphModel.setSettings(event.settings);\n },\n metadataChanged(event) {\n graphModel.setMetaData(event.key, event.data);\n },\n componentMetadataChanged(event) {\n const c = graphModel.getComponentWithName(event.componentName);\n if (!c) return;\n c.setMetadata(event.key, event.data);\n },\n variantParametersChanged(event) {\n if (event.variant) {\n //we got the whole variant\n graphModel.updateVariant(event.variant);\n } else {\n //we got a specific value to update\n graphModel.updateVariantParameter(\n event.variantName,\n event.variantTypeName,\n event.parameterName,\n event.parameterValue,\n event.state\n );\n\n //check if value has been deleted from the variant\n if (event.parameterValue === undefined) {\n //all active nodes with this variant will have to revert back to the default value, if they don't have local overrides\n const variant = graphModel.getVariant(\n event.variantTypeName,\n event.variantName\n );\n const nodes =\n context.rootComponent.nodeScope.getAllNodesWithVariantRecursive(\n variant\n );\n nodes.forEach((node) => {\n node.queueInput(\n event.parameterName,\n node.getParameter(event.parameterName)\n );\n });\n }\n }\n },\n variantDeleted(event) {\n graphModel.deleteVariant(event.variantTypeName, event.variantName);\n },\n variantChanged(event) {\n const nodeModel = componentModel.getNodeWithId(event.nodeId);\n const variant = graphModel.getVariant(nodeModel.type, event.variantName);\n\n nodeModel.setVariant(variant);\n },\n variantRenamed(event) {\n const variant = graphModel.getVariant(\n event.variantTypeName,\n event.oldVariantName\n );\n if (variant) {\n variant.name = variant.variantName;\n }\n },\n defaultStateTransitionChanged(event) {\n const nodeModel = componentModel.getNodeWithId(event.nodeId);\n nodeModel.setDefaultStateTransition(event.curve, event.state);\n },\n stateTransitionsChanged(event) {\n const nodeModel = componentModel.getNodeWithId(event.nodeId);\n if (event.parameterName) {\n nodeModel.setStateTransitionParamter(\n event.parameterName,\n event.curve,\n event.state\n );\n }\n },\n variantDefaultStateTransitionChanged(event) {\n graphModel.updateVariantDefaultStateTransition(\n event.variantName,\n event.variantTypeName,\n event.curve,\n event.state\n );\n },\n variantStateTransitionsChanged(event) {\n graphModel.updateVariantStateTransition(event);\n },\n routerIndexChanged(event) {\n graphModel.routerIndex = event.data;\n },\n };\n\n if (eventHandlers.hasOwnProperty(event.type)) {\n await eventHandlers[event.type](event);\n context.scheduleUpdate();\n } else {\n console.log(\"Unknown event\", event);\n }\n}\n","export async function asyncPool(poolLimit, values, iteratorFn) {\n const ret = [];\n const executing = [];\n for (const item of values) {\n const p = Promise.resolve().then(() => iteratorFn(item, values));\n ret.push(p);\n\n if (poolLimit <= values.length) {\n const e = p.then(() => executing.splice(executing.indexOf(e), 1));\n executing.push(e);\n if (executing.length >= poolLimit) {\n await Promise.race(executing);\n }\n }\n }\n\n return Promise.all(ret);\n}\n","export default {\n node: {\n name: \"Component Inputs\",\n shortDesc: \"This node is used to define the inputs of a component.\",\n docs: \"https://docs.noodl.net/nodes/component-utilities/component-inputs\",\n panels: [\n {\n name: \"PortEditor\",\n context: [\"select\", \"connectFrom\"],\n title: \"Inputs\",\n plug: \"output\",\n type: {\n name: \"*\",\n },\n canArrangeInGroups: true,\n },\n {\n name: \"PropertyEditor\",\n hidden: true,\n },\n ],\n getInspectInfo() {\n return {\n type: \"value\",\n value: this.nodeScope.componentOwner._internal.inputValues,\n };\n },\n color: \"component\",\n haveComponentPorts: true,\n category: \"Component Utilities\",\n methods: {\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n this.registerOutput(name, {\n getter() {\n return this.nodeScope.componentOwner._internal.inputValues[name];\n },\n });\n },\n _updateDependencies() {\n this.nodeScope.componentOwner.update();\n },\n },\n },\n};\n","export default {\n node: {\n category: \"Component Utilities\",\n name: \"Component Outputs\",\n shortDesc: \"This node is used to define the outputs of a component.\",\n docs: \"https://docs.noodl.net/nodes/component-utilities/component-outputs\",\n panels: [\n {\n name: \"PortEditor\",\n context: [\"select\", \"connectTo\"],\n title: \"Outputs\",\n plug: \"input\",\n type: {\n name: \"*\",\n },\n canArrangeInGroups: true,\n },\n {\n name: \"PropertyEditor\",\n hidden: true,\n },\n ],\n color: \"component\",\n haveComponentPorts: true,\n prototypeExtensions: {\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n this.registerInput(name, {\n set(value) {\n this.nodeScope.componentOwner.setOutputFromComponentOutput(\n name,\n value\n );\n },\n });\n },\n },\n },\n};\n","// ------------------------------------------------------------------------------\n// Model\n// ------------------------------------------------------------------------------\nfunction Model(id, data) {\n this.id = id;\n this.data = data;\n}\n\nconst models = (Model._models = {});\nconst proxies = {};\n\n// Get and set proxy\nconst _modelProxyHandler = {\n get(target, prop, receiver) {\n if (typeof target[prop] === \"function\") return target[prop].bind(target);\n else if (prop in target) return Reflect.get(target, prop, receiver);\n else return target.get(prop);\n },\n set(obj, prop, value) {\n if (prop === \"_class\") {\n obj._class = value;\n } else if (prop === \"id\") {\n console.log(\n `Noodl.Object warning: id is readonly (Id is ${obj.id}, trying to set to ${value})`\n );\n return true; //if a proxy doesn't return true an exception will be thrown\n } else {\n obj.set(prop, value);\n }\n return true;\n },\n ownKeys(target) {\n return Reflect.ownKeys(target.data);\n },\n getOwnPropertyDescriptor(target, prop) {\n return Object.getOwnPropertyDescriptor(target.data, prop);\n },\n};\n\n/**\n *\n * @param {*} id\n * @returns {Model}\n */\nModel.get = function (id) {\n if (id === undefined) id = Model.guid();\n if (!models[id]) {\n models[id] = new Model(id, {});\n proxies[id] = new Proxy(models[id], _modelProxyHandler);\n }\n return proxies[id];\n};\n\nModel.create = function (data) {\n var modelData = data ? data : {};\n var m = Model.get(modelData.id);\n for (var key in modelData) {\n if (key === \"id\") continue;\n m.set(key, modelData[key]);\n }\n\n return m;\n};\n\nModel.exists = function (id) {\n return models[id] !== undefined;\n};\n\nModel.instanceOf = function (collection) {\n return collection instanceof Model || collection.target instanceof Model;\n};\n\nfunction _randomString(size) {\n if (size === 0) {\n throw new Error(\"Zero-length randomString is useless.\");\n }\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" + \"abcdefghijklmnopqrstuvwxyz\" + \"0123456789\";\n let objectId = \"\";\n for (let i = 0; i < size; ++i) {\n objectId += chars[Math.floor((1 + Math.random()) * 0x10000) % chars.length];\n }\n return objectId;\n}\n\nModel.guid = function guid() {\n return _randomString(10);\n};\n\nModel.prototype.on = function (event, listener) {\n if (!this.listeners) this.listeners = {};\n if (!this.listeners[event]) this.listeners[event] = [];\n this.listeners[event].push(listener);\n};\n\nModel.prototype.off = function (event, listener) {\n if (!this.listeners) return;\n if (!this.listeners[event]) return;\n var idx = this.listeners[event].indexOf(listener);\n if (idx !== -1) this.listeners[event].splice(idx, 1);\n};\n\nModel.prototype.notify = function (event, args) {\n if (!this.listeners) return;\n if (!this.listeners[event]) return;\n\n var l = this.listeners[event].slice(); //clone in case listeners array is modified in the callbacks\n for (var i = 0; i < l.length; i++) {\n l[i](args);\n }\n};\n\nModel.prototype.setAll = function (obj) {\n for (var i in obj) {\n if (i === \"id\") continue; // Skip id\n if (this.data[i] !== obj[i]) {\n var old = this.data[i];\n this.data[i] = obj[i];\n this.notify(\"change\", { name: i, value: obj[i], old: old });\n }\n }\n};\n\nModel.prototype.fill = function (value = null) {\n for (const key in this.data) {\n if (key === \"id\") continue; // Skip id\n const temp = this.data[key];\n this.data[key] = value;\n this.notify(\"change\", { name: key, value: this.data[key], old: temp });\n }\n};\n\n/**\n * @param {string} name\n * @param {unknown} value\n * @param {{\n * resolve?: boolean;\n * forceChange?: boolean;\n * silent?: boolean;\n * }} args\n */\nModel.prototype.set = function (name, value, args) {\n if (args && args.resolve && name.indexOf(\".\") !== -1) {\n // We should resolve path references\n const path = name.split(\".\");\n let model = this;\n for (let i = 0; i < path.length - 1; i++) {\n const v = model.get(path[i]);\n if (Model.instanceOf(v)) model = v;\n else return; // Path resolve failed\n }\n model.set(path[path.length - 1], value);\n return;\n }\n\n const forceChange = args && args.forceChange;\n\n const oldValue = this.data[name];\n this.data[name] = value;\n\n if ((forceChange || oldValue !== value) && (!args || !args.silent)) {\n this.notify(\"change\", { name: name, value: value, old: oldValue });\n }\n};\n\n/**\n * @returns {string}\n */\nModel.prototype.getId = function () {\n return this.id;\n};\n\n/**\n * @param {string} name\n * @param {{\n * resolve?: boolean;\n * }} args\n * @returns {unknown}\n */\nModel.prototype.get = function (name, args) {\n if (args && args.resolve && name.indexOf(\".\") !== -1) {\n // We should resolve path references\n const path = name.split(\".\");\n let model = this;\n for (let i = 0; i < path.length - 1; i++) {\n const v = model.get(path[i]);\n if (Model.instanceOf(v)) model = v;\n else return; // Path resolve failed\n }\n return model.get(path[path.length - 1]);\n }\n\n return this.data[name];\n};\n\nModel.prototype.toJSON = function () {\n return Object.assign({}, this.data, { id: this.id });\n};\n\nModel.Scope = function () {\n this.models = {};\n this.proxies = {};\n};\n\nModel.Scope.prototype.get = function (id) {\n if (id === undefined) id = Model.guid();\n if (!this.models[id]) {\n this.models[id] = new Model(id, {});\n this.proxies[id] = new Proxy(this.models[id], _modelProxyHandler);\n }\n return this.proxies[id];\n};\n\nModel.Scope.prototype.create = function (data) {\n var modelData = data ? data : {};\n var m = this.get(modelData.id);\n for (var key in modelData) {\n if (key === \"id\") continue;\n m.set(key, modelData[key]);\n }\n\n return m;\n};\n\nModel.Scope.prototype.exists = function (id) {\n return this.models[id] !== undefined;\n};\n\nModel.Scope.prototype.instanceOf = function (collection) {\n return collection instanceof Model || collection.target instanceof Model;\n};\n\nModel.Scope.prototype.guid = function guid() {\n return _randomString(10);\n};\n\nModel.Scope.prototype.reset = function () {\n this.models = {};\n this.proxies = {};\n delete this._cloudStore;\n};\n\nexport { Model };\n","import { Node } from \"../../node\";\nimport { guid } from \"../../guid\";\nimport { Model } from \"../../model\";\n\nfunction sendSignalOnInput(itemNode, name) {\n itemNode.queueInput(name, true); // send signal\n itemNode.queueInput(name, false);\n}\n\nconst RunTasksDefinition = {\n name: \"RunTasks\",\n displayNodeName: \"Run Tasks\",\n docs: \"https://docs.noodl.net/nodes/data/run-tasks\",\n color: \"data\",\n category: \"Data\",\n initialize() {\n this._internal.queuedOperations = [];\n this._internal.state = \"idle\";\n this._internal.maxRunningTasks = 10;\n this._internal.activeTasks = new Map(); //id => ComponentInstanceNode\n },\n inputs: {\n items: {\n group: \"Data\",\n displayName: \"Items\",\n type: \"array\",\n set(value) {\n if (!value) return;\n if (value === this._internal.items) return;\n\n this._internal.items = value;\n },\n },\n stopOnFailure: {\n group: \"General\",\n displayName: \"Stop On Failure\",\n type: \"boolean\",\n default: false,\n set(value) {\n this._internal.stopOnFailure = value;\n },\n },\n maxRunningTasks: {\n group: \"General\",\n displayName: \"Max Running Tasks\",\n type: \"number\",\n default: 10,\n set(value) {\n this._internal.maxRunningTasks = value;\n },\n },\n taskTemplate: {\n type: \"component\",\n displayName: \"Template\",\n group: \"General\",\n set(value) {\n this._internal.template = value;\n },\n },\n run: {\n group: \"General\",\n displayName: \"Do\",\n type: \"signal\",\n valueChangedToTrue() {\n this.scheduleRun();\n },\n },\n abort: {\n group: \"General\",\n displayName: \"Abort\",\n type: \"signal\",\n valueChangedToTrue() {\n this.scheduleAbort();\n },\n },\n },\n outputs: {\n success: {\n type: \"signal\",\n group: \"Events\",\n displayName: \"Success\",\n },\n failure: {\n type: \"signal\",\n group: \"Events\",\n displayName: \"Failure\",\n },\n done: {\n type: \"signal\",\n group: \"Events\",\n displayName: \"Done\",\n },\n aborted: {\n type: \"signal\",\n group: \"Events\",\n displayName: \"Aborted\",\n },\n },\n methods: {\n scheduleRun() {\n var internal = this._internal;\n if (!internal.hasScheduledRun) {\n internal.hasScheduledRun = true;\n this.scheduleAfterInputsHaveUpdated(() => {\n this._queueOperation(() => {\n internal.hasScheduledRun = false;\n this.run();\n });\n });\n }\n },\n scheduleAbort() {\n var internal = this._internal;\n if (!internal.hasScheduledAbort) {\n internal.hasScheduledAbort = true;\n this.scheduleAfterInputsHaveUpdated(() => {\n this._queueOperation(() => {\n internal.hasScheduledAbort = false;\n this.abort();\n });\n });\n }\n },\n async createTaskComponent(item) {\n const internal = this._internal;\n\n const modelScope = this.nodeScope.modelScope || Model;\n const model = modelScope.create(item);\n\n var itemNode = await this.nodeScope.createNode(\n internal.template,\n guid(),\n {\n _forEachModel: model,\n _forEachNode: this,\n }\n );\n\n // This is needed to make sure any action connected to \"Do\"\n // is not run directly\n const _isInputConnected = itemNode.isInputConnected.bind(itemNode);\n itemNode.isInputConnected = (name) => {\n if (name === \"Do\") return true;\n return _isInputConnected(name);\n };\n\n // Set the Id as an input\n if (itemNode.hasInput(\"Id\")) {\n itemNode.setInputValue(\"Id\", model.getId());\n }\n if (itemNode.hasInput(\"id\")) {\n itemNode.setInputValue(\"id\", model.getId());\n }\n\n // Push all other values also as inputs\n // if they exist as component inputs\n for (var inputKey in itemNode._inputs) {\n if (model.data[inputKey] !== undefined)\n itemNode.setInputValue(inputKey, model.data[inputKey]);\n }\n\n // capture signals\n itemNode._internal.creatorCallbacks = {\n onOutputChanged: (name, value, oldValue) => {\n if (\n (oldValue === false || oldValue === undefined) &&\n value === true\n ) {\n this.itemOutputSignalTriggered(name, model, itemNode);\n }\n },\n };\n\n return itemNode;\n },\n async startTask(task) {\n const internal = this._internal;\n\n try {\n const taskComponent = await this.createTaskComponent(task);\n internal.runningTasks++;\n sendSignalOnInput(taskComponent, \"Do\");\n internal.activeTasks.set(taskComponent.id, taskComponent);\n } catch (e) {\n // Something went wrong starting the task\n console.log(e);\n }\n },\n async run() {\n const internal = this._internal;\n\n if (this.context.editorConnection) {\n if (internal.state !== \"idle\") {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"run-tasks\",\n {\n message: \"Cannot start when not in idle mode\",\n }\n );\n } else if (!internal.template) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"run-tasks\",\n {\n message: \"No task template specified.\",\n }\n );\n } else if (!internal.items) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"run-tasks\",\n {\n message: \"No items array provided.\",\n }\n );\n } else {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"run-tasks\"\n );\n }\n }\n\n if (internal.state !== \"idle\") {\n return;\n }\n\n if (!internal.template) {\n return;\n }\n\n if (!internal.items) {\n return;\n }\n\n internal.state = \"running\";\n internal.numTasks = internal.items.length;\n internal.failedTasks = 0;\n internal.completedTasks = 0;\n internal.queuedTasks = [].concat(internal.items);\n internal.runningTasks = 0;\n\n // No tasks\n if (internal.items.length === 0) {\n this.sendSignalOnOutput(\"success\");\n internal.state = \"idle\";\n }\n\n // Start tasks\n for (\n let i = 0;\n i < Math.min(internal.maxRunningTasks, internal.queuedTasks.length);\n i++\n ) {\n const task = internal.queuedTasks.shift();\n if (!task) break;\n\n this.startTask(task);\n }\n },\n abort() {\n const internal = this._internal;\n\n internal.state = \"aborted\";\n },\n itemOutputSignalTriggered(name, model, itemNode) {\n const internal = this._internal;\n\n if (internal.state === \"idle\") {\n // Signal while we are not running is ignored\n return;\n }\n\n const checkDone = () => {\n if (internal.state === \"aborted\") {\n this.sendSignalOnOutput(\"aborted\");\n internal.state = \"idle\";\n return;\n }\n\n if (internal.completedTasks === internal.numTasks) {\n if (internal.failedTasks === 0) this.sendSignalOnOutput(\"success\");\n else this.sendSignalOnOutput(\"failure\");\n this.sendSignalOnOutput(\"done\");\n internal.state = \"idle\";\n } else {\n if (internal.stopOnFailure) {\n // Only continue if there are no failed tasks, otherwise aborted\n if (internal.failedTasks === 0) {\n internal.runningTasks++;\n const task = internal.queuedTasks.shift();\n if (task) this.startTask(task);\n } else {\n this.sendSignalOnOutput(\"failure\");\n this.sendSignalOnOutput(\"aborted\");\n }\n } else {\n internal.runningTasks++;\n const task = internal.queuedTasks.shift();\n if (task) this.startTask(task);\n }\n }\n };\n\n if (name === \"Success\") {\n internal.completedTasks++;\n internal.runningTasks--;\n checkDone();\n } else if (name === \"Failure\") {\n internal.completedTasks++;\n internal.failedTasks++;\n internal.runningTasks--;\n checkDone();\n }\n\n internal.activeTasks.delete(itemNode.id);\n this.nodeScope.deleteNode(itemNode);\n },\n _queueOperation(op) {\n this._internal.queuedOperations.push(op);\n this._runQueueOperations();\n },\n async _runQueueOperations() {\n if (this.runningOperations) {\n return;\n }\n this.runningOperations = true;\n\n while (this._internal.queuedOperations.length) {\n const op = this._internal.queuedOperations.shift();\n await op();\n }\n\n this.runningOperations = false;\n },\n },\n _deleteAllTasks() {\n for (const taskComponent of this._internal.activeTasks) {\n this.nodeScope.deleteNode(taskComponent);\n }\n this._internal.activeTasks.clear();\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n this._deleteAllTasks();\n },\n};\n\nexport default {\n node: RunTasksDefinition,\n};\n","const defaultRequestScript =\n \"\" +\n \"//Add custom code to setup the request object before the request\\n\" +\n \"//is made.\\n\" +\n \"//\\n\" +\n \"//*Request.resource contains the resource path of the request.\\n\" +\n \"//*Request.method contains the method, GET, POST, PUT or DELETE.\\n\" +\n \"//*Request.headers is a map where you can add additional headers.\\n\" +\n \"//*Request.parameters is a map the parameters that will be appended\\n\" +\n \"// to the url.\\n\" +\n \"//*Request.content contains the content of the request as a javascript\\n\" +\n \"// object.\\n\" +\n \"//\\n\";\n\nconst defaultResponseScript =\n \"\" +\n \"// Add custom code to convert the response content to outputs\\n\" +\n \"//\\n\" +\n \"//*Response.status The status code of the response\\n\" +\n \"//*Response.content The content of the response as a javascript\\n\" +\n \"// object.\\n\" +\n \"//*Response.request The request object that resulted in the response.\\n\" +\n \"//\\n\" +\n \"//*Inputs and *Outputs contain the inputs and outputs of the node.\\n\";\n\nconst RestNode = {\n name: \"REST2\",\n displayNodeName: \"REST\",\n docs: \"https://docs.noodl.net/nodes/data/rest\",\n category: \"Data\",\n color: \"data\",\n searchTags: [\"http\", \"request\", \"fetch\"],\n initialize() {\n this._internal.inputValues = {};\n this._internal.outputValues = {};\n\n this._internal.outputValuesProxy = new Proxy(this._internal.outputValues, {\n set: (obj, prop, value) => {\n //only send outputs when they change.\n //Some Noodl projects rely on this behavior, so changing it breaks backwards compability\n if (value !== this._internal.outputValues[prop]) {\n this.registerOutputIfNeeded(\"out-\" + prop);\n\n this._internal.outputValues[prop] = value;\n this.flagOutputDirty(\"out-\" + prop);\n }\n return true;\n },\n });\n\n this._internal.self = {};\n },\n getInspectInfo() {\n return this._internal.inspectData\n ? { type: \"value\", value: this._internal.inspectData }\n : { type: \"text\", value: \"[Not executed yet]\" };\n },\n inputs: {\n resource: {\n type: \"string\",\n displayName: \"Resource\",\n group: \"Request\",\n default: \"/\",\n set(value) {\n this._internal.resource = value;\n },\n },\n method: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"GET\", value: \"GET\" },\n { label: \"POST\", value: \"POST\" },\n { label: \"PUT\", value: \"PUT\" },\n { label: \"PATCH\", value: \"PATCH\" },\n { label: \"DELETE\", value: \"DELETE\" },\n ],\n },\n displayName: \"Method\",\n group: \"Request\",\n default: \"GET\",\n set(value) {\n this._internal.method = value;\n },\n },\n /* scriptInputs: {\n type: { name: 'proplist', allowEditOnly: true },\n group: 'Inputs',\n set(value) {\n // this._internal.scriptInputs = value; \n }\n },\n scriptOutputs: {\n type: { name: 'proplist', allowEditOnly: true },\n group: 'Outputs',\n set(value) {\n // this._internal.scriptOutputs = value; \n }\n },*/\n requestScript: {\n type: {\n name: \"string\",\n allowEditOnly: true,\n codeeditor: \"javascript\",\n },\n displayName: \"Request\",\n default: defaultRequestScript,\n group: \"Scripts\",\n set(script) {\n try {\n this._internal.requestFunc = new Function(\n \"Inputs\",\n \"Outputs\",\n \"Request\",\n script\n );\n } catch (e) {\n console.log(e);\n }\n },\n },\n responseScript: {\n type: {\n name: \"string\",\n allowEditOnly: true,\n codeeditor: \"javascript\",\n },\n displayName: \"Response\",\n default: defaultResponseScript,\n group: \"Scripts\",\n set(script) {\n try {\n this._internal.responseFunc = new Function(\n \"Inputs\",\n \"Outputs\",\n \"Response\",\n script\n );\n } catch (e) {\n console.log(e);\n }\n },\n },\n fetch: {\n type: \"signal\",\n displayName: \"Fetch\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleFetch();\n },\n },\n cancel: {\n type: \"signal\",\n displayName: \"Cancel\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.cancelFetch();\n },\n },\n },\n outputs: {\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n success: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n canceled: {\n type: \"signal\",\n displayName: \"Canceled\",\n group: \"Events\",\n },\n },\n prototypeExtensions: {\n getScriptOutputValue(name) {\n return this._internal.outputValues[name];\n },\n setScriptInputValue(name, value) {\n return (this._internal.inputValues[name] = value);\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name.startsWith(\"out-\"))\n return this.registerOutput(name, {\n getter: this.getScriptOutputValue.bind(\n this,\n name.substring(\"out-\".length)\n ),\n });\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"in-\"))\n return this.registerInput(name, {\n set: this.setScriptInputValue.bind(\n this,\n name.substring(\"in-\".length)\n ),\n });\n\n /* if (name.startsWith('intype-')) return this.registerInput(name, {\n set: function() {} // Ignore input type\n })\n\n if (name.startsWith('outtype-')) return this.registerInput(name, {\n set: function() {} // Ignore output type\n })*/\n },\n scheduleFetch() {\n var internal = this._internal;\n if (!internal.hasScheduledFetch) {\n internal.hasScheduledFetch = true;\n this.scheduleAfterInputsHaveUpdated(this.doFetch.bind(this));\n }\n },\n doResponse(status, response, request) {\n // Process the response content with the response function\n if (this._internal.responseFunc) {\n this._internal.responseFunc.apply(this._internal.self, [\n this._internal.inputValues,\n this._internal.outputValuesProxy,\n { status: status, content: response, request: request },\n ]);\n }\n\n this._internal.inspectData = { status: status, content: response };\n\n // Flag status\n if (status >= 200 && status < 300) {\n this.sendSignalOnOutput(\"success\");\n } else {\n this.sendSignalOnOutput(\"failure\");\n }\n },\n doExternalFetch(request) {\n var url = request.resource;\n\n // Append parameters from request as query\n if (Object.keys(request.parameters).length > 0) {\n var parameters = Object.keys(request.parameters).map(function (p) {\n return p + \"=\" + encodeURIComponent(request.parameters[p]);\n });\n url += \"?\" + parameters.join(\"&\");\n }\n\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // Running in browser\n var _this = this;\n var xhr = new window.XMLHttpRequest();\n this._xhr = xhr;\n\n xhr.open(request.method, url, true);\n for (var header in request.headers) {\n xhr.setRequestHeader(header, request.headers[header]);\n }\n xhr.onreadystatechange = function () {\n // XMLHttpRequest.DONE = 4, but torped runtime doesn't support enum\n\n var sentResponse = false;\n\n if (\n this.readyState === 4 ||\n this.readyState === XMLHttpRequest.DONE\n ) {\n var statusCode = this.status;\n var responseType = this.getResponseHeader(\"content-type\");\n var rawResponse = this.response;\n delete this._xhr;\n\n if (responseType) {\n responseType = responseType.toLowerCase();\n const responseData =\n responseType.indexOf(\"json\") !== -1\n ? JSON.parse(rawResponse)\n : rawResponse;\n\n _this.doResponse(statusCode, responseData, request);\n sentResponse = true;\n }\n\n if (sentResponse === false) {\n _this.doResponse(statusCode, rawResponse, request);\n }\n }\n };\n xhr.onerror = function (e) {\n //console.log('REST: Failed to request', url);\n delete this._xhr;\n _this.sendSignalOnOutput(\"failure\");\n };\n\n xhr.onabort = function () {\n delete this._xhr;\n _this.sendSignalOnOutput(\"canceled\");\n };\n\n if (request.content) {\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n xhr.send(JSON.stringify(request.content));\n } else {\n xhr.send();\n }\n } else {\n // Running in cloud runtime\n const headers = Object.assign(\n {},\n request.headers,\n request.content\n ? {\n \"Content-Type\": \"application/json\",\n }\n : {}\n );\n fetch(url, {\n method: request.method,\n headers,\n body: request.content ? JSON.stringify(request.content) : undefined,\n })\n .then((response) => {\n const responseType = response.headers.get(\"content-type\");\n if (responseType) {\n if (responseType.indexOf(\"/json\") !== -1) {\n response.json().then((json) => {\n this.doResponse(response.status, json, request);\n });\n } else {\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"rest-run-waring-\",\n {\n message:\n \"REST only supports json content type in response.\",\n }\n );\n }\n }\n } else {\n response.text().then((raw) => {\n this.doResponse(response.status, raw, request);\n });\n }\n })\n .catch((e) => {\n console.log(\"REST: Failed to request\", url);\n console.log(e);\n this.sendSignalOnOutput(\"failure\");\n });\n }\n },\n doFetch() {\n this._internal.hasScheduledFetch = false;\n\n // Format resource path\n var resource = this._internal.resource;\n if (resource) {\n for (var key in this._internal.inputValues) {\n resource = resource.replace(\n \"{\" + key + \"}\",\n this._internal.inputValues[key]\n );\n }\n }\n\n // Setup the request\n var request = {\n resource: resource,\n headers: {},\n method:\n this._internal.method !== undefined ? this._internal.method : \"GET\",\n parameters: {},\n };\n\n // Process the request content with the preprocess function\n if (this._internal.requestFunc) {\n this._internal.requestFunc.apply(this._internal.self, [\n this._internal.inputValues,\n this._internal.outputValuesProxy,\n request,\n ]);\n }\n\n // Perform request\n this.doExternalFetch(request);\n },\n cancelFetch() {\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n this._xhr && this._xhr.abort();\n } else {\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"rest-run-waring-\",\n {\n message: \"REST doesn't support cancel in cloud functions.\",\n }\n );\n }\n }\n },\n },\n};\n\nfunction _parseScriptForErrors(script, args, name, node, context, ports) {\n // Clear run warnings if the script is edited\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"rest-run-waring-\" + name\n );\n\n if (script === undefined) {\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"rest-parse-waring-\" + name\n );\n return;\n }\n\n try {\n new Function(...args, script);\n\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"rest-parse-waring-\" + name\n );\n } catch (e) {\n context.editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"rest-parse-waring-\" + name,\n {\n message: \"<strong>\" + name + \"</strong>: \" + e.message,\n showGlobally: true,\n }\n );\n }\n\n // Extract inputs and outputs\n function _exists(port) {\n return ports.find((p) => p.name === port) !== undefined;\n }\n\n const scriptWithoutComments = script.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g, \"\"); // Remove comments\n const inputs = scriptWithoutComments.match(/Inputs\\.[A-Za-z0-9]+/g);\n if (inputs) {\n const unique = {};\n inputs.forEach((v) => {\n unique[v.substring(\"Inputs.\".length)] = true;\n });\n\n Object.keys(unique).forEach((p) => {\n if (_exists(\"in-\" + p)) return;\n\n ports.push({\n name: \"in-\" + p,\n displayName: p,\n plug: \"input\",\n type: \"*\",\n group: \"Inputs\",\n });\n });\n }\n\n const outputs = scriptWithoutComments.match(/Outputs\\.[A-Za-z0-9]+/g);\n if (outputs) {\n const unique = {};\n outputs.forEach((v) => {\n unique[v.substring(\"Outputs.\".length)] = true;\n });\n\n Object.keys(unique).forEach((p) => {\n if (_exists(\"out-\" + p)) return;\n\n ports.push({\n name: \"out-\" + p,\n displayName: p,\n plug: \"output\",\n type: \"*\",\n group: \"Outputs\",\n });\n });\n }\n}\n\nexport default {\n node: RestNode,\n setup(context, graphModel) {\n if (!context.editorConnection) {\n return;\n }\n\n function _managePortsForNode(node) {\n function _updatePorts() {\n if (!node.parameters) {\n return;\n }\n\n var ports = [];\n function exists(name) {\n for (var i = 0; i < ports.length; i++)\n if (ports[i].name === name && ports[i].plug === \"input\")\n return true;\n return false;\n }\n\n /* const _typeEnums = [{value:'string',label:'String'},\n {value:'boolean',label:'Boolean'},\n {value:'number',label:'Number'},\n {value:'color',label:'Color'},\n {value:'object',label:'Object'},\n {value:'array',label:'Array'}]*/\n\n // Inputs\n /* if (node.parameters['scriptInputs'] !== undefined && node.parameters['scriptInputs'].length > 0) {\n node.parameters['scriptInputs'].forEach((p) => {\n // Type for input\n ports.push({\n name: 'intype-' + p.label,\n displayName: 'Type',\n plug: 'input',\n type: { name: 'enum', enums: _typeEnums, allowEditOnly: true },\n default: 'string',\n parent: 'scriptInputs',\n parentItemId: p.id\n })\n \n // Default Value for input\n ports.push({\n name: 'in-' + p.label,\n displayName: p.label,\n plug: 'input',\n type: node.parameters['intype-' + p.label] || 'string',\n group: 'Input Values'\n })\n })\n }*/\n\n // Outputs\n /* if (node.parameters['scriptOutputs'] !== undefined && node.parameters['scriptOutputs'].length > 0) {\n node.parameters['scriptOutputs'].forEach((p) => {\n // Type for output\n ports.push({\n name: 'outtype-' + p.label,\n displayName: 'Type',\n plug: 'input',\n type: { name: 'enum', enums: _typeEnums, allowEditOnly: true },\n default: 'string',\n parent: 'scriptOutputs',\n parentItemId: p.id\n })\n \n // Value for output\n ports.push({\n name: 'out-' + p.label,\n displayName: p.label,\n plug: 'output',\n type: node.parameters['outtype-' + p.label] || '*',\n group: 'Outputs',\n })\n })\n }*/\n\n // Parse resource path inputs\n if (node.parameters.resource) {\n var inputs = node.parameters.resource.match(/\\{[A-Za-z0-9_]*\\}/g);\n for (var i in inputs) {\n var def = inputs[i];\n var name = def.replace(\"{\", \"\").replace(\"}\", \"\");\n if (exists(\"in-\" + name)) continue;\n\n ports.push({\n name: \"in-\" + name,\n displayName: name,\n type: \"string\",\n plug: \"input\",\n group: \"Inputs\",\n });\n }\n }\n\n if (node.parameters[\"requestScript\"]) {\n _parseScriptForErrors(\n node.parameters[\"requestScript\"],\n [\"Inputs\", \"Outputs\", \"Request\"],\n \"Request script\",\n node,\n context,\n ports\n );\n }\n\n if (node.parameters[\"responseScript\"]) {\n _parseScriptForErrors(\n node.parameters[\"responseScript\"],\n [\"Inputs\", \"Outputs\", \"Response\"],\n \"Response script\",\n node,\n context,\n ports\n );\n }\n\n context.editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n _updatePorts();\n node.on(\"parameterUpdated\", function () {\n _updatePorts();\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.REST2\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"REST2\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order of result values is determined by the\n * order they occur in the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = difference;\n","import difference from \"lodash.difference\";\n\n//import Model from \"./data/model\";\n\nconst ExpressionNode = {\n name: \"Expression\",\n docs: \"https://docs.noodl.net/nodes/math/expression\",\n usePortAsLabel: \"expression\",\n category: \"CustomCode\",\n color: \"javascript\",\n nodeDoubleClickAction: {\n focusPort: \"Expression\",\n },\n searchTags: [\"javascript\"],\n initialize() {\n var internal = this._internal;\n\n internal.scope = {};\n internal.hasScheduledEvaluation = false;\n\n internal.code = undefined;\n internal.cachedValue = 0;\n internal.currentExpression = \"\";\n internal.compiledFunction = undefined;\n internal.inputNames = [];\n internal.inputValues = [];\n },\n getInspectInfo() {\n return this._internal.cachedValue;\n },\n inputs: {\n expression: {\n group: \"General\",\n inputPriority: 1,\n type: {\n name: \"string\",\n allowEditOnly: true,\n codeeditor: \"javascript\",\n },\n displayName: \"Expression\",\n set(value) {\n var internal = this._internal;\n internal.currentExpression =\n functionPreamble + \"return (\" + value + \");\";\n internal.compiledFunction = undefined;\n\n var newInputs = parsePorts(value);\n\n var inputsToAdd = difference(newInputs, internal.inputNames);\n var inputsToRemove = difference(internal.inputNames, newInputs);\n\n var self = this;\n inputsToRemove.forEach(function (name) {\n self.deregisterInput(name);\n delete internal.scope[name];\n });\n\n inputsToAdd.forEach(function (name) {\n if (self.hasInput(name)) {\n return;\n }\n\n self.registerInput(name, {\n set(value) {\n internal.scope[name] = value;\n if (!this.isInputConnected(\"run\"))\n this._scheduleEvaluateExpression();\n },\n });\n\n internal.scope[name] = 0;\n self._inputValues[name] = 0;\n });\n\n /* if(value.indexOf('Vars') !== -1 || value.indexOf('Variables') !== -1) {\n // This expression is using variables, it should listen for changes\n this._internal.onVariablesChangedCallback = (args) => {\n this._scheduleEvaluateExpression()\n }\n\n Model.get('--ndl--global-variables').off('change',this._internal.onVariablesChangedCallback)\n Model.get('--ndl--global-variables').on('change',this._internal.onVariablesChangedCallback)\n }*/\n\n internal.inputNames = Object.keys(internal.scope);\n if (!this.isInputConnected(\"run\")) this._scheduleEvaluateExpression();\n },\n },\n run: {\n group: \"Actions\",\n displayName: \"Run\",\n type: \"signal\",\n valueChangedToTrue() {\n this._scheduleEvaluateExpression();\n },\n },\n },\n outputs: {\n result: {\n group: \"Result\",\n type: \"*\",\n displayName: \"Result\",\n getter() {\n if (!this._internal.currentExpression) {\n return 0;\n }\n\n return this._internal.cachedValue;\n },\n },\n isTrue: {\n group: \"Result\",\n type: \"boolean\",\n displayName: \"Is True\",\n getter() {\n if (!this._internal.currentExpression) {\n return false;\n }\n\n return !!this._internal.cachedValue;\n },\n },\n isFalse: {\n group: \"Result\",\n type: \"boolean\",\n displayName: \"Is False\",\n getter() {\n if (!this._internal.currentExpression) {\n return true;\n }\n\n return !this._internal.cachedValue;\n },\n },\n isTrueEv: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"On True\",\n },\n isFalseEv: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"On False\",\n },\n },\n prototypeExtensions: {\n registerInputIfNeeded: {\n value(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n this._internal.scope[name] = 0;\n this._inputValues[name] = 0;\n\n this.registerInput(name, {\n set(value) {\n this._internal.scope[name] = value;\n if (!this.isInputConnected(\"run\"))\n this._scheduleEvaluateExpression();\n },\n });\n },\n },\n _scheduleEvaluateExpression: {\n value() {\n var internal = this._internal;\n if (internal.hasScheduledEvaluation === false) {\n internal.hasScheduledEvaluation = true;\n this.flagDirty();\n this.scheduleAfterInputsHaveUpdated(function () {\n var lastValue = internal.cachedValue;\n internal.cachedValue = this._calculateExpression();\n if (lastValue !== internal.cachedValue) {\n this.flagOutputDirty(\"result\");\n this.flagOutputDirty(\"isTrue\");\n this.flagOutputDirty(\"isFalse\");\n }\n if (internal.cachedValue) this.sendSignalOnOutput(\"isTrueEv\");\n else this.sendSignalOnOutput(\"isFalseEv\");\n internal.hasScheduledEvaluation = false;\n });\n }\n },\n },\n _calculateExpression: {\n value() {\n var internal = this._internal;\n\n if (!internal.compiledFunction) {\n internal.compiledFunction = this._compileFunction();\n }\n for (var i = 0; i < internal.inputNames.length; ++i) {\n var inputValue = internal.scope[internal.inputNames[i]];\n internal.inputValues[i] = inputValue;\n }\n try {\n return internal.compiledFunction.apply(null, internal.inputValues);\n } catch (e) {\n console.error(\"Error in expression:\", e.message);\n }\n return 0;\n },\n },\n _compileFunction: {\n value() {\n var expression = this._internal.currentExpression;\n var args = Object.keys(this._internal.scope);\n\n var key = expression + args.join(\" \");\n\n if (compiledFunctionsCache.hasOwnProperty(key) === false) {\n args.push(expression);\n\n try {\n compiledFunctionsCache[key] = construct(Function, args);\n } catch (e) {\n console.error(\"Failed to compile JS function\", e.message);\n }\n }\n return compiledFunctionsCache[key];\n },\n },\n },\n};\n\nvar functionPreamble = [\n \"var min = Math.min,\" +\n \" max = Math.max,\" +\n \" cos = Math.cos,\" +\n \" sin = Math.sin,\" +\n \" tan = Math.tan,\" +\n \" sqrt = Math.sqrt,\" +\n \" pi = Math.PI,\" +\n \" round = Math.round,\" +\n \" floor = Math.floor,\" +\n \" ceil = Math.ceil,\" +\n \" abs = Math.abs,\" +\n \" random = Math.random;\",\n /* ' Vars = Variables = Noodl.Object.get(\"--ndl--global-variables\");' */\n].join(\"\");\n\n//Since apply cannot be used on constructors (i.e. new Something) we need this hax\n//see http://stackoverflow.com/questions/1606797/use-of-apply-with-new-operator-is-this-possible\nfunction construct(constructor, args) {\n function F() {\n return constructor.apply(this, args);\n }\n F.prototype = constructor.prototype;\n return new F();\n}\n\nvar compiledFunctionsCache = {};\n\nvar portsToIgnore = [\n \"min\",\n \"max\",\n \"cos\",\n \"sin\",\n \"tan\",\n \"sqrt\",\n \"pi\",\n \"round\",\n \"floor\",\n \"ceil\",\n \"abs\",\n \"random\",\n \"Math\",\n \"window\",\n \"document\",\n \"undefined\",\n \"Vars\",\n \"true\",\n \"false\",\n \"null\",\n \"Boolean\",\n];\n\nfunction parsePorts(expression) {\n var ports = [];\n\n function addPort(name) {\n if (portsToIgnore.indexOf(name) !== -1) return;\n if (\n ports.some(function (p) {\n return p === name;\n })\n )\n return;\n\n ports.push(name);\n }\n\n // First remove all strings\n expression = expression\n .replace(/\\\"([^\\\"]*)\\\"/g, \"\")\n .replace(/\\'([^\\']*)\\'/g, \"\");\n\n // Extract identifiers\n var identifiers = expression.matchAll(/[a-zA-Z\\_\\$][a-zA-Z0-9\\.\\_\\$]*/g);\n for (const _id of identifiers) {\n var name = _id[0];\n if (name.indexOf(\".\") !== -1) {\n name = name.split(\".\")[0]; // Take first symbol on \".\" sequence\n }\n\n addPort(name);\n }\n\n return ports;\n}\n\nfunction updatePorts(nodeId, expression, editorConnection) {\n var portNames = parsePorts(expression);\n\n var ports = portNames.map(function (name) {\n return {\n group: \"Parameters\",\n name: name,\n type: {\n name: \"*\",\n editAsType: \"string\",\n },\n plug: \"input\",\n };\n });\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nfunction evalCompileWarnings(editorConnection, node) {\n try {\n new Function(node.parameters.expression);\n editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"expression-compile-error\"\n );\n } catch (e) {\n editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"expression-compile-error\",\n {\n message: e.message,\n }\n );\n }\n}\n\nexport default {\n node: ExpressionNode,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.Expression\", function (node) {\n if (node.parameters.expression) {\n updatePorts(\n node.id,\n node.parameters.expression,\n context.editorConnection\n );\n evalCompileWarnings(context.editorConnection, node);\n }\n node.on(\"parameterUpdated\", function (event) {\n if (event.name === \"expression\") {\n updatePorts(\n node.id,\n node.parameters.expression,\n context.editorConnection\n );\n evalCompileWarnings(context.editorConnection, node);\n }\n });\n });\n },\n};\n","//this just assumes the base url is '/' always\nexport function getAbsoluteUrl(_url) {\n //convert to string in case the _url is a Cloud File (which is an object with a custom toString())\n const url = String(_url);\n\n //only add a the base url if this is a local URL (e.g. not a https url or base64 string)\n if (\n !url ||\n url[0] === \"/\" ||\n url.includes(\"://\") ||\n url.startsWith(\"data:\")\n ) {\n return url;\n }\n\n return (Noodl.baseUrl || \"/\") + url;\n}\n\n/**\n * Log an error thrown by the JavaScript nodes.\n *\n * @param {any} error\n */\nexport function logJavaScriptNodeError(error) {\n if (typeof error === \"string\") {\n console.log(\"Error in JS node run code.\", error);\n } else {\n console.log(\n \"Error in JS node run code.\",\n Object.getPrototypeOf(error).constructor.name + \": \" + error.message,\n error.stack\n );\n }\n}\n","import { Model } from \"./model\";\nimport { getAbsoluteUrl } from \"./utils\";\n\nvar userFunctionsCache = {};\n\nfunction JavascriptNodeParser(code, options) {\n this.inputs = {};\n this.outputs = {};\n this.error = undefined;\n this.code = code;\n\n const node = options ? options.node : undefined;\n this._initializeAPIs();\n\n var userCode = userFunctionsCache[code];\n if (!userCode) {\n try {\n userCode = new Function(\n [\"define\", \"script\", \"Node\", \"Component\"],\n JavascriptNodeParser.getCodePrefix() + code\n );\n userFunctionsCache[code] = userCode;\n } catch (e) {\n this.error = e.message;\n console.error(e);\n }\n }\n if (userCode) {\n try {\n userCode(\n this.define.bind(this),\n this.script.bind(this),\n this.apis.Node,\n node ? JavascriptNodeParser.getComponentScopeForNode(node) : {}\n ); //noodlJavascriptAPI);\n\n this._afterSourced();\n } catch (e) {\n this.error = e.message;\n console.error(e);\n }\n }\n}\n\n// First generation API\nJavascriptNodeParser.prototype.define = function (userObject) {\n this.inputs = userObject.inputs || {};\n this.outputs = userObject.outputs || {};\n this.setup = userObject.setup;\n this.change = userObject.run || userObject.change;\n this.destroy = userObject.destroy;\n\n this.definedObject = userObject;\n};\n\n// Second generation API\nfunction _scriptExtend(_this) {\n var _extended = {\n inputs: _this.inputs || {},\n outputs: _this.outputs || {},\n\n setup(inputs, outputs) {\n this.inputs = inputs;\n this.outputs = outputs;\n\n this.setOutputs = function (states) {\n for (var key in states) {\n this.outputs[key] = states[key];\n this.flagOutputDirty(key);\n }\n };\n\n if (_this.methods) {\n for (var key in _this.methods) {\n this[key] = _this.methods[key];\n }\n }\n\n _this.setup && _this.setup.apply(this);\n },\n\n destroy(inputs, outputs) {\n this.inputs = inputs;\n this.outputs = outputs;\n\n _this.destroy && _this.destroy.apply(this);\n },\n\n change(inputs, outputs) {\n this.inputs = inputs;\n this.outputs = outputs;\n\n // Detect property changed\n var old = this._oldInputs || {};\n\n if (_this.changed) {\n for (var key in inputs) {\n if (inputs[key] !== old[key]) {\n var changedFunction = _this.changed[key];\n if (typeof changedFunction === \"function\")\n changedFunction.apply(this, [inputs[key], old[key]]);\n }\n }\n }\n\n this._oldInputs = Object.assign({}, inputs);\n },\n };\n\n if (_this.signals) {\n for (var key in _this.signals) {\n _extended[key] = _this.signals[key];\n\n _extended.inputs[key] = \"signal\";\n }\n }\n\n return _extended;\n}\n\nJavascriptNodeParser.prototype.script = function (userObject) {\n var _userObjectExtended = _scriptExtend(userObject);\n this.inputs = _userObjectExtended.inputs || {};\n this.outputs = _userObjectExtended.outputs || {};\n this.setup = _userObjectExtended.setup;\n this.change = _userObjectExtended.run || _userObjectExtended.change;\n this.destroy = _userObjectExtended.destroy;\n\n this.definedObject = _userObjectExtended;\n};\n\n// Third generation API\n\n// Node.Setters.Hej = function(value) {...}\n// Node.OnInputsChanged = function() {...}\n// Node.Signals.Hej = function(value) {...}\n// Node.OnInit = function() {...}\n// Node.OnDestroy = function() {...}\n// Node.Inputs.A\n// Node.Outputs.A = 10;\n// Node.Outputs.Done()\n// Node.setOutputs({...})\n// Component.Object, Component.ParentObject\nJavascriptNodeParser.prototype._initializeAPIs = function () {\n this.apis = {};\n\n this.apis.Node = {\n Inputs: {},\n Outputs: {},\n Signals: {},\n Setters: {},\n };\n};\n\nJavascriptNodeParser.prototype._afterSourced = function () {\n if (this.definedObject !== undefined) return; // a legacy API have been used\n\n var _Node = this.apis.Node;\n\n // Merge inputs and outputs from node extension\n this.inputs = Object.assign({}, _Node.Inputs || {});\n this.outputs = Object.assign({}, _Node.Outputs || {});\n\n this.setup = function (inputs, outputs) {\n const _this = this;\n\n _Node.setOutputs = function (_outputs) {\n for (var key in _outputs) {\n outputs[key] = _outputs[key];\n _this.flagOutputDirty(key);\n }\n };\n\n _Node.OnInit && _Node.OnInit.apply(this);\n };\n\n this.destroy = _Node.OnDestroy || this.destory;\n this.change = (inputs, outputs, changedInputs) => {\n for (var key in changedInputs) {\n if (typeof _Node.Setters[key] === \"function\") {\n _Node.Setters[key](inputs[key]);\n }\n }\n\n if (typeof _Node.OnInputsChanged === \"function\") {\n _Node.OnInputsChanged();\n }\n };\n\n this.definedObject = {\n inputs: this.inputs,\n outputs: this.outputs,\n setup: this.setup,\n destroy: this.destroy,\n change: this.change,\n };\n\n // Set all signals as signal inputs\n if (_Node.Signals !== undefined) {\n for (var key in _Node.Signals) {\n if (typeof _Node.Signals[key] === \"function\") {\n this.inputs[key] = \"signal\";\n\n this.definedObject[key] = _Node.Signals[key];\n }\n }\n }\n};\n\nJavascriptNodeParser.createFromCode = function (code, options) {\n return new JavascriptNodeParser(code, options);\n};\n\nJavascriptNodeParser.createFromURL = function (url, callback, options) {\n url = getAbsoluteUrl(url);\n\n var xhr = new window.XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.onreadystatechange = function () {\n // XMLHttpRequest.DONE = 4, but torped runtime doesn't support enum\n if (this.readyState === 4 || this.readyState === XMLHttpRequest.DONE) {\n callback(new JavascriptNodeParser(this.response));\n }\n };\n xhr.onerror = function () {\n console.log(\"Failed to request\", url);\n };\n xhr.send();\n};\n\nJavascriptNodeParser.parseAndAddPortsFromScript = function (\n script,\n ports,\n options\n) {\n // Extract inputs and outputs\n function _exists(port) {\n if (typeof port === \"string\")\n return ports.find((p) => p.name === port) !== undefined;\n else\n return (\n ports.find((p) => p.name === port.name && p.plug === port.plug) !==\n undefined\n );\n }\n\n function _addPortsFromMatch(match, options) {\n if (match === undefined || match === null) return;\n\n const unique = {};\n for (const _s of match) {\n let name = _s[1];\n if (name === undefined) continue;\n\n unique[name] = true;\n }\n\n Object.keys(unique).forEach((p) => {\n if (\n _exists({\n name: options.prefix + p,\n plug: options.plug,\n })\n )\n return;\n\n ports.push({\n name: options.prefix + p,\n displayName: p,\n plug: options.plug,\n type: options.type,\n group: options.group,\n });\n });\n }\n\n // const scriptWithoutComments = script.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g,''); // Remove comments\n\n // Regular Inputs. notation\n if (!options.skipInputs) {\n _addPortsFromMatch(script.matchAll(/Inputs\\.([A-Za-z0-9_]+)/g), {\n type: options.inputType || \"*\",\n plug: \"input\",\n group: options.inputGroup || \"Inputs\",\n prefix: options.inputPrefix || \"\",\n });\n\n // Inputs with Inputs[\"A\"] notation\n _addPortsFromMatch(\n script.matchAll(/Inputs\\s*\\[\\s*(?:'|\")(.*)(?:'|\")\\s*\\]/g),\n {\n type: options.inputType || \"*\",\n plug: \"inputs\",\n group: options.inputGroup || \"Inputs\",\n prefix: options.inputPrefix || \"\",\n }\n );\n }\n\n if (!options.skipOutputs) {\n if (!options.skipOutputSignals) {\n // Output signals, Output.Done()\n _addPortsFromMatch(\n script.matchAll(/Outputs\\.([A-Za-z0-9]+)\\s*\\(\\s*\\)/g),\n {\n type: \"signal\",\n plug: \"output\",\n group: \"Outputs\",\n prefix: options.outputPrefix || \"\",\n }\n );\n\n // Output signals, Outputs[\"Done\"]()\n _addPortsFromMatch(\n script.matchAll(/Outputs\\s*\\[\\s*(?:'|\")(.*)(?:'|\")\\s*\\]\\(\\s*\\)/g),\n {\n type: \"signal\",\n plug: \"output\",\n group: \"Outputs\",\n prefix: options.outputPrefix || \"\",\n }\n );\n }\n\n if (!options.skipRegularOutputs) {\n // Regular output Outputs. notation\n _addPortsFromMatch(script.matchAll(/Outputs\\.([A-Za-z0-9_]+)/g), {\n type: \"*\",\n plug: \"output\",\n group: \"Outputs\",\n prefix: options.outputPrefix || \"\",\n });\n\n // Outputs with Outputs[\"A\"] notation\n _addPortsFromMatch(script.matchAll(/Outputs\\s*\\[\\s*\\\"([^\\\"]*)\\\"\\s*\\]/g), {\n type: \"*\",\n plug: \"output\",\n group: \"Outputs\",\n prefix: options.outputPrefix || \"\",\n });\n }\n }\n};\n\nJavascriptNodeParser.prototype.getPorts = function () {\n var ports = [];\n\n var self = this;\n\n Object.keys(this.inputs).forEach(function (name) {\n var inputPort = self.inputs[name];\n\n var port = {\n name: name,\n plug: \"input\",\n };\n if (typeof inputPort === \"string\") {\n port.type = {\n name: inputPort,\n };\n port.group = \"Inputs\";\n } else {\n for (var p in inputPort) {\n port[p] = inputPort[p];\n }\n }\n\n ports.push(port);\n });\n\n Object.keys(this.outputs).forEach(function (name) {\n ports.push({\n name: name,\n type: {\n name: self.outputs[name],\n },\n plug: \"output\",\n group: \"Outputs\",\n });\n });\n\n JavascriptNodeParser.parseAndAddPortsFromScript(this.code, ports, {});\n\n return ports;\n};\n\nconst _componentScopes = {};\n\nfunction _findParentComponentStateModelId(node) {\n function getParentComponent(component) {\n let parent;\n if (component.getRoots().length > 0) {\n //visual\n const root = component.getRoots()[0];\n\n if (root.getVisualParentNode) {\n //regular visual node\n if (root.getVisualParentNode()) {\n parent = root.getVisualParentNode().nodeScope.componentOwner;\n }\n } else if (root.parentNodeScope) {\n //component instance node\n parent = component.parentNodeScope.componentOwner;\n }\n } else if (component.parentNodeScope) {\n parent = component.parentNodeScope.componentOwner;\n }\n\n //check that a parent exists and that the component is different\n if (\n parent &&\n parent.nodeScope &&\n parent.nodeScope.componentOwner !== component\n ) {\n //check if parent has a Component State node\n if (\n parent.nodeScope.getNodesWithType(\"net.noodl.ComponentObject\").length >\n 0\n ) {\n return parent;\n }\n\n if (parent.nodeScope.getNodesWithType(\"Component State\").length > 0) {\n return parent;\n }\n\n //if not, continue searching up the tree\n return getParentComponent(parent);\n }\n }\n\n const parent = getParentComponent(node.nodeScope.componentOwner);\n if (!parent) return;\n\n //this._internal.parentComponentName = parent.name;\n\n return \"componentState\" + parent.getInstanceId();\n}\n\nfunction _findForEachModel(node) {\n var component = node.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n return component !== undefined ? component._forEachModel : undefined;\n}\n\nJavascriptNodeParser.getComponentScopeForNode = function (node) {\n const componentId = node.nodeScope.componentOwner.getInstanceId();\n\n if (_componentScopes[componentId] === undefined) {\n _componentScopes[componentId] = {};\n\n const componentObject = (node.nodeScope.modelScope || Model).get(\n \"componentState\" + componentId\n );\n\n _componentScopes[componentId].Object = componentObject;\n }\n\n // This should be done each time, since the component can be moved\n const parentComponentObjectId = _findParentComponentStateModelId(node);\n const parentComponentObject =\n parentComponentObjectId !== undefined\n ? (node.nodeScope.modelScope || Model).get(parentComponentObjectId)\n : undefined;\n\n _componentScopes[componentId].ParentObject = parentComponentObject;\n\n // Set the for each model\n _componentScopes[componentId].RepeaterObject = _findForEachModel(node);\n\n return _componentScopes[componentId];\n};\n\nJavascriptNodeParser.getCodePrefix = function () {\n // API\n return \"const Script = (typeof Node !== 'undefined')?Node:undefined;\\n\";\n};\n\nJavascriptNodeParser.createNoodlAPI = function () {\n // If we are running in browser mode and there is a global Noodl API object, use it. If not\n // create a new one for this scope.\n return typeof window !== \"undefined\" && window.Noodl !== undefined\n ? window.Noodl\n : {};\n};\n\nexport { JavascriptNodeParser };\n","import { JavascriptNodeParser } from \"../../javascriptnodeparser\";\nimport { logJavaScriptNodeError } from \"../../utils\";\n\nconst SimpleJavascriptNode = {\n name: \"JavaScriptFunction\",\n displayNodeName: \"Function\",\n docs: \"https://docs.noodl.net/nodes/javascript/function\",\n category: \"CustomCode\",\n color: \"javascript\",\n nodeDoubleClickAction: {\n focusPort: \"Script\",\n },\n searchTags: [\"javascript\"],\n exportDynamicPorts: true,\n initialize() {\n this._internal.inputValues = {};\n this._internal.outputValues = {};\n\n this._internal.outputValuesProxy = new Proxy(this._internal.outputValues, {\n set: (obj, prop, value) => {\n //a function node can continue running after it has been deleted. E.g. with timeouts or event listeners that hasn't been removed.\n //if the node is deleted, just do nothing\n if (this._deleted) {\n return;\n }\n\n //only send outputs when they change.\n //Some Noodl projects rely on this behavior, so changing it breaks backwards compability\n if (value !== this._internal.outputValues[prop]) {\n this.registerOutputIfNeeded(\"out-\" + prop);\n\n this._internal.outputValues[prop] = value;\n this.flagOutputDirty(\"out-\" + prop);\n }\n return true;\n },\n });\n\n this._internal._this = {};\n },\n getInspectInfo() {\n return [\n {\n type: \"value\",\n value: {\n inputs: this._internal.inputValues,\n outputs: this._internal.outputValues,\n },\n },\n ];\n },\n inputs: {\n scriptInputs: {\n type: {\n name: \"proplist\",\n allowEditOnly: true,\n },\n group: \"Script Inputs\",\n set(value) {\n // ignore\n },\n },\n scriptOutputs: {\n type: {\n name: \"proplist\",\n allowEditOnly: true,\n },\n group: \"Script Outputs\",\n set(value) {\n // ignore\n },\n },\n functionScript: {\n displayName: \"Script\",\n plug: \"input\",\n type: {\n name: \"string\",\n allowEditOnly: true,\n codeeditor: \"javascript\",\n },\n group: \"General\",\n set(script) {\n if (script === undefined) {\n this._internal.func = undefined;\n return;\n }\n\n this._internal.func = this.parseScript(script);\n\n if (!this.isInputConnected(\"run\")) this.scheduleRun();\n },\n },\n run: {\n type: \"signal\",\n displayName: \"Run\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleRun();\n },\n },\n },\n outputs: {},\n methods: {\n scheduleRun() {\n if (this.runScheduled) return;\n this.runScheduled = true;\n\n this.scheduleAfterInputsHaveUpdated(() => {\n this.runScheduled = false;\n\n if (!this._deleted) {\n this.runScript();\n }\n });\n },\n runScript: async function () {\n const func = this._internal.func;\n\n if (func === undefined) return;\n\n const inputs = this._internal.inputValues;\n const outputs = this._internal.outputValuesProxy;\n\n // Prepare send signal functions\n for (const key in this.model.outputPorts) {\n if (this._isSignalType(key)) {\n const _sendSignal = () => {\n if (this.hasOutput(key)) this.sendSignalOnOutput(key);\n };\n this._internal.outputValues[key.substring(\"out-\".length)] =\n _sendSignal;\n this._internal.outputValues[key.substring(\"out-\".length)].send =\n _sendSignal;\n }\n }\n\n try {\n await func.apply(this._internal._this, [\n inputs,\n outputs,\n JavascriptNodeParser.createNoodlAPI(this.nodeScope.modelScope),\n JavascriptNodeParser.getComponentScopeForNode(this),\n ]);\n } catch (e) {\n logJavaScriptNodeError(e);\n\n if (\n this.context.editorConnection &&\n this.context.isWarningTypeEnabled(\"javascriptExecution\")\n ) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"js-function-run-waring\",\n {\n showGlobally: true,\n message: e.message,\n stack: e.stack,\n }\n );\n }\n }\n },\n setScriptInputValue(name, value) {\n this._internal.inputValues[name] = value;\n\n if (!this.isInputConnected(\"run\")) this.scheduleRun();\n },\n getScriptOutputValue(name) {\n if (this._isSignalType(name)) {\n return undefined;\n }\n return this._internal.outputValues[name];\n },\n setScriptInputType(name, type) {\n this._internal.inputTypes[name] = type;\n },\n setScriptOutputType(name, type) {\n this._internal.outputTypes[name] = type;\n },\n parseScript(script) {\n var func;\n try {\n const AsyncFunction = Object.getPrototypeOf(\n async function () {}\n ).constructor;\n func = new AsyncFunction(\n \"Inputs\",\n \"Outputs\",\n \"Noodl\",\n \"Component\",\n JavascriptNodeParser.getCodePrefix() + script\n );\n } catch (e) {\n console.log(\"Error while parsing action script: \" + e);\n }\n\n return func;\n },\n _isSignalType(name) {\n // This will catch signals in script that may not have been delivered by the editor yet\n return (\n this.model.outputPorts[name] &&\n this.model.outputPorts[name].type === \"signal\"\n );\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"in-\")) {\n const n = name.substring(\"in-\".length);\n\n const input = {\n set: this.setScriptInputValue.bind(this, n),\n };\n\n //make sure we register the type as well, so Noodl resolves types like color styles to an actual color\n if (this.model && this.model.parameters[\"intype-\" + n]) {\n input.type = this.model.parameters[\"intype-\" + n];\n }\n\n this.registerInput(name, input);\n }\n\n if (name.startsWith(\"intype-\")) {\n const n = name.substring(\"intype-\".length);\n\n this.registerInput(name, {\n set(value) {\n //make sure we register the type as well, so Noodl resolves types like color styles to an actual color\n if (this.hasInput(\"in\" + n)) {\n this.getInput(\"in\" + n).type = value;\n }\n },\n });\n }\n\n if (name.startsWith(\"outtype-\")) {\n this.registerInput(name, {\n set() {}, // Ignore\n });\n }\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name.startsWith(\"out-\"))\n return this.registerOutput(name, {\n getter: this.getScriptOutputValue.bind(\n this,\n name.substring(\"out-\".length)\n ),\n });\n },\n },\n};\n\nfunction _parseScriptForErrorsAndPorts(script, name, node, context, ports) {\n // Clear run warnings if the script is edited\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"js-function-run-waring\"\n );\n\n if (script === undefined) {\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"js-function-parse-waring\"\n );\n return;\n }\n\n try {\n const AsyncFunction = Object.getPrototypeOf(\n async function () {}\n ).constructor;\n new AsyncFunction(\"Inputs\", \"Outputs\", \"Noodl\", \"Component\", script);\n\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"js-function-parse-waring\"\n );\n } catch (e) {\n context.editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"js-function-parse-waring\",\n {\n showGlobally: true,\n message: e.message,\n }\n );\n }\n\n JavascriptNodeParser.parseAndAddPortsFromScript(script, ports, {\n inputPrefix: \"in-\",\n outputPrefix: \"out-\",\n });\n}\n\nconst inputTypeEnums = [\n {\n value: \"string\",\n label: \"String\",\n },\n {\n value: \"boolean\",\n label: \"Boolean\",\n },\n {\n value: \"number\",\n label: \"Number\",\n },\n {\n value: \"object\",\n label: \"Object\",\n },\n {\n value: \"date\",\n label: \"Date\",\n },\n {\n value: \"array\",\n label: \"Array\",\n },\n {\n value: \"color\",\n label: \"Color\",\n },\n];\n\nexport default {\n node: SimpleJavascriptNode,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n function _updatePorts() {\n var ports = [];\n\n const _outputTypeEnums = inputTypeEnums.concat([\n {\n value: \"signal\",\n label: \"Signal\",\n },\n ]);\n\n // Outputs\n if (\n node.parameters[\"scriptOutputs\"] !== undefined &&\n node.parameters[\"scriptOutputs\"].length > 0\n ) {\n node.parameters[\"scriptOutputs\"].forEach((p) => {\n // Type for output\n ports.push({\n name: \"outtype-\" + p.label,\n displayName: \"Type\",\n editorName: p.label + \" | Type\",\n plug: \"input\",\n type: {\n name: \"enum\",\n enums: _outputTypeEnums,\n allowEditOnly: true,\n },\n default: \"string\",\n parent: \"scriptOutputs\",\n parentItemId: p.id,\n });\n\n // Value for output\n ports.push({\n name: \"out-\" + p.label,\n displayName: p.label,\n plug: \"output\",\n type: node.parameters[\"outtype-\" + p.label] || \"*\",\n group: \"Outputs\",\n });\n });\n }\n\n // Inputs\n if (\n node.parameters[\"scriptInputs\"] !== undefined &&\n node.parameters[\"scriptInputs\"].length > 0\n ) {\n node.parameters[\"scriptInputs\"].forEach((p) => {\n // Type for input\n ports.push({\n name: \"intype-\" + p.label,\n displayName: \"Type\",\n editorName: p.label + \" | Type\",\n plug: \"input\",\n type: {\n name: \"enum\",\n enums: inputTypeEnums,\n allowEditOnly: true,\n },\n default: \"string\",\n parent: \"scriptInputs\",\n parentItemId: p.id,\n });\n\n // Default Value for input\n ports.push({\n name: \"in-\" + p.label,\n displayName: p.label,\n plug: \"input\",\n type: node.parameters[\"intype-\" + p.label] || \"string\",\n group: \"Inputs\",\n });\n });\n }\n\n _parseScriptForErrorsAndPorts(\n node.parameters[\"functionScript\"],\n \"Script \",\n node,\n context,\n ports\n );\n\n // Push output ports that are signals directly to the model, it's needed by the initial run of\n // the script function\n ports.forEach((p) => {\n if (p.type === \"signal\" && p.plug === \"output\") {\n node.outputPorts[p.name] = p;\n }\n });\n\n context.editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n _updatePorts();\n node.on(\"parameterUpdated\", function (ev) {\n _updatePorts();\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.JavaScriptFunction\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"JavaScriptFunction\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { Model } from \"./model\";\n\n// Get and set proxy\n/*const proxies = {}\nconst _collectionProxyHandler = {\n get: function(target,prop,receiver) {\n if(typeof target[prop] === 'function')\n return target[prop].bind(target);\n else if(prop === 'length')\n return target.size()\n else if(target.items[prop] !== undefined)\n return target.get(prop)\n else\n return Reflect.get(target,prop,receiver)\n },\n set: function(obj,prop,value) {\n if(prop === 'id') {\n console.log(`Noodl.Object warning: id is readonly (Id is ${obj.id}, trying to set to ${value})`);\n return true; //if a proxy doesn't return true an exception will be thrown\n }\n else\n return Reflect.set(target,prop,receiver)\n }\n}\n\nfunction Collection(id) {\n this.id = id;\n this.items = [];\n}\n\nvar collections = Collection._collections = {};\n\nCollection.create = function(items) {\n const name = Model.guid();\n collections[name] = new Collection(name);\n if(items) {\n collections[name].set(items);\n }\n return collections[name];\n}\n\nCollection.get = function(name) {\n if(name === undefined) name = Model.guid();\n if(!collections[name]) {\n collections[name] = new Collection(name);\n proxies[name] = new Proxy(collections[name],_collectionProxyHandler);\n }\n return proxies[name];\n}\n\nCollection.instanceOf = function(collection) {\n return collection && (collection instanceof Collection || collection.target instanceof Collection);\n}\n\nCollection.exists = function(name) {\n return collections[name] !== undefined;\n}\n\nCollection.prototype.getId = function() {\n return this.id;\n}\n\nCollection.prototype.on = function(event,listener) {\n if(!this.listeners) this.listeners = {};\n if(!this.listeners[event]) this.listeners[event] = [];\n this.listeners[event].push(listener);\n}\n\nCollection.prototype.off = function(event,listener) {\n if(!this.listeners) return;\n if(!this.listeners[event]) return;\n var idx = this.listeners[event].indexOf(listener);\n if(idx!==-1) this.listeners[event].splice(idx,1);\n}\n\nCollection.prototype.notify = async function(event,args) {\n if(!this.listeners) return;\n if(!this.listeners[event]) return;\n \n var l = this.listeners[event].slice(); //clone in case listeners array is modified in the callbacks\n for(var i = 0; i < l.length; i++) {\n await l[i](args);\n } \n}\n\nCollection.prototype.set = function(src) {\n var length,i;\n \n if(src === this) return;\n \n function keyIndex(a) {\n var keys = {};\n var length = a.length;\n for(var i = 0; i < length; i++) { \n var item = a[i]; \n keys[item.getId()] = item;\n }\n return keys;\n }\n \n // Src can be a collection, or an array\n var src = Collection.instanceOf(src)?src.items:src;\n var bItems = [];\n length = src.length;\n for(i = 0; i < length; i++) {\n var item = src[i];\n if(Model.instanceOf(item))\n bItems.push(item);\n else\n bItems.push(Model.create(item));\n }\n \n var aItems = this.items; \n var aKeys = keyIndex(aItems);\n var bKeys = keyIndex(bItems);\n \n // First remove all items not in the new collection\n length = aItems.length;\n for(i = 0; i < length; i++) {\n if(!bKeys.hasOwnProperty(aItems[i].getId())) {\n // This item is not present in new collection, remove it\n this.removeAtIndex(i);\n i--;\n length--;\n }\n }\n \n // Reorder items\n for(i = 0; i < Math.min(aItems.length,bItems.length); i++) {\n if(aItems[i] !== bItems[i]) {\n if(aKeys.hasOwnProperty(bItems[i].getId())) { \n // The bItem exist in the collection but is in the wrong place\n this.remove(bItems[i]);\n }\n\n // This is a new item, add it at correct index\n this.addAtIndex(bItems[i],i);\n } \n }\n \n // Add remaining items\n for(i = aItems.length; i < bItems.length; i++) {\n this.add(bItems[i]);\n }\n \n}\n\nCollection.prototype.contains = function(item) {\n return this.items.indexOf(item)!==-1;\n}\n\nCollection.prototype.add = async function(item) {\n if(this.contains(item)) return; // Already contains item\n \n this.items.push(item);\n await this.notify('add',{item:item,index:this.items.length-1});\n await this.notify('change');\n await item.notify('add',{collection:this});\n}\n\nCollection.prototype.addAtIndex = async function(item,index) {\n if(this.contains(item)) return; // Already contains item\n\n this.items.splice(index,0,item);\n await this.notify('add',{item:item,index:index});\n await this.notify('change');\n await item.notify('add',{collection:this,index:index});\n}\n\nCollection.prototype.removeAtIndex = async function(idx) {\n var item = this.items[idx];\n this.items.splice(idx,1);\n await this.notify('remove',{item:item,index:idx});\n await this.notify('change');\n await item.notify('remove',{collection:this}); \n}\n\nCollection.prototype.remove = function(item) {\n var idx = this.items.indexOf(item);\n if(idx !== -1) this.removeAtIndex(idx);\n}\n\nCollection.prototype.size = function() {\n return this.items.length;\n}\n\nCollection.prototype.get = function(index) {\n return this.items[index];\n}\n\nCollection.prototype.each = function(callback) {\n for(var i = 0; i < this.items.length; i++) {\n callback(this.items[i],i);\n }\n}\n\nCollection.prototype.forEach = Collection.prototype.each;\n\nCollection.prototype.map = function(fn) {\n return this.items.map(fn);\n}\n\nCollection.prototype.filter = function(fn) {\n return this.items.filter(fn);\n}\n\nCollection.prototype.find = function(predicate, thisArg) {\n return this.items.find(predicate, thisArg);\n}\n\nCollection.prototype.findIndex = function(predicate, thisArg) {\n return this.items.findIndex(predicate, thisArg);\n} \n\nCollection.prototype.toJSON = function() {\n return this.map(function(m) {\n return m.toJSON()\n })\n}*/\n\n// ----\nObject.defineProperty(Array.prototype, \"items\", {\n enumerable: false,\n get() {\n return this;\n },\n set(data) {\n this.set(data);\n },\n});\nObject.defineProperty(Array.prototype, \"each\", {\n enumerable: false,\n writable: false,\n value: Array.prototype.forEach,\n});\nObject.defineProperty(Array.prototype, \"size\", {\n enumerable: false,\n writable: false,\n value() {\n return this.length;\n },\n});\nObject.defineProperty(Array.prototype, \"get\", {\n enumerable: false,\n writable: false,\n value(index) {\n return this[index];\n },\n});\nObject.defineProperty(Array.prototype, \"getId\", {\n enumerable: false,\n writable: false,\n value() {\n return this._id;\n },\n});\nObject.defineProperty(Array.prototype, \"id\", {\n enumerable: false,\n get() {\n return this.getId();\n },\n});\nObject.defineProperty(Array.prototype, \"set\", {\n enumerable: false,\n writable: false,\n value(src) {\n var length, i;\n\n if (src === this) return;\n\n src = src || []; //handle if src is undefined\n\n function keyIndex(a) {\n var keys = {};\n var length = a.length;\n for (var i = 0; i < length; i++) {\n var item = a[i];\n keys[item.getId()] = item;\n }\n return keys;\n }\n\n // Src can be a collection, or an array\n var bItems = [];\n length = src.length;\n for (i = 0; i < length; i++) {\n var item = src[i];\n if (Model.instanceOf(item)) bItems.push(item);\n else bItems.push(Model.create(item));\n }\n\n var aItems = this.items;\n var aKeys = keyIndex(aItems);\n var bKeys = keyIndex(bItems);\n\n // First remove all items not in the new collection\n length = aItems.length;\n for (i = 0; i < length; i++) {\n if (!bKeys.hasOwnProperty(aItems[i].getId())) {\n // This item is not present in new collection, remove it\n this.removeAtIndex(i);\n i--;\n length--;\n }\n }\n\n // Reorder items\n for (i = 0; i < Math.min(aItems.length, bItems.length); i++) {\n if (aItems[i] !== bItems[i]) {\n if (aKeys.hasOwnProperty(bItems[i].getId())) {\n // The bItem exist in the collection but is in the wrong place\n this.remove(bItems[i]);\n }\n\n // This is a new item, add it at correct index\n this.addAtIndex(bItems[i], i);\n }\n }\n\n // Add remaining items\n for (i = aItems.length; i < bItems.length; i++) {\n this.add(bItems[i]);\n }\n },\n});\n\nObject.defineProperty(Array.prototype, \"notify\", {\n enumerable: false,\n writable: false,\n value: async function (event, args) {\n if (!this._listeners) return;\n if (!this._listeners[event]) return;\n\n var l = this._listeners[event].slice(); //clone in case listeners array is modified in the callbacks\n for (var i = 0; i < l.length; i++) {\n await l[i](args);\n }\n },\n});\n\nObject.defineProperty(Array.prototype, \"contains\", {\n enumerable: false,\n writable: false,\n value(item) {\n return this.indexOf(item) !== -1;\n },\n});\n\nObject.defineProperty(Array.prototype, \"add\", {\n enumerable: false,\n writable: false,\n value: async function (item) {\n if (this.contains(item)) return; // Already contains item\n\n this.items.push(item);\n await this.notify(\"add\", { item: item, index: this.items.length - 1 });\n await this.notify(\"change\");\n await item.notify(\"add\", { collection: this });\n },\n});\n\nObject.defineProperty(Array.prototype, \"remove\", {\n enumerable: false,\n writable: false,\n value(item) {\n var idx = this.items.indexOf(item);\n if (idx !== -1) this.removeAtIndex(idx);\n },\n});\n\nObject.defineProperty(Array.prototype, \"addAtIndex\", {\n enumerable: false,\n writable: false,\n value: async function (item, index) {\n if (this.contains(item)) return; // Already contains item\n\n this.items.splice(index, 0, item);\n await this.notify(\"add\", { item: item, index: index });\n await this.notify(\"change\");\n await item.notify(\"add\", { collection: this, index: index });\n },\n});\n\nObject.defineProperty(Array.prototype, \"removeAtIndex\", {\n enumerable: false,\n writable: false,\n value: async function (idx) {\n var item = this.items[idx];\n this.items.splice(idx, 1);\n await this.notify(\"remove\", { item: item, index: idx });\n await this.notify(\"change\");\n await item.notify(\"remove\", { collection: this });\n },\n});\n\nObject.defineProperty(Array.prototype, \"on\", {\n enumerable: false,\n writable: false,\n value(event, listener) {\n if (!this._listeners)\n Object.defineProperty(this, \"_listeners\", {\n enumerable: false,\n writable: false,\n value: {},\n });\n if (!this._listeners[event]) this._listeners[event] = [];\n this._listeners[event].push(listener);\n },\n});\n\nObject.defineProperty(Array.prototype, \"off\", {\n enumerable: false,\n writable: false,\n value(event, listener) {\n if (!this._listeners) return;\n if (!this._listeners[event]) return;\n var idx = this._listeners[event].indexOf(listener);\n if (idx !== -1) this._listeners[event].splice(idx, 1);\n },\n});\n\nclass Collection extends Array {}\n\nconst collections = (Collection._collections = {});\n\nCollection.create = function (items) {\n const name = Model.guid();\n collections[name] = new Collection();\n Object.defineProperty(collections[name], \"_id\", {\n enumerable: false,\n writable: false,\n value: name,\n });\n if (items) {\n collections[name].set(items);\n }\n return collections[name];\n};\n\n/**\n * @param {string} name\n * @returns {Collection}\n */\nCollection.get = function (name) {\n if (name === undefined) name = Model.guid();\n if (!collections[name]) {\n collections[name] = new Collection();\n Object.defineProperty(collections[name], \"_id\", {\n enumerable: false,\n writable: false,\n value: name,\n });\n }\n\n return collections[name];\n};\n\nCollection.instanceOf = function (collection) {\n return collection instanceof Collection;\n};\n\nCollection.exists = function (name) {\n return collections[name] !== undefined;\n};\n\nexport { Collection };\n","import { CloudStore } from \"./cloudstore\";\nimport { Model } from \"../model\";\n\nfunction convertVisualFilter(query, options) {\n var inputs = options.queryParameters;\n\n if (query.combinator !== undefined && query.rules !== undefined) {\n if (query.rules.length === 0) return;\n else if (query.rules.length === 1)\n return convertVisualFilter(query.rules[0], options);\n else {\n const _res = {};\n const _op = \"$\" + query.combinator;\n _res[_op] = [];\n query.rules.forEach((r) => {\n var cond = convertVisualFilter(r, options);\n if (cond !== undefined) _res[_op].push(cond);\n });\n\n return _res;\n }\n } else if (query.operator === \"related to\") {\n var value = query.input !== undefined ? inputs[query.input] : undefined;\n if (value === undefined) return;\n\n return {\n $relatedTo: {\n object: {\n __type: \"Pointer\",\n objectId: value,\n className: query.relatedTo,\n },\n key: query.relationProperty,\n },\n };\n } else {\n const _res = {};\n var cond;\n var value = query.input !== undefined ? inputs[query.input] : query.value;\n\n if (query.operator === \"exist\") {\n _res[query.property] = { $exists: true };\n return _res;\n } else if (query.operator === \"not exist\") {\n _res[query.property] = { $exists: false };\n return _res;\n }\n\n if (value === undefined) return;\n\n if (CloudStore._collections[options.collectionName])\n var schema = CloudStore._collections[options.collectionName].schema;\n\n var propertyType =\n schema && schema.properties && schema.properties[query.property]\n ? schema.properties[query.property].type\n : undefined;\n\n if (propertyType === \"Date\") {\n if (!(value instanceof Date)) value = new Date(value.toString());\n value = { __type: \"Date\", iso: value.toISOString() };\n }\n\n if (query.operator === \"greater than\") cond = { $gt: value };\n else if (query.operator === \"greater than or equal to\")\n cond = { $gte: value };\n else if (query.operator === \"less than\") cond = { $lt: value };\n else if (query.operator === \"less than or equal to\") cond = { $lte: value };\n else if (query.operator === \"equal to\") cond = { $eq: value };\n else if (query.operator === \"not equal to\") cond = { $ne: value };\n else if (query.operator === \"points to\") {\n var targetClass =\n schema && schema.properties && schema.properties[query.property]\n ? schema.properties[query.property].targetClass\n : undefined;\n\n cond = {\n $eq: { __type: \"Pointer\", objectId: value, className: targetClass },\n };\n } else if (query.operator === \"contain\") {\n cond = { $regex: value, $options: \"i\" };\n }\n\n _res[query.property] = cond;\n\n return _res;\n }\n}\n\nfunction matchesQuery(model, query) {\n var match = true;\n\n if (query === undefined) return true;\n\n if (query[\"$and\"] !== undefined) {\n query[\"$and\"].forEach((q) => {\n match &= matchesQuery(model, q);\n });\n } else if (query[\"$or\"] !== undefined) {\n match = false;\n query[\"$or\"].forEach((q) => {\n match |= matchesQuery(model, q);\n });\n } else {\n var keys = Object.keys(query);\n keys.forEach((k) => {\n if (k === \"objectId\") {\n if (query[k][\"$eq\"] !== undefined)\n match &= model.getId() === query[k][\"$eq\"];\n else if (query[k][\"$in\"] !== undefined)\n match &= query[k][\"$in\"].indexOf(model.getId()) !== -1;\n } else if (k === \"$relatedTo\") {\n match = false; // cannot resolve relation queries locally\n } else {\n var value = model.get(k);\n if (\n query[k][\"$eq\"] !== undefined &&\n query[k][\"$eq\"].__type === \"Pointer\"\n )\n match &= value === query[k][\"$eq\"].objectId;\n else if (query[k][\"$eq\"] !== undefined)\n match &= value == query[k][\"$eq\"];\n else if (query[k][\"$ne\"] !== undefined)\n match &= value != query[k][\"$ne\"];\n else if (query[k][\"$lt\"] !== undefined)\n match &= value < query[k][\"$lt\"];\n else if (query[k][\"$lte\"] !== undefined)\n match &= value <= query[k][\"$lt\"];\n else if (query[k][\"$gt\"] !== undefined)\n match &= value > query[k][\"$gt\"];\n else if (query[k][\"$gte\"] !== undefined)\n match &= value >= query[k][\"$gte\"];\n else if (query[k][\"$exists\"] !== undefined)\n match &= value !== undefined;\n else if (query[k][\"$in\"] !== undefined)\n match &= query[k][\"$in\"].indexOf(value) !== -1;\n else if (query[k][\"$nin\"] !== undefined)\n match &= query[k][\"$in\"].indexOf(value) === -1;\n else if (query[k][\"$regex\"] !== undefined)\n match &= new RegExp(query[k][\"$regex\"], query[k][\"$options\"]).test(\n value\n );\n }\n });\n }\n return match;\n}\n\nfunction compareObjects(sort, a, b) {\n for (var i = 0; i < sort.length; i++) {\n let _s = sort[i];\n if (_s[0] === \"-\") {\n // Descending\n let prop = _s.substring(1);\n if (a.get(prop) > b.get(prop)) return -1;\n else if (a.get(prop) < b.get(prop)) return 1;\n } else {\n // Ascending\n if (a.get(_s) > b.get(_s)) return 1;\n else if (a.get(_s) < b.get(_s)) return -1;\n }\n }\n return 0;\n}\n\nfunction convertVisualSorting(sorting) {\n return sorting.map((s) => {\n return (s.order === \"descending\" ? \"-\" : \"\") + s.property;\n });\n}\n\nfunction _value(v) {\n if (v instanceof Date && typeof v.toISOString === \"function\") {\n return {\n __type: \"Date\",\n iso: v.toISOString(),\n };\n }\n return v;\n}\n\n/**\n *\n * @param {Record<string, unknown>} filter\n * @param {{\n * collectionName?: string;\n * modelScope?: unknown;\n * error: (error: string) => void;\n * }} options\n * @returns\n */\nfunction convertFilterOp(filter, options) {\n const keys = Object.keys(filter);\n if (keys.length === 0) return {};\n if (keys.length !== 1) {\n return options.error(\n \"Filter must only have one key found \" + keys.join(\",\")\n );\n }\n\n const res = {};\n const key = keys[0];\n if (filter[\"and\"] !== undefined && Array.isArray(filter[\"and\"])) {\n res[\"$and\"] = filter[\"and\"].map((f) => convertFilterOp(f, options));\n } else if (filter[\"or\"] !== undefined && Array.isArray(filter[\"or\"])) {\n res[\"$or\"] = filter[\"or\"].map((f) => convertFilterOp(f, options));\n } else if (filter[\"idEqualTo\"] !== undefined) {\n res[\"objectId\"] = { $eq: filter[\"idEqualTo\"] };\n } else if (filter[\"idContainedIn\"] !== undefined) {\n res[\"objectId\"] = { $in: filter[\"idContainedIn\"] };\n } else if (filter[\"relatedTo\"] !== undefined) {\n const modelId = filter[\"relatedTo\"][\"id\"];\n if (modelId === undefined) {\n return options.error(\"Must provide id in relatedTo filter\");\n }\n\n const relationKey = filter[\"relatedTo\"][\"key\"];\n if (relationKey === undefined) {\n return options.error(\"Must provide key in relatedTo filter\");\n }\n\n const className =\n filter[\"relatedTo\"][\"className\"] ||\n (options.modelScope || Model).get(modelId)?._class;\n if (typeof className === \"undefined\") {\n // Either the pointer is loaded as an object or we allow passing in the className.\n return options.error(\"Must preload the Pointer or include className\");\n }\n\n res[\"$relatedTo\"] = {\n object: {\n __type: \"Pointer\",\n objectId: modelId,\n className,\n },\n key: relationKey,\n };\n } else if (typeof filter[key] === \"object\") {\n const opAndValue = filter[key];\n if (opAndValue[\"equalTo\"] !== undefined)\n res[key] = { $eq: _value(opAndValue[\"equalTo\"]) };\n else if (opAndValue[\"notEqualTo\"] !== undefined)\n res[key] = { $ne: _value(opAndValue[\"notEqualTo\"]) };\n else if (opAndValue[\"lessThan\"] !== undefined)\n res[key] = { $lt: _value(opAndValue[\"lessThan\"]) };\n else if (opAndValue[\"greaterThan\"] !== undefined)\n res[key] = { $gt: _value(opAndValue[\"greaterThan\"]) };\n else if (opAndValue[\"lessThanOrEqualTo\"] !== undefined)\n res[key] = { $lte: _value(opAndValue[\"lessThanOrEqualTo\"]) };\n else if (opAndValue[\"greaterThanOrEqualTo\"] !== undefined)\n res[key] = { $gte: _value(opAndValue[\"greaterThanOrEqualTo\"]) };\n else if (opAndValue[\"exists\"] !== undefined)\n res[key] = { $exists: opAndValue[\"exists\"] };\n else if (opAndValue[\"containedIn\"] !== undefined)\n res[key] = { $in: opAndValue[\"containedIn\"] };\n else if (opAndValue[\"notContainedIn\"] !== undefined)\n res[key] = { $nin: opAndValue[\"notContainedIn\"] };\n else if (opAndValue[\"pointsTo\"] !== undefined) {\n let schema = null;\n if (CloudStore._collections[options.collectionName]) {\n schema = CloudStore._collections[options.collectionName].schema;\n }\n\n const targetClass =\n schema && schema.properties && schema.properties[key]\n ? schema.properties[key].targetClass\n : undefined;\n const type =\n schema && schema.properties && schema.properties[key]\n ? schema.properties[key].type\n : undefined;\n\n if (type === \"Relation\") {\n res[key] = {\n __type: \"Pointer\",\n objectId: opAndValue[\"pointsTo\"],\n className: targetClass,\n };\n } else {\n if (Array.isArray(opAndValue[\"pointsTo\"])) {\n res[key] = {\n $in: opAndValue[\"pointsTo\"].map((v) => {\n return { __type: \"Pointer\", objectId: v, className: targetClass };\n }),\n };\n } else {\n res[key] = {\n $eq: {\n __type: \"Pointer\",\n objectId: opAndValue[\"pointsTo\"],\n className: targetClass,\n },\n };\n }\n }\n } else if (opAndValue[\"matchesRegex\"] !== undefined) {\n res[key] = {\n $regex: opAndValue[\"matchesRegex\"],\n $options: opAndValue[\"options\"],\n };\n } else if (\n opAndValue[\"text\"] !== undefined &&\n opAndValue[\"text\"][\"search\"] !== undefined\n ) {\n var _v = opAndValue[\"text\"][\"search\"];\n if (typeof _v === \"string\")\n res[key] = { $text: { $search: { $term: _v, $caseSensitive: false } } };\n else\n res[key] = {\n $text: {\n $search: {\n $term: _v.term,\n $language: _v.language,\n $caseSensitive: _v.caseSensitive,\n $diacriticSensitive: _v.diacriticSensitive,\n },\n },\n };\n // Geo points\n } else if (opAndValue[\"nearSphere\"] !== undefined) {\n var _v = opAndValue[\"nearSphere\"];\n res[key] = {\n $nearSphere: {\n __type: \"GeoPoint\",\n latitude: _v.latitude,\n longitude: _v.longitude,\n },\n $maxDistanceInMiles: _v.$maxDistanceInMiles,\n $maxDistanceInKilometers: _v.maxDistanceInKilometers,\n $maxDistanceInRadians: _v.maxDistanceInRadians,\n };\n } else if (opAndValue[\"withinBox\"] !== undefined) {\n var _v = opAndValue[\"withinBox\"];\n res[key] = {\n $within: {\n $box: _v.map((gp) => ({\n __type: \"GeoPoint\",\n latitude: gp.latitude,\n longitude: gp.longitude,\n })),\n },\n };\n } else if (opAndValue[\"withinPolygon\"] !== undefined) {\n var _v = opAndValue[\"withinPolygon\"];\n res[key] = {\n $geoWithin: {\n $polygon: _v.map((gp) => ({\n __type: \"GeoPoint\",\n latitude: gp.latitude,\n longitude: gp.longitude,\n })),\n },\n };\n }\n } else {\n options.error(\"Unrecognized filter keys \" + keys.join(\",\"));\n }\n\n return res;\n}\n\nexport {\n convertVisualFilter,\n compareObjects,\n matchesQuery,\n convertVisualSorting,\n convertFilterOp,\n};\n","import { Node } from \"../../../node\";\nimport { createSetter } from \"../../../edgetriggeredinput\";\n\nimport { Model } from \"../../../model\";\nimport { Collection } from \"../../../collection\";\nimport { CloudStore } from \"../../../api/cloudstore\";\nimport { JavascriptNodeParser } from \"../../../javascriptnodeparser\";\nimport * as QueryUtils from \"../../../api/queryutils\";\n\nvar DbCollectionNode = {\n name: \"DbCollection2\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/query-records\",\n displayName: \"Query Records\",\n /* shortDesc: \"A database collection.\",*/\n category: \"Cloud Services\",\n usePortAsLabel: \"collectionName\",\n color: \"data\",\n initialize() {\n var _this = this;\n this._internal.queryParameters = {};\n\n var collectionChangedScheduled = false;\n this._internal.collectionChangedCallback = function () {\n //this can be called multiple times when adding/removing more than one item\n //so optimize by only updating outputs once\n if (collectionChangedScheduled) return;\n collectionChangedScheduled = true;\n\n _this.scheduleAfterInputsHaveUpdated(function () {\n _this.flagOutputDirty(\"count\");\n _this.flagOutputDirty(\"firstItemId\");\n _this.flagOutputDirty(\"isEmpty\");\n collectionChangedScheduled = false;\n });\n };\n\n this._internal.cloudStoreEvents = function (args) {\n if (_this.isInputConnected(\"storageFetch\") === true) return;\n\n if (_this._internal.collection === undefined) return;\n if (args.collection !== _this._internal.name) return;\n\n function _addModelAtCorrectIndex(m) {\n if (_this._internal.currentQuery.sort !== undefined) {\n // We need to add it at the right index\n for (var i = 0; i < _this._internal.collection.size(); i++)\n if (\n QueryUtils.compareObjects(\n _this._internal.currentQuery.sort,\n _this._internal.collection.get(i),\n m\n ) > 0\n )\n break;\n\n _this._internal.collection.addAtIndex(m, i);\n } else {\n _this._internal.collection.add(m);\n }\n\n // Make sure we don't exceed limit\n let size = _this._internal.collection.size();\n if (\n _this._internal.currentQuery.limit !== undefined &&\n size > _this._internal.currentQuery.limit\n )\n _this._internal.collection.remove(\n _this._internal.collection.get(\n _this._internal.currentQuery.sort !== undefined &&\n _this._internal.currentQuery.sort[0][0] === \"-\"\n ? size - 1\n : 0\n )\n );\n\n //Send the array again over the items output to trigger function nodes etc that might be connected\n _this.flagOutputDirty(\"items\");\n\n _this.flagOutputDirty(\"count\");\n _this.flagOutputDirty(\"firstItemId\");\n _this.flagOutputDirty(\"isEmpty\");\n }\n\n if (args.type === \"create\") {\n const m = Model.get(args.object.objectId);\n if (m !== undefined) {\n // Check if the object matches the current query\n if (QueryUtils.matchesQuery(m, _this._internal.currentQuery.where)) {\n // If matches the query, add the item to results\n _addModelAtCorrectIndex(m);\n }\n }\n } else if (args.type === \"save\") {\n const m = Model.get(args.objectId);\n if (m !== undefined) {\n const matchesQuery = QueryUtils.matchesQuery(\n m,\n _this._internal.currentQuery.where\n );\n\n if (!matchesQuery && _this._internal.collection.contains(m)) {\n // The record no longer matches the filter, remove it\n _this._internal.collection.remove(m);\n\n //Send the array again over the items output to trigger function nodes etc that might be connected\n _this.flagOutputDirty(\"items\");\n\n _this.flagOutputDirty(\"count\");\n _this.flagOutputDirty(\"firstItemId\");\n _this.flagOutputDirty(\"isEmpty\");\n } else if (matchesQuery && !_this._internal.collection.contains(m)) {\n // It's not part of the result collection but now matches they query, add it and resort\n _addModelAtCorrectIndex(m);\n }\n }\n } else if (args.type === \"delete\") {\n const m = Model.get(args.objectId);\n if (m !== undefined) {\n _this._internal.collection.remove(m);\n\n //Send the array again over the items output to trigger function nodes etc that might be connected\n _this.flagOutputDirty(\"items\");\n\n _this.flagOutputDirty(\"count\");\n _this.flagOutputDirty(\"firstItemId\");\n _this.flagOutputDirty(\"isEmpty\");\n }\n }\n };\n\n // Listening to cloud store events is only for the global model scope, only valid in browser\n // in cloud runtime its a nop\n const cloudstore = CloudStore.forScope(this.nodeScope.modelScope);\n cloudstore.on(\"save\", this._internal.cloudStoreEvents);\n cloudstore.on(\"create\", this._internal.cloudStoreEvents);\n cloudstore.on(\"delete\", this._internal.cloudStoreEvents);\n\n this._internal.storageSettings = {};\n },\n getInspectInfo() {\n const collection = this._internal.collection;\n if (!collection) {\n return { type: \"text\", value: \"[Not executed yet]\" };\n }\n\n return [\n {\n type: \"value\",\n value: collection.items,\n },\n ];\n },\n inputs: {},\n outputs: {\n items: {\n type: \"array\",\n displayName: \"Items\",\n group: \"General\",\n getter() {\n return this._internal.collection;\n },\n },\n firstItemId: {\n type: \"string\",\n displayName: \"First Record Id\",\n group: \"General\",\n getter() {\n if (this._internal.collection) {\n var firstItem = this._internal.collection.get(0);\n if (firstItem !== undefined) return firstItem.getId();\n }\n },\n },\n isEmpty: {\n type: \"boolean\",\n displayName: \"Is Empty\",\n group: \"General\",\n getter() {\n if (this._internal.collection) {\n return this._internal.collection.size() === 0;\n }\n return true;\n },\n },\n count: {\n type: \"number\",\n displayName: \"Count\",\n group: \"General\",\n getter() {\n return this._internal.collection ? this._internal.collection.size() : 0;\n },\n },\n fetched: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"Success\",\n },\n failure: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"Failure\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n },\n prototypeExtensions: {\n setCollectionName(name) {\n this._internal.name = name;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n },\n setCollection(collection) {\n this.bindCollection(collection);\n this.flagOutputDirty(\"firstItemId\");\n this.flagOutputDirty(\"isEmpty\");\n this.flagOutputDirty(\"items\");\n this.flagOutputDirty(\"count\");\n },\n unbindCurrentCollection() {\n var collection = this._internal.collection;\n if (!collection) return;\n collection.off(\"change\", this._internal.collectionChangedCallback);\n this._internal.collection = undefined;\n },\n bindCollection(collection) {\n this.unbindCurrentCollection();\n this._internal.collection = collection;\n collection &&\n collection.on(\"change\", this._internal.collectionChangedCallback);\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n this.unbindCurrentCollection();\n\n const cloudstore = CloudStore.forScope(this.nodeScope.modelScope);\n cloudstore.off(\"insert\", this._internal.cloudStoreEvents);\n cloudstore.off(\"delete\", this._internal.cloudStoreEvents);\n cloudstore.off(\"save\", this._internal.cloudStoreEvents);\n },\n setError(err) {\n this._internal.err = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n },\n scheduleFetch() {\n var internal = this._internal;\n\n if (internal.fetchScheduled) return;\n internal.fetchScheduled = true;\n this.scheduleAfterInputsHaveUpdated(() => {\n internal.fetchScheduled = false;\n\n this.fetch();\n });\n },\n fetch() {\n if (this.context.editorConnection) {\n if (this._internal.name === undefined) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"query-collection\",\n {\n message: \"No collection specified for query\",\n }\n );\n } else {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"query-collection\"\n );\n }\n }\n\n const _c = Collection.get();\n const f = this.getStorageFilter();\n const limit = this.getStorageLimit();\n const skip = this.getStorageSkip();\n const count = this.getStorageFetchTotalCount();\n this._internal.currentQuery = {\n where: f.where,\n sort: f.sort,\n limit: limit,\n skip: skip,\n };\n CloudStore.forScope(this.nodeScope.modelScope).query({\n collection: this._internal.name,\n where: f.where,\n sort: f.sort,\n limit: limit,\n skip: skip,\n count: count,\n success: (results, count) => {\n if (results !== undefined) {\n _c.set(\n results.map((i) => {\n var m = CloudStore._fromJSON(\n i,\n this._internal.name,\n this.nodeScope.modelScope\n );\n\n return m;\n })\n );\n }\n if (count !== undefined) {\n this._internal.storageSettings.storageTotalCount = count;\n if (this.hasOutput(\"storageTotalCount\"))\n this.flagOutputDirty(\"storageTotalCount\");\n }\n this.setCollection(_c);\n this.sendSignalOnOutput(\"fetched\");\n },\n error: (err) => {\n this.setCollection(_c);\n this.setError(err || \"Failed to fetch.\");\n },\n });\n },\n getStorageFilter() {\n const storageSettings = this._internal.storageSettings;\n if (\n storageSettings[\"storageFilterType\"] === undefined ||\n storageSettings[\"storageFilterType\"] === \"simple\"\n ) {\n // Create simple filter\n const _where =\n this._internal.visualFilter !== undefined\n ? QueryUtils.convertVisualFilter(this._internal.visualFilter, {\n queryParameters: this._internal.queryParameters,\n collectionName: this._internal.name,\n })\n : undefined;\n\n const _sort =\n this._internal.visualSorting !== undefined\n ? QueryUtils.convertVisualSorting(this._internal.visualSorting)\n : undefined;\n\n return {\n where: _where,\n sort: _sort,\n };\n } else if (storageSettings[\"storageFilterType\"] === \"json\") {\n // JSON filter\n if (!this._internal.filterFunc) {\n try {\n var filterCode = storageSettings[\"storageJSONFilter\"];\n\n // Parse out variables\n filterCode = filterCode.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g, \"\"); // Remove comments\n this._internal.filterVariables =\n filterCode.match(/\\$[A-Za-z0-9]+/g) || [];\n\n var args = [\"filter\", \"where\", \"sort\", \"Inputs\"]\n .concat(this._internal.filterVariables)\n .concat([filterCode]);\n this._internal.filterFunc = Function.apply(null, args);\n } catch (e) {\n this._internal.filterFunc = undefined;\n console.log(\"Error while parsing filter script: \" + e);\n }\n }\n\n if (!this._internal.filterFunc) return;\n\n var _filter = {},\n _sort = [],\n _this = this;\n\n // Collect filter variables\n var _filterCb = function (f) {\n _filter = QueryUtils.convertFilterOp(f, {\n collectionName: _this._internal.name,\n error(err) {\n _this.context.editorConnection.sendWarning(\n _this.nodeScope.componentOwner.name,\n _this.id,\n \"query-collection-filter\",\n {\n message: err,\n }\n );\n },\n });\n };\n var _sortCb = function (s) {\n _sort = s;\n };\n\n // Extract inputs\n const inputs = {};\n for (let key in storageSettings) {\n if (key.startsWith(\"storageFilterValue-\"))\n inputs[key.substring(\"storageFilterValue-\".length)] =\n storageSettings[key];\n }\n\n var filterFuncArgs = [_filterCb, _filterCb, _sortCb, inputs]; // One for filter, one for where\n\n this._internal.filterVariables.forEach((v) => {\n filterFuncArgs.push(\n storageSettings[\"storageFilterValue-\" + v.substring(1)]\n );\n });\n\n // Run the code to get the filter\n try {\n this._internal.filterFunc.apply(this, filterFuncArgs);\n } catch (e) {\n console.log(\"Error while running filter script: \" + e);\n }\n\n return { where: _filter, sort: _sort };\n }\n },\n getStorageLimit() {\n const storageSettings = this._internal.storageSettings;\n\n if (!storageSettings[\"storageEnableLimit\"]) return;\n else return storageSettings[\"storageLimit\"] || 10;\n },\n getStorageSkip() {\n const storageSettings = this._internal.storageSettings;\n\n if (!storageSettings[\"storageEnableLimit\"]) return;\n else return storageSettings[\"storageSkip\"] || 0;\n },\n getStorageFetchTotalCount() {\n const storageSettings = this._internal.storageSettings;\n\n return !!storageSettings[\"storageEnableCount\"];\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n this.registerOutput(name, {\n getter: userOutputGetter.bind(this, name),\n });\n },\n setVisualFilter(value) {\n this._internal.visualFilter = value;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n },\n setVisualSorting(value) {\n this._internal.visualSorting = value;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n },\n setQueryParameter(name, value) {\n this._internal.queryParameters[name] = value;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n },\n registerInputIfNeeded(name) {\n var _this = this;\n\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"qp-\"))\n return this.registerInput(name, {\n set: this.setQueryParameter.bind(this, name.substring(\"qp-\".length)),\n });\n\n const dynamicSignals = {\n storageFetch: this.scheduleFetch.bind(this),\n };\n\n if (dynamicSignals[name])\n return this.registerInput(name, {\n set: createSetter({\n valueChangedToTrue: dynamicSignals[name],\n }),\n });\n\n const dynamicSetters = {\n collectionName: this.setCollectionName.bind(this),\n visualFilter: this.setVisualFilter.bind(this),\n visualSort: this.setVisualSorting.bind(this),\n };\n\n if (dynamicSetters[name])\n return this.registerInput(name, {\n set: dynamicSetters[name],\n });\n\n this.registerInput(name, {\n set: userInputSetter.bind(this, name),\n });\n },\n },\n};\n\nfunction userOutputGetter(name) {\n /* jshint validthis:true */\n return this._internal.storageSettings[name];\n}\n\nfunction userInputSetter(name, value) {\n /* jshint validthis:true */\n this._internal.storageSettings[name] = value;\n\n if (this.isInputConnected(\"storageFetch\") === false) this.scheduleFetch();\n}\n\nconst _defaultJSONQuery =\n \"// Write your query script here, check out the reference documentation for examples\\n\" +\n \"where({ })\\n\";\n\nfunction updatePorts(nodeId, parameters, editorConnection, graphModel) {\n var ports = [];\n\n const dbCollections = graphModel.getMetaData(\"dbCollections\");\n const systemCollections = graphModel.getMetaData(\"systemCollections\");\n\n const _systemClasses = [\n { label: \"User\", value: \"_User\" },\n { label: \"Role\", value: \"_Role\" },\n ];\n ports.push({\n name: \"collectionName\",\n type: {\n name: \"enum\",\n enums: _systemClasses.concat(\n dbCollections !== undefined\n ? dbCollections.map((c) => {\n return { value: c.name, label: c.name };\n })\n : []\n ),\n allowEditOnly: true,\n },\n displayName: \"Class\",\n plug: \"input\",\n group: \"General\",\n });\n\n ports.push({\n name: \"storageFilterType\",\n type: {\n name: \"enum\",\n allowEditOnly: true,\n enums: [\n { value: \"simple\", label: \"Visual\" },\n { value: \"json\", label: \"Javascript\" },\n ],\n },\n displayName: \"Filter\",\n default: \"simple\",\n plug: \"input\",\n group: \"General\",\n });\n\n // Limit\n ports.push({\n type: \"boolean\",\n plug: \"input\",\n group: \"Limit\",\n name: \"storageEnableLimit\",\n displayName: \"Use limit\",\n });\n\n if (parameters[\"storageEnableLimit\"]) {\n ports.push({\n type: \"number\",\n default: 10,\n plug: \"input\",\n group: \"Limit\",\n name: \"storageLimit\",\n displayName: \"Limit\",\n });\n\n ports.push({\n type: \"number\",\n default: 0,\n plug: \"input\",\n group: \"Limit\",\n name: \"storageSkip\",\n displayName: \"Skip\",\n });\n }\n\n ports.push({\n type: \"signal\",\n plug: \"input\",\n group: \"Actions\",\n name: \"storageFetch\",\n displayName: \"Do\",\n });\n\n // Total Count\n ports.push({\n type: \"boolean\",\n plug: \"input\",\n group: \"Total Count\",\n name: \"storageEnableCount\",\n displayName: \"Fetch total count\",\n });\n\n if (parameters[\"storageEnableCount\"]) {\n ports.push({\n type: \"number\",\n plug: \"output\",\n group: \"General\",\n name: \"storageTotalCount\",\n displayName: \"Total Count\",\n });\n }\n\n // Simple query\n if (\n parameters[\"storageFilterType\"] === undefined ||\n parameters[\"storageFilterType\"] === \"simple\"\n ) {\n if (parameters.collectionName !== undefined) {\n var c =\n dbCollections &&\n dbCollections.find((c) => c.name === parameters.collectionName);\n if (c === undefined && systemCollections)\n c = systemCollections.find((c) => c.name === parameters.collectionName);\n if (c && c.schema && c.schema.properties) {\n const schema = JSON.parse(JSON.stringify(c.schema));\n\n // Find all records that have a relation with this type\n function _findRelations(c) {\n if (c.schema !== undefined && c.schema.properties !== undefined)\n for (var key in c.schema.properties) {\n var p = c.schema.properties[key];\n if (\n p.type === \"Relation\" &&\n p.targetClass === parameters.collectionName\n ) {\n if (schema.relations === undefined) schema.relations = {};\n if (schema.relations[c.name] === undefined)\n schema.relations[c.name] = [];\n\n schema.relations[c.name].push({ property: key });\n }\n }\n }\n\n dbCollections && dbCollections.forEach(_findRelations);\n systemCollections && systemCollections.forEach(_findRelations);\n\n ports.push({\n name: \"visualFilter\",\n plug: \"input\",\n type: { name: \"query-filter\", schema: schema, allowEditOnly: true },\n displayName: \"Filter\",\n group: \"Filter\",\n });\n\n ports.push({\n name: \"visualSort\",\n plug: \"input\",\n type: { name: \"query-sorting\", schema: schema, allowEditOnly: true },\n displayName: \"Sort\",\n group: \"Sorting\",\n });\n }\n\n if (parameters.visualFilter !== undefined) {\n // Find all input ports\n const uniqueInputs = {};\n function _collectInputs(query) {\n if (query === undefined) return;\n if (query.rules !== undefined)\n query.rules.forEach((r) => _collectInputs(r));\n else if (query.input !== undefined) uniqueInputs[query.input] = true;\n }\n\n _collectInputs(parameters.visualFilter);\n Object.keys(uniqueInputs).forEach((input) => {\n ports.push({\n name: \"qp-\" + input,\n plug: \"input\",\n type: \"*\",\n displayName: input,\n group: \"Query Parameters\",\n });\n });\n }\n }\n }\n // JSON query\n else if (parameters[\"storageFilterType\"] === \"json\") {\n ports.push({\n type: { name: \"string\", allowEditOnly: true, codeeditor: \"javascript\" },\n plug: \"input\",\n group: \"Filter\",\n name: \"storageJSONFilter\",\n default: _defaultJSONQuery,\n displayName: \"Filter\",\n });\n\n var filter = parameters[\"storageJSONFilter\"];\n if (filter) {\n filter = filter.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g, \"\"); // Remove comments\n var variables = filter.match(/\\$[A-Za-z0-9]+/g);\n\n if (variables) {\n const unique = {};\n variables.forEach((v) => {\n unique[v] = true;\n });\n\n Object.keys(unique).forEach((p) => {\n ports.push({\n name: \"storageFilterValue-\" + p.substring(1),\n displayName: p.substring(1),\n group: \"Filter Values\",\n plug: \"input\",\n type: { name: \"*\", allowConnectionsOnly: true },\n });\n });\n }\n\n // Support variables with the \"Inputs.\"\" syntax\n JavascriptNodeParser.parseAndAddPortsFromScript(filter, ports, {\n inputPrefix: \"storageFilterValue-\",\n inputGroup: \"Filter Values\",\n inputType: { name: \"*\", allowConnectionsOnly: true },\n skipOutputs: true,\n });\n }\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: DbCollectionNode,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n\n node.on(\"parameterUpdated\", function (event) {\n if (\n event.name.startsWith(\"storage\") ||\n event.name === \"visualFilter\" ||\n event.name === \"collectionName\"\n ) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n }\n });\n\n graphModel.on(\"metadataChanged.dbCollections\", function (data) {\n CloudStore.invalidateCollections();\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n CloudStore.invalidateCollections();\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n\n graphModel.on(\"metadataChanged.cloudservices\", function (data) {\n CloudStore.instance._initCloudServices();\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.DbCollection2\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"DbCollection2\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { Node } from \"../../../node\";\nimport { createSetter } from \"../../../edgetriggeredinput\";\nimport { Model } from \"../../../model\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nconst ModelNodeDefinition = {\n name: \"DbModel2\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/record\",\n displayNodeName: \"Record\",\n shortDesc: \"Database model\",\n category: \"Cloud Services\",\n usePortAsLabel: \"collectionName\",\n color: \"data\",\n dynamicports: [\n {\n name: \"conditionalports/extended\",\n condition: \"idSource = explicit OR idSource NOT SET\",\n inputs: [\"modelId\"],\n },\n ],\n initialize() {\n const internal = this._internal;\n internal.inputValues = {};\n internal.relationModelIds = {};\n\n const _this = this;\n this._internal.onModelChangedCallback = function (args) {\n if (_this.isInputConnected(\"fetch\")) return;\n\n if (_this.hasOutput(\"prop-\" + args.name))\n _this.flagOutputDirty(\"prop-\" + args.name);\n\n if (_this.hasOutput(\"changed-\" + args.name))\n _this.sendSignalOnOutput(\"changed-\" + args.name);\n\n _this.sendSignalOnOutput(\"changed\");\n };\n },\n getInspectInfo() {\n const model = this._internal.model;\n if (!model) return \"[No Record]\";\n\n return [\n { type: \"text\", value: \"Id: \" + model.getId() },\n { type: \"value\", value: model.data },\n ];\n },\n outputs: {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model\n ? this._internal.model.getId()\n : this._internal.modelId;\n },\n },\n fetched: {\n type: \"signal\",\n displayName: \"Fetched\",\n group: \"Events\",\n },\n changed: {\n type: \"signal\",\n displayName: \"Changed\",\n group: \"Events\",\n },\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n },\n inputs: {\n idSource: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"Specify explicitly\", value: \"explicit\" },\n { label: \"From repeater\", value: \"foreach\" },\n ],\n allowEditOnly: true,\n },\n default: \"explicit\",\n displayName: \"Id Source\",\n group: \"General\",\n set(value) {\n if (value === \"foreach\") {\n this.scheduleAfterInputsHaveUpdated(() => {\n // Find closest nodescope that have a _forEachModel\n var component = this.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n this.setModel(\n component !== undefined ? component._forEachModel : undefined\n );\n });\n }\n },\n },\n modelId: {\n type: { name: \"string\", allowConnectionsOnly: true },\n displayName: \"Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) {\n // Can be passed as model as well\n value = value.getId();\n } else if (typeof value === \"object\") {\n // If this is an js object, dereference it\n value = Model.create(value).getId();\n }\n\n this._internal.modelId = value; // Wait to fetch data\n if (this.isInputConnected(\"fetch\") === false) {\n this.setModelID(value);\n } else {\n this.flagOutputDirty(\"id\");\n }\n },\n },\n fetch: {\n displayName: \"Fetch\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleFetch();\n },\n },\n },\n methods: {\n setCollectionID(id) {\n this._internal.collectionId = id;\n },\n setModelID(id) {\n var model = (this.nodeScope.modelScope || Model).get(id);\n // this._internal.modelIsNew = false;\n this.setModel(model);\n },\n setModel(model) {\n if (this._internal.model) {\n // Remove old listener if existing\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n }\n\n this._internal.model = model;\n this.flagOutputDirty(\"id\");\n model.on(\"change\", this._internal.onModelChangedCallback);\n\n // We have a new model, mark all outputs as dirty\n for (var key in model.data) {\n if (this.hasOutput(\"prop-\" + key)) {\n this.flagOutputDirty(\"prop-\" + key);\n }\n }\n this.sendSignalOnOutput(\"fetched\");\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n if (this._internal.model)\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n },\n scheduleOnce(type, cb) {\n const _this = this;\n const _type = \"hasScheduled\" + type;\n if (this._internal[_type]) return;\n this._internal[_type] = true;\n this.scheduleAfterInputsHaveUpdated(function () {\n _this._internal[_type] = false;\n cb();\n });\n },\n setError(err) {\n this._internal.error = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"storage-op-warning\",\n {\n message: err,\n showGlobally: true,\n }\n );\n }\n },\n clearWarnings() {\n if (this.context.editorConnection) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"storage-op-warning\"\n );\n }\n },\n scheduleFetch() {\n const _this = this;\n const internal = this._internal;\n\n this.scheduleOnce(\"Fetch\", function () {\n // Don't do fetch if no id\n if (internal.modelId === undefined || internal.modelId === \"\") {\n _this.setError(\"Missing Id.\");\n return;\n }\n\n const cloudstore = CloudStore.forScope(_this.nodeScope.modelScope);\n cloudstore.fetch({\n collection: internal.collectionId,\n objectId: internal.modelId, // Get the objectId part of the model id\n success(response) {\n const model = cloudstore._fromJSON(response, internal.collectionId);\n if (internal.model !== model) {\n // Check if we need to change model\n if (internal.model) {\n // Remove old listener if existing\n internal.model.off(\"change\", internal.onModelChangedCallback);\n }\n\n internal.model = model;\n model.on(\"change\", internal.onModelChangedCallback);\n }\n _this.flagOutputDirty(\"id\");\n\n delete response.objectId;\n\n for (const key in response) {\n if (_this.hasOutput(\"prop-\" + key)) {\n _this.flagOutputDirty(\"prop-\" + key);\n }\n }\n\n _this.sendSignalOnOutput(\"fetched\");\n },\n error(err) {\n _this.setError(err || \"Failed to fetch.\");\n },\n });\n });\n },\n scheduleStore() {\n var internal = this._internal;\n if (!internal.model) return;\n\n this.scheduleOnce(\"Store\", function () {\n for (var i in internal.inputValues) {\n internal.model.set(i, internal.inputValues[i], { resolve: true });\n }\n });\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerOutput(name, {\n getter: userOutputGetter.bind(this, name.substring(\"prop-\".length)),\n });\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n const dynamicSignals = {};\n\n if (dynamicSignals[name])\n return this.registerInput(name, {\n set: createSetter({\n valueChangedToTrue: dynamicSignals[name],\n }),\n });\n\n const dynamicSetters = {\n collectionName: this.setCollectionID.bind(this),\n };\n\n if (dynamicSetters[name])\n return this.registerInput(name, {\n set: dynamicSetters[name],\n });\n\n if (name.startsWith(\"prop-\"))\n this.registerInput(name, {\n set: userInputSetter.bind(this, name.substring(\"prop-\".length)),\n });\n },\n },\n};\n\nfunction userOutputGetter(name) {\n /* jshint validthis:true */\n return this._internal.model\n ? this._internal.model.get(name, { resolve: true })\n : undefined;\n}\n\nfunction userInputSetter(name, value) {\n //console.log('dbmodel setter:',name,value)\n /* jshint validthis:true */\n this._internal.inputValues[name] = value;\n}\n\nfunction updatePorts(nodeId, parameters, editorConnection, graphModel) {\n var ports = [];\n\n const dbCollections = graphModel.getMetaData(\"dbCollections\");\n const systemCollections = graphModel.getMetaData(\"systemCollections\");\n\n const _systemClasses = [\n { label: \"User\", value: \"_User\" },\n { label: \"Role\", value: \"_Role\" },\n ];\n ports.push({\n name: \"collectionName\",\n displayName: \"Class\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: _systemClasses.concat(\n dbCollections !== undefined\n ? dbCollections.map((c) => {\n return { value: c.name, label: c.name };\n })\n : []\n ),\n allowEditOnly: true,\n },\n plug: \"input\",\n });\n\n if (parameters.collectionName && dbCollections) {\n // Fetch ports from collection keys\n var c = dbCollections.find((c) => c.name === parameters.collectionName);\n if (c === undefined && systemCollections)\n c = systemCollections.find((c) => c.name === parameters.collectionName);\n if (c && c.schema && c.schema.properties) {\n var props = c.schema.properties;\n for (var key in props) {\n var p = props[key];\n if (ports.find((_p) => _p.name === key)) continue;\n\n if (p.type !== \"Relation\") {\n // Other schema type ports\n const _typeMap = {\n String: \"string\",\n Boolean: \"boolean\",\n Number: \"number\",\n Date: \"date\",\n };\n\n ports.push({\n type: {\n name: _typeMap[p.type] ? _typeMap[p.type] : \"*\",\n },\n plug: \"output\",\n group: \"Properties\",\n name: \"prop-\" + key,\n displayName: key,\n });\n\n ports.push({\n type: \"signal\",\n plug: \"output\",\n group: \"Changed Events\",\n displayName: key + \" Changed\",\n name: \"changed-\" + key,\n });\n }\n }\n }\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: ModelNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n\n node.on(\"parameterUpdated\", function () {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n\n graphModel.on(\"metadataChanged.dbCollections\", function () {\n CloudStore.invalidateCollections();\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function () {\n CloudStore.invalidateCollections();\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel\n );\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.DbModel2\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"DbModel2\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { Model } from \"../../../model\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nexport function addBaseInfo(def, opts) {\n const _includeInputProperties =\n opts === undefined || opts.includeInputProperties;\n const _includeRelations = opts !== undefined && opts.includeRelations;\n\n Object.assign(def.node, {\n category: \"Data\",\n color: \"data\",\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n // Outputs\n Object.assign(def.node.outputs, {\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n });\n\n // Methods\n Object.assign(def.node.methods, {\n scheduleOnce(type, cb) {\n const _this = this;\n const _type = \"hasScheduled\" + type;\n if (this._internal[_type]) return;\n this._internal[_type] = true;\n this.scheduleAfterInputsHaveUpdated(function () {\n _this._internal[_type] = false;\n cb();\n });\n },\n checkWarningsBeforeCloudOp() {\n //clear all errors first\n this.clearWarnings();\n\n if (!this._internal.collectionId) {\n this.setError(\"No class name specified\");\n return false;\n }\n\n return true;\n },\n setError(err) {\n this._internal.error = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"storage-op-warning\",\n {\n message: err,\n showGlobally: true,\n }\n );\n }\n },\n clearWarnings() {\n if (this.context.editorConnection) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"storage-op-warning\"\n );\n }\n },\n });\n\n // Setup\n Object.assign(def, {\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n function _updatePorts() {\n var ports = [];\n\n const dbCollections = graphModel.getMetaData(\"dbCollections\");\n const systemCollections = graphModel.getMetaData(\"systemCollections\");\n\n const _systemClasses = [\n { label: \"User\", value: \"_User\" },\n { label: \"Role\", value: \"_Role\" },\n ];\n\n const parameters = node.parameters;\n\n ports.push({\n name: \"collectionName\",\n displayName: \"Class\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: _systemClasses.concat(\n dbCollections !== undefined\n ? dbCollections.map((c) => {\n return { value: c.name, label: c.name };\n })\n : []\n ),\n allowEditOnly: true,\n },\n plug: \"input\",\n });\n\n if (_includeRelations && parameters.collectionName && dbCollections) {\n // Fetch ports from collection keys\n var c = dbCollections.find(\n (c) => c.name === parameters.collectionName\n );\n if (c === undefined && systemCollections)\n c = systemCollections.find(\n (c) => c.name === parameters.collectionName\n );\n if (c && c.schema && c.schema.properties) {\n const props = c.schema.properties;\n const enums = Object.keys(props)\n .filter((key) => props[key].type === \"Relation\")\n .map((key) => ({ label: key, value: key }));\n\n ports.push({\n name: \"relationProperty\",\n displayName: \"Relation\",\n group: \"General\",\n type: { name: \"enum\", enums: enums, allowEditOnly: true },\n plug: \"input\",\n });\n }\n }\n\n if (\n _includeInputProperties &&\n parameters.collectionName &&\n dbCollections\n ) {\n const _typeMap = {\n String: \"string\",\n Boolean: \"boolean\",\n Number: \"number\",\n Date: \"date\",\n };\n\n // Fetch ports from collection keys\n var c = dbCollections.find(\n (c) => c.name === parameters.collectionName\n );\n if (c === undefined && systemCollections)\n c = systemCollections.find(\n (c) => c.name === parameters.collectionName\n );\n if (c && c.schema && c.schema.properties) {\n var props = c.schema.properties;\n for (var key in props) {\n var p = props[key];\n if (ports.find((_p) => _p.name === key)) continue;\n\n ports.push({\n type: {\n name: _typeMap[p.type] ? _typeMap[p.type] : \"*\",\n },\n plug: \"input\",\n group: \"Properties\",\n name: \"prop-\" + key,\n displayName: key,\n });\n }\n }\n }\n\n def._additionalDynamicPorts &&\n def._additionalDynamicPorts(node, ports, graphModel);\n\n context.editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n _updatePorts();\n\n node.on(\"parameterUpdated\", function (event) {\n _updatePorts();\n });\n\n graphModel.on(\"metadataChanged.dbCollections\", function (data) {\n CloudStore.invalidateCollections();\n _updatePorts();\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n CloudStore.invalidateCollections();\n _updatePorts();\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.\" + def.node.name, function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(def.node.name)) {\n _managePortsForNode(node);\n }\n });\n },\n });\n}\n\nexport function addModelId(def, opts) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n const _includeInputs = opts === undefined || opts.includeInputs;\n const _includeOutputs = opts === undefined || opts.includeOutputs;\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n if (_includeInputs) {\n Object.assign(def.node, {\n usePortAsLabel: \"collectionName\",\n });\n\n def.node.dynamicports = (def.node.dynamicports || []).concat([\n {\n name: \"conditionalports/extended\",\n condition: \"idSource = explicit OR idSource NOT SET\",\n inputs: [\"modelId\"],\n },\n ]);\n\n // Inputs\n Object.assign(def.node.inputs, {\n idSource: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"Specify explicitly\", value: \"explicit\" },\n { label: \"From repeater\", value: \"foreach\" },\n ],\n allowEditOnly: true,\n },\n default: \"explicit\",\n displayName: \"Id Source\",\n group: \"General\",\n tooltip:\n \"Choose if you want to specify the Id explicitly, \\n or if you want it to be that of the current record in a repeater.\",\n set(value) {\n if (value === \"foreach\") {\n this.scheduleAfterInputsHaveUpdated(() => {\n // Find closest nodescope that have a _forEachModel\n var component = this.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n this.setModel(\n component !== undefined ? component._forEachModel : undefined\n );\n });\n }\n },\n },\n modelId: {\n type: {\n name: \"string\",\n identifierOf: \"ModelName\",\n identifierDisplayName: \"Object Ids\",\n },\n displayName: \"Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) value = value.getId(); // Can be passed as model as well\n this._internal.modelId = value; // Wait to fetch data\n this.setModelID(value);\n },\n },\n });\n }\n\n // Outputs\n if (_includeOutputs) {\n Object.assign(def.node.outputs, {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model\n ? this._internal.model.getId()\n : this._internal.modelId;\n },\n },\n });\n }\n\n // Methods\n Object.assign(def.node.methods, {\n setCollectionID(id) {\n this._internal.collectionId = id;\n this.clearWarnings();\n },\n setModelID(id) {\n var model = (this.nodeScope.modelScope || Model).get(id);\n this.setModel(model);\n },\n setModel(model) {\n this._internal.model = model;\n this.flagOutputDirty(\"id\");\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name === \"collectionName\")\n this.registerInput(name, {\n set: this.setCollectionID.bind(this),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _methods.registerInputIfNeeded.call(this, name);\n },\n });\n}\n\nexport function addInputProperties(def) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n Object.assign(def.node, {\n initialize() {\n var internal = this._internal;\n internal.inputValues = {};\n\n _def.node.initialize && _def.node.initialize.call(this);\n },\n });\n\n // Outputs\n Object.assign(def.node.outputs, {});\n\n // Inputs\n Object.assign(def.node.inputs, {});\n\n // Methods\n Object.assign(def.node.methods, {\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerInput(name, {\n set: this._setInputValue.bind(this, name.substring(\"prop-\".length)),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _methods.registerInputIfNeeded.call(this, name);\n },\n _setInputValue(name, value) {\n this._internal.inputValues[name] = value;\n },\n });\n}\n\nexport function addRelationProperty(def) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n // Inputs\n Object.assign(def.node.inputs, {\n targetId: {\n type: { name: \"string\", allowConnectionsOnly: true },\n displayName: \"Target Record Id\",\n group: \"General\",\n set(value) {\n this._internal.targetModelId = value;\n },\n },\n });\n\n // Methods\n Object.assign(def.node.methods, {\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name === \"relationProperty\")\n this.registerInput(name, {\n set: this.setRelationProperty.bind(this),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _methods.registerInputIfNeeded.call(this, name);\n },\n setRelationProperty(value) {\n this._internal.relationProperty = value;\n },\n });\n}\n\nfunction _getCurrentUser(modelScope) {\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // We are running in browser, try to find the current user\n\n var _cu =\n localStorage[\"Parse/\" + CloudStore.instance.appId + \"/currentUser\"];\n if (_cu !== undefined) {\n let cu;\n try {\n cu = JSON.parse(_cu);\n } catch (e) {}\n\n return cu !== undefined ? cu.objectId : undefined;\n }\n } else {\n // Assume we are running in cloud runtime\n const request = modelScope.get(\"Request\");\n return request.UserId;\n }\n}\n\nexport function addAccessControl(def) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n Object.assign(def.node, {\n initialize() {\n var internal = this._internal;\n internal.accessControl = {};\n\n _def.node.initialize && _def.node.initialize.call(this);\n },\n });\n\n // Inputs\n Object.assign(def.node.inputs, {\n accessControl: {\n type: { name: \"proplist\", autoName: \"Rule\", allowEditOnly: true },\n index: 1000,\n displayName: \"Access Control Rules\",\n group: \"Access Control Rules\",\n set(value) {\n this._internal.accessControlRules = value;\n },\n },\n });\n\n // Dynamic ports\n const _super = def._additionalDynamicPorts;\n def._additionalDynamicPorts = function (node, ports, graphModel) {\n if (\n node.parameters[\"accessControl\"] !== undefined &&\n node.parameters[\"accessControl\"].length > 0\n ) {\n node.parameters[\"accessControl\"].forEach((ac) => {\n const prefix = \"acl-\" + ac.id;\n // User or role?\n ports.push({\n name: prefix + \"-target\",\n displayName: \"Target\",\n editorName: ac.label + \" | Target\",\n plug: \"input\",\n type: {\n name: \"enum\",\n enums: [\n { value: \"user\", label: \"User\" },\n { value: \"everyone\", label: \"Everyone\" },\n { value: \"role\", label: \"Role\" },\n ],\n allowEditOnly: true,\n },\n group: ac.label + \" Access Rule\",\n default: \"user\",\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n\n if (node.parameters[prefix + \"-target\"] === \"role\") {\n ports.push({\n name: prefix + \"-role\",\n displayName: \"Role\",\n editorName: ac.label + \" | Role\",\n group: ac.label + \" Access Rule\",\n plug: \"input\",\n type: \"string\",\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n } else if (\n node.parameters[prefix + \"-target\"] === undefined ||\n node.parameters[prefix + \"-target\"] === \"user\"\n ) {\n ports.push({\n name: prefix + \"-userid\",\n displayName: \"User Id\",\n group: ac.label + \" Access Rule\",\n editorName: ac.label + \" | User Id\",\n plug: \"input\",\n type: { name: \"string\", allowConnectionsOnly: true },\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n }\n\n // Read\n ports.push({\n name: prefix + \"-read\",\n displayName: \"Read\",\n editorName: ac.label + \" | Read\",\n group: ac.label + \" Access Rule\",\n plug: \"input\",\n type: { name: \"boolean\" },\n default: true,\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n\n // Write\n ports.push({\n name: prefix + \"-write\",\n displayName: \"Write\",\n editorName: ac.label + \" | Write\",\n group: ac.label + \" Access Rule\",\n plug: \"input\",\n type: { name: \"boolean\" },\n default: true,\n parent: \"accessControl\",\n parentItemId: ac.id,\n });\n });\n }\n\n _super && _super(node, ports, graphModel);\n };\n\n // Methods\n Object.assign(def.node.methods, {\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"acl-\"))\n this.registerInput(name, {\n set: this.setAccessControl.bind(this, name),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _methods.registerInputIfNeeded.call(this, name);\n },\n _getACL() {\n let acl = {};\n\n function _rule(rule) {\n return {\n read: rule.read === undefined ? true : rule.read,\n write: rule.write === undefined ? true : rule.write,\n };\n }\n\n const currentUserId = _getCurrentUser(this.nodeScope.modelScope);\n\n if (this._internal.accessControlRules !== undefined) {\n this._internal.accessControlRules.forEach((r) => {\n const rule = this._internal.accessControl[r.id];\n\n if (rule === undefined) {\n const userId = currentUserId;\n if (userId !== undefined) acl[userId] = { write: true, read: true };\n } else if (rule.target === \"everyone\") {\n acl[\"*\"] = _rule(rule);\n } else if (rule.target === \"user\") {\n const userId = rule.userid || currentUserId;\n acl[userId] = _rule(rule);\n } else if (rule.target === \"role\") {\n acl[\"role:\" + rule.role] = _rule(rule);\n }\n });\n }\n\n return Object.keys(acl).length > 0 ? acl : undefined;\n },\n setAccessControl(name, value) {\n const _parts = name.split(\"-\");\n\n if (this._internal.accessControl[_parts[1]] === undefined)\n this._internal.accessControl[_parts[1]] = {};\n this._internal.accessControl[_parts[1]][_parts[2]] = value;\n },\n });\n}\n","import * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nconst SetDbModelPropertiedNodeDefinition = {\n node: {\n name: \"SetDbModelProperties\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/set-record-properties\",\n displayNodeName: \"Set Record Properties\",\n usePortAsLabel: \"collectionName\",\n dynamicports: [\n {\n name: \"conditionalports/extended\",\n condition: \"storeType = cloud OR storeType NOT SET\",\n inputs: [\"storeProperties\"],\n },\n ],\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n if (\n this._internal.storeType === undefined ||\n this._internal.storeType === \"cloud\"\n )\n this.scheduleSave();\n else this.scheduleStore();\n },\n },\n storeProperties: {\n displayName: \"Properties to store\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: [\n { label: \"Only specified\", value: \"specified\" },\n { label: \"All\", value: \"all\" },\n ],\n },\n default: \"specified\",\n set(value) {\n this._internal.storeProperties = value;\n },\n },\n storeType: {\n displayName: \"Store to\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: [\n { label: \"Cloud and local\", value: \"cloud\" },\n { label: \"Local only\", value: \"local\" },\n ],\n },\n default: \"cloud\",\n set(value) {\n this._internal.storeType = value;\n },\n },\n },\n outputs: {\n stored: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n scheduleSave() {\n const _this = this;\n const internal = this._internal;\n\n if (!this.checkWarningsBeforeCloudOp()) return;\n\n this.scheduleOnce(\"StorageSave\", function () {\n if (!internal.model) {\n _this.setError(\"Missing Record Id\");\n return;\n }\n\n const model = internal.model;\n for (const key in internal.inputValues) {\n model.set(key, internal.inputValues[key], { resolve: true });\n }\n\n CloudStore.forScope(_this.nodeScope.modelScope).save({\n collection: internal.collectionId,\n objectId: model.getId(), // Get the objectId part of the model id\n data:\n internal.storeProperties === \"all\"\n ? model.data\n : internal.inputValues, // Only store input values by default, if not explicitly specified\n acl: _this._getACL(),\n success(response) {\n for (var key in response) {\n model.set(key, response[key]);\n }\n\n _this.sendSignalOnOutput(\"stored\");\n },\n error(err) {\n _this.setError(err || \"Failed to save.\");\n },\n });\n });\n },\n scheduleStore() {\n if (this.hasScheduledStore) return;\n this.hasScheduledStore = true;\n\n var internal = this._internal;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledStore = false;\n if (!internal.model) return;\n\n for (var i in internal.inputValues) {\n internal.model.set(i, internal.inputValues[i], { resolve: true });\n }\n this.sendSignalOnOutput(\"stored\");\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(SetDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addModelId(SetDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addInputProperties(SetDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addAccessControl(SetDbModelPropertiedNodeDefinition);\n\nexport default SetDbModelPropertiedNodeDefinition;\n","import * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nvar DeleteDbModelPropertiedNodeDefinition = {\n node: {\n name: \"DeleteDbModelProperties\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/delete-record\",\n displayNodeName: \"Delete Record\",\n shortDesc:\n \"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.storageDelete();\n },\n },\n },\n outputs: {\n deleted: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n storageDelete() {\n const _this = this;\n const internal = this._internal;\n\n if (!this.checkWarningsBeforeCloudOp()) return;\n\n this.scheduleOnce(\"StorageDelete\", function () {\n if (!internal.model) {\n _this.setError(\"Missing Record Id\");\n return;\n }\n\n CloudStore.forScope(_this.nodeScope.ModelScope).delete({\n collection: internal.collectionId,\n objectId: internal.model.getId(), // Get the objectId part of the model id,\n success() {\n internal.model.notify(\"delete\"); // Notify that this model has been deleted\n _this.sendSignalOnOutput(\"deleted\");\n },\n error(err) {\n _this.setError(err || \"Failed to delete.\");\n },\n });\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(DeleteDbModelPropertiedNodeDefinition, {\n includeInputProperties: false,\n});\nDbModelCRUDBase.addModelId(DeleteDbModelPropertiedNodeDefinition);\n\nexport default DeleteDbModelPropertiedNodeDefinition;\n","import { Model } from \"../../../model\";\nimport * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nvar NewDbModelPropertiedNodeDefinition = {\n node: {\n name: \"NewDbModelProperties\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/create-new-record\",\n displayName: \"Create New Record\",\n usePortAsLabel: \"collectionName\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.storageInsert();\n },\n },\n sourceObjectId: {\n type: { name: \"string\", allowConnectionsOnly: true },\n displayName: \"Source Object Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) value = value.getId(); // Can be passed as model as well\n this._internal.sourceObjectId = value; // Wait to fetch data\n },\n },\n },\n outputs: {\n created: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n storageInsert() {\n const internal = this._internal;\n\n if (!this.checkWarningsBeforeCloudOp()) return;\n\n this.scheduleOnce(\"StorageInsert\", () => {\n const initValues = Object.assign(\n {},\n internal.sourceObjectId\n ? (this.nodeScope.modelScope || Model).get(\n internal.sourceObjectId\n ).data\n : {},\n internal.inputValues\n );\n\n const cloudstore = CloudStore.forScope(this.nodeScope.modelScope);\n cloudstore.create({\n collection: internal.collectionId,\n data: initValues,\n acl: this._getACL(),\n success: (data) => {\n // Successfully created\n const m = cloudstore._fromJSON(data, internal.collectionId);\n this.setModel(m);\n this.sendSignalOnOutput(\"created\");\n },\n error: (err) => {\n this.setError(err || \"Failed to insert.\");\n },\n });\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(NewDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addModelId(NewDbModelPropertiedNodeDefinition, {\n includeOutputs: true,\n});\nDbModelCRUDBase.addInputProperties(NewDbModelPropertiedNodeDefinition);\nDbModelCRUDBase.addAccessControl(NewDbModelPropertiedNodeDefinition);\n\nexport default NewDbModelPropertiedNodeDefinition;\n","import { Model } from \"../../../model\";\nimport * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nvar AddDbModelRelationNodeDefinition = {\n node: {\n name: \"AddDbModelRelation\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/add-record-relation\",\n displayNodeName: \"Add Record Relation\",\n usePortAsLabel: \"collectionName\",\n // shortDesc: \"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleAddRelation();\n },\n },\n },\n outputs: {\n relationAdded: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n validateInputs() {\n if (!this.context.editorConnection) return;\n\n const _warning = (message) => {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"add-relation\",\n {\n message,\n }\n );\n };\n\n if (this._internal.collectionId === undefined) {\n _warning(\"No class specified\");\n } else if (this._internal.relationProperty === undefined) {\n _warning(\"No relation property specified\");\n } else if (this._internal.targetModelId === undefined) {\n _warning(\n \"No target record Id (the record to add a relation to) specified\"\n );\n } else if (this._internal.model === undefined) {\n _warning(\n \"No record Id specified (the record that should get the relation)\"\n );\n } else {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"add-relation\"\n );\n }\n },\n scheduleAddRelation(key) {\n const _this = this;\n const internal = this._internal;\n\n this.scheduleOnce(\"StorageAddRelation\", function () {\n _this.validateInputs();\n\n if (!internal.model) return;\n var model = internal.model;\n\n var targetModelId = internal.targetModelId;\n if (targetModelId === undefined) return;\n\n CloudStore.forScope(_this.nodeScope.modelScope).addRelation({\n collection: internal.collectionId,\n objectId: model.getId(),\n key: internal.relationProperty,\n targetObjectId: targetModelId,\n targetClass: (_this.nodeScope.modelScope || Model).get(\n targetModelId\n )._class,\n success(response) {\n for (var _key in response) {\n model.set(_key, response[_key]);\n }\n\n // Successfully added relation\n _this.sendSignalOnOutput(\"relationAdded\");\n },\n error(err) {\n _this.setError(err || \"Failed to add relation.\");\n },\n });\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(AddDbModelRelationNodeDefinition, {\n includeRelations: true,\n});\nDbModelCRUDBase.addModelId(AddDbModelRelationNodeDefinition);\nDbModelCRUDBase.addRelationProperty(AddDbModelRelationNodeDefinition);\n\nexport default AddDbModelRelationNodeDefinition;\n","import { Model } from \"../../../model\";\nimport * as DbModelCRUDBase from \"./dbmodelcrudbase\";\nimport { CloudStore } from \"../../../api/cloudstore\";\n\nvar AddDbModelRelationNodeDefinition = {\n node: {\n name: \"RemoveDbModelRelation\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/remove-record-relation\",\n displayName: \"Remove Record Relation\",\n usePortAsLabel: \"collectionName\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleRemoveRelation();\n },\n },\n },\n outputs: {\n relationRemoved: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n },\n methods: {\n validateInputs() {\n if (!this.context.editorConnection) return;\n\n const _warning = (message) => {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"add-relation\",\n {\n message,\n }\n );\n };\n\n if (this._internal.collectionId === undefined) {\n _warning(\"No class specified\");\n } else if (this._internal.relationProperty === undefined) {\n _warning(\"No relation property specified\");\n } else if (this._internal.targetModelId === undefined) {\n _warning(\n \"No target record Id (the record to add a relation to) specified\"\n );\n } else if (this._internal.model === undefined) {\n _warning(\n \"No record Id specified (the record that should get the relation)\"\n );\n } else {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"add-relation\"\n );\n }\n },\n scheduleRemoveRelation(key) {\n const _this = this;\n const internal = this._internal;\n\n this.scheduleOnce(\"StorageRemoveRelation\", function () {\n _this.validateInputs();\n\n if (!internal.model) return;\n var model = internal.model;\n\n var targetModelId = internal.targetModelId;\n if (targetModelId === undefined) return;\n\n CloudStore.forScope(_this.nodeScope.modelScope).removeRelation({\n collection: internal.collectionId,\n objectId: model.getId(),\n key: internal.relationProperty,\n targetObjectId: targetModelId,\n targetClass: (_this.nodeScope.modelScope || Model).get(\n targetModelId\n )._class,\n success(response) {\n for (var _key in response) {\n model.set(_key, response[_key]);\n }\n\n // Successfully removed relation\n _this.sendSignalOnOutput(\"relationRemoved\");\n },\n error(err) {\n _this.setError(err || \"Failed to remove relation.\");\n },\n });\n });\n },\n },\n },\n};\n\nDbModelCRUDBase.addBaseInfo(AddDbModelRelationNodeDefinition, {\n includeRelations: true,\n});\nDbModelCRUDBase.addModelId(AddDbModelRelationNodeDefinition);\nDbModelCRUDBase.addRelationProperty(AddDbModelRelationNodeDefinition);\n\nexport default AddDbModelRelationNodeDefinition;\n","import { Node } from \"../../../node\";\nimport { Collection } from \"../../../collection\";\nimport { Model } from \"../../../model\";\nimport { CloudStore } from \"../../../api/cloudstore\";\nimport * as QueryUtils from \"../../../api/queryutils\";\n\nvar FilterDBModelsNode = {\n name: \"FilterDBModels\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/filter-records\",\n displayNodeName: \"Filter Records\",\n shortDesc: \"Filter, sort and limit array\",\n category: \"Data\",\n color: \"data\",\n initialize() {\n var _this = this;\n\n this._internal.collectionChangedCallback = function () {\n if (_this.isInputConnected(\"filter\") === true) return;\n\n _this.scheduleFilter();\n };\n\n this._internal.cloudStoreEvents = function (args) {\n if (_this.isInputConnected(\"filter\") === true) return;\n\n if (_this._internal.visualFilter === undefined) return;\n if (_this._internal.collection === undefined) return;\n if (args.collection !== _this._internal.collectionName) return;\n\n if (\n args.objectId !== undefined &&\n _this._internal.collection.contains(Model.get(args.objectId))\n )\n _this.scheduleFilter();\n };\n\n CloudStore.instance.on(\"save\", this._internal.cloudStoreEvents);\n\n this._internal.enabled = true;\n this._internal.filterSettings = {};\n this._internal.filterParameters = {};\n // this._internal.filteredCollection = Collection.get();\n },\n getInspectInfo() {\n const collection = this._internal.filteredCollection;\n\n if (!collection) {\n return { type: \"text\", value: \"[Not executed yet]\" };\n }\n\n return [\n {\n type: \"text\",\n value: \"Id: \" + collection.getId(),\n },\n {\n type: \"value\",\n value: collection.items,\n },\n ];\n },\n inputs: {\n items: {\n type: \"array\",\n displayName: \"Items\",\n group: \"General\",\n set(value) {\n this.bindCollection(value);\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n },\n enabled: {\n type: \"boolean\",\n group: \"General\",\n displayName: \"Enabled\",\n default: true,\n set(value) {\n this._internal.enabled = value;\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n },\n filter: {\n type: \"signal\",\n group: \"Actions\",\n displayName: \"Filter\",\n valueChangedToTrue() {\n this.scheduleFilter();\n },\n },\n },\n outputs: {\n items: {\n type: \"array\",\n displayName: \"Items\",\n group: \"General\",\n getter() {\n return this._internal.filteredCollection;\n },\n },\n firstItemId: {\n type: \"string\",\n displayName: \"First Record Id\",\n group: \"General\",\n getter() {\n if (this._internal.filteredCollection !== undefined) {\n const firstItem = this._internal.filteredCollection.get(0);\n if (firstItem !== undefined) return firstItem.getId();\n }\n },\n },\n /* firstItem:{\n type: 'object',\n displayName: 'First Item',\n group: 'General',\n getter() {\n if(this._internal.filteredCollection !== undefined) {\n return this._internal.filteredCollection.get(0);\n }\n } \n }, */\n count: {\n type: \"number\",\n displayName: \"Count\",\n group: \"General\",\n getter() {\n return this._internal.filteredCollection\n ? this._internal.filteredCollection.size()\n : 0;\n },\n },\n modified: {\n group: \"Events\",\n type: \"signal\",\n displayName: \"Filtered\",\n },\n },\n prototypeExtensions: {\n unbindCurrentCollection() {\n var collection = this._internal.collection;\n if (!collection) return;\n collection.off(\"change\", this._internal.collectionChangedCallback);\n this._internal.collection = undefined;\n },\n bindCollection(collection) {\n this.unbindCurrentCollection();\n this._internal.collection = collection;\n collection &&\n collection.on(\"change\", this._internal.collectionChangedCallback);\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n this.unbindCurrentCollection();\n\n CloudStore.instance.off(\"save\", this._internal.cloudStoreEvents);\n },\n /* getFilter() {\n const filterSettings = this._internal.filterSettings;\n\n const options = ['case'] // List all supported options here\n\n if (filterSettings['filterFilter']) {\n const filters = filterSettings['filterFilter'].split(',');\n var _filter = {};\n filters.forEach(function (f) {\n var op = '$' + (filterSettings['filterFilterOp-' + f] || 'eq');\n _filter[f] = {};\n _filter[f][op] = filterSettings['filterFilterValue-' + f];\n\n options.forEach((o) => {\n var option = filterSettings['filterFilterOption-' + o + '-' + f];\n if(option) _filter[f]['$' + o] = option\n })\n })\n return _filter;\n }\n },\n getSort: function() {\n const filterSettings = this._internal.filterSettings;\n\n if (filterSettings['filterSort']) {\n const sort = filterSettings['filterSort'].split(',');\n var _sort = {};\n sort.forEach(function (s) {\n _sort[s] = filterSettings['filterSort-'+s] === 'descending'?-1:1;\n })\n return _sort;\n }\n },*/\n getLimit() {\n const filterSettings = this._internal.filterSettings;\n\n if (!filterSettings[\"filterEnableLimit\"]) return;\n else return filterSettings[\"filterLimit\"] || 10;\n },\n getSkip() {\n const filterSettings = this._internal.filterSettings;\n\n if (!filterSettings[\"filterEnableLimit\"]) return;\n else return filterSettings[\"filterSkip\"] || 0;\n },\n scheduleFilter() {\n if (this.collectionChangedScheduled) return;\n this.collectionChangedScheduled = true;\n\n this.scheduleAfterInputsHaveUpdated(() => {\n this.collectionChangedScheduled = false;\n if (!this._internal.collection) return;\n\n // Apply filter and write to output collection\n var filtered = [].concat(this._internal.collection.items);\n\n if (this._internal.enabled) {\n const _filter = this._internal.visualFilter;\n if (_filter !== undefined) {\n var filter = QueryUtils.convertVisualFilter(_filter, {\n queryParameters: this._internal.filterParameters,\n collectionName: this._internal.collectionName,\n });\n if (filter)\n filtered = filtered.filter((m) =>\n QueryUtils.matchesQuery(m, filter)\n );\n }\n\n var _sort = this._internal.visualSorting;\n if (_sort !== undefined && _sort.length > 0) {\n var sort = QueryUtils.convertVisualSorting(_sort);\n }\n if (sort) filtered.sort(QueryUtils.compareObjects.bind(this, sort));\n\n var skip = this.getSkip();\n if (skip) filtered = filtered.slice(skip, filtered.length);\n\n var limit = this.getLimit();\n if (limit) filtered = filtered.slice(0, limit);\n }\n\n this._internal.filteredCollection = Collection.create(filtered);\n\n this.sendSignalOnOutput(\"modified\");\n this.flagOutputDirty(\"firstItemId\");\n this.flagOutputDirty(\"items\");\n this.flagOutputDirty(\"count\");\n });\n },\n setCollectionName(name) {\n this._internal.collectionName = name;\n },\n setVisualFilter(value) {\n this._internal.visualFilter = value;\n\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n setVisualSorting(value) {\n this._internal.visualSorting = value;\n\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n setFilterParameter(name, value) {\n this._internal.filterParameters[name] = value;\n\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n },\n registerInputIfNeeded(name) {\n var _this = this;\n\n if (this.hasInput(name)) {\n return;\n }\n\n if (name === \"collectionName\")\n return this.registerInput(name, {\n set: this.setCollectionName.bind(this),\n });\n\n if (name === \"visualFilter\")\n return this.registerInput(name, {\n set: this.setVisualFilter.bind(this),\n });\n\n if (name === \"visualSorting\")\n return this.registerInput(name, {\n set: this.setVisualSorting.bind(this),\n });\n\n if (name.startsWith(\"fp-\"))\n return this.registerInput(name, {\n set: this.setFilterParameter.bind(this, name.substring(\"fp-\".length)),\n });\n\n this.registerInput(name, {\n set: userInputSetter.bind(this, name),\n });\n },\n },\n};\n\nfunction userInputSetter(name, value) {\n /* jshint validthis:true */\n this._internal.filterSettings[name] = value;\n if (this.isInputConnected(\"filter\") === false) this.scheduleFilter();\n}\n\nfunction updatePorts(nodeId, parameters, editorConnection, dbCollections) {\n var ports = [];\n\n ports.push({\n name: \"collectionName\",\n type: {\n name: \"enum\",\n enums:\n dbCollections !== undefined\n ? dbCollections.map((c) => {\n return { value: c.name, label: c.name };\n })\n : [],\n allowEditOnly: true,\n },\n displayName: \"Class\",\n plug: \"input\",\n group: \"General\",\n });\n\n ports.push({\n type: \"boolean\",\n plug: \"input\",\n group: \"Limit\",\n name: \"filterEnableLimit\",\n displayName: \"Use limit\",\n });\n\n if (parameters[\"filterEnableLimit\"]) {\n ports.push({\n type: \"number\",\n default: 10,\n plug: \"input\",\n group: \"Limit\",\n name: \"filterLimit\",\n displayName: \"Limit\",\n });\n\n ports.push({\n type: \"number\",\n default: 0,\n plug: \"input\",\n group: \"Limit\",\n name: \"filterSkip\",\n displayName: \"Skip\",\n });\n }\n\n if (parameters.collectionName !== undefined) {\n var c = dbCollections.find((c) => c.name === parameters.collectionName);\n if (c && c.schema && c.schema.properties) {\n const schema = JSON.parse(JSON.stringify(c.schema));\n\n const _supportedTypes = {\n Boolean: true,\n String: true,\n Date: true,\n Number: true,\n Pointer: true,\n };\n for (var key in schema.properties) {\n if (!_supportedTypes[schema.properties[key].type])\n delete schema.properties[key];\n }\n\n ports.push({\n name: \"visualFilter\",\n plug: \"input\",\n type: { name: \"query-filter\", schema: schema, allowEditOnly: true },\n displayName: \"Filter\",\n group: \"Filter\",\n });\n\n ports.push({\n name: \"visualSorting\",\n plug: \"input\",\n type: { name: \"query-sorting\", schema: schema, allowEditOnly: true },\n displayName: \"Sorting\",\n group: \"Sorting\",\n });\n }\n\n if (parameters.visualFilter !== undefined) {\n // Find all input ports\n const uniqueInputs = {};\n function _collectInputs(query) {\n if (query === undefined) return;\n if (query.rules !== undefined)\n query.rules.forEach((r) => _collectInputs(r));\n else if (query.input !== undefined) uniqueInputs[query.input] = true;\n }\n\n _collectInputs(parameters.visualFilter);\n Object.keys(uniqueInputs).forEach((input) => {\n ports.push({\n name: \"fp-\" + input,\n plug: \"input\",\n type: \"*\",\n displayName: input,\n group: \"Filter Parameters\",\n });\n });\n }\n }\n\n /* ports.push({\n type: { name: 'stringlist', allowEditOnly: true },\n plug: 'input',\n group: 'Filter',\n name: 'filterFilter',\n displayName: 'Filter',\n })\n\n ports.push({\n type: { name: 'stringlist', allowEditOnly: true },\n plug: 'input',\n group: 'Sort',\n name: 'filterSort',\n displayName: 'Sort',\n }) \n\n const filterOps = {\n \"string\": [{ value: 'eq', label: 'Equals' }, { value: 'neq', label: 'Not Equals' },{value: 'regex', label: 'Matches RegEx'}],\n \"boolean\": [{ value: 'eq', label: 'Equals' }, { value: 'neq', label: 'Not Equals' }],\n \"number\": [{ value: 'eq', label: 'Equals' }, { value: 'neq', label: 'Not Equals' }, { value: 'lt', label: 'Less than' }, { value: 'gt', label: 'Greater than' },\n { value: 'gte', label: 'Greater than or equal' }, { value: 'lte', label: 'Less than or equal' }]\n }\n\n if (parameters['filterFilter']) {\n var filters = parameters['filterFilter'].split(',');\n filters.forEach((f) => {\n // Type\n ports.push({\n type: { name: 'enum', enums: [{ value: 'string', label: 'String' }, { value: 'number', label: 'Number' }, { value: 'boolean', label: 'Boolean' }] },\n default: 'string',\n plug: 'input',\n group: f + ' filter',\n displayName: 'Type',\n editorName: f + ' filter | Type',\n name: 'filterFilterType-' + f\n })\n\n var type = parameters['filterFilterType-' + f];\n\n // String filter type\n ports.push({\n type: { name: 'enum', enums: filterOps[type || 'string'] },\n default: 'eq',\n plug: 'input',\n group: f + ' filter',\n displayName: 'Op',\n editorName: f + ' filter| Op',\n name: 'filterFilterOp-' + f\n })\n\n // Case sensitivite option\n if(parameters['filterFilterOp-' + f] === 'regex') {\n ports.push({\n type: 'boolean',\n default: false,\n plug: 'input',\n group: f + ' filter',\n displayName: 'Case sensitive',\n editorName: f + ' filter| Case',\n name: 'filterFilterOption-case-' + f\n })\n }\n\n ports.push({\n type: type || 'string',\n plug: 'input',\n group: f + ' filter',\n displayName: 'Value',\n editorName: f + ' Filter Value',\n name: 'filterFilterValue-' + f\n })\n\n })\n }\n\n if (parameters['filterSort']) {\n var filters = parameters['filterSort'].split(',');\n filters.forEach((f) => {\n ports.push({\n type: { name: 'enum', enums: [{ value: 'ascending', label: 'Ascending' }, { value: 'descending', label: 'Descending' }] },\n default: 'ascending',\n plug: 'input',\n group: f + ' sort',\n displayName: 'Sort',\n editorName: f + ' sorting',\n name: 'filterSort-' + f\n })\n })\n }*/\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: FilterDBModelsNode,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.FilterDBModels\", function (node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"dbCollections\")\n );\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"dbCollections\")\n );\n });\n\n graphModel.on(\"metadataChanged.dbCollections\", function (data) {\n CloudStore.invalidateCollections();\n updatePorts(node.id, node.parameters, context.editorConnection, data);\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n CloudStore.invalidateCollections();\n updatePorts(node.id, node.parameters, context.editorConnection, data);\n });\n });\n },\n};\n","import { Node } from \"../../../node\";\nimport { Model } from \"../../../model\";\n\nvar ModelNodeDefinition = {\n name: \"Model2\",\n docs: \"https://docs.noodl.net/nodes/data/object/object-node\",\n displayNodeName: \"Object\",\n shortDesc:\n \"Stores any amount of properties and can be used standalone or together with Collections and For Each nodes.\",\n category: \"Data\",\n usePortAsLabel: \"modelId\",\n color: \"data\",\n dynamicports: [\n {\n name: \"conditionalports/extended\",\n condition: \"idSource = explicit OR idSource NOT SET\",\n inputs: [\"modelId\"],\n },\n ],\n initialize() {\n var internal = this._internal;\n internal.inputValues = {};\n internal.dirtyValues = {};\n\n var _this = this;\n this._internal.onModelChangedCallback = function (args) {\n if (_this.isInputConnected(\"fetch\") === true) return;\n\n if (_this.hasOutput(\"prop-\" + args.name))\n _this.flagOutputDirty(\"prop-\" + args.name);\n\n if (_this.hasOutput(\"changed-\" + args.name))\n _this.sendSignalOnOutput(\"changed-\" + args.name);\n\n _this.sendSignalOnOutput(\"changed\");\n };\n },\n getInspectInfo() {\n const model = this._internal.model;\n if (!model) return \"[No Object]\";\n\n return [\n { type: \"text\", value: \"Id: \" + model.getId() },\n { type: \"value\", value: model.data },\n ];\n },\n outputs: {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model\n ? this._internal.model.getId()\n : this._internal.modelId;\n },\n },\n changed: {\n type: \"signal\",\n displayName: \"Changed\",\n group: \"Events\",\n },\n fetched: {\n type: \"signal\",\n displayName: \"Fetched\",\n group: \"Events\",\n },\n },\n inputs: {\n idSource: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"Specify explicitly\", value: \"explicit\" },\n { label: \"From repeater\", value: \"foreach\" },\n ],\n allowEditOnly: true,\n },\n default: \"explicit\",\n displayName: \"Get Id from\",\n group: \"General\",\n set(value) {\n if (value === \"foreach\") {\n this.scheduleAfterInputsHaveUpdated(() => {\n // Find closest nodescope that have a _forEachModel\n var component = this.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n this.setModel(\n component !== undefined ? component._forEachModel : undefined\n );\n });\n }\n },\n },\n modelId: {\n type: {\n name: \"string\",\n identifierOf: \"ModelName\",\n identifierDisplayName: \"Object Ids\",\n },\n displayName: \"Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) value = value.getId();\n // Can be passed as model as well\n else if (typeof value === \"object\") value = Model.create(value).getId(); // If this is an js object, dereference it\n\n this._internal.modelId = value; // Wait to fetch data\n if (this.isInputConnected(\"fetch\") === false) this.setModelID(value);\n else {\n this.flagOutputDirty(\"id\");\n }\n },\n },\n properties: {\n type: { name: \"stringlist\", allowEditOnly: true },\n displayName: \"Properties\",\n group: \"Properties\",\n set(value) {},\n },\n fetch: {\n displayName: \"Fetch\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleSetModel();\n },\n },\n },\n prototypeExtensions: {\n scheduleStore() {\n if (this.hasScheduledStore) return;\n this.hasScheduledStore = true;\n\n var internal = this._internal;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledStore = false;\n if (!internal.model) return;\n\n for (var i in internal.dirtyValues) {\n internal.model.set(i, internal.inputValues[i], { resolve: true });\n }\n internal.dirtyValues = {}; // Reset dirty values\n });\n },\n scheduleSetModel() {\n if (this.hasScheduledSetModel) return;\n this.hasScheduledSetModel = true;\n\n var internal = this._internal;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledSetModel = false;\n this.setModelID(this._internal.modelId);\n });\n },\n setModelID(id) {\n var model = (this.nodeScope.modelScope || Model).get(id);\n this.setModel(model);\n this.sendSignalOnOutput(\"fetched\");\n },\n setModel(model) {\n if (this._internal.model)\n // Remove old listener if existing\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n\n this._internal.model = model;\n this.flagOutputDirty(\"id\");\n\n // In set idSource, we are calling setModel with undefined\n if (model) {\n model.on(\"change\", this._internal.onModelChangedCallback);\n\n // We have a new model, mark all outputs as dirty\n for (var key in model.data) {\n if (this.hasOutput(\"prop-\" + key))\n this.flagOutputDirty(\"prop-\" + key);\n }\n }\n },\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n if (this._internal.model)\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerOutput(name, {\n getter: userOutputGetter.bind(this, name.substring(\"prop-\".length)),\n });\n },\n registerInputIfNeeded(name) {\n var _this = this;\n\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerInput(name, {\n set: userInputSetter.bind(this, name.substring(\"prop-\".length)),\n });\n },\n },\n};\n\nfunction userOutputGetter(name) {\n /* jshint validthis:true */\n return this._internal.model\n ? this._internal.model.get(name, { resolve: true })\n : undefined;\n}\n\nfunction userInputSetter(name, value) {\n /* jshint validthis:true */\n this._internal.inputValues[name] = value;\n\n // Store on change if no connection to store or new\n const model = this._internal.model;\n const valueChanged = model ? model.get(name) !== value : true;\n if (valueChanged) {\n this._internal.dirtyValues[name] = true;\n this.scheduleStore();\n }\n}\n\nfunction updatePorts(nodeId, parameters, editorConnection) {\n var ports = [];\n\n // Add value outputs\n var properties = parameters.properties;\n if (properties) {\n properties = properties ? properties.split(\",\") : undefined;\n for (var i in properties) {\n var p = properties[i];\n\n ports.push({\n type: {\n name: \"*\",\n allowConnectionsOnly: true,\n },\n plug: \"input/output\",\n group: \"Properties\",\n name: \"prop-\" + p,\n displayName: p,\n });\n\n ports.push({\n type: \"signal\",\n plug: \"output\",\n group: \"Changed Events\",\n displayName: p + \" Changed\",\n name: \"changed-\" + p,\n });\n }\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports, {\n detectRenamed: {\n plug: \"input/output\",\n },\n });\n}\n\nexport default {\n node: ModelNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.Model2\", function (node) {\n updatePorts(node.id, node.parameters, context.editorConnection);\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(node.id, node.parameters, context.editorConnection);\n });\n });\n },\n};\n","import { Collection } from \"../../../collection\";\nimport { Model } from \"../../../model\";\n\nexport function addBaseInfo(def) {\n Object.assign(def.node, {\n category: \"Data\",\n color: \"data\",\n });\n}\n\nexport function addModelId(def, opts) {\n const _includeInputs = opts === undefined || opts.includeInputs;\n const _includeOutputs = opts === undefined || opts.includeOutputs;\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n if (_includeInputs) {\n Object.assign(def.node, {\n usePortAsLabel: \"modelId\",\n });\n\n def.node.dynamicports = (def.node.dynamicports || []).concat([\n {\n name: \"conditionalports/extended\",\n condition: \"idSource = explicit OR idSource NOT SET\",\n inputs: [\"modelId\"],\n },\n ]);\n\n // Inputs\n Object.assign(def.node.inputs, {\n idSource: {\n type: {\n name: \"enum\",\n enums: [\n { label: \"Specify explicitly\", value: \"explicit\" },\n { label: \"From repeater\", value: \"foreach\" },\n ],\n allowEditOnly: true,\n },\n default: \"explicit\",\n displayName: \"Id Source\",\n group: \"General\",\n set(value) {\n if (value === \"foreach\") {\n this.scheduleAfterInputsHaveUpdated(() => {\n // Find closest nodescope that have a _forEachModel\n var component = this.nodeScope.componentOwner;\n while (\n component !== undefined &&\n component._forEachModel === undefined &&\n component.parentNodeScope\n ) {\n component = component.parentNodeScope.componentOwner;\n }\n this.setModel(\n component !== undefined ? component._forEachModel : undefined\n );\n });\n }\n },\n },\n modelId: {\n type: {\n name: \"string\",\n identifierOf: \"ModelName\",\n identifierDisplayName: \"Object Ids\",\n },\n displayName: \"Id\",\n group: \"General\",\n set(value) {\n if (value instanceof Model) value = value.getId(); // Can be passed as model as well\n this._internal.modelId = value; // Wait to fetch data\n this.setModelID(value);\n },\n },\n });\n }\n\n // Outputs\n if (_includeOutputs) {\n Object.assign(def.node.outputs, {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model\n ? this._internal.model.getId()\n : this._internal.modelId;\n },\n },\n });\n }\n\n // Methods\n Object.assign(def.node.methods, {\n setModelID(id) {\n var model = (this.nodeScope.modelScope || Model).get(id);\n this.setModel(model);\n },\n setModel(model) {\n this._internal.model = model;\n this.flagOutputDirty(\"id\");\n },\n });\n\n //Inspect model\n if (!def.node.getInspectInfo) {\n def.node.getInspectInfo = function () {\n const model = this._internal.model;\n if (!model) return \"[No Object]\";\n\n return [\n { type: \"text\", value: \"Id: \" + model.getId() },\n { type: \"value\", value: model.data },\n ];\n };\n }\n}\n\nexport function addInputProperties(def) {\n var _def = { node: Object.assign({}, def.node), setup: def.setup };\n var _methods = Object.assign({}, def.node.methods);\n\n Object.assign(def.node, {\n inputs: def.node.inputs || {},\n outputs: def.node.outputs || {},\n methods: def.node.methods || {},\n });\n\n Object.assign(def, {\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.\" + def.node.name, function (node) {\n function _updatePorts() {\n var ports = [];\n\n const _types = [\n { label: \"String\", value: \"string\" },\n { label: \"Boolean\", value: \"boolean\" },\n { label: \"Number\", value: \"number\" },\n { label: \"Date\", value: \"date\" },\n { label: \"Array\", value: \"array\" },\n { label: \"Object\", value: \"object\" },\n { label: \"Any\", value: \"*\" },\n ];\n\n // Add value outputs\n var properties = node.parameters.properties;\n if (properties) {\n properties = properties ? properties.split(\",\") : undefined;\n for (var i in properties) {\n var p = properties[i];\n\n // Property input\n ports.push({\n type: {\n name:\n node.parameters[\"type-\" + p] === undefined\n ? \"*\"\n : node.parameters[\"type-\" + p],\n },\n plug: \"input\",\n group: \"Property Values\",\n displayName: p,\n // editorName:p,\n name: \"prop-\" + p,\n });\n\n // Property type\n ports.push({\n type: {\n name: \"enum\",\n enums: _types,\n allowEditOnly: true,\n },\n plug: \"input\",\n group: \"Property Types\",\n displayName: p,\n default: \"*\",\n name: \"type-\" + p,\n });\n }\n }\n\n context.editorConnection.sendDynamicPorts(node.id, ports, {\n detectRenamed: {\n plug: \"input\",\n },\n });\n }\n\n _updatePorts();\n\n node.on(\"parameterUpdated\", function (event) {\n _updatePorts();\n });\n });\n\n _def.setup && _def.setup(context, graphModel);\n },\n });\n\n // Initilize\n Object.assign(def.node, {\n initialize() {\n var internal = this._internal;\n internal.inputValues = {};\n internal.inputTypes = {};\n\n _def.node.initialize && _def.node.initialize.call(this);\n },\n });\n\n // Outputs\n Object.assign(def.node.outputs, {});\n\n // Inputs\n Object.assign(def.node.inputs, {\n properties: {\n type: { name: \"stringlist\", allowEditOnly: true },\n displayName: \"Properties\",\n group: \"Properties to set\",\n set(value) {},\n },\n });\n\n // Methods\n Object.assign(def.node.methods, {\n _pushInputValues(model) {\n var internal = this._internal;\n\n const _defaultValueForType = {\n boolean: false,\n string: \"\",\n number: 0,\n date: new Date(),\n };\n\n const _allKeys = {};\n for (const key in internal.inputTypes) _allKeys[key] = true;\n for (const key in internal.inputValues) _allKeys[key] = true;\n\n const properties = this.model.parameters.properties || \"\";\n\n const validProperties = properties.split(\",\");\n\n const keysToSet = Object.keys(_allKeys).filter(\n (key) => validProperties.indexOf(key) !== -1\n );\n\n for (const i of keysToSet) {\n var value = internal.inputValues[i];\n\n if (value !== undefined) {\n //Parse array types with string as javascript\n if (\n internal.inputTypes[i] !== undefined &&\n internal.inputTypes[i] === \"array\" &&\n typeof value === \"string\"\n ) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"invalid-array-\" + i\n );\n\n try {\n value = eval(value); //this might be static data in the form of javascript\n } catch (e) {\n if (value.indexOf(\"[\") !== -1 || value.indexOf(\"{\") !== -1) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"invalid-array-\" + i,\n {\n showGlobally: true,\n message: \"Invalid array<br>\" + e.toString(),\n }\n );\n value = [];\n } else {\n //backwards compability with how this node used to work\n value = Collection.get(value);\n }\n }\n }\n // Resolve object from IDs\n if (\n internal.inputTypes[i] !== undefined &&\n internal.inputTypes[i] === \"object\" &&\n typeof value === \"string\"\n ) {\n value = (this.nodeScope.modelScope || Model).get(value);\n }\n\n model.set(i, value, { resolve: true });\n } else {\n model.set(i, _defaultValueForType[internal.inputTypes[i]], {\n resolve: true,\n });\n }\n }\n },\n scheduleStore() {\n if (this.hasScheduledStore) return;\n this.hasScheduledStore = true;\n\n var internal = this._internal;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledStore = false;\n if (!internal.model) return;\n\n this._pushInputValues(internal.model);\n\n this.sendSignalOnOutput(\"stored\");\n });\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerInput(name, {\n set: this._setInputValue.bind(this, name.substring(\"prop-\".length)),\n });\n\n if (name.startsWith(\"type-\"))\n this.registerInput(name, {\n set: this._setInputType.bind(this, name.substring(\"type-\".length)),\n });\n\n _methods &&\n _methods.registerInputIfNeeded &&\n _def.node.methods.registerInputIfNeeded.call(this, name);\n },\n _setInputValue(name, value) {\n this._internal.inputValues[name] = value;\n },\n _setInputType(name, value) {\n this._internal.inputTypes[name] = value;\n },\n });\n}\n","import * as ModelCRUDBase from \"./modelcrudbase\";\n\nvar SetModelPropertiedNodeDefinition = {\n node: {\n name: \"SetModelProperties\",\n docs: \"https://docs.noodl.net/nodes/data/object/set-object-properties\",\n displayNodeName: \"Set Object Properties\",\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleStore();\n },\n },\n },\n outputs: {\n stored: {\n type: \"signal\",\n displayName: \"Done\",\n group: \"Events\",\n },\n },\n },\n};\n\nModelCRUDBase.addBaseInfo(SetModelPropertiedNodeDefinition);\nModelCRUDBase.addModelId(SetModelPropertiedNodeDefinition);\nModelCRUDBase.addInputProperties(SetModelPropertiedNodeDefinition);\n\nexport default SetModelPropertiedNodeDefinition;\n","import { Model } from \"../../../model\";\nimport * as ModelCRUDBase from \"./modelcrudbase\";\n\nvar NewModelNodeDefinition = {\n node: {\n name: \"NewModel\",\n docs: \"https://docs.noodl.net/nodes/data/object/create-new-object\",\n displayNodeName: \"Create New Object\",\n inputs: {\n new: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleNew();\n },\n },\n },\n outputs: {\n created: {\n type: \"signal\",\n displayName: \"Done\",\n group: \"Events\",\n },\n },\n methods: {\n scheduleNew() {\n if (this.hasScheduledNew) return;\n this.hasScheduledNew = true;\n\n this.scheduleAfterInputsHaveUpdated(() => {\n this.hasScheduledNew = false;\n const newModel = (this.nodeScope.modelScope || Model).get();\n\n this._pushInputValues(newModel);\n\n this.setModel(newModel);\n\n this.sendSignalOnOutput(\"created\");\n });\n },\n },\n },\n};\n\nModelCRUDBase.addBaseInfo(NewModelNodeDefinition);\nModelCRUDBase.addModelId(NewModelNodeDefinition, { includeOutputs: true });\nModelCRUDBase.addInputProperties(NewModelNodeDefinition);\n\nexport default NewModelNodeDefinition;\n","import { CloudFile } from \"../../../api/cloudfile\";\n\nconst CloudFileNode = {\n name: \"Cloud File\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/cloud-file\",\n category: \"Cloud Services\",\n color: \"data\",\n getInspectInfo() {\n return this._internal.cloudFile && this._internal.cloudFile.getUrl();\n },\n outputs: {\n url: {\n type: \"string\",\n displayName: \"URL\",\n group: \"General\",\n get() {\n return this._internal.cloudFile && this._internal.cloudFile.getUrl();\n },\n },\n name: {\n type: \"string\",\n displayName: \"Name\",\n group: \"General\",\n get() {\n if (!this._internal.cloudFile) return;\n\n //parse prefixes the file with a guid_\n //remove it so the name is the same as the original file name\n const n = this._internal.cloudFile.getName().split(\"_\");\n return n.length === 1 ? n[0] : n.slice(1).join(\"_\");\n },\n },\n },\n inputs: {\n file: {\n type: \"cloudfile\",\n displayName: \"Cloud File\",\n group: \"General\",\n set(value) {\n if (value instanceof CloudFile === false) {\n return;\n }\n this._internal.cloudFile = value;\n this.flagOutputDirty(\"name\");\n this.flagOutputDirty(\"url\");\n },\n },\n },\n};\n\nexport default {\n node: CloudFileNode,\n};\n","import { Runtime } from \"../runtime\";\n\ndeclare const _noodl_cloud_runtime_version: string | undefined;\ndeclare const _noodl_cloudservices:\n | {\n endpoint: string;\n appId: string;\n masterKey?: string;\n }\n | undefined;\n\nexport class ConfigService {\n public static instance = new ConfigService();\n\n cacheDuration: number;\n configCachePending: any;\n configCache: any;\n // @ts-expect-error\n ttl: number;\n\n endpoint: string | undefined;\n appId: string | undefined;\n\n constructor() {\n this.cacheDuration = 15 * 60 * 1000; // 15 min cache\n }\n\n // @ts-expect-error\n _makeRequest(path, options) {\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // Running in browser\n var xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n var json;\n try {\n json = JSON.parse(xhr.response);\n } catch (e) {}\n\n if (xhr.status === 200 || xhr.status === 201) {\n options.success(json);\n } else\n options.error(\n json || { error: xhr.responseText, status: xhr.status }\n );\n }\n };\n\n // @ts-expect-error\n const cloudServices = Runtime.instance.getMetaData(\"cloudservices\");\n const appId = cloudServices.appId;\n const endpoint = cloudServices.endpoint;\n xhr.open(\"GET\", endpoint + path, true);\n\n xhr.setRequestHeader(\"X-Parse-Application-Id\", appId);\n\n xhr.send();\n } else {\n // Running in cloud runtime\n const endpoint =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.endpoint\n : this.endpoint;\n const appId =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.appId\n : this.appId;\n const masterKey =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.masterKey\n : undefined;\n\n fetch(endpoint + path, {\n method: \"GET\",\n // @ts-expect-error\n headers: {\n \"X-Parse-Application-Id\": appId,\n \"X-Parse-Master-Key\": masterKey,\n },\n })\n .then((r) => {\n if (r.status === 200 || r.status === 201) {\n r.json()\n .then((json) => options.success(json))\n .catch((e) =>\n options.error({\n error: \"Config: Failed to get json result.\",\n })\n );\n } else {\n r.json()\n .then((json) => options.error(json))\n .catch((e) => options.error({ error: \"Failed to fetch.\" }));\n }\n })\n .catch((e) => {\n options.error({ error: e.message });\n });\n }\n }\n\n _getConfig() {\n return new Promise((resolve, reject) => {\n this._makeRequest(\"/config\", {\n // @ts-expect-error\n success: (config) => {\n resolve(config.params || {});\n },\n // @ts-expect-error\n error: (err) => {\n reject(err);\n },\n });\n });\n }\n\n async getConfig() {\n if (this.configCachePending) return this.configCachePending;\n\n if (!this.configCache) {\n this.configCachePending = this._getConfig();\n\n this.configCache = await this.configCachePending;\n delete this.configCachePending;\n this.ttl = Date.now() + this.cacheDuration;\n return this.configCache;\n } else {\n // Update cache if ttl has passed\n if (Date.now() > this.ttl) {\n this._getConfig().then((config) => {\n this.configCache = config;\n this.ttl = Date.now() + this.cacheDuration;\n });\n }\n\n // But return currently cached\n return this.configCache;\n }\n }\n\n clearCache() {\n delete this.configCache;\n }\n}\n","import { ConfigService } from \"../../../api/configservice\";\n\nvar ConfigNodeDefinition = {\n name: \"DbConfig\",\n docs: \"https://docs.noodl.net/nodes/data/cloud-data/config\",\n displayNodeName: \"Config\",\n category: \"Cloud Services\",\n usePortAsLabel: \"configKey\",\n color: \"data\",\n initialize() {\n var internal = this._internal;\n\n ConfigService.instance.getConfig().then((config) => {\n internal.config = config;\n if (this.hasOutput(\"value\")) this.flagOutputDirty(\"value\");\n });\n },\n getInspectInfo() {\n const value = this.getValue();\n\n if (value === undefined) return \"[No Value]\";\n\n return [{ type: \"value\", value: value }];\n },\n inputs: {},\n outputs: {},\n methods: {\n getValue() {\n const internal = this._internal;\n if (\n internal.useDevValue &&\n this.context.editorConnection &&\n this.context.editorConnection.isRunningLocally()\n ) {\n return internal.devValue;\n } else if (\n internal.config !== undefined &&\n internal.configKey !== undefined\n ) {\n return internal.config[internal.configKey];\n }\n },\n setInternal(key, value) {\n this._internal[key] = value;\n if (this.hasOutput(\"value\")) this.flagOutputDirty(\"value\");\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (name === \"value\")\n return this.registerOutput(name, {\n getter: this.getValue.bind(this),\n });\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name === \"configKey\" || name === \"useDevValue\" || name === \"devValue\")\n return this.registerInput(name, {\n set: this.setInternal.bind(this, name),\n });\n },\n },\n};\n\nexport default {\n node: ConfigNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function updatePorts(node) {\n var ports = [];\n\n context.editorConnection.clearWarning(\n node.component.name,\n node.id,\n \"dbconfig-warning\"\n );\n\n const configSchema = graphModel.getMetaData(\"dbConfigSchema\");\n let valueType;\n\n if (configSchema) {\n const isCloud = typeof _noodl_cloud_runtime_version !== \"undefined\";\n ports.push({\n name: \"configKey\",\n displayName: \"Parameter\",\n group: \"General\",\n type: {\n name: \"enum\",\n enums: Object.keys(configSchema)\n .filter((k) => isCloud || !configSchema[k].masterKeyOnly)\n .map((k) => ({ value: k, label: k })),\n allowEditOnly: true,\n },\n plug: \"input\",\n });\n\n if (\n node.parameters[\"configKey\"] !== undefined &&\n configSchema &&\n configSchema[node.parameters[\"configKey\"]]\n ) {\n valueType = configSchema[node.parameters[\"configKey\"]].type;\n\n if (\n valueType === \"string\" ||\n valueType === \"boolean\" ||\n valueType === \"number\" ||\n valueType === \"object\" ||\n valueType === \"array\"\n ) {\n ports.push({\n name: \"useDevValue\",\n displayName: \"Enable\",\n group: \"Local Override\",\n type: \"boolean\",\n default: false,\n plug: \"input\",\n });\n\n if (node.parameters[\"useDevValue\"] === true) {\n ports.push({\n name: \"devValue\",\n displayName: \"Value\",\n group: \"Local Override\",\n type: valueType,\n plug: \"input\",\n });\n }\n }\n } else if (node.parameters[\"configKey\"] !== undefined) {\n context.editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"dbconfig-warning\",\n {\n showGlobally: true,\n message:\n node.parameters[\"configKey\"] +\n \" config parameter is missing, add it to your cloud service.\",\n }\n );\n }\n } else {\n context.editorConnection.sendWarning(\n node.component.name,\n node.id,\n \"dbconfig-warning\",\n {\n showGlobally: true,\n message: \"You need an active cloud service.\",\n }\n );\n }\n\n ports.push({\n name: \"value\",\n displayName: \"Value\",\n group: \"General\",\n type: valueType || \"*\",\n plug: \"output\",\n });\n\n context.editorConnection.sendDynamicPorts(node.id, ports);\n }\n\n function _managePortsForNode(node) {\n updatePorts(node);\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(node);\n });\n\n graphModel.on(\"metadataChanged.dbConfigSchema\", function (data) {\n ConfigService.instance.clearCache();\n updatePorts(node);\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.DbConfig\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"DbConfig\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","export function createDefinition(args) {\n return {\n name: args.name,\n docs: args.docs,\n shortDesc: args.shortDesc,\n nodeDoubleClickAction: args.nodeDoubleClickAction,\n category: \"Variables\",\n initialize() {\n this._internal.currentValue = args.startValue;\n this._internal.latestValue = 0;\n },\n getInspectInfo() {\n const type = args.type.name === \"color\" ? \"color\" : \"text\";\n return [{ type, value: this._internal.currentValue }];\n },\n inputs: {\n value: {\n type: args.type,\n displayName: \"Value\",\n default: args.startValue,\n set(value) {\n if (this.isInputConnected(\"saveValue\") === false) {\n this.setValueTo(value);\n } else {\n this._internal.latestValue = value;\n }\n },\n },\n saveValue: {\n displayName: \"Set\",\n valueChangedToTrue() {\n this.scheduleAfterInputsHaveUpdated(function () {\n this.setValueTo(this._internal.latestValue);\n this.sendSignalOnOutput(\"stored\");\n });\n },\n },\n },\n outputs: {\n savedValue: {\n type: args.type.name,\n displayName: \"Value\",\n getter() {\n return this._internal.currentValue;\n },\n },\n changed: {\n type: \"signal\",\n displayName: \"Changed\",\n },\n stored: {\n type: \"signal\",\n displayName: \"Stored\",\n },\n },\n prototypeExtensions: {\n setValueTo(value) {\n value = args.cast(value);\n const changed = this._internal.currentValue !== value;\n this._internal.currentValue = value;\n\n if (changed) {\n this.flagOutputDirty(\"savedValue\");\n this.sendSignalOnOutput(\"changed\");\n args.onChanged && args.onChanged.call(this);\n }\n },\n },\n };\n}\n","import { createDefinition } from \"./variablebase\";\n\nconst NumberNode = createDefinition({\n name: \"Number\",\n docs: \"https://docs.noodl.net/nodes/data/number\",\n startValue: 0,\n nodeDoubleClickAction: {\n focusPort: \"value\",\n },\n type: {\n name: \"number\",\n },\n cast(value) {\n return Number(value);\n },\n});\n\nexport default {\n node: NumberNode,\n};\n","import { createDefinition } from \"./variablebase\";\nimport { extend } from \"../../../nodedefinition\";\n\nconst StringNode = createDefinition({\n name: \"String\",\n docs: \"https://docs.noodl.net/nodes/data/string\",\n shortDesc: \"Contains a string (text).\",\n startValue: \"\",\n nodeDoubleClickAction: {\n focusPort: \"value\",\n },\n type: {\n name: \"string\",\n },\n cast(value) {\n return String(value);\n },\n onChanged() {\n this.flagOutputDirty(\"length\");\n },\n});\n\nextend(StringNode, {\n usePortAsLabel: \"value\",\n portLabelTruncationMode: \"length\",\n outputs: {\n length: {\n type: \"number\",\n displayName: \"Length\",\n getter() {\n return this._internal.currentValue.length;\n },\n },\n },\n});\n\nexport default {\n node: StringNode,\n};\n","import { createDefinition } from \"./variablebase\";\n\nconst BooleanNode = createDefinition({\n name: \"Boolean\",\n docs: \"https://docs.noodl.net/nodes/data/boolean\",\n startValue: false,\n type: {\n name: \"boolean\",\n },\n cast(value) {\n return Boolean(value);\n },\n});\n\nexport default {\n node: BooleanNode,\n};\n","const ConditionNode = {\n name: \"Condition\",\n docs: \"https://docs.noodl.net/nodes/utilities/logic/condition\",\n category: \"Logic\",\n initialize() {},\n getInspectInfo() {\n const condition = this.getInputValue(\"condition\");\n let value;\n if (condition === undefined) {\n value = \"[No input]\";\n }\n value = condition;\n return [\n {\n type: \"value\",\n value,\n },\n ];\n },\n inputs: {\n condition: {\n type: \"boolean\",\n displayName: \"Condition\",\n group: \"General\",\n set(value) {\n if (!this.isInputConnected(\"eval\")) {\n // Evaluate right away\n this.scheduleEvaluate();\n }\n },\n },\n eval: {\n type: \"signal\",\n displayName: \"Evaluate\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleEvaluate();\n },\n },\n },\n outputs: {\n ontrue: {\n type: \"signal\",\n displayName: \"On True\",\n group: \"Events\",\n },\n onfalse: {\n type: \"signal\",\n displayName: \"On False\",\n group: \"Events\",\n },\n result: {\n type: \"boolean\",\n displayName: \"Is True\",\n group: \"Booleans\",\n get() {\n return !!this.getInputValue(\"condition\");\n },\n },\n isfalse: {\n type: \"boolean\",\n displayName: \"Is False\",\n group: \"Booleans\",\n get() {\n return !this.getInputValue(\"condition\");\n },\n },\n },\n methods: {\n scheduleEvaluate() {\n this.scheduleAfterInputsHaveUpdated(() => {\n this.flagOutputDirty(\"result\");\n this.flagOutputDirty(\"isfalse\");\n\n const condition = this.getInputValue(\"condition\");\n this.sendSignalOnOutput(condition ? \"ontrue\" : \"onfalse\");\n });\n },\n },\n};\n\nexport default {\n node: ConditionNode,\n};\n","const AndNode = {\n name: \"And\",\n docs: \"https://docs.noodl.net/nodes/logic/and\",\n category: \"Logic\",\n initialize() {\n this._internal.inputs = [];\n },\n getInspectInfo() {\n return and(this._internal.inputs);\n },\n numberedInputs: {\n input: {\n displayPrefix: \"Input\",\n type: \"boolean\",\n createSetter(index) {\n return function (value) {\n value = value ? true : false;\n\n if (this._internal.inputs[index] === value) {\n return;\n }\n\n this._internal.inputs[index] = value;\n const result = and(this._internal.inputs);\n\n if (this._internal.result !== result) {\n this._internal.result = result;\n this.flagOutputDirty(\"result\");\n }\n };\n },\n },\n },\n outputs: {\n result: {\n type: \"boolean\",\n displayName: \"Result\",\n get() {\n return this._internal.result;\n },\n },\n },\n};\n\nexport default {\n node: AndNode,\n};\n\nfunction and(values) {\n //if none are false, then return true\n return values.length > 0 && values.some((v) => !v) === false;\n}\n","const OrNode = {\n name: \"Or\",\n docs: \"https://docs.noodl.net/nodes/logic/or\",\n category: \"Logic\",\n initialize() {\n this._internal.inputs = [];\n },\n getInspectInfo() {\n return this._internal.inputs.some(isTrue);\n },\n numberedInputs: {\n input: {\n type: \"boolean\",\n displayPrefix: \"Input\",\n createSetter(index) {\n return function (value) {\n if (this._internal.inputs[index] === value) {\n return;\n }\n\n this._internal.inputs[index] = value;\n this.flagOutputDirty(\"result\");\n };\n },\n },\n },\n outputs: {\n result: {\n type: \"boolean\",\n displayName: \"Result\",\n getter() {\n return this._internal.inputs.some(isTrue);\n },\n },\n },\n};\n\nexport default {\n node: OrNode,\n};\n\nfunction isTrue(value) {\n return value ? true : false;\n}\n","const BooleanToStringNode = {\n name: \"Boolean To String\",\n docs: \"https://docs.noodl.net/nodes/utilities/boolean-to-string\",\n category: \"Utilities\",\n initialize() {\n this._internal.inputs = [];\n this._internal.currentSelectedIndex = 0;\n this._internal.indexChanged = false;\n\n this._internal.trueString = \"\";\n this._internal.falseString = \"\";\n },\n inputs: {\n trueString: {\n displayName: \"String for true\",\n type: \"string\",\n set(value) {\n if (this._internal.trueString === value) return;\n this._internal.trueString = value;\n\n if (this._internal.currentInput) {\n this.flagOutputDirty(\"currentValue\");\n }\n },\n },\n falseString: {\n displayName: \"String for false\",\n type: \"string\",\n set(value) {\n if (this._internal.falseString === value) return;\n this._internal.falseString = value;\n\n if (!this._internal.currentInput) {\n this.flagOutputDirty(\"currentValue\");\n }\n },\n },\n input: {\n type: { name: \"boolean\" },\n displayName: \"Selector\",\n set(value) {\n if (this._internal.currentInput === value) return;\n\n this._internal.currentInput = value;\n this.flagOutputDirty(\"currentValue\");\n this.sendSignalOnOutput(\"inputChanged\");\n },\n },\n },\n outputs: {\n currentValue: {\n type: \"string\",\n displayName: \"Current Value\",\n group: \"Value\",\n getter() {\n return this._internal.currentInput\n ? this._internal.trueString\n : this._internal.falseString;\n },\n },\n inputChanged: {\n type: \"signal\",\n displayName: \"Selector Changed\",\n group: \"Signals\",\n },\n },\n};\n\nexport default {\n node: BooleanToStringNode,\n};\n","const DateToStringNode = {\n name: \"Date To String\",\n docs: \"https://docs.noodl.net/nodes/utilities/date-to-string\",\n category: \"Utilities\",\n initialize() {\n this._internal.formatString = \"{year}-{month}-{date}\";\n },\n inputs: {\n formatString: {\n displayName: \"Format\",\n type: \"string\",\n default: \"{year}-{month}-{date}\",\n set(value) {\n if (this._internal.formatString === value) return;\n this._internal.formatString = value;\n\n if (this._internal.currentInput !== undefined) {\n this._format();\n this.flagOutputDirty(\"currentValue\");\n }\n },\n },\n input: {\n type: { name: \"date\" },\n displayName: \"Date\",\n set(value) {\n const _value = typeof value === \"string\" ? new Date(value) : value;\n if (this._internal.currentInput === _value) return;\n\n this._internal.currentInput = _value;\n this._format();\n },\n },\n },\n outputs: {\n currentValue: {\n type: \"string\",\n displayName: \"Date String\",\n group: \"Value\",\n getter() {\n return this._internal.dateString;\n },\n },\n inputChanged: {\n type: \"signal\",\n displayName: \"Date Changed\",\n group: \"Signals\",\n },\n onError: {\n type: \"signal\",\n displayName: \"Invalid Date\",\n group: \"Signals\",\n },\n },\n methods: {\n _format() {\n try {\n const t = this._internal.currentInput;\n const format = this._internal.formatString;\n const date = (\"0\" + t.getDate()).slice(-2);\n const month = (\"0\" + (t.getMonth() + 1)).slice(-2);\n const monthShort = new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n }).format(t);\n const year = t.getFullYear();\n const yearShort = year.toString().substring(2);\n const hours = (\"0\" + t.getHours()).slice(-2);\n const minutes = (\"0\" + t.getMinutes()).slice(-2);\n const seconds = (\"0\" + t.getSeconds()).slice(-2);\n\n this._internal.dateString = format\n .replace(/\\{date\\}/g, date)\n .replace(/\\{month\\}/g, month)\n .replace(/\\{monthShort\\}/g, monthShort)\n .replace(/\\{year\\}/g, year)\n .replace(/\\{yearShort\\}/g, yearShort)\n .replace(/\\{hours\\}/g, hours)\n .replace(/\\{minutes\\}/g, minutes)\n .replace(/\\{seconds\\}/g, seconds);\n } catch (error) {\n // Set the output to be blank, makes it easier to handle.\n this._internal.dateString = \"\";\n this.flagOutputDirty(\"onError\");\n }\n\n // Flag that the value have changed\n this.flagOutputDirty(\"currentValue\");\n this.sendSignalOnOutput(\"inputChanged\");\n },\n },\n};\n\nexport default {\n node: DateToStringNode,\n};\n","const StringMapperNode = {\n name: \"String Mapper\",\n docs: \"https://docs.noodl.net/nodes/string-manipulation/string-mapper\",\n category: \"Utilities\",\n initialize() {\n this._internal.inputs = [];\n this._internal.mappings = [];\n },\n getInspectInfo() {\n return this._internal.mappedString;\n },\n numberedInputs: {\n input: {\n type: \"string\",\n displayPrefix: \"Input\",\n group: \"Inputs\",\n index: 10,\n createSetter(index) {\n return function (value) {\n value = value === undefined ? \"\" : value.toString();\n this._internal.inputs[index] = value;\n this.scheduleMapping();\n };\n },\n },\n output: {\n type: \"string\",\n displayPrefix: \"Mapping\",\n index: 1001,\n group: \"Mappings\",\n createSetter(index) {\n return function (value) {\n value = value === undefined ? \"\" : value.toString();\n this._internal.mappings[index] = value;\n this.scheduleMapping();\n };\n },\n },\n },\n inputs: {\n inputString: {\n type: {\n name: \"string\",\n },\n index: 1,\n displayName: \"Input String\",\n set(value) {\n this._internal.currentInputString =\n value !== undefined ? value.toString() : undefined;\n this.scheduleMapping();\n },\n },\n defaultMapping: {\n type: \"string\",\n displayName: \"Default\",\n index: 1000,\n group: \"Mappings\",\n set(value) {\n this._internal.defaultMapping = value;\n this.scheduleMapping();\n },\n },\n },\n outputs: {\n mappedString: {\n type: \"string\",\n displayName: \"Mapped String\",\n group: \"Value\",\n getter() {\n return this._internal.mappedString;\n },\n },\n },\n prototypeExtensions: {\n doMapping() {\n this._internal.hasScheduledFetch = false;\n var idx = this._internal.inputs.indexOf(\n this._internal.currentInputString\n );\n if (idx !== -1)\n this._internal.mappedString = this._internal.mappings[idx];\n else this._internal.mappedString = this._internal.defaultMapping;\n\n this.flagOutputDirty(\"mappedString\");\n },\n scheduleMapping() {\n var internal = this._internal;\n if (!internal.hasScheduledFetch) {\n internal.hasScheduledFetch = true;\n this.scheduleAfterInputsHaveUpdated(this.doMapping.bind(this));\n }\n },\n },\n};\n\nexport default {\n node: StringMapperNode,\n};\n","function invert(value) {\n if (value === undefined) {\n return undefined;\n }\n return !value;\n}\n\nconst InverterNode = {\n name: \"Inverter\",\n docs: \"https://docs.noodl.net/nodes/logic/inverter\",\n category: \"Logic\",\n initialize() {\n this._internal.currentValue = undefined;\n },\n getInspectInfo() {\n return String(invert(this._internal.currentValue));\n },\n inputs: {\n value: {\n type: {\n name: \"boolean\",\n },\n displayName: \"Value\",\n set(value) {\n this._internal.currentValue = value;\n this.flagOutputDirty(\"result\");\n },\n },\n },\n outputs: {\n result: {\n type: \"boolean\",\n displayName: \"Result\",\n getter() {\n return invert(this._internal.currentValue);\n },\n },\n },\n};\n\nexport default {\n node: InverterNode,\n};\n","const SubStringNode = {\n name: \"Substring\",\n docs: \"https://docs.noodl.net/nodes/string-manipulation/substring\",\n category: \"String Manipulation\",\n initialize() {\n var internal = this._internal;\n internal.startIndex = 0;\n internal.endIndex = -1;\n internal.cachedResult = \"\";\n internal.inputString = \"\";\n internal.resultDirty = false;\n },\n inputs: {\n start: {\n type: \"number\",\n displayName: \"Start\",\n default: 0,\n set(value) {\n this._internal.startIndex = value;\n this._internal.resultDirty = true;\n this.flagOutputDirty(\"result\");\n },\n },\n end: {\n type: \"number\",\n displayName: \"End\",\n default: 0,\n set(value) {\n this._internal.endIndex = value;\n this._internal.resultDirty = true;\n this.flagOutputDirty(\"result\");\n },\n },\n string: {\n type: {\n name: \"string\",\n },\n displayName: \"String\",\n default: \"\",\n set(value) {\n value = value.toString();\n this._internal.inputString = value;\n this._internal.resultDirty = true;\n this.flagOutputDirty(\"result\");\n },\n },\n },\n outputs: {\n result: {\n type: \"string\",\n displayName: \"Result\",\n getter() {\n var internal = this._internal;\n\n if (internal.resultDirty) {\n if (internal.endIndex === -1) {\n internal.cachedResult = internal.inputString.substr(\n internal.startIndex\n );\n } else {\n internal.cachedResult = internal.inputString.substr(\n internal.startIndex,\n internal.endIndex - internal.startIndex\n );\n }\n internal.resultDirty = false;\n }\n return internal.cachedResult;\n },\n },\n },\n};\n\nexport default {\n node: SubStringNode,\n};\n","const StringFormatDefinition = {\n name: \"String Format\",\n docs: \"https://docs.noodl.net/nodes/string-manipulation/string-format\",\n category: \"String Manipulation\",\n usePortAsLabel: \"format\",\n portLabelTruncationMode: \"length\",\n initialize() {\n const internal = this._internal;\n internal.format = \"\";\n internal.cachedResult = \"\";\n internal.resultDirty = false;\n internal.inputValues = {};\n },\n getInspectInfo() {\n return this.formatValue();\n },\n inputs: {\n format: {\n type: { name: \"string\", multiline: true },\n displayName: \"Format\",\n set(value) {\n if (this._internal.format === value) return;\n\n this._internal.format = value;\n this._internal.resultDirty = true;\n this.scheduleFormat();\n },\n },\n },\n outputs: {\n formatted: {\n type: \"string\",\n displayName: \"Formatted\",\n get() {\n return this.formatValue();\n },\n },\n },\n methods: {\n formatValue() {\n var internal = this._internal;\n\n if (internal.resultDirty) {\n var formatted = internal.format;\n\n var matches = internal.format.match(/\\{[A-Za-z0-9_]*\\}/g);\n var inputs = [];\n if (matches) {\n inputs = matches.map(function (name) {\n return name.replace(\"{\", \"\").replace(\"}\", \"\");\n });\n }\n\n inputs.forEach(function (name) {\n var v = internal.inputValues[name];\n formatted = formatted.replace(\n \"{\" + name + \"}\",\n v !== undefined ? v : \"\"\n );\n });\n\n internal.cachedResult = formatted;\n internal.resultDirty = false;\n }\n\n return internal.cachedResult;\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n this.registerInput(name, {\n set: userInputSetter.bind(this, name),\n });\n },\n scheduleFormat() {\n if (this.formatScheduled) return;\n\n this.formatScheduled = true;\n this.scheduleAfterInputsHaveUpdated(() => {\n this.formatValue();\n this.flagOutputDirty(\"formatted\");\n this.formatScheduled = false;\n });\n },\n },\n};\n\nfunction userInputSetter(name, value) {\n /* jshint validthis:true */\n if (this._internal.inputValues[name] === value) return;\n\n this._internal.inputValues[name] = value;\n this._internal.resultDirty = true;\n this.scheduleFormat();\n}\n\nfunction updatePorts(id, format, editorConnection) {\n var inputs = format.match(/\\{[A-Za-z0-9_]*\\}/g) || [];\n var portsNames = inputs.map(function (def) {\n return def.replace(\"{\", \"\").replace(\"}\", \"\");\n });\n\n var ports = portsNames\n //get unique names\n .filter(function (value, index, self) {\n return self.indexOf(value) === index;\n })\n //and map names to ports\n .map(function (name) {\n return {\n name: name,\n type: \"string\",\n plug: \"input\",\n };\n });\n\n editorConnection.sendDynamicPorts(id, ports);\n}\n\nexport default {\n node: StringFormatDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n graphModel.on(\"nodeAdded.String Format\", function (node) {\n if (node.parameters.format) {\n updatePorts(node.id, node.parameters.format, context.editorConnection);\n }\n node.on(\"parameterUpdated\", function (event) {\n if (event.name === \"format\") {\n updatePorts(\n node.id,\n node.parameters.format,\n context.editorConnection\n );\n }\n });\n });\n },\n};\n","const CounterNode = {\n name: \"Counter\",\n docs: \"https://docs.noodl.net/nodes/math/counter\",\n category: \"Math\",\n initialize() {\n this._internal.currentValue = 0;\n this._internal.startValue = 0;\n this._internal.startValueSet = false;\n\n this._internal.limitsEnabled = false;\n this._internal.limitsMin = 0;\n this._internal.limitsMax = 0;\n },\n getInspectInfo() {\n return \"Count: \" + this._internal.currentValue;\n },\n inputs: {\n increase: {\n group: \"Actions\",\n displayName: \"Increase Count\",\n valueChangedToTrue() {\n if (\n this._internal.limitsEnabled &&\n this._internal.currentValue >= this._internal.limitsMax\n ) {\n return;\n }\n\n this._internal.currentValue++;\n this.flagOutputDirty(\"currentCount\");\n this.sendSignalOnOutput(\"countChanged\");\n },\n },\n decrease: {\n group: \"Actions\",\n displayName: \"Decrease Count\",\n valueChangedToTrue() {\n if (\n this._internal.limitsEnabled &&\n this._internal.currentValue <= this._internal.limitsMin\n ) {\n return;\n }\n\n this._internal.currentValue--;\n this.flagOutputDirty(\"currentCount\");\n this.sendSignalOnOutput(\"countChanged\");\n },\n },\n reset: {\n group: \"Actions\",\n displayName: \"Reset To Start\",\n valueChangedToTrue() {\n if (this.currentValue === 0) {\n return;\n }\n this._internal.currentValue = this._internal.startValue;\n this.flagOutputDirty(\"currentCount\");\n this.sendSignalOnOutput(\"countChanged\");\n },\n },\n startValue: {\n type: \"number\",\n displayName: \"Start Value\",\n default: 0,\n set(value) {\n this._internal.startValue = Number(value);\n\n if (this._internal.startValueSet === false) {\n this._internal.startValueSet = true;\n this._internal.currentValue = this._internal.startValue;\n this.flagOutputDirty(\"currentCount\");\n this.sendSignalOnOutput(\"countChanged\");\n }\n },\n },\n limitsMin: {\n type: {\n name: \"number\",\n },\n displayName: \"Min Value\",\n group: \"Limits\",\n default: 0,\n set(value) {\n this._internal.limitsMin = Number(value);\n },\n },\n limitsMax: {\n type: {\n name: \"number\",\n },\n displayName: \"Max Value\",\n group: \"Limits\",\n default: 0,\n set(value) {\n this._internal.limitsMax = Number(value);\n },\n },\n limitsEnabled: {\n type: {\n name: \"boolean\",\n },\n displayName: \"Limits Enabled\",\n group: \"Limits\",\n default: false,\n set(value) {\n this._internal.limitsEnabled = value ? true : false;\n },\n },\n },\n outputs: {\n currentCount: {\n displayName: \"Current Count\",\n type: \"number\",\n getter() {\n return this._internal.currentValue;\n },\n },\n countChanged: {\n displayName: \"Count Changed\",\n type: \"signal\",\n },\n },\n};\n\nexport default {\n node: CounterNode,\n};\n","import { Model } from \"../../model\";\n\nconst UniqueIdNode = {\n name: \"Unique Id\",\n docs: \"https://docs.noodl.net/nodes/utilities/unique-id\",\n category: \"String Manipulation\",\n initialize() {\n var internal = this._internal;\n internal.guid = Model.guid();\n },\n getInspectInfo() {\n return this._internal.guid;\n },\n inputs: {\n new: {\n displayName: \"New\",\n valueChangedToTrue() {\n var internal = this._internal;\n internal.guid = Model.guid();\n this.flagOutputDirty(\"guid\");\n },\n },\n },\n outputs: {\n guid: {\n type: \"string\",\n displayName: \"Id\",\n getter() {\n var internal = this._internal;\n return internal.guid;\n },\n },\n },\n prototypeExtensions: {},\n};\n\nexport default {\n node: UniqueIdNode,\n};\n","import { Runtime } from \"../../../runtime\";\n\nconst SetUserPropertiesNodeDefinition = {\n name: \"net.noodl.user.SetUserProperties\",\n docs: \"https://docs.noodl.net/nodes/data/user/set-user-properties\",\n displayNodeName: \"Set User Properties\",\n category: \"Cloud Services\",\n color: \"data\",\n initialize() {\n var internal = this._internal;\n\n internal.userProperties = {};\n },\n getInspectInfo() {},\n outputs: {\n success: {\n type: \"signal\",\n displayName: \"Success\",\n group: \"Events\",\n },\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n },\n inputs: {\n store: {\n displayName: \"Do\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleStore();\n },\n },\n email: {\n displayName: \"Email\",\n type: \"string\",\n group: \"General\",\n set(value) {\n this._internal.email = value;\n },\n },\n username: {\n displayName: \"Username\",\n type: \"string\",\n group: \"General\",\n set(value) {\n this._internal.username = value;\n },\n },\n },\n methods: {\n setError(err) {\n this._internal.error = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"user-set-warning\",\n {\n message: err,\n showGlobally: true,\n }\n );\n }\n },\n clearWarnings() {\n if (this.context.editorConnection) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"user-set-warning\"\n );\n }\n },\n scheduleStore() {\n const internal = this._internal;\n\n if (this.storeScheduled === true) return;\n this.storeScheduled = true;\n\n this.scheduleAfterInputsHaveUpdated(() => {\n this.storeScheduled = false;\n\n const UserService = Runtime.Services.UserService;\n UserService.forScope(this.nodeScope.modelScope).setUserProperties({\n email: this._internal.email,\n username: this._internal.username,\n properties: internal.userProperties,\n success: () => {\n this.sendSignalOnOutput(\"success\");\n },\n error: (e) => {\n this.setError(e);\n },\n });\n });\n },\n setUserProperty(name, value) {\n this._internal.userProperties[name] = value;\n },\n registerInputIfNeeded(name) {\n if (this.hasInput(name)) {\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n return this.registerInput(name, {\n set: this.setUserProperty.bind(this, name.substring(\"prop-\".length)),\n });\n },\n },\n};\n\nfunction updatePorts(nodeId, parameters, editorConnection, systemCollections) {\n var ports = [];\n\n if (systemCollections) {\n // Fetch ports from collection keys\n var c = systemCollections.find((c) => c.name === \"_User\");\n if (c && c.schema && c.schema.properties) {\n var props = c.schema.properties;\n\n const _ignoreKeys =\n typeof _noodl_cloud_runtime_version === \"undefined\"\n ? [\n \"authData\",\n \"createdAt\",\n \"updatedAt\",\n \"email\",\n \"username\",\n \"emailVerified\",\n \"password\",\n ]\n : [\"authData\", \"createdAt\", \"updatedAt\", \"email\", \"username\"];\n\n for (var key in props) {\n if (_ignoreKeys.indexOf(key) !== -1) continue;\n\n var p = props[key];\n if (ports.find((_p) => _p.name === key)) continue;\n\n if (p.type === \"Relation\") {\n } else {\n // Other schema type ports\n const _typeMap = {\n String: \"string\",\n Boolean: \"boolean\",\n Number: \"number\",\n Date: \"date\",\n };\n\n ports.push({\n type: {\n name: _typeMap[p.type] ? _typeMap[p.type] : \"*\",\n },\n plug: \"input\",\n group: \"Properties\",\n name: \"prop-\" + key,\n displayName: key,\n });\n }\n }\n }\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: SetUserPropertiesNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"systemCollections\")\n );\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"systemCollections\")\n );\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n updatePorts(node.id, node.parameters, context.editorConnection, data);\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\n \"nodeAdded.net.noodl.user.SetUserProperties\",\n function (node) {\n _managePortsForNode(node);\n }\n );\n\n for (const node of graphModel.getNodesWithType(\n \"net.noodl.user.SetUserProperties\"\n )) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { Runtime } from \"../../../runtime\";\nimport { Node } from \"../../../node\";\n\nvar UserNodeDefinition = {\n name: \"net.noodl.user.User\",\n docs: \"https://docs.noodl.net/nodes/data/user/user-node\",\n displayNodeName: \"User\",\n category: \"Cloud Services\",\n color: \"data\",\n initialize() {\n var _this = this;\n this._internal.onModelChangedCallback = function (args) {\n if (_this.isInputConnected(\"fetch\")) return;\n\n if (_this.hasOutput(\"prop-\" + args.name))\n _this.flagOutputDirty(\"prop-\" + args.name);\n\n if (_this.hasOutput(\"changed-\" + args.name))\n _this.sendSignalOnOutput(\"changed-\" + args.name);\n\n _this.sendSignalOnOutput(\"changed\");\n };\n\n const userService = Runtime.Services.UserService.forScope(\n this.nodeScope.modelScope\n );\n\n this.setUserModel(userService.current);\n userService.on(\"loggedIn\", () => {\n this.setUserModel(userService.current);\n\n if (this.hasOutput(\"loggedIn\")) this.sendSignalOnOutput(\"loggedIn\");\n });\n\n userService.on(\"sessionGained\", () => {\n this.setUserModel(userService.current);\n });\n\n userService.on(\"loggedOut\", () => {\n this.setUserModel(undefined);\n if (this.hasOutput(\"loggedOut\")) this.sendSignalOnOutput(\"loggedOut\");\n });\n\n userService.on(\"sessionLost\", () => {\n this.setUserModel(undefined);\n if (this.hasOutput(\"sessionLost\")) this.sendSignalOnOutput(\"sessionLost\");\n });\n },\n getInspectInfo() {\n const model = this._internal.model;\n if (!model) return \"[No Model]\";\n\n return [\n { type: \"text\", value: \"Id: \" + model.getId() },\n { type: \"value\", value: this._internal.model.data },\n ];\n },\n outputs: {\n id: {\n type: \"string\",\n displayName: \"Id\",\n group: \"General\",\n getter() {\n return this._internal.model !== undefined\n ? this._internal.model.getId()\n : undefined;\n },\n },\n fetched: {\n type: \"signal\",\n displayName: \"Fetched\",\n group: \"Events\",\n },\n changed: {\n type: \"signal\",\n displayName: \"Changed\",\n group: \"Events\",\n },\n failure: {\n type: \"signal\",\n displayName: \"Failure\",\n group: \"Events\",\n },\n error: {\n type: \"string\",\n displayName: \"Error\",\n group: \"Error\",\n getter() {\n return this._internal.error;\n },\n },\n username: {\n type: \"string\",\n displayName: \"Username\",\n group: \"General\",\n getter() {\n return this._internal.model !== undefined\n ? this._internal.model.get(\"username\")\n : undefined;\n },\n },\n email: {\n type: \"string\",\n displayName: \"Email\",\n group: \"General\",\n getter() {\n return this._internal.model !== undefined\n ? this._internal.model.get(\"email\")\n : undefined;\n },\n },\n authenticated: {\n type: \"boolean\",\n displayName: \"Authenticated\",\n group: \"General\",\n getter() {\n return this._internal.model !== undefined;\n },\n },\n /* loggedIn:{\n type:'signal',\n displayName:'Logged In',\n group:'Events'\n },\n loggedOut:{\n type:'signal',\n displayName:'Logged Out',\n group:'Events'\n },\n sessionLost:{\n type:'signal',\n displayName:'Session Lost',\n group:'Events'\n }, */\n },\n inputs: {\n fetch: {\n displayName: \"Fetch\",\n group: \"Actions\",\n valueChangedToTrue() {\n this.scheduleFetch();\n },\n },\n },\n methods: {\n _onNodeDeleted() {\n Node.prototype._onNodeDeleted.call(this);\n if (this._internal.model)\n this._internal.model.off(\n \"change\",\n this._internal.onModelChangedCallback\n );\n },\n scheduleOnce(type, cb) {\n const _this = this;\n const _type = \"hasScheduled\" + type;\n if (this._internal[_type]) return;\n this._internal[_type] = true;\n this.scheduleAfterInputsHaveUpdated(function () {\n _this._internal[_type] = false;\n cb();\n });\n },\n setError(err) {\n this._internal.error = err;\n this.flagOutputDirty(\"error\");\n this.sendSignalOnOutput(\"failure\");\n\n if (this.context.editorConnection) {\n this.context.editorConnection.sendWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"user-warning\",\n {\n message: err,\n showGlobally: true,\n }\n );\n }\n },\n clearWarnings() {\n if (this.context.editorConnection) {\n this.context.editorConnection.clearWarning(\n this.nodeScope.componentOwner.name,\n this.id,\n \"user-warning\"\n );\n }\n },\n setUserModel(model) {\n const internal = this._internal;\n\n if (internal.model !== model) {\n // Check if we need to change model\n if (internal.model)\n // Remove old listener if existing\n internal.model.off(\"change\", internal.onModelChangedCallback);\n\n internal.model = model;\n if (model) model.on(\"change\", internal.onModelChangedCallback);\n }\n this.flagOutputDirty(\"id\");\n this.flagOutputDirty(\"authenticated\");\n this.flagOutputDirty(\"email\");\n this.flagOutputDirty(\"username\");\n\n // Notify all properties changed\n if (model)\n for (var key in model.data) {\n if (this.hasOutput(\"prop-\" + key))\n this.flagOutputDirty(\"prop-\" + key);\n }\n },\n scheduleFetch() {\n const internal = this._internal;\n\n this.scheduleOnce(\"Fetch\", () => {\n const userService = Runtime.Services.UserService.forScope(\n this.nodeScope.modelScope\n );\n userService.fetchCurrentUser({\n success: (response) => {\n this.setUserModel(userService.current);\n\n this.sendSignalOnOutput(\"fetched\");\n },\n error: (err) => {\n this.setError(err || \"Failed to fetch.\");\n },\n });\n });\n },\n registerOutputIfNeeded(name) {\n if (this.hasOutput(name)) {\n return;\n }\n\n if (\n name === \"loggedOut\" ||\n name === \"loggedIn\" ||\n name === \"sessionLost\"\n ) {\n this.registerOutput(name, {\n getter: () => {} /* No getter needed, signal */,\n });\n return;\n }\n\n if (name.startsWith(\"prop-\"))\n this.registerOutput(name, {\n getter: this.getUserProperty.bind(\n this,\n name.substring(\"prop-\".length)\n ),\n });\n },\n getUserProperty(name) {\n return this._internal.model !== undefined\n ? this._internal.model.get(name)\n : undefined;\n },\n },\n};\n\nfunction updatePorts(nodeId, parameters, editorConnection, systemCollections) {\n var ports = [];\n\n if (systemCollections) {\n // Fetch ports from collection keys\n var c = systemCollections.find((c) => c.name === \"_User\");\n if (c && c.schema && c.schema.properties) {\n var props = c.schema.properties;\n const _ignoreKeys = [\"authData\", \"password\", \"username\", \"email\"];\n for (var key in props) {\n if (_ignoreKeys.indexOf(key) !== -1) continue;\n\n var p = props[key];\n if (ports.find((_p) => _p.name === key)) continue;\n\n if (p.type === \"Relation\") {\n } else {\n // Other schema type ports\n const _typeMap = {\n String: \"string\",\n Boolean: \"boolean\",\n Number: \"number\",\n Date: \"date\",\n };\n\n ports.push({\n type: {\n name: _typeMap[p.type] ? _typeMap[p.type] : \"*\",\n },\n plug: \"output\",\n group: \"Properties\",\n name: \"prop-\" + key,\n displayName: key,\n });\n\n ports.push({\n type: \"signal\",\n plug: \"output\",\n group: \"Changed Events\",\n displayName: key + \" Changed\",\n name: \"changed-\" + key,\n });\n }\n }\n }\n }\n\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // On the client we have some extra outputs\n ports.push({\n plug: \"output\",\n name: \"loggedIn\",\n type: \"signal\",\n displayName: \"Logged In\",\n group: \"Events\",\n });\n\n ports.push({\n plug: \"output\",\n name: \"loggedOut\",\n type: \"signal\",\n displayName: \"Logged Out\",\n group: \"Events\",\n });\n\n ports.push({\n plug: \"output\",\n name: \"sessionLost\",\n type: \"signal\",\n displayName: \"Session Lost\",\n group: \"Events\",\n });\n }\n\n editorConnection.sendDynamicPorts(nodeId, ports);\n}\n\nexport default {\n node: UserNodeDefinition,\n setup(context, graphModel) {\n if (\n !context.editorConnection ||\n !context.editorConnection.isRunningLocally()\n ) {\n return;\n }\n\n function _managePortsForNode(node) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"systemCollections\")\n );\n\n node.on(\"parameterUpdated\", function (event) {\n updatePorts(\n node.id,\n node.parameters,\n context.editorConnection,\n graphModel.getMetaData(\"systemCollections\")\n );\n });\n\n graphModel.on(\"metadataChanged.systemCollections\", function (data) {\n updatePorts(node.id, node.parameters, context.editorConnection, data);\n });\n }\n\n graphModel.on(\"editorImportComplete\", () => {\n graphModel.on(\"nodeAdded.net.noodl.user.User\", function (node) {\n _managePortsForNode(node);\n });\n\n for (const node of graphModel.getNodesWithType(\"net.noodl.user.User\")) {\n _managePortsForNode(node);\n }\n });\n },\n};\n","import { NodeContext } from \"./nodecontext\";\nimport { EditorConnection } from \"./editorconnection\";\nimport { generateNodeLibrary } from \"./nodelibraryexport\";\nimport * as ProjectSettings from \"./projectsettings\";\nimport { GraphModel } from \"./models/graphmodel\";\nimport { defineNode } from \"./nodedefinition\";\nimport { Node } from \"./node\";\nimport * as EditorModelEventsHandler from \"./editormodeleventshandler\";\nimport { Services } from \"./services/services\";\nimport * as EdgeTriggeredInput from \"./edgetriggeredinput\";\n\nimport { EventEmitter } from \"./events\";\nimport { asyncPool } from \"./async-pool\";\n\nimport ComponentInputs from \"./nodes/componentinputs\";\nimport ComponentOutputs from \"./nodes/componentoutputs\";\n\nimport RunTasks from \"./nodes/std-library/runtasks\";\n\n// Data\nimport RestNode from \"./nodes/std-library/data/restnode\";\n\n// Custom code\nimport Expression from \"./nodes/std-library/expression\";\nimport SimpleJavaScript from \"./nodes/std-library/simplejavascript\";\n\n// Records\nimport DbCollectionNode2 from \"./nodes/std-library/data/dbcollectionnode2\";\nimport DbModelNode2 from \"./nodes/std-library/data/dbmodelnode2\";\nimport SetDbModelPropertiesNode from \"./nodes/std-library/data/setdbmodelpropertiesnode\";\nimport DeleteDbModelPropertiesNode from \"./nodes/std-library/data/deletedbmodelpropertiesnode\";\nimport NewDbModelPropertiesNode from \"./nodes/std-library/data/newdbmodelpropertiesnode\";\nimport DbModelNodeAddRelation from \"./nodes/std-library/data/dbmodelnode-addrelation\";\nimport DbModelNodeRemoveRelation from \"./nodes/std-library/data/dbmodelnode-removerelation\";\nimport FilterDbModelsNode from \"./nodes/std-library/data/filterdbmodelsnode\";\n\n// Object\nimport ModelNode2 from \"./nodes/std-library/data/modelnode2\";\nimport SetModelPropertiesNode from \"./nodes/std-library/data/setmodelpropertiesnode\";\nimport NewModelNode from \"./nodes/std-library/data/newmodelnode\";\n\n// Cloud\nimport CloudFileNode from \"./nodes/std-library/data/cloudfilenode\";\nimport DbConfig from \"./nodes/std-library/data/dbconfig\";\n\n// Variables\nimport NumberVar from \"./nodes/std-library/variables/number\";\nimport StringVar from \"./nodes/std-library/variables/string\";\nimport BooleanVar from \"./nodes/std-library/variables/boolean\";\n\n// Utils\nimport Condition from \"./nodes/std-library/condition\";\nimport And from \"./nodes/std-library/and\";\nimport Or from \"./nodes/std-library/or\";\nimport BooleanToString from \"./nodes/std-library/booleantostring\";\nimport DateToString from \"./nodes/std-library/datetostring\";\nimport StringMapper from \"./nodes/std-library/stringmapper\";\nimport Inverter from \"./nodes/std-library/inverter\";\nimport Substring from \"./nodes/std-library/substring\";\nimport StringFormat from \"./nodes/std-library/stringformat\";\nimport Counter from \"./nodes/std-library/counter\";\nimport UniqueId from \"./nodes/std-library/uniqueid\";\n\n// User\nimport SetUserProperties from \"./nodes/std-library/user/setuserproperties\";\nimport User from \"./nodes/std-library/user/user\";\n\nfunction registerNodes(Runtime) {\n [\n ComponentInputs,\n ComponentOutputs,\n\n RunTasks,\n\n RestNode,\n\n Expression,\n SimpleJavaScript,\n\n DbCollectionNode2,\n DbModelNode2,\n SetDbModelPropertiesNode,\n DeleteDbModelPropertiesNode,\n NewDbModelPropertiesNode,\n DbModelNodeAddRelation,\n DbModelNodeRemoveRelation,\n FilterDbModelsNode,\n\n ModelNode2,\n SetModelPropertiesNode,\n NewModelNode,\n\n CloudFileNode,\n DbConfig,\n\n NumberVar,\n StringVar,\n BooleanVar,\n\n Condition,\n And,\n Or,\n BooleanToString,\n DateToString,\n StringMapper,\n Inverter,\n Substring,\n StringFormat,\n Counter,\n UniqueId,\n\n SetUserProperties,\n User,\n ].forEach((node) => Runtime.registerNode(node));\n}\n\nfunction Runtime(args) {\n args = args || {};\n args.platform = args.platform || {};\n Runtime.instance = this;\n\n this.type = args.type || \"browser\";\n this.noodlModules = [];\n this.eventEmitter = new EventEmitter();\n this.updateScheduled = false;\n this.rootComponent = null;\n this._currentLoadedData = null;\n this.isWaitingForExport = true;\n this.graphModel = new GraphModel();\n this.errorHandlers = [];\n this.frameNumber = 0;\n this.dontCreateRootComponent = !!args.dontCreateRootComponent;\n this.componentFilter = args.componentFilter;\n\n this.runningInEditor = args.runDeployed ? false : true;\n\n this.platform = {\n requestUpdate: args.platform.requestUpdate,\n getCurrentTime: args.platform.getCurrentTime,\n webSocketOptions: args.platform.webSocketOptions,\n objectToString: args.platform.objectToString,\n };\n\n if (!args.platform.requestUpdate) {\n throw new Error(\"platform.requestUpdate must be set\");\n }\n\n if (!args.platform.getCurrentTime) {\n throw new Error(\"platform.getCurrentTime must be set\");\n }\n\n //Create an editor connection even if we're running deployed.\n //If won't connect and act as a \"noop\" in deployed mode,\n // and reduce the need for lots of if(editorConnection)\n this.editorConnection = new EditorConnection({\n platform: args.platform,\n runtimeType: this.type,\n });\n\n this.context = new NodeContext({\n runningInEditor: args.runDeployed ? false : true,\n editorConnection: this.editorConnection,\n platform: this.platform,\n graphModel: this.graphModel,\n });\n\n this.context.eventEmitter.on(\n \"scheduleUpdate\",\n this.scheduleUpdate.bind(this)\n );\n\n if (!args.runDeployed) {\n this._setupEditorCommunication(args);\n }\n\n this.registerGraphModelListeners();\n\n registerNodes(this);\n}\n\nRuntime.prototype.prefetchBundles = async function (\n bundleNames,\n numParallelFetches\n) {\n await asyncPool(numParallelFetches, bundleNames, async (name) => {\n await this.context.fetchComponentBundle(name);\n });\n};\n\nRuntime.prototype._setupEditorCommunication = function (args) {\n function objectEquals(x, y) {\n if (x === null || x === undefined || y === null || y === undefined) {\n return x === y;\n }\n if (x === y) {\n return true;\n }\n if (Array.isArray(x) && x.length !== y.length) {\n return false;\n }\n\n // if they are strictly equal, they both need to be object at least\n if (!(x instanceof Object)) {\n return false;\n }\n if (!(y instanceof Object)) {\n return false;\n }\n\n // recursive object equality check\n var p = Object.keys(x);\n return (\n Object.keys(y).every(function (i) {\n return p.indexOf(i) !== -1;\n }) &&\n p.every(function (i) {\n return objectEquals(x[i], y[i]);\n })\n );\n }\n\n this.editorConnection.on(\"exportDataFull\", async (exportData) => {\n if (this.graphModel.isEmpty() === false) {\n this.reload();\n return;\n }\n\n this.isWaitingForExport = false;\n if (objectEquals(this._currentLoadedData, exportData) === false) {\n if (this.componentFilter) {\n exportData.components = exportData.components.filter((c) =>\n this.componentFilter(c)\n );\n }\n\n await this.setData(exportData);\n\n //get the rest of the components\n //important to get all the dynamic ports evaluated\n if (exportData.componentIndex) {\n const allBundles = Object.keys(exportData.componentIndex);\n await this.prefetchBundles(allBundles, 2);\n }\n\n this.graphModel.emit(\"editorImportComplete\");\n }\n });\n\n this.editorConnection.on(\"reload\", this.reload.bind(this));\n this.editorConnection.on(\n \"modelUpdate\",\n this.onModelUpdateReceived.bind(this)\n );\n this.editorConnection.on(\n \"metadataUpdate\",\n this.onMetaDataUpdateReceived.bind(this)\n );\n\n this.editorConnection.on(\"connected\", () => {\n this.sendNodeLibrary();\n });\n};\n\nRuntime.prototype.setDebugInspectorsEnabled = function (enabled) {\n this.context.setDebugInspectorsEnabled(enabled);\n};\n\nRuntime.prototype.registerModule = function (module) {\n if (module.nodes) {\n for (let nodeDefinition of module.nodes) {\n if (!nodeDefinition.node) nodeDefinition = { node: nodeDefinition };\n nodeDefinition.node.module = module.name || \"Unknown Module\";\n this.registerNode(nodeDefinition);\n }\n }\n\n this.noodlModules.push(module);\n};\n\nRuntime.prototype.registerGraphModelListeners = function () {\n var self = this;\n\n this.graphModel.on(\n \"componentAdded\",\n function (component) {\n self.context.registerComponentModel(component);\n },\n this\n );\n\n this.graphModel.on(\n \"componentRemoved\",\n function (component) {\n self.context.deregisterComponentModel(component);\n },\n this\n );\n};\n\nRuntime.prototype.reload = function () {\n location.reload();\n};\n\nRuntime.prototype.registerNode = function (nodeDefinition) {\n if (nodeDefinition.node) {\n const definedNode = defineNode(nodeDefinition.node);\n this.context.nodeRegister.register(definedNode);\n\n definedNode.setupNumberedInputDynamicPorts &&\n definedNode.setupNumberedInputDynamicPorts(this.context, this.graphModel);\n } else {\n this.context.nodeRegister.register(nodeDefinition);\n }\n\n nodeDefinition.setup && nodeDefinition.setup(this.context, this.graphModel);\n};\n\nRuntime.prototype._setRootComponent = async function (rootComponentName) {\n if (this.rootComponent && this.rootComponent.name === rootComponentName)\n return;\n\n if (this.rootComponent) {\n this.rootComponent.model &&\n this.rootComponent.model.removeListenersWithRef(this);\n this.rootComponent = undefined;\n }\n\n if (rootComponentName) {\n this.rootComponent = await this.context.createComponentInstanceNode(\n rootComponentName,\n \"rootComponent\"\n );\n\n this.rootComponent.componentModel.on(\n \"rootAdded\",\n () => this.eventEmitter.emit(\"rootComponentUpdated\"),\n this\n );\n this.rootComponent.componentModel.on(\n \"rootRemoved\",\n () => this.eventEmitter.emit(\"rootComponentUpdated\"),\n this\n );\n\n this.context.setRootComponent(this.rootComponent);\n }\n\n this.eventEmitter.emit(\"rootComponentUpdated\");\n};\n\nRuntime.prototype.setData = async function (graphData) {\n // Added for SSR Support\n // In SSR, we re-load the graphData and when we render the componet it will\n // invoke this method again, which will cause a duplicate node exception.\n // To avoid this, we flag the runtime to not load again.\n if (this._disableLoad) return;\n\n this._currentLoadedData = graphData;\n await this.graphModel.importEditorData(graphData);\n\n // Run setup on all modules\n for (const module of this.noodlModules) {\n typeof module.setup === \"function\" && module.setup.apply(module);\n }\n\n if (this.dontCreateRootComponent !== true) {\n await this._setRootComponent(this.graphModel.rootComponent);\n\n //listen to delta updates on the root component\n this.graphModel.on(\"rootComponentNameUpdated\", (name) => {\n this._setRootComponent(name);\n });\n\n //check if the root component was deleted\n this.graphModel.on(\"componentRemoved\", (componentModel) => {\n if (\n this.rootComponent &&\n this.rootComponent.name === componentModel.name\n ) {\n this._setRootComponent(null);\n }\n });\n\n //check if the root component was added when it previously didn't exist (e.g. when user deletes it and then hits undo)\n this.graphModel.on(\"componentAdded\", (componentModel) => {\n setTimeout(() => {\n if (\n !this.rootComponent &&\n this.graphModel.rootComponent === componentModel.name\n ) {\n this._setRootComponent(componentModel.name);\n }\n }, 1);\n });\n }\n\n this.scheduleUpdate();\n};\n\nRuntime.prototype.scheduleUpdate = function () {\n if (this.updateScheduled) {\n return;\n }\n\n this.updateScheduled = true;\n this.platform.requestUpdate(Runtime.prototype._doUpdate.bind(this));\n};\n\nRuntime.prototype._doUpdate = function () {\n this.updateScheduled = false;\n\n this.context.currentFrameTime = this.platform.getCurrentTime();\n\n this.context.eventEmitter.emit(\"frameStart\");\n\n this.context.update();\n\n this.context.eventEmitter.emit(\"frameEnd\");\n\n this.frameNumber++;\n};\n\nRuntime.prototype.setProjectSettings = function (settings) {\n this.projectSettings = settings;\n};\n\nRuntime.prototype.getNodeLibrary = function () {\n var projectSettings = ProjectSettings.generateProjectSettings(\n this.graphModel.getSettings(),\n this.noodlModules\n );\n\n if (this.projectSettings) {\n this.projectSettings.ports &&\n (projectSettings.ports = projectSettings.ports.concat(\n this.projectSettings.ports\n ));\n this.projectSettings.dynamicports &&\n (projectSettings.dynamicports = projectSettings.ports.concat(\n this.projectSettings.dynamicports\n ));\n }\n\n var nodeLibrary = generateNodeLibrary(this.context.nodeRegister);\n nodeLibrary.projectsettings = projectSettings;\n return JSON.stringify(nodeLibrary, null, 3);\n};\n\nRuntime.prototype.sendNodeLibrary = function () {\n const nodeLibrary = this.getNodeLibrary();\n if (this.lastSentNodeLibrary !== nodeLibrary) {\n this.lastSentNodeLibrary = nodeLibrary;\n this.editorConnection.sendNodeLibrary(nodeLibrary);\n }\n};\n\nRuntime.prototype.connectToEditor = function (address) {\n this.editorConnection.connect(address);\n};\n\nRuntime.prototype.onMetaDataUpdateReceived = function (event) {\n if (!this.graphModel.isEmpty()) {\n EditorMetaDataEventsHandler.handleEvent(\n this.context,\n this.graphModel,\n event\n );\n }\n};\n\nRuntime.prototype.onModelUpdateReceived = async function (event) {\n if (this.isWaitingForExport) {\n return;\n }\n\n if (event.type === \"projectInstanceChanged\") {\n this.reload();\n }\n //wait for data to load before applying model changes\n else if (this.graphModel.isEmpty() === false) {\n await EditorModelEventsHandler.handleEvent(\n this.context,\n this.graphModel,\n event\n );\n }\n};\n\nRuntime.prototype.addErrorHandler = function (callback) {\n this.errorHandlers.push(callback);\n};\n\nRuntime.prototype.reportError = function (message) {\n this.errorHandlers.forEach(function (eh) {\n eh(message);\n });\n};\n\nRuntime.prototype.getProjectSettings = function () {\n return this.graphModel.getSettings();\n};\n\nRuntime.prototype.getMetaData = function (key) {\n return this.graphModel.getMetaData(key);\n};\n\nRuntime.Services = Services;\nRuntime.Node = Node;\nRuntime.NodeDefinition = { defineNode };\nRuntime.EdgeTriggeredInput = EdgeTriggeredInput;\n\nexport { Runtime };\n","import { Runtime } from \"../runtime\";\nimport { Model } from \"../model\";\nimport { Collection } from \"../collection\";\nimport { CloudFile } from \"./cloudfile\";\nimport { EventEmitter } from \"../events\";\n\nconst _protectedFields = {\n _common: [\"_createdAt\", \"_updatedAt\", \"objectId\"],\n _User: [\"_email_verify_token\"],\n};\n\nfunction _removeProtectedFields(data, className) {\n const _data = Object.assign({}, data);\n _protectedFields._common.forEach((f) => delete _data[f]);\n if (className && _protectedFields[className])\n _protectedFields[className].forEach((f) => delete _data[f]);\n\n return _data;\n}\n\nclass CloudStore {\n constructor(modelScope) {\n this._initCloudServices();\n\n this.events = new EventEmitter();\n this.events.setMaxListeners(10000);\n this.modelScope = modelScope;\n\n this._fromJSON = (item, collectionName) =>\n CloudStore._fromJSON(item, collectionName, modelScope);\n this._deserializeJSON = (data, type) =>\n CloudStore._deserializeJSON(data, type, modelScope);\n this._serializeObject = (data, collectionName) =>\n CloudStore._serializeObject(data, collectionName, modelScope);\n }\n\n _initCloudServices() {\n _collections = undefined; // clear collection cache, so it's refetched\n\n const cloudServices = Runtime.instance.getMetaData(\"cloudservices\");\n if (cloudServices) {\n this.appId = cloudServices.appId;\n this.endpoint = cloudServices.endpoint;\n }\n\n const dbVersionMajor = Runtime.instance.getMetaData(\"dbVersionMajor\");\n this.dbVersionMajor = dbVersionMajor;\n }\n\n on() {\n this.events.on.apply(this.events, arguments);\n }\n\n off() {\n this.events.off.apply(this.events, arguments);\n }\n\n _makeRequest(path, options) {\n if (typeof _noodl_cloud_runtime_version === \"undefined\") {\n // Running in browser\n var xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n var json;\n try {\n // In SSR, we dont have xhr.response\n json = JSON.parse(xhr.response || xhr.responseText);\n } catch (e) {}\n\n if (xhr.status === 200 || xhr.status === 201) {\n options.success(json);\n } else\n options.error(\n json || { error: xhr.responseText, status: xhr.status }\n );\n }\n };\n\n xhr.open(options.method || \"GET\", this.endpoint + path, true);\n\n xhr.setRequestHeader(\"X-Parse-Application-Id\", this.appId);\n if (typeof _noodl_cloudservices !== \"undefined\") {\n xhr.setRequestHeader(\n \"X-Parse-Master-Key\",\n _noodl_cloudservices.masterKey\n );\n }\n\n // Check for current users\n var _cu = localStorage[\"Parse/\" + this.appId + \"/currentUser\"];\n if (_cu !== undefined) {\n try {\n const currentUser = JSON.parse(_cu);\n xhr.setRequestHeader(\n \"X-Parse-Session-Token\",\n currentUser.sessionToken\n );\n } catch (e) {\n // Failed to extract session token\n }\n }\n\n if (options.onUploadProgress) {\n xhr.upload.onprogress = (pe) => options.onUploadProgress(pe);\n }\n\n if (options.content instanceof File) {\n xhr.send(options.content);\n } else {\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n xhr.send(JSON.stringify(options.content));\n }\n } else {\n // Running in cloud runtime\n const endpoint =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.endpoint\n : this.endpoint;\n const appId =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.appId\n : this.appId;\n const masterKey =\n typeof _noodl_cloudservices !== \"undefined\"\n ? _noodl_cloudservices.masterKey\n : undefined;\n\n fetch(endpoint + path, {\n method: options.method || \"GET\",\n headers: {\n \"X-Parse-Application-Id\": appId,\n \"X-Parse-Master-Key\": masterKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(options.content),\n })\n .then((r) => {\n if (r.status === 200 || r.status === 201) {\n if (options.method === \"DELETE\") {\n options.success(undefined);\n } else {\n r.json()\n .then((json) => options.success(json))\n .catch((e) =>\n options.error({\n error: \"CloudStore: Failed to get json result.\",\n })\n );\n }\n } else {\n if (options.method === \"DELETE\") {\n options.error({ error: \"Failed to delete.\" });\n } else {\n r.json()\n .then((json) => options.error(json))\n .catch((e) => options.error({ error: \"Failed to fetch.\" }));\n }\n }\n })\n .catch((e) => {\n options.error({ error: e.message });\n });\n }\n }\n\n query(options) {\n this._makeRequest(\"/classes/\" + options.collection, {\n method: \"POST\",\n content: {\n _method: \"GET\",\n where: options.where,\n limit: options.limit,\n skip: options.skip,\n include: Array.isArray(options.include)\n ? options.include.join(\",\")\n : options.include,\n keys: Array.isArray(options.select)\n ? options.select.join(\",\")\n : options.select,\n order: Array.isArray(options.sort)\n ? options.sort.join(\",\")\n : options.sort,\n count: options.count,\n },\n success(response) {\n options.success(response.results, response.count);\n },\n error() {\n options.error();\n },\n });\n }\n\n aggregate(options) {\n const args = [];\n\n if (!options.group) {\n options.error(\"You need to provide group option.\");\n return;\n }\n\n if (options.limit) args.push(\"limit=\" + options.limit);\n if (options.skip) args.push(\"skip=\" + options.skip);\n\n const grouping = {};\n\n Object.keys(options.group).forEach((k) => {\n const _g = {};\n const group = options.group[k];\n if (group[\"avg\"] !== undefined) _g[\"$avg\"] = \"$\" + group[\"avg\"];\n else if (group[\"sum\"] !== undefined) _g[\"$sum\"] = \"$\" + group[\"sum\"];\n else if (group[\"max\"] !== undefined) _g[\"$max\"] = \"$\" + group[\"max\"];\n else if (group[\"min\"] !== undefined) _g[\"$min\"] = \"$\" + group[\"min\"];\n else if (group[\"distinct\"] !== undefined)\n _g[\"$addToSet\"] = \"$\" + group[\"distinct\"];\n\n grouping[k] = _g;\n });\n\n // I don't know which version the API was changed, lets just say above 4 for now.\n if (this.dbVersionMajor && this.dbVersionMajor > 4) {\n grouping._id = null;\n\n if (options.where)\n args.push(\n \"$match=\" + encodeURIComponent(JSON.stringify(options.where))\n );\n\n args.push(\"$group=\" + JSON.stringify(grouping));\n } else {\n grouping.objectId = null;\n\n if (options.where)\n args.push(\"match=\" + encodeURIComponent(JSON.stringify(options.where)));\n\n args.push(\"group=\" + JSON.stringify(grouping));\n }\n\n this._makeRequest(\n \"/aggregate/\" +\n options.collection +\n (args.length > 0 ? \"?\" + args.join(\"&\") : \"\"),\n {\n success(response) {\n const res = {};\n\n if (!response.results || response.results.length !== 1) {\n options.success({}); // No result\n return;\n }\n\n Object.keys(options.group).forEach((k) => {\n res[k] = response.results[0][k];\n });\n\n options.success(res);\n },\n error() {\n options.error();\n },\n }\n );\n }\n\n count(options) {\n const args = [];\n\n if (options.where)\n args.push(\"where=\" + encodeURIComponent(JSON.stringify(options.where)));\n args.push(\"limit=0\");\n args.push(\"count=1\");\n\n this._makeRequest(\n \"/classes/\" +\n options.collection +\n (args.length > 0 ? \"?\" + args.join(\"&\") : \"\"),\n {\n success(response) {\n options.success(response.count);\n },\n error() {\n options.error();\n },\n }\n );\n }\n\n distinct(options) {\n const args = [];\n\n if (options.where)\n args.push(\"where=\" + encodeURIComponent(JSON.stringify(options.where)));\n args.push(\"distinct=\" + options.property);\n\n this._makeRequest(\n \"/aggregate/\" +\n options.collection +\n (args.length > 0 ? \"?\" + args.join(\"&\") : \"\"),\n {\n success(response) {\n options.success(response.results);\n },\n error() {\n options.error();\n },\n }\n );\n }\n\n /**\n *\n * @param {{\n * objectId: string;\n * collection: string;\n * keys?: string[] | string;\n * include?: string[] | string;\n * excludeKeys?: string[] | string;\n * success: (data: unknown) => void;\n * error: (error: unknown) => void;\n * }} options\n */\n fetch(options) {\n const args = [];\n\n if (options.include) {\n args.push(\n \"include=\" +\n (Array.isArray(options.include)\n ? options.include.join(\",\")\n : options.include)\n );\n }\n\n if (options.keys) {\n args.push(\n \"keys=\" +\n (Array.isArray(options.keys) ? options.keys.join(\",\") : options.keys)\n );\n }\n\n if (options.excludeKeys) {\n args.push(\n \"excludeKeys=\" +\n (Array.isArray(options.excludeKeys)\n ? options.excludeKeys.join(\",\")\n : options.excludeKeys)\n );\n }\n\n this._makeRequest(\n \"/classes/\" +\n options.collection +\n \"/\" +\n options.objectId +\n (args.length > 0 ? \"?\" + args.join(\"&\") : \"\"),\n {\n method: \"GET\",\n success: (response) => {\n options.success(response);\n this.events.emit(\"fetch\", {\n type: \"fetch\",\n objectId: options.objectId,\n object: response,\n collection: options.collection,\n });\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n create(options) {\n this._makeRequest(\"/classes/\" + options.collection, {\n method: \"POST\",\n content: Object.assign(\n _removeProtectedFields(\n _serializeObject(options.data, options.collection),\n options.collection\n ),\n { ACL: options.acl }\n ),\n success: (response) => {\n const _obj = Object.assign({}, options.data, response);\n options.success(_obj);\n this.events.emit(\"create\", {\n type: \"create\",\n objectId: options.objectId,\n object: _obj,\n collection: options.collection,\n });\n },\n error(res) {\n options.error(res.error);\n },\n });\n }\n\n increment(options) {\n const data = {};\n\n for (let key in options.properties) {\n data[key] = { __op: \"Increment\", amount: options.properties[key] };\n }\n\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"PUT\",\n content: data,\n success: (response) => {\n options.success(response);\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n save(options) {\n const _data = Object.assign({}, options.data);\n delete _data.createdAt;\n delete _data.updatedAt;\n\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"PUT\",\n content: Object.assign(\n _removeProtectedFields(\n _serializeObject(_data, options.collection),\n options.collection\n ),\n {\n ACL: options.acl,\n }\n ),\n success: (response) => {\n options.success(response);\n this.events.emit(\"save\", {\n type: \"save\",\n objectId: options.objectId,\n object: Object.assign({}, options.data, response),\n collection: options.collection,\n });\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n delete(options) {\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"DELETE\",\n success: () => {\n options.success();\n this.events.emit(\"delete\", {\n type: \"delete\",\n objectId: options.objectId,\n collection: options.collection,\n });\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n addRelation(options) {\n const _content = {};\n _content[options.key] = {\n __op: \"AddRelation\",\n objects: [\n {\n __type: \"Pointer\",\n objectId: options.targetObjectId,\n className: options.targetClass,\n },\n ],\n };\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"PUT\",\n content: _content,\n success(response) {\n options.success(response);\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n removeRelation(options) {\n const _content = {};\n _content[options.key] = {\n __op: \"RemoveRelation\",\n objects: [\n {\n __type: \"Pointer\",\n objectId: options.targetObjectId,\n className: options.targetClass,\n },\n ],\n };\n this._makeRequest(\n \"/classes/\" + options.collection + \"/\" + options.objectId,\n {\n method: \"PUT\",\n content: _content,\n success(response) {\n options.success(response);\n },\n error(res) {\n options.error(res.error);\n },\n }\n );\n }\n\n uploadFile(options) {\n this._makeRequest(\"/files/\" + options.file.name, {\n method: \"POST\",\n content: options.file,\n contentType: options.file.type,\n success: (response) =>\n options.success(Object.assign({}, options.data, response)),\n error: (err) => options.error(err),\n onUploadProgress: options.onUploadProgress,\n });\n }\n\n /**\n * Users holding the master key are allowed to delete files\n *\n * @param {{\n * file: {\n * name: string;\n * }\n * success: (data: unknown) => void;\n * error: (error: unknown) => void;\n * }} options\n */\n deleteFile(options) {\n this._makeRequest(\"/files/\" + options.file.name, {\n method: \"DELETE\",\n success: (response) =>\n options.success(Object.assign({}, options.data, response)),\n error: (err) => options.error(err),\n });\n }\n}\n\nfunction _isArrayOfObjects(a) {\n if (!Array.isArray(a)) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (typeof a[i] !== \"object\" || a[i] === null) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction _toJSON(obj) {\n if (obj instanceof Model) {\n var res = {};\n for (var key in obj.data) {\n res[key] = _toJSON(obj.data[key]);\n }\n return res;\n } else if (obj instanceof Collection) {\n var res = [];\n obj.items.forEach((m) => {\n res.push(_toJSON(m));\n });\n return res;\n }\n return obj;\n}\n\nfunction _serializeObject(data, collectionName, modelScope) {\n if (CloudStore._collections[collectionName])\n var schema = CloudStore._collections[collectionName].schema;\n\n for (var key in data) {\n var _type =\n schema && schema.properties && schema.properties[key]\n ? schema.properties[key].type\n : undefined;\n\n if (data[key] === undefined || data[key] === null) {\n // Keep null and undefined as is\n } else if (_type === \"Pointer\" && typeof data[key] === \"string\") {\n // This is a string pointer to an object\n data[key] = {\n __type: \"Pointer\",\n className: schema.properties[key].targetClass,\n objectId: data[key],\n };\n } else if (\n _type === \"Pointer\" &&\n typeof data[key] === \"object\" &&\n (modelScope || Model).instanceOf(data[key])\n ) {\n // This is an embedded object that should be stored as pointer\n data[key] = {\n __type: \"Pointer\",\n className: schema.properties[key].targetClass,\n objectId: data[key].getId(),\n };\n } else if (\n _type === \"Date\" &&\n (typeof data[key] === \"string\" || data[key] instanceof Date)\n ) {\n data[key] = {\n __type: \"Date\",\n iso: data[key] instanceof Date ? data[key].toISOString() : data[key],\n };\n } else if (_type === \"File\" && data[key] instanceof CloudFile) {\n const cloudFile = data[key];\n data[key] = {\n __type: \"File\",\n url: cloudFile.getUrl(),\n name: cloudFile.getName(),\n };\n } else if (\n _type === \"Array\" &&\n typeof data[key] === \"string\" &&\n Collection.exists(data[key])\n ) {\n data[key] = _toJSON(Collection.get(data[key]));\n } else if (\n _type === \"Object\" &&\n typeof data[key] === \"string\" &&\n (modelScope || Model).exists(data[key])\n ) {\n data[key] = _toJSON((modelScope || Model).get(data[key]));\n } else if (_type === \"GeoPoint\" && typeof data[key] === \"object\") {\n data[key] = {\n __type: \"GeoPoint\",\n latitude: Number(data[key].latitude),\n longitude: Number(data[key].longitude),\n };\n } else data[key] = _toJSON(data[key]);\n }\n\n return data;\n}\n\n/**\n *\n * @param {unknown} data\n * @param {string} type\n * @param {*} modelScope\n * @returns\n */\nfunction _deserializeJSON(data, type, modelScope) {\n if (data === undefined) return undefined;\n if (data === null) return null;\n\n if (type === \"Relation\" && data.__type === \"Relation\") {\n return undefined; // Ignore relation fields\n }\n\n // This is a pointer type, resolve into id\n if (type === \"Pointer\" && data.__type === \"Pointer\") {\n return data.objectId;\n }\n\n if (type === \"Date\" && data.__type === \"Date\") {\n return new Date(data.iso);\n }\n\n if (type === \"Date\" && typeof data === \"string\") {\n return new Date(data);\n }\n\n if (type === \"File\" && data.__type === \"File\") {\n return new CloudFile(data);\n }\n\n if (type === \"GeoPoint\" && data.__type === \"GeoPoint\") {\n return {\n latitude: data.latitude,\n longitude: data.longitude,\n };\n }\n\n if (_isArrayOfObjects(data)) {\n const a = [];\n for (let i = 0; i < data.length; i++) {\n a.push(_deserializeJSON(data[i], undefined, modelScope));\n }\n const c = Collection.get();\n c.set(a);\n return c;\n }\n\n // An array with mixed types\n if (Array.isArray(data)) {\n return data;\n }\n\n // This is an array with mixed data, just return it\n if (\n data &&\n data.__type === \"Object\" &&\n data.className !== undefined &&\n data.objectId !== undefined\n ) {\n const _data = Object.assign({}, data);\n delete _data.className;\n delete _data.__type;\n return _fromJSON(_data, data.className, modelScope);\n }\n\n if (typeof data === \"object\" && data !== null) {\n // Try to get the model by id, if it is defined, otherwise we create a new unique id.\n const model = (modelScope || Model).get(data.id);\n for (const key in data) {\n const nestedValue = _deserializeJSON(data[key], undefined, modelScope);\n model.set(key, nestedValue);\n }\n return model;\n }\n\n return data;\n}\n\nfunction _fromJSON(item, collectionName, modelScope) {\n const modelStore = modelScope || Model;\n\n // Try to get the model by the object id (record) or id, otherwise we create a new unique id.\n const model = modelStore.get(item.objectId || item.id);\n model._class = collectionName;\n\n let schema = undefined;\n if (\n collectionName !== undefined &&\n CloudStore._collections[collectionName] !== undefined\n ) {\n schema = CloudStore._collections[collectionName].schema;\n }\n\n for (const key in item) {\n if (key === \"objectId\" || key === \"ACL\") {\n continue;\n }\n\n const _type =\n schema && schema.properties && schema.properties[key]\n ? schema.properties[key].type\n : undefined;\n const nestedValue = _deserializeJSON(item[key], _type, modelScope);\n model.set(key, nestedValue);\n }\n\n return model;\n}\n\nCloudStore._fromJSON = _fromJSON;\nCloudStore._deserializeJSON = _deserializeJSON;\nCloudStore._serializeObject = _serializeObject;\n\nCloudStore.forScope = (modelScope) => {\n if (modelScope === undefined) return CloudStore.instance;\n if (modelScope._cloudStore) return modelScope._cloudStore;\n\n modelScope._cloudStore = new CloudStore(modelScope);\n return modelScope._cloudStore;\n};\n\nvar _instance;\nObject.defineProperty(CloudStore, \"instance\", {\n get() {\n if (_instance === undefined) _instance = new CloudStore();\n return _instance;\n },\n});\n\nvar _collections;\nObject.defineProperty(CloudStore, \"_collections\", {\n get() {\n if (_collections === undefined) {\n _collections = {};\n const dbCollections = Runtime.instance.getMetaData(\"dbCollections\") || [];\n dbCollections.forEach((c) => {\n _collections[c.name] = c;\n });\n\n const systemCollections =\n Runtime.instance.getMetaData(\"systemCollections\") || [];\n systemCollections.forEach((c) => {\n _collections[c.name] = c;\n });\n }\n return _collections;\n },\n});\n\nCloudStore.invalidateCollections = () => {\n _collections = undefined;\n};\n\nexport { CloudStore };\n","import { CloudStore } from \"./cloudstore\";\nimport * as QueryUtils from \"./queryutils\";\nimport { Model } from \"../model\";\n\nfunction createRecordsAPI(modelScope) {\n let _cloudstore;\n const cloudstore = () => {\n // We must create the cloud store just in time so all meta data is loaded\n if (!_cloudstore) _cloudstore = new CloudStore(modelScope);\n return _cloudstore;\n };\n\n return {\n async query(className, query, options) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().query({\n collection: className,\n where: QueryUtils.convertFilterOp(query || {}, {\n collectionName: className,\n error: (e) => reject(e),\n modelScope,\n }),\n limit: options ? options.limit : undefined,\n sort: options ? options.sort : undefined,\n skip: options ? options.skip : undefined,\n include: options ? options.include : undefined,\n select: options ? options.select : undefined,\n count: options ? options.count : undefined,\n success: (results, count) => {\n const _results = results.map((r) =>\n cloudstore()._fromJSON(r, className)\n );\n if (count !== undefined) resolve({ results: _results, count });\n else resolve(_results);\n },\n error: (err) => {\n reject(Error(err || \"Failed to query.\"));\n },\n });\n });\n },\n\n async count(className, query) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().count({\n collection: className,\n where: query\n ? QueryUtils.convertFilterOp(query || {}, {\n collectionName: className,\n error: (e) => reject(e),\n modelScope,\n })\n : undefined,\n success: (count) => {\n resolve(count);\n },\n error: (err) => {\n reject(Error(err || \"Failed to query.\"));\n },\n });\n });\n },\n\n async distinct(className, property, query) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().distinct({\n collection: className,\n property,\n where: query\n ? QueryUtils.convertFilterOp(query || {}, {\n collectionName: className,\n error: (e) => reject(e),\n modelScope,\n })\n : undefined,\n success: (results) => {\n resolve(results);\n },\n error: (err) => {\n reject(Error(err || \"Failed to query.\"));\n },\n });\n });\n },\n\n async aggregate(className, group, query) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().aggregate({\n collection: className,\n group,\n where: query\n ? QueryUtils.convertFilterOp(query || {}, {\n collectionName: className,\n error: (e) => reject(e),\n modelScope,\n })\n : undefined,\n success: (results) => {\n resolve(results);\n },\n error: (err) => {\n reject(Error(err || \"Failed to aggregate.\"));\n },\n });\n });\n },\n\n /**\n *\n * @param {string | { getId(): string; }} objectOrId\n * @param {{\n * className: string;\n * keys?: string[] | string;\n * include?: string[] | string;\n * excludeKeys?: string[] | string;\n * }} options\n * @returns {Promise<unknown>}\n */\n async fetch(objectOrId, options) {\n if (typeof objectOrId === \"undefined\")\n return Promise.reject(new Error(\"'objectOrId' is undefined.\"));\n if (typeof objectOrId !== \"string\") objectOrId = objectOrId.getId();\n const className =\n (options ? options.className : undefined) ||\n (modelScope || Model).get(objectOrId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) {\n return reject(\"No class name specified\");\n }\n\n cloudstore().fetch({\n collection: className,\n objectId: objectOrId,\n keys: options?.keys,\n include: options?.include,\n excludeKeys: options?.excludeKeys,\n success(response) {\n const record = cloudstore()._fromJSON(response, className);\n resolve(record);\n },\n error(err) {\n reject(Error(err || \"Failed to fetch.\"));\n },\n });\n });\n },\n\n async increment(objectOrId, properties, options) {\n if (typeof objectOrId === \"undefined\")\n return Promise.reject(new Error(\"'objectOrId' is undefined.\"));\n if (typeof objectOrId !== \"string\") objectOrId = objectOrId.getId();\n const className =\n (options ? options.className : undefined) ||\n (modelScope || Model).get(objectOrId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n\n cloudstore().increment({\n collection: className,\n objectId: objectOrId,\n properties,\n success: (response) => {\n cloudstore()._fromJSON(\n Object.assign({ objectId: objectOrId }, response),\n className\n ); // Update values\n\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to increment.\"));\n },\n });\n });\n },\n\n async save(objectOrId, properties, options) {\n if (typeof objectOrId === \"undefined\")\n return Promise.reject(new Error(\"'objectOrId' is undefined.\"));\n if (typeof objectOrId !== \"string\") objectOrId = objectOrId.getId();\n const className =\n (options ? options.className : undefined) ||\n (modelScope || Model).get(objectOrId)._class;\n\n const model = (modelScope || Model).get(objectOrId);\n if (properties) {\n Object.keys(properties).forEach((p) => {\n model.set(p, properties[p]);\n });\n }\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n\n cloudstore().save({\n collection: className,\n objectId: objectOrId,\n data: properties || model.data,\n acl: options ? options.acl : undefined,\n success: (response) => {\n cloudstore()._fromJSON(\n Object.assign({ objectId: objectOrId }, response),\n className\n ); // Assign updated at\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to save.\"));\n },\n });\n });\n },\n\n async create(className, properties, options) {\n if (typeof className === \"undefined\")\n throw new Error(\"'className' is undefined\");\n return new Promise((resolve, reject) => {\n cloudstore().create({\n collection: className,\n data: properties,\n acl: options ? options.acl : undefined,\n success: (data) => {\n // Successfully created\n const m = cloudstore()._fromJSON(data, className);\n resolve(m);\n },\n error: (err) => {\n reject(Error(err || \"Failed to insert.\"));\n },\n });\n });\n },\n\n async delete(objectOrId, options) {\n if (typeof objectOrId === \"undefined\")\n return Promise.reject(new Error(\"'objectOrId' is undefined.\"));\n if (typeof objectOrId !== \"string\") objectOrId = objectOrId.getId();\n const className =\n (options ? options.className : undefined) ||\n (modelScope || Model).get(objectOrId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n\n cloudstore().delete({\n collection: className,\n objectId: objectOrId,\n success: () => {\n (modelScope || Model).get(objectOrId).notify(\"delete\");\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to delete.\"));\n },\n });\n });\n },\n\n async addRelation(options) {\n const recordId = options.recordId || options.record.getId();\n const className =\n options.className || (modelScope || Model).get(recordId)._class;\n\n const targetRecordId =\n options.targetRecordId || options.targetRecord.getId();\n const targetClassName =\n options.targetClassName ||\n (modelScope || Model).get(targetRecordId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n if (!targetClassName) return reject(\"No target class name specified\");\n\n cloudstore().addRelation({\n collection: className,\n objectId: recordId,\n key: options.key,\n targetObjectId: targetRecordId,\n targetClass: targetClassName,\n success: (response) => {\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to add relation.\"));\n },\n });\n });\n },\n\n async removeRelation(options) {\n const recordId = options.recordId || options.record.getId();\n const className =\n options.className || (modelScope || Model).get(recordId)._class;\n\n const targetRecordId =\n options.targetRecordId || options.targetRecord.getId();\n const targetClassName =\n options.targetClassName ||\n (modelScope || Model).get(targetRecordId)._class;\n\n return new Promise((resolve, reject) => {\n if (!className) return reject(\"No class name specified\");\n if (!targetClassName) return reject(\"No target class name specified\");\n\n cloudstore().removeRelation({\n collection: className,\n objectId: recordId,\n key: options.key,\n targetObjectId: targetRecordId,\n targetClass: targetClassName,\n success: (response) => {\n resolve();\n },\n error: (err) => {\n reject(Error(err || \"Failed to add relation.\"));\n },\n });\n });\n },\n };\n}\n\nexport { createRecordsAPI };\n"],"names":["name","url","target","receiver","args","warning","value","listener","arg","n","that","type","i","doError","events","er","err","handler","len","listeners","prepend","m","existing","w","state","wrapped","list","position","originalListener","keys","key","unwrap","evlistener","emitter","arr","copy","index","ret","resolve","reject","errorListener","resolver","flags","wrapListener","context","nodeDefinition","id","nodeScope","inputName","metadata","scheduler","requestFrameCallback","timer","currentTime","remainingTimers","finishedTimers","timersThisFrame","t","localT","graphModel","getNodeScope","variant","typename","nodesWithVariant","node","inputPortName","connection","input","defaultUnit","inputs","newValue","output","newOutput","outputs","sourceNode","sourcePortName","sourcePort","outputValue","sourceNodeId","inputsToPort","c","maxUpdateIterations","inputNames","hasMoreInputs","queue","afterInputCallbacks","e","connectedPorts","outputName","queueValue","callback","nodeModel","port","deleteListener","event","defaultValue","s4","componentOwner","data","requiredKeys","connectionData","targetNode","parameters","b","inputA","inputB","updateOnDirtyFlagging","parentInstance","nodeInstance","childIndex","extraProps","prop","findNodesWithIdRec","scope","result","componentIds","nodeId","componentId","self","ids","findNodesWithTypeRec","res","connectionModel","componentModel","nodes","conn","child","connectionFrom","connectionTo","eventName","propagation","sendEventInThisScope","_exclude","eventReceivers","eventReceiver","consumed","parentNodeScope","children","_c","roots","root","removeNodesWithId","array","componentInput","prevChildRoot","newChildRoot","childRoot","componentInputs","componentOutput","inspectors","clientId","connectionId","rootComponent","inspector","loop","iterations","dirtyNodes","callbacks","eventEmitter","func","fetchBundle","bundleUrl","response","component","promise","bundleName","bundleDep","componentName","timestamp","connections","now","connectionIds","con","info","valuesToSend","inspectorValue","enabled","channelName","inputValues","onShow","onClose","popupComponent","params","popupNode","inputKey","group","bodyScroll","closePopupNodes","j","action","results","warningTypes","nodeType","inputMetadata","ref","map","warningKeys","opts","_opts","runningLocallyInBrowser","address","evt","text","message","content","seen","dt","trySend","msg","chunkSize","chunk","connectionMap","connectionsToPulse","before","after","ports","options","hash","detectRenamed","renamed","d","patches","request","nodelibrary","nodeMetadata","dynamicports","dp","dynamicPortGroup","portName","portData","plugType","nodeRegister","obj","nodeTypes","nodeObj","selectorNames","conditionalPortNames","exportOutput","coreNodes","moduleNodes","modules","p","projectSettings","stateTransitions","parameter","curve","stateTransition","changed","nodeData","targetPortName","rootId","oldName","newName","childModel","newParentModel","parentId","componentData","sheetName","bundles","isOnDefaultSheet","recurse","bundle","dep","exportData","componentNames","inputPorts","outputPorts","settings","v","variantName","variantTypeName","parameterName","parameterValue","transition","currentValue","cls","object","numberedInputs","oldRegisterInputIfNeeded","defaultValues","inputsMetadata","propName","NodeConstructor","editorConnection","collectPorts","portNames","numPorts","updatePorts","obj1","obj2","oldInit","difference","array1","array2","valueSet","applyPortDelta","newPorts","existingInputs","inputPortsToRemove","inputPortsToAdd","setInputValueOnNodeInstancesWithModel","existingOutputs","outputPortsToRemove","outputPortsToAdd","eventHandlers","targetNodeModel","allParams","param","componentInstance","poolLimit","values","iteratorFn","executing","item","modelData","collection","size","chars","objectId","guid","idx","l","old","temp","path","model","forceChange","oldValue","itemNode","internal","_isInputConnected","task","taskComponent","checkDone","op","script","status","_this","xhr","header","sentResponse","statusCode","responseType","rawResponse","responseData","headers","json","raw","resource","_exists","scriptWithoutComments","unique","_managePortsForNode","_updatePorts","exists","def","LARGE_ARRAY_SIZE","HASH_UNDEFINED","MAX_SAFE_INTEGER","argsTag","funcTag","genTag","reRegExpChar","reIsHostCtor","freeGlobal","global","freeSelf","apply","thisArg","arrayIncludes","length","baseIndexOf","arrayPush","offset","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","cacheHas","cache","getValue","isHostObject","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","uid","funcToString","hasOwnProperty","objectToString","reIsNative","Symbol","propertyIsEnumerable","splice","spreadableSymbol","nativeMax","Map","getNative","nativeCreate","Hash","entries","entry","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","setCacheAdd","setCacheHas","eq","baseDifference","iteratee","comparator","includes","isCommon","valuesLength","outer","computed","valuesIndex","baseFlatten","depth","isStrict","isFlattenable","baseIsNative","isObject","isMasked","pattern","isFunction","toSource","baseRest","start","otherArgs","isKeyable","isArray","isArguments","isArrayLikeObject","other","isArrayLike","isLength","isObjectLike","tag","newInputs","inputsToAdd","inputsToRemove","lastValue","inputValue","expression","constructor","F","addPort","identifiers","_id","_url","error","code","userCode","userObject","_extended","states","changedFunction","_userObjectExtended","_Node","_outputs","changedInputs","_addPortsFromMatch","match","_s","inputPort","getParentComponent","parent","componentObject","parentComponentObjectId","parentComponentObject","_sendSignal","AsyncFunction","_outputTypeEnums","ev","src","keyIndex","a","bItems","aItems","aKeys","bKeys","items","query","_res","_op","r","cond","schema","propertyType","targetClass","q","k","sort","sorting","s","filter","f","modelId","relationKey","className","opAndValue","_v","gp","collectionChangedScheduled","_addModelAtCorrectIndex","QueryUtils.compareObjects","QueryUtils.matchesQuery","matchesQuery","cloudstore","firstItem","limit","skip","count","storageSettings","_where","QueryUtils.convertVisualFilter","_sort","QueryUtils.convertVisualSorting","filterCode","_filter","_filterCb","QueryUtils.convertFilterOp","_sortCb","filterFuncArgs","userOutputGetter","dynamicSignals","dynamicSetters","userInputSetter","dbCollections","systemCollections","_systemClasses","_findRelations","_collectInputs","uniqueInputs","variables","ModelNodeDefinition","cb","_type","props","_p","_typeMap","addBaseInfo","_includeInputProperties","_includeRelations","enums","addModelId","_methods","_includeInputs","_includeOutputs","addInputProperties","_def","modelScope","_cu","cu","_super","ac","prefix","acl","_rule","rule","currentUserId","userId","_parts","DbModelCRUDBase.addBaseInfo","DbModelCRUDBase.addModelId","DbModelCRUDBase.addInputProperties","DbModelCRUDBase.addAccessControl","initValues","AddDbModelRelationNodeDefinition","_warning","targetModelId","_key","DbModelCRUDBase.addRelationProperty","filterSettings","filtered","_supportedTypes","properties","_types","ModelCRUDBase.addBaseInfo","ModelCRUDBase.addModelId","ModelCRUDBase.addInputProperties","newModel","_ConfigService","cloudServices","appId","endpoint","masterKey","config","configSchema","valueType","isCloud","condition","_value","format","date","month","monthShort","year","yearShort","hours","minutes","seconds","formatted","matches","portsNames","_ignoreKeys","userService","Runtime","RestNode","SetDbModelPropertiesNode","DeleteDbModelPropertiesNode","NewDbModelPropertiesNode","DbModelNodeAddRelation","DbModelNodeRemoveRelation","SetModelPropertiesNode","NewModelNode","CloudFileNode","bundleNames","numParallelFetches","objectEquals","x","y","allBundles","module","definedNode","rootComponentName","graphData","ProjectSettings.generateProjectSettings","nodeLibrary","EditorModelEventsHandler.handleEvent","eh","_data","collectionName","dbVersionMajor","currentUser","pe","grouping","_g","_obj","_content","cloudFile","nestedValue","_cloudstore","_results","property","objectOrId","record","recordId","targetRecordId","targetClassName"],"mappings":"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","x_google_ignoreList":[29]}
|