UNPKG

15.6 kBSource Map (JSON)View Raw
1{"version":3,"file":"patella.cjs.js","sources":["../lib/util.js","../lib/computed.js","../lib/reactive.js","../lib/ignore.js","../lib/dispose.js"],"sourcesContent":["// Global object/function references\nvar _Object = Object;\nvar _Object_hasOwnProperty = _Object.hasOwnProperty;\nvar _Array_isArray = Array.isArray;\nvar _Error = Error;\nvar _TypeError = TypeError;\n\n/** Reference to global Object.defineProperty */\nexport var defineProperty = _Object.defineProperty;\n\n/**\n * Checks if an object has a specified property as its own property (ignores prototype properties and `__proto__`)\n * @param object Object to check\n * @param key Property key\n * @returns Does `object` have the property `key`?\n */\nexport function hasOwnProperty(object, key) {\n return key !== \"__proto__\" && _Object_hasOwnProperty.call(object, key);\n}\n\n/**\n * Creates an ECMAScript 6 Symbol, falling back to a simple string in environments that do not support Symbols\n * @param description Symbol description\n * @returns Symbol object or string\n * @function\n */\n/* c8 ignore start */\n/* istanbul ignore next */\nvar createSymbol =\n typeof Symbol === \"function\"\n ? Symbol\n : function (description) {\n return \"__\" + description;\n };\n/* c8 ignore stop */\n\n/** Hint property to indicate if an object has been observed */\nexport var HINT_OBSERVE = createSymbol(\"observe\");\n/** Hint property to indicate if a function has been disposed */\nexport var HINT_DISPOSE = createSymbol(\"dispose\");\n/** Hint property that contains a function's dependency disposal callbacks */\nexport var HINT_DEPENDS = createSymbol(\"depends\");\n\n/**\n * Defines a hint property on an object\n * @param object Object to define property on\n * @param hint Property key\n * @param {*} [value] Property value, property will be made non-configurable if this is unset (`undefined`)\n */\nexport function defineHint(object, hint, value) {\n defineProperty(object, hint, {\n value: value,\n configurable: value !== void 0,\n enumerable: false,\n writable: false\n });\n}\n\n/**\n * Checks if a value is a normal object, ignores functions and arrays\n * @param value Value to check\n * @returns Is `value` a normal object?\n */\nexport function isObject(value) {\n return value !== null && typeof value === \"object\" && !_Array_isArray(value);\n}\n\n/**\n * Checks if a value is a function\n * @param value Value to check\n * @return Is `value` a function?\n */\nexport function isFunction(value) {\n return typeof value === \"function\";\n}\n\n/** Error message printed when an argument is of an incorrect type (not a normal object) */\nexport var MESSAGE_NOT_OBJECT = \"Argument 'object' is not an object\";\n/** Error message printed when an argument is of an incorrect type (not a function) */\nexport var MESSAGE_NOT_FUNCTION = \"Argument 'func' is not a function\";\n\n/**\n * Throws an error message\n * @param message Message to construct the error with\n * @param generic Should the more generic `Error` be thrown instead of `TypeError`?\n */\nexport function throwError(message, generic) {\n throw new (generic ? _Error : _TypeError)(message);\n}\n","import {\n isFunction,\n hasOwnProperty,\n HINT_DISPOSE, HINT_DEPENDS, defineHint,\n MESSAGE_NOT_FUNCTION, throwError\n} from \"./util.js\";\n\n/** Maximum queue length */\nvar MAX_QUEUE = 2000;\n\n/** Is the queue being executed? */\nexport var computedLock = false;\n/** Queue of computed functions to be called */\nexport var computedQueue = [];\n/** Current index into `computedQueue` */\nexport var computedI = 0;\n\n/**\n * Throws an error indicating that the computed queue has overflowed\n */\nfunction computedOverflow() {\n var message = \"Computed queue overflow! Last 10 functions in the queue:\";\n\n var length = computedQueue.length;\n for (var i = length - 11; i < length; i++) {\n var func = computedQueue[i];\n message +=\n \"\\n\"\n + (i + 1)\n + \": \"\n + (func.name || \"anonymous\");\n }\n\n throwError(message, true);\n}\n\n/**\n * Attempts to add a function to the computed queue, then attempts to lock and execute the computed queue\n * @param func Function to queue\n */\nexport function computedNotify(func) {\n if (hasOwnProperty(func, HINT_DISPOSE)) return;\n\n // Only add to the queue if not already pending execution\n if (computedQueue.lastIndexOf(func) >= computedI) return;\n computedQueue.push(func);\n\n // Make sure that the function in question has a depends hint\n if (!hasOwnProperty(func, HINT_DEPENDS)) {\n defineHint(func, HINT_DEPENDS, []);\n }\n\n // Attempt to lock and execute the queue\n if (!computedLock) {\n computedLock = true;\n\n try {\n for (; computedI < computedQueue.length; computedI++) {\n // Indirectly call the function to avoid leaking `computedQueue` as `this`\n (0, computedQueue[computedI])();\n if (computedI > MAX_QUEUE) /* @__NOINLINE */ computedOverflow();\n }\n } finally {\n computedLock = false;\n computedQueue = [];\n computedI = 0;\n }\n }\n}\n\n/** See lib/patella.d.ts */\nexport function computed(func) {\n if (!isFunction(func)) {\n throwError(MESSAGE_NOT_FUNCTION);\n }\n\n computedNotify(func);\n return func;\n}\n","import { computedQueue, computedI, computedNotify } from \"./computed.js\";\nimport {\n isObject, isFunction,\n hasOwnProperty, defineProperty,\n HINT_OBSERVE, HINT_DEPENDS, defineHint,\n MESSAGE_NOT_OBJECT, throwError\n} from \"./util.js\";\n\n/**\n * Generates a property descriptor for a reactive property\n * @param value Initial property value\n * @returns Property descriptor object\n */\nfunction reactiveProperty(value) {\n if (isObject(value)) reactiveObserve(value);\n\n // List of computed functions that depend on this property\n var depends = [];\n /**\n * Remove a computed function from this reactive property\n * @param func Computed function to remove\n */\n function dependsRemove(func) {\n var i = depends.lastIndexOf(func);\n if (i >= 0) depends.splice(i, 1);\n }\n\n return {\n get: function() {\n // Add the current executing computed function to this reactive property's dependencies\n var func = computedQueue[computedI];\n if (func) {\n var i = depends.lastIndexOf(func);\n if (i < 0) {\n // Add them to our dependencies\n depends.push(func);\n // Add us to their dependants\n func[HINT_DEPENDS].push(dependsRemove);\n }\n }\n\n return value;\n },\n set: function(newValue) {\n if (isObject(newValue)) reactiveObserve(newValue);\n value = newValue;\n\n // Notify all dependencies\n for (var i = 0; i < depends.length; i++) {\n computedNotify(depends[i]);\n }\n }\n };\n}\n\n/**\n * Observes an object by making all of its enumerable properties reactive\n * @param object Object to observe\n */\nfunction reactiveObserve(object) {\n if (hasOwnProperty(object, HINT_OBSERVE)) return;\n defineHint(object, HINT_OBSERVE);\n\n for (var key in object) {\n if (hasOwnProperty(object, key)) {\n try {\n defineProperty(object, key, reactiveProperty(object[key]));\n } catch (err) {}\n }\n }\n}\n\n/** See lib/patella.d.ts */\nexport function observe(object) {\n if (!isObject(object) && !isFunction(object)) {\n throwError(MESSAGE_NOT_OBJECT);\n }\n\n reactiveObserve(object);\n return object;\n}\n","import {\n isObject, isFunction,\n hasOwnProperty,\n HINT_OBSERVE, defineHint,\n MESSAGE_NOT_OBJECT, throwError\n} from \"./util.js\";\n\n/** See lib/patella.d.ts */\nexport function ignore(object) {\n if (!isObject(object) && !isFunction(object)) {\n throwError(MESSAGE_NOT_OBJECT);\n }\n\n if (!hasOwnProperty(object, HINT_OBSERVE)) {\n defineHint(object, HINT_OBSERVE);\n }\n\n return object;\n}\n","import { computedLock, computedQueue, computedI } from \"./computed.js\";\nimport {\n isFunction,\n hasOwnProperty,\n HINT_DISPOSE, HINT_DEPENDS, defineHint,\n MESSAGE_NOT_FUNCTION, throwError\n} from \"./util.js\";\n\n/** See lib/patella.d.ts */\nexport function dispose(func, clean) {\n if (func == null) {\n func = computedQueue[computedI];\n if (!func) {\n throwError(\"Tried to dispose of current computed function while not running a computed function\", true);\n }\n } else if (!isFunction(func)) {\n throwError(MESSAGE_NOT_FUNCTION);\n }\n\n // Only execute if the function has not been disposed yet\n if (!hasOwnProperty(func, HINT_DISPOSE)) {\n // Only define disposed property if we aren't cleaning\n if (!clean) defineHint(func, HINT_DISPOSE);\n\n // Remove from dependant reactive objects\n var depends = func[HINT_DEPENDS];\n if (depends) {\n defineHint(func, HINT_DEPENDS, clean ? [] : void 0);\n for (var i = 0; i < depends.length; i++) {\n depends[i](func);\n }\n }\n\n // Remove from the queue if locked and pending execution\n if (computedLock) { // Not required, but saves a `lastIndexOf` call on an empty array for like 6 bytes\n var i = computedQueue.lastIndexOf(func);\n if (i > computedI) computedQueue.splice(i, 1);\n }\n }\n\n // Only return the function if it was specified as an argument\n if (!computedLock) return func;\n}\n"],"names":[],"mappings":"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"}
\No newline at end of file