{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-function-completion/src/client/lang/lang.js"],"names":["extend","_","self","that","extendFromLodash","obj","propNames","genFunc","name","args","toString","split","replace","shift","argsString","join","Function","definitionParts","map","propName","definition","Object","assign","pairComparator","pair1","pair2","first","second","pairsDiff","obj1","obj2","pairs1","toPairs","pairs2","onlyLeft","differenceWith","both","intersectionWith","onlyRight","prototype","deepProperty","paths","Array","isArray","at","get","computeDiff","other","arr","fromPairs","migrateTo","NewClass","constructor","__proto__","delay","wait","noop","identity","value","generatorPrototype","toArray","result","item","push","asyncGeneratorPrototype","HTMLElement","getJSONAttribute","str","getAttribute","JSON","parse","setJSONAttribute","json","setAttribute","stringify","Date","dayInWeek","offset","day","getDay","d","getDate","resultDay","setDate","mondayInWeek","tuesdayInWeek","wednesdayInWeek","thursdayInWeek","fridayInWeek","saturdayInWeek","sundayInWeek","toFormattedString","format","toStringWithTrailingZero","number","yyyy","getFullYear","yy","substr","MM","getMonth","dd","hh","getHours","mm","getMinutes","ss","getSeconds","Set","arrs","from","mapExtensions","getOrCreate","key","createCallback","has","set","Map","WeakMap","average","length","NaN","sum","last","intersect","arrays","intersection","otherArray","difference","removeAll","predicate","remove","zip","yieldAll","joinElements","builder","lastItem","index","count","filter","NodeList","Number","to","end","step","range","String","fetchText","options","fetch","then","r","text","fetchJSON","fetchStats","method","lines","Promise","through","func","val","URL","livelyInspect","contentNode","inspector","innerHTML","entries","lively","allKeys","node","display","appendChild","Animation","whenFinished","callback","resolve","onFinished","playState","addEventListener","window","originalGetComputedStyle","getComputedStyle","element","undefined"],"mappings":"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","file":"lang.js","sourcesContent":["import { extend } from './utils.js';\nimport * as _ from 'src/external/lodash/lodash.js';\n\n// ensure global variable 'that'\nself.that = self.that;\n\nfunction extendFromLodash(obj, propNames) {\n  function genFunc(name) {\n    const args = _[name].toString().split(/\\r?\\n/)[0].replace(/.*\\((.*)\\).*/,\"$1\").split(/, /)\n    args.shift();\n    const argsString = args.join(', ');\n    \n    return new Function('_', `return {\n  ${name}(${argsString}) {\n    return _.${name}(this, ${argsString});\n  }\n};`)(_);\n  }\n\n  const definitionParts = propNames.map(propName => genFunc(propName));\n  const definition = Object.assign({}, ...definitionParts);\n\n  return extend(obj, definition);\n}\n\n\nfunction pairComparator(pair1, pair2) {\n  return pair1.first === pair2.first && pair1.second === pair2.second;\n}\n\n/**\n * utility function used to compute turn Objects and\n */\nfunction pairsDiff(obj1, obj2) {\n  const pairs1 = obj1.toPairs();\n  const pairs2 = obj2.toPairs();\n\n  const onlyLeft = _.differenceWith(pairs1, pairs2, pairComparator);\n  const both = _.intersectionWith(pairs1, pairs2, pairComparator);\n  const onlyRight = _.differenceWith(pairs2, pairs1, pairComparator);\n\n  return [onlyLeft, both, onlyRight];\n}\n\n/*MD\n## OBJECT\nMD*/\nextendFromLodash(Object.prototype, [\n  'clone',\n  'cloneDeep',\n  'omit',\n  'pick',\n  'toPairs'\n]);\n\nextend(Object.prototype, {\n  deepProperty(paths) {\n    if (Array.isArray(paths)) {\n      return _.at(this, paths);\n    } else {\n      return _.get(this, paths);\n    }\n  },\n  \n  /**\n   * Computes a more fine-grained difference with a second Object (@link(other)).\n   * @param other (Object/Map) the Object to be compared to.\n   * @returns {Array} [onlyLeft, both, onlyRight] the three Objects corresponding to the respective side of comparison.\n   */\n  computeDiff(other) {\n    return pairsDiff(this, other).map(arr => _.fromPairs(arr));\n  },\n\n  /**\n   * Migrate the instance to the given class by adapting its prototype chain.\n   * @param newClass (Object) the class to migrate to.\n   */\n  migrateTo(NewClass) {\n    this.constructor === NewClass;\n    this.__proto__ = NewClass.prototype;\n  },\n\n});\n\n/*MD\n## FUNCTION\nMD*/\nextendFromLodash(Function.prototype, [\n  'debounce',\n  'defer',\n  /**\n   * @example <caption>Simple Memoization.</caption>\n   * // only consider second argument as key for memoization\n   * var sum = ((x, y) => x + y).memoize((x, y) => y);\n   * sum(1, 2);\n   * // => 3\n   * sum(2, 2);\n   * // => 3, same second argument\n   * sum(1, 3);\n   * // => 4, different second argument\n   */\n  'memoize',\n  'once',\n  'throttle'\n]);\n\nextend(Function.prototype, {\n\n  delay(wait, ...args) {\n    return _.delay(this, wait, args);\n  }\n\n});\n\nextend(Function, {\n\n  noop() { return void 0; },\n  identity(value) { return value; }\n\n});\n\n\n/*MD\n## GENERATOR\nMD*/\n\nconst generatorPrototype = (function*() {}).prototype.constructor;\n\nextend(generatorPrototype, {\n\n  toArray(...args) {\n    const result = [];\n\n    for (let item of this(...args)) {\n      result.push(item)\n    }\n\n    return result;\n  }\n\n});\n\n\n// #TODO: only written in this weird manner due to tooling not supporting async generators (parse error) #Tooling #Tools\nconst asyncGeneratorPrototype = (new Function(`return async function*() {};`))().prototype.constructor;\n\nextend(asyncGeneratorPrototype, new Function(`return {\n\n  async toArray(...args) {\n    const result = [];\n\n    for await (let item of this(...args)) {\n      result.push(item)\n    }\n\n    return result;\n  }\n\n};`)());\n\n/*MD\n## HTMLElement\nMD*/\nextend(HTMLElement.prototype, {\n  getJSONAttribute(name) {\n    let str = this.getAttribute(name);\n    if(str) { return JSON.parse(str); }\n    return null;\n  },\n  \n  setJSONAttribute(name, json) {\n    this.setAttribute(name, JSON.stringify(json));\n    return json;\n  }\n})\n\n/*MD\n## DATE\nMD*/\nextend(Date.prototype, {\n  \n  dayInWeek(offset) {\n    let day = this.getDay()\n    if (day === 0) { day = 7; } // sunday is the end of the week\n    \n    const d = this.getDate();\n\n    const resultDay = new Date(this);\n    resultDay.setDate(d-day + offset);\n\n    return resultDay;\n  },\n\n  mondayInWeek(){ return this.dayInWeek(1); },\n  tuesdayInWeek(){ return this.dayInWeek(2); },\n  wednesdayInWeek(){ return this.dayInWeek(3); },\n  thursdayInWeek(){ return this.dayInWeek(4); },\n  fridayInWeek(){ return this.dayInWeek(5); },\n  saturdayInWeek(){ return this.dayInWeek(6); },\n  sundayInWeek(){ return this.dayInWeek(7); },\n\n  toFormattedString(format){\n    function toStringWithTrailingZero(number) {\n      return (number < 10 ? \"0\" : \"\") + number;\n    }\n\n    const yyyy = this.getFullYear();\n    const yy = yyyy.toString().substr(-2);\n    const MM = toStringWithTrailingZero(this.getMonth() + 1);\n    const dd = toStringWithTrailingZero(this.getDate());\n    const hh = toStringWithTrailingZero(this.getHours());\n    const mm = toStringWithTrailingZero(this.getMinutes());\n    const ss = toStringWithTrailingZero(this.getSeconds());\n    \n    return format\n      .replace(/yyyy/g, yyyy)\n      .replace(/yy/g, yy)\n      .replace(/MM/g, MM)\n      .replace(/dd/g, dd)\n      .replace(/hh/g, hh)\n      .replace(/mm/g, mm)\n      .replace(/ss/g, ss);\n  }\n  \n});\n\n\n/*MD\n## SET\nMD*/\nextend(Set.prototype, {\n\n  /**\n   * Computes a more fine-grained difference with a second Set (@link(other)).\n   * @param other (Set) the Set to be compared to.\n   * @returns {Array} [onlyLeft, both, onlyRight] the three Sets corresponding to the respective side of comparison.\n   */\n  computeDiff(other) {\n    const arrs = Array.from(this).computeDiff(other);\n    return arrs.map(arr => new Set(arr));\n  },\n\n});\n\n\n/*MD\n## MAP/WEAKMAP\nMD*/\nconst mapExtensions = {\n  \n  /**\n   * Tries to get the value stored for the @link(key).\n   * If this fails, generate a new value using the povided callback.\n   *\n   * @public\n   * @param key (*) the key to get the value\n   * @param createCallback (Function) if no value for @link(key) is available, gets the @link(key) to create a value\n   * @returns {*} the value stored for the key\n   */\n  getOrCreate(key, createCallback) {\n    if (!this.has(key)) {\n      this.set(key, createCallback(key));\n    }\n\n    return this.get(key);\n  }\n  \n};\n\nextend(Map.prototype, mapExtensions);\nextend(WeakMap.prototype, mapExtensions);\n\nextend(Map.prototype, {\n\n  /**\n   * Computes a more fine-grained difference with a second Map (@link(other)).\n   * @param other (Object/Map) the Set to be compared to.\n   * @returns {Array} [onlyLeft, both, onlyRight] the three Maps corresponding to the respective side of comparison.\n   */\n  computeDiff(other) {\n    return pairsDiff(this, other).map(arr => new Map(arr));\n  },\n\n});\n\n\n/*MD\n## ARRAY\nMD*/\nextendFromLodash(Array.prototype, [\n  'sortBy',\n  'difference',\n  'groupBy',\n  'countBy',\n  'max',\n  'min',\n  'maxBy',\n  'minBy',\n  'sample',\n  'sampleSize',\n  'shuffle',\n  'sum',\n  'sumBy'\n]);\n\nextend(Array.prototype, {\n\n  average() {\n    if (this.length === 0) {\n      return NaN;\n    } else {\n      return this.sum() / this.length;\n    }\n  },\n\n  get first() { return this[0]; },\n  set first(value) { return this[0] = value; },\n\n  get second() { return this[1]; },\n  set second(value) { return this[1] = value; },\n\n  get last() { return this[this.length - 1]; },\n  set last(value) { return this[this.length - 1] = value; },\n\n  intersect(...arrays) {\n    return _.intersection(this, ...arrays);\n  },\n\n  /**\n   * Computes a more fine-grained difference with a second Array.\n   * @param other (Array/Set) the Array to be compared to.\n   * @returns {Array} [onlyLeft, both, onlyRight].\n   */\n  computeDiff(other) {\n    const otherArray = Array.from(other);\n    \n    const onlyLeft = _.difference(this, otherArray);\n    const both = _.intersection(this, otherArray);\n    const onlyRight = _.difference(otherArray, this);\n\n    return [onlyLeft, both, onlyRight];\n  },\n\n  /**\n   * Removes all elements from array (mutates!) that predicate returns truthy for and returns an array of the removed elements.\n   * @param predicate (Function<value, index, array -> Boolean>) return true to remove given element.\n   * @returns {Array} The removed elements.\n   */\n  removeAll(predicate) {\n    return _.remove(this, predicate);\n  },\n\n  zip(...arrays) {\n    return _.zip(this, ...arrays);\n  },\n  \n  /**\n   * A generator yielding all items in this array. For propagating.\n   * @example <caption>Propagating yield* statements to items.</caption>\n   * function* example(arr) {\n   *   yield* arr.yieldAll();\n   * }\n   *\n   * for (let item of example([1,2,3])) {\n   *   lively.notify(item);\n   * }\n   */\n  *yieldAll() {\n    for (let item of this) {\n      yield item;\n    }\n  },\n\n  /**\n   *\n   */\n  joinElements(builder) {\n    const result = [];\n    let lastItem;\n    let index = 0;\n    for (let item of this) {\n      // not the first item\n      if (result.length > 0) {\n        result.push(builder(lastItem, item, index++, this));\n      }\n      result.push(item);\n      lastItem = item;\n    }\n    return result;\n  },\n\n  /**\n   * Counts the number of items that satisfy the given condition.\n   * @param predicate (Function<value, index, array -> Boolean>) return true count the element.\n   * @returns {Number} Counted number of elements.\n   */\n  count(predicate) {\n    return this.filter(predicate).length;\n  },\n  \n\n});\n\n/*MD # Array-like MD*/\nextendFromLodash(NodeList.prototype, [\n  'map',\n  'filter',\n  'reduce',\n  'find'\n]);\n\n/*MD\n## NUMBER\nMD*/\nextendFromLodash(Number.prototype, [\n  'ceil',\n  'clamp',\n  'floor',\n  'inRange',\n  'round',\n  'times'\n]);\n\nextend(Number.prototype, {\n  \n  to(end, step) {\n    return _.range(this, end, step);\n  }\n\n});\n\n\n/*MD\n## STRING\nMD*/\nextendFromLodash(String.prototype, [\n  'camelCase',\n  'capitalize',\n  'kebabCase',\n  'lowerCase',\n  'lowerFirst',\n  'snakeCase',\n  'startCase',\n  'toLower',\n  'toUpper',\n  'trim',\n  'trimEnd',\n  'trimStart',\n  'upperCase',\n  'upperFirst',\n  'words',\n]);\n\nextend(String.prototype, {\n\n  /**\n   * \n   * @public\n   * @param options (*) the optional options object containing any custom settings that you want to apply to the request\n   * @returns {Promise<String>} the remote resource as String\n   * \n   * @example <caption>Get lively start.html.</caption>\n   * (lively4url + \"/start.html\").fetchText();\n   */\n  fetchText(options) {\n    return fetch(this, options).then(r => r.text());\n  },\n\n  /**\n   * \n   * @public\n   * @param options (*) the optional options object containing any custom settings that you want to apply to the request\n   * @returns {Promise<JSON>} the remote resource as JSON\n   * \n   * @example <caption>Get d3 flare.json.</caption>\n   * (lively4url + \"/src/components/demo/flare.json\").fetchJSON();\n   */\n  fetchJSON(options) {\n    return fetch(this, options).then(r => r.json());\n  },\n  \n  /**\n   * Get file info for a remote file or directory.\n   * @public\n   * @example <caption>Get file info of start.html.</caption>\n   * const startHTML = lively4url + '/start.html';\n   * startHTML.fetchStats();\n   */\n  fetchStats(options) {\n    return this.fetchJSON(Object.assign({ method: 'OPTIONS' }, options));\n  },\n  \n  /**\n   * Split the String by line breaks.\n   * @public\n   * @returns {Array<String>} the resulting lines of the String\n   * @example <caption>Split Hello World.</caption>\n   * const str = `Hello\\nWorld\n   * !`;\n   * str.lines(); // -> ['Hello', 'World', '!']\n   */\n  lines() {\n    return this.split(/\\n/ig);\n  }\n\n});\n\n\n/*MD\n## PROMISE\nMD*/\nextend(Promise.prototype, {\n\n  /**\n   * Awaits the promise, and return a promise after calling func.\n   * @example <caption>Example usage on Promises.</caption>\n   * fetch(\"https://lively-kernel.org/lively4/lively4-core/start.html\")\n   *   .through(lively.notify) // prints the response object\n   *   .then(t=>t.text())\n   *   .through(lively.notify); // prints the content\n   */\n  through(func, ...args) {\n    return this.then(val => (func(val, ...args), val));\n  }\n\n});\n\n\n/*MD\n## URL\nMD*/\nextend(URL.prototype, {\n\n  // hook for rendering the internals of an object in the inspector\n  livelyInspect(contentNode, inspector) {\n    contentNode.innerHTML = \"\"\n    var entries = lively.allKeys(this);\n    for(let key of entries) {\n      const node = inspector.display(this[key], true, key)\n      if (node) contentNode.appendChild(node);   \n    }\n  }\n\n});\n\n/*MD\n## Animation\nMD*/\n\nextend(Animation.prototype, {\n\n  /**\n   * React to the finish of the animation using a Promise.\n   * @param callback (Function) a callback invoked at the end of the animation.\n   * @returns {Promise} a Promise resolving when the animation finishes.\n   */\n  whenFinished(callback = () => {}) {\n    return new Promise(resolve => {\n      const onFinished = () => {\n        callback();\n        resolve();\n      }\n\n      if (this.playState === \"finished\") {\n        onFinished();\n      } else {\n        this.addEventListener('finish', onFinished);\n      }\n    });\n  },\n\n});\n/*MD ## Hacks MD*/\n\n// #TODO poor man's COP: #ContextJS is not suited to layer functions #TODO\nif (!window.originalGetComputedStyle) {\n  window.originalGetComputedStyle = window.getComputedStyle  \n}\n\n// #Hack #drawio \n// drawio tries to get the style of the shadow root... which fails\nwindow.getComputedStyle = function(...args) {\n  var element = args[0]\n  if (element && !(element instanceof HTMLElement)) {\n    // console.log(\"ERROR on getComputedStyle ON \", element)\n    \n    // silent fail...\n    return undefined\n  }\n  return window.originalGetComputedStyle(...args)\n}\n\n\n"]}