@encorejs/saaz 1.0.0

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.
Files changed (50) hide show
  1. package/LICENSE +203 -0
  2. package/README.md +1 -0
  3. package/dist/back/BackMemoryAdapter.d.ts +18 -0
  4. package/dist/back/BackMemoryAdapter.d.ts.map +1 -0
  5. package/dist/back/BackMemoryAdapter.js +69 -0
  6. package/dist/back/BackStorage.d.ts +20 -0
  7. package/dist/back/BackStorage.d.ts.map +1 -0
  8. package/dist/back/BackStorage.js +22 -0
  9. package/dist/back/SaazBack.d.ts +60 -0
  10. package/dist/back/SaazBack.d.ts.map +1 -0
  11. package/dist/back/SaazBack.js +188 -0
  12. package/dist/front/FrontIdbAdapter.d.ts +15 -0
  13. package/dist/front/FrontIdbAdapter.d.ts.map +1 -0
  14. package/dist/front/FrontIdbAdapter.js +159 -0
  15. package/dist/front/FrontMemoryAdapter.d.ts +16 -0
  16. package/dist/front/FrontMemoryAdapter.d.ts.map +1 -0
  17. package/dist/front/FrontMemoryAdapter.js +156 -0
  18. package/dist/front/FrontStorage.d.ts +23 -0
  19. package/dist/front/FrontStorage.d.ts.map +1 -0
  20. package/dist/front/FrontStorage.js +85 -0
  21. package/dist/front/SaazFront.d.ts +113 -0
  22. package/dist/front/SaazFront.d.ts.map +1 -0
  23. package/dist/front/SaazFront.js +756 -0
  24. package/dist/index.d.ts +8 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +9295 -0
  27. package/dist/index.js.map +7 -0
  28. package/dist/index.test.d.ts +2 -0
  29. package/dist/index.test.d.ts.map +1 -0
  30. package/dist/index.test.js +166 -0
  31. package/dist/rogue.d.ts +63 -0
  32. package/dist/rogue.d.ts.map +1 -0
  33. package/dist/rogue.js +548 -0
  34. package/dist/rogue.test.d.ts +2 -0
  35. package/dist/rogue.test.d.ts.map +1 -0
  36. package/dist/rogue.test.js +248 -0
  37. package/dist/shared/GeneratorSpy.d.ts +4 -0
  38. package/dist/shared/GeneratorSpy.d.ts.map +1 -0
  39. package/dist/shared/GeneratorSpy.js +41 -0
  40. package/dist/shared/transactions.d.ts +4 -0
  41. package/dist/shared/transactions.d.ts.map +1 -0
  42. package/dist/shared/transactions.js +131 -0
  43. package/dist/shared/utils.d.ts +5 -0
  44. package/dist/shared/utils.d.ts.map +1 -0
  45. package/dist/shared/utils.js +21 -0
  46. package/dist/tsdoc-metadata.json +11 -0
  47. package/dist/types.d.ts +240 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +1 -0
  50. package/package.json +54 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../node_modules/fast-deep-equal/index.js", "../../../node_modules/color-name/index.js", "../../../node_modules/ansi-styles/node_modules/color-convert/conversions.js", "../../../node_modules/ansi-styles/node_modules/color-convert/route.js", "../../../node_modules/ansi-styles/node_modules/color-convert/index.js", "../../../node_modules/ansi-styles/index.js", "../../../node_modules/chalk/node_modules/supports-color/browser.js", "../../../node_modules/chalk/source/util.js", "../../../node_modules/chalk/source/templates.js", "../../../node_modules/chalk/source/index.js", "../../../node_modules/jest-diff/node_modules/jest-get-type/build/index.js", "../../../node_modules/jest-diff/node_modules/ansi-styles/index.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/collections.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/plugins/AsymmetricMatcher.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/plugins/DOMCollection.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/plugins/lib/escapeHTML.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/plugins/lib/markup.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/plugins/DOMElement.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/plugins/Immutable.js", "../../../node_modules/jest-diff/node_modules/react-is/cjs/react-is.production.min.js", "../../../node_modules/jest-diff/node_modules/react-is/cjs/react-is.development.js", "../../../node_modules/jest-diff/node_modules/react-is/index.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/plugins/ReactElement.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/plugins/ReactTestComponent.js", "../../../node_modules/jest-diff/node_modules/pretty-format/build/index.js", "../../../node_modules/jest-diff/build/cleanupSemantic.js", "../../../node_modules/jest-diff/build/constants.js", "../../../node_modules/jest-diff/node_modules/diff-sequences/build/index.js", "../../../node_modules/jest-diff/build/joinAlignedDiffs.js", "../../../node_modules/jest-diff/build/normalizeDiffOptions.js", "../../../node_modules/jest-diff/build/diffLines.js", "../../../node_modules/jest-diff/build/diffStrings.js", "../../../node_modules/jest-diff/build/getAlignedDiffs.js", "../../../node_modules/jest-diff/build/printDiffs.js", "../../../node_modules/jest-diff/build/index.js", "../src/index.ts", "../../../node_modules/lodash-es/_freeGlobal.js", "../../../node_modules/lodash-es/_root.js", "../../../node_modules/lodash-es/_Symbol.js", "../../../node_modules/lodash-es/_getRawTag.js", "../../../node_modules/lodash-es/_objectToString.js", "../../../node_modules/lodash-es/_baseGetTag.js", "../../../node_modules/lodash-es/isObjectLike.js", "../../../node_modules/lodash-es/isSymbol.js", "../../../node_modules/lodash-es/_arrayMap.js", "../../../node_modules/lodash-es/isArray.js", "../../../node_modules/lodash-es/_baseToString.js", "../../../node_modules/lodash-es/_trimmedEndIndex.js", "../../../node_modules/lodash-es/_baseTrim.js", "../../../node_modules/lodash-es/isObject.js", "../../../node_modules/lodash-es/toNumber.js", "../../../node_modules/lodash-es/isFunction.js", "../../../node_modules/lodash-es/_coreJsData.js", "../../../node_modules/lodash-es/_isMasked.js", "../../../node_modules/lodash-es/_toSource.js", "../../../node_modules/lodash-es/_baseIsNative.js", "../../../node_modules/lodash-es/_getValue.js", "../../../node_modules/lodash-es/_getNative.js", "../../../node_modules/lodash-es/_WeakMap.js", "../../../node_modules/lodash-es/_baseCreate.js", "../../../node_modules/lodash-es/_copyArray.js", "../../../node_modules/lodash-es/_defineProperty.js", "../../../node_modules/lodash-es/_arrayEach.js", "../../../node_modules/lodash-es/_isIndex.js", "../../../node_modules/lodash-es/_baseAssignValue.js", "../../../node_modules/lodash-es/eq.js", "../../../node_modules/lodash-es/_assignValue.js", "../../../node_modules/lodash-es/_copyObject.js", "../../../node_modules/lodash-es/isLength.js", "../../../node_modules/lodash-es/isArrayLike.js", "../../../node_modules/lodash-es/_isPrototype.js", "../../../node_modules/lodash-es/_baseTimes.js", "../../../node_modules/lodash-es/_baseIsArguments.js", "../../../node_modules/lodash-es/isArguments.js", "../../../node_modules/lodash-es/stubFalse.js", "../../../node_modules/lodash-es/isBuffer.js", "../../../node_modules/lodash-es/_baseIsTypedArray.js", "../../../node_modules/lodash-es/_baseUnary.js", "../../../node_modules/lodash-es/_nodeUtil.js", "../../../node_modules/lodash-es/isTypedArray.js", "../../../node_modules/lodash-es/_arrayLikeKeys.js", "../../../node_modules/lodash-es/_overArg.js", "../../../node_modules/lodash-es/_nativeKeys.js", "../../../node_modules/lodash-es/_baseKeys.js", "../../../node_modules/lodash-es/keys.js", "../../../node_modules/lodash-es/_nativeKeysIn.js", "../../../node_modules/lodash-es/_baseKeysIn.js", "../../../node_modules/lodash-es/keysIn.js", "../../../node_modules/lodash-es/_isKey.js", "../../../node_modules/lodash-es/_nativeCreate.js", "../../../node_modules/lodash-es/_hashClear.js", "../../../node_modules/lodash-es/_hashDelete.js", "../../../node_modules/lodash-es/_hashGet.js", "../../../node_modules/lodash-es/_hashHas.js", "../../../node_modules/lodash-es/_hashSet.js", "../../../node_modules/lodash-es/_Hash.js", "../../../node_modules/lodash-es/_listCacheClear.js", "../../../node_modules/lodash-es/_assocIndexOf.js", "../../../node_modules/lodash-es/_listCacheDelete.js", "../../../node_modules/lodash-es/_listCacheGet.js", "../../../node_modules/lodash-es/_listCacheHas.js", "../../../node_modules/lodash-es/_listCacheSet.js", "../../../node_modules/lodash-es/_ListCache.js", "../../../node_modules/lodash-es/_Map.js", "../../../node_modules/lodash-es/_mapCacheClear.js", "../../../node_modules/lodash-es/_isKeyable.js", "../../../node_modules/lodash-es/_getMapData.js", "../../../node_modules/lodash-es/_mapCacheDelete.js", "../../../node_modules/lodash-es/_mapCacheGet.js", "../../../node_modules/lodash-es/_mapCacheHas.js", "../../../node_modules/lodash-es/_mapCacheSet.js", "../../../node_modules/lodash-es/_MapCache.js", "../../../node_modules/lodash-es/memoize.js", "../../../node_modules/lodash-es/_memoizeCapped.js", "../../../node_modules/lodash-es/_stringToPath.js", "../../../node_modules/lodash-es/toString.js", "../../../node_modules/lodash-es/_castPath.js", "../../../node_modules/lodash-es/_toKey.js", "../../../node_modules/lodash-es/_baseGet.js", "../../../node_modules/lodash-es/get.js", "../../../node_modules/lodash-es/_arrayPush.js", "../../../node_modules/lodash-es/_getPrototype.js", "../../../node_modules/lodash-es/isPlainObject.js", "../../../node_modules/lodash-es/_stackClear.js", "../../../node_modules/lodash-es/_stackDelete.js", "../../../node_modules/lodash-es/_stackGet.js", "../../../node_modules/lodash-es/_stackHas.js", "../../../node_modules/lodash-es/_stackSet.js", "../../../node_modules/lodash-es/_Stack.js", "../../../node_modules/lodash-es/_baseAssign.js", "../../../node_modules/lodash-es/_baseAssignIn.js", "../../../node_modules/lodash-es/_cloneBuffer.js", "../../../node_modules/lodash-es/_arrayFilter.js", "../../../node_modules/lodash-es/stubArray.js", "../../../node_modules/lodash-es/_getSymbols.js", "../../../node_modules/lodash-es/_copySymbols.js", "../../../node_modules/lodash-es/_getSymbolsIn.js", "../../../node_modules/lodash-es/_copySymbolsIn.js", "../../../node_modules/lodash-es/_baseGetAllKeys.js", "../../../node_modules/lodash-es/_getAllKeys.js", "../../../node_modules/lodash-es/_getAllKeysIn.js", "../../../node_modules/lodash-es/_DataView.js", "../../../node_modules/lodash-es/_Promise.js", "../../../node_modules/lodash-es/_Set.js", "../../../node_modules/lodash-es/_getTag.js", "../../../node_modules/lodash-es/_initCloneArray.js", "../../../node_modules/lodash-es/_Uint8Array.js", "../../../node_modules/lodash-es/_cloneArrayBuffer.js", "../../../node_modules/lodash-es/_cloneDataView.js", "../../../node_modules/lodash-es/_cloneRegExp.js", "../../../node_modules/lodash-es/_cloneSymbol.js", "../../../node_modules/lodash-es/_cloneTypedArray.js", "../../../node_modules/lodash-es/_initCloneByTag.js", "../../../node_modules/lodash-es/_initCloneObject.js", "../../../node_modules/lodash-es/_baseIsMap.js", "../../../node_modules/lodash-es/isMap.js", "../../../node_modules/lodash-es/_baseIsSet.js", "../../../node_modules/lodash-es/isSet.js", "../../../node_modules/lodash-es/_baseClone.js", "../../../node_modules/lodash-es/cloneDeep.js", "../../../node_modules/lodash-es/now.js", "../../../node_modules/lodash-es/debounce.js", "../../../node_modules/lodash-es/last.js", "../../../node_modules/lodash-es/_baseSet.js", "../../../node_modules/lodash-es/set.js", "../../../node_modules/lodash-es/throttle.js", "../../../node_modules/lodash-es/lodash.js", "../../utils/src/stableJsonStringify.ts", "../src/shared/GeneratorSpy.ts", "../../../node_modules/immer/src/utils/errors.ts", "../../../node_modules/immer/src/utils/common.ts", "../../../node_modules/immer/src/utils/plugins.ts", "../../../node_modules/immer/src/core/scope.ts", "../../../node_modules/immer/src/core/finalize.ts", "../../../node_modules/immer/src/core/proxy.ts", "../../../node_modules/immer/src/core/immerClass.ts", "../../../node_modules/immer/src/core/current.ts", "../../../node_modules/immer/src/plugins/es5.ts", "../../../node_modules/immer/src/plugins/patches.ts", "../../../node_modules/immer/src/plugins/mapset.ts", "../../../node_modules/immer/src/plugins/all.ts", "../../../node_modules/immer/src/immer.ts", "../../../node_modules/immer/src/utils/env.ts", "../../utils/src/deepEqual.ts", "../../utils/src/memoizeFn.ts", "../src/rogue.ts", "../src/shared/transactions.ts", "../src/front/FrontStorage.ts", "../src/shared/utils.ts", "../../dataverse/src/pointer.ts", "../../dataverse/src/utils/updateDeep.ts", "../../dataverse/src/utils/Stack.ts", "../../dataverse/src/prism/Interface.ts", "../../dataverse/src/prism/discoveryMechanism.ts", "../../dataverse/src/prism/prism.ts", "../../dataverse/src/Atom.ts", "../../dataverse/src/pointerToPrism.ts", "../../dataverse/src/val.ts", "../../dataverse/src/Ticker.ts", "../../utils/src/defer.ts", "../../utils/src/waitForPrism.ts", "../../utils/src/subscribeDebounced.ts", "../src/front/SaazFront.ts", "../node_modules/nanoid/index.browser.js", "../src/back/BackStorage.ts", "../src/back/SaazBack.ts", "../../../node_modules/idb/build/wrap-idb-value.js", "../../../node_modules/idb/build/index.js", "../src/front/FrontIdbAdapter.ts", "../src/front/FrontMemoryAdapter.ts", "../src/back/BackMemoryAdapter.ts"],
4
+ "sourcesContent": ["'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n", "'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n", "/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n", "const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n", "const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n", "'use strict';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n", "'use strict';\nmodule.exports = {\n\tstdout: false,\n\tstderr: false\n};\n", "'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n", "'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u(?:[a-f\\d]{4}|{[a-f\\d]{1,6}})|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const [styleName, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n", "'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` \u2192 `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.getType = getType;\nexports.isPrimitive = void 0;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// get the type of a value with handling the edge cases like `typeof []`\n// and `typeof null`\nfunction getType(value) {\n if (value === undefined) {\n return 'undefined';\n } else if (value === null) {\n return 'null';\n } else if (Array.isArray(value)) {\n return 'array';\n } else if (typeof value === 'boolean') {\n return 'boolean';\n } else if (typeof value === 'function') {\n return 'function';\n } else if (typeof value === 'number') {\n return 'number';\n } else if (typeof value === 'string') {\n return 'string';\n } else if (typeof value === 'bigint') {\n return 'bigint';\n } else if (typeof value === 'object') {\n if (value != null) {\n if (value.constructor === RegExp) {\n return 'regexp';\n } else if (value.constructor === Map) {\n return 'map';\n } else if (value.constructor === Set) {\n return 'set';\n } else if (value.constructor === Date) {\n return 'date';\n }\n }\n return 'object';\n } else if (typeof value === 'symbol') {\n return 'symbol';\n }\n throw new Error(`value of unknown type: ${value}`);\n}\nconst isPrimitive = value => Object(value) !== value;\nexports.isPrimitive = isPrimitive;\n", "'use strict';\n\nconst ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\toverline: [53, 55],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16 +\n\t\t\t\t\t(36 * Math.round(red / 255 * 5)) +\n\t\t\t\t\t(6 * Math.round(green / 255 * 5)) +\n\t\t\t\t\tMath.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /(?<colorString>[a-f\\d]{6}|[a-f\\d]{3})/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet {colorString} = matches.groups;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = colorString.split('').map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false\n\t\t}\n\t});\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.printIteratorEntries = printIteratorEntries;\nexports.printIteratorValues = printIteratorValues;\nexports.printListItems = printListItems;\nexports.printObjectProperties = printObjectProperties;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nconst getKeysOfEnumerableProperties = (object, compareKeys) => {\n const rawKeys = Object.keys(object);\n const keys = compareKeys !== null ? rawKeys.sort(compareKeys) : rawKeys;\n if (Object.getOwnPropertySymbols) {\n Object.getOwnPropertySymbols(object).forEach(symbol => {\n if (Object.getOwnPropertyDescriptor(object, symbol).enumerable) {\n keys.push(symbol);\n }\n });\n }\n return keys;\n};\n\n/**\n * Return entries (for example, of a map)\n * with spacing, indentation, and comma\n * without surrounding punctuation (for example, braces)\n */\nfunction printIteratorEntries(\n iterator,\n config,\n indentation,\n depth,\n refs,\n printer,\n // Too bad, so sad that separator for ECMAScript Map has been ' => '\n // What a distracting diff if you change a data structure to/from\n // ECMAScript Object or Immutable.Map/OrderedMap which use the default.\n separator = ': '\n) {\n let result = '';\n let width = 0;\n let current = iterator.next();\n if (!current.done) {\n result += config.spacingOuter;\n const indentationNext = indentation + config.indent;\n while (!current.done) {\n result += indentationNext;\n if (width++ === config.maxWidth) {\n result += '\u2026';\n break;\n }\n const name = printer(\n current.value[0],\n config,\n indentationNext,\n depth,\n refs\n );\n const value = printer(\n current.value[1],\n config,\n indentationNext,\n depth,\n refs\n );\n result += name + separator + value;\n current = iterator.next();\n if (!current.done) {\n result += `,${config.spacingInner}`;\n } else if (!config.min) {\n result += ',';\n }\n }\n result += config.spacingOuter + indentation;\n }\n return result;\n}\n\n/**\n * Return values (for example, of a set)\n * with spacing, indentation, and comma\n * without surrounding punctuation (braces or brackets)\n */\nfunction printIteratorValues(\n iterator,\n config,\n indentation,\n depth,\n refs,\n printer\n) {\n let result = '';\n let width = 0;\n let current = iterator.next();\n if (!current.done) {\n result += config.spacingOuter;\n const indentationNext = indentation + config.indent;\n while (!current.done) {\n result += indentationNext;\n if (width++ === config.maxWidth) {\n result += '\u2026';\n break;\n }\n result += printer(current.value, config, indentationNext, depth, refs);\n current = iterator.next();\n if (!current.done) {\n result += `,${config.spacingInner}`;\n } else if (!config.min) {\n result += ',';\n }\n }\n result += config.spacingOuter + indentation;\n }\n return result;\n}\n\n/**\n * Return items (for example, of an array)\n * with spacing, indentation, and comma\n * without surrounding punctuation (for example, brackets)\n **/\nfunction printListItems(list, config, indentation, depth, refs, printer) {\n let result = '';\n if (list.length) {\n result += config.spacingOuter;\n const indentationNext = indentation + config.indent;\n for (let i = 0; i < list.length; i++) {\n result += indentationNext;\n if (i === config.maxWidth) {\n result += '\u2026';\n break;\n }\n if (i in list) {\n result += printer(list[i], config, indentationNext, depth, refs);\n }\n if (i < list.length - 1) {\n result += `,${config.spacingInner}`;\n } else if (!config.min) {\n result += ',';\n }\n }\n result += config.spacingOuter + indentation;\n }\n return result;\n}\n\n/**\n * Return properties of an object\n * with spacing, indentation, and comma\n * without surrounding punctuation (for example, braces)\n */\nfunction printObjectProperties(val, config, indentation, depth, refs, printer) {\n let result = '';\n const keys = getKeysOfEnumerableProperties(val, config.compareKeys);\n if (keys.length) {\n result += config.spacingOuter;\n const indentationNext = indentation + config.indent;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const name = printer(key, config, indentationNext, depth, refs);\n const value = printer(val[key], config, indentationNext, depth, refs);\n result += `${indentationNext + name}: ${value}`;\n if (i < keys.length - 1) {\n result += `,${config.spacingInner}`;\n } else if (!config.min) {\n result += ',';\n }\n }\n result += config.spacingOuter + indentation;\n }\n return result;\n}\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _collections = require('../collections');\nvar Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nconst asymmetricMatcher =\n typeof Symbol === 'function' && Symbol.for\n ? Symbol.for('jest.asymmetricMatcher')\n : 0x1357a5;\nconst SPACE = ' ';\nconst serialize = (val, config, indentation, depth, refs, printer) => {\n const stringedValue = val.toString();\n if (\n stringedValue === 'ArrayContaining' ||\n stringedValue === 'ArrayNotContaining'\n ) {\n if (++depth > config.maxDepth) {\n return `[${stringedValue}]`;\n }\n return `${stringedValue + SPACE}[${(0, _collections.printListItems)(\n val.sample,\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`;\n }\n if (\n stringedValue === 'ObjectContaining' ||\n stringedValue === 'ObjectNotContaining'\n ) {\n if (++depth > config.maxDepth) {\n return `[${stringedValue}]`;\n }\n return `${stringedValue + SPACE}{${(0, _collections.printObjectProperties)(\n val.sample,\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n }\n if (\n stringedValue === 'StringMatching' ||\n stringedValue === 'StringNotMatching'\n ) {\n return (\n stringedValue +\n SPACE +\n printer(val.sample, config, indentation, depth, refs)\n );\n }\n if (\n stringedValue === 'StringContaining' ||\n stringedValue === 'StringNotContaining'\n ) {\n return (\n stringedValue +\n SPACE +\n printer(val.sample, config, indentation, depth, refs)\n );\n }\n if (typeof val.toAsymmetricMatcher !== 'function') {\n throw new Error(\n `Asymmetric matcher ${val.constructor.name} does not implement toAsymmetricMatcher()`\n );\n }\n return val.toAsymmetricMatcher();\n};\nexports.serialize = serialize;\nconst test = val => val && val.$$typeof === asymmetricMatcher;\nexports.test = test;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _collections = require('../collections');\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst SPACE = ' ';\nconst OBJECT_NAMES = ['DOMStringMap', 'NamedNodeMap'];\nconst ARRAY_REGEXP = /^(HTML\\w*Collection|NodeList)$/;\nconst testName = name =>\n OBJECT_NAMES.indexOf(name) !== -1 || ARRAY_REGEXP.test(name);\nconst test = val =>\n val &&\n val.constructor &&\n !!val.constructor.name &&\n testName(val.constructor.name);\nexports.test = test;\nconst isNamedNodeMap = collection =>\n collection.constructor.name === 'NamedNodeMap';\nconst serialize = (collection, config, indentation, depth, refs, printer) => {\n const name = collection.constructor.name;\n if (++depth > config.maxDepth) {\n return `[${name}]`;\n }\n return (\n (config.min ? '' : name + SPACE) +\n (OBJECT_NAMES.indexOf(name) !== -1\n ? `{${(0, _collections.printObjectProperties)(\n isNamedNodeMap(collection)\n ? Array.from(collection).reduce((props, attribute) => {\n props[attribute.name] = attribute.value;\n return props;\n }, {})\n : {\n ...collection\n },\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`\n : `[${(0, _collections.printListItems)(\n Array.from(collection),\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`)\n );\n};\nexports.serialize = serialize;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.default = escapeHTML;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction escapeHTML(str) {\n return str.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.printText =\n exports.printProps =\n exports.printElementAsLeaf =\n exports.printElement =\n exports.printComment =\n exports.printChildren =\n void 0;\nvar _escapeHTML = _interopRequireDefault(require('./escapeHTML'));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {default: obj};\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Return empty string if keys is empty.\nconst printProps = (keys, props, config, indentation, depth, refs, printer) => {\n const indentationNext = indentation + config.indent;\n const colors = config.colors;\n return keys\n .map(key => {\n const value = props[key];\n let printed = printer(value, config, indentationNext, depth, refs);\n if (typeof value !== 'string') {\n if (printed.indexOf('\\n') !== -1) {\n printed =\n config.spacingOuter +\n indentationNext +\n printed +\n config.spacingOuter +\n indentation;\n }\n printed = `{${printed}}`;\n }\n return `${\n config.spacingInner +\n indentation +\n colors.prop.open +\n key +\n colors.prop.close\n }=${colors.value.open}${printed}${colors.value.close}`;\n })\n .join('');\n};\n\n// Return empty string if children is empty.\nexports.printProps = printProps;\nconst printChildren = (children, config, indentation, depth, refs, printer) =>\n children\n .map(\n child =>\n config.spacingOuter +\n indentation +\n (typeof child === 'string'\n ? printText(child, config)\n : printer(child, config, indentation, depth, refs))\n )\n .join('');\nexports.printChildren = printChildren;\nconst printText = (text, config) => {\n const contentColor = config.colors.content;\n return (\n contentColor.open + (0, _escapeHTML.default)(text) + contentColor.close\n );\n};\nexports.printText = printText;\nconst printComment = (comment, config) => {\n const commentColor = config.colors.comment;\n return `${commentColor.open}<!--${(0, _escapeHTML.default)(comment)}-->${\n commentColor.close\n }`;\n};\n\n// Separate the functions to format props, children, and element,\n// so a plugin could override a particular function, if needed.\n// Too bad, so sad: the traditional (but unnecessary) space\n// in a self-closing tagColor requires a second test of printedProps.\nexports.printComment = printComment;\nconst printElement = (\n type,\n printedProps,\n printedChildren,\n config,\n indentation\n) => {\n const tagColor = config.colors.tag;\n return `${tagColor.open}<${type}${\n printedProps &&\n tagColor.close +\n printedProps +\n config.spacingOuter +\n indentation +\n tagColor.open\n }${\n printedChildren\n ? `>${tagColor.close}${printedChildren}${config.spacingOuter}${indentation}${tagColor.open}</${type}`\n : `${printedProps && !config.min ? '' : ' '}/`\n }>${tagColor.close}`;\n};\nexports.printElement = printElement;\nconst printElementAsLeaf = (type, config) => {\n const tagColor = config.colors.tag;\n return `${tagColor.open}<${type}${tagColor.close} \u2026${tagColor.open} />${tagColor.close}`;\n};\nexports.printElementAsLeaf = printElementAsLeaf;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _markup = require('./lib/markup');\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\nconst COMMENT_NODE = 8;\nconst FRAGMENT_NODE = 11;\nconst ELEMENT_REGEXP = /^((HTML|SVG)\\w*)?Element$/;\nconst testHasAttribute = val => {\n try {\n return typeof val.hasAttribute === 'function' && val.hasAttribute('is');\n } catch {\n return false;\n }\n};\nconst testNode = val => {\n const constructorName = val.constructor.name;\n const {nodeType, tagName} = val;\n const isCustomElement =\n (typeof tagName === 'string' && tagName.includes('-')) ||\n testHasAttribute(val);\n return (\n (nodeType === ELEMENT_NODE &&\n (ELEMENT_REGEXP.test(constructorName) || isCustomElement)) ||\n (nodeType === TEXT_NODE && constructorName === 'Text') ||\n (nodeType === COMMENT_NODE && constructorName === 'Comment') ||\n (nodeType === FRAGMENT_NODE && constructorName === 'DocumentFragment')\n );\n};\nconst test = val => val?.constructor?.name && testNode(val);\nexports.test = test;\nfunction nodeIsText(node) {\n return node.nodeType === TEXT_NODE;\n}\nfunction nodeIsComment(node) {\n return node.nodeType === COMMENT_NODE;\n}\nfunction nodeIsFragment(node) {\n return node.nodeType === FRAGMENT_NODE;\n}\nconst serialize = (node, config, indentation, depth, refs, printer) => {\n if (nodeIsText(node)) {\n return (0, _markup.printText)(node.data, config);\n }\n if (nodeIsComment(node)) {\n return (0, _markup.printComment)(node.data, config);\n }\n const type = nodeIsFragment(node)\n ? 'DocumentFragment'\n : node.tagName.toLowerCase();\n if (++depth > config.maxDepth) {\n return (0, _markup.printElementAsLeaf)(type, config);\n }\n return (0, _markup.printElement)(\n type,\n (0, _markup.printProps)(\n nodeIsFragment(node)\n ? []\n : Array.from(node.attributes)\n .map(attr => attr.name)\n .sort(),\n nodeIsFragment(node)\n ? {}\n : Array.from(node.attributes).reduce((props, attribute) => {\n props[attribute.name] = attribute.value;\n return props;\n }, {}),\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n ),\n (0, _markup.printChildren)(\n Array.prototype.slice.call(node.childNodes || node.children),\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n ),\n config,\n indentation\n );\n};\nexports.serialize = serialize;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _collections = require('../collections');\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// SENTINEL constants are from https://github.com/facebook/immutable-js\nconst IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\nconst IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@';\nconst IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\nconst IS_MAP_SENTINEL = '@@__IMMUTABLE_MAP__@@';\nconst IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\nconst IS_RECORD_SENTINEL = '@@__IMMUTABLE_RECORD__@@'; // immutable v4\nconst IS_SEQ_SENTINEL = '@@__IMMUTABLE_SEQ__@@';\nconst IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@';\nconst IS_STACK_SENTINEL = '@@__IMMUTABLE_STACK__@@';\nconst getImmutableName = name => `Immutable.${name}`;\nconst printAsLeaf = name => `[${name}]`;\nconst SPACE = ' ';\nconst LAZY = '\u2026'; // Seq is lazy if it calls a method like filter\n\nconst printImmutableEntries = (\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n type\n) =>\n ++depth > config.maxDepth\n ? printAsLeaf(getImmutableName(type))\n : `${getImmutableName(type) + SPACE}{${(0,\n _collections.printIteratorEntries)(\n val.entries(),\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n\n// Record has an entries method because it is a collection in immutable v3.\n// Return an iterator for Immutable Record from version v3 or v4.\nfunction getRecordEntries(val) {\n let i = 0;\n return {\n next() {\n if (i < val._keys.length) {\n const key = val._keys[i++];\n return {\n done: false,\n value: [key, val.get(key)]\n };\n }\n return {\n done: true,\n value: undefined\n };\n }\n };\n}\nconst printImmutableRecord = (\n val,\n config,\n indentation,\n depth,\n refs,\n printer\n) => {\n // _name property is defined only for an Immutable Record instance\n // which was constructed with a second optional descriptive name arg\n const name = getImmutableName(val._name || 'Record');\n return ++depth > config.maxDepth\n ? printAsLeaf(name)\n : `${name + SPACE}{${(0, _collections.printIteratorEntries)(\n getRecordEntries(val),\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n};\nconst printImmutableSeq = (val, config, indentation, depth, refs, printer) => {\n const name = getImmutableName('Seq');\n if (++depth > config.maxDepth) {\n return printAsLeaf(name);\n }\n if (val[IS_KEYED_SENTINEL]) {\n return `${name + SPACE}{${\n // from Immutable collection of entries or from ECMAScript object\n val._iter || val._object\n ? (0, _collections.printIteratorEntries)(\n val.entries(),\n config,\n indentation,\n depth,\n refs,\n printer\n )\n : LAZY\n }}`;\n }\n return `${name + SPACE}[${\n val._iter ||\n // from Immutable collection of values\n val._array ||\n // from ECMAScript array\n val._collection ||\n // from ECMAScript collection in immutable v4\n val._iterable // from ECMAScript collection in immutable v3\n ? (0, _collections.printIteratorValues)(\n val.values(),\n config,\n indentation,\n depth,\n refs,\n printer\n )\n : LAZY\n }]`;\n};\nconst printImmutableValues = (\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n type\n) =>\n ++depth > config.maxDepth\n ? printAsLeaf(getImmutableName(type))\n : `${getImmutableName(type) + SPACE}[${(0,\n _collections.printIteratorValues)(\n val.values(),\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`;\nconst serialize = (val, config, indentation, depth, refs, printer) => {\n if (val[IS_MAP_SENTINEL]) {\n return printImmutableEntries(\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n val[IS_ORDERED_SENTINEL] ? 'OrderedMap' : 'Map'\n );\n }\n if (val[IS_LIST_SENTINEL]) {\n return printImmutableValues(\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n 'List'\n );\n }\n if (val[IS_SET_SENTINEL]) {\n return printImmutableValues(\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n val[IS_ORDERED_SENTINEL] ? 'OrderedSet' : 'Set'\n );\n }\n if (val[IS_STACK_SENTINEL]) {\n return printImmutableValues(\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n 'Stack'\n );\n }\n if (val[IS_SEQ_SENTINEL]) {\n return printImmutableSeq(val, config, indentation, depth, refs, printer);\n }\n\n // For compatibility with immutable v3 and v4, let record be the default.\n return printImmutableRecord(val, config, indentation, depth, refs, printer);\n};\n\n// Explicitly comparing sentinel properties to true avoids false positive\n// when mock identity-obj-proxy returns the key as the value for any key.\nexports.serialize = serialize;\nconst test = val =>\n val &&\n (val[IS_ITERABLE_SENTINEL] === true || val[IS_RECORD_SENTINEL] === true);\nexports.test = test;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n", "/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n", "/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n}\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false;\nvar hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\nfunction isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n}\n\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.SuspenseList = SuspenseList;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isSuspenseList = isSuspenseList;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar ReactIs = _interopRequireWildcard(require('react-is'));\nvar _markup = require('./lib/markup');\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== 'function') return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function (nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {\n return {default: obj};\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor =\n Object.defineProperty && Object.getOwnPropertyDescriptor;\n for (var key in obj) {\n if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor\n ? Object.getOwnPropertyDescriptor(obj, key)\n : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Given element.props.children, or subtree during recursive traversal,\n// return flattened array of children.\nconst getChildren = (arg, children = []) => {\n if (Array.isArray(arg)) {\n arg.forEach(item => {\n getChildren(item, children);\n });\n } else if (arg != null && arg !== false) {\n children.push(arg);\n }\n return children;\n};\nconst getType = element => {\n const type = element.type;\n if (typeof type === 'string') {\n return type;\n }\n if (typeof type === 'function') {\n return type.displayName || type.name || 'Unknown';\n }\n if (ReactIs.isFragment(element)) {\n return 'React.Fragment';\n }\n if (ReactIs.isSuspense(element)) {\n return 'React.Suspense';\n }\n if (typeof type === 'object' && type !== null) {\n if (ReactIs.isContextProvider(element)) {\n return 'Context.Provider';\n }\n if (ReactIs.isContextConsumer(element)) {\n return 'Context.Consumer';\n }\n if (ReactIs.isForwardRef(element)) {\n if (type.displayName) {\n return type.displayName;\n }\n const functionName = type.render.displayName || type.render.name || '';\n return functionName !== '' ? `ForwardRef(${functionName})` : 'ForwardRef';\n }\n if (ReactIs.isMemo(element)) {\n const functionName =\n type.displayName || type.type.displayName || type.type.name || '';\n return functionName !== '' ? `Memo(${functionName})` : 'Memo';\n }\n }\n return 'UNDEFINED';\n};\nconst getPropKeys = element => {\n const {props} = element;\n return Object.keys(props)\n .filter(key => key !== 'children' && props[key] !== undefined)\n .sort();\n};\nconst serialize = (element, config, indentation, depth, refs, printer) =>\n ++depth > config.maxDepth\n ? (0, _markup.printElementAsLeaf)(getType(element), config)\n : (0, _markup.printElement)(\n getType(element),\n (0, _markup.printProps)(\n getPropKeys(element),\n element.props,\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n ),\n (0, _markup.printChildren)(\n getChildren(element.props.children),\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n ),\n config,\n indentation\n );\nexports.serialize = serialize;\nconst test = val => val != null && ReactIs.isElement(val);\nexports.test = test;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _markup = require('./lib/markup');\nvar Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n// Child can be `number` in Stack renderer but not in Fiber renderer.\n\nconst testSymbol =\n typeof Symbol === 'function' && Symbol.for\n ? Symbol.for('react.test.json')\n : 0xea71357;\nconst getPropKeys = object => {\n const {props} = object;\n return props\n ? Object.keys(props)\n .filter(key => props[key] !== undefined)\n .sort()\n : [];\n};\nconst serialize = (object, config, indentation, depth, refs, printer) =>\n ++depth > config.maxDepth\n ? (0, _markup.printElementAsLeaf)(object.type, config)\n : (0, _markup.printElement)(\n object.type,\n object.props\n ? (0, _markup.printProps)(\n getPropKeys(object),\n object.props,\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n )\n : '',\n object.children\n ? (0, _markup.printChildren)(\n object.children,\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n )\n : '',\n config,\n indentation\n );\nexports.serialize = serialize;\nconst test = val => val && val.$$typeof === testSymbol;\nexports.test = test;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.default = exports.DEFAULT_OPTIONS = void 0;\nexports.format = format;\nexports.plugins = void 0;\nvar _ansiStyles = _interopRequireDefault(require('ansi-styles'));\nvar _collections = require('./collections');\nvar _AsymmetricMatcher = _interopRequireDefault(\n require('./plugins/AsymmetricMatcher')\n);\nvar _DOMCollection = _interopRequireDefault(require('./plugins/DOMCollection'));\nvar _DOMElement = _interopRequireDefault(require('./plugins/DOMElement'));\nvar _Immutable = _interopRequireDefault(require('./plugins/Immutable'));\nvar _ReactElement = _interopRequireDefault(require('./plugins/ReactElement'));\nvar _ReactTestComponent = _interopRequireDefault(\n require('./plugins/ReactTestComponent')\n);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {default: obj};\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/* eslint-disable local/ban-types-eventually */\n\nconst toString = Object.prototype.toString;\nconst toISOString = Date.prototype.toISOString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\n\n/**\n * Explicitly comparing typeof constructor to function avoids undefined as name\n * when mock identity-obj-proxy returns the key as the value for any key.\n */\nconst getConstructorName = val =>\n (typeof val.constructor === 'function' && val.constructor.name) || 'Object';\n\n/* global window */\n/** Is val is equal to global window object? Works even if it does not exist :) */\nconst isWindow = val => typeof window !== 'undefined' && val === window;\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\nconst NEWLINE_REGEXP = /\\n/gi;\nclass PrettyFormatPluginError extends Error {\n constructor(message, stack) {\n super(message);\n this.stack = stack;\n this.name = this.constructor.name;\n }\n}\nfunction isToStringedArrayType(toStringed) {\n return (\n toStringed === '[object Array]' ||\n toStringed === '[object ArrayBuffer]' ||\n toStringed === '[object DataView]' ||\n toStringed === '[object Float32Array]' ||\n toStringed === '[object Float64Array]' ||\n toStringed === '[object Int8Array]' ||\n toStringed === '[object Int16Array]' ||\n toStringed === '[object Int32Array]' ||\n toStringed === '[object Uint8Array]' ||\n toStringed === '[object Uint8ClampedArray]' ||\n toStringed === '[object Uint16Array]' ||\n toStringed === '[object Uint32Array]'\n );\n}\nfunction printNumber(val) {\n return Object.is(val, -0) ? '-0' : String(val);\n}\nfunction printBigInt(val) {\n return String(`${val}n`);\n}\nfunction printFunction(val, printFunctionName) {\n if (!printFunctionName) {\n return '[Function]';\n }\n return `[Function ${val.name || 'anonymous'}]`;\n}\nfunction printSymbol(val) {\n return String(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n}\nfunction printError(val) {\n return `[${errorToString.call(val)}]`;\n}\n\n/**\n * The first port of call for printing an object, handles most of the\n * data-types in JS.\n */\nfunction printBasicValue(val, printFunctionName, escapeRegex, escapeString) {\n if (val === true || val === false) {\n return `${val}`;\n }\n if (val === undefined) {\n return 'undefined';\n }\n if (val === null) {\n return 'null';\n }\n const typeOf = typeof val;\n if (typeOf === 'number') {\n return printNumber(val);\n }\n if (typeOf === 'bigint') {\n return printBigInt(val);\n }\n if (typeOf === 'string') {\n if (escapeString) {\n return `\"${val.replace(/\"|\\\\/g, '\\\\$&')}\"`;\n }\n return `\"${val}\"`;\n }\n if (typeOf === 'function') {\n return printFunction(val, printFunctionName);\n }\n if (typeOf === 'symbol') {\n return printSymbol(val);\n }\n const toStringed = toString.call(val);\n if (toStringed === '[object WeakMap]') {\n return 'WeakMap {}';\n }\n if (toStringed === '[object WeakSet]') {\n return 'WeakSet {}';\n }\n if (\n toStringed === '[object Function]' ||\n toStringed === '[object GeneratorFunction]'\n ) {\n return printFunction(val, printFunctionName);\n }\n if (toStringed === '[object Symbol]') {\n return printSymbol(val);\n }\n if (toStringed === '[object Date]') {\n return isNaN(+val) ? 'Date { NaN }' : toISOString.call(val);\n }\n if (toStringed === '[object Error]') {\n return printError(val);\n }\n if (toStringed === '[object RegExp]') {\n if (escapeRegex) {\n // https://github.com/benjamingr/RegExp.escape/blob/main/polyfill.js\n return regExpToString.call(val).replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n return regExpToString.call(val);\n }\n if (val instanceof Error) {\n return printError(val);\n }\n return null;\n}\n\n/**\n * Handles more complex objects ( such as objects with circular references.\n * maps and sets etc )\n */\nfunction printComplexValue(\n val,\n config,\n indentation,\n depth,\n refs,\n hasCalledToJSON\n) {\n if (refs.indexOf(val) !== -1) {\n return '[Circular]';\n }\n refs = refs.slice();\n refs.push(val);\n const hitMaxDepth = ++depth > config.maxDepth;\n const min = config.min;\n if (\n config.callToJSON &&\n !hitMaxDepth &&\n val.toJSON &&\n typeof val.toJSON === 'function' &&\n !hasCalledToJSON\n ) {\n return printer(val.toJSON(), config, indentation, depth, refs, true);\n }\n const toStringed = toString.call(val);\n if (toStringed === '[object Arguments]') {\n return hitMaxDepth\n ? '[Arguments]'\n : `${min ? '' : 'Arguments '}[${(0, _collections.printListItems)(\n val,\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`;\n }\n if (isToStringedArrayType(toStringed)) {\n return hitMaxDepth\n ? `[${val.constructor.name}]`\n : `${\n min\n ? ''\n : !config.printBasicPrototype && val.constructor.name === 'Array'\n ? ''\n : `${val.constructor.name} `\n }[${(0, _collections.printListItems)(\n val,\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`;\n }\n if (toStringed === '[object Map]') {\n return hitMaxDepth\n ? '[Map]'\n : `Map {${(0, _collections.printIteratorEntries)(\n val.entries(),\n config,\n indentation,\n depth,\n refs,\n printer,\n ' => '\n )}}`;\n }\n if (toStringed === '[object Set]') {\n return hitMaxDepth\n ? '[Set]'\n : `Set {${(0, _collections.printIteratorValues)(\n val.values(),\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n }\n\n // Avoid failure to serialize global window object in jsdom test environment.\n // For example, not even relevant if window is prop of React element.\n return hitMaxDepth || isWindow(val)\n ? `[${getConstructorName(val)}]`\n : `${\n min\n ? ''\n : !config.printBasicPrototype && getConstructorName(val) === 'Object'\n ? ''\n : `${getConstructorName(val)} `\n }{${(0, _collections.printObjectProperties)(\n val,\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n}\nfunction isNewPlugin(plugin) {\n return plugin.serialize != null;\n}\nfunction printPlugin(plugin, val, config, indentation, depth, refs) {\n let printed;\n try {\n printed = isNewPlugin(plugin)\n ? plugin.serialize(val, config, indentation, depth, refs, printer)\n : plugin.print(\n val,\n valChild => printer(valChild, config, indentation, depth, refs),\n str => {\n const indentationNext = indentation + config.indent;\n return (\n indentationNext +\n str.replace(NEWLINE_REGEXP, `\\n${indentationNext}`)\n );\n },\n {\n edgeSpacing: config.spacingOuter,\n min: config.min,\n spacing: config.spacingInner\n },\n config.colors\n );\n } catch (error) {\n throw new PrettyFormatPluginError(error.message, error.stack);\n }\n if (typeof printed !== 'string') {\n throw new Error(\n `pretty-format: Plugin must return type \"string\" but instead returned \"${typeof printed}\".`\n );\n }\n return printed;\n}\nfunction findPlugin(plugins, val) {\n for (let p = 0; p < plugins.length; p++) {\n try {\n if (plugins[p].test(val)) {\n return plugins[p];\n }\n } catch (error) {\n throw new PrettyFormatPluginError(error.message, error.stack);\n }\n }\n return null;\n}\nfunction printer(val, config, indentation, depth, refs, hasCalledToJSON) {\n const plugin = findPlugin(config.plugins, val);\n if (plugin !== null) {\n return printPlugin(plugin, val, config, indentation, depth, refs);\n }\n const basicResult = printBasicValue(\n val,\n config.printFunctionName,\n config.escapeRegex,\n config.escapeString\n );\n if (basicResult !== null) {\n return basicResult;\n }\n return printComplexValue(\n val,\n config,\n indentation,\n depth,\n refs,\n hasCalledToJSON\n );\n}\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green'\n};\nconst DEFAULT_THEME_KEYS = Object.keys(DEFAULT_THEME);\n\n// could be replaced by `satisfies` operator in the future: https://github.com/microsoft/TypeScript/issues/47920\nconst toOptionsSubtype = options => options;\nconst DEFAULT_OPTIONS = toOptionsSubtype({\n callToJSON: true,\n compareKeys: undefined,\n escapeRegex: false,\n escapeString: true,\n highlight: false,\n indent: 2,\n maxDepth: Infinity,\n maxWidth: Infinity,\n min: false,\n plugins: [],\n printBasicPrototype: true,\n printFunctionName: true,\n theme: DEFAULT_THEME\n});\nexports.DEFAULT_OPTIONS = DEFAULT_OPTIONS;\nfunction validateOptions(options) {\n Object.keys(options).forEach(key => {\n if (!Object.prototype.hasOwnProperty.call(DEFAULT_OPTIONS, key)) {\n throw new Error(`pretty-format: Unknown option \"${key}\".`);\n }\n });\n if (options.min && options.indent !== undefined && options.indent !== 0) {\n throw new Error(\n 'pretty-format: Options \"min\" and \"indent\" cannot be used together.'\n );\n }\n if (options.theme !== undefined) {\n if (options.theme === null) {\n throw new Error('pretty-format: Option \"theme\" must not be null.');\n }\n if (typeof options.theme !== 'object') {\n throw new Error(\n `pretty-format: Option \"theme\" must be of type \"object\" but instead received \"${typeof options.theme}\".`\n );\n }\n }\n}\nconst getColorsHighlight = options =>\n DEFAULT_THEME_KEYS.reduce((colors, key) => {\n const value =\n options.theme && options.theme[key] !== undefined\n ? options.theme[key]\n : DEFAULT_THEME[key];\n const color = value && _ansiStyles.default[value];\n if (\n color &&\n typeof color.close === 'string' &&\n typeof color.open === 'string'\n ) {\n colors[key] = color;\n } else {\n throw new Error(\n `pretty-format: Option \"theme\" has a key \"${key}\" whose value \"${value}\" is undefined in ansi-styles.`\n );\n }\n return colors;\n }, Object.create(null));\nconst getColorsEmpty = () =>\n DEFAULT_THEME_KEYS.reduce((colors, key) => {\n colors[key] = {\n close: '',\n open: ''\n };\n return colors;\n }, Object.create(null));\nconst getPrintFunctionName = options =>\n options?.printFunctionName ?? DEFAULT_OPTIONS.printFunctionName;\nconst getEscapeRegex = options =>\n options?.escapeRegex ?? DEFAULT_OPTIONS.escapeRegex;\nconst getEscapeString = options =>\n options?.escapeString ?? DEFAULT_OPTIONS.escapeString;\nconst getConfig = options => ({\n callToJSON: options?.callToJSON ?? DEFAULT_OPTIONS.callToJSON,\n colors: options?.highlight ? getColorsHighlight(options) : getColorsEmpty(),\n compareKeys:\n typeof options?.compareKeys === 'function' || options?.compareKeys === null\n ? options.compareKeys\n : DEFAULT_OPTIONS.compareKeys,\n escapeRegex: getEscapeRegex(options),\n escapeString: getEscapeString(options),\n indent: options?.min\n ? ''\n : createIndent(options?.indent ?? DEFAULT_OPTIONS.indent),\n maxDepth: options?.maxDepth ?? DEFAULT_OPTIONS.maxDepth,\n maxWidth: options?.maxWidth ?? DEFAULT_OPTIONS.maxWidth,\n min: options?.min ?? DEFAULT_OPTIONS.min,\n plugins: options?.plugins ?? DEFAULT_OPTIONS.plugins,\n printBasicPrototype: options?.printBasicPrototype ?? true,\n printFunctionName: getPrintFunctionName(options),\n spacingInner: options?.min ? ' ' : '\\n',\n spacingOuter: options?.min ? '' : '\\n'\n});\nfunction createIndent(indent) {\n return new Array(indent + 1).join(' ');\n}\n\n/**\n * Returns a presentation string of your `val` object\n * @param val any potential JavaScript object\n * @param options Custom settings\n */\nfunction format(val, options) {\n if (options) {\n validateOptions(options);\n if (options.plugins) {\n const plugin = findPlugin(options.plugins, val);\n if (plugin !== null) {\n return printPlugin(plugin, val, getConfig(options), '', 0, []);\n }\n }\n }\n const basicResult = printBasicValue(\n val,\n getPrintFunctionName(options),\n getEscapeRegex(options),\n getEscapeString(options)\n );\n if (basicResult !== null) {\n return basicResult;\n }\n return printComplexValue(val, getConfig(options), '', 0, []);\n}\nconst plugins = {\n AsymmetricMatcher: _AsymmetricMatcher.default,\n DOMCollection: _DOMCollection.default,\n DOMElement: _DOMElement.default,\n Immutable: _Immutable.default,\n ReactElement: _ReactElement.default,\n ReactTestComponent: _ReactTestComponent.default\n};\nexports.plugins = plugins;\nvar _default = format;\nexports.default = _default;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.cleanupSemantic =\n exports.Diff =\n exports.DIFF_INSERT =\n exports.DIFF_EQUAL =\n exports.DIFF_DELETE =\n void 0;\n/**\n * Diff Match and Patch\n * Copyright 2018 The diff-match-patch Authors.\n * https://github.com/google/diff-match-patch\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * CHANGES by pedrottimark to diff_match_patch_uncompressed.ts file:\n *\n * 1. Delete anything not needed to use diff_cleanupSemantic method\n * 2. Convert from prototype properties to var declarations\n * 3. Convert Diff to class from constructor and prototype\n * 4. Add type annotations for arguments and return values\n * 5. Add exports\n */\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nexports.DIFF_DELETE = DIFF_DELETE;\nvar DIFF_INSERT = 1;\nexports.DIFF_INSERT = DIFF_INSERT;\nvar DIFF_EQUAL = 0;\n\n/**\n * Class representing one diff tuple.\n * Attempts to look like a two-element array (which is what this used to be).\n * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.\n * @param {string} text Text to be deleted, inserted, or retained.\n * @constructor\n */\nexports.DIFF_EQUAL = DIFF_EQUAL;\nclass Diff {\n 0;\n 1;\n constructor(op, text) {\n this[0] = op;\n this[1] = text;\n }\n}\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\nexports.Diff = Diff;\nvar diff_commonPrefix = function (text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)\n ) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nvar diff_commonSuffix = function (text1, text2) {\n // Quick check for common null cases.\n if (\n !text1 ||\n !text2 ||\n text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)\n ) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)\n ) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\nvar diff_commonOverlap_ = function (text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: https://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (\n found == 0 ||\n text1.substring(text_length - length) == text2.substring(0, length)\n ) {\n best = length;\n length++;\n }\n }\n};\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\nvar diff_cleanupSemantic = function (diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) {\n // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = diffs[pointer][1];\n } else {\n // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (\n lastEquality &&\n lastEquality.length <=\n Math.max(length_insertions1, length_deletions1) &&\n lastEquality.length <= Math.max(length_insertions2, length_deletions2)\n ) {\n // Duplicate record.\n diffs.splice(\n equalities[equalitiesLength - 1],\n 0,\n new Diff(DIFF_DELETE, lastEquality)\n );\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n diff_cleanupMerge(diffs);\n }\n diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: <del>abcxxx</del><ins>xxxdef</ins>\n // -> <del>abc</del>xxx<ins>def</ins>\n // e.g: <del>xxxabc</del><ins>defxxx</ins>\n // -> <ins>def</ins>xxx<del>abc</del>\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (\n diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT\n ) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (\n overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2\n ) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(\n pointer,\n 0,\n new Diff(DIFF_EQUAL, insertion.substring(0, overlap_length1))\n );\n diffs[pointer - 1][1] = deletion.substring(\n 0,\n deletion.length - overlap_length1\n );\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (\n overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2\n ) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(\n pointer,\n 0,\n new Diff(DIFF_EQUAL, deletion.substring(0, overlap_length2))\n );\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] = insertion.substring(\n 0,\n insertion.length - overlap_length2\n );\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n};\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\nexports.cleanupSemantic = diff_cleanupSemantic;\nvar diff_cleanupSemanticLossless = function (diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);\n var lineBreak1 = whitespace1 && char1.match(linebreakRegex_);\n var lineBreak2 = whitespace2 && char2.match(linebreakRegex_);\n var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);\n var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n};\n\n// Define some regex patterns for matching boundaries.\nvar nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\nvar whitespaceRegex_ = /\\s/;\nvar linebreakRegex_ = /[\\r\\n]/;\nvar blanklineEndRegex_ = /\\n\\r?\\n$/;\nvar blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\nvar diff_cleanupMerge = function (diffs) {\n // Add a dummy entry at the end.\n diffs.push(new Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if (\n pointer - count_delete - count_insert > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL\n ) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(\n 0,\n 0,\n new Diff(DIFF_EQUAL, text_insert.substring(0, commonlength))\n );\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] =\n text_insert.substring(text_insert.length - commonlength) +\n diffs[pointer][1];\n text_insert = text_insert.substring(\n 0,\n text_insert.length - commonlength\n );\n text_delete = text_delete.substring(\n 0,\n text_delete.length - commonlength\n );\n }\n }\n // Delete the offending records and add the merged ones.\n pointer -= count_delete + count_insert;\n diffs.splice(pointer, count_delete + count_insert);\n if (text_delete.length) {\n diffs.splice(pointer, 0, new Diff(DIFF_DELETE, text_delete));\n pointer++;\n }\n if (text_insert.length) {\n diffs.splice(pointer, 0, new Diff(DIFF_INSERT, text_insert));\n pointer++;\n }\n pointer++;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n if (\n diffs[pointer][1].substring(\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n ) == diffs[pointer - 1][1]\n ) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] =\n diffs[pointer - 1][1] +\n diffs[pointer][1].substring(\n 0,\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n );\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (\n diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]\n ) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n diff_cleanupMerge(diffs);\n }\n};\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.SIMILAR_MESSAGE = exports.NO_DIFF_MESSAGE = void 0;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst NO_DIFF_MESSAGE = 'Compared values have no visual difference.';\nexports.NO_DIFF_MESSAGE = NO_DIFF_MESSAGE;\nconst SIMILAR_MESSAGE =\n 'Compared values serialize to the same structure.\\n' +\n 'Printing internal object structure without calling `toJSON` instead.';\nexports.SIMILAR_MESSAGE = SIMILAR_MESSAGE;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.default = diffSequence;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n// This diff-sequences package implements the linear space variation in\n// An O(ND) Difference Algorithm and Its Variations by Eugene W. Myers\n\n// Relationship in notation between Myers paper and this package:\n// A is a\n// N is aLength, aEnd - aStart, and so on\n// x is aIndex, aFirst, aLast, and so on\n// B is b\n// M is bLength, bEnd - bStart, and so on\n// y is bIndex, bFirst, bLast, and so on\n// \u0394 = N - M is negative of baDeltaLength = bLength - aLength\n// D is d\n// k is kF\n// k + \u0394 is kF = kR - baDeltaLength\n// V is aIndexesF or aIndexesR (see comment below about Indexes type)\n// index intervals [1, N] and [1, M] are [0, aLength) and [0, bLength)\n// starting point in forward direction (0, 0) is (-1, -1)\n// starting point in reverse direction (N + 1, M + 1) is (aLength, bLength)\n\n// The \u201Cedit graph\u201D for sequences a and b corresponds to items:\n// in a on the horizontal axis\n// in b on the vertical axis\n//\n// Given a-coordinate of a point in a diagonal, you can compute b-coordinate.\n//\n// Forward diagonals kF:\n// zero diagonal intersects top left corner\n// positive diagonals intersect top edge\n// negative diagonals insersect left edge\n//\n// Reverse diagonals kR:\n// zero diagonal intersects bottom right corner\n// positive diagonals intersect right edge\n// negative diagonals intersect bottom edge\n\n// The graph contains a directed acyclic graph of edges:\n// horizontal: delete an item from a\n// vertical: insert an item from b\n// diagonal: common item in a and b\n//\n// The algorithm solves dual problems in the graph analogy:\n// Find longest common subsequence: path with maximum number of diagonal edges\n// Find shortest edit script: path with minimum number of non-diagonal edges\n\n// Input callback function compares items at indexes in the sequences.\n\n// Output callback function receives the number of adjacent items\n// and starting indexes of each common subsequence.\n// Either original functions or wrapped to swap indexes if graph is transposed.\n// Indexes in sequence a of last point of forward or reverse paths in graph.\n// Myers algorithm indexes by diagonal k which for negative is bad deopt in V8.\n// This package indexes by iF and iR which are greater than or equal to zero.\n// and also updates the index arrays in place to cut memory in half.\n// kF = 2 * iF - d\n// kR = d - 2 * iR\n// Division of index intervals in sequences a and b at the middle change.\n// Invariant: intervals do not have common items at the start or end.\nconst pkg = 'diff-sequences'; // for error messages\nconst NOT_YET_SET = 0; // small int instead of undefined to avoid deopt in V8\n\n// Return the number of common items that follow in forward direction.\n// The length of what Myers paper calls a \u201Csnake\u201D in a forward path.\nconst countCommonItemsF = (aIndex, aEnd, bIndex, bEnd, isCommon) => {\n let nCommon = 0;\n while (aIndex < aEnd && bIndex < bEnd && isCommon(aIndex, bIndex)) {\n aIndex += 1;\n bIndex += 1;\n nCommon += 1;\n }\n return nCommon;\n};\n\n// Return the number of common items that precede in reverse direction.\n// The length of what Myers paper calls a \u201Csnake\u201D in a reverse path.\nconst countCommonItemsR = (aStart, aIndex, bStart, bIndex, isCommon) => {\n let nCommon = 0;\n while (aStart <= aIndex && bStart <= bIndex && isCommon(aIndex, bIndex)) {\n aIndex -= 1;\n bIndex -= 1;\n nCommon += 1;\n }\n return nCommon;\n};\n\n// A simple function to extend forward paths from (d - 1) to d changes\n// when forward and reverse paths cannot yet overlap.\nconst extendPathsF = (\n d,\n aEnd,\n bEnd,\n bF,\n isCommon,\n aIndexesF,\n iMaxF // return the value because optimization might decrease it\n) => {\n // Unroll the first iteration.\n let iF = 0;\n let kF = -d; // kF = 2 * iF - d\n let aFirst = aIndexesF[iF]; // in first iteration always insert\n let aIndexPrev1 = aFirst; // prev value of [iF - 1] in next iteration\n aIndexesF[iF] += countCommonItemsF(\n aFirst + 1,\n aEnd,\n bF + aFirst - kF + 1,\n bEnd,\n isCommon\n );\n\n // Optimization: skip diagonals in which paths cannot ever overlap.\n const nF = d < iMaxF ? d : iMaxF;\n\n // The diagonals kF are odd when d is odd and even when d is even.\n for (iF += 1, kF += 2; iF <= nF; iF += 1, kF += 2) {\n // To get first point of path segment, move one change in forward direction\n // from last point of previous path segment in an adjacent diagonal.\n // In last possible iteration when iF === d and kF === d always delete.\n if (iF !== d && aIndexPrev1 < aIndexesF[iF]) {\n aFirst = aIndexesF[iF]; // vertical to insert from b\n } else {\n aFirst = aIndexPrev1 + 1; // horizontal to delete from a\n\n if (aEnd <= aFirst) {\n // Optimization: delete moved past right of graph.\n return iF - 1;\n }\n }\n\n // To get last point of path segment, move along diagonal of common items.\n aIndexPrev1 = aIndexesF[iF];\n aIndexesF[iF] =\n aFirst +\n countCommonItemsF(aFirst + 1, aEnd, bF + aFirst - kF + 1, bEnd, isCommon);\n }\n return iMaxF;\n};\n\n// A simple function to extend reverse paths from (d - 1) to d changes\n// when reverse and forward paths cannot yet overlap.\nconst extendPathsR = (\n d,\n aStart,\n bStart,\n bR,\n isCommon,\n aIndexesR,\n iMaxR // return the value because optimization might decrease it\n) => {\n // Unroll the first iteration.\n let iR = 0;\n let kR = d; // kR = d - 2 * iR\n let aFirst = aIndexesR[iR]; // in first iteration always insert\n let aIndexPrev1 = aFirst; // prev value of [iR - 1] in next iteration\n aIndexesR[iR] -= countCommonItemsR(\n aStart,\n aFirst - 1,\n bStart,\n bR + aFirst - kR - 1,\n isCommon\n );\n\n // Optimization: skip diagonals in which paths cannot ever overlap.\n const nR = d < iMaxR ? d : iMaxR;\n\n // The diagonals kR are odd when d is odd and even when d is even.\n for (iR += 1, kR -= 2; iR <= nR; iR += 1, kR -= 2) {\n // To get first point of path segment, move one change in reverse direction\n // from last point of previous path segment in an adjacent diagonal.\n // In last possible iteration when iR === d and kR === -d always delete.\n if (iR !== d && aIndexesR[iR] < aIndexPrev1) {\n aFirst = aIndexesR[iR]; // vertical to insert from b\n } else {\n aFirst = aIndexPrev1 - 1; // horizontal to delete from a\n\n if (aFirst < aStart) {\n // Optimization: delete moved past left of graph.\n return iR - 1;\n }\n }\n\n // To get last point of path segment, move along diagonal of common items.\n aIndexPrev1 = aIndexesR[iR];\n aIndexesR[iR] =\n aFirst -\n countCommonItemsR(\n aStart,\n aFirst - 1,\n bStart,\n bR + aFirst - kR - 1,\n isCommon\n );\n }\n return iMaxR;\n};\n\n// A complete function to extend forward paths from (d - 1) to d changes.\n// Return true if a path overlaps reverse path of (d - 1) changes in its diagonal.\nconst extendOverlappablePathsF = (\n d,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n iMaxF,\n aIndexesR,\n iMaxR,\n division // update prop values if return true\n) => {\n const bF = bStart - aStart; // bIndex = bF + aIndex - kF\n const aLength = aEnd - aStart;\n const bLength = bEnd - bStart;\n const baDeltaLength = bLength - aLength; // kF = kR - baDeltaLength\n\n // Range of diagonals in which forward and reverse paths might overlap.\n const kMinOverlapF = -baDeltaLength - (d - 1); // -(d - 1) <= kR\n const kMaxOverlapF = -baDeltaLength + (d - 1); // kR <= (d - 1)\n\n let aIndexPrev1 = NOT_YET_SET; // prev value of [iF - 1] in next iteration\n\n // Optimization: skip diagonals in which paths cannot ever overlap.\n const nF = d < iMaxF ? d : iMaxF;\n\n // The diagonals kF = 2 * iF - d are odd when d is odd and even when d is even.\n for (let iF = 0, kF = -d; iF <= nF; iF += 1, kF += 2) {\n // To get first point of path segment, move one change in forward direction\n // from last point of previous path segment in an adjacent diagonal.\n // In first iteration when iF === 0 and kF === -d always insert.\n // In last possible iteration when iF === d and kF === d always delete.\n const insert = iF === 0 || (iF !== d && aIndexPrev1 < aIndexesF[iF]);\n const aLastPrev = insert ? aIndexesF[iF] : aIndexPrev1;\n const aFirst = insert\n ? aLastPrev // vertical to insert from b\n : aLastPrev + 1; // horizontal to delete from a\n\n // To get last point of path segment, move along diagonal of common items.\n const bFirst = bF + aFirst - kF;\n const nCommonF = countCommonItemsF(\n aFirst + 1,\n aEnd,\n bFirst + 1,\n bEnd,\n isCommon\n );\n const aLast = aFirst + nCommonF;\n aIndexPrev1 = aIndexesF[iF];\n aIndexesF[iF] = aLast;\n if (kMinOverlapF <= kF && kF <= kMaxOverlapF) {\n // Solve for iR of reverse path with (d - 1) changes in diagonal kF:\n // kR = kF + baDeltaLength\n // kR = (d - 1) - 2 * iR\n const iR = (d - 1 - (kF + baDeltaLength)) / 2;\n\n // If this forward path overlaps the reverse path in this diagonal,\n // then this is the middle change of the index intervals.\n if (iR <= iMaxR && aIndexesR[iR] - 1 <= aLast) {\n // Unlike the Myers algorithm which finds only the middle \u201Csnake\u201D\n // this package can find two common subsequences per division.\n // Last point of previous path segment is on an adjacent diagonal.\n const bLastPrev = bF + aLastPrev - (insert ? kF + 1 : kF - 1);\n\n // Because of invariant that intervals preceding the middle change\n // cannot have common items at the end,\n // move in reverse direction along a diagonal of common items.\n const nCommonR = countCommonItemsR(\n aStart,\n aLastPrev,\n bStart,\n bLastPrev,\n isCommon\n );\n const aIndexPrevFirst = aLastPrev - nCommonR;\n const bIndexPrevFirst = bLastPrev - nCommonR;\n const aEndPreceding = aIndexPrevFirst + 1;\n const bEndPreceding = bIndexPrevFirst + 1;\n division.nChangePreceding = d - 1;\n if (d - 1 === aEndPreceding + bEndPreceding - aStart - bStart) {\n // Optimization: number of preceding changes in forward direction\n // is equal to number of items in preceding interval,\n // therefore it cannot contain any common items.\n division.aEndPreceding = aStart;\n division.bEndPreceding = bStart;\n } else {\n division.aEndPreceding = aEndPreceding;\n division.bEndPreceding = bEndPreceding;\n }\n division.nCommonPreceding = nCommonR;\n if (nCommonR !== 0) {\n division.aCommonPreceding = aEndPreceding;\n division.bCommonPreceding = bEndPreceding;\n }\n division.nCommonFollowing = nCommonF;\n if (nCommonF !== 0) {\n division.aCommonFollowing = aFirst + 1;\n division.bCommonFollowing = bFirst + 1;\n }\n const aStartFollowing = aLast + 1;\n const bStartFollowing = bFirst + nCommonF + 1;\n division.nChangeFollowing = d - 1;\n if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) {\n // Optimization: number of changes in reverse direction\n // is equal to number of items in following interval,\n // therefore it cannot contain any common items.\n division.aStartFollowing = aEnd;\n division.bStartFollowing = bEnd;\n } else {\n division.aStartFollowing = aStartFollowing;\n division.bStartFollowing = bStartFollowing;\n }\n return true;\n }\n }\n }\n return false;\n};\n\n// A complete function to extend reverse paths from (d - 1) to d changes.\n// Return true if a path overlaps forward path of d changes in its diagonal.\nconst extendOverlappablePathsR = (\n d,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n iMaxF,\n aIndexesR,\n iMaxR,\n division // update prop values if return true\n) => {\n const bR = bEnd - aEnd; // bIndex = bR + aIndex - kR\n const aLength = aEnd - aStart;\n const bLength = bEnd - bStart;\n const baDeltaLength = bLength - aLength; // kR = kF + baDeltaLength\n\n // Range of diagonals in which forward and reverse paths might overlap.\n const kMinOverlapR = baDeltaLength - d; // -d <= kF\n const kMaxOverlapR = baDeltaLength + d; // kF <= d\n\n let aIndexPrev1 = NOT_YET_SET; // prev value of [iR - 1] in next iteration\n\n // Optimization: skip diagonals in which paths cannot ever overlap.\n const nR = d < iMaxR ? d : iMaxR;\n\n // The diagonals kR = d - 2 * iR are odd when d is odd and even when d is even.\n for (let iR = 0, kR = d; iR <= nR; iR += 1, kR -= 2) {\n // To get first point of path segment, move one change in reverse direction\n // from last point of previous path segment in an adjacent diagonal.\n // In first iteration when iR === 0 and kR === d always insert.\n // In last possible iteration when iR === d and kR === -d always delete.\n const insert = iR === 0 || (iR !== d && aIndexesR[iR] < aIndexPrev1);\n const aLastPrev = insert ? aIndexesR[iR] : aIndexPrev1;\n const aFirst = insert\n ? aLastPrev // vertical to insert from b\n : aLastPrev - 1; // horizontal to delete from a\n\n // To get last point of path segment, move along diagonal of common items.\n const bFirst = bR + aFirst - kR;\n const nCommonR = countCommonItemsR(\n aStart,\n aFirst - 1,\n bStart,\n bFirst - 1,\n isCommon\n );\n const aLast = aFirst - nCommonR;\n aIndexPrev1 = aIndexesR[iR];\n aIndexesR[iR] = aLast;\n if (kMinOverlapR <= kR && kR <= kMaxOverlapR) {\n // Solve for iF of forward path with d changes in diagonal kR:\n // kF = kR - baDeltaLength\n // kF = 2 * iF - d\n const iF = (d + (kR - baDeltaLength)) / 2;\n\n // If this reverse path overlaps the forward path in this diagonal,\n // then this is a middle change of the index intervals.\n if (iF <= iMaxF && aLast - 1 <= aIndexesF[iF]) {\n const bLast = bFirst - nCommonR;\n division.nChangePreceding = d;\n if (d === aLast + bLast - aStart - bStart) {\n // Optimization: number of changes in reverse direction\n // is equal to number of items in preceding interval,\n // therefore it cannot contain any common items.\n division.aEndPreceding = aStart;\n division.bEndPreceding = bStart;\n } else {\n division.aEndPreceding = aLast;\n division.bEndPreceding = bLast;\n }\n division.nCommonPreceding = nCommonR;\n if (nCommonR !== 0) {\n // The last point of reverse path segment is start of common subsequence.\n division.aCommonPreceding = aLast;\n division.bCommonPreceding = bLast;\n }\n division.nChangeFollowing = d - 1;\n if (d === 1) {\n // There is no previous path segment.\n division.nCommonFollowing = 0;\n division.aStartFollowing = aEnd;\n division.bStartFollowing = bEnd;\n } else {\n // Unlike the Myers algorithm which finds only the middle \u201Csnake\u201D\n // this package can find two common subsequences per division.\n // Last point of previous path segment is on an adjacent diagonal.\n const bLastPrev = bR + aLastPrev - (insert ? kR - 1 : kR + 1);\n\n // Because of invariant that intervals following the middle change\n // cannot have common items at the start,\n // move in forward direction along a diagonal of common items.\n const nCommonF = countCommonItemsF(\n aLastPrev,\n aEnd,\n bLastPrev,\n bEnd,\n isCommon\n );\n division.nCommonFollowing = nCommonF;\n if (nCommonF !== 0) {\n // The last point of reverse path segment is start of common subsequence.\n division.aCommonFollowing = aLastPrev;\n division.bCommonFollowing = bLastPrev;\n }\n const aStartFollowing = aLastPrev + nCommonF; // aFirstPrev\n const bStartFollowing = bLastPrev + nCommonF; // bFirstPrev\n\n if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) {\n // Optimization: number of changes in forward direction\n // is equal to number of items in following interval,\n // therefore it cannot contain any common items.\n division.aStartFollowing = aEnd;\n division.bStartFollowing = bEnd;\n } else {\n division.aStartFollowing = aStartFollowing;\n division.bStartFollowing = bStartFollowing;\n }\n }\n return true;\n }\n }\n }\n return false;\n};\n\n// Given index intervals and input function to compare items at indexes,\n// divide at the middle change.\n//\n// DO NOT CALL if start === end, because interval cannot contain common items\n// and because this function will throw the \u201Cno overlap\u201D error.\nconst divide = (\n nChange,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n aIndexesR,\n division // output\n) => {\n const bF = bStart - aStart; // bIndex = bF + aIndex - kF\n const bR = bEnd - aEnd; // bIndex = bR + aIndex - kR\n const aLength = aEnd - aStart;\n const bLength = bEnd - bStart;\n\n // Because graph has square or portrait orientation,\n // length difference is minimum number of items to insert from b.\n // Corresponding forward and reverse diagonals in graph\n // depend on length difference of the sequences:\n // kF = kR - baDeltaLength\n // kR = kF + baDeltaLength\n const baDeltaLength = bLength - aLength;\n\n // Optimization: max diagonal in graph intersects corner of shorter side.\n let iMaxF = aLength;\n let iMaxR = aLength;\n\n // Initialize no changes yet in forward or reverse direction:\n aIndexesF[0] = aStart - 1; // at open start of interval, outside closed start\n aIndexesR[0] = aEnd; // at open end of interval\n\n if (baDeltaLength % 2 === 0) {\n // The number of changes in paths is 2 * d if length difference is even.\n const dMin = (nChange || baDeltaLength) / 2;\n const dMax = (aLength + bLength) / 2;\n for (let d = 1; d <= dMax; d += 1) {\n iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF);\n if (d < dMin) {\n iMaxR = extendPathsR(d, aStart, bStart, bR, isCommon, aIndexesR, iMaxR);\n } else if (\n // If a reverse path overlaps a forward path in the same diagonal,\n // return a division of the index intervals at the middle change.\n extendOverlappablePathsR(\n d,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n iMaxF,\n aIndexesR,\n iMaxR,\n division\n )\n ) {\n return;\n }\n }\n } else {\n // The number of changes in paths is 2 * d - 1 if length difference is odd.\n const dMin = ((nChange || baDeltaLength) + 1) / 2;\n const dMax = (aLength + bLength + 1) / 2;\n\n // Unroll first half iteration so loop extends the relevant pairs of paths.\n // Because of invariant that intervals have no common items at start or end,\n // and limitation not to call divide with empty intervals,\n // therefore it cannot be called if a forward path with one change\n // would overlap a reverse path with no changes, even if dMin === 1.\n let d = 1;\n iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF);\n for (d += 1; d <= dMax; d += 1) {\n iMaxR = extendPathsR(\n d - 1,\n aStart,\n bStart,\n bR,\n isCommon,\n aIndexesR,\n iMaxR\n );\n if (d < dMin) {\n iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF);\n } else if (\n // If a forward path overlaps a reverse path in the same diagonal,\n // return a division of the index intervals at the middle change.\n extendOverlappablePathsF(\n d,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n iMaxF,\n aIndexesR,\n iMaxR,\n division\n )\n ) {\n return;\n }\n }\n }\n\n /* istanbul ignore next */\n throw new Error(\n `${pkg}: no overlap aStart=${aStart} aEnd=${aEnd} bStart=${bStart} bEnd=${bEnd}`\n );\n};\n\n// Given index intervals and input function to compare items at indexes,\n// return by output function the number of adjacent items and starting indexes\n// of each common subsequence. Divide and conquer with only linear space.\n//\n// The index intervals are half open [start, end) like array slice method.\n// DO NOT CALL if start === end, because interval cannot contain common items\n// and because divide function will throw the \u201Cno overlap\u201D error.\nconst findSubsequences = (\n nChange,\n aStart,\n aEnd,\n bStart,\n bEnd,\n transposed,\n callbacks,\n aIndexesF,\n aIndexesR,\n division // temporary memory, not input nor output\n) => {\n if (bEnd - bStart < aEnd - aStart) {\n // Transpose graph so it has portrait instead of landscape orientation.\n // Always compare shorter to longer sequence for consistency and optimization.\n transposed = !transposed;\n if (transposed && callbacks.length === 1) {\n // Lazily wrap callback functions to swap args if graph is transposed.\n const {foundSubsequence, isCommon} = callbacks[0];\n callbacks[1] = {\n foundSubsequence: (nCommon, bCommon, aCommon) => {\n foundSubsequence(nCommon, aCommon, bCommon);\n },\n isCommon: (bIndex, aIndex) => isCommon(aIndex, bIndex)\n };\n }\n const tStart = aStart;\n const tEnd = aEnd;\n aStart = bStart;\n aEnd = bEnd;\n bStart = tStart;\n bEnd = tEnd;\n }\n const {foundSubsequence, isCommon} = callbacks[transposed ? 1 : 0];\n\n // Divide the index intervals at the middle change.\n divide(\n nChange,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n aIndexesR,\n division\n );\n const {\n nChangePreceding,\n aEndPreceding,\n bEndPreceding,\n nCommonPreceding,\n aCommonPreceding,\n bCommonPreceding,\n nCommonFollowing,\n aCommonFollowing,\n bCommonFollowing,\n nChangeFollowing,\n aStartFollowing,\n bStartFollowing\n } = division;\n\n // Unless either index interval is empty, they might contain common items.\n if (aStart < aEndPreceding && bStart < bEndPreceding) {\n // Recursely find and return common subsequences preceding the division.\n findSubsequences(\n nChangePreceding,\n aStart,\n aEndPreceding,\n bStart,\n bEndPreceding,\n transposed,\n callbacks,\n aIndexesF,\n aIndexesR,\n division\n );\n }\n\n // Return common subsequences that are adjacent to the middle change.\n if (nCommonPreceding !== 0) {\n foundSubsequence(nCommonPreceding, aCommonPreceding, bCommonPreceding);\n }\n if (nCommonFollowing !== 0) {\n foundSubsequence(nCommonFollowing, aCommonFollowing, bCommonFollowing);\n }\n\n // Unless either index interval is empty, they might contain common items.\n if (aStartFollowing < aEnd && bStartFollowing < bEnd) {\n // Recursely find and return common subsequences following the division.\n findSubsequences(\n nChangeFollowing,\n aStartFollowing,\n aEnd,\n bStartFollowing,\n bEnd,\n transposed,\n callbacks,\n aIndexesF,\n aIndexesR,\n division\n );\n }\n};\nconst validateLength = (name, arg) => {\n if (typeof arg !== 'number') {\n throw new TypeError(`${pkg}: ${name} typeof ${typeof arg} is not a number`);\n }\n if (!Number.isSafeInteger(arg)) {\n throw new RangeError(`${pkg}: ${name} value ${arg} is not a safe integer`);\n }\n if (arg < 0) {\n throw new RangeError(`${pkg}: ${name} value ${arg} is a negative integer`);\n }\n};\nconst validateCallback = (name, arg) => {\n const type = typeof arg;\n if (type !== 'function') {\n throw new TypeError(`${pkg}: ${name} typeof ${type} is not a function`);\n }\n};\n\n// Compare items in two sequences to find a longest common subsequence.\n// Given lengths of sequences and input function to compare items at indexes,\n// return by output function the number of adjacent items and starting indexes\n// of each common subsequence.\nfunction diffSequence(aLength, bLength, isCommon, foundSubsequence) {\n validateLength('aLength', aLength);\n validateLength('bLength', bLength);\n validateCallback('isCommon', isCommon);\n validateCallback('foundSubsequence', foundSubsequence);\n\n // Count common items from the start in the forward direction.\n const nCommonF = countCommonItemsF(0, aLength, 0, bLength, isCommon);\n if (nCommonF !== 0) {\n foundSubsequence(nCommonF, 0, 0);\n }\n\n // Unless both sequences consist of common items only,\n // find common items in the half-trimmed index intervals.\n if (aLength !== nCommonF || bLength !== nCommonF) {\n // Invariant: intervals do not have common items at the start.\n // The start of an index interval is closed like array slice method.\n const aStart = nCommonF;\n const bStart = nCommonF;\n\n // Count common items from the end in the reverse direction.\n const nCommonR = countCommonItemsR(\n aStart,\n aLength - 1,\n bStart,\n bLength - 1,\n isCommon\n );\n\n // Invariant: intervals do not have common items at the end.\n // The end of an index interval is open like array slice method.\n const aEnd = aLength - nCommonR;\n const bEnd = bLength - nCommonR;\n\n // Unless one sequence consists of common items only,\n // therefore the other trimmed index interval consists of changes only,\n // find common items in the trimmed index intervals.\n const nCommonFR = nCommonF + nCommonR;\n if (aLength !== nCommonFR && bLength !== nCommonFR) {\n const nChange = 0; // number of change items is not yet known\n const transposed = false; // call the original unwrapped functions\n const callbacks = [\n {\n foundSubsequence,\n isCommon\n }\n ];\n\n // Indexes in sequence a of last points in furthest reaching paths\n // from outside the start at top left in the forward direction:\n const aIndexesF = [NOT_YET_SET];\n // from the end at bottom right in the reverse direction:\n const aIndexesR = [NOT_YET_SET];\n\n // Initialize one object as output of all calls to divide function.\n const division = {\n aCommonFollowing: NOT_YET_SET,\n aCommonPreceding: NOT_YET_SET,\n aEndPreceding: NOT_YET_SET,\n aStartFollowing: NOT_YET_SET,\n bCommonFollowing: NOT_YET_SET,\n bCommonPreceding: NOT_YET_SET,\n bEndPreceding: NOT_YET_SET,\n bStartFollowing: NOT_YET_SET,\n nChangeFollowing: NOT_YET_SET,\n nChangePreceding: NOT_YET_SET,\n nCommonFollowing: NOT_YET_SET,\n nCommonPreceding: NOT_YET_SET\n };\n\n // Find and return common subsequences in the trimmed index intervals.\n findSubsequences(\n nChange,\n aStart,\n aEnd,\n bStart,\n bEnd,\n transposed,\n callbacks,\n aIndexesF,\n aIndexesR,\n division\n );\n }\n if (nCommonR !== 0) {\n foundSubsequence(nCommonR, aEnd, bEnd);\n }\n }\n}\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.joinAlignedDiffsNoExpand = exports.joinAlignedDiffsExpand = void 0;\nvar _cleanupSemantic = require('./cleanupSemantic');\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst formatTrailingSpaces = (line, trailingSpaceFormatter) =>\n line.replace(/\\s+$/, match => trailingSpaceFormatter(match));\nconst printDiffLine = (\n line,\n isFirstOrLast,\n color,\n indicator,\n trailingSpaceFormatter,\n emptyFirstOrLastLinePlaceholder\n) =>\n line.length !== 0\n ? color(\n `${indicator} ${formatTrailingSpaces(line, trailingSpaceFormatter)}`\n )\n : indicator !== ' '\n ? color(indicator)\n : isFirstOrLast && emptyFirstOrLastLinePlaceholder.length !== 0\n ? color(`${indicator} ${emptyFirstOrLastLinePlaceholder}`)\n : '';\nconst printDeleteLine = (\n line,\n isFirstOrLast,\n {\n aColor,\n aIndicator,\n changeLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n }\n) =>\n printDiffLine(\n line,\n isFirstOrLast,\n aColor,\n aIndicator,\n changeLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n );\nconst printInsertLine = (\n line,\n isFirstOrLast,\n {\n bColor,\n bIndicator,\n changeLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n }\n) =>\n printDiffLine(\n line,\n isFirstOrLast,\n bColor,\n bIndicator,\n changeLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n );\nconst printCommonLine = (\n line,\n isFirstOrLast,\n {\n commonColor,\n commonIndicator,\n commonLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n }\n) =>\n printDiffLine(\n line,\n isFirstOrLast,\n commonColor,\n commonIndicator,\n commonLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n );\n\n// In GNU diff format, indexes are one-based instead of zero-based.\nconst createPatchMark = (aStart, aEnd, bStart, bEnd, {patchColor}) =>\n patchColor(\n `@@ -${aStart + 1},${aEnd - aStart} +${bStart + 1},${bEnd - bStart} @@`\n );\n\n// jest --no-expand\n//\n// Given array of aligned strings with inverse highlight formatting,\n// return joined lines with diff formatting (and patch marks, if needed).\nconst joinAlignedDiffsNoExpand = (diffs, options) => {\n const iLength = diffs.length;\n const nContextLines = options.contextLines;\n const nContextLines2 = nContextLines + nContextLines;\n\n // First pass: count output lines and see if it has patches.\n let jLength = iLength;\n let hasExcessAtStartOrEnd = false;\n let nExcessesBetweenChanges = 0;\n let i = 0;\n while (i !== iLength) {\n const iStart = i;\n while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_EQUAL) {\n i += 1;\n }\n if (iStart !== i) {\n if (iStart === 0) {\n // at start\n if (i > nContextLines) {\n jLength -= i - nContextLines; // subtract excess common lines\n hasExcessAtStartOrEnd = true;\n }\n } else if (i === iLength) {\n // at end\n const n = i - iStart;\n if (n > nContextLines) {\n jLength -= n - nContextLines; // subtract excess common lines\n hasExcessAtStartOrEnd = true;\n }\n } else {\n // between changes\n const n = i - iStart;\n if (n > nContextLines2) {\n jLength -= n - nContextLines2; // subtract excess common lines\n nExcessesBetweenChanges += 1;\n }\n }\n }\n while (i !== iLength && diffs[i][0] !== _cleanupSemantic.DIFF_EQUAL) {\n i += 1;\n }\n }\n const hasPatch = nExcessesBetweenChanges !== 0 || hasExcessAtStartOrEnd;\n if (nExcessesBetweenChanges !== 0) {\n jLength += nExcessesBetweenChanges + 1; // add patch lines\n } else if (hasExcessAtStartOrEnd) {\n jLength += 1; // add patch line\n }\n\n const jLast = jLength - 1;\n const lines = [];\n let jPatchMark = 0; // index of placeholder line for current patch mark\n if (hasPatch) {\n lines.push(''); // placeholder line for first patch mark\n }\n\n // Indexes of expected or received lines in current patch:\n let aStart = 0;\n let bStart = 0;\n let aEnd = 0;\n let bEnd = 0;\n const pushCommonLine = line => {\n const j = lines.length;\n lines.push(printCommonLine(line, j === 0 || j === jLast, options));\n aEnd += 1;\n bEnd += 1;\n };\n const pushDeleteLine = line => {\n const j = lines.length;\n lines.push(printDeleteLine(line, j === 0 || j === jLast, options));\n aEnd += 1;\n };\n const pushInsertLine = line => {\n const j = lines.length;\n lines.push(printInsertLine(line, j === 0 || j === jLast, options));\n bEnd += 1;\n };\n\n // Second pass: push lines with diff formatting (and patch marks, if needed).\n i = 0;\n while (i !== iLength) {\n let iStart = i;\n while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_EQUAL) {\n i += 1;\n }\n if (iStart !== i) {\n if (iStart === 0) {\n // at beginning\n if (i > nContextLines) {\n iStart = i - nContextLines;\n aStart = iStart;\n bStart = iStart;\n aEnd = aStart;\n bEnd = bStart;\n }\n for (let iCommon = iStart; iCommon !== i; iCommon += 1) {\n pushCommonLine(diffs[iCommon][1]);\n }\n } else if (i === iLength) {\n // at end\n const iEnd = i - iStart > nContextLines ? iStart + nContextLines : i;\n for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1) {\n pushCommonLine(diffs[iCommon][1]);\n }\n } else {\n // between changes\n const nCommon = i - iStart;\n if (nCommon > nContextLines2) {\n const iEnd = iStart + nContextLines;\n for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1) {\n pushCommonLine(diffs[iCommon][1]);\n }\n lines[jPatchMark] = createPatchMark(\n aStart,\n aEnd,\n bStart,\n bEnd,\n options\n );\n jPatchMark = lines.length;\n lines.push(''); // placeholder line for next patch mark\n\n const nOmit = nCommon - nContextLines2;\n aStart = aEnd + nOmit;\n bStart = bEnd + nOmit;\n aEnd = aStart;\n bEnd = bStart;\n for (let iCommon = i - nContextLines; iCommon !== i; iCommon += 1) {\n pushCommonLine(diffs[iCommon][1]);\n }\n } else {\n for (let iCommon = iStart; iCommon !== i; iCommon += 1) {\n pushCommonLine(diffs[iCommon][1]);\n }\n }\n }\n }\n while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_DELETE) {\n pushDeleteLine(diffs[i][1]);\n i += 1;\n }\n while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_INSERT) {\n pushInsertLine(diffs[i][1]);\n i += 1;\n }\n }\n if (hasPatch) {\n lines[jPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options);\n }\n return lines.join('\\n');\n};\n\n// jest --expand\n//\n// Given array of aligned strings with inverse highlight formatting,\n// return joined lines with diff formatting.\nexports.joinAlignedDiffsNoExpand = joinAlignedDiffsNoExpand;\nconst joinAlignedDiffsExpand = (diffs, options) =>\n diffs\n .map((diff, i, diffs) => {\n const line = diff[1];\n const isFirstOrLast = i === 0 || i === diffs.length - 1;\n switch (diff[0]) {\n case _cleanupSemantic.DIFF_DELETE:\n return printDeleteLine(line, isFirstOrLast, options);\n case _cleanupSemantic.DIFF_INSERT:\n return printInsertLine(line, isFirstOrLast, options);\n default:\n return printCommonLine(line, isFirstOrLast, options);\n }\n })\n .join('\\n');\nexports.joinAlignedDiffsExpand = joinAlignedDiffsExpand;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.normalizeDiffOptions = exports.noColor = void 0;\nvar _chalk = _interopRequireDefault(require('chalk'));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {default: obj};\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst noColor = string => string;\nexports.noColor = noColor;\nconst DIFF_CONTEXT_DEFAULT = 5;\nconst OPTIONS_DEFAULT = {\n aAnnotation: 'Expected',\n aColor: _chalk.default.green,\n aIndicator: '-',\n bAnnotation: 'Received',\n bColor: _chalk.default.red,\n bIndicator: '+',\n changeColor: _chalk.default.inverse,\n changeLineTrailingSpaceColor: noColor,\n commonColor: _chalk.default.dim,\n commonIndicator: ' ',\n commonLineTrailingSpaceColor: noColor,\n compareKeys: undefined,\n contextLines: DIFF_CONTEXT_DEFAULT,\n emptyFirstOrLastLinePlaceholder: '',\n expand: true,\n includeChangeCounts: false,\n omitAnnotationLines: false,\n patchColor: _chalk.default.yellow\n};\nconst getCompareKeys = compareKeys =>\n compareKeys && typeof compareKeys === 'function'\n ? compareKeys\n : OPTIONS_DEFAULT.compareKeys;\nconst getContextLines = contextLines =>\n typeof contextLines === 'number' &&\n Number.isSafeInteger(contextLines) &&\n contextLines >= 0\n ? contextLines\n : DIFF_CONTEXT_DEFAULT;\n\n// Pure function returns options with all properties.\nconst normalizeDiffOptions = (options = {}) => ({\n ...OPTIONS_DEFAULT,\n ...options,\n compareKeys: getCompareKeys(options.compareKeys),\n contextLines: getContextLines(options.contextLines)\n});\nexports.normalizeDiffOptions = normalizeDiffOptions;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.printDiffLines =\n exports.diffLinesUnified2 =\n exports.diffLinesUnified =\n exports.diffLinesRaw =\n void 0;\nvar _diffSequences = _interopRequireDefault(require('diff-sequences'));\nvar _cleanupSemantic = require('./cleanupSemantic');\nvar _joinAlignedDiffs = require('./joinAlignedDiffs');\nvar _normalizeDiffOptions = require('./normalizeDiffOptions');\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {default: obj};\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst isEmptyString = lines => lines.length === 1 && lines[0].length === 0;\nconst countChanges = diffs => {\n let a = 0;\n let b = 0;\n diffs.forEach(diff => {\n switch (diff[0]) {\n case _cleanupSemantic.DIFF_DELETE:\n a += 1;\n break;\n case _cleanupSemantic.DIFF_INSERT:\n b += 1;\n break;\n }\n });\n return {\n a,\n b\n };\n};\nconst printAnnotation = (\n {\n aAnnotation,\n aColor,\n aIndicator,\n bAnnotation,\n bColor,\n bIndicator,\n includeChangeCounts,\n omitAnnotationLines\n },\n changeCounts\n) => {\n if (omitAnnotationLines) {\n return '';\n }\n let aRest = '';\n let bRest = '';\n if (includeChangeCounts) {\n const aCount = String(changeCounts.a);\n const bCount = String(changeCounts.b);\n\n // Padding right aligns the ends of the annotations.\n const baAnnotationLengthDiff = bAnnotation.length - aAnnotation.length;\n const aAnnotationPadding = ' '.repeat(Math.max(0, baAnnotationLengthDiff));\n const bAnnotationPadding = ' '.repeat(Math.max(0, -baAnnotationLengthDiff));\n\n // Padding left aligns the ends of the counts.\n const baCountLengthDiff = bCount.length - aCount.length;\n const aCountPadding = ' '.repeat(Math.max(0, baCountLengthDiff));\n const bCountPadding = ' '.repeat(Math.max(0, -baCountLengthDiff));\n aRest = `${aAnnotationPadding} ${aIndicator} ${aCountPadding}${aCount}`;\n bRest = `${bAnnotationPadding} ${bIndicator} ${bCountPadding}${bCount}`;\n }\n const a = `${aIndicator} ${aAnnotation}${aRest}`;\n const b = `${bIndicator} ${bAnnotation}${bRest}`;\n return `${aColor(a)}\\n${bColor(b)}\\n\\n`;\n};\nconst printDiffLines = (diffs, options) =>\n printAnnotation(options, countChanges(diffs)) +\n (options.expand\n ? (0, _joinAlignedDiffs.joinAlignedDiffsExpand)(diffs, options)\n : (0, _joinAlignedDiffs.joinAlignedDiffsNoExpand)(diffs, options));\n\n// Compare two arrays of strings line-by-line. Format as comparison lines.\nexports.printDiffLines = printDiffLines;\nconst diffLinesUnified = (aLines, bLines, options) =>\n printDiffLines(\n diffLinesRaw(\n isEmptyString(aLines) ? [] : aLines,\n isEmptyString(bLines) ? [] : bLines\n ),\n (0, _normalizeDiffOptions.normalizeDiffOptions)(options)\n );\n\n// Given two pairs of arrays of strings:\n// Compare the pair of comparison arrays line-by-line.\n// Format the corresponding lines in the pair of displayable arrays.\nexports.diffLinesUnified = diffLinesUnified;\nconst diffLinesUnified2 = (\n aLinesDisplay,\n bLinesDisplay,\n aLinesCompare,\n bLinesCompare,\n options\n) => {\n if (isEmptyString(aLinesDisplay) && isEmptyString(aLinesCompare)) {\n aLinesDisplay = [];\n aLinesCompare = [];\n }\n if (isEmptyString(bLinesDisplay) && isEmptyString(bLinesCompare)) {\n bLinesDisplay = [];\n bLinesCompare = [];\n }\n if (\n aLinesDisplay.length !== aLinesCompare.length ||\n bLinesDisplay.length !== bLinesCompare.length\n ) {\n // Fall back to diff of display lines.\n return diffLinesUnified(aLinesDisplay, bLinesDisplay, options);\n }\n const diffs = diffLinesRaw(aLinesCompare, bLinesCompare);\n\n // Replace comparison lines with displayable lines.\n let aIndex = 0;\n let bIndex = 0;\n diffs.forEach(diff => {\n switch (diff[0]) {\n case _cleanupSemantic.DIFF_DELETE:\n diff[1] = aLinesDisplay[aIndex];\n aIndex += 1;\n break;\n case _cleanupSemantic.DIFF_INSERT:\n diff[1] = bLinesDisplay[bIndex];\n bIndex += 1;\n break;\n default:\n diff[1] = bLinesDisplay[bIndex];\n aIndex += 1;\n bIndex += 1;\n }\n });\n return printDiffLines(\n diffs,\n (0, _normalizeDiffOptions.normalizeDiffOptions)(options)\n );\n};\n\n// Compare two arrays of strings line-by-line.\nexports.diffLinesUnified2 = diffLinesUnified2;\nconst diffLinesRaw = (aLines, bLines) => {\n const aLength = aLines.length;\n const bLength = bLines.length;\n const isCommon = (aIndex, bIndex) => aLines[aIndex] === bLines[bIndex];\n const diffs = [];\n let aIndex = 0;\n let bIndex = 0;\n const foundSubsequence = (nCommon, aCommon, bCommon) => {\n for (; aIndex !== aCommon; aIndex += 1) {\n diffs.push(\n new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, aLines[aIndex])\n );\n }\n for (; bIndex !== bCommon; bIndex += 1) {\n diffs.push(\n new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, bLines[bIndex])\n );\n }\n for (; nCommon !== 0; nCommon -= 1, aIndex += 1, bIndex += 1) {\n diffs.push(\n new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_EQUAL, bLines[bIndex])\n );\n }\n };\n (0, _diffSequences.default)(aLength, bLength, isCommon, foundSubsequence);\n\n // After the last common subsequence, push remaining change items.\n for (; aIndex !== aLength; aIndex += 1) {\n diffs.push(\n new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, aLines[aIndex])\n );\n }\n for (; bIndex !== bLength; bIndex += 1) {\n diffs.push(\n new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, bLines[bIndex])\n );\n }\n return diffs;\n};\nexports.diffLinesRaw = diffLinesRaw;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.default = void 0;\nvar _diffSequences = _interopRequireDefault(require('diff-sequences'));\nvar _cleanupSemantic = require('./cleanupSemantic');\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {default: obj};\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst diffStrings = (a, b) => {\n const isCommon = (aIndex, bIndex) => a[aIndex] === b[bIndex];\n let aIndex = 0;\n let bIndex = 0;\n const diffs = [];\n const foundSubsequence = (nCommon, aCommon, bCommon) => {\n if (aIndex !== aCommon) {\n diffs.push(\n new _cleanupSemantic.Diff(\n _cleanupSemantic.DIFF_DELETE,\n a.slice(aIndex, aCommon)\n )\n );\n }\n if (bIndex !== bCommon) {\n diffs.push(\n new _cleanupSemantic.Diff(\n _cleanupSemantic.DIFF_INSERT,\n b.slice(bIndex, bCommon)\n )\n );\n }\n aIndex = aCommon + nCommon; // number of characters compared in a\n bIndex = bCommon + nCommon; // number of characters compared in b\n diffs.push(\n new _cleanupSemantic.Diff(\n _cleanupSemantic.DIFF_EQUAL,\n b.slice(bCommon, bIndex)\n )\n );\n };\n (0, _diffSequences.default)(a.length, b.length, isCommon, foundSubsequence);\n\n // After the last common subsequence, push remaining change items.\n if (aIndex !== a.length) {\n diffs.push(\n new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, a.slice(aIndex))\n );\n }\n if (bIndex !== b.length) {\n diffs.push(\n new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, b.slice(bIndex))\n );\n }\n return diffs;\n};\nvar _default = diffStrings;\nexports.default = _default;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.default = void 0;\nvar _cleanupSemantic = require('./cleanupSemantic');\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Given change op and array of diffs, return concatenated string:\n// * include common strings\n// * include change strings which have argument op with changeColor\n// * exclude change strings which have opposite op\nconst concatenateRelevantDiffs = (op, diffs, changeColor) =>\n diffs.reduce(\n (reduced, diff) =>\n reduced +\n (diff[0] === _cleanupSemantic.DIFF_EQUAL\n ? diff[1]\n : diff[0] === op && diff[1].length !== 0 // empty if change is newline\n ? changeColor(diff[1])\n : ''),\n ''\n );\n\n// Encapsulate change lines until either a common newline or the end.\nclass ChangeBuffer {\n op;\n line; // incomplete line\n lines; // complete lines\n changeColor;\n constructor(op, changeColor) {\n this.op = op;\n this.line = [];\n this.lines = [];\n this.changeColor = changeColor;\n }\n pushSubstring(substring) {\n this.pushDiff(new _cleanupSemantic.Diff(this.op, substring));\n }\n pushLine() {\n // Assume call only if line has at least one diff,\n // therefore an empty line must have a diff which has an empty string.\n\n // If line has multiple diffs, then assume it has a common diff,\n // therefore change diffs have change color;\n // otherwise then it has line color only.\n this.lines.push(\n this.line.length !== 1\n ? new _cleanupSemantic.Diff(\n this.op,\n concatenateRelevantDiffs(this.op, this.line, this.changeColor)\n )\n : this.line[0][0] === this.op\n ? this.line[0] // can use instance\n : new _cleanupSemantic.Diff(this.op, this.line[0][1]) // was common diff\n );\n\n this.line.length = 0;\n }\n isLineEmpty() {\n return this.line.length === 0;\n }\n\n // Minor input to buffer.\n pushDiff(diff) {\n this.line.push(diff);\n }\n\n // Main input to buffer.\n align(diff) {\n const string = diff[1];\n if (string.includes('\\n')) {\n const substrings = string.split('\\n');\n const iLast = substrings.length - 1;\n substrings.forEach((substring, i) => {\n if (i < iLast) {\n // The first substring completes the current change line.\n // A middle substring is a change line.\n this.pushSubstring(substring);\n this.pushLine();\n } else if (substring.length !== 0) {\n // The last substring starts a change line, if it is not empty.\n // Important: This non-empty condition also automatically omits\n // the newline appended to the end of expected and received strings.\n this.pushSubstring(substring);\n }\n });\n } else {\n // Append non-multiline string to current change line.\n this.pushDiff(diff);\n }\n }\n\n // Output from buffer.\n moveLinesTo(lines) {\n if (!this.isLineEmpty()) {\n this.pushLine();\n }\n lines.push(...this.lines);\n this.lines.length = 0;\n }\n}\n\n// Encapsulate common and change lines.\nclass CommonBuffer {\n deleteBuffer;\n insertBuffer;\n lines;\n constructor(deleteBuffer, insertBuffer) {\n this.deleteBuffer = deleteBuffer;\n this.insertBuffer = insertBuffer;\n this.lines = [];\n }\n pushDiffCommonLine(diff) {\n this.lines.push(diff);\n }\n pushDiffChangeLines(diff) {\n const isDiffEmpty = diff[1].length === 0;\n\n // An empty diff string is redundant, unless a change line is empty.\n if (!isDiffEmpty || this.deleteBuffer.isLineEmpty()) {\n this.deleteBuffer.pushDiff(diff);\n }\n if (!isDiffEmpty || this.insertBuffer.isLineEmpty()) {\n this.insertBuffer.pushDiff(diff);\n }\n }\n flushChangeLines() {\n this.deleteBuffer.moveLinesTo(this.lines);\n this.insertBuffer.moveLinesTo(this.lines);\n }\n\n // Input to buffer.\n align(diff) {\n const op = diff[0];\n const string = diff[1];\n if (string.includes('\\n')) {\n const substrings = string.split('\\n');\n const iLast = substrings.length - 1;\n substrings.forEach((substring, i) => {\n if (i === 0) {\n const subdiff = new _cleanupSemantic.Diff(op, substring);\n if (\n this.deleteBuffer.isLineEmpty() &&\n this.insertBuffer.isLineEmpty()\n ) {\n // If both current change lines are empty,\n // then the first substring is a common line.\n this.flushChangeLines();\n this.pushDiffCommonLine(subdiff);\n } else {\n // If either current change line is non-empty,\n // then the first substring completes the change lines.\n this.pushDiffChangeLines(subdiff);\n this.flushChangeLines();\n }\n } else if (i < iLast) {\n // A middle substring is a common line.\n this.pushDiffCommonLine(new _cleanupSemantic.Diff(op, substring));\n } else if (substring.length !== 0) {\n // The last substring starts a change line, if it is not empty.\n // Important: This non-empty condition also automatically omits\n // the newline appended to the end of expected and received strings.\n this.pushDiffChangeLines(new _cleanupSemantic.Diff(op, substring));\n }\n });\n } else {\n // Append non-multiline string to current change lines.\n // Important: It cannot be at the end following empty change lines,\n // because newline appended to the end of expected and received strings.\n this.pushDiffChangeLines(diff);\n }\n }\n\n // Output from buffer.\n getLines() {\n this.flushChangeLines();\n return this.lines;\n }\n}\n\n// Given diffs from expected and received strings,\n// return new array of diffs split or joined into lines.\n//\n// To correctly align a change line at the end, the algorithm:\n// * assumes that a newline was appended to the strings\n// * omits the last newline from the output array\n//\n// Assume the function is not called:\n// * if either expected or received is empty string\n// * if neither expected nor received is multiline string\nconst getAlignedDiffs = (diffs, changeColor) => {\n const deleteBuffer = new ChangeBuffer(\n _cleanupSemantic.DIFF_DELETE,\n changeColor\n );\n const insertBuffer = new ChangeBuffer(\n _cleanupSemantic.DIFF_INSERT,\n changeColor\n );\n const commonBuffer = new CommonBuffer(deleteBuffer, insertBuffer);\n diffs.forEach(diff => {\n switch (diff[0]) {\n case _cleanupSemantic.DIFF_DELETE:\n deleteBuffer.align(diff);\n break;\n case _cleanupSemantic.DIFF_INSERT:\n insertBuffer.align(diff);\n break;\n default:\n commonBuffer.align(diff);\n }\n });\n return commonBuffer.getLines();\n};\nvar _default = getAlignedDiffs;\nexports.default = _default;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.diffStringsUnified = exports.diffStringsRaw = void 0;\nvar _cleanupSemantic = require('./cleanupSemantic');\nvar _diffLines = require('./diffLines');\nvar _diffStrings = _interopRequireDefault(require('./diffStrings'));\nvar _getAlignedDiffs = _interopRequireDefault(require('./getAlignedDiffs'));\nvar _normalizeDiffOptions = require('./normalizeDiffOptions');\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {default: obj};\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst hasCommonDiff = (diffs, isMultiline) => {\n if (isMultiline) {\n // Important: Ignore common newline that was appended to multiline strings!\n const iLast = diffs.length - 1;\n return diffs.some(\n (diff, i) =>\n diff[0] === _cleanupSemantic.DIFF_EQUAL &&\n (i !== iLast || diff[1] !== '\\n')\n );\n }\n return diffs.some(diff => diff[0] === _cleanupSemantic.DIFF_EQUAL);\n};\n\n// Compare two strings character-by-character.\n// Format as comparison lines in which changed substrings have inverse colors.\nconst diffStringsUnified = (a, b, options) => {\n if (a !== b && a.length !== 0 && b.length !== 0) {\n const isMultiline = a.includes('\\n') || b.includes('\\n');\n\n // getAlignedDiffs assumes that a newline was appended to the strings.\n const diffs = diffStringsRaw(\n isMultiline ? `${a}\\n` : a,\n isMultiline ? `${b}\\n` : b,\n true // cleanupSemantic\n );\n\n if (hasCommonDiff(diffs, isMultiline)) {\n const optionsNormalized = (0, _normalizeDiffOptions.normalizeDiffOptions)(\n options\n );\n const lines = (0, _getAlignedDiffs.default)(\n diffs,\n optionsNormalized.changeColor\n );\n return (0, _diffLines.printDiffLines)(lines, optionsNormalized);\n }\n }\n\n // Fall back to line-by-line diff.\n return (0, _diffLines.diffLinesUnified)(\n a.split('\\n'),\n b.split('\\n'),\n options\n );\n};\n\n// Compare two strings character-by-character.\n// Optionally clean up small common substrings, also known as chaff.\nexports.diffStringsUnified = diffStringsUnified;\nconst diffStringsRaw = (a, b, cleanup) => {\n const diffs = (0, _diffStrings.default)(a, b);\n if (cleanup) {\n (0, _cleanupSemantic.cleanupSemantic)(diffs); // impure function\n }\n\n return diffs;\n};\nexports.diffStringsRaw = diffStringsRaw;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nObject.defineProperty(exports, 'DIFF_DELETE', {\n enumerable: true,\n get: function () {\n return _cleanupSemantic.DIFF_DELETE;\n }\n});\nObject.defineProperty(exports, 'DIFF_EQUAL', {\n enumerable: true,\n get: function () {\n return _cleanupSemantic.DIFF_EQUAL;\n }\n});\nObject.defineProperty(exports, 'DIFF_INSERT', {\n enumerable: true,\n get: function () {\n return _cleanupSemantic.DIFF_INSERT;\n }\n});\nObject.defineProperty(exports, 'Diff', {\n enumerable: true,\n get: function () {\n return _cleanupSemantic.Diff;\n }\n});\nexports.diff = diff;\nObject.defineProperty(exports, 'diffLinesRaw', {\n enumerable: true,\n get: function () {\n return _diffLines.diffLinesRaw;\n }\n});\nObject.defineProperty(exports, 'diffLinesUnified', {\n enumerable: true,\n get: function () {\n return _diffLines.diffLinesUnified;\n }\n});\nObject.defineProperty(exports, 'diffLinesUnified2', {\n enumerable: true,\n get: function () {\n return _diffLines.diffLinesUnified2;\n }\n});\nObject.defineProperty(exports, 'diffStringsRaw', {\n enumerable: true,\n get: function () {\n return _printDiffs.diffStringsRaw;\n }\n});\nObject.defineProperty(exports, 'diffStringsUnified', {\n enumerable: true,\n get: function () {\n return _printDiffs.diffStringsUnified;\n }\n});\nvar _chalk = _interopRequireDefault(require('chalk'));\nvar _jestGetType = require('jest-get-type');\nvar _prettyFormat = require('pretty-format');\nvar _cleanupSemantic = require('./cleanupSemantic');\nvar _constants = require('./constants');\nvar _diffLines = require('./diffLines');\nvar _normalizeDiffOptions = require('./normalizeDiffOptions');\nvar _printDiffs = require('./printDiffs');\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {default: obj};\n}\nvar Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nconst getCommonMessage = (message, options) => {\n const {commonColor} = (0, _normalizeDiffOptions.normalizeDiffOptions)(\n options\n );\n return commonColor(message);\n};\nconst {\n AsymmetricMatcher,\n DOMCollection,\n DOMElement,\n Immutable,\n ReactElement,\n ReactTestComponent\n} = _prettyFormat.plugins;\nconst PLUGINS = [\n ReactTestComponent,\n ReactElement,\n DOMElement,\n DOMCollection,\n Immutable,\n AsymmetricMatcher\n];\nconst FORMAT_OPTIONS = {\n plugins: PLUGINS\n};\nconst FALLBACK_FORMAT_OPTIONS = {\n callToJSON: false,\n maxDepth: 10,\n plugins: PLUGINS\n};\n\n// Generate a string that will highlight the difference between two values\n// with green and red. (similar to how github does code diffing)\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction diff(a, b, options) {\n if (Object.is(a, b)) {\n return getCommonMessage(_constants.NO_DIFF_MESSAGE, options);\n }\n const aType = (0, _jestGetType.getType)(a);\n let expectedType = aType;\n let omitDifference = false;\n if (aType === 'object' && typeof a.asymmetricMatch === 'function') {\n if (a.$$typeof !== Symbol.for('jest.asymmetricMatcher')) {\n // Do not know expected type of user-defined asymmetric matcher.\n return null;\n }\n if (typeof a.getExpectedType !== 'function') {\n // For example, expect.anything() matches either null or undefined\n return null;\n }\n expectedType = a.getExpectedType();\n // Primitive types boolean and number omit difference below.\n // For example, omit difference for expect.stringMatching(regexp)\n omitDifference = expectedType === 'string';\n }\n if (expectedType !== (0, _jestGetType.getType)(b)) {\n return (\n ' Comparing two different types of values.' +\n ` Expected ${_chalk.default.green(expectedType)} but ` +\n `received ${_chalk.default.red((0, _jestGetType.getType)(b))}.`\n );\n }\n if (omitDifference) {\n return null;\n }\n switch (aType) {\n case 'string':\n return (0, _diffLines.diffLinesUnified)(\n a.split('\\n'),\n b.split('\\n'),\n options\n );\n case 'boolean':\n case 'number':\n return comparePrimitive(a, b, options);\n case 'map':\n return compareObjects(sortMap(a), sortMap(b), options);\n case 'set':\n return compareObjects(sortSet(a), sortSet(b), options);\n default:\n return compareObjects(a, b, options);\n }\n}\nfunction comparePrimitive(a, b, options) {\n const aFormat = (0, _prettyFormat.format)(a, FORMAT_OPTIONS);\n const bFormat = (0, _prettyFormat.format)(b, FORMAT_OPTIONS);\n return aFormat === bFormat\n ? getCommonMessage(_constants.NO_DIFF_MESSAGE, options)\n : (0, _diffLines.diffLinesUnified)(\n aFormat.split('\\n'),\n bFormat.split('\\n'),\n options\n );\n}\nfunction sortMap(map) {\n return new Map(Array.from(map.entries()).sort());\n}\nfunction sortSet(set) {\n return new Set(Array.from(set.values()).sort());\n}\nfunction compareObjects(a, b, options) {\n let difference;\n let hasThrown = false;\n try {\n const formatOptions = getFormatOptions(FORMAT_OPTIONS, options);\n difference = getObjectsDifference(a, b, formatOptions, options);\n } catch {\n hasThrown = true;\n }\n const noDiffMessage = getCommonMessage(_constants.NO_DIFF_MESSAGE, options);\n // If the comparison yields no results, compare again but this time\n // without calling `toJSON`. It's also possible that toJSON might throw.\n if (difference === undefined || difference === noDiffMessage) {\n const formatOptions = getFormatOptions(FALLBACK_FORMAT_OPTIONS, options);\n difference = getObjectsDifference(a, b, formatOptions, options);\n if (difference !== noDiffMessage && !hasThrown) {\n difference = `${getCommonMessage(\n _constants.SIMILAR_MESSAGE,\n options\n )}\\n\\n${difference}`;\n }\n }\n return difference;\n}\nfunction getFormatOptions(formatOptions, options) {\n const {compareKeys} = (0, _normalizeDiffOptions.normalizeDiffOptions)(\n options\n );\n return {\n ...formatOptions,\n compareKeys\n };\n}\nfunction getObjectsDifference(a, b, formatOptions, options) {\n const formatOptionsZeroIndent = {\n ...formatOptions,\n indent: 0\n };\n const aCompare = (0, _prettyFormat.format)(a, formatOptionsZeroIndent);\n const bCompare = (0, _prettyFormat.format)(b, formatOptionsZeroIndent);\n if (aCompare === bCompare) {\n return getCommonMessage(_constants.NO_DIFF_MESSAGE, options);\n } else {\n const aDisplay = (0, _prettyFormat.format)(a, formatOptions);\n const bDisplay = (0, _prettyFormat.format)(b, formatOptions);\n return (0, _diffLines.diffLinesUnified2)(\n aDisplay.split('\\n'),\n bDisplay.split('\\n'),\n aCompare.split('\\n'),\n bCompare.split('\\n'),\n options\n );\n }\n}\n", "export {SaazFront} from './front/SaazFront'\r\nexport {default as SaazBack} from './back/SaazBack'\r\nexport {FrontIDBAdapter} from './front/FrontIdbAdapter'\r\nexport {FrontMemoryAdapter} from './front/FrontMemoryAdapter'\r\nexport type {\r\n FrontStorageAdapter,\r\n BackStorageAdapter,\r\n SaazBackInterface,\r\n Schema,\r\n} from './types'\r\nexport {BackMemoryAdapter} from './back/BackMemoryAdapter'\r\nexport {current} from './rogue'\r\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n", "import freeGlobal from './_freeGlobal.js';\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\nexport default root;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n", "import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\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 nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\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 nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n", "import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\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 != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or 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 a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\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 == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\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\nexport default isArray;\n", "import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n", "import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\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 != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n", "import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\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 if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n", "import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n", "import coreJsData from './_coreJsData.js';\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/**\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\nexport default isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\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\nexport default toSource;\n", "import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\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/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\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/** 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/**\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) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\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\nexport default getValue;\n", "import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\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\nexport default getNative;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n", "import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n", "import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n", "/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee 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 `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n", "import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\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\nexport default eq;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n", "import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\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\nexport default isLength;\n", "import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\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\nexport default isArrayLike;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n", "import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\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 */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n", "import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n", "import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\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\nexport default baseUnary;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n", "import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n", "import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n", "import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n", "import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n", "import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n", "import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n", "import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n", "import nativeCreate from './_nativeCreate.js';\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 this.size = 0;\n}\n\nexport default hashClear;\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 var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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\nexport default hashGet;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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\nexport default hashHas;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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 this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n", "import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\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 == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\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\nexport default Hash;\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 this.size = 0;\n}\n\nexport default listCacheClear;\n", "import eq from './eq.js';\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\nexport default assocIndexOf;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\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 --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n", "import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheGet;\n", "import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheHas;\n", "import assocIndexOf from './_assocIndexOf.js';\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 ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n", "import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\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 == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\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\nexport default ListCache;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n", "import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\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.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\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\nexport default isKeyable;\n", "import isKeyable from './_isKeyable.js';\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\nexport default getMapData;\n", "import getMapData from './_getMapData.js';\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 var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n", "import getMapData from './_getMapData.js';\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\nexport default mapCacheGet;\n", "import getMapData from './_getMapData.js';\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\nexport default mapCacheHas;\n", "import getMapData from './_getMapData.js';\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 var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n", "import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\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 == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\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\nexport default MapCache;\n", "import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n", "import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n", "import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n", "import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n", "import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n", "import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n", "import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n", "import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\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\nexport default arrayPush;\n", "import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n", "import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\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/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n", "import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\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 stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\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 stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n", "import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n", "import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n", "import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n", "import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n", "import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n", "import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n", "import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n", "import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n", "import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n", "import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n", "import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n", "/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n", "import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n", "import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n", "import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n", "import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n", "import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n", "import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n", "import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n", "import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n", "/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n", "import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n", "import baseSet from './_baseSet.js';\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nexport default set;\n", "import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n", "/**\n * @license\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"es\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.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 */\nexport { default as add } from './add.js';\nexport { default as after } from './after.js';\nexport { default as ary } from './ary.js';\nexport { default as assign } from './assign.js';\nexport { default as assignIn } from './assignIn.js';\nexport { default as assignInWith } from './assignInWith.js';\nexport { default as assignWith } from './assignWith.js';\nexport { default as at } from './at.js';\nexport { default as attempt } from './attempt.js';\nexport { default as before } from './before.js';\nexport { default as bind } from './bind.js';\nexport { default as bindAll } from './bindAll.js';\nexport { default as bindKey } from './bindKey.js';\nexport { default as camelCase } from './camelCase.js';\nexport { default as capitalize } from './capitalize.js';\nexport { default as castArray } from './castArray.js';\nexport { default as ceil } from './ceil.js';\nexport { default as chain } from './chain.js';\nexport { default as chunk } from './chunk.js';\nexport { default as clamp } from './clamp.js';\nexport { default as clone } from './clone.js';\nexport { default as cloneDeep } from './cloneDeep.js';\nexport { default as cloneDeepWith } from './cloneDeepWith.js';\nexport { default as cloneWith } from './cloneWith.js';\nexport { default as commit } from './commit.js';\nexport { default as compact } from './compact.js';\nexport { default as concat } from './concat.js';\nexport { default as cond } from './cond.js';\nexport { default as conforms } from './conforms.js';\nexport { default as conformsTo } from './conformsTo.js';\nexport { default as constant } from './constant.js';\nexport { default as countBy } from './countBy.js';\nexport { default as create } from './create.js';\nexport { default as curry } from './curry.js';\nexport { default as curryRight } from './curryRight.js';\nexport { default as debounce } from './debounce.js';\nexport { default as deburr } from './deburr.js';\nexport { default as defaultTo } from './defaultTo.js';\nexport { default as defaults } from './defaults.js';\nexport { default as defaultsDeep } from './defaultsDeep.js';\nexport { default as defer } from './defer.js';\nexport { default as delay } from './delay.js';\nexport { default as difference } from './difference.js';\nexport { default as differenceBy } from './differenceBy.js';\nexport { default as differenceWith } from './differenceWith.js';\nexport { default as divide } from './divide.js';\nexport { default as drop } from './drop.js';\nexport { default as dropRight } from './dropRight.js';\nexport { default as dropRightWhile } from './dropRightWhile.js';\nexport { default as dropWhile } from './dropWhile.js';\nexport { default as each } from './each.js';\nexport { default as eachRight } from './eachRight.js';\nexport { default as endsWith } from './endsWith.js';\nexport { default as entries } from './entries.js';\nexport { default as entriesIn } from './entriesIn.js';\nexport { default as eq } from './eq.js';\nexport { default as escape } from './escape.js';\nexport { default as escapeRegExp } from './escapeRegExp.js';\nexport { default as every } from './every.js';\nexport { default as extend } from './extend.js';\nexport { default as extendWith } from './extendWith.js';\nexport { default as fill } from './fill.js';\nexport { default as filter } from './filter.js';\nexport { default as find } from './find.js';\nexport { default as findIndex } from './findIndex.js';\nexport { default as findKey } from './findKey.js';\nexport { default as findLast } from './findLast.js';\nexport { default as findLastIndex } from './findLastIndex.js';\nexport { default as findLastKey } from './findLastKey.js';\nexport { default as first } from './first.js';\nexport { default as flatMap } from './flatMap.js';\nexport { default as flatMapDeep } from './flatMapDeep.js';\nexport { default as flatMapDepth } from './flatMapDepth.js';\nexport { default as flatten } from './flatten.js';\nexport { default as flattenDeep } from './flattenDeep.js';\nexport { default as flattenDepth } from './flattenDepth.js';\nexport { default as flip } from './flip.js';\nexport { default as floor } from './floor.js';\nexport { default as flow } from './flow.js';\nexport { default as flowRight } from './flowRight.js';\nexport { default as forEach } from './forEach.js';\nexport { default as forEachRight } from './forEachRight.js';\nexport { default as forIn } from './forIn.js';\nexport { default as forInRight } from './forInRight.js';\nexport { default as forOwn } from './forOwn.js';\nexport { default as forOwnRight } from './forOwnRight.js';\nexport { default as fromPairs } from './fromPairs.js';\nexport { default as functions } from './functions.js';\nexport { default as functionsIn } from './functionsIn.js';\nexport { default as get } from './get.js';\nexport { default as groupBy } from './groupBy.js';\nexport { default as gt } from './gt.js';\nexport { default as gte } from './gte.js';\nexport { default as has } from './has.js';\nexport { default as hasIn } from './hasIn.js';\nexport { default as head } from './head.js';\nexport { default as identity } from './identity.js';\nexport { default as inRange } from './inRange.js';\nexport { default as includes } from './includes.js';\nexport { default as indexOf } from './indexOf.js';\nexport { default as initial } from './initial.js';\nexport { default as intersection } from './intersection.js';\nexport { default as intersectionBy } from './intersectionBy.js';\nexport { default as intersectionWith } from './intersectionWith.js';\nexport { default as invert } from './invert.js';\nexport { default as invertBy } from './invertBy.js';\nexport { default as invoke } from './invoke.js';\nexport { default as invokeMap } from './invokeMap.js';\nexport { default as isArguments } from './isArguments.js';\nexport { default as isArray } from './isArray.js';\nexport { default as isArrayBuffer } from './isArrayBuffer.js';\nexport { default as isArrayLike } from './isArrayLike.js';\nexport { default as isArrayLikeObject } from './isArrayLikeObject.js';\nexport { default as isBoolean } from './isBoolean.js';\nexport { default as isBuffer } from './isBuffer.js';\nexport { default as isDate } from './isDate.js';\nexport { default as isElement } from './isElement.js';\nexport { default as isEmpty } from './isEmpty.js';\nexport { default as isEqual } from './isEqual.js';\nexport { default as isEqualWith } from './isEqualWith.js';\nexport { default as isError } from './isError.js';\nexport { default as isFinite } from './isFinite.js';\nexport { default as isFunction } from './isFunction.js';\nexport { default as isInteger } from './isInteger.js';\nexport { default as isLength } from './isLength.js';\nexport { default as isMap } from './isMap.js';\nexport { default as isMatch } from './isMatch.js';\nexport { default as isMatchWith } from './isMatchWith.js';\nexport { default as isNaN } from './isNaN.js';\nexport { default as isNative } from './isNative.js';\nexport { default as isNil } from './isNil.js';\nexport { default as isNull } from './isNull.js';\nexport { default as isNumber } from './isNumber.js';\nexport { default as isObject } from './isObject.js';\nexport { default as isObjectLike } from './isObjectLike.js';\nexport { default as isPlainObject } from './isPlainObject.js';\nexport { default as isRegExp } from './isRegExp.js';\nexport { default as isSafeInteger } from './isSafeInteger.js';\nexport { default as isSet } from './isSet.js';\nexport { default as isString } from './isString.js';\nexport { default as isSymbol } from './isSymbol.js';\nexport { default as isTypedArray } from './isTypedArray.js';\nexport { default as isUndefined } from './isUndefined.js';\nexport { default as isWeakMap } from './isWeakMap.js';\nexport { default as isWeakSet } from './isWeakSet.js';\nexport { default as iteratee } from './iteratee.js';\nexport { default as join } from './join.js';\nexport { default as kebabCase } from './kebabCase.js';\nexport { default as keyBy } from './keyBy.js';\nexport { default as keys } from './keys.js';\nexport { default as keysIn } from './keysIn.js';\nexport { default as last } from './last.js';\nexport { default as lastIndexOf } from './lastIndexOf.js';\nexport { default as lodash } from './wrapperLodash.js';\nexport { default as lowerCase } from './lowerCase.js';\nexport { default as lowerFirst } from './lowerFirst.js';\nexport { default as lt } from './lt.js';\nexport { default as lte } from './lte.js';\nexport { default as map } from './map.js';\nexport { default as mapKeys } from './mapKeys.js';\nexport { default as mapValues } from './mapValues.js';\nexport { default as matches } from './matches.js';\nexport { default as matchesProperty } from './matchesProperty.js';\nexport { default as max } from './max.js';\nexport { default as maxBy } from './maxBy.js';\nexport { default as mean } from './mean.js';\nexport { default as meanBy } from './meanBy.js';\nexport { default as memoize } from './memoize.js';\nexport { default as merge } from './merge.js';\nexport { default as mergeWith } from './mergeWith.js';\nexport { default as method } from './method.js';\nexport { default as methodOf } from './methodOf.js';\nexport { default as min } from './min.js';\nexport { default as minBy } from './minBy.js';\nexport { default as mixin } from './mixin.js';\nexport { default as multiply } from './multiply.js';\nexport { default as negate } from './negate.js';\nexport { default as next } from './next.js';\nexport { default as noop } from './noop.js';\nexport { default as now } from './now.js';\nexport { default as nth } from './nth.js';\nexport { default as nthArg } from './nthArg.js';\nexport { default as omit } from './omit.js';\nexport { default as omitBy } from './omitBy.js';\nexport { default as once } from './once.js';\nexport { default as orderBy } from './orderBy.js';\nexport { default as over } from './over.js';\nexport { default as overArgs } from './overArgs.js';\nexport { default as overEvery } from './overEvery.js';\nexport { default as overSome } from './overSome.js';\nexport { default as pad } from './pad.js';\nexport { default as padEnd } from './padEnd.js';\nexport { default as padStart } from './padStart.js';\nexport { default as parseInt } from './parseInt.js';\nexport { default as partial } from './partial.js';\nexport { default as partialRight } from './partialRight.js';\nexport { default as partition } from './partition.js';\nexport { default as pick } from './pick.js';\nexport { default as pickBy } from './pickBy.js';\nexport { default as plant } from './plant.js';\nexport { default as property } from './property.js';\nexport { default as propertyOf } from './propertyOf.js';\nexport { default as pull } from './pull.js';\nexport { default as pullAll } from './pullAll.js';\nexport { default as pullAllBy } from './pullAllBy.js';\nexport { default as pullAllWith } from './pullAllWith.js';\nexport { default as pullAt } from './pullAt.js';\nexport { default as random } from './random.js';\nexport { default as range } from './range.js';\nexport { default as rangeRight } from './rangeRight.js';\nexport { default as rearg } from './rearg.js';\nexport { default as reduce } from './reduce.js';\nexport { default as reduceRight } from './reduceRight.js';\nexport { default as reject } from './reject.js';\nexport { default as remove } from './remove.js';\nexport { default as repeat } from './repeat.js';\nexport { default as replace } from './replace.js';\nexport { default as rest } from './rest.js';\nexport { default as result } from './result.js';\nexport { default as reverse } from './reverse.js';\nexport { default as round } from './round.js';\nexport { default as sample } from './sample.js';\nexport { default as sampleSize } from './sampleSize.js';\nexport { default as set } from './set.js';\nexport { default as setWith } from './setWith.js';\nexport { default as shuffle } from './shuffle.js';\nexport { default as size } from './size.js';\nexport { default as slice } from './slice.js';\nexport { default as snakeCase } from './snakeCase.js';\nexport { default as some } from './some.js';\nexport { default as sortBy } from './sortBy.js';\nexport { default as sortedIndex } from './sortedIndex.js';\nexport { default as sortedIndexBy } from './sortedIndexBy.js';\nexport { default as sortedIndexOf } from './sortedIndexOf.js';\nexport { default as sortedLastIndex } from './sortedLastIndex.js';\nexport { default as sortedLastIndexBy } from './sortedLastIndexBy.js';\nexport { default as sortedLastIndexOf } from './sortedLastIndexOf.js';\nexport { default as sortedUniq } from './sortedUniq.js';\nexport { default as sortedUniqBy } from './sortedUniqBy.js';\nexport { default as split } from './split.js';\nexport { default as spread } from './spread.js';\nexport { default as startCase } from './startCase.js';\nexport { default as startsWith } from './startsWith.js';\nexport { default as stubArray } from './stubArray.js';\nexport { default as stubFalse } from './stubFalse.js';\nexport { default as stubObject } from './stubObject.js';\nexport { default as stubString } from './stubString.js';\nexport { default as stubTrue } from './stubTrue.js';\nexport { default as subtract } from './subtract.js';\nexport { default as sum } from './sum.js';\nexport { default as sumBy } from './sumBy.js';\nexport { default as tail } from './tail.js';\nexport { default as take } from './take.js';\nexport { default as takeRight } from './takeRight.js';\nexport { default as takeRightWhile } from './takeRightWhile.js';\nexport { default as takeWhile } from './takeWhile.js';\nexport { default as tap } from './tap.js';\nexport { default as template } from './template.js';\nexport { default as templateSettings } from './templateSettings.js';\nexport { default as throttle } from './throttle.js';\nexport { default as thru } from './thru.js';\nexport { default as times } from './times.js';\nexport { default as toArray } from './toArray.js';\nexport { default as toFinite } from './toFinite.js';\nexport { default as toInteger } from './toInteger.js';\nexport { default as toIterator } from './toIterator.js';\nexport { default as toJSON } from './toJSON.js';\nexport { default as toLength } from './toLength.js';\nexport { default as toLower } from './toLower.js';\nexport { default as toNumber } from './toNumber.js';\nexport { default as toPairs } from './toPairs.js';\nexport { default as toPairsIn } from './toPairsIn.js';\nexport { default as toPath } from './toPath.js';\nexport { default as toPlainObject } from './toPlainObject.js';\nexport { default as toSafeInteger } from './toSafeInteger.js';\nexport { default as toString } from './toString.js';\nexport { default as toUpper } from './toUpper.js';\nexport { default as transform } from './transform.js';\nexport { default as trim } from './trim.js';\nexport { default as trimEnd } from './trimEnd.js';\nexport { default as trimStart } from './trimStart.js';\nexport { default as truncate } from './truncate.js';\nexport { default as unary } from './unary.js';\nexport { default as unescape } from './unescape.js';\nexport { default as union } from './union.js';\nexport { default as unionBy } from './unionBy.js';\nexport { default as unionWith } from './unionWith.js';\nexport { default as uniq } from './uniq.js';\nexport { default as uniqBy } from './uniqBy.js';\nexport { default as uniqWith } from './uniqWith.js';\nexport { default as uniqueId } from './uniqueId.js';\nexport { default as unset } from './unset.js';\nexport { default as unzip } from './unzip.js';\nexport { default as unzipWith } from './unzipWith.js';\nexport { default as update } from './update.js';\nexport { default as updateWith } from './updateWith.js';\nexport { default as upperCase } from './upperCase.js';\nexport { default as upperFirst } from './upperFirst.js';\nexport { default as value } from './value.js';\nexport { default as valueOf } from './valueOf.js';\nexport { default as values } from './values.js';\nexport { default as valuesIn } from './valuesIn.js';\nexport { default as without } from './without.js';\nexport { default as words } from './words.js';\nexport { default as wrap } from './wrap.js';\nexport { default as wrapperAt } from './wrapperAt.js';\nexport { default as wrapperChain } from './wrapperChain.js';\nexport { default as wrapperCommit } from './commit.js';\nexport { default as wrapperLodash } from './wrapperLodash.js';\nexport { default as wrapperNext } from './next.js';\nexport { default as wrapperPlant } from './plant.js';\nexport { default as wrapperReverse } from './wrapperReverse.js';\nexport { default as wrapperToIterator } from './toIterator.js';\nexport { default as wrapperValue } from './wrapperValue.js';\nexport { default as xor } from './xor.js';\nexport { default as xorBy } from './xorBy.js';\nexport { default as xorWith } from './xorWith.js';\nexport { default as zip } from './zip.js';\nexport { default as zipObject } from './zipObject.js';\nexport { default as zipObjectDeep } from './zipObjectDeep.js';\nexport { default as zipWith } from './zipWith.js';\nexport { default } from './lodash.default.js';\n", "import {isPlainObject} from 'lodash-es'\r\nimport type {$IntentionalAny} from '@encorejs/utils/types'\r\n\r\n/**\r\n * Like JSON.stringify, but sorts the keys of objects so the stringified value\r\n * remains stable if the keys are set in different order.\r\n *\r\n * Credit: https://github.com/tannerlinsley/react-query/blob/1896ca27abf46d14df7c6f463d98eb285b8d9492/src/core/utils.ts#L301\r\n */\r\nexport default function stableJsonStringify(value: $IntentionalAny): string {\r\n return JSON.stringify(deepSortValue(value))\r\n}\r\n\r\n// alias\r\nexport const stableValueHash = stableJsonStringify\r\n\r\nfunction deepSortValue<S extends $IntentionalAny>(val: S): S {\r\n return isPlainObject(val)\r\n ? Object.keys(val as $IntentionalAny)\r\n .sort()\r\n .reduce((result, key) => {\r\n result[key] = deepSortValue((val as $IntentionalAny)[key])\r\n return result\r\n }, {} as any)\r\n : Array.isArray(val)\r\n ? val.map(deepSortValue)\r\n : val\r\n}\r\n", "import type {$IntentionalAny, GeneratorRecordings} from '../types'\r\nimport {cloneDeep} from 'lodash-es'\r\nimport type {SerializableValue} from '../types'\r\nimport type {ValidGenerators} from '../types'\r\nimport {stableValueHash} from '@encorejs/utils/stableJsonStringify'\r\n\r\nexport function createGeneratorsSpy<Generators extends ValidGenerators>(\r\n generators: ValidGenerators,\r\n prevREcordings: GeneratorRecordings = {},\r\n playbackOnly: boolean = false,\r\n): [spy: Generators, recordings: GeneratorRecordings] {\r\n const recordings: GeneratorRecordings = cloneDeep(prevREcordings)\r\n const calls: Record<string, number> = {}\r\n\r\n const spy: Generators = Object.fromEntries(\r\n Object.entries(generators).map(([fnName, fn]) => {\r\n if (typeof fn !== 'function') {\r\n throw new Error(`Generator method \"${fnName}\" is not a function`)\r\n }\r\n if (typeof fnName !== 'string') {\r\n throw new Error('key is not a string')\r\n }\r\n\r\n const spyFn = (...args: SerializableValue[]) => {\r\n const key = stableValueHash([fnName, args])\r\n // Monotonic per-(fnName,args) call counter: 0 on first call, then 1, 2\u2026\r\n // (the previous `if (!calls[key])` test was stuck at 0 because 0 is\r\n // falsy, so every same-args call collided on recording slot 0).\r\n const callIndex = calls[key] ?? 0\r\n calls[key] = callIndex + 1\r\n\r\n if (\r\n playbackOnly &&\r\n (!Array.isArray(recordings[key]) ||\r\n recordings[key]!.length < callIndex)\r\n ) {\r\n throw new Error(\r\n `Generator method \"${fnName}\" was called with arguments that were not recorded: ${JSON.stringify(\r\n args,\r\n )}`,\r\n )\r\n }\r\n\r\n if (!recordings[key]) {\r\n recordings[key] = []\r\n }\r\n\r\n if (recordings[key]!.length > callIndex) {\r\n return recordings[key]![callIndex]!\r\n } else {\r\n const ret = fn(args[0])\r\n recordings[key]![callIndex] = ret\r\n return ret\r\n }\r\n }\r\n\r\n return [fnName, spyFn] as const\r\n }),\r\n ) as $IntentionalAny\r\n\r\n return [spy, recordings]\r\n}\r\n", "const errors = {\n\t0: \"Illegal state\",\n\t1: \"Immer drafts cannot have computed properties\",\n\t2: \"This object has been frozen and should not be mutated\",\n\t3(data: any) {\n\t\treturn (\n\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\tdata\n\t\t)\n\t},\n\t4: \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t5: \"Immer forbids circular references\",\n\t6: \"The first or second argument to `produce` must be a function\",\n\t7: \"The third argument to `produce` must be a function or undefined\",\n\t8: \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t9: \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t10: \"The given draft is already finalized\",\n\t11: \"Object.defineProperty() cannot be used on an Immer draft\",\n\t12: \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t13: \"Immer only supports deleting array indices\",\n\t14: \"Immer only supports setting array indices and the 'length' property\",\n\t15(path: string) {\n\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t},\n\t16: 'Sets cannot have \"replace\" patches.',\n\t17(op: string) {\n\t\treturn \"Unsupported patch operation: \" + op\n\t},\n\t18(plugin: string) {\n\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t},\n\t20: \"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",\n\t21(thing: string) {\n\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t},\n\t22(thing: string) {\n\t\treturn `'current' expects a draft, got: ${thing}`\n\t},\n\t23(thing: string) {\n\t\treturn `'original' expects a draft, got: ${thing}`\n\t},\n\t24: \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n} as const\n\nexport function die(error: keyof typeof errors, ...args: any[]): never {\n\tif (__DEV__) {\n\t\tconst e = errors[error]\n\t\tconst msg = !e\n\t\t\t? \"unknown error nr: \" + error\n\t\t\t: typeof e === \"function\"\n\t\t\t? e.apply(null, args as any)\n\t\t\t: e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}${\n\t\t\targs.length ? \" \" + args.map(s => `'${s}'`).join(\",\") : \"\"\n\t\t}. Find the full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n", "import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\thasSet,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\thasMap,\n\tArchtype,\n\tdie\n} from \"../internal\"\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = Object.getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(23, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/*#__PURE__*/\nexport const ownKeys: (target: AnyObject) => PropertyKey[] =\n\ttypeof Reflect !== \"undefined\" && Reflect.ownKeys\n\t\t? Reflect.ownKeys\n\t\t: typeof Object.getOwnPropertySymbols !== \"undefined\"\n\t\t? obj =>\n\t\t\t\tObject.getOwnPropertyNames(obj).concat(\n\t\t\t\t\tObject.getOwnPropertySymbols(obj) as any\n\t\t\t\t)\n\t\t: /* istanbul ignore next */ Object.getOwnPropertyNames\n\nexport const getOwnPropertyDescriptors =\n\tObject.getOwnPropertyDescriptors ||\n\tfunction getOwnPropertyDescriptors(target: any) {\n\t\t// Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274\n\t\tconst res: any = {}\n\t\townKeys(target).forEach(key => {\n\t\t\tres[key] = Object.getOwnPropertyDescriptor(target, key)\n\t\t})\n\t\treturn res\n\t}\n\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void,\n\tenumerableOnly?: boolean\n): void\nexport function each(obj: any, iter: any, enumerableOnly = false) {\n\tif (getArchtype(obj) === Archtype.Object) {\n\t\t;(enumerableOnly ? Object.keys : ownKeys)(obj).forEach(key => {\n\t\t\tif (!enumerableOnly || typeof key !== \"symbol\") iter(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): Archtype {\n\t/* istanbul ignore next */\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_ > 3\n\t\t\t? state.type_ - 4 // cause Object and Array map back from 4 and 5\n\t\t\t: (state.type_ as any) // others are the same\n\t\t: Array.isArray(thing)\n\t\t? Archtype.Array\n\t\t: isMap(thing)\n\t\t? Archtype.Map\n\t\t: isSet(thing)\n\t\t? Archtype.Set\n\t\t: Archtype.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === Archtype.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === Archtype.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === Archtype.Map) thing.set(propOrOldValue, value)\n\telse if (t === Archtype.Set) {\n\t\tthing.delete(propOrOldValue)\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn hasMap && target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn hasSet && target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any) {\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\tconst descriptors = getOwnPropertyDescriptors(base)\n\tdelete descriptors[DRAFT_STATE as any]\n\tlet keys = ownKeys(descriptors)\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key: any = keys[i]\n\t\tconst desc = descriptors[key]\n\t\tif (desc.writable === false) {\n\t\t\tdesc.writable = true\n\t\t\tdesc.configurable = true\n\t\t}\n\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t// with libraries that trap values, like mobx or vue\n\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\tif (desc.get || desc.set)\n\t\t\tdescriptors[key] = {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\tvalue: base[key]\n\t\t\t}\n\t}\n\treturn Object.create(Object.getPrototypeOf(base), descriptors)\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep) each(obj, (key, value) => freeze(value, true), true)\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\tif (obj == null || typeof obj !== \"object\") return true\n\t// See #600, IE dies on non-objects in Object.isFrozen\n\treturn Object.isFrozen(obj)\n}\n", "import {\n\tImmerState,\n\tPatch,\n\tImmerScope,\n\tDrafted,\n\tAnyObject,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tProxyType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\trootState: ImmerState,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: Patch[]): T\n\t}\n\tES5?: {\n\t\twillFinalizeES5_(scope: ImmerScope, result: any, isReplaced: boolean): void\n\t\tcreateES5Proxy_<T>(\n\t\t\tbase: T,\n\t\t\tparent?: ImmerState\n\t\t): Drafted<T, ES5ObjectState | ES5ArrayState>\n\t\thasChanges_(state: ES5ArrayState | ES5ObjectState): boolean\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(18, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n\n/** ES5 Plugin */\n\ninterface ES5BaseState extends ImmerBaseState {\n\tassigned_: {[key: string]: any}\n\tparent_?: ImmerState\n\trevoked_: boolean\n}\n\nexport interface ES5ObjectState extends ES5BaseState {\n\ttype_: ProxyType.ES5Object\n\tdraft_: Drafted<AnyObject, ES5ObjectState>\n\tbase_: AnyObject\n\tcopy_: AnyObject | null\n}\n\nexport interface ES5ArrayState extends ES5BaseState {\n\ttype_: ProxyType.ES5Array\n\tdraft_: Drafted<AnyObject, ES5ArrayState>\n\tbase_: any\n\tcopy_: any\n}\n\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ProxyType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ProxyType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n", "import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tProxyType,\n\tgetPlugin\n} from \"../internal\"\nimport {die} from \"../utils/errors\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\tif (__DEV__ && !currentScope) die(0)\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (\n\t\tstate.type_ === ProxyType.ProxyObject ||\n\t\tstate.type_ === ProxyType.ProxyArray\n\t)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n", "import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tProxyType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen,\n\tshallowCopy\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (!scope.immer_.useProxies_)\n\t\tgetPlugin(\"ES5\").willFinalizeES5_(scope, result, isReplaced)\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE],\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(\n\t\t\tvalue,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path),\n\t\t\ttrue // See #590, don't recurse into non-enumarable of non drafted objects\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result =\n\t\t\t// For ES5, create a good copy from the draft first, with added keys and without deleted keys.\n\t\t\tstate.type_ === ProxyType.ES5Object || state.type_ === ProxyType.ES5Array\n\t\t\t\t? (state.copy_ = shallowCopy(state.draft_))\n\t\t\t\t: state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// Although the original test case doesn't seem valid anyway, so if this in the way we can turn the next line\n\t\t// back to each(result, ....)\n\t\teach(\n\t\t\tstate.type_ === ProxyType.Set ? new Set(result) : result,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath\n) {\n\tif (__DEV__ && childValue === targetObject) die(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ProxyType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\tif (!parentState || !parentState.scope_.parent_)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\tif (scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n", "import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tProxyType\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ProxyType.ProxyObject\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ProxyType.ProxyArray\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ProxyType.ProxyArray : (ProxyType.ProxyObject as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(\n\t\t\t\tstate.scope_.immer_,\n\t\t\t\tvalue,\n\t\t\t\tstate\n\t\t\t))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\tstate.copy_![prop] === value &&\n\t\t\t// special case: NaN\n\t\t\ttypeof value !== \"number\" &&\n\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t(value !== undefined || prop in state.copy_)\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\t// @ts-ignore\n\t\tif (state.copy_) delete state.copy_[prop]\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ProxyType.ProxyArray || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn Object.getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (__DEV__ && isNaN(parseInt(prop as any))) die(13)\n\treturn objectTraps.deleteProperty!.call(this, state[0], prop)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (__DEV__ && prop !== \"length\" && isNaN(parseInt(prop as any))) die(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t // prototype, we should invoke it with the draft as context!\n\t\t\t desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = Object.getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = Object.getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {base_: any; copy_: any}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(state.base_)\n\t}\n}\n", "import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\thasProxies,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport class Immer implements ProducersFns {\n\tuseProxies_: boolean = hasProxies\n\n\tautoFreeze_: boolean = true\n\n\tconstructor(config?: {useProxies?: boolean; autoFreeze?: boolean}) {\n\t\tif (typeof config?.useProxies === \"boolean\")\n\t\t\tthis.setUseProxies(config!.useProxies)\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(this, base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tif (typeof Promise !== \"undefined\" && result instanceof Promise) {\n\t\t\t\treturn result.then(\n\t\t\t\t\tresult => {\n\t\t\t\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\t\t\t\treturn processResult(result, scope)\n\t\t\t\t\t},\n\t\t\t\t\terror => {\n\t\t\t\t\t\trevokeScope(scope)\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === NOTHING) return undefined\n\t\t\tif (result === undefined) result = base\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\treturn result\n\t\t} else die(21, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (\n\t\targ1: any,\n\t\targ2?: any,\n\t\targ3?: any\n\t): any => {\n\t\tif (typeof arg1 === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => arg1(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst nextState = this.produce(arg1, arg2, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [nextState, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(this, base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (__DEV__) {\n\t\t\tif (!state || !state.isManual_) die(9)\n\t\t\tif (state.finalized_) die(10)\n\t\t}\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to use the ES2015 `Proxy` class when creating drafts, which is\n\t * always faster than using ES5 proxies.\n\t *\n\t * By default, feature detection is used, so calling this is rarely necessary.\n\t */\n\tsetUseProxies(value: boolean) {\n\t\tif (value && !hasProxies) {\n\t\t\tdie(20)\n\t\t}\n\t\tthis.useProxies_ = value\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches) as any\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches.slice(i + 1))\n\t\t) as any\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\timmer: Immer,\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: immer.useProxies_\n\t\t? createProxyProxy(value, parent)\n\t\t: getPlugin(\"ES5\").createES5Proxy_(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n", "import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tget,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tArchtype,\n\tgetArchtype,\n\tgetPlugin\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(22, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tconst archType = getArchtype(value)\n\tif (state) {\n\t\tif (\n\t\t\t!state.modified_ &&\n\t\t\t(state.type_ < 4 || !getPlugin(\"ES5\").hasChanges_(state as any))\n\t\t)\n\t\t\treturn state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = copyHelper(value, archType)\n\t\tstate.finalized_ = false\n\t} else {\n\t\tcopy = copyHelper(value, archType)\n\t}\n\n\teach(copy, (key, childValue) => {\n\t\tif (state && get(state.base_, key) === childValue) return // no need to copy or search in something that didn't change\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\t// In the future, we might consider freezing here, based on the current settings\n\treturn archType === Archtype.Set ? new Set(copy) : copy\n}\n\nfunction copyHelper(value: any, archType: number): any {\n\t// creates a shallow copy, even if it is a map or set\n\tswitch (archType) {\n\t\tcase Archtype.Map:\n\t\t\treturn new Map(value)\n\t\tcase Archtype.Set:\n\t\t\t// Set will be cloned as array temporarily, so that we can replace individual items\n\t\t\treturn Array.from(value)\n\t}\n\treturn shallowCopy(value)\n}\n", "import {\n\tImmerState,\n\tDrafted,\n\tES5ArrayState,\n\tES5ObjectState,\n\teach,\n\thas,\n\tisDraft,\n\tlatest,\n\tDRAFT_STATE,\n\tis,\n\tloadPlugin,\n\tImmerScope,\n\tProxyType,\n\tgetCurrentScope,\n\tdie,\n\tmarkChanged,\n\tobjectTraps,\n\townKeys,\n\tgetOwnPropertyDescriptors\n} from \"../internal\"\n\ntype ES5State = ES5ArrayState | ES5ObjectState\n\nexport function enableES5() {\n\tfunction willFinalizeES5_(\n\t\tscope: ImmerScope,\n\t\tresult: any,\n\t\tisReplaced: boolean\n\t) {\n\t\tif (!isReplaced) {\n\t\t\tif (scope.patches_) {\n\t\t\t\tmarkChangesRecursively(scope.drafts_![0])\n\t\t\t}\n\t\t\t// This is faster when we don't care about which attributes changed.\n\t\t\tmarkChangesSweep(scope.drafts_)\n\t\t}\n\t\t// When a child draft is returned, look for changes.\n\t\telse if (\n\t\t\tisDraft(result) &&\n\t\t\t(result[DRAFT_STATE] as ES5State).scope_ === scope\n\t\t) {\n\t\t\tmarkChangesSweep(scope.drafts_)\n\t\t}\n\t}\n\n\tfunction createES5Draft(isArray: boolean, base: any) {\n\t\tif (isArray) {\n\t\t\tconst draft = new Array(base.length)\n\t\t\tfor (let i = 0; i < base.length; i++)\n\t\t\t\tObject.defineProperty(draft, \"\" + i, proxyProperty(i, true))\n\t\t\treturn draft\n\t\t} else {\n\t\t\tconst descriptors = getOwnPropertyDescriptors(base)\n\t\t\tdelete descriptors[DRAFT_STATE as any]\n\t\t\tconst keys = ownKeys(descriptors)\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst key: any = keys[i]\n\t\t\t\tdescriptors[key] = proxyProperty(\n\t\t\t\t\tkey,\n\t\t\t\t\tisArray || !!descriptors[key].enumerable\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn Object.create(Object.getPrototypeOf(base), descriptors)\n\t\t}\n\t}\n\n\tfunction createES5Proxy_<T>(\n\t\tbase: T,\n\t\tparent?: ImmerState\n\t): Drafted<T, ES5ObjectState | ES5ArrayState> {\n\t\tconst isArray = Array.isArray(base)\n\t\tconst draft = createES5Draft(isArray, base)\n\n\t\tconst state: ES5ObjectState | ES5ArrayState = {\n\t\t\ttype_: isArray ? ProxyType.ES5Array : (ProxyType.ES5Object as any),\n\t\t\tscope_: parent ? parent.scope_ : getCurrentScope(),\n\t\t\tmodified_: false,\n\t\t\tfinalized_: false,\n\t\t\tassigned_: {},\n\t\t\tparent_: parent,\n\t\t\t// base is the object we are drafting\n\t\t\tbase_: base,\n\t\t\t// draft is the draft object itself, that traps all reads and reads from either the base (if unmodified) or copy (if modified)\n\t\t\tdraft_: draft,\n\t\t\tcopy_: null,\n\t\t\trevoked_: false,\n\t\t\tisManual_: false\n\t\t}\n\n\t\tObject.defineProperty(draft, DRAFT_STATE, {\n\t\t\tvalue: state,\n\t\t\t// enumerable: false <- the default\n\t\t\twritable: true\n\t\t})\n\t\treturn draft\n\t}\n\n\t// property descriptors are recycled to make sure we don't create a get and set closure per property,\n\t// but share them all instead\n\tconst descriptors: {[prop: string]: PropertyDescriptor} = {}\n\n\tfunction proxyProperty(\n\t\tprop: string | number,\n\t\tenumerable: boolean\n\t): PropertyDescriptor {\n\t\tlet desc = descriptors[prop]\n\t\tif (desc) {\n\t\t\tdesc.enumerable = enumerable\n\t\t} else {\n\t\t\tdescriptors[prop] = desc = {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable,\n\t\t\t\tget(this: any) {\n\t\t\t\t\tconst state = this[DRAFT_STATE]\n\t\t\t\t\tif (__DEV__) assertUnrevoked(state)\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\treturn objectTraps.get(state, prop)\n\t\t\t\t},\n\t\t\t\tset(this: any, value) {\n\t\t\t\t\tconst state = this[DRAFT_STATE]\n\t\t\t\t\tif (__DEV__) assertUnrevoked(state)\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tobjectTraps.set(state, prop, value)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn desc\n\t}\n\n\t// This looks expensive, but only proxies are visited, and only objects without known changes are scanned.\n\tfunction markChangesSweep(drafts: Drafted<any, ImmerState>[]) {\n\t\t// The natural order of drafts in the `scope` array is based on when they\n\t\t// were accessed. By processing drafts in reverse natural order, we have a\n\t\t// better chance of processing leaf nodes first. When a leaf node is known to\n\t\t// have changed, we can avoid any traversal of its ancestor nodes.\n\t\tfor (let i = drafts.length - 1; i >= 0; i--) {\n\t\t\tconst state: ES5State = drafts[i][DRAFT_STATE]\n\t\t\tif (!state.modified_) {\n\t\t\t\tswitch (state.type_) {\n\t\t\t\t\tcase ProxyType.ES5Array:\n\t\t\t\t\t\tif (hasArrayChanges(state)) markChanged(state)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase ProxyType.ES5Object:\n\t\t\t\t\t\tif (hasObjectChanges(state)) markChanged(state)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction markChangesRecursively(object: any) {\n\t\tif (!object || typeof object !== \"object\") return\n\t\tconst state: ES5State | undefined = object[DRAFT_STATE]\n\t\tif (!state) return\n\t\tconst {base_, draft_, assigned_, type_} = state\n\t\tif (type_ === ProxyType.ES5Object) {\n\t\t\t// Look for added keys.\n\t\t\t// probably there is a faster way to detect changes, as sweep + recurse seems to do some\n\t\t\t// unnecessary work.\n\t\t\t// also: probably we can store the information we detect here, to speed up tree finalization!\n\t\t\teach(draft_, key => {\n\t\t\t\tif ((key as any) === DRAFT_STATE) return\n\t\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\t\tif ((base_ as any)[key] === undefined && !has(base_, key)) {\n\t\t\t\t\tassigned_[key] = true\n\t\t\t\t\tmarkChanged(state)\n\t\t\t\t} else if (!assigned_[key]) {\n\t\t\t\t\t// Only untouched properties trigger recursion.\n\t\t\t\t\tmarkChangesRecursively(draft_[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\t// Look for removed keys.\n\t\t\teach(base_, key => {\n\t\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\t\tif (draft_[key] === undefined && !has(draft_, key)) {\n\t\t\t\t\tassigned_[key] = false\n\t\t\t\t\tmarkChanged(state)\n\t\t\t\t}\n\t\t\t})\n\t\t} else if (type_ === ProxyType.ES5Array) {\n\t\t\tif (hasArrayChanges(state as ES5ArrayState)) {\n\t\t\t\tmarkChanged(state)\n\t\t\t\tassigned_.length = true\n\t\t\t}\n\n\t\t\tif (draft_.length < base_.length) {\n\t\t\t\tfor (let i = draft_.length; i < base_.length; i++) assigned_[i] = false\n\t\t\t} else {\n\t\t\t\tfor (let i = base_.length; i < draft_.length; i++) assigned_[i] = true\n\t\t\t}\n\n\t\t\t// Minimum count is enough, the other parts has been processed.\n\t\t\tconst min = Math.min(draft_.length, base_.length)\n\n\t\t\tfor (let i = 0; i < min; i++) {\n\t\t\t\t// Only untouched indices trigger recursion.\n\t\t\t\tif (assigned_[i] === undefined) markChangesRecursively(draft_[i])\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasObjectChanges(state: ES5ObjectState) {\n\t\tconst {base_, draft_} = state\n\n\t\t// Search for added keys and changed keys. Start at the back, because\n\t\t// non-numeric keys are ordered by time of definition on the object.\n\t\tconst keys = ownKeys(draft_)\n\t\tfor (let i = keys.length - 1; i >= 0; i--) {\n\t\t\tconst key: any = keys[i]\n\t\t\tif (key === DRAFT_STATE) continue\n\t\t\tconst baseValue = base_[key]\n\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\tif (baseValue === undefined && !has(base_, key)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// Once a base key is deleted, future changes go undetected, because its\n\t\t\t// descriptor is erased. This branch detects any missed changes.\n\t\t\telse {\n\t\t\t\tconst value = draft_[key]\n\t\t\t\tconst state: ImmerState = value && value[DRAFT_STATE]\n\t\t\t\tif (state ? state.base_ !== baseValue : !is(value, baseValue)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// At this point, no keys were added or changed.\n\t\t// Compare key count to determine if keys were deleted.\n\t\tconst baseIsDraft = !!base_[DRAFT_STATE as any]\n\t\treturn keys.length !== ownKeys(base_).length + (baseIsDraft ? 0 : 1) // + 1 to correct for DRAFT_STATE\n\t}\n\n\tfunction hasArrayChanges(state: ES5ArrayState) {\n\t\tconst {draft_} = state\n\t\tif (draft_.length !== state.base_.length) return true\n\t\t// See #116\n\t\t// If we first shorten the length, our array interceptors will be removed.\n\t\t// If after that new items are added, result in the same original length,\n\t\t// those last items will have no intercepting property.\n\t\t// So if there is no own descriptor on the last position, we know that items were removed and added\n\t\t// N.B.: splice, unshift, etc only shift values around, but not prop descriptors, so we only have to check\n\t\t// the last one\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(\n\t\t\tdraft_,\n\t\t\tdraft_.length - 1\n\t\t)\n\t\t// descriptor can be null, but only for newly created sparse arrays, eg. new Array(10)\n\t\tif (descriptor && !descriptor.get) return true\n\t\t// For all other cases, we don't have to compare, as they would have been picked up by the index setters\n\t\treturn false\n\t}\n\n\tfunction hasChanges_(state: ES5State) {\n\t\treturn state.type_ === ProxyType.ES5Object\n\t\t\t? hasObjectChanges(state)\n\t\t\t: hasArrayChanges(state)\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"ES5\", {\n\t\tcreateES5Proxy_,\n\t\twillFinalizeES5_,\n\t\thasChanges_\n\t})\n}\n", "import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tES5ArrayState,\n\tProxyArrayState,\n\tMapState,\n\tES5ObjectState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tProxyType,\n\tArchtype,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ProxyType.ProxyObject:\n\t\t\tcase ProxyType.ES5Object:\n\t\t\tcase ProxyType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ProxyType.ES5Array:\n\t\t\tcase ProxyType.ProxyArray:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ProxyType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ES5ArrayState | ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tif (base_.length < copy_.length) {\n\t\t\tinversePatches.push({\n\t\t\t\top: REPLACE,\n\t\t\t\tpath: basePath.concat([\"length\"]),\n\t\t\t\tvalue: base_.length\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ES5ObjectState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\trootState: ImmerState,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: rootState.base_\n\t\t})\n\t}\n\n\tfunction applyPatches_<T>(draft: T, patches: Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tconst p = \"\" + path[i]\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === Archtype.Object || parentType === Archtype.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(24)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\") die(24)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(15, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase Archtype.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase Archtype.Set:\n\t\t\t\t\t\t\tdie(16)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase Archtype.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase Archtype.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase Archtype.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase Archtype.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase Archtype.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase Archtype.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(17, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue<T>(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(Object.getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded<T>(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n", "// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\titeratorSymbol,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tProxyType,\n\tdie,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\t/* istanbul ignore next */\n\tvar extendStatics = function(d: any, b: any): any {\n\t\textendStatics =\n\t\t\tObject.setPrototypeOf ||\n\t\t\t({__proto__: []} instanceof Array &&\n\t\t\t\tfunction(d, b) {\n\t\t\t\t\td.__proto__ = b\n\t\t\t\t}) ||\n\t\t\tfunction(d, b) {\n\t\t\t\tfor (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]\n\t\t\t}\n\t\treturn extendStatics(d, b)\n\t}\n\n\t// Ugly hack to resolve #502 and inherit built in Map / Set\n\tfunction __extends(d: any, b: any): any {\n\t\textendStatics(d, b)\n\t\tfunction __(this: any): any {\n\t\t\tthis.constructor = d\n\t\t}\n\t\td.prototype =\n\t\t\t// @ts-ignore\n\t\t\t((__.prototype = b.prototype), new __())\n\t}\n\n\tconst DraftMap = (function(_super) {\n\t\t__extends(DraftMap, _super)\n\t\t// Create class manually, cause #502\n\t\tfunction DraftMap(this: any, target: AnyMap, parent?: ImmerState): any {\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ProxyType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t} as MapState\n\t\t\treturn this\n\t\t}\n\t\tconst p = DraftMap.prototype\n\n\t\tObject.defineProperty(p, \"size\", {\n\t\t\tget: function() {\n\t\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t\t}\n\t\t\t// enumerable: false,\n\t\t\t// configurable: true\n\t\t})\n\n\t\tp.has = function(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tp.set = function(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tp.delete = function(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tstate.assigned_!.set(key, false)\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tp.clear = function() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tp.forEach = function(\n\t\t\tcb: (value: any, key: any, self: any) => void,\n\t\t\tthisArg?: any\n\t\t) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tp.get = function(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(state.scope_.immer_, value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tp.keys = function(): IterableIterator<any> {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tp.values = function(): IterableIterator<any> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[iteratorSymbol]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tp.entries = function(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[iteratorSymbol]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tp[iteratorSymbol] = function() {\n\t\t\treturn this.entries()\n\t\t}\n\n\t\treturn DraftMap\n\t})(Map)\n\n\tfunction proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tconst DraftSet = (function(_super) {\n\t\t__extends(DraftSet, _super)\n\t\t// Create class manually, cause #502\n\t\tfunction DraftSet(this: any, target: AnySet, parent?: ImmerState) {\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ProxyType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t} as SetState\n\t\t\treturn this\n\t\t}\n\t\tconst p = DraftSet.prototype\n\n\t\tObject.defineProperty(p, \"size\", {\n\t\t\tget: function() {\n\t\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t\t}\n\t\t\t// enumerable: true,\n\t\t})\n\n\t\tp.has = function(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tp.add = function(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tp.delete = function(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tp.clear = function() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tp.values = function(): IterableIterator<any> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tp.entries = function entries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tp.keys = function(): IterableIterator<any> {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tp[iteratorSymbol] = function() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tp.forEach = function forEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\n\t\treturn DraftSet\n\t})(Set)\n\n\tfunction proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(state.scope_.immer_, value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n", "import {enableES5} from \"./es5\"\nimport {enableMapSet} from \"./mapset\"\nimport {enablePatches} from \"./patches\"\n\nexport function enableAllPlugins() {\n\tenableES5()\n\tenableMapSet()\n\tenablePatches()\n}\n", "import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\nexport default produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to use the ES2015 `Proxy` class when creating drafts, which is\n * always faster than using ES5 proxies.\n *\n * By default, feature detection is used, so calling this is rarely necessary.\n */\nexport const setUseProxies = immer.setUseProxies.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enableES5} from \"./plugins/es5\"\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\nexport {enableAllPlugins} from \"./plugins/all\"\n", "// Should be no imports here!\n\n// Some things that should be evaluated before all else...\n\n// We only want to know if non-polyfilled symbols are available\nconst hasSymbol =\n\ttypeof Symbol !== \"undefined\" && typeof Symbol(\"x\") === \"symbol\"\nexport const hasMap = typeof Map !== \"undefined\"\nexport const hasSet = typeof Set !== \"undefined\"\nexport const hasProxies =\n\ttypeof Proxy !== \"undefined\" &&\n\ttypeof Proxy.revocable !== \"undefined\" &&\n\ttypeof Reflect !== \"undefined\"\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: Nothing = hasSymbol\n\t? Symbol.for(\"immer-nothing\")\n\t: ({[\"immer-nothing\"]: true} as any)\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = hasSymbol\n\t? Symbol.for(\"immer-draftable\")\n\t: (\"__$immer_draftable\" as any)\n\nexport const DRAFT_STATE: unique symbol = hasSymbol\n\t? Symbol.for(\"immer-state\")\n\t: (\"__$immer_state\" as any)\n\n// Even a polyfilled Symbol might provide Symbol.iterator\nexport const iteratorSymbol: typeof Symbol.iterator =\n\t(typeof Symbol != \"undefined\" && Symbol.iterator) || (\"@@iterator\" as any)\n\n/** Use a class type for `nothing` so its type is unique */\nexport class Nothing {\n\t// This lets us do `Exclude<T, Nothing>`\n\t// @ts-ignore\n\tprivate _!: unique symbol\n}\n", "import deepEqual from 'fast-deep-equal'\r\n\r\nexport default deepEqual\r\n", "/**\r\n * Memoizes a unary function using a simple weakmap. The argument to the unary\r\n * function must be WeakCache-able, which means it must be an object and not a plain\r\n * number/string/boolean/etc.\r\n *\r\n * @example\r\n * ```ts\r\n * const fn = memoizeFn((el) => getBoundingClientRect(el))\r\n *\r\n * const b1 = fn(el)\r\n * const b2 = fn(el)\r\n * assert.equal(b1, b2)\r\n * ```\r\n */\r\nexport default function memoizeFn<K extends {}, V>(\r\n producer: (k: K) => V,\r\n): (k: K) => V {\r\n const cache = new WeakMap<K, V>()\r\n\r\n return (k: K): V => {\r\n if (!cache.has(k)) {\r\n cache.set(k, producer(k))\r\n }\r\n return cache.get(k)!\r\n }\r\n}\r\n", "import deepEqual from '@encorejs/utils/deepEqual'\r\nimport type {$IntentionalAny} from './types'\r\nimport * as immer from 'immer'\r\nimport setDeep from 'lodash-es/set'\r\nimport memoizeFn from '@encorejs/utils/memoizeFn'\r\n\r\ntype BranchName = 'base' | string\r\n\r\ntype Branch = {\r\n $boxedValue?: any\r\n $mapProps?: {\r\n [key in string]?: Cell\r\n }\r\n}\r\n\r\nexport type Cell = {\r\n $type: [type: 'map' | 'boxed' | 'deleted', branchName: BranchName]\r\n $branches?: {\r\n [asOf in BranchName]?: Branch\r\n }\r\n}\r\n\r\ntype CellToJSON<T extends Cell> = T extends {\r\n $type: ['boxed', any]\r\n}\r\n ? CellBoxedToJSON<T>\r\n : T extends {$type: ['map']}\r\n ? MapCellToJSON<T>\r\n : never\r\n\r\ntype CellBoxedToJSON<T extends Cell> = T['$branches'] extends {\r\n [key: string]: {$boxedValue: infer V}\r\n}\r\n ? V\r\n : never\r\n\r\ntype MapCellToJSON<T extends Cell> = T['$branches'] extends {\r\n [key: string]: {$mapProps: infer V}\r\n}\r\n ? {\r\n [Key in keyof V]: V[Key] extends Cell ? CellToJSON<V[Key]> : never\r\n }\r\n : never\r\n\r\nexport type Root = Cell\r\n\r\nconst NOT_DEFINED = {}\r\n\r\ntype Transaction = {clock: number; ops: Ops}\r\n\r\nexport type Ops = Op[]\r\n\r\ntype Op = ChnangeTypeOp | SetBoxedValue\r\n\r\ntype ChnangeTypeOp = {\r\n type: 'ChangeType'\r\n path: Array<[branchName: BranchName, mapProp: string]>\r\n value: Cell['$type']\r\n}\r\n\r\ntype SetBoxedValue = {\r\n type: 'SetBoxedValue'\r\n path: Array<[branchName: BranchName, mapProp: string]>\r\n branchName: BranchName\r\n value: any\r\n}\r\n\r\ntype PathSegment = [branchName: BranchName, mapProp: string]\r\n\r\ntype Path = PathSegment[]\r\n\r\nfunction isCell(v: unknown): v is Cell {\r\n if (typeof v !== 'object' || v === null) return false\r\n const $type = (v as any).$type\r\n if (!Array.isArray($type)) return false\r\n if ($type.length !== 2 && $type.length !== 1) return false\r\n if (typeof $type[0] !== 'string') return false\r\n const [type, branchName] = $type\r\n if (type === 'map' || type === 'boxed' || type === 'deleted') return true\r\n return false\r\n}\r\n\r\nexport function makeDraft<S extends Cell>(\r\n base: any,\r\n): [draft: any, finish: () => [cell: Cell, forwardOps: Ops, backwardOps: Ops]] {\r\n if (!isPlainObject(base)) {\r\n throw Error(`Base must be a plain object`)\r\n }\r\n base = isCell(base)\r\n ? base\r\n : ({\r\n $type: ['map', 'base'],\r\n $branches: {base: {$mapProps: base}},\r\n } as Cell)\r\n\r\n const immerDraft = immer.createDraft(base)\r\n const state: State = {\r\n imo: immerDraft,\r\n }\r\n\r\n const draft = new Proxy(state, traps)\r\n const finish = (): [cell: Cell, forwardOps: Ops, backwardOps: Ops] => {\r\n const cell = immer.finishDraft(immerDraft)\r\n const forwardOps = compare(base, cell)\r\n const backwardOps = compare(cell, base)\r\n\r\n return [cell, forwardOps, backwardOps]\r\n }\r\n\r\n return [draft, finish]\r\n}\r\n\r\nexport function change(\r\n base: any,\r\n fn: (draft: any) => void,\r\n): [cell: any, ops: Ops, backwardOps: Ops] {\r\n const [draft, finish] = makeDraft(base)\r\n fn(draft)\r\n return finish()\r\n}\r\n\r\nexport function fromOps(base: any, ops: Ops): [cell: any] {\r\n if (!isPlainObject(base)) {\r\n throw Error(`Base must be a plain object`)\r\n }\r\n base = isCell(base)\r\n ? base\r\n : ({\r\n $type: ['map', 'base'],\r\n $branches: {base: {$mapProps: base}},\r\n } as Cell)\r\n\r\n const immerDraft = immer.createDraft(base)\r\n const state: State = {\r\n imo: immerDraft,\r\n }\r\n\r\n for (const op of ops) {\r\n const flatPath = op.path\r\n .map(([branchName, mapProp]) => [\r\n '$branches',\r\n branchName,\r\n '$mapProps',\r\n mapProp,\r\n ])\r\n .flat()\r\n if (op.type === 'ChangeType') {\r\n const [type, branchName] = op.value\r\n setDeep(immerDraft, [...flatPath, '$type'], [type, branchName])\r\n } else if (op.type === 'SetBoxedValue') {\r\n setDeep(\r\n immerDraft,\r\n [...flatPath, '$branches', op.branchName, '$boxedValue'],\r\n op.value,\r\n )\r\n } else {\r\n throw Error(`Unrecognized op type: ${(op as $IntentionalAny).type}`)\r\n }\r\n }\r\n\r\n return [immer.finishDraft(immerDraft)]\r\n}\r\n\r\nfunction compare(before: Cell, after: Cell): Ops {\r\n const ops: Ops = []\r\n compareCell(before, after, [], ops)\r\n\r\n return ops\r\n}\r\n\r\nfunction compareCell(\r\n before: Cell | undefined,\r\n after: Cell,\r\n path: Path,\r\n ops: Ops,\r\n) {\r\n if (before === after) return\r\n\r\n if (!deepEqual(before?.$type, after.$type)) {\r\n const beforeType = before\r\n ? [before.$type[0], before.$type[1] ?? 'base']\r\n : null\r\n const afterType = [after.$type[0], after.$type[1] ?? 'base']\r\n if (!deepEqual(beforeType, afterType)) {\r\n ops.push({\r\n type: 'ChangeType',\r\n path,\r\n value: after.$type,\r\n })\r\n }\r\n }\r\n\r\n const [type, branchName] = [after.$type[0], after.$type[1] ?? 'base']\r\n const afterBranch = after.$branches?.[branchName]\r\n const beforeBranch = before?.$branches?.[branchName]\r\n if (afterBranch === beforeBranch) return\r\n if (!afterBranch) return\r\n\r\n if (type === 'deleted') return\r\n\r\n if (type === 'boxed') {\r\n if (afterBranch.$boxedValue !== beforeBranch?.$boxedValue) {\r\n ops.push({\r\n type: 'SetBoxedValue',\r\n path,\r\n branchName,\r\n value: afterBranch.$boxedValue,\r\n })\r\n }\r\n return\r\n }\r\n\r\n if (type === 'map') {\r\n const beforeMapProps = beforeBranch?.$mapProps ?? {}\r\n const afterMapProps = afterBranch.$mapProps ?? {}\r\n const afterKeys = Object.keys(afterMapProps)\r\n for (const prop of afterKeys) {\r\n compareCell(\r\n Object.hasOwn(beforeMapProps, prop) ? beforeMapProps[prop] : undefined,\r\n afterMapProps[prop]!,\r\n [...path, [branchName, prop]],\r\n ops,\r\n )\r\n }\r\n const beforeKeys = Object.keys(beforeMapProps)\r\n for (const prop of beforeKeys) {\r\n if (!Object.hasOwn(afterMapProps, prop)) {\r\n ops.push({\r\n type: 'ChangeType',\r\n path: [...path, [branchName, prop]],\r\n value: ['deleted', generateBranchName()],\r\n })\r\n }\r\n }\r\n return\r\n }\r\n\r\n throw Error(`Unrecognized type: ${type}`)\r\n}\r\n\r\ninterface State {\r\n imo: immer.Draft<Cell>\r\n parent?: State\r\n}\r\n\r\nlet _lastBranchName = 0\r\nconst generateBranchName = () => {\r\n _lastBranchName++\r\n return _lastBranchName.toString()\r\n}\r\n\r\nconst traps: ProxyHandler<State> = {\r\n get(state: State, prop) {\r\n if (prop === DRAFT_STATE) return state\r\n\r\n if (typeof prop !== 'string') return undefined\r\n\r\n const imo = state.imo\r\n const type = imo.$type[0]\r\n const branchName = imo.$type[1] ?? 'base'\r\n\r\n if (type === 'deleted')\r\n throw new Error(`This value is marked as deleted and cannot be accessed`)\r\n\r\n if (type === 'boxed')\r\n throw new Error(`Implement getting inside a boxed value`)\r\n\r\n if (type === 'map') {\r\n const mapProps = imo.$branches?.[branchName]?.$mapProps\r\n if (!mapProps) return undefined\r\n if (Object.hasOwn(mapProps, prop)) {\r\n const value = mapProps[prop]\r\n\r\n if (!isCell(value)) {\r\n throw Error(\r\n `mapProps[${prop}] is not an ahistoric cell. this is a bug.`,\r\n )\r\n }\r\n if (value.$type[0] === 'deleted') return undefined\r\n if (value.$type[0] === 'boxed') {\r\n const boxedValue =\r\n value.$branches?.[value.$type[1] ?? 'base']?.$boxedValue\r\n if (isPlainObject(boxedValue)) {\r\n throw Error(`Implement getting a mapProp that is a boxed object`)\r\n } else {\r\n return boxedValue\r\n }\r\n } else if (value.$type[0] === 'map') {\r\n const subState: State = {\r\n imo: value,\r\n parent: state,\r\n }\r\n return new Proxy(subState, traps)\r\n }\r\n } else {\r\n return undefined\r\n }\r\n }\r\n\r\n throw new Error(`Unrecognized type: ${type}`)\r\n },\r\n set(state: State, prop, _value: unknown): boolean {\r\n if (prop === DRAFT_STATE) throw Error(`Unallowed`)\r\n if (typeof prop !== 'string')\r\n throw Error(`Non-string props are not allowed`)\r\n\r\n const value = valueType(_value)\r\n\r\n const imo = state.imo\r\n const cellType = imo.$type[0]\r\n const branchName = imo.$type[1] ?? 'base'\r\n\r\n // setting self.a=value, when self is deleted\r\n if (cellType === 'deleted')\r\n throw new Error(`This value is marked as deleted and cannot be changed`)\r\n\r\n // setting self.a=value, when self is a boxed value\r\n if (cellType === 'boxed')\r\n throw new Error(`Implement setting inside a boxed value`)\r\n\r\n // setting self.a=value when self is a map\r\n if (cellType === 'map') {\r\n let branches = imo.$branches\r\n if (!branches) {\r\n branches = {}\r\n imo.$branches = branches\r\n }\r\n\r\n let branch = branches[branchName]\r\n if (!branch) {\r\n branch = {}\r\n branches[branchName] = branch\r\n }\r\n\r\n let mapProps = branch.$mapProps\r\n if (!mapProps) {\r\n mapProps = {}\r\n branch.$mapProps = mapProps\r\n }\r\n\r\n // setting self.a=value when self.a is defined\r\n if (Object.hasOwn(mapProps, prop)) {\r\n if (!isCell(mapProps[prop]))\r\n throw Error(\r\n `mapProps[${prop}] is not an ahistoric cell. this is a bug.`,\r\n )\r\n const currentPropCell = mapProps[prop]!\r\n\r\n // setting self.a={}\r\n if (value.type === 'map') {\r\n let currentBranch!: Branch\r\n // setting self.a={} when self.a is not a map\r\n\r\n if (currentPropCell.$type[0] !== 'map') {\r\n // we're switching from a non-map to a map, which means if a map was previously set, it was\r\n // already deleted/overridden to be a boxed value, and the current user hasn't _seen_ the previous\r\n // map yet. So we should generate a new branchName for the new map.\r\n const newBranchName = generateBranchName()\r\n currentPropCell.$type = ['map', newBranchName]\r\n currentPropCell.$branches ??= {}\r\n const newBranch: Branch = {$mapProps: {}}\r\n currentPropCell.$branches[newBranchName] = newBranch\r\n currentBranch = newBranch\r\n } else {\r\n currentPropCell.$branches ??= {}\r\n currentPropCell.$branches[currentPropCell.$type[1] ?? 'base'] ??= {}\r\n currentBranch =\r\n currentPropCell.$branches[currentPropCell.$type[1] ?? 'base']!\r\n }\r\n const subState: State = {\r\n imo: currentPropCell,\r\n parent: state,\r\n }\r\n const proxy = new Proxy(subState, traps)\r\n\r\n const existingProps = Object.keys(proxy)\r\n\r\n // let's delete existing props that are not in the new value\r\n for (const key of existingProps) {\r\n if (!Object.hasOwn(value.value, key)) {\r\n delete (proxy as $IntentionalAny)[key]\r\n }\r\n }\r\n\r\n for (const key of Object.keys(value.value)) {\r\n ;(proxy as $IntentionalAny)[key] = value.value[key]\r\n }\r\n\r\n return true\r\n } else if (value.type === 'boxed') {\r\n if (currentPropCell.$type[0] === 'boxed') {\r\n currentPropCell.$branches ??= {}\r\n const branches = currentPropCell.$branches!\r\n const branchName = currentPropCell.$type[1] ?? 'base'\r\n branches[branchName] ??= {}\r\n const branch = branches[branchName]!\r\n branch.$boxedValue = value.value\r\n return true\r\n } else {\r\n const branchName = generateBranchName()\r\n currentPropCell.$type = ['boxed', branchName]\r\n currentPropCell.$branches ??= {}\r\n const branches = currentPropCell.$branches!\r\n branches[branchName] ??= {}\r\n const branch = branches[branchName]!\r\n branch.$boxedValue = value.value\r\n return true\r\n }\r\n }\r\n\r\n throw new Error(`Unrecognized type: ${currentPropCell.$type[0]}`)\r\n } else {\r\n if (value.type === 'boxed') {\r\n mapProps[prop] = {\r\n $type: ['boxed', 'base'],\r\n $branches: {\r\n base: {\r\n $boxedValue: value.value,\r\n },\r\n },\r\n }\r\n return true\r\n } else if (value.type === 'map') {\r\n mapProps[prop] = {\r\n $type: ['map', 'base'],\r\n }\r\n const subState: State = {\r\n imo: mapProps[prop]!,\r\n parent: state,\r\n }\r\n const proxy = new Proxy(subState, traps)\r\n for (const [k, v] of Object.entries(value.value)) {\r\n ;(proxy as $IntentionalAny)[k] = v\r\n }\r\n return true\r\n }\r\n throw Error(`Unrecognized type: ${(value as $IntentionalAny).type}`)\r\n }\r\n }\r\n\r\n throw new Error(`Unrecognized type: ${cellType}`)\r\n },\r\n has(state: State, prop) {\r\n throw Error(`Implement has()`)\r\n },\r\n ownKeys(state: State) {\r\n const type = state.imo.$type[0]\r\n if (type === 'boxed') {\r\n const value =\r\n state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$boxedValue\r\n if (isPlainObject(value)) {\r\n return Reflect.ownKeys(value)\r\n } else {\r\n return []\r\n }\r\n } else if (type === 'deleted') {\r\n return []\r\n } else if (type === 'map') {\r\n const props =\r\n state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$mapProps ?? {}\r\n return Reflect.ownKeys(props).filter(\r\n (key) => props[key as $IntentionalAny]!.$type[0] !== 'deleted',\r\n )\r\n } else {\r\n throw Error(`Unrecognized type: ${type}`)\r\n }\r\n },\r\n deleteProperty(state: State, prop) {\r\n if (prop === DRAFT_STATE) throw Error(`Unallowed`)\r\n if (typeof prop !== 'string')\r\n throw Error(`Non-string props are not allowed`)\r\n\r\n const imo = state.imo\r\n const type = imo.$type[0]\r\n const branchName = imo.$type[1] ?? 'base'\r\n\r\n if (type === 'deleted')\r\n throw new Error(`This value is marked as deleted and cannot be changed`)\r\n\r\n if (type === 'boxed')\r\n throw new Error(`Implement deleting inside a boxed value`)\r\n\r\n if (type === 'map') {\r\n const mapProps = imo.$branches?.[branchName]?.$mapProps\r\n if (!mapProps) return false\r\n if (!Object.hasOwn(mapProps, prop)) return false\r\n\r\n if (!isCell(mapProps[prop])) return false\r\n const currentPropCell = mapProps[prop]!\r\n\r\n if (currentPropCell.$type[0] === 'deleted') return false\r\n currentPropCell.$type = ['deleted', generateBranchName()]\r\n return true\r\n }\r\n\r\n throw new Error(`Unrecognized type: ${type}`)\r\n },\r\n getOwnPropertyDescriptor(state: State, prop) {\r\n const type = state.imo.$type[0]\r\n if (type === 'boxed') {\r\n const $boxedValue =\r\n state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$boxedValue\r\n if (isPlainObject($boxedValue)) {\r\n return Reflect.getOwnPropertyDescriptor($boxedValue, prop)\r\n } else {\r\n return undefined\r\n }\r\n } else if (type === 'deleted') {\r\n return undefined\r\n } else if (type === 'map') {\r\n const props =\r\n state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$mapProps ?? {}\r\n if (Object.hasOwn(props, prop)) {\r\n return {\r\n writable: true,\r\n configurable: true,\r\n enumerable: true,\r\n value: (traps as $IntentionalAny).get(state, prop, {}),\r\n }\r\n } else {\r\n return undefined\r\n }\r\n } else {\r\n throw Error(`Unrecognized type: ${type}`)\r\n }\r\n },\r\n defineProperty(state: State, prop, descriptor) {\r\n throw Error(`Implement defineProperty()`)\r\n },\r\n getPrototypeOf(state: State) {\r\n const type = state.imo.$type[0]\r\n if (type === 'boxed') {\r\n return Object.getPrototypeOf(\r\n state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$boxedValue,\r\n )\r\n } else if (type === 'deleted') {\r\n return undefined\r\n } else if (type === 'map') {\r\n return Object.getPrototypeOf({})\r\n } else {\r\n throw Error(`Unrecognized type: ${type}`)\r\n }\r\n },\r\n setPrototypeOf(state: State, prototype) {\r\n throw Error(`Implement setPrototypeOf()`)\r\n },\r\n}\r\n\r\nexport const current = <T extends {}>(draft: T): T => {\r\n if (typeof draft !== 'object' || draft === null) {\r\n return draft\r\n }\r\n const state = (draft as $IntentionalAny)[DRAFT_STATE] as State\r\n if (!state) return draft\r\n const currentImo = immer.current(state.imo)\r\n return jsonFromCell(currentImo) as T\r\n}\r\n\r\nfunction valueType<V>(\r\n v: V,\r\n):\r\n | {type: 'boxed'; value: V}\r\n | {type: 'map'; value: {[key: string | number | symbol]: unknown}} {\r\n if (typeof v === 'object' && v) {\r\n if (Array.isArray(v)) {\r\n return {type: 'boxed', value: v}\r\n }\r\n return {type: 'map', value: v as $IntentionalAny}\r\n }\r\n\r\n if (\r\n typeof v === 'string' ||\r\n typeof v === 'number' ||\r\n typeof v === 'boolean' ||\r\n typeof v === 'undefined' ||\r\n v === null\r\n ) {\r\n return {type: 'boxed', value: v}\r\n }\r\n\r\n throw Error(`Unrecognized value type: ${typeof v}`)\r\n}\r\n\r\nconst DRAFT_STATE: unique symbol = Symbol.for('draft-state')\r\n\r\nconst objectCtorString = Object.prototype.constructor.toString()\r\n\r\nexport function isPlainObject(value: any): boolean {\r\n if (!value || typeof value !== 'object') return false\r\n const proto = Object.getPrototypeOf(value)\r\n if (proto === null) {\r\n return true\r\n }\r\n const Ctor =\r\n Object.hasOwnProperty.call(proto, 'constructor') && proto.constructor\r\n\r\n if (Ctor === Object) return true\r\n\r\n return (\r\n typeof Ctor == 'function' &&\r\n Function.toString.call(Ctor) === objectCtorString\r\n )\r\n}\r\n\r\nconst BOXED: unique symbol = Symbol.for('boxed')\r\n\r\nexport function boxed<V>(value: V): {[BOXED]: true; value: V} {\r\n return {[BOXED]: true, value}\r\n}\r\n\r\nfunction isBoxed(value: unknown): value is {[BOXED]: true; value: unknown} {\r\n return typeof value === 'object' &&\r\n value &&\r\n (value as $IntentionalAny)[BOXED] === true\r\n ? true\r\n : false\r\n}\r\n\r\nconst RESET: unique symbol = Symbol.for('reset')\r\n\r\nexport function reset<V>(value: V): {[RESET]: true; value: V} {\r\n return {[RESET]: true, value}\r\n}\r\n\r\nfunction isReset(value: unknown): value is {[RESET]: true; value: unknown} {\r\n return typeof value === 'object' &&\r\n value &&\r\n (value as $IntentionalAny)[RESET] === true\r\n ? true\r\n : false\r\n}\r\n\r\nfunction is(x: any, y: any): boolean {\r\n // Copied from https://github.com/immerjs/immer/blob/f6736a4beef727c6e5b41c312ce1b202ad3afb23/src/utils/common.ts#L115\r\n // Originally from: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\r\n if (x === y) {\r\n return x !== 0 || 1 / x === 1 / y\r\n } else {\r\n return x !== x && y !== y\r\n }\r\n}\r\n\r\nexport function jsonFromCell<V extends Cell | {}>(\r\n v: V,\r\n): V extends Cell ? CellToJSON<V> : typeof NOT_DEFINED {\r\n if (typeof v !== 'object' || v === null) {\r\n return NOT_DEFINED as $IntentionalAny\r\n }\r\n\r\n return _jsonFromCell(v as $IntentionalAny) as $IntentionalAny\r\n}\r\n\r\nconst _jsonFromCell = memoizeFn(\r\n <V extends Cell>(v: V): CellToJSON<V> | typeof NOT_DEFINED => {\r\n const type = v.$type?.[0]\r\n const branchName = v.$branches?.[v.$type?.[1] ?? 'base']\r\n\r\n if (typeof type !== 'string') {\r\n return NOT_DEFINED\r\n }\r\n\r\n if (type === 'deleted') {\r\n return NOT_DEFINED\r\n }\r\n\r\n if (type === 'boxed') {\r\n return branchName?.$boxedValue\r\n }\r\n\r\n if (v.$type[0] === 'map') {\r\n const props: {[key: string]: unknown} = {}\r\n for (const [k, _value] of Object.entries(branchName?.$mapProps || {})) {\r\n const value = jsonFromCell(_value as $IntentionalAny)\r\n if (value !== NOT_DEFINED) {\r\n props[k] = value\r\n }\r\n }\r\n return props\r\n }\r\n\r\n return NOT_DEFINED\r\n },\r\n)\r\n", "import * as GeneratorSpy from './GeneratorSpy'\r\nimport type {Draft} from 'immer'\r\nimport {createDraft, finishDraft} from 'immer'\r\nimport {get} from 'lodash-es'\r\nimport type {\r\n $FixMe,\r\n EditorDefinitionToEditorInvocable,\r\n Invokations,\r\n Transaction,\r\n EditorDefinitionFn,\r\n $IntentionalAny,\r\n EditorDefinitions,\r\n Schema,\r\n ValidOpSnapshot as ValidOpSnapshot,\r\n ValidGenerators,\r\n GeneratorRecordings,\r\n FullSnapshot,\r\n} from '../types'\r\nimport {fromOps} from '../rogue'\r\n\r\nexport function applyOptimisticUpdateToState<\r\n OpSnapshot extends ValidOpSnapshot,\r\n>(\r\n {\r\n invokations,\r\n generatorRecordings,\r\n draftOps,\r\n }: Pick<Transaction, 'invokations' | 'generatorRecordings' | 'draftOps'>,\r\n before: FullSnapshot<OpSnapshot>,\r\n schema: Schema<OpSnapshot>,\r\n playbackOnly: boolean = false,\r\n testDeterminism: boolean = true,\r\n): [after: FullSnapshot<OpSnapshot>, generatorRecordings: GeneratorRecordings] {\r\n const draft = createDraft(before.op)\r\n const [generatorSpy, newRecordings] = GeneratorSpy.createGeneratorsSpy(\r\n schema.generators,\r\n generatorRecordings,\r\n playbackOnly,\r\n )\r\n\r\n runInvokations(schema, draft, invokations, generatorSpy)\r\n const opSnapshotAfter = finishDraft(draft) as $FixMe as OpSnapshot\r\n const [cellAfter] = fromOps(before.cell, draftOps)\r\n return [{op: opSnapshotAfter, cell: cellAfter}, newRecordings]\r\n}\r\n\r\nexport function recordInvokations<Editors extends {}>(\r\n editors: Editors,\r\n fn: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\r\n): Invokations {\r\n const {invokableEditors, release, invokations} =\r\n invokables.getInvokables(editors)\r\n let released = false\r\n try {\r\n fn(invokableEditors)\r\n release()\r\n released = true\r\n } catch (error) {\r\n throw error\r\n } finally {\r\n if (!released) {\r\n release()\r\n }\r\n }\r\n return invokations\r\n}\r\n\r\nfunction runInvokations<Snapshot extends ValidOpSnapshot>(\r\n schema: Schema<Snapshot>,\r\n prevState: Draft<Snapshot>,\r\n invokations: Invokations,\r\n generatorSpy: ValidGenerators,\r\n): void {\r\n for (const [fnPath, opts] of invokations) {\r\n const fn = get(schema.editors, fnPath.split('.')) as EditorDefinitionFn\r\n if (typeof fn !== 'function') {\r\n throw new Error(\r\n `editor ${fnPath} not found. Transaction may be corrupt, or the editor names may have changed`,\r\n )\r\n }\r\n fn(prevState, generatorSpy, opts)\r\n }\r\n}\r\nnamespace invokables {\r\n class Pool<PoolItem> {\r\n private _items: PoolItem[] = []\r\n constructor(readonly _factory: () => PoolItem) {}\r\n\r\n /**\r\n * Get an item from the pool. If the pool is empty, a new item is created. Also starts a timer to ensure that the item is released back into the pool.\r\n *\r\n * @returns A tuple of the item and a function to release the item back into the pool.\r\n *\r\n */\r\n get(releaseTimeoutms: number = 0): [PoolItem, () => void] {\r\n const item =\r\n this._items.length === 0 ? this._factory() : this._items.pop()!\r\n let released = false\r\n\r\n // if the invokables are not released within 0ms, it's probably a bug + memory leak.\r\n const releaseTimeout = setTimeout(() => {\r\n if (!released) {\r\n throw new Error('Release timeout exceeded.')\r\n }\r\n }, releaseTimeoutms)\r\n\r\n const release = () => {\r\n released = true\r\n clearTimeout(releaseTimeout)\r\n this._items.push(item)\r\n }\r\n\r\n return [item, release]\r\n }\r\n }\r\n\r\n type InvokationContext = {\r\n snapshot: Draft<{}>\r\n invokations: Invokations\r\n }\r\n\r\n type PoolItem = {\r\n context: InvokationContext\r\n invokableEditors: EditorDefinitionToEditorInvocable<$IntentionalAny>\r\n }\r\n const pools = new WeakMap<{}, Pool<PoolItem>>()\r\n\r\n function getPool(editorDefinition: {}): Pool<PoolItem> {\r\n if (!pools.has(editorDefinition)) {\r\n function createPoolItem<Editors extends EditorDefinitions>(\r\n editors: Editors,\r\n ): PoolItem {\r\n const context = {\r\n snapshot: {},\r\n invokations: [],\r\n }\r\n const invokableEditors = createInvokables(editors, context)\r\n\r\n return {context, invokableEditors}\r\n }\r\n\r\n const pool = new Pool(() => createPoolItem(editorDefinition))\r\n pools.set(editorDefinition, pool)\r\n return pool\r\n } else {\r\n return pools.get(editorDefinition)!\r\n }\r\n }\r\n\r\n function createInvokables<Editors extends EditorDefinitions>(\r\n editors: Editors,\r\n context: InvokationContext,\r\n pathSoFar: string[] = [],\r\n ): EditorDefinitionToEditorInvocable<Editors> {\r\n const cache: $IntentionalAny = {}\r\n\r\n const proxy = new Proxy(new Function(), {\r\n get(_, prop: string) {\r\n if (prop in cache) {\r\n return cache[prop]\r\n } else if (!(prop in editors)) {\r\n const path = [...pathSoFar, prop]\r\n throw new Error(`editor \"${path.join('.')}\" not found`)\r\n } else {\r\n const path = [...pathSoFar, prop]\r\n const sub = createInvokables(\r\n (editors as $IntentionalAny)[prop],\r\n context,\r\n path,\r\n )\r\n cache[prop] = sub\r\n return sub\r\n }\r\n },\r\n apply(_, __, args: [$IntentionalAny]) {\r\n const opts = args[0]\r\n if (typeof editors !== 'function') {\r\n throw new Error(`editor \"${pathSoFar.join('.')}\" is not a function`)\r\n } else {\r\n context.invokations.push([pathSoFar.join('.'), opts])\r\n }\r\n },\r\n })\r\n\r\n return proxy as $IntentionalAny\r\n }\r\n\r\n export function getInvokables<Defs extends EditorDefinitions>(\r\n editorDefinitions: Defs,\r\n ): {\r\n invokableEditors: EditorDefinitionToEditorInvocable<Defs>\r\n release: () => void\r\n invokations: Invokations\r\n } {\r\n const pool = getPool(editorDefinitions)\r\n const [poolItem, release] = pool.get()\r\n\r\n const {context, invokableEditors} = poolItem\r\n\r\n context.invokations = []\r\n\r\n return {\r\n invokableEditors: invokableEditors as $IntentionalAny,\r\n release,\r\n invokations: context.invokations,\r\n }\r\n }\r\n}\r\n", "import type {\r\n $IntentionalAny,\r\n SessionState,\r\n FrontStorageAdapterTransaction,\r\n Transaction,\r\n} from '../types'\r\nimport type {FrontStorageAdapter} from '../types'\r\n\r\nexport class FrontStorage {\r\n constructor(\r\n readonly dbName: string,\r\n private readonly _adapter: FrontStorageAdapter,\r\n ) {}\r\n\r\n async transaction<T>(fn: (opts: FrontStorageTransaction) => Promise<T>) {\r\n return await this._adapter.transaction(async (adapterOpts) => {\r\n const t = new FrontStorageTransactionImpl(adapterOpts)\r\n return await fn(t)\r\n })\r\n }\r\n}\r\n\r\nclass FrontStorageTransactionImpl {\r\n constructor(private _adapterTransaction: FrontStorageAdapterTransaction) {}\r\n\r\n async setSessionState(s: SessionState<unknown>, session: string) {\r\n // TODO: serializing the state every time this changes probably wastes IO.\r\n // better to create a writeahead log and compact it every once in a while\r\n await this._adapterTransaction.set('sessionState', s, session)\r\n }\r\n\r\n async getSessionState(\r\n session: string,\r\n ): Promise<SessionState<unknown> | undefined> {\r\n const v = this._adapterTransaction.get('sessionState', session)\r\n return v as $IntentionalAny\r\n }\r\n\r\n async deleteSession(session: string): Promise<void> {\r\n await this._adapterTransaction.deleteSession(session)\r\n }\r\n\r\n async getMostRecentlySyncedSessionState(): Promise<\r\n SessionState<unknown> | undefined\r\n > {\r\n const allSessionStates =\r\n this._adapterTransaction.getAll<SessionState<unknown>>('sessionState')\r\n let latest: SessionState<unknown> | undefined\r\n for (const [peerId, sessionState] of Object.entries(allSessionStates)) {\r\n if (\r\n typeof sessionState.backendClock === 'number' &&\r\n sessionState.backendClock > (latest?.backendClock ?? -1)\r\n ) {\r\n latest = sessionState\r\n }\r\n }\r\n\r\n return latest\r\n }\r\n\r\n async getOptimisticUpdates(session: string): Promise<Transaction[]> {\r\n const s = await this._adapterTransaction.getList<{\r\n id: string\r\n transaction: Transaction\r\n }>('optimisticUpdates', session)\r\n return s.map((t) => t.transaction)\r\n }\r\n\r\n async pluckOptimisticUpdates(\r\n transactions: Pick<Transaction, 'peerClock'>[],\r\n session: string,\r\n ): Promise<void> {\r\n await this._adapterTransaction.pluckFromList(\r\n 'optimisticUpdates',\r\n transactions.map(({peerClock}) => '#' + peerClock),\r\n session,\r\n )\r\n }\r\n\r\n async getAllExistingSessionIds(): Promise<string[]> {\r\n const all = await this._adapterTransaction.getAll('session')\r\n return Object.keys(all)\r\n }\r\n\r\n async pushOptimisticUpdates(\r\n transactions: Transaction[],\r\n session: string,\r\n ): Promise<void> {\r\n await this._adapterTransaction.pushToList<{\r\n id: string\r\n transaction: Transaction\r\n }>(\r\n 'optimisticUpdates',\r\n transactions.map((t) => ({\r\n id: '#' + t.peerClock,\r\n transaction: t,\r\n })),\r\n session,\r\n )\r\n }\r\n}\r\n\r\nexport type FrontStorageTransaction = FrontStorageTransactionImpl\r\n", "import type {$IntentionalAny, FullSnapshot, Schema} from '../types'\r\n\r\nconst empty = {op: {}, cell: {}}\r\n\r\nexport function ensureStateIsUptodate<S extends {$schemaVersion: number}>(\r\n original: FullSnapshot<S> | null,\r\n schema: Schema<S>,\r\n): FullSnapshot<S> {\r\n if (original === null) {\r\n return empty as $IntentionalAny\r\n }\r\n return original as $IntentionalAny\r\n\r\n // if (\r\n // !original ||\r\n // typeof original.op.$schemaVersion !== 'number' ||\r\n // original.op.$schemaVersion < schema.version\r\n // ) {\r\n // return {\r\n // op: produce((original?.op ?? {}) as {}, (originalDraft) => {\r\n // schema.migrateOp(originalDraft)\r\n // }) as S,\r\n // cell: original?.cell ?? {},\r\n // }\r\n // } else {\r\n // return original\r\n // }\r\n}\r\n", "import type {$IntentionalAny} from './types'\r\n\r\ntype PathToProp = Array<string | number>\r\n\r\nexport type PointerMeta = {\r\n root: {}\r\n path: (string | number)[]\r\n}\r\n\r\n/** We are using an empty object as a WeakMap key for storing pointer meta data */\r\ntype WeakPointerKey = {}\r\n\r\nexport type UnindexableTypesForPointer =\r\n | number\r\n | string\r\n | boolean\r\n | null\r\n | void\r\n | undefined\r\n | Function // eslint-disable-line @typescript-eslint/ban-types\r\n\r\nexport type UnindexablePointer = {\r\n [K in $IntentionalAny]: Pointer<undefined>\r\n}\r\n\r\nconst pointerMetaWeakMap = new WeakMap<WeakPointerKey, PointerMeta>()\r\nconst cachedSubPathPointersWeakMap = new WeakMap<\r\n WeakPointerKey,\r\n Map<string | number, Pointer<unknown>>\r\n>()\r\n\r\n/**\r\n * A wrapper type for the type a `Pointer` points to.\r\n */\r\nexport type PointerType<O> = {\r\n /**\r\n * Only accessible via the type system.\r\n * This is a helper for getting the underlying pointer type\r\n * via the type space.\r\n */\r\n $$__pointer_type: O\r\n}\r\n\r\n/**\r\n * The type of {@link Atom} pointers. See {@link pointer|pointer()} for an\r\n * explanation of pointers.\r\n *\r\n * @see Atom\r\n *\r\n * @remarks\r\n * The Pointer type is quite tricky because it doesn't play well with `any` and other inexact types.\r\n * Here is an example that one would expect to work, but currently doesn't:\r\n * ```ts\r\n * declare function expectAnyPointer(pointer: Pointer<any>): void\r\n *\r\n * expectAnyPointer(null as Pointer<{}>) // this shows as a type error because Pointer<{}> is not assignable to Pointer<any>, even though it should\r\n * ```\r\n *\r\n * The current solution is to just avoid using `any` with pointer-related code (or type-test it well).\r\n * But if you enjoy solving typescript puzzles, consider fixing this :)\r\n * Potentially, [TypeScript variance annotations in 4.7+](https://devblogs.microsoft.com/typescript/announcing-typescript-4-7-beta/#optional-variance-annotations-for-type-parameters)\r\n * might be able to help us.\r\n */\r\nexport type Pointer<O> = PointerType<O> &\r\n // `Exclude<O, undefined>` will remove `undefined` from the first type\r\n // `undefined extends O ? undefined : never` will give us `undefined` if `O` is `... | undefined`\r\n PointerInner<Exclude<O, undefined>, undefined extends O ? undefined : never>\r\n\r\n// By separating the `O` (non-undefined) from the `undefined` or `never`, we\r\n// can properly use `O extends ...` to determine the kind of potential value\r\n// without actually discarding optionality information.\r\ntype PointerInner<O, Optional> = O extends UnindexableTypesForPointer\r\n ? UnindexablePointer\r\n : unknown extends O\r\n ? UnindexablePointer\r\n : O extends (infer T)[]\r\n ? Pointer<T>[]\r\n : O extends {}\r\n ? {\r\n [K in keyof O]-?: Pointer<O[K] | Optional>\r\n }\r\n : UnindexablePointer\r\n\r\nconst pointerMetaSymbol = Symbol('pointerMeta')\r\n\r\nconst proxyHandler = {\r\n get(\r\n pointerKey: WeakPointerKey,\r\n prop: string | typeof pointerMetaSymbol,\r\n ): $IntentionalAny {\r\n if (prop === pointerMetaSymbol) return pointerMetaWeakMap.get(pointerKey)!\r\n\r\n let subPathPointers = cachedSubPathPointersWeakMap.get(pointerKey)\r\n if (!subPathPointers) {\r\n subPathPointers = new Map()\r\n cachedSubPathPointersWeakMap.set(pointerKey, subPathPointers)\r\n }\r\n\r\n const existing = subPathPointers.get(prop)\r\n if (existing !== undefined) return existing\r\n\r\n const meta = pointerMetaWeakMap.get(pointerKey)!\r\n\r\n const subPointer = pointer({root: meta.root, path: [...meta.path, prop]})\r\n subPathPointers.set(prop, subPointer)\r\n return subPointer\r\n },\r\n}\r\n\r\n/**\r\n * Returns the metadata associated with the pointer. Usually the root object and\r\n * the path.\r\n *\r\n * @param p - The pointer.\r\n */\r\nexport const getPointerMeta = <_>(p: PointerType<_>): PointerMeta => {\r\n // @ts-ignore @todo\r\n const meta: PointerMeta = p[\r\n pointerMetaSymbol as unknown as $IntentionalAny\r\n ] as $IntentionalAny\r\n return meta\r\n}\r\n\r\n/**\r\n * Returns the root object and the path of the pointer.\r\n *\r\n * @example\r\n * ```ts\r\n * const {root, path} = getPointerParts(pointer)\r\n * ```\r\n *\r\n * @param p - The pointer.\r\n *\r\n * @returns An object with two properties: `root`-the root object or the pointer, and `path`-the path of the pointer. `path` is an array of the property-chain.\r\n */\r\nexport const getPointerParts = <_>(\r\n p: Pointer<_>,\r\n): {root: {}; path: PathToProp} => {\r\n const {root, path} = getPointerMeta(p)\r\n return {root, path}\r\n}\r\n\r\n/**\r\n * Creates a pointer to a (nested) property of an {@link Atom}.\r\n *\r\n * @remarks\r\n * Pointers are used to make prisms of properties or nested properties of\r\n * {@link Atom|Atoms}.\r\n *\r\n * Pointers also allow easy construction of new pointers pointing to nested members\r\n * of the root object, by simply using property chaining. E.g. `somePointer.a.b` will\r\n * create a new pointer that has `'a'` and `'b'` added to the path of `somePointer`.\r\n *\r\n * @example\r\n * ```ts\r\n * // Here, sum is a prism that updates whenever the a or b prop of someAtom does.\r\n * const sum = prism(() => {\r\n * return val(pointer({root: someAtom, path: ['a']})) + val(pointer({root: someAtom, path: ['b']}));\r\n * });\r\n *\r\n * // Note, atoms have a convenience Atom.pointer property that points to the root,\r\n * // which you would normally use in this situation.\r\n * const sum = prism(() => {\r\n * return val(someAtom.pointer.a) + val(someAtom.pointer.b);\r\n * });\r\n * ```\r\n *\r\n * @param args - The pointer parameters.\r\n *\r\n * @typeParam O - The type of the value being pointed to.\r\n */\r\nfunction pointer<O>(args: {root: {}; path?: Array<string | number>}) {\r\n const meta: PointerMeta = {\r\n root: args.root as $IntentionalAny,\r\n path: args.path ?? [],\r\n }\r\n const pointerKey: WeakPointerKey = {}\r\n pointerMetaWeakMap.set(pointerKey, meta)\r\n return new Proxy(pointerKey, proxyHandler) as Pointer<O>\r\n}\r\n\r\nexport default pointer\r\n\r\n/**\r\n * Returns whether `p` is a pointer.\r\n */\r\nexport const isPointer = (p: $IntentionalAny): p is Pointer<unknown> => {\r\n return p && !!getPointerMeta(p)\r\n}\r\n", "import type {$FixMe, $IntentionalAny} from '../types'\r\n\r\nexport default function updateDeep<S>(\r\n state: S,\r\n path: (string | number | undefined)[],\r\n reducer: (...args: $IntentionalAny[]) => $IntentionalAny,\r\n): S {\r\n if (path.length === 0) return reducer(state)\r\n return hoop(state, path as $IntentionalAny, reducer)\r\n}\r\n\r\nconst hoop = (\r\n s: $FixMe,\r\n path: (string | number)[],\r\n reducer: $FixMe,\r\n): $FixMe => {\r\n if (path.length === 0) {\r\n return reducer(s)\r\n }\r\n if (Array.isArray(s)) {\r\n let [index, ...restOfPath] = path\r\n index = parseInt(String(index), 10)\r\n if (isNaN(index)) index = 0\r\n const oldVal = s[index]\r\n const newVal = hoop(oldVal, restOfPath, reducer)\r\n if (oldVal === newVal) return s\r\n const newS = [...s]\r\n newS.splice(index, 1, newVal)\r\n return newS\r\n } else if (typeof s === 'object' && s !== null) {\r\n const [key, ...restOfPath] = path\r\n const oldVal = s[key]\r\n const newVal = hoop(oldVal, restOfPath, reducer)\r\n if (oldVal === newVal) return s\r\n const newS = {...s, [key]: newVal}\r\n return newS\r\n } else {\r\n const [key, ...restOfPath] = path\r\n\r\n return {[key]: hoop(undefined, restOfPath, reducer)}\r\n }\r\n}\r\n", "interface Node<Data> {\r\n next: undefined | Node<Data>\r\n data: Data\r\n}\r\n\r\n/**\r\n * Just a simple LinkedList\r\n */\r\nexport default class Stack<Data> {\r\n _head: undefined | Node<Data>\r\n\r\n constructor() {\r\n this._head = undefined\r\n }\r\n\r\n peek() {\r\n return this._head && this._head.data\r\n }\r\n\r\n pop() {\r\n const head = this._head\r\n if (!head) {\r\n return undefined\r\n }\r\n this._head = head.next\r\n return head.data\r\n }\r\n\r\n push(data: Data) {\r\n const node = {next: this._head, data}\r\n this._head = node\r\n }\r\n}\r\n", "import type Ticker from '../Ticker'\r\nimport type {$IntentionalAny, VoidFn} from '../types'\r\n\r\ntype IDependent = (msgComingFrom: Prism<$IntentionalAny>) => void\r\n\r\n/**\r\n * Common interface for prisms.\r\n */\r\nexport interface Prism<V> {\r\n /**\r\n * Whether the object is a prism.\r\n */\r\n isPrism: true\r\n\r\n /**\r\n * Whether the prism is hot.\r\n */\r\n isHot: boolean\r\n\r\n /**\r\n * Calls `listener` with a fresh value every time the prism _has_ a new value, throttled by Ticker.\r\n */\r\n onChange(\r\n ticker: Ticker,\r\n listener: (v: V) => void,\r\n immediate?: boolean,\r\n ): VoidFn\r\n\r\n onStale(cb: () => void): VoidFn\r\n\r\n /**\r\n * Keep the prism hot, even if there are no tappers (subscribers).\r\n */\r\n keepHot(): VoidFn\r\n\r\n /**\r\n * Add a prism as a dependent of this prism.\r\n *\r\n * @param d - The prism to be made a dependent of this prism.\r\n *\r\n * @see _removeDependent\r\n *\r\n * @internal\r\n */\r\n _addDependent(d: IDependent): void\r\n\r\n /**\r\n * Remove a prism as a dependent of this prism.\r\n *\r\n * @param d - The prism to be removed from as a dependent of this prism.\r\n *\r\n * @see _addDependent\r\n * @internal\r\n */\r\n _removeDependent(d: IDependent): void\r\n\r\n /**\r\n * Gets the current value of the prism. If the value is stale, it causes the prism to freshen.\r\n */\r\n getValue(): V\r\n}\r\n\r\n/**\r\n * Returns whether `d` is a prism.\r\n */\r\nexport function isPrism(d: any): d is Prism<unknown> {\r\n return !!(d && d.isPrism && d.isPrism === true)\r\n}\r\n", "import type {$IntentionalAny} from '../types'\r\nimport Stack from '../utils/Stack'\r\nimport type {Prism} from './Interface'\r\n\r\nfunction createMechanism() {\r\n const noop = () => {}\r\n\r\n const stack = new Stack<Collector>()\r\n const noopCollector: Collector = noop\r\n\r\n type Collector = (d: Prism<$IntentionalAny>) => void\r\n\r\n const pushCollector = (collector: Collector): void => {\r\n stack.push(collector)\r\n }\r\n\r\n const popCollector = (collector: Collector): void => {\r\n const existing = stack.peek()\r\n if (existing !== collector) {\r\n throw new Error(`Popped collector is not on top of the stack`)\r\n }\r\n stack.pop()\r\n }\r\n\r\n const startIgnoringDependencies = () => {\r\n stack.push(noopCollector)\r\n }\r\n\r\n const stopIgnoringDependencies = () => {\r\n if (stack.peek() !== noopCollector) {\r\n if (process.env.NODE_ENV === 'development') {\r\n console.warn('This should never happen')\r\n }\r\n } else {\r\n stack.pop()\r\n }\r\n }\r\n\r\n const reportResolutionStart = (d: Prism<$IntentionalAny>) => {\r\n const possibleCollector = stack.peek()\r\n if (possibleCollector) {\r\n possibleCollector(d)\r\n }\r\n\r\n stack.push(noopCollector)\r\n }\r\n\r\n const reportResolutionEnd = (_d: Prism<$IntentionalAny>) => {\r\n stack.pop()\r\n }\r\n\r\n return {\r\n type: 'Dataverse_discoveryMechanism' as 'Dataverse_discoveryMechanism',\r\n startIgnoringDependencies,\r\n stopIgnoringDependencies,\r\n reportResolutionStart,\r\n reportResolutionEnd,\r\n pushCollector,\r\n popCollector,\r\n }\r\n}\r\n\r\nfunction getSharedMechanism(): ReturnType<typeof createMechanism> {\r\n const varName = '__dataverse_discoveryMechanism_sharedStack'\r\n const root =\r\n typeof window !== 'undefined'\r\n ? window\r\n : typeof global !== 'undefined'\r\n ? global\r\n : {}\r\n if (root) {\r\n const existingMechanism: ReturnType<typeof createMechanism> | undefined =\r\n // @ts-ignore ignore\r\n root[varName]\r\n if (\r\n existingMechanism &&\r\n typeof existingMechanism === 'object' &&\r\n existingMechanism.type === 'Dataverse_discoveryMechanism'\r\n ) {\r\n return existingMechanism\r\n } else {\r\n const mechanism = createMechanism()\r\n // @ts-ignore ignore\r\n root[varName] = mechanism\r\n return mechanism\r\n }\r\n } else {\r\n return createMechanism()\r\n }\r\n}\r\n\r\nexport const {\r\n startIgnoringDependencies,\r\n stopIgnoringDependencies,\r\n reportResolutionEnd,\r\n reportResolutionStart,\r\n pushCollector,\r\n popCollector,\r\n} = getSharedMechanism()\r\n", "import type Ticker from '../Ticker'\r\nimport type {$IntentionalAny, VoidFn} from '../types'\r\nimport Stack from '../utils/Stack'\r\nimport type {Prism} from './Interface'\r\nimport {isPrism} from './Interface'\r\nimport {\r\n startIgnoringDependencies,\r\n stopIgnoringDependencies,\r\n pushCollector,\r\n popCollector,\r\n reportResolutionStart,\r\n reportResolutionEnd,\r\n} from './discoveryMechanism'\r\n\r\ntype IDependent = (msgComingFrom: Prism<$IntentionalAny>) => void\r\n\r\nconst voidFn = () => {}\r\n\r\nclass HotHandle<V> {\r\n private _didMarkDependentsAsStale: boolean = false\r\n private _isFresh: boolean = false\r\n protected _cacheOfDendencyValues: Map<Prism<unknown>, unknown> = new Map()\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _dependents: Set<IDependent> = new Set()\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _dependencies: Set<Prism<$IntentionalAny>> = new Set()\r\n\r\n protected _possiblyStaleDeps = new Set<Prism<unknown>>()\r\n\r\n private _scope: HotScope = new HotScope(\r\n this as $IntentionalAny as HotHandle<unknown>,\r\n )\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _lastValue: undefined | V = undefined\r\n\r\n /**\r\n * If true, the prism is stale even though its dependencies aren't\r\n * marked as such. This is used by `prism.source()` and `prism.state()`\r\n * to mark the prism as stale.\r\n */\r\n private _forciblySetToStale: boolean = false\r\n\r\n constructor(\r\n private readonly _fn: () => V,\r\n private readonly _prismInstance: PrismInstance<V>,\r\n ) {\r\n for (const d of this._dependencies) {\r\n d._addDependent(this._reactToDependencyGoingStale)\r\n }\r\n\r\n startIgnoringDependencies()\r\n this.getValue()\r\n stopIgnoringDependencies()\r\n }\r\n\r\n get hasDependents(): boolean {\r\n return this._dependents.size > 0\r\n }\r\n removeDependent(d: IDependent) {\r\n this._dependents.delete(d)\r\n }\r\n addDependent(d: IDependent) {\r\n this._dependents.add(d)\r\n }\r\n\r\n destroy() {\r\n for (const d of this._dependencies) {\r\n d._removeDependent(this._reactToDependencyGoingStale)\r\n }\r\n cleanupScopeStack(this._scope)\r\n }\r\n\r\n getValue(): V {\r\n if (!this._isFresh) {\r\n const newValue = this._recalculate()\r\n this._lastValue = newValue\r\n this._isFresh = true\r\n this._didMarkDependentsAsStale = false\r\n this._forciblySetToStale = false\r\n }\r\n return this._lastValue!\r\n }\r\n\r\n _recalculate() {\r\n let value: V\r\n\r\n if (!this._forciblySetToStale) {\r\n if (this._possiblyStaleDeps.size > 0) {\r\n let anActuallyStaleDepWasFound = false\r\n startIgnoringDependencies()\r\n for (const dep of this._possiblyStaleDeps) {\r\n if (this._cacheOfDendencyValues.get(dep) !== dep.getValue()) {\r\n anActuallyStaleDepWasFound = true\r\n break\r\n }\r\n }\r\n stopIgnoringDependencies()\r\n this._possiblyStaleDeps.clear()\r\n if (!anActuallyStaleDepWasFound) {\r\n return this._lastValue!\r\n }\r\n }\r\n }\r\n\r\n const newDeps: Set<Prism<unknown>> = new Set()\r\n this._cacheOfDendencyValues.clear()\r\n\r\n const collector = (observedDep: Prism<unknown>): void => {\r\n newDeps.add(observedDep)\r\n this._addDependency(observedDep)\r\n }\r\n\r\n pushCollector(collector)\r\n\r\n // Reset per-scope `source()` call counters so each recompute re-derives the\r\n // same call-order-based effect keys (see HotScope.source).\r\n this._scope.resetSourceIndices()\r\n hookScopeStack.push(this._scope)\r\n try {\r\n value = this._fn()\r\n } catch (error) {\r\n console.error(error)\r\n } finally {\r\n const topOfTheStack = hookScopeStack.pop()\r\n if (topOfTheStack !== this._scope) {\r\n console.warn(\r\n // @todo guide the user to report the bug in an issue\r\n `The Prism hook stack has slipped. This is a bug.`,\r\n )\r\n }\r\n }\r\n\r\n popCollector(collector)\r\n\r\n for (const dep of this._dependencies) {\r\n if (!newDeps.has(dep)) {\r\n this._removeDependency(dep)\r\n }\r\n }\r\n\r\n this._dependencies = newDeps\r\n\r\n startIgnoringDependencies()\r\n for (const dep of newDeps) {\r\n this._cacheOfDendencyValues.set(dep, dep.getValue())\r\n }\r\n stopIgnoringDependencies()\r\n\r\n return value!\r\n }\r\n\r\n forceStale() {\r\n this._forciblySetToStale = true\r\n this._markAsStale()\r\n }\r\n\r\n protected _reactToDependencyGoingStale = (which: Prism<$IntentionalAny>) => {\r\n this._possiblyStaleDeps.add(which)\r\n\r\n this._markAsStale()\r\n }\r\n\r\n private _markAsStale() {\r\n if (this._didMarkDependentsAsStale) return\r\n\r\n this._didMarkDependentsAsStale = true\r\n this._isFresh = false\r\n\r\n for (const dependent of this._dependents) {\r\n dependent(this._prismInstance)\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _addDependency(d: Prism<$IntentionalAny>) {\r\n if (this._dependencies.has(d)) return\r\n this._dependencies.add(d)\r\n d._addDependent(this._reactToDependencyGoingStale)\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _removeDependency(d: Prism<$IntentionalAny>) {\r\n if (!this._dependencies.has(d)) return\r\n this._dependencies.delete(d)\r\n d._removeDependent(this._reactToDependencyGoingStale)\r\n }\r\n}\r\n\r\nconst emptyObject = {}\r\n\r\nclass PrismInstance<V> implements Prism<V> {\r\n /**\r\n * Whether the object is a prism.\r\n */\r\n readonly isPrism: true = true\r\n\r\n private _state:\r\n | {hot: false; handle: undefined}\r\n | {hot: true; handle: HotHandle<V>} = {\r\n hot: false,\r\n handle: undefined,\r\n }\r\n\r\n constructor(private readonly _fn: () => V) {}\r\n\r\n /**\r\n * Whether the prism is hot.\r\n */\r\n get isHot(): boolean {\r\n return this._state.hot\r\n }\r\n\r\n onChange(\r\n ticker: Ticker,\r\n listener: (v: V) => void,\r\n immediate: boolean = false,\r\n ): VoidFn {\r\n // the prism will call this function every time it goes from fresh to stale\r\n const dependent = () => {\r\n // schedule the listener to be called on the next tick, unless\r\n // we're already on a tick, in which case it'll be called on the current tick.\r\n ticker.onThisOrNextTick(refresh)\r\n }\r\n\r\n // let's cache the last value so we don't call the listener if the value hasn't changed\r\n let lastValue: V | typeof emptyObject =\r\n // use an empty object as the initial value so that the listener is called on the first tick.\r\n // if we were to use, say, undefined, and this.getValue() also returned undefined, the listener\r\n // would never be called.\r\n emptyObject\r\n\r\n // this function will be _scheduled_ to be called on the currently running, or next tick,\r\n // after the prism has gone from fresh to stale.\r\n const refresh = () => {\r\n const newValue = this.getValue()\r\n // if the value hasn't changed, don't call the listener\r\n if (newValue === lastValue) return\r\n\r\n // the value has changed - cache it\r\n lastValue = newValue\r\n\r\n // and let the listener know\r\n listener(newValue)\r\n }\r\n\r\n // add the dependent to the prism's list of dependents (which will make it go hot)\r\n this._addDependent(dependent)\r\n\r\n // if the caller wants the listener to be called immediately, call it now\r\n if (immediate) {\r\n lastValue = this.getValue()\r\n listener(lastValue as $IntentionalAny as V)\r\n }\r\n\r\n // the unsubscribe function\r\n const unsubscribe = () => {\r\n // remove the dependent from the prism's list of dependents (and if it was the last dependent, the prism will go cold)\r\n this._removeDependent(dependent)\r\n // in case we're scheduled for a tick, cancel that\r\n ticker.offThisOrNextTick(refresh)\r\n ticker.offNextTick(refresh)\r\n }\r\n\r\n return unsubscribe\r\n }\r\n\r\n /**\r\n * Calls `callback` every time the prism's state goes from `fresh-\\>stale.` Returns an `unsubscribe()` function.\r\n */\r\n onStale(callback: () => void): VoidFn {\r\n const untap = () => {\r\n this._removeDependent(onStaleCallback)\r\n }\r\n const onStaleCallback = () => callback()\r\n this._addDependent(onStaleCallback)\r\n return untap\r\n }\r\n\r\n /**\r\n * Keep the prism hot, even if there are no tappers (subscribers).\r\n */\r\n keepHot() {\r\n return this.onStale(() => {})\r\n }\r\n\r\n /**\r\n * Add a prism as a dependent of this prism.\r\n *\r\n * @param d - The prism to be made a dependent of this prism.\r\n *\r\n * @see _removeDependent\r\n */\r\n _addDependent(d: IDependent) {\r\n if (!this._state.hot) {\r\n this._goHot()\r\n }\r\n this._state.handle!.addDependent(d)\r\n }\r\n\r\n private _goHot() {\r\n const hotHandle = new HotHandle(this._fn, this)\r\n this._state = {\r\n hot: true,\r\n handle: hotHandle,\r\n }\r\n }\r\n\r\n /**\r\n * Remove a prism as a dependent of this prism.\r\n *\r\n * @param d - The prism to be removed from as a dependent of this prism.\r\n *\r\n * @see _addDependent\r\n */\r\n _removeDependent(d: IDependent) {\r\n const state = this._state\r\n if (!state.hot) {\r\n return\r\n }\r\n const handle = state.handle\r\n handle.removeDependent(d)\r\n if (!handle.hasDependents) {\r\n this._state = {hot: false, handle: undefined}\r\n handle.destroy()\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current value of the prism. If the value is stale, it causes the prism to freshen.\r\n */\r\n getValue(): V {\r\n /**\r\n * TODO We should prevent (or warn about) a common mistake users make, which is reading the value of\r\n * a prism in the body of a react component (e.g. `der.getValue()` (often via `val()`) instead of `useVal()`\r\n * or `uesPrism()`).\r\n *\r\n * Although that's the most common example of this mistake, you can also find it outside of react components.\r\n * Basically the user runs `der.getValue()` assuming the read is detected by a wrapping prism when it's not.\r\n *\r\n * Sometiems the prism isn't even hot when the user assumes it is.\r\n *\r\n * We can fix this type of mistake by:\r\n * 1. Warning the user when they call `getValue()` on a cold prism.\r\n * 2. Warning the user about calling `getValue()` on a hot-but-stale prism\r\n * if `getValue()` isn't called by a known mechanism like a `PrismEmitter`.\r\n *\r\n * Design constraints:\r\n * - This fix should not have a perf-penalty in production. Perhaps use a global flag + `process.env.NODE_ENV !== 'production'`\r\n * to enable it.\r\n * - In the case of `onStale()`, we don't control when the user calls\r\n * `getValue()` (as opposed to `onChange()` which calls `getValue()` directly).\r\n * Perhaps we can disable the check in that case.\r\n * - Probably the best place to add this check is right here in this method plus some changes to `reportResulutionStart()`,\r\n * which would have to be changed to let the caller know if there is an actual collector (a prism)\r\n * present in its stack.\r\n */\r\n reportResolutionStart(this)\r\n\r\n const state = this._state\r\n\r\n let val: V\r\n if (state.hot) {\r\n val = state.handle.getValue()\r\n } else {\r\n val = calculateColdPrism(this._fn)\r\n }\r\n\r\n reportResolutionEnd(this)\r\n return val\r\n }\r\n}\r\n\r\ninterface PrismScope {\r\n effect(key: string, cb: () => () => void, deps?: unknown[]): void\r\n memo<T>(\r\n key: string,\r\n fn: () => T,\r\n deps: undefined | $IntentionalAny[] | ReadonlyArray<$IntentionalAny>,\r\n ): T\r\n state<T>(key: string, initialValue: T): [T, (val: T) => void]\r\n ref<T>(key: string, initialValue: T): IRef<T>\r\n sub(key: string): PrismScope\r\n source<V>(subscribe: (fn: (val: V) => void) => VoidFn, getValue: () => V): V\r\n}\r\n\r\nclass HotScope implements PrismScope {\r\n constructor(private readonly _hotHandle: HotHandle<unknown>) {}\r\n\r\n protected readonly _refs: Map<string, IRef<unknown>> = new Map()\r\n ref<T>(key: string, initialValue: T): IRef<T> {\r\n let ref = this._refs.get(key)\r\n if (ref !== undefined) {\r\n return ref as $IntentionalAny as IRef<T>\r\n } else {\r\n const ref = {\r\n current: initialValue,\r\n }\r\n this._refs.set(key, ref)\r\n return ref\r\n }\r\n }\r\n isPrismScope = true\r\n\r\n // NOTE probably not a great idea to eager-allocate all of these objects/maps for every scope,\r\n // especially because most wouldn't get used in the majority of cases. However, back when these\r\n // were stored on weakmaps, they were uncomfortable to inspect in the debugger.\r\n readonly subs: Record<string, HotScope> = {}\r\n readonly effects: Map<string, IEffect> = new Map()\r\n\r\n effect(key: string, cb: () => () => void, deps?: unknown[]): void {\r\n let effect = this.effects.get(key)\r\n if (effect === undefined) {\r\n effect = {\r\n cleanup: voidFn,\r\n deps: undefined,\r\n }\r\n this.effects.set(key, effect)\r\n }\r\n\r\n if (depsHaveChanged(effect.deps, deps)) {\r\n effect.cleanup()\r\n\r\n startIgnoringDependencies()\r\n effect.cleanup = safelyRun(cb, voidFn).value\r\n stopIgnoringDependencies()\r\n effect.deps = deps\r\n }\r\n /**\r\n * TODO: we should cleanup dangling effects too.\r\n * Example:\r\n * ```ts\r\n * let i = 0\r\n * prism(() => {\r\n * if (i === 0) prism.effect(\"this effect will only run once\", () => {}, [])\r\n * i++\r\n * })\r\n * ```\r\n */\r\n }\r\n\r\n readonly memos: Map<string, IMemo> = new Map()\r\n\r\n memo<T>(\r\n key: string,\r\n fn: () => T,\r\n deps: undefined | $IntentionalAny[] | ReadonlyArray<$IntentionalAny>,\r\n ): T {\r\n let memo = this.memos.get(key)\r\n if (memo === undefined) {\r\n memo = {\r\n cachedValue: null,\r\n // undefined will always indicate \"deps have changed\", so we set its initial value as such\r\n deps: undefined,\r\n }\r\n this.memos.set(key, memo)\r\n }\r\n\r\n if (depsHaveChanged(memo.deps, deps)) {\r\n startIgnoringDependencies()\r\n\r\n memo.cachedValue = safelyRun(fn, undefined).value\r\n stopIgnoringDependencies()\r\n memo.deps = deps\r\n }\r\n\r\n return memo.cachedValue as $IntentionalAny as T\r\n }\r\n\r\n state<T>(key: string, initialValue: T): [T, (val: T) => void] {\r\n const {value, setValue} = this.memo(\r\n 'state/' + key,\r\n () => {\r\n const value = {current: initialValue}\r\n const setValue = (newValue: T) => {\r\n value.current = newValue\r\n this._hotHandle.forceStale()\r\n }\r\n return {value, setValue}\r\n },\r\n [],\r\n )\r\n\r\n return [value.current, setValue]\r\n }\r\n\r\n sub(key: string): HotScope {\r\n if (!this.subs[key]) {\r\n this.subs[key] = new HotScope(this._hotHandle)\r\n }\r\n return this.subs[key]\r\n }\r\n\r\n cleanupEffects() {\r\n for (const effect of this.effects.values()) {\r\n safelyRun(effect.cleanup, undefined)\r\n }\r\n this.effects.clear()\r\n }\r\n\r\n // Disambiguates multiple `source()` calls within one scope by call order\r\n // (like React hooks), instead of colliding on a single constant key. Reset to\r\n // 0 at the start of every recompute via resetSourceIndices().\r\n private _sourceIndex = 0\r\n\r\n resetSourceIndices(): void {\r\n this._sourceIndex = 0\r\n for (const sub of Object.values(this.subs)) {\r\n sub.resetSourceIndices()\r\n }\r\n }\r\n\r\n source<V>(subscribe: (fn: (val: V) => void) => VoidFn, getValue: () => V): V {\r\n const sourceKey = '$$source/' + this._sourceIndex++\r\n this.effect(\r\n sourceKey,\r\n () => {\r\n const unsub = subscribe(() => {\r\n this._hotHandle.forceStale()\r\n })\r\n return unsub\r\n },\r\n [subscribe],\r\n )\r\n return getValue()\r\n }\r\n}\r\n\r\nfunction cleanupScopeStack(scope: HotScope) {\r\n for (const sub of Object.values(scope.subs)) {\r\n cleanupScopeStack(sub)\r\n }\r\n scope.cleanupEffects()\r\n}\r\n\r\nfunction safelyRun<T, U>(\r\n fn: () => T,\r\n returnValueInCaseOfError: U,\r\n): {ok: true; value: T} | {ok: false; value: U} {\r\n try {\r\n return {value: fn(), ok: true}\r\n } catch (error) {\r\n // Naming this function can allow the error reporter additional context to the user on where this error came from\r\n setTimeout(function PrismReportThrow() {\r\n // ensure that the error gets reported, but does not crash the current execution scope\r\n throw error\r\n })\r\n return {value: returnValueInCaseOfError, ok: false}\r\n }\r\n}\r\n\r\nconst hookScopeStack = new Stack<PrismScope>()\r\n\r\ntype IRef<T> = {\r\n current: T\r\n}\r\n\r\ntype IEffect = {\r\n deps: undefined | unknown[]\r\n cleanup: VoidFn\r\n}\r\n\r\ntype IMemo = {\r\n deps: undefined | unknown[] | ReadonlyArray<unknown>\r\n cachedValue: unknown\r\n}\r\n\r\n/**\r\n * Just like React's `useRef()`, `prism.ref()` allows us to create a prism that holds a reference to some value.\r\n * The only difference is that `prism.ref()` requires a key to be passed into it, whlie `useRef()` doesn't.\r\n * This means that we can call `prism.ref()` in any order, and we can call it multiple times with the same key.\r\n * @param key - The key for the ref. Should be unique inside of the prism.\r\n * @param initialValue - The initial value for the ref.\r\n * @returns `{current: V}` - The ref object.\r\n *\r\n * Note that the ref object will always return its initial value if the prism is cold. It'll only record\r\n * its current value if the prism is hot (and will forget again if the prism goes cold again).\r\n *\r\n * @example\r\n * ```ts\r\n * const pr = prism(() => {\r\n * const ref1 = prism.ref(\"ref1\", 0)\r\n * console.log(ref1.current) // will print 0, and if the prism is hot, it'll print the current value\r\n * ref1.current++ // changing the current value of the ref\r\n * })\r\n * ```\r\n */\r\nfunction ref<T>(key: string, initialValue: T): IRef<T> {\r\n const scope = hookScopeStack.peek()\r\n if (!scope) {\r\n throw new Error(`prism.ref() is called outside of a prism() call.`)\r\n }\r\n\r\n return scope.ref(key, initialValue)\r\n}\r\n\r\n/**\r\n * An effect hook, similar to React's `useEffect()`, but is not sensitive to call order by using `key`.\r\n *\r\n * @param key - the key for the effect. Should be uniqe inside of the prism.\r\n * @param cb - the callback function. Requires returning a cleanup function.\r\n * @param deps - the dependency array\r\n */\r\nfunction effect(key: string, cb: () => () => void, deps?: unknown[]): void {\r\n const scope = hookScopeStack.peek()\r\n if (!scope) {\r\n throw new Error(`prism.effect() is called outside of a prism() call.`)\r\n }\r\n\r\n return scope.effect(key, cb, deps)\r\n}\r\n\r\nfunction depsHaveChanged(\r\n oldDeps: undefined | unknown[] | ReadonlyArray<unknown>,\r\n newDeps: undefined | unknown[] | ReadonlyArray<unknown>,\r\n): boolean {\r\n if (oldDeps === undefined || newDeps === undefined) {\r\n return true\r\n }\r\n\r\n const len = oldDeps.length\r\n if (len !== newDeps.length) return true\r\n\r\n for (let i = 0; i < len; i++) {\r\n if (oldDeps[i] !== newDeps[i]) return true\r\n }\r\n\r\n return false\r\n}\r\n\r\n/**\r\n * `prism.memo()` works just like React's `useMemo()` hook. It's a way to cache the result of a function call.\r\n * The only difference is that `prism.memo()` requires a key to be passed into it, whlie `useMemo()` doesn't.\r\n * This means that we can call `prism.memo()` in any order, and we can call it multiple times with the same key.\r\n *\r\n * @param key - The key for the memo. Should be unique inside of the prism\r\n * @param fn - The function to memoize\r\n * @param deps - The dependency array. Provide `[]` if you want to the value to be memoized only once and never re-calculated.\r\n * @returns The result of the function call\r\n *\r\n * @example\r\n * ```ts\r\n * const pr = prism(() => {\r\n * const memoizedReturnValueOfExpensiveFn = prism.memo(\"memo1\", expensiveFn, [])\r\n * })\r\n * ```\r\n */\r\nfunction memo<T>(\r\n key: string,\r\n fn: () => T,\r\n deps: undefined | $IntentionalAny[] | ReadonlyArray<$IntentionalAny>,\r\n): T {\r\n const scope = hookScopeStack.peek()\r\n if (!scope) {\r\n throw new Error(`prism.memo() is called outside of a prism() call.`)\r\n }\r\n\r\n return scope.memo(key, fn, deps)\r\n}\r\n\r\n/**\r\n * A state hook, similar to react's `useState()`.\r\n *\r\n * @param key - the key for the state\r\n * @param initialValue - the initial value\r\n * @returns [currentState, setState]\r\n *\r\n * @example\r\n * ```ts\r\n * import {prism} from 'dataverse'\r\n *\r\n * // This prism holds the current mouse position and updates when the mouse moves\r\n * const mousePositionD = prism(() => {\r\n * const [pos, setPos] = prism.state<[x: number, y: number]>('pos', [0, 0])\r\n *\r\n * prism.effect(\r\n * 'setupListeners',\r\n * () => {\r\n * const handleMouseMove = (e: MouseEvent) => {\r\n * setPos([e.screenX, e.screenY])\r\n * }\r\n * document.addEventListener('mousemove', handleMouseMove)\r\n *\r\n * return () => {\r\n * document.removeEventListener('mousemove', handleMouseMove)\r\n * }\r\n * },\r\n * [],\r\n * )\r\n *\r\n * return pos\r\n * })\r\n * ```\r\n */\r\nfunction state<T>(key: string, initialValue: T): [T, (val: T) => void] {\r\n const scope = hookScopeStack.peek()\r\n if (!scope) {\r\n throw new Error(`prism.state() is called outside of a prism() call.`)\r\n }\r\n\r\n return scope.state(key, initialValue)\r\n}\r\n\r\n/**\r\n * This is useful to make sure your code is running inside a `prism()` call.\r\n *\r\n * @example\r\n * ```ts\r\n * import {prism} from '@encorejs/dataverse'\r\n *\r\n * function onlyUsefulInAPrism() {\r\n * prism.ensurePrism()\r\n * }\r\n *\r\n * prism(() => {\r\n * onlyUsefulInAPrism() // will run fine\r\n * })\r\n *\r\n * setTimeout(() => {\r\n * onlyUsefulInAPrism() // throws an error\r\n * console.log('This will never get logged')\r\n * }, 0)\r\n * ```\r\n */\r\nfunction ensurePrism(): void {\r\n const scope = hookScopeStack.peek()\r\n if (!scope) {\r\n throw new Error(`The parent function is called outside of a prism() call.`)\r\n }\r\n}\r\n\r\nfunction scope<T>(key: string, fn: () => T): T {\r\n const parentScope = hookScopeStack.peek()\r\n if (!parentScope) {\r\n throw new Error(`prism.scope() is called outside of a prism() call.`)\r\n }\r\n const subScope = parentScope.sub(key)\r\n hookScopeStack.push(subScope)\r\n const ret = safelyRun(fn, undefined).value\r\n hookScopeStack.pop()\r\n return ret as $IntentionalAny as T\r\n}\r\n\r\n/**\r\n * Just an alias for `prism.memo(key, () => prism(fn), deps).getValue()`. It creates a new prism, memoizes it, and returns the value.\r\n * `prism.sub()` is useful when you want to divide your prism into smaller prisms, each of which\r\n * would _only_ recalculate when _certain_ dependencies change. In other words, it's an optimization tool.\r\n *\r\n * @param key - The key for the memo. Should be unique inside of the prism\r\n * @param fn - The function to run inside the prism\r\n * @param deps - The dependency array. Provide `[]` if you want to the value to be memoized only once and never re-calculated.\r\n * @returns The value of the inner prism\r\n */\r\nfunction sub<T>(\r\n key: string,\r\n fn: () => T,\r\n deps: undefined | $IntentionalAny[],\r\n): T {\r\n return memo(key, () => prism(fn), deps).getValue()\r\n}\r\n\r\n/**\r\n * @returns true if the current function is running inside a `prism()` call.\r\n */\r\nfunction inPrism(): boolean {\r\n return !!hookScopeStack.peek()\r\n}\r\n\r\nconst possiblePrismToValue = <P extends Prism<$IntentionalAny> | unknown>(\r\n input: P,\r\n): P extends Prism<infer T> ? T : P => {\r\n if (isPrism(input)) {\r\n return input.getValue() as $IntentionalAny\r\n } else {\r\n return input as $IntentionalAny\r\n }\r\n}\r\n\r\n/**\r\n * `prism.source()` allow a prism to react to changes in some external source (other than other prisms).\r\n * For example, `Atom.pointerToPrism()` uses `prism.source()` to create a prism that reacts to changes in the atom's value.\r\n \r\n * @param subscribe - The prism will call this function as soon as the prism goes hot. This function should return an unsubscribe function function which the prism will call when it goes cold.\r\n * @param getValue - A function that returns the current value of the external source.\r\n * @returns The current value of the source\r\n * \r\n * Example:\r\n * ```ts\r\n * function prismFromInputElement(input: HTMLInputElement): Prism<string> {\r\n * function listen(cb: (value: string) => void) {\r\n * const listener = () => {\r\n * cb(input.value)\r\n * }\r\n * input.addEventListener('input', listener)\r\n * return () => {\r\n * input.removeEventListener('input', listener)\r\n * }\r\n * }\r\n * \r\n * function get() {\r\n * return input.value\r\n * }\r\n * return prism(() => prism.source(listen, get))\r\n * }\r\n * ```\r\n */\r\nfunction source<V>(\r\n subscribe: (fn: (val: V) => void) => VoidFn,\r\n getValue: () => V,\r\n): V {\r\n const scope = hookScopeStack.peek()\r\n if (!scope) {\r\n throw new Error(`prism.source() is called outside of a prism() call.`)\r\n }\r\n\r\n return scope.source(subscribe, getValue)\r\n}\r\n\r\ntype IPrismFn = {\r\n <T>(fn: () => T): Prism<T>\r\n ref: typeof ref\r\n effect: typeof effect\r\n memo: typeof memo\r\n ensurePrism: typeof ensurePrism\r\n state: typeof state\r\n scope: typeof scope\r\n sub: typeof sub\r\n inPrism: typeof inPrism\r\n source: typeof source\r\n}\r\n\r\n/**\r\n * Creates a prism from the passed function that adds all prisms referenced\r\n * in it as dependencies, and reruns the function when these change.\r\n *\r\n * @param fn - The function to rerun when the prisms referenced in it change.\r\n */\r\nconst prism: IPrismFn = (fn) => {\r\n return new PrismInstance(fn)\r\n}\r\n\r\nclass ColdScope implements PrismScope {\r\n effect(key: string, cb: () => () => void, deps?: unknown[]): void {\r\n console.warn(`prism.effect() does not run in cold prisms`)\r\n }\r\n memo<T>(\r\n key: string,\r\n fn: () => T,\r\n deps: any[] | readonly any[] | undefined,\r\n ): T {\r\n return fn()\r\n }\r\n state<T>(key: string, initialValue: T): [T, (val: T) => void] {\r\n return [initialValue, () => {}]\r\n }\r\n ref<T>(key: string, initialValue: T): IRef<T> {\r\n return {current: initialValue}\r\n }\r\n sub(key: string): ColdScope {\r\n return new ColdScope()\r\n }\r\n source<V>(subscribe: (fn: (val: V) => void) => VoidFn, getValue: () => V): V {\r\n return getValue()\r\n }\r\n}\r\n\r\nfunction calculateColdPrism<V>(fn: () => V): V {\r\n const scope = new ColdScope()\r\n hookScopeStack.push(scope)\r\n let value: V\r\n try {\r\n value = fn()\r\n } catch (error) {\r\n console.error(error)\r\n } finally {\r\n const topOfTheStack = hookScopeStack.pop()\r\n if (topOfTheStack !== scope) {\r\n console.warn(\r\n // @todo guide the user to report the bug in an issue\r\n `The Prism hook stack has slipped. This is a bug.`,\r\n )\r\n }\r\n }\r\n return value!\r\n}\r\n\r\nprism.ref = ref\r\nprism.effect = effect\r\nprism.memo = memo\r\nprism.ensurePrism = ensurePrism\r\nprism.state = state\r\nprism.scope = scope\r\nprism.sub = sub\r\nprism.inPrism = inPrism\r\nprism.source = source\r\n\r\nexport default prism\r\n", "import get from 'lodash-es/get'\r\nimport isPlainObject from 'lodash-es/isPlainObject'\r\nimport last from 'lodash-es/last'\r\nimport type {Prism} from './prism/Interface'\r\nimport type {Pointer} from './pointer'\r\nimport {getPointerParts} from './pointer'\r\nimport {isPointer} from './pointer'\r\nimport pointer from './pointer'\r\nimport type {$FixMe, $IntentionalAny} from './types'\r\nimport updateDeep from './utils/updateDeep'\r\nimport prism from './prism/prism'\r\nimport type {PointerToPrismProvider} from './pointerToPrism'\r\n\r\ntype Listener = (newVal: unknown) => void\r\n\r\nenum ValueTypes {\r\n Dict,\r\n Array,\r\n Other,\r\n}\r\n\r\nconst getTypeOfValue = (v: unknown): ValueTypes => {\r\n if (Array.isArray(v)) return ValueTypes.Array\r\n if (isPlainObject(v)) return ValueTypes.Dict\r\n return ValueTypes.Other\r\n}\r\n\r\nconst getKeyOfValue = (\r\n v: unknown,\r\n key: string | number,\r\n vType: ValueTypes = getTypeOfValue(v),\r\n): unknown => {\r\n if (vType === ValueTypes.Dict && typeof key === 'string') {\r\n return (v as $IntentionalAny)[key]\r\n } else if (vType === ValueTypes.Array && isValidArrayIndex(key)) {\r\n return (v as $IntentionalAny)[key]\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst isValidArrayIndex = (key: string | number): boolean => {\r\n const inNumber = typeof key === 'number' ? key : parseInt(key, 10)\r\n return (\r\n !isNaN(inNumber) &&\r\n inNumber >= 0 &&\r\n inNumber < Infinity &&\r\n (inNumber | 0) === inNumber\r\n )\r\n}\r\n\r\nclass Scope {\r\n children: Map<string | number, Scope> = new Map()\r\n identityChangeListeners: Set<Listener> = new Set()\r\n constructor(\r\n readonly _parent: undefined | Scope,\r\n readonly _path: (string | number)[],\r\n ) {}\r\n\r\n addIdentityChangeListener(cb: Listener) {\r\n this.identityChangeListeners.add(cb)\r\n }\r\n\r\n removeIdentityChangeListener(cb: Listener) {\r\n this.identityChangeListeners.delete(cb)\r\n this._checkForGC()\r\n }\r\n\r\n removeChild(key: string | number) {\r\n this.children.delete(key)\r\n this._checkForGC()\r\n }\r\n\r\n getChild(key: string | number) {\r\n return this.children.get(key)\r\n }\r\n\r\n getOrCreateChild(key: string | number) {\r\n let child = this.children.get(key)\r\n if (!child) {\r\n child = child = new Scope(this, this._path.concat([key]))\r\n this.children.set(key, child)\r\n }\r\n return child\r\n }\r\n\r\n _checkForGC() {\r\n if (this.identityChangeListeners.size > 0) return\r\n if (this.children.size > 0) return\r\n\r\n if (this._parent) {\r\n this._parent.removeChild(last(this._path) as string | number)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Wraps an object whose (sub)properties can be individually tracked.\r\n */\r\nexport default class Atom<State> implements PointerToPrismProvider {\r\n private _currentState: State\r\n /**\r\n * @internal\r\n */\r\n readonly $$isPointerToPrismProvider = true\r\n private readonly _rootScope: Scope\r\n /**\r\n * Convenience property that gives you a pointer to the root of the atom.\r\n *\r\n * @remarks\r\n * Equivalent to `pointer({ root: thisAtom, path: [] })`.\r\n */\r\n readonly pointer: Pointer<State> = pointer({root: this as $FixMe, path: []})\r\n\r\n readonly prism: Prism<State> = this.pointerToPrism(\r\n this.pointer,\r\n ) as $IntentionalAny\r\n\r\n constructor(initialState: State) {\r\n this._currentState = initialState\r\n this._rootScope = new Scope(undefined, [])\r\n }\r\n\r\n /**\r\n * Sets the state of the atom.\r\n *\r\n * @param newState - The new state of the atom.\r\n */\r\n set(newState: State) {\r\n const oldState = this._currentState\r\n this._currentState = newState\r\n\r\n this._checkUpdates(this._rootScope, oldState, newState)\r\n }\r\n\r\n /**\r\n * Returns the current state of the atom.\r\n */\r\n get(): State {\r\n return this._currentState\r\n }\r\n\r\n /**\r\n * Returns the value at the given pointer\r\n *\r\n * @param pointerOrFn - A pointer to the desired path. Could also be a function returning a pointer\r\n *\r\n * Example\r\n * ```ts\r\n * const atom = atom({ a: { b: 1 } })\r\n * atom.getByPointer(atom.pointer.a.b) // 1\r\n * atom.getByPointer((p) => p.a.b) // 1\r\n * ```\r\n */\r\n getByPointer<S>(\r\n pointerOrFn: Pointer<S> | ((p: Pointer<State>) => Pointer<S>),\r\n ): S {\r\n const pointer = isPointer(pointerOrFn)\r\n ? pointerOrFn\r\n : (pointerOrFn as $IntentionalAny)(this.pointer)\r\n\r\n const path = getPointerParts(pointer).path\r\n return this._getIn(path) as S\r\n }\r\n\r\n /**\r\n * Gets the state of the atom at `path`.\r\n */\r\n private _getIn(path: (string | number)[]): unknown {\r\n return path.length === 0 ? this.get() : get(this.get(), path)\r\n }\r\n\r\n reduce(fn: (state: State) => State) {\r\n this.set(fn(this.get()))\r\n }\r\n\r\n /**\r\n * Reduces the value at the given pointer\r\n *\r\n * @param pointerOrFn - A pointer to the desired path. Could also be a function returning a pointer\r\n *\r\n * Example\r\n * ```ts\r\n * const atom = atom({ a: { b: 1 } })\r\n * atom.reduceByPointer(atom.pointer.a.b, (b) => b + 1) // atom.get().a.b === 2\r\n * atom.reduceByPointer((p) => p.a.b, (b) => b + 1) // atom.get().a.b === 2\r\n * ```\r\n */\r\n reduceByPointer<S>(\r\n pointerOrFn: Pointer<S> | ((p: Pointer<State>) => Pointer<S>),\r\n reducer: (s: S) => S,\r\n ) {\r\n const pointer = isPointer(pointerOrFn)\r\n ? pointerOrFn\r\n : (pointerOrFn as $IntentionalAny)(this.pointer)\r\n\r\n const path = getPointerParts(pointer).path\r\n const newState = updateDeep(this.get(), path, reducer)\r\n this.set(newState)\r\n }\r\n\r\n /**\r\n * Sets the value at the given pointer\r\n *\r\n * @param pointerOrFn - A pointer to the desired path. Could also be a function returning a pointer\r\n *\r\n * Example\r\n * ```ts\r\n * const atom = atom({ a: { b: 1 } })\r\n * atom.setByPointer(atom.pointer.a.b, 2) // atom.get().a.b === 2\r\n * atom.setByPointer((p) => p.a.b, 2) // atom.get().a.b === 2\r\n * ```\r\n */\r\n setByPointer<S>(\r\n pointerOrFn: Pointer<S> | ((p: Pointer<State>) => Pointer<S>),\r\n val: S,\r\n ) {\r\n this.reduceByPointer(pointerOrFn, () => val)\r\n }\r\n\r\n private _checkUpdates(scope: Scope, oldState: unknown, newState: unknown) {\r\n if (oldState === newState) return\r\n for (const cb of scope.identityChangeListeners) {\r\n cb(newState)\r\n }\r\n\r\n if (scope.children.size === 0) return\r\n\r\n // @todo we can probably skip checking value types\r\n const oldValueType = getTypeOfValue(oldState)\r\n const newValueType = getTypeOfValue(newState)\r\n\r\n if (oldValueType === ValueTypes.Other && oldValueType === newValueType)\r\n return\r\n\r\n for (const [childKey, childScope] of scope.children) {\r\n const oldChildVal = getKeyOfValue(oldState, childKey, oldValueType)\r\n const newChildVal = getKeyOfValue(newState, childKey, newValueType)\r\n this._checkUpdates(childScope, oldChildVal, newChildVal)\r\n }\r\n }\r\n\r\n private _getOrCreateScopeForPath(path: (string | number)[]): Scope {\r\n let curScope = this._rootScope\r\n for (const pathEl of path) {\r\n curScope = curScope.getOrCreateChild(pathEl)\r\n }\r\n return curScope\r\n }\r\n\r\n /**\r\n * Adds a listener that will be called whenever the value at the given pointer changes.\r\n * @param pointer - The pointer to listen to\r\n * @param cb - The callback to call when the value changes\r\n * @returns A function that can be called to unsubscribe from the listener\r\n *\r\n * **NOTE** Unlike {@link prism}s, `onChangeByPointer` and `onChange()` are traditional event listeners. They don't\r\n * provide any of the benefits of prisms. They don't compose, they can't be coordinated via a Ticker, their derivations\r\n * aren't cached, etc. You're almost always better off using a prism (which will internally use `onChangeByPointer`).\r\n *\r\n * ```ts\r\n * const a = atom({foo: 1})\r\n * const unsubscribe = a.onChangeByPointer(a.pointer.foo, (v) => {\r\n * console.log('foo changed to', v)\r\n * })\r\n * a.setByPointer(a.pointer.foo, 2) // logs 'foo changed to 2'\r\n * a.set({foo: 3}) // logs 'foo changed to 3'\r\n * unsubscribe()\r\n * ```\r\n */\r\n onChangeByPointer = <S>(\r\n pointerOrFn: Pointer<S> | ((p: Pointer<State>) => Pointer<S>),\r\n cb: (v: S) => void,\r\n ): (() => void) => {\r\n const pointer = isPointer(pointerOrFn)\r\n ? pointerOrFn\r\n : (pointerOrFn as $IntentionalAny)(this.pointer)\r\n const {path} = getPointerParts(pointer)\r\n const scope = this._getOrCreateScopeForPath(path)\r\n scope.identityChangeListeners.add(cb as $IntentionalAny)\r\n const unsubscribe = () => {\r\n scope.identityChangeListeners.delete(cb as $IntentionalAny)\r\n }\r\n return unsubscribe\r\n }\r\n\r\n /**\r\n * Adds a listener that will be called whenever the state of the atom changes.\r\n * @param cb - The callback to call when the value changes\r\n * @returns A function that can be called to unsubscribe from the listener\r\n *\r\n * **NOTE** Unlike {@link prism}s, `onChangeByPointer` and `onChange()` are traditional event listeners. They don't\r\n * provide any of the benefits of prisms. They don't compose, they can't be coordinated via a Ticker, their derivations\r\n * aren't cached, etc. You're almost always better off using a prism (which will internally use `onChangeByPointer`).\r\n *\r\n * ```ts\r\n * const a = atom({foo: 1})\r\n * const unsubscribe = a.onChange((v) => {\r\n * console.log('a changed to', v)\r\n * })\r\n * a.set({foo: 3}) // logs 'a changed to {foo: 3}'\r\n * unsubscribe()\r\n * ```\r\n */\r\n onChange(cb: (v: State) => void): () => void {\r\n return this.onChangeByPointer(this.pointer, cb)\r\n }\r\n\r\n /**\r\n * Returns a new prism of the value at the provided path.\r\n *\r\n * @param pointer - The path to create the prism at.\r\n *\r\n * ```ts\r\n * const pr = atom({ a: { b: 1 } }).pointerToPrism(atom.pointer.a.b)\r\n * pr.getValue() // 1\r\n * ```\r\n */\r\n pointerToPrism<P>(pointer: Pointer<P>): Prism<P> {\r\n const {path} = getPointerParts(pointer)\r\n const subscribe = (listener: (val: unknown) => void) =>\r\n this.onChangeByPointer(pointer, listener)\r\n\r\n const getValue = () => this._getIn(path)\r\n\r\n return prism(() => {\r\n return prism.source(subscribe, getValue)\r\n }) as Prism<P>\r\n }\r\n}\r\n", "import type {Prism} from './prism/Interface'\r\nimport type {Pointer, PointerType} from './pointer'\r\nimport {getPointerMeta} from './pointer'\r\nimport type {$IntentionalAny} from './types'\r\n\r\nconst identifyPrismWeakMap = new WeakMap<{}, Prism<unknown>>()\r\n\r\n/**\r\n * Interface for objects that can provide a prism at a certain path.\r\n */\r\nexport interface PointerToPrismProvider {\r\n /**\r\n * @internal\r\n * Future: We could consider using a `Symbol.for(\"dataverse/PointerToPrismProvider\")` as a key here, similar to\r\n * how {@link Iterable} works for `of`.\r\n */\r\n readonly $$isPointerToPrismProvider: true\r\n /**\r\n * Returns a prism of the value at the provided pointer.\r\n */\r\n pointerToPrism<P>(pointer: Pointer<P>): Prism<P>\r\n}\r\n\r\nexport function isPointerToPrismProvider(\r\n val: unknown,\r\n): val is PointerToPrismProvider {\r\n return (\r\n typeof val === 'object' &&\r\n val !== null &&\r\n (val as $IntentionalAny)['$$isPointerToPrismProvider'] === true\r\n )\r\n}\r\n\r\n/**\r\n * Returns a prism of the value at the provided pointer. Prisms are\r\n * cached per pointer.\r\n *\r\n * @param pointer - The pointer to return the prism at.\r\n */\r\n\r\nexport const pointerToPrism = <P extends PointerType<$IntentionalAny>>(\r\n pointer: P,\r\n): Prism<P extends PointerType<infer T> ? T : void> => {\r\n const meta = getPointerMeta(pointer)\r\n\r\n let prismInstance = identifyPrismWeakMap.get(meta)\r\n if (!prismInstance) {\r\n const root = meta.root\r\n if (!isPointerToPrismProvider(root)) {\r\n throw new Error(\r\n `Cannot run pointerToPrism() on a pointer whose root is not an PointerToPrismProvider`,\r\n )\r\n }\r\n prismInstance = root.pointerToPrism(pointer as $IntentionalAny)\r\n identifyPrismWeakMap.set(meta, prismInstance)\r\n }\r\n return prismInstance as $IntentionalAny\r\n}\r\n", "import type {Prism} from './prism/Interface'\r\nimport {isPrism} from './prism/Interface'\r\nimport type {PointerType} from './pointer'\r\nimport {isPointer} from './pointer'\r\nimport type {$IntentionalAny} from './types'\r\nimport {pointerToPrism} from './pointerToPrism'\r\n\r\n/**\r\n * Convenience function that returns a plain value from its argument, whether it\r\n * is a pointer, a prism or a plain value itself.\r\n *\r\n * @remarks\r\n * For pointers, the value is returned by first creating a prism, so it is\r\n * reactive e.g. when used in a `prism`.\r\n *\r\n * @param input - The argument to return a value from.\r\n */\r\n\r\nexport const val = <\r\n P extends\r\n | PointerType<$IntentionalAny>\r\n | Prism<$IntentionalAny>\r\n | undefined\r\n | null,\r\n>(\r\n input: P,\r\n): P extends PointerType<infer T>\r\n ? T\r\n : P extends Prism<infer T>\r\n ? T\r\n : P extends undefined | null\r\n ? P\r\n : unknown => {\r\n if (isPointer(input)) {\r\n return pointerToPrism(input).getValue() as $IntentionalAny\r\n } else if (isPrism(input)) {\r\n return input.getValue() as $IntentionalAny\r\n } else {\r\n return input as $IntentionalAny\r\n }\r\n}\r\n", "type ICallback = (t: number) => void\r\n\r\n/**\r\n * The number of ticks that can pass without any scheduled callbacks before the Ticker goes dormant. This is to prevent\r\n * the Ticker from staying active forever, even if there are no scheduled callbacks.\r\n *\r\n * Perhaps counting ticks vs. time is not the best way to do this. But it's a start.\r\n */\r\nexport const EMPTY_TICKS_BEFORE_GOING_DORMANT = 60 /*fps*/ * 3 /*seconds*/ // on a 60fps screen, 3 seconds should pass before the ticker goes dormant\r\n\r\n/**\r\n * The Ticker class helps schedule callbacks. Scheduled callbacks are executed per tick. Ticks can be triggered by an\r\n * external scheduling strategy, e.g. a raf.\r\n */\r\nexport default class Ticker {\r\n private _scheduledForThisOrNextTick: Set<ICallback>\r\n private _scheduledForNextTick: Set<ICallback>\r\n private _timeAtCurrentTick: number\r\n private _ticking: boolean = false\r\n\r\n /**\r\n * Whether the Ticker is dormant\r\n */\r\n private _dormant: boolean = true\r\n\r\n private _numberOfDormantTicks = 0\r\n\r\n /**\r\n * Whether the Ticker is dormant\r\n */\r\n get dormant(): boolean {\r\n return this._dormant\r\n }\r\n /**\r\n * Counts up for every tick executed.\r\n * Internally, this is used to measure ticks per second.\r\n *\r\n * This is \"public\" to TypeScript, because it's a tool for performance measurements.\r\n * Consider this as experimental, and do not rely on it always being here in future releases.\r\n */\r\n public __ticks = 0\r\n\r\n constructor(\r\n private _conf?: {\r\n /**\r\n * This is called when the Ticker goes dormant.\r\n */\r\n onDormant?: () => void\r\n /**\r\n * This is called when the Ticker goes active.\r\n */\r\n onActive?: () => void\r\n },\r\n ) {\r\n this._scheduledForThisOrNextTick = new Set()\r\n this._scheduledForNextTick = new Set()\r\n this._timeAtCurrentTick = 0\r\n }\r\n\r\n /**\r\n * Registers for fn to be called either on this tick or the next tick.\r\n *\r\n * If `onThisOrNextTick()` is called while `Ticker.tick()` is running, the\r\n * side effect _will_ be called within the running tick. If you don't want this\r\n * behavior, you can use `onNextTick()`.\r\n *\r\n * Note that `fn` will be added to a `Set()`. Which means, if you call `onThisOrNextTick(fn)`\r\n * with the same fn twice in a single tick, it'll only run once.\r\n *\r\n * @param fn - The function to be registered.\r\n *\r\n * @see offThisOrNextTick\r\n */\r\n onThisOrNextTick(fn: ICallback) {\r\n this._scheduledForThisOrNextTick.add(fn)\r\n if (this._dormant) {\r\n this._goActive()\r\n }\r\n }\r\n\r\n /**\r\n * Registers a side effect to be called on the next tick.\r\n *\r\n * @param fn - The function to be registered.\r\n *\r\n * @see onThisOrNextTick\r\n * @see offNextTick\r\n */\r\n onNextTick(fn: ICallback) {\r\n this._scheduledForNextTick.add(fn)\r\n if (this._dormant) {\r\n this._goActive()\r\n }\r\n }\r\n\r\n /**\r\n * De-registers a fn to be called either on this tick or the next tick.\r\n *\r\n * @param fn - The function to be de-registered.\r\n *\r\n * @see onThisOrNextTick\r\n */\r\n offThisOrNextTick(fn: ICallback) {\r\n this._scheduledForThisOrNextTick.delete(fn)\r\n }\r\n\r\n /**\r\n * De-registers a fn to be called on the next tick.\r\n *\r\n * @param fn - The function to be de-registered.\r\n *\r\n * @see onNextTick\r\n */\r\n offNextTick(fn: ICallback) {\r\n this._scheduledForNextTick.delete(fn)\r\n }\r\n\r\n /**\r\n * The time at the start of the current tick if there is a tick in progress, otherwise defaults to\r\n * `performance.now()`.\r\n */\r\n get time() {\r\n if (this._ticking) {\r\n return this._timeAtCurrentTick\r\n } else return performance.now()\r\n }\r\n\r\n private _goActive() {\r\n if (!this._dormant) return\r\n this._dormant = false\r\n this._conf?.onActive?.()\r\n }\r\n\r\n private _goDormant() {\r\n if (this._dormant) return\r\n this._dormant = true\r\n this._numberOfDormantTicks = 0\r\n this._conf?.onDormant?.()\r\n }\r\n\r\n /**\r\n * Triggers a tick which starts executing the callbacks scheduled for this tick.\r\n *\r\n * @param t - The time at the tick.\r\n *\r\n * @see onThisOrNextTick\r\n * @see onNextTick\r\n */\r\n tick(t: number = performance.now()) {\r\n if (process.env.NODE_ENV === 'development') {\r\n if (!(this instanceof Ticker)) {\r\n throw new Error(\r\n 'ticker.tick must be called while bound to the ticker. As in, \"ticker.tick(time)\" or \"requestAnimationFrame((t) => ticker.tick(t))\" for performance.',\r\n )\r\n }\r\n }\r\n\r\n this.__ticks++\r\n\r\n if (!this._dormant) {\r\n if (\r\n this._scheduledForNextTick.size === 0 &&\r\n this._scheduledForThisOrNextTick.size === 0\r\n ) {\r\n this._numberOfDormantTicks++\r\n if (this._numberOfDormantTicks >= EMPTY_TICKS_BEFORE_GOING_DORMANT) {\r\n this._goDormant()\r\n return\r\n }\r\n } else {\r\n // Real work runs this tick, so reset the dormancy counter: dormancy is\r\n // meant to trigger after EMPTY_TICKS_BEFORE_GOING_DORMANT *consecutive*\r\n // idle ticks, not cumulative ones.\r\n this._numberOfDormantTicks = 0\r\n }\r\n }\r\n\r\n this._ticking = true\r\n this._timeAtCurrentTick = t\r\n for (const v of this._scheduledForNextTick) {\r\n this._scheduledForThisOrNextTick.add(v)\r\n }\r\n\r\n this._scheduledForNextTick.clear()\r\n this._tick(0)\r\n this._ticking = false\r\n }\r\n\r\n private _tick(iterationNumber: number): void {\r\n const time = this.time\r\n\r\n if (iterationNumber > 10) {\r\n console.warn('_tick() recursing for 10 times')\r\n }\r\n\r\n if (iterationNumber > 100) {\r\n throw new Error(`Maximum recursion limit for _tick()`)\r\n }\r\n\r\n const oldSet = this._scheduledForThisOrNextTick\r\n this._scheduledForThisOrNextTick = new Set()\r\n for (const fn of oldSet) {\r\n fn(time)\r\n }\r\n\r\n if (this._scheduledForThisOrNextTick.size > 0) {\r\n return this._tick(iterationNumber + 1)\r\n }\r\n }\r\n}\r\n", "export interface Deferred<PromiseType> {\r\n resolve: (d: PromiseType) => void\r\n reject: (d: unknown) => void\r\n promise: Promise<PromiseType>\r\n status: 'pending' | 'resolved' | 'rejected'\r\n currentValue: PromiseType | undefined\r\n}\r\n\r\n/**\r\n * A simple imperative API for resolving/rejecting a promise.\r\n *\r\n * Example:\r\n * ```ts\r\n * function doSomethingAsync() {\r\n * const deferred = defer()\r\n *\r\n * setTimeout(() => {\r\n * if (Math.random() > 0.5) {\r\n * deferred.resolve('success')\r\n * } else {\r\n * deferred.reject('Something went wrong')\r\n * }\r\n * }, 1000)\r\n *\r\n * // we're just returning the promise, so that the caller cannot resolve/reject it\r\n * return deferred.promise\r\n * }\r\n *\r\n * ```\r\n */\r\nexport function defer<PromiseType>(): Deferred<PromiseType> {\r\n let resolve: (d: PromiseType) => void\r\n let reject: (d: unknown) => void\r\n const promise = new Promise<PromiseType>((rs, rj) => {\r\n resolve = (v) => {\r\n rs(v)\r\n deferred.status = 'resolved'\r\n deferred.currentValue = v\r\n }\r\n reject = (v) => {\r\n rj(v)\r\n deferred.status = 'rejected'\r\n }\r\n })\r\n\r\n const deferred: Deferred<PromiseType> = {\r\n resolve: resolve!,\r\n reject: reject!,\r\n promise,\r\n status: 'pending',\r\n currentValue: undefined,\r\n }\r\n return deferred\r\n}\r\n", "import type {Prism} from '@encorejs/dataverse'\r\nimport {defer} from '@encorejs/utils/defer'\r\n\r\n/**\r\n * Returns a promise that resolved when the given prism's value satisfies the given condition.\r\n * Example:\r\n * ```ts\r\n * const prism = prism(...)\r\n * const value = await waitForPrism(prism, (value) => value % 2 === 0)\r\n * ```\r\n */\r\nexport default async function waitForPrism<T>(\r\n pr: Prism<T>,\r\n condition: (value: T) => boolean,\r\n): Promise<T> {\r\n const deferred = defer<T>()\r\n const resolve = (value: T) => {\r\n unsub()\r\n deferred.resolve(value)\r\n }\r\n const check = () => {\r\n const value = pr.getValue()\r\n const r = condition(value)\r\n if (r === true) {\r\n resolve(value)\r\n } else if (typeof r !== 'boolean') {\r\n console.error(`waitForPrism condition must return a boolean, got ${r}`)\r\n }\r\n }\r\n const unsub = pr.onStale(check)\r\n check()\r\n\r\n return deferred.promise\r\n}\r\n", "import type {Pointer, Prism} from '@encorejs/dataverse'\r\nimport {isPointer, prism, val} from '@encorejs/dataverse'\r\nimport type {$IntentionalAny} from './types'\r\n\r\n/**\r\n * A utility function for subscribing to a prism and debouncing the callback. It makes sure that only one callback is running at a time.\r\n *\r\n * @param p - a prism or a pointer (which will be turned into a prism)\r\n * @param cb - a callback that will be called when the prism changes. This callback should return a promise. The promise will be awaited before the next call to the callback.\r\n * @returns a function that stops the subscription\r\n */\r\nexport function subscribeDebounced<T>(\r\n p: Prism<T> | Pointer<T>,\r\n cb: (val: T) => Promise<void>,\r\n): () => void {\r\n const pr: Prism<T> = isPointer(p)\r\n ? prism(() => val(p))\r\n : (p as $IntentionalAny)\r\n\r\n let state: 'idle' | 'processing' | 'queued' = 'idle'\r\n let lastValue: T | {} = {} // the {} is unique, so it'll never be equal to anything else\r\n const onStale = async () => {\r\n if (state === 'queued') return\r\n if (state === 'processing') {\r\n state = 'queued'\r\n return\r\n }\r\n const newValue = pr.getValue()\r\n if (newValue === lastValue) return\r\n lastValue = newValue\r\n state = 'processing'\r\n\r\n try {\r\n await cb(newValue)\r\n } catch (error) {\r\n console.error(error)\r\n } finally {\r\n // @ts-ignore\r\n if (state === 'queued') {\r\n state = 'idle'\r\n void onStale()\r\n } else {\r\n state = 'idle'\r\n }\r\n }\r\n }\r\n const stop = pr.onStale(() => onStale())\r\n void onStale()\r\n\r\n return stop\r\n}\r\n", "import type {\r\n $IntentionalAny,\r\n AllPeersPresenceState,\r\n BackGetUpdateSinceClockResult,\r\n SessionState,\r\n FullSnapshot,\r\n SaazBackInterface,\r\n Schema,\r\n TempTransaction,\r\n TempTransactionApi,\r\n Transaction,\r\n ValidOpSnapshot,\r\n} from '../types'\r\nimport type {ValidGenerators, EditorDefinitionToEditorInvocable} from '../types'\r\nimport type {OnDiskSnapshot} from '../types'\r\nimport type {FrontStorageAdapter} from '../types'\r\nimport {\r\n applyOptimisticUpdateToState,\r\n recordInvokations,\r\n} from '../shared/transactions'\r\nimport {FrontStorage} from './FrontStorage'\r\nimport {ensureStateIsUptodate} from '../shared/utils'\r\nimport {debounce} from 'lodash-es'\r\nimport type {Prism} from '@encorejs/dataverse'\r\nimport {Atom, prism, val} from '@encorejs/dataverse'\r\nimport waitForPrism from '@encorejs/utils/waitForPrism'\r\nimport {subscribeDebounced} from '@encorejs/utils/subscribeDebounced'\r\nimport fastDeepEqual from 'fast-deep-equal'\r\nimport {diff} from 'jest-diff'\r\nimport type {Ops} from '../rogue'\r\nimport {jsonFromCell, makeDraft} from '../rogue'\r\nimport memoizeFn from '@encorejs/utils/memoizeFn'\r\nimport {nanoid} from 'nanoid'\r\nimport {defer} from '@encorejs/utils/defer'\r\nimport type {VoidFn} from '@encorejs/utils/types'\r\n\r\nconst emptyObject = {}\r\nconst MAX_UNDO_STACK_SIZE = 1000\r\nconst PEERID_LENGTH = 32\r\nconst LOCK_PREFIX = 'theatrejs-saaz-closed-session-lock/'\r\n\r\ntype UndoStackItem = {\r\n forwardOps: Ops\r\n backwardOps: Ops\r\n}\r\n\r\ntype SessionLock = {\r\n peerId: string\r\n unlock: VoidFn\r\n}\r\n\r\ntype AtomState<OpSnapshot extends ValidOpSnapshot, CellShape extends {}> = {\r\n /**\r\n * The queue of optimistic updates that have not been acknowledged by the backend yet. As soon as\r\n * the backend acknowledges an update, it will be removed from this queue.\r\n */\r\n optimisticUpdatesQueue: Transaction[]\r\n sessionState: SessionState<OpSnapshot> | null\r\n emptySnapshot: FullSnapshot<OpSnapshot>\r\n tempTransactions: TempTransaction[]\r\n allPeersPresenceState: AllPeersPresenceState\r\n initialized: boolean\r\n /**\r\n * This is a mirror of the frontend state _as it is stored_ on the front storage.\r\n * We can use this to determine if the front storage is up to date.\r\n */\r\n frontStorageStateMirror: {\r\n backendState: SessionState<OpSnapshot> | null\r\n optimisticUpdatesQueue: Transaction[]\r\n }\r\n peerClock: number\r\n closedSessions: ClosedSession[]\r\n undoRedo: {\r\n // the stack is a list of transactions that can be undone. The first item is the most recent transaction.\r\n stack: UndoStackItem[]\r\n // 0 means no undo has been called since the last transaction.\r\n cursor: number\r\n }\r\n}\r\n\r\nexport class SaazFront<\r\n OpSnapshot extends ValidOpSnapshot,\r\n Editors extends {},\r\n Generators extends ValidGenerators,\r\n CellShape extends {} = {},\r\n> {\r\n /**\r\n * Using an atom here so we can react to changes to its state\r\n */\r\n private readonly _atom: Atom<AtomState<OpSnapshot, CellShape>>\r\n /**\r\n * The initial snapshot that was saved to disk, and provided as opts.initialSnapshot to the constructor\r\n */\r\n private readonly _diskSnapshot: OnDiskSnapshot<OpSnapshot> | null\r\n /**\r\n * The peer id of this frontend. It is supposed to be unique per-tab, and globally. If there are more than\r\n * one Saaz instance per tab, then each should have its own peer id. Better to generate this via UUID.\r\n *\r\n * Note that the backend will associate the peerId with the user's account to make sure the peerId cannot\r\n * be stolen.\r\n *\r\n * Each user account may have many peerIds associated with it (the user may have multiple tabs, or multiple devices open at the same time).\r\n *\r\n * The backend will periodically garbage-collect the peerIds that have not been used for a while. In the off-chance that a peerId is garbage-collected\r\n * on the backend but the frontend still has it, the frontend will generate a new peerId and use that instead.\r\n */\r\n private readonly _peerId: string\r\n /**\r\n * The name of the database. This is used to namespace the keys in the storage adapter.\r\n */\r\n private _dbName: string\r\n /**\r\n * The storage adapter that the frontend uses to store its state. The storage is meant to allow the user to work offline\r\n * and be able to close the tab and reopen it later and continue working.\r\n */\r\n private _storage: FrontStorage\r\n /**\r\n * A promise that resolves when the frontend is ready to be used. This is the same as the promise returned by the ready getter.\r\n */\r\n private _initializedPromise: Promise<unknown>\r\n\r\n /**\r\n * The backend that the frontend communicates with. In environments where the backend and the frontend are in the same process,\r\n * then a reference to SaazBack can be passed here. This is useful for testing.\r\n *\r\n * In environments where the backend and the frontend are in different processes (a client/server setup), an object that\r\n * implements `SaazBackInterface` should be passed here. See `@encorejs/sync-server` for a TRPC-based implementation.\r\n */\r\n private _backend: SaazBackInterface\r\n\r\n /**\r\n * The schema includes the shape of the snapshot, a nested object of editors, and a shallow object of generator functions.\r\n */\r\n private readonly _schema: Schema<OpSnapshot, Editors, Generators>\r\n\r\n /**\r\n * A counter that is used to generate unique ids for temp transactions.\r\n */\r\n private _tempTransactionCounter: number = 0\r\n\r\n /**\r\n * A list of functions that will be called when the frontend is destroyed.\r\n */\r\n private _teardownCallbacks: (() => void)[] = []\r\n\r\n /**\r\n * We use dataverse prisms to derive several values from the atom. This makes the reactive parts of the code easier to maintain.\r\n */\r\n private _prisms: {\r\n base: Prism<FullSnapshot<OpSnapshot>>\r\n /**\r\n * The state as it is on the backend, plus all the optimistic updates that have not been acknowledged by the backend yet.\r\n */\r\n optimisticState: Prism<FullSnapshot<OpSnapshot>>\r\n /**\r\n * This is optimisticState (see above), plus the temp transactions.\r\n */\r\n withTemps: Prism<FullSnapshot<OpSnapshot>>\r\n /**\r\n * This is withTemps (see above), plus the temp transactions of all the peers.\r\n */\r\n withPeers: Prism<FullSnapshot<OpSnapshot>>\r\n\r\n /**\r\n * The number of optimistic updates that have not been acknowledged by the backend yet.\r\n * If this is 0, then the backend has received all the updates that the frontend has sent.\r\n * This doesn't mean that the backend has processed all the updates yet.\r\n * It also doesn't mean the frontend has received all the updates from other peers through the backend.\r\n */\r\n countOfUnpushedUpdatesToBackend: Prism<number>\r\n\r\n /**\r\n * A prism that resolves to true if the frontend has synced to _its own storage_. This means\r\n * that if the user closes the tab or the session crashes, and navigates back to the page,\r\n * the frontend will be able to restore its state from the storage.\r\n */\r\n allSyncedToFrontStorage: Prism<boolean>\r\n } = {\r\n base: prism<FullSnapshot<OpSnapshot>>(() => {\r\n return (\r\n val(this._atom.pointer.sessionState.snapshot) ??\r\n val(this._atom.pointer.emptySnapshot)\r\n )\r\n }),\r\n optimisticState: prism<FullSnapshot<OpSnapshot>>(() => {\r\n const base = this._prisms.base.getValue()\r\n let stateSoFar = base\r\n // this may become a bottleneck\r\n const closedSessions = val(this._atom.pointer.closedSessions)\r\n for (const session of closedSessions) {\r\n for (const update of session.optimisticUpdates) {\r\n stateSoFar = this._cachedApplyTransactionToState(\r\n update,\r\n base,\r\n stateSoFar,\r\n )\r\n }\r\n }\r\n\r\n const optimisticUpdates = val(this._atom.pointer.optimisticUpdatesQueue)\r\n\r\n const lastIncorporatedPeerClock =\r\n val(this._atom.pointer.sessionState.lastIncorporatedPeerClock) ?? -1\r\n\r\n for (const update of optimisticUpdates) {\r\n // if the update has already been incorporated into the backend state, skip it (it'll be garbage collected soon)\r\n if (update.peerClock <= lastIncorporatedPeerClock) continue\r\n\r\n stateSoFar = this._cachedApplyTransactionToState(\r\n update,\r\n base,\r\n stateSoFar,\r\n )\r\n }\r\n\r\n return stateSoFar\r\n }),\r\n\r\n withTemps: prism<FullSnapshot<OpSnapshot>>(() => {\r\n let currentState = this._prisms.optimisticState.getValue()\r\n const temps = val(this._atom.pointer.tempTransactions)\r\n for (const temp of temps) {\r\n ;[currentState] = applyOptimisticUpdateToState(\r\n temp,\r\n currentState,\r\n this._schema,\r\n true,\r\n )\r\n }\r\n return currentState\r\n }),\r\n\r\n withPeers: prism<FullSnapshot<OpSnapshot>>(() => {\r\n let currentState = this._prisms.withTemps.getValue()\r\n for (const [peerId, presence] of Object.entries(\r\n val(this._atom.pointer.allPeersPresenceState),\r\n )) {\r\n if (peerId === this._peerId) continue\r\n if (!presence) continue\r\n\r\n for (const temp of presence.tempTransactions) {\r\n ;[currentState] = applyOptimisticUpdateToState(\r\n temp,\r\n currentState,\r\n this._schema,\r\n true,\r\n )\r\n }\r\n }\r\n return currentState\r\n }),\r\n\r\n countOfUnpushedUpdatesToBackend: prism<number>(() => {\r\n return val(this._atom.pointer.optimisticUpdatesQueue).length\r\n }),\r\n\r\n allSyncedToFrontStorage: prism<boolean>(() => {\r\n // if not initialized, then we're not synced\r\n if (!val(this._atom.pointer.initialized)) return false\r\n\r\n // backendClock as of the last time the front communicated with the backend\r\n const backendClock =\r\n val(this._atom.pointer.sessionState.backendClock) ?? -1\r\n // backendClock as of the last time we stored the backend's state in the front storage\r\n const lastStoredBackendClock =\r\n val(\r\n this._atom.pointer.frontStorageStateMirror.backendState.backendClock,\r\n ) ?? -1\r\n\r\n // if we haven't yet stored the backend's state in the front storage, return false\r\n if (backendClock !== lastStoredBackendClock) return false\r\n\r\n // TODO: how about closed sessions?\r\n\r\n const outstandingUpdates = val(this._atom.pointer.optimisticUpdatesQueue)\r\n const storedUpdates = val(\r\n this._atom.pointer.frontStorageStateMirror.optimisticUpdatesQueue,\r\n )\r\n\r\n if (outstandingUpdates.length === 0) {\r\n // there are no outstanding optimistic updates (they're all incorporated into the backend state),\r\n // so we can assume that the front storage is up to date. Note that front storage may not have\r\n // gartbage collected the old updates yet, but that's ok. they'll be garbage collected eventually.\r\n return true\r\n }\r\n\r\n const lastOutstandingUpdate =\r\n outstandingUpdates[outstandingUpdates.length - 1]\r\n const lastStoredUpdate = storedUpdates[storedUpdates.length - 1]\r\n\r\n if (\r\n lastStoredUpdate &&\r\n lastStoredUpdate.peerClock === lastOutstandingUpdate.peerClock\r\n ) {\r\n // the last outstanding update is the same as the last stored update, so we can assume that the front storage is up to date.\r\n return true\r\n } else {\r\n // the front storage has yet to catch up\r\n return false\r\n }\r\n }),\r\n }\r\n\r\n private _caches = {\r\n transactionToState: new WeakMap<\r\n Transaction,\r\n {\r\n before: FullSnapshot<OpSnapshot>\r\n after: FullSnapshot<OpSnapshot>\r\n base: FullSnapshot<OpSnapshot>\r\n }\r\n >(),\r\n }\r\n\r\n constructor(opts: {\r\n schema: Schema<OpSnapshot, Editors, Generators, CellShape>\r\n backend: SaazBackInterface\r\n diskSnapshot?: OnDiskSnapshot<OpSnapshot>\r\n peerId?: string\r\n dbName: string\r\n storageAdapter: FrontStorageAdapter\r\n /**\r\n * If true (default), the frontend will keep the prisms hot. This is a perf optimization\r\n */\r\n keepPrismsHot?: boolean\r\n }) {\r\n if (opts.diskSnapshot) {\r\n this._diskSnapshot = {\r\n ...opts.diskSnapshot,\r\n snapshot: ensureStateIsUptodate(\r\n opts.diskSnapshot.snapshot,\r\n opts.schema,\r\n ),\r\n }\r\n } else {\r\n this._diskSnapshot = null\r\n }\r\n this._atom = new Atom<AtomState<OpSnapshot, CellShape>>({\r\n optimisticUpdatesQueue: [],\r\n emptySnapshot: ensureStateIsUptodate(null, opts.schema),\r\n sessionState: null,\r\n tempTransactions: [],\r\n allPeersPresenceState: emptyObject,\r\n initialized: false,\r\n frontStorageStateMirror: {\r\n backendState: null,\r\n optimisticUpdatesQueue: [],\r\n },\r\n peerClock: -1,\r\n closedSessions: [],\r\n undoRedo: {\r\n stack: [],\r\n cursor: 0,\r\n },\r\n })\r\n\r\n this._initializedPromise = waitForPrism(\r\n prism(() => val(this._atom.pointer.initialized)),\r\n (v) => v === true,\r\n )\r\n\r\n if (opts.keepPrismsHot !== false) {\r\n this._teardownCallbacks.push(this._prisms.withPeers.keepHot())\r\n }\r\n\r\n this._schema = opts.schema\r\n this._peerId = opts.peerId ?? nanoid(PEERID_LENGTH)\r\n this._backend = opts.backend\r\n this._dbName = opts.dbName\r\n this._storage = new FrontStorage(this._dbName, opts.storageAdapter)\r\n\r\n void this._init()\r\n }\r\n\r\n private async _init() {\r\n await this._loadClosedSessions()\r\n\r\n // The most recent backend state that one of the closed sessions has cached.\r\n // We can use this until we get the first update from the backend\r\n const cachedBackendState: SessionState<unknown> | undefined =\r\n await this._storage.transaction(async (t) =>\r\n t.getMostRecentlySyncedSessionState(),\r\n )\r\n\r\n // this will create the database and start a transaction\r\n await this._storage.transaction(async (t) => {\r\n const initialSnapshot = this._diskSnapshot\r\n if (!cachedBackendState) {\r\n // there are no closed/crashed sessions that have a backend state.\r\n this._setSessionState({\r\n backendClock: initialSnapshot?.clock ?? null,\r\n lastIncorporatedPeerClock: null,\r\n lastSyncTime: null,\r\n snapshot: initialSnapshot?.snapshot ?? null,\r\n peerId: this._peerId,\r\n })\r\n } else {\r\n if (initialSnapshot) {\r\n // TODO\r\n throw new Error(`Not implemented`)\r\n } else {\r\n this._atom.setByPointer((p) => p.sessionState, {\r\n lastSyncTime: null,\r\n backendClock: cachedBackendState.backendClock ?? null,\r\n lastIncorporatedPeerClock: null,\r\n peerId: this._peerId,\r\n snapshot: ensureStateIsUptodate<OpSnapshot>(\r\n cachedBackendState.snapshot as $IntentionalAny,\r\n this._schema,\r\n ),\r\n })\r\n }\r\n }\r\n\r\n this._atom.setByPointer((p) => p.initialized, true)\r\n })\r\n\r\n this._teardownCallbacks.push(\r\n this._subscribeToBackend(),\r\n this._reflectBackendStateToStorage(),\r\n this._reflectOptimisticUpdatesToStorage(),\r\n this._reflectPresenceToBackend(),\r\n this._removeStalePeerPresenceStates(),\r\n this._reflectUpdatesToBackend(),\r\n this._gcClosedSessions(),\r\n )\r\n }\r\n\r\n private async _loadClosedSessions() {\r\n // in case there are crashed/closed sesions that haven't synced\r\n // with backend yet, let's take them over\r\n const closedSessionsLocks = await this._acquireLocksOnClosedSessions()\r\n\r\n const closedSessions: ClosedSession[] = await this._storage.transaction(\r\n async (t) =>\r\n await Promise.all(\r\n closedSessionsLocks.map(\r\n async (closedSessionLock): Promise<ClosedSession> => {\r\n return {\r\n optimisticUpdates: await t.getOptimisticUpdates(\r\n closedSessionLock.peerId,\r\n ),\r\n peerId: closedSessionLock.peerId,\r\n lastIncorporatedPeerClock: null,\r\n }\r\n },\r\n ),\r\n ),\r\n )\r\n\r\n this._atom.setByPointer((p) => p.closedSessions, closedSessions)\r\n }\r\n\r\n private async _acquireLocksOnClosedSessions(): Promise<Array<SessionLock>> {\r\n const allPeerIds: string[] = await this._storage.transaction(async (t) =>\r\n t.getAllExistingSessionIds(),\r\n )\r\n\r\n const all: Array<SessionLock | undefined> = await Promise.all(\r\n allPeerIds.map(async (peerId) => {\r\n try {\r\n const d = defer<undefined | SessionLock>()\r\n void navigator.locks.request(\r\n LOCK_PREFIX + peerId,\r\n {\r\n mode: 'exclusive',\r\n ifAvailable: true,\r\n steal: false,\r\n },\r\n async (lock) => {\r\n if (!lock) {\r\n d.resolve(undefined)\r\n return\r\n }\r\n\r\n const unlockDeferred = defer<void>()\r\n\r\n let locked = true\r\n\r\n d.resolve({\r\n peerId,\r\n unlock: () => {\r\n if (!locked) return\r\n locked = false\r\n unlockDeferred.resolve()\r\n },\r\n })\r\n\r\n await unlockDeferred.promise\r\n },\r\n )\r\n\r\n return d.promise\r\n } catch (error) {\r\n return undefined\r\n }\r\n }),\r\n )\r\n\r\n return all.filter((v): v is SessionLock => !!v)\r\n }\r\n\r\n teardown(): void {\r\n for (const cb of this._teardownCallbacks) {\r\n cb()\r\n }\r\n this._teardownCallbacks.length = 0\r\n }\r\n\r\n private _removeStalePeerPresenceStates() {\r\n const schedule = debounce(() => {\r\n this._atom.setByPointer((p) => p.allPeersPresenceState, emptyObject)\r\n }, 1000 * 15)\r\n return this._atom.onChangeByPointer(\r\n (p) => p.allPeersPresenceState,\r\n schedule,\r\n )\r\n }\r\n\r\n private _reflectPresenceToBackend() {\r\n let lastTempTransactions: TempTransaction[] = []\r\n let lastUpdateSent: number = 0\r\n\r\n return subscribeDebounced(\r\n this._atom.pointer.tempTransactions,\r\n async (tempTransactions) => {\r\n const now = Date.now()\r\n if (\r\n !fastDeepEqual(tempTransactions, lastTempTransactions) ||\r\n now - lastUpdateSent > 1000 * 5\r\n ) {\r\n lastTempTransactions = tempTransactions\r\n lastUpdateSent = now\r\n void this._backend.updatePresence({\r\n peerId: this._peerId,\r\n presence: {tempTransactions},\r\n })\r\n }\r\n await new Promise((resolve) => setTimeout(resolve, 30))\r\n },\r\n )\r\n }\r\n\r\n private _reflectUpdatesToBackend() {\r\n const p = prism<{\r\n peerId: string\r\n // lastIncorporatedPeerClock: number | null\r\n updates: Transaction[]\r\n }>(() => {\r\n const closedSessions = val(this._atom.pointer.closedSessions)\r\n for (const closedSession of closedSessions) {\r\n const updatesLeftToPush = closedSession.optimisticUpdates.filter(\r\n (update) =>\r\n update.peerClock > (closedSession.lastIncorporatedPeerClock ?? -1),\r\n )\r\n if (updatesLeftToPush.length > 0) {\r\n return {\r\n peerId: closedSession.peerId,\r\n lastIncorporatedPeerClock:\r\n closedSession.lastIncorporatedPeerClock ?? -1,\r\n updates: updatesLeftToPush,\r\n }\r\n }\r\n }\r\n\r\n // no closed sessions left to sync. let's sync the current session\r\n\r\n const lastIncorporatedPeerClock =\r\n val(this._atom.pointer.sessionState.lastIncorporatedPeerClock) ?? -1\r\n\r\n const updatesLeftToPush = val(\r\n this._atom.pointer.optimisticUpdatesQueue,\r\n ).filter((update) => update.peerClock > lastIncorporatedPeerClock)\r\n\r\n return {\r\n updates: updatesLeftToPush,\r\n lastIncorporatedPeerClock,\r\n peerId: this._peerId,\r\n }\r\n })\r\n\r\n return subscribeDebounced(p, async ({updates, peerId}) => {\r\n if (updates.length === 0) return\r\n const backendClock = val(this._atom.pointer.sessionState.backendClock) as\r\n | number\r\n | null\r\n\r\n try {\r\n const res = await this._backend.applyUpdates({\r\n backendClock,\r\n peerId,\r\n updates,\r\n })\r\n\r\n if (res.ok) {\r\n this._processBackendUpdate(res)\r\n } else {\r\n console.error(res.error)\r\n throw new Error('Backend rejected optimistic update')\r\n }\r\n } catch (errs) {\r\n console.error(errs)\r\n }\r\n })\r\n }\r\n\r\n private _processBackendUpdate(s: BackGetUpdateSinceClockResult) {\r\n const originalBackendState = this._atom.get().sessionState\r\n if (!originalBackendState) {\r\n throw new Error('backend state not initialized')\r\n }\r\n\r\n if (!s.hasUpdates) {\r\n this._setSessionState({\r\n ...originalBackendState,\r\n lastSyncTime: Date.now(),\r\n peerId: s.peerId,\r\n lastIncorporatedPeerClock: s.lastIncorporatedPeerClock,\r\n })\r\n return\r\n } else {\r\n const {snapshot} = s\r\n if (snapshot.type !== 'Snapshot') {\r\n throw new Error('Non-snapshot updates not implemented')\r\n }\r\n this._setSessionState({\r\n backendClock: s.clock,\r\n lastIncorporatedPeerClock: s.lastIncorporatedPeerClock,\r\n lastSyncTime: Date.now(),\r\n snapshot: snapshot.value,\r\n peerId: s.peerId,\r\n })\r\n }\r\n }\r\n\r\n private _reflectBackendStateToStorage() {\r\n return subscribeDebounced(\r\n this._atom.pointer.sessionState,\r\n async (backendState) => {\r\n if (!backendState) return\r\n\r\n try {\r\n await this._storage.transaction(async (t) => {\r\n await t.setSessionState(backendState, this._peerId)\r\n })\r\n this._atom.setByPointer(\r\n (p) => p.frontStorageStateMirror.backendState,\r\n backendState,\r\n )\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n },\r\n )\r\n }\r\n\r\n private _gcClosedSessions() {\r\n return subscribeDebounced(\r\n this._atom.pointer.closedSessions,\r\n async (closedSessions) => {\r\n const sessionsWithNoUpdates = closedSessions.filter(\r\n (s) => s.optimisticUpdates.length === 0,\r\n )\r\n for (const emptySession of sessionsWithNoUpdates) {\r\n this._atom.reduceByPointer(\r\n (p) => p.closedSessions,\r\n (a) => a.filter((c) => c.peerId !== emptySession.peerId),\r\n )\r\n await this._storage.transaction(async (t) => {\r\n await t.deleteSession(emptySession.peerId)\r\n })\r\n void this._backend.closePeer({peerId: emptySession.peerId})\r\n }\r\n },\r\n )\r\n }\r\n\r\n private _reflectOptimisticUpdatesToStorage() {\r\n return subscribeDebounced(\r\n this._atom.pointer.optimisticUpdatesQueue,\r\n async (memory) => {\r\n const last =\r\n this._atom.get().frontStorageStateMirror.optimisticUpdatesQueue\r\n if (memory.length === 0 && last.length === 0) return\r\n\r\n const toPush: Transaction[] = []\r\n const toPluck: Transaction[] = []\r\n\r\n for (const transacion of memory) {\r\n const existing = last.find(\r\n (t) => t.peerClock === transacion.peerClock,\r\n )\r\n if (!existing) {\r\n toPush.push(transacion)\r\n } else {\r\n toPluck.push(existing)\r\n }\r\n }\r\n\r\n try {\r\n await this._storage.transaction(async (t) => {\r\n await t.pushOptimisticUpdates(toPush, this._peerId)\r\n await t.pluckOptimisticUpdates(toPluck, this._peerId)\r\n })\r\n this._atom.setByPointer(\r\n (p) => p.frontStorageStateMirror.optimisticUpdatesQueue,\r\n memory,\r\n )\r\n } catch (error) {\r\n console.error(error)\r\n return\r\n }\r\n },\r\n )\r\n }\r\n\r\n private _cachedApplyTransactionToState(\r\n transaction: Transaction,\r\n base: FullSnapshot<OpSnapshot>,\r\n before: FullSnapshot<OpSnapshot>,\r\n ): FullSnapshot<OpSnapshot> {\r\n let cache = this._caches.transactionToState.get(transaction)\r\n if (cache) {\r\n if (cache.before === before) {\r\n return cache.after\r\n }\r\n }\r\n const [after] = applyOptimisticUpdateToState(\r\n transaction,\r\n before,\r\n this._schema,\r\n true,\r\n )\r\n if (!cache) {\r\n cache = {before: before, after: after, base}\r\n this._caches.transactionToState.set(transaction, cache)\r\n } else {\r\n cache.before = before\r\n cache.after = after\r\n cache.base = base\r\n }\r\n\r\n return after\r\n }\r\n\r\n _setSessionState(opts: SessionState<OpSnapshot>) {\r\n const s = {\r\n ...opts,\r\n value: ensureStateIsUptodate(opts.snapshot, this._schema),\r\n }\r\n\r\n if (s.peerId === this._peerId) {\r\n this._atom.setByPointer((p) => p.sessionState, s)\r\n\r\n // let's GC the updates the backend has incorporated\r\n const lastAcknowledgedPeerClock = s.lastIncorporatedPeerClock ?? -1\r\n\r\n const existingQueue = this._atom.get().optimisticUpdatesQueue\r\n if (\r\n existingQueue.length > 0 &&\r\n existingQueue[0].peerClock <= lastAcknowledgedPeerClock\r\n ) {\r\n const newQueue = existingQueue.filter(\r\n (update) => update.peerClock > lastAcknowledgedPeerClock,\r\n )\r\n this._atom.setByPointer((p) => p.optimisticUpdatesQueue, newQueue)\r\n }\r\n } else {\r\n // the session state comes from an update belonging to a different session. let's update the\r\n // snapshot/backendClock and other relevant bits, but keep peerId and lastIncorporatedPeerClock unchanged\r\n this._atom.reduceByPointer(\r\n (p) => p.sessionState,\r\n (oldSessionstate): SessionState<OpSnapshot> => {\r\n return {\r\n backendClock: s.backendClock,\r\n lastSyncTime: s.lastSyncTime,\r\n peerId: this._peerId,\r\n lastIncorporatedPeerClock:\r\n oldSessionstate?.lastIncorporatedPeerClock ?? null,\r\n snapshot: s.snapshot,\r\n }\r\n },\r\n )\r\n const lastAcknowledgedPeerClock = s.lastIncorporatedPeerClock ?? -1\r\n const index = this._atom\r\n .get()\r\n .closedSessions.findIndex((s) => s.peerId === this._peerId)\r\n if (index === -1) return\r\n\r\n const closedSession = this._atom.get().closedSessions[index]\r\n\r\n if (!closedSession) {\r\n return\r\n }\r\n\r\n const existingQueue = closedSession.optimisticUpdates\r\n if (\r\n existingQueue.length > 0 &&\r\n existingQueue[0].peerClock <= lastAcknowledgedPeerClock\r\n ) {\r\n const newQueue = existingQueue.filter(\r\n (update) => update.peerClock > lastAcknowledgedPeerClock,\r\n )\r\n this._atom.setByPointer((p) => p.closedSessions[index], {\r\n optimisticUpdates: newQueue,\r\n lastIncorporatedPeerClock: s.lastIncorporatedPeerClock,\r\n peerId: s.peerId,\r\n })\r\n }\r\n }\r\n }\r\n\r\n private async _pullUpdatesFromBackend(): Promise<void> {\r\n const originalBackendState = this._atom.get().sessionState\r\n if (!originalBackendState) {\r\n throw new Error('backend state not initialized')\r\n }\r\n\r\n const s = await this._backend.getUpdatesSinceClock({\r\n clock: originalBackendState.backendClock ?? null,\r\n peerId: this._peerId,\r\n })\r\n\r\n this._processBackendUpdate(s)\r\n }\r\n\r\n private _subscribeToBackend(): () => void {\r\n void this._pullUpdatesFromBackend()\r\n const stop = this._backend.subscribe(\r\n {\r\n peerId: this._peerId,\r\n },\r\n async (s) => {\r\n if (s.shouldCheckForUpdates) {\r\n void this._pullUpdatesFromBackend().catch((err) => {\r\n console.error(err)\r\n })\r\n }\r\n this._atom.setByPointer((p) => p.allPeersPresenceState, s.presence)\r\n },\r\n )\r\n\r\n const unsub = () => {\r\n void stop.then((s) => stop)\r\n }\r\n\r\n return unsub\r\n }\r\n\r\n get state(): {op: OpSnapshot; cell: CellShape} {\r\n return finalState(this._prisms.withPeers.getValue()) as $IntentionalAny\r\n }\r\n\r\n get isReady(): boolean {\r\n return this._atom.get().initialized === true\r\n }\r\n\r\n get ready(): Promise<unknown> {\r\n return this._initializedPromise\r\n }\r\n\r\n tx(\r\n editorFn?: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\r\n draftFn?: (cellDraft: CellShape) => void,\r\n undoable: boolean = true,\r\n ): void {\r\n const [update, isEmpty, backwardOps] = this._createTransaction(\r\n this._prisms.optimisticState.getValue(),\r\n editorFn,\r\n draftFn,\r\n )\r\n if (isEmpty) return\r\n this._pushOptimisticUpdate(update, undoable ? backwardOps : [])\r\n }\r\n\r\n tempTx(\r\n editorFn?: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\r\n draftFn?: (cellDraft: CellShape) => void,\r\n existingTempTransaction?: TempTransactionApi<Editors, CellShape>,\r\n ): TempTransactionApi<Editors, CellShape> {\r\n if (existingTempTransaction) {\r\n existingTempTransaction.recapture(editorFn, draftFn)\r\n return existingTempTransaction\r\n }\r\n const [o, originalIsEmpty, originalBackwardOps] = this._createTransaction(\r\n this._prisms.optimisticState.getValue(),\r\n editorFn,\r\n draftFn,\r\n )\r\n\r\n const originalTransaction: TempTransaction = {\r\n ...o,\r\n tempId: this._tempTransactionCounter++,\r\n backwardOps: originalBackwardOps,\r\n }\r\n\r\n this._setTempTransaction(originalTransaction.tempId, originalTransaction)\r\n\r\n let currentTransaction: TempTransaction = originalTransaction\r\n let currentIsEmpty: boolean = originalIsEmpty\r\n\r\n let transactionState: 'alive' | 'committed' | 'discarded' = 'alive'\r\n\r\n const commit = (undoable: boolean = true): void => {\r\n if (transactionState !== 'alive') {\r\n throw new Error('Transaction is already ' + transactionState)\r\n }\r\n transactionState = 'committed'\r\n this._setTempTransaction(originalTransaction.tempId, undefined)\r\n if (currentIsEmpty) return\r\n\r\n const finalUpdate = {...currentTransaction}\r\n\r\n this._pushOptimisticUpdate(\r\n finalUpdate,\r\n undoable ? currentTransaction.backwardOps : [],\r\n )\r\n }\r\n const discard = (): void => {\r\n if (transactionState !== 'alive') {\r\n throw new Error('Transaction is already ' + transactionState)\r\n }\r\n transactionState = 'discarded'\r\n this._setTempTransaction(originalTransaction.tempId, undefined)\r\n }\r\n const recapture = (\r\n editorFn?: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\r\n draftFn?: (cellDraft: CellShape) => void,\r\n ): void => {\r\n if (transactionState !== 'alive') {\r\n throw new Error('Transaction is already ' + transactionState)\r\n }\r\n const [update, newIsEmpty, backwardOps] = this._createTransaction(\r\n this._prisms.optimisticState.getValue(),\r\n editorFn,\r\n draftFn,\r\n )\r\n\r\n const newTransaction: TempTransaction = {\r\n ...update,\r\n tempId: originalTransaction.tempId,\r\n backwardOps,\r\n }\r\n currentTransaction = newTransaction\r\n currentIsEmpty = newIsEmpty\r\n this._setTempTransaction(originalTransaction.tempId, newTransaction)\r\n }\r\n\r\n const reset = (): void => {\r\n if (transactionState !== 'alive') {\r\n throw new Error('Transaction is already ' + transactionState)\r\n }\r\n\r\n this._setTempTransaction(originalTransaction.tempId, undefined)\r\n }\r\n\r\n return {commit, discard: discard, recapture, reset}\r\n }\r\n\r\n private _setTempTransaction(\r\n id: number,\r\n transaction: TempTransaction | undefined,\r\n ): void {\r\n const prev = this._atom.get().tempTransactions\r\n const existingIndex = prev.findIndex((t) => t.tempId === id)\r\n const next = [...prev]\r\n\r\n let changed = false\r\n if (existingIndex > -1) {\r\n next.splice(existingIndex, 1)\r\n changed = true\r\n }\r\n if (transaction) {\r\n if (existingIndex > -1) {\r\n next.splice(existingIndex, 0, transaction)\r\n changed = true\r\n } else {\r\n next.push(transaction)\r\n changed = true\r\n }\r\n }\r\n\r\n if (changed) {\r\n this._atom.setByPointer((p) => p.tempTransactions, next)\r\n }\r\n }\r\n\r\n private _createTransaction(\r\n fullSnapshot: FullSnapshot<OpSnapshot>,\r\n editorFn?: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\r\n draftFn?: (draft: CellShape) => void,\r\n warnIfNoInvokations: boolean = false,\r\n ): [\r\n udpate: Omit<Transaction, 'peerClock'>,\r\n isEmpty: boolean,\r\n backwardOps: Ops,\r\n ] {\r\n const invokations = editorFn\r\n ? recordInvokations(this._schema.editors, editorFn)\r\n : []\r\n\r\n if (invokations.length === 0) {\r\n if (warnIfNoInvokations && editorFn)\r\n console.info(`Transaction didn't invoke any editors. It's a no-op.`)\r\n }\r\n let backwardOps: Ops = []\r\n\r\n let draftOps: any[] = []\r\n if (typeof draftFn === 'function') {\r\n const [draft, fin] = makeDraft(fullSnapshot.cell)\r\n draftFn(draft)\r\n const [_, forwardOps, _backwardOps] = fin()\r\n if (forwardOps.length > 0) {\r\n draftOps = forwardOps\r\n backwardOps = _backwardOps\r\n }\r\n }\r\n\r\n const [producedSnapshot, generatorRecordings] =\r\n applyOptimisticUpdateToState(\r\n {invokations, generatorRecordings: {}, draftOps},\r\n fullSnapshot,\r\n this._schema,\r\n false,\r\n )\r\n\r\n const transaction: Omit<Transaction, 'peerClock'> = {\r\n invokations,\r\n generatorRecordings: generatorRecordings,\r\n draftOps: draftOps,\r\n peerId: this._peerId,\r\n }\r\n\r\n if (process.env.NODE_ENV !== 'production' && editorFn) {\r\n if (\r\n !fastDeepEqual(\r\n invokations,\r\n recordInvokations(this._schema.editors, editorFn),\r\n )\r\n ) {\r\n throw new Error(\r\n `Transaction function seems to invoke different editors each time it is called. This means it is not deterministic, and running it several times will create different states. To fix this, make sure the transaction calls exactly the same editors, in the same order, with the same arguments`,\r\n )\r\n }\r\n\r\n const [secondSnapshot] = applyOptimisticUpdateToState(\r\n transaction,\r\n fullSnapshot,\r\n this._schema,\r\n true,\r\n )\r\n\r\n if (!fastDeepEqual(secondSnapshot, producedSnapshot)) {\r\n // at least one editor is not deterministic\r\n\r\n // let's see if we can find which one it is, to help the user debug\r\n let invokationsSoFar: typeof invokations = []\r\n for (const invokation of invokations) {\r\n // run each invokation one-by-one, and see which one produces a different snapshot\r\n invokationsSoFar = [...invokationsSoFar, invokation]\r\n // first call\r\n const [newSnapshot1] = applyOptimisticUpdateToState(\r\n {\r\n invokations: invokationsSoFar,\r\n generatorRecordings: transaction.generatorRecordings,\r\n draftOps: transaction.draftOps,\r\n },\r\n fullSnapshot,\r\n this._schema,\r\n true,\r\n )\r\n // second call\r\n const [newSnapshot2] = applyOptimisticUpdateToState(\r\n {\r\n invokations: invokationsSoFar,\r\n generatorRecordings: transaction.generatorRecordings,\r\n draftOps: transaction.draftOps,\r\n },\r\n fullSnapshot,\r\n this._schema,\r\n true,\r\n )\r\n if (!fastDeepEqual(newSnapshot1, newSnapshot2)) {\r\n // found the culprit\r\n throw new Error(\r\n `Transaction is not deterministic, because editor ${\r\n invokation[0]\r\n }(${JSON.stringify(\r\n invokation[1],\r\n )}) is not deterministic. It produces different results when called twice. \\n${diff(\r\n newSnapshot1,\r\n newSnapshot2,\r\n )}`,\r\n )\r\n }\r\n }\r\n\r\n // couldn't find which editor is not deterministic. let's just throw a generic error\r\n const diffString = diff(producedSnapshot, secondSnapshot)\r\n throw new Error(\r\n `The second invocation of the transaction produced a different state than the first invocation. \\n${diffString}`,\r\n )\r\n }\r\n }\r\n\r\n return [\r\n transaction,\r\n invokations.length === 0 && transaction.draftOps.length === 0,\r\n backwardOps,\r\n ]\r\n }\r\n\r\n async waitForStorageSync() {\r\n await waitForPrism(this._prisms.allSyncedToFrontStorage, (v) => v === true)\r\n }\r\n\r\n private _pushOptimisticUpdate(\r\n updateWithoutPeerClock: Omit<Transaction, 'peerClock'>,\r\n // if defined, then it'll constitute an undo-able operation\r\n backwardOps: Ops | undefined,\r\n ): void {\r\n const clockBefore = this._atom.get().peerClock\r\n const newClock = clockBefore + 1\r\n\r\n const transaction: Transaction = {\r\n generatorRecordings: updateWithoutPeerClock.generatorRecordings,\r\n invokations: updateWithoutPeerClock.invokations,\r\n peerId: updateWithoutPeerClock.peerId,\r\n peerClock: newClock,\r\n draftOps: updateWithoutPeerClock.draftOps,\r\n }\r\n\r\n this._atom.reduce((state) => ({\r\n ...state,\r\n peerClock: newClock,\r\n optimisticUpdatesQueue: [...state.optimisticUpdatesQueue, transaction],\r\n }))\r\n\r\n if (backwardOps?.length === 0) {\r\n // console.log('no backward ops', transaction.draftOps)\r\n }\r\n if (backwardOps && backwardOps.length > 0)\r\n this._addToUndoStack({backwardOps, forwardOps: transaction.draftOps})\r\n }\r\n\r\n async waitForBackendSync(): Promise<void> {\r\n await this.ready\r\n await waitForPrism(\r\n this._prisms.countOfUnpushedUpdatesToBackend,\r\n (v) => v === 0,\r\n )\r\n }\r\n\r\n private _addToUndoStack(op: UndoStackItem) {\r\n this._atom.reduceByPointer(\r\n (p) => p.undoRedo,\r\n (o) => {\r\n let stack =\r\n // copy the stack\r\n [...o.stack]\r\n // and only keep the items that are before the cursor (so if the user has undone, and then does a new operation, we'll discard the redo stack)\r\n .slice(o.cursor)\r\n\r\n stack.unshift(op)\r\n\r\n if (stack.length > MAX_UNDO_STACK_SIZE)\r\n stack.length = MAX_UNDO_STACK_SIZE\r\n\r\n return {\r\n cursor: 0,\r\n stack,\r\n }\r\n },\r\n )\r\n }\r\n\r\n undo() {\r\n const undoRedo = this._atom.get().undoRedo\r\n if (undoRedo.cursor >= undoRedo.stack.length) return\r\n const item = undoRedo.stack[undoRedo.cursor]\r\n this._atom.reduceByPointer(\r\n (p) => p.undoRedo,\r\n (o) => {\r\n return {\r\n ...o,\r\n cursor: o.cursor + 1,\r\n }\r\n },\r\n )\r\n\r\n this._pushOptimisticUpdate(\r\n {\r\n draftOps: item.backwardOps,\r\n generatorRecordings: {},\r\n invokations: [],\r\n peerId: this._peerId,\r\n },\r\n undefined,\r\n )\r\n }\r\n\r\n redo() {\r\n const undoRedo = this._atom.get().undoRedo\r\n if (undoRedo.cursor === 0) return\r\n const item = undoRedo.stack[undoRedo.cursor - 1]\r\n this._atom.reduceByPointer(\r\n (p) => p.undoRedo,\r\n (o) => {\r\n return {\r\n ...o,\r\n cursor: o.cursor - 1,\r\n }\r\n },\r\n )\r\n\r\n this._pushOptimisticUpdate(\r\n {\r\n draftOps: item.forwardOps,\r\n generatorRecordings: {},\r\n invokations: [],\r\n peerId: this._peerId,\r\n },\r\n undefined,\r\n )\r\n }\r\n\r\n subscribe(\r\n fn: (newState: {op: OpSnapshot; cell: CellShape}) => void,\r\n ): () => void {\r\n const withPeers = this._prisms.withPeers\r\n let oldState = withPeers.getValue()\r\n return withPeers.onStale(() => {\r\n const newState = withPeers.getValue()\r\n if (newState !== oldState) {\r\n oldState = newState\r\n fn(finalState(newState) as $IntentionalAny)\r\n }\r\n })\r\n }\r\n}\r\n\r\ntype ClosedSession = {\r\n peerId: string\r\n optimisticUpdates: Transaction[]\r\n lastIncorporatedPeerClock: number | null\r\n}\r\n\r\nconst finalState = memoizeFn(<S>(s: FullSnapshot<S>): {op: S; cell: {}} => {\r\n return {\r\n op: s.op,\r\n cell: jsonFromCell(s.cell) as $IntentionalAny,\r\n }\r\n})\r\n", "export { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nexport let nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\n", "import {defer} from '@encorejs/utils/defer'\r\nimport type {BackStorageAdapter, Transaction} from '../types'\r\n\r\nexport class BackStorage {\r\n private _readyD = defer()\r\n constructor(opts: {dbName: string; storageAdapter: BackStorageAdapter}) {\r\n this._readyD.resolve(void 0)\r\n }\r\n\r\n get ready() {\r\n return this._readyD.promise\r\n }\r\n\r\n async pushToJournal(opts: {\r\n dbName: string\r\n clock: number\r\n jsonDiff: unknown\r\n peerId: string\r\n peerClockFrom: number\r\n peerClockTo: number\r\n timestamp: number\r\n transactions: Transaction[]\r\n }) {}\r\n}\r\n", "import {defer} from '@encorejs/utils/defer'\r\nimport {applyOptimisticUpdateToState} from '../shared/transactions'\r\nimport type {\r\n BackApplyUpdateOps,\r\n SaazBackInterface,\r\n BackStorageAdapter,\r\n BackGetUpdateSinceClockResult,\r\n Schema,\r\n $IntentionalAny,\r\n PeerSubscribeCallback,\r\n AllPeersPresenceState,\r\n PeerPresenceState,\r\n FullSnapshot,\r\n} from '../types'\r\nimport {BackStorage} from './BackStorage'\r\nimport type {DebouncedFunc} from 'lodash-es'\r\nimport {cloneDeep, throttle} from 'lodash-es'\r\nimport {ensureStateIsUptodate as ensureOpStateIsUptodate} from '../shared/utils'\r\nimport {Atom} from '@encorejs/dataverse'\r\nimport deepEqual from '@encorejs/utils/deepEqual'\r\n\r\nexport default class SaazBack implements SaazBackInterface {\r\n private _dbName: string\r\n private _storage: BackStorage\r\n private _readyDeferred = defer<void>()\r\n private _dbState: FullSnapshot<$IntentionalAny> = {cell: {}, op: {}}\r\n private _clock: number | null = null\r\n private _peerStates: {\r\n [peerId in string]?: {\r\n lastIncorporatedPeerClock: number\r\n }\r\n } = {}\r\n private _subsribers: Array<PeerSubscribeCallback> = []\r\n private _schema: Schema<{$schemaVersion: number}>\r\n private _presenceState: Atom<AllPeersPresenceState> = new Atom({})\r\n private _schedulePresenseUpdate: DebouncedFunc<() => void>\r\n\r\n constructor(opts: {\r\n dbName: string\r\n storageAdapter: BackStorageAdapter\r\n schema: Schema<$IntentionalAny>\r\n }) {\r\n this._schema = opts.schema\r\n this._dbName = opts.dbName\r\n this._storage = new BackStorage({\r\n dbName: opts.dbName,\r\n storageAdapter: opts.storageAdapter,\r\n })\r\n\r\n void this._storage.ready.then(() => {\r\n this._readyDeferred.resolve()\r\n })\r\n\r\n this._schedulePresenseUpdate = throttle(\r\n () => {\r\n this._callSubscribersForPresenceUpdate()\r\n },\r\n 1000 / 30,\r\n {leading: true},\r\n )\r\n\r\n this._schedulePresenseUpdate.cancel()\r\n }\r\n\r\n get ready() {\r\n return this._readyDeferred.promise\r\n }\r\n\r\n get isReady(): boolean {\r\n return this._readyDeferred.status === 'resolved'\r\n }\r\n\r\n async getUpdatesSinceClock(opts: {\r\n clock: number | null\r\n peerId: string\r\n }): Promise<BackGetUpdateSinceClockResult> {\r\n await this._readyDeferred.promise\r\n return this._getUpdatesSinceClockSync(opts)\r\n }\r\n\r\n async applyUpdates(\r\n opts: BackApplyUpdateOps,\r\n ): Promise<\r\n ({ok: true} & BackGetUpdateSinceClockResult) | {ok: false; error: unknown}\r\n > {\r\n await this._readyDeferred.promise\r\n return this._applyUpdatesSync(cloneDeep(opts))\r\n }\r\n\r\n async subscribe(\r\n opts: {\r\n peerId: string\r\n },\r\n onUpdate: PeerSubscribeCallback,\r\n ): Promise<() => void> {\r\n await this._readyDeferred.promise\r\n return this._subscribeSync(cloneDeep(opts), onUpdate)\r\n }\r\n\r\n private _getUpdatesSinceClockSync(opts: {\r\n clock: number | null\r\n peerId: string\r\n }): BackGetUpdateSinceClockResult {\r\n if (!this.isReady) {\r\n throw new Error('Backend is not ready')\r\n }\r\n\r\n const lastIncorporatedPeerClock =\r\n this._peerStates[opts.peerId]?.lastIncorporatedPeerClock ?? null\r\n\r\n const clock = this._clock ?? -1\r\n const {peerId} = opts\r\n\r\n if ((opts.clock ?? -1) === clock) {\r\n return {hasUpdates: false, peerId, clock, lastIncorporatedPeerClock}\r\n }\r\n\r\n return {\r\n hasUpdates: true,\r\n clock,\r\n lastIncorporatedPeerClock,\r\n peerId,\r\n snapshot: {\r\n type: 'Snapshot',\r\n value: this._dbState,\r\n },\r\n }\r\n }\r\n\r\n async getLastIncorporatedPeerClock(opts: {\r\n peerId: string\r\n }): Promise<{lastIncorporatedPeerClock: number | null; peerId: string}> {\r\n await this._readyDeferred.promise\r\n return {\r\n peerId: opts.peerId,\r\n lastIncorporatedPeerClock:\r\n this._peerStates[opts.peerId]?.lastIncorporatedPeerClock ?? null,\r\n }\r\n }\r\n\r\n async closePeer(opts: {peerId: string}): Promise<{ok: boolean}> {\r\n delete this._peerStates[opts.peerId]\r\n return {ok: true}\r\n }\r\n\r\n async updatePresence(opts: {\r\n peerId: string\r\n presence: PeerPresenceState\r\n }): Promise<{ok: true} | {ok: false; error: unknown}> {\r\n await this._readyDeferred.promise\r\n return this._updatePresenceSync(cloneDeep(opts))\r\n }\r\n\r\n private _updatePresenceSync(opts: {\r\n peerId: string\r\n presence: PeerPresenceState\r\n }): {ok: true} | {ok: false; error: unknown} {\r\n if (!this.isReady) {\r\n throw new Error('Backend is not ready')\r\n }\r\n\r\n if (!deepEqual(this._presenceState.get()[opts.peerId], opts.presence)) {\r\n this._presenceState.setByPointer((p) => p[opts.peerId], opts.presence)\r\n this._schedulePresenseUpdate()\r\n }\r\n\r\n return {ok: true}\r\n }\r\n\r\n private _applyUpdatesSync(\r\n opts: BackApplyUpdateOps,\r\n ):\r\n | ({ok: true} & BackGetUpdateSinceClockResult)\r\n | {ok: false; error: unknown} {\r\n if (!this.isReady) {\r\n throw new Error('Backend is not ready')\r\n }\r\n\r\n if (opts.updates.length === 0) {\r\n return {\r\n ok: true,\r\n ...this._getUpdatesSinceClockSync({\r\n clock: opts.backendClock,\r\n peerId: opts.peerId,\r\n }),\r\n }\r\n }\r\n\r\n if (!this._peerStates[opts.peerId]) {\r\n this._peerStates[opts.peerId] = {\r\n lastIncorporatedPeerClock: -1,\r\n }\r\n }\r\n const peerState = this._peerStates[opts.peerId]!\r\n\r\n // const rebasing = opts.backendClock !== this._clock\r\n\r\n let snapshotSoFar = ensureOpStateIsUptodate(this._dbState, this._schema)\r\n let lastAcknowledgedClock = peerState.lastIncorporatedPeerClock\r\n let backendClock = this._clock ?? -1\r\n\r\n // const updatesToIncorporate = []\r\n\r\n for (const update of opts.updates) {\r\n if (peerState.lastIncorporatedPeerClock >= update.peerClock) {\r\n continue\r\n }\r\n\r\n const snapshotBefore = snapshotSoFar\r\n const [opSnapshotAfter] = applyOptimisticUpdateToState(\r\n update,\r\n snapshotBefore,\r\n this._schema,\r\n true,\r\n )\r\n snapshotSoFar = opSnapshotAfter\r\n lastAcknowledgedClock = update.peerClock\r\n backendClock++\r\n }\r\n\r\n if (lastAcknowledgedClock !== peerState.lastIncorporatedPeerClock) {\r\n this._dbState = snapshotSoFar\r\n peerState.lastIncorporatedPeerClock = lastAcknowledgedClock\r\n this._clock = backendClock\r\n this._callSubscribersForBackendStateUpdate()\r\n // TODO: save individual updates to storage\r\n }\r\n\r\n const s = this._getUpdatesSinceClockSync({\r\n clock: opts.backendClock,\r\n peerId: opts.peerId,\r\n })\r\n\r\n return {\r\n ok: true,\r\n ...s,\r\n }\r\n }\r\n\r\n private _subscribeSync(\r\n opts: {peerId: string},\r\n onUpdate: PeerSubscribeCallback,\r\n ): () => void {\r\n this._subsribers.push(onUpdate)\r\n let unsubscribed = false\r\n const unsub = () => {\r\n if (unsubscribed) return\r\n unsubscribed = true\r\n const i = this._subsribers.indexOf(onUpdate)\r\n if (i !== -1) {\r\n this._subsribers.splice(i, 1)\r\n }\r\n }\r\n return unsub\r\n }\r\n\r\n private _callSubscribersForBackendStateUpdate() {\r\n this._schedulePresenseUpdate.cancel()\r\n for (const sub of this._subsribers) {\r\n sub({presence: this._presenceState.get(), shouldCheckForUpdates: true})\r\n }\r\n }\r\n\r\n private _callSubscribersForPresenceUpdate() {\r\n this._schedulePresenseUpdate.cancel()\r\n for (const sub of this._subsribers) {\r\n sub({presence: this._presenceState.get(), shouldCheckForUpdates: false})\r\n }\r\n }\r\n}\r\n", "const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n", "import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n", "import type {IDBPTransaction} from 'idb'\r\nimport {openDB} from 'idb'\r\nimport type {\r\n FrontStorageAdapterTransaction,\r\n FrontStorageAdapter,\r\n} from '../types'\r\n\r\ntype SingularValue<T> = {\r\n sessionAndKey: string\r\n session: string\r\n value: T\r\n key: string\r\n}\r\ntype ListItem<V> = {\r\n sessionAndKeyAndId: `${string}/${string}/${string}`\r\n session: string\r\n value: V\r\n key: string\r\n sessionAndKey: `${string}/${string}`\r\n}\r\n\r\nexport class FrontIDBAdapter implements FrontStorageAdapter {\r\n constructor(\r\n private _idbName: string,\r\n private _currentSessionName: string,\r\n ) {}\r\n\r\n private _dbPromise = this._initializeDB()\r\n\r\n async _initializeDB() {\r\n return openDB(this._idbName, 1, {\r\n upgrade(db) {\r\n const singularValueStore = db.createObjectStore('singularValues', {\r\n keyPath: 'sessionAndKey',\r\n })\r\n\r\n singularValueStore.createIndex('session', 'session')\r\n\r\n const listsStore = db.createObjectStore('lists', {\r\n keyPath: 'sessionAndKeyAndId',\r\n })\r\n\r\n listsStore.createIndex('session', 'session')\r\n listsStore.createIndex('sessionAndKey', 'sessionAndKey')\r\n },\r\n })\r\n }\r\n\r\n get ready() {\r\n return this._dbPromise\r\n }\r\n\r\n async transaction<T>(\r\n fn: (opts: FrontStorageAdapterTransaction) => Promise<T>,\r\n ): Promise<T> {\r\n const db = await this.ready\r\n const tx = db.transaction(['singularValues', 'lists'], 'readwrite')\r\n const t = new IDBTransaction(tx)\r\n return await fn(t)\r\n }\r\n\r\n async get<T>(key: string, session: string): Promise<T | void> {\r\n return await this.transaction(({get}) => get(key, session))\r\n }\r\n\r\n async getList<T extends {id: string}>(\r\n key: string,\r\n session: string,\r\n ): Promise<T[]> {\r\n return await this.transaction(({getList}) => getList(key, session))\r\n }\r\n}\r\n\r\nclass IDBTransaction implements FrontStorageAdapterTransaction {\r\n constructor(private _tx: IDBPTransaction<unknown, string[], 'readwrite'>) {}\r\n\r\n async get<T>(key: string, session: string): Promise<T | void> {\r\n const sessionAndKey = `${session}/${key}`\r\n const store = this._tx.objectStore('singularValues')\r\n\r\n const v = (await store.get(sessionAndKey)) as SingularValue<T>\r\n return v?.value\r\n }\r\n\r\n async getAll<T>(key: string): Promise<Record<string, T>> {\r\n const index = this._tx.objectStore('singularValues').index('session')\r\n const all: Array<SingularValue<T>> = await index.getAll()\r\n\r\n const record: Record<string, T> = {}\r\n\r\n for (const row of all) {\r\n record[row.session] = row.value\r\n }\r\n\r\n return record\r\n }\r\n\r\n async set<T>(key: string, value: T, session: string): Promise<void> {\r\n const sessionAndKey = `${session}/${key}`\r\n const store = this._tx.objectStore('singularValues')\r\n const s: SingularValue<T> = {\r\n sessionAndKey: sessionAndKey,\r\n value,\r\n session,\r\n key,\r\n }\r\n\r\n await store.put(s)\r\n }\r\n\r\n async deleteSession(session: string): Promise<void> {\r\n {\r\n const store = this._tx.objectStore('singularValues')\r\n const index = store.index('session')\r\n const sessionIndex = await index.getAllKeys(session)\r\n\r\n for (const key of sessionIndex) {\r\n await store.delete(key)\r\n }\r\n }\r\n\r\n const listsStore = this._tx.objectStore('lists')\r\n const listsIndex = listsStore.index('session')\r\n const listsSessionIndex = await listsIndex.getAllKeys(session)\r\n\r\n for (const key of listsSessionIndex) {\r\n await listsStore.delete(key)\r\n }\r\n }\r\n\r\n async pushToList<T extends {id: string}>(\r\n key: string,\r\n rows: T[],\r\n session: string,\r\n ): Promise<void> {\r\n const store = this._tx.objectStore('lists')\r\n\r\n for (const row of rows) {\r\n const listItem: ListItem<T> = {\r\n key,\r\n session,\r\n value: row,\r\n sessionAndKeyAndId: `${session}/${key}/${row.id}`,\r\n sessionAndKey: `${session}/${key}`,\r\n }\r\n\r\n const existingItem = await store.get(listItem.sessionAndKeyAndId)\r\n if (existingItem) {\r\n throw new Error(\r\n `Cannot push to list \"${key}\" because an entry with id \"${row.id}\" already exists`,\r\n )\r\n }\r\n\r\n // Save the row with key and id properties\r\n await store.put(listItem)\r\n }\r\n }\r\n\r\n async getList<T extends {id: string}>(\r\n key: string,\r\n session: string,\r\n ): Promise<T[]> {\r\n const store = this._tx.objectStore('lists')\r\n const keyIndex = store.index('sessionAndKey')\r\n const sessionAndKey = `${session}/${key}`\r\n const all = await keyIndex.getAll(sessionAndKey)\r\n\r\n return all.map((s) => s.value)\r\n }\r\n\r\n async pluckFromList<T extends {id: string}>(\r\n key: string,\r\n ids: string[],\r\n session: string,\r\n ): Promise<Array<T | undefined>> {\r\n const store = this._tx.objectStore('lists')\r\n\r\n const results: Array<T | undefined> = []\r\n for (const id of ids) {\r\n const sessionAndKeyAndId = `${session}/${key}/${id}`\r\n const item = await store.get(sessionAndKeyAndId)\r\n if (item) {\r\n results.push(item.value as T)\r\n // IDB `delete` takes a key, not the record object (passing the object\r\n // throws a DataError at runtime).\r\n await store.delete(sessionAndKeyAndId)\r\n } else {\r\n results.push(undefined)\r\n }\r\n }\r\n\r\n return results\r\n }\r\n}\r\n", "import type {Draft} from 'immer'\r\nimport {createDraft, current, finishDraft} from 'immer'\r\nimport type {$IntentionalAny, FrontStorageAdapterTransaction} from '../types'\r\nimport type {FrontStorageAdapter} from '../types'\r\nimport {defer} from '@encorejs/utils/defer'\r\n\r\nexport class FrontMemoryAdapter implements FrontStorageAdapter {\r\n private _state: {\r\n sessions: {\r\n [key in string]?: {\r\n lists: {\r\n [key in string]?: Array<{id: string}>\r\n }\r\n keyval: {\r\n [key in string]?: unknown\r\n }\r\n }\r\n }\r\n } = {sessions: {}}\r\n\r\n private _readyDeferred = defer<void>()\r\n private _lastTransactionPromise: Promise<void> = Promise.resolve()\r\n\r\n export(): unknown {\r\n return this._state\r\n }\r\n\r\n constructor(state?: unknown) {\r\n if (state) {\r\n this._state = state as $IntentionalAny\r\n }\r\n // nothing to initialize, so just resolve the promise\r\n this._readyDeferred.resolve()\r\n }\r\n\r\n get ready() {\r\n return this._readyDeferred.promise\r\n }\r\n\r\n async transaction<T>(\r\n fn: (opts: FrontStorageAdapterTransaction) => Promise<T>,\r\n ): Promise<T> {\r\n const deferred = defer<void>()\r\n const oldTransactionPromise = this._lastTransactionPromise\r\n this._lastTransactionPromise = deferred.promise\r\n try {\r\n await oldTransactionPromise\r\n } catch (err) {\r\n // ignore the error. it'll be handled elsewhere\r\n }\r\n\r\n await this.ready\r\n const originalState = this._state\r\n const draft = createDraft(originalState)\r\n const t = new Transaction(draft)\r\n try {\r\n const result = await fn(t)\r\n\r\n this._state = finishDraft(draft)\r\n return result\r\n } catch (error) {\r\n throw error\r\n } finally {\r\n deferred.resolve()\r\n }\r\n }\r\n\r\n async get<T>(key: string, session: string): Promise<T | void> {\r\n return await this.transaction(({get}) => get(key, session))\r\n }\r\n\r\n async getList<T extends {id: string}>(\r\n key: string,\r\n session: string,\r\n ): Promise<T[]> {\r\n return await this.transaction(({getList}) => getList(key, session))\r\n }\r\n}\r\n\r\nclass Transaction implements FrontStorageAdapterTransaction {\r\n constructor(private _draft: Draft<FrontMemoryAdapter['_state']>) {}\r\n\r\n async get<T>(key: string, session: string): Promise<T | void> {\r\n return current(this._draft.sessions[session]?.keyval)?.[key] as T | void\r\n }\r\n\r\n async set<T>(key: string, value: T, session: string): Promise<void> {\r\n this._draft.sessions[session] ??= {keyval: {}, lists: {}}\r\n const s = this._draft.sessions[session]!\r\n s.keyval[key] = value\r\n }\r\n\r\n async getAll<T>(key: string): Promise<Record<string, T>> {\r\n const vals: Record<string, T> = {}\r\n\r\n for (const [sessionId, v] of Object.entries(this._draft.sessions)) {\r\n if (!v) continue\r\n if (Object.hasOwn(v.keyval, key)) {\r\n const value: T | undefined = v.keyval[key] as $IntentionalAny\r\n if (value === undefined) continue\r\n vals[sessionId] = value\r\n }\r\n }\r\n\r\n return vals\r\n }\r\n\r\n async deleteSession(session: string): Promise<void> {\r\n delete this._draft.sessions[session]\r\n }\r\n\r\n async pushToList<T extends {id: string}>(\r\n key: string,\r\n rows: T[],\r\n session: string,\r\n ): Promise<void> {\r\n this._draft.sessions[session] ??= {keyval: {}, lists: {}}\r\n const s = this._draft.sessions[session]!\r\n\r\n if (!s.lists[key]) {\r\n s.lists[key] = []\r\n }\r\n const list = s.lists[key]!\r\n if (list.some((row) => rows.some((r) => r.id === row.id))) {\r\n throw new Error(\r\n `Cannot push to list \"${key}\" because one or more rows already exist`,\r\n )\r\n }\r\n list.push(...rows)\r\n }\r\n\r\n async getList<T extends {id: string}>(\r\n key: string,\r\n session: string,\r\n ): Promise<T[]> {\r\n const s = this._draft.sessions[session]\r\n if (!s?.lists[key]) {\r\n return []\r\n }\r\n return current(s?.lists)[key]! as $IntentionalAny\r\n }\r\n\r\n async pluckFromList<T extends {id: string}>(\r\n key: string,\r\n ids: string[],\r\n session: string,\r\n ): Promise<Array<T | undefined>> {\r\n this._draft.sessions[session] ??= {keyval: {}, lists: {}}\r\n const s = this._draft.sessions[session]!\r\n\r\n if (!s.lists[key]) {\r\n return []\r\n }\r\n const list = s.lists[key]!\r\n return ids.map((id) => {\r\n const index = list.findIndex((row) => row.id === id)\r\n if (index === -1) {\r\n return undefined\r\n } else {\r\n const row = list[index]\r\n list.splice(index, 1)\r\n return row as T\r\n }\r\n })\r\n }\r\n}\r\n", "import type {$IntentionalAny, BackStorageAdapter} from '../types'\r\n\r\nexport class BackMemoryAdapter implements BackStorageAdapter {\r\n private _state: {\r\n lists: {\r\n [key in string]?: Array<{id: string}>\r\n }\r\n singularValues: {\r\n [key in string]?: unknown\r\n }\r\n } = {lists: {}, singularValues: {}}\r\n\r\n export(): unknown {\r\n return this._state\r\n }\r\n\r\n constructor(state?: unknown) {\r\n if (state) {\r\n this._state = state as $IntentionalAny\r\n }\r\n }\r\n\r\n async get<T>(key: string): Promise<T | void> {\r\n return this._state.singularValues[key] as T | void\r\n }\r\n\r\n async set<T>(key: string, value: T): Promise<void> {\r\n this._state.singularValues[key] = value\r\n }\r\n\r\n async pushToList<T extends {id: string}>(\r\n key: string,\r\n rows: T[],\r\n ): Promise<void> {\r\n if (!this._state.lists[key]) {\r\n this._state.lists[key] = []\r\n }\r\n const list = this._state.lists[key]!\r\n if (list.some((row) => rows.some((r) => r.id === row.id))) {\r\n throw new Error(\r\n `Cannot push to list \"${key}\" because one or more rows already exist`,\r\n )\r\n }\r\n list.push(...rows)\r\n }\r\n\r\n async getList<T extends {id: string}>(key: string): Promise<T[]> {\r\n if (!this._state.lists[key]) {\r\n return []\r\n }\r\n return this._state.lists[key]! as $IntentionalAny\r\n }\r\n\r\n async pluckFromList<T extends {id: string}>(\r\n key: string,\r\n ids: string[],\r\n ): Promise<Array<T | undefined>> {\r\n if (!this._state.lists[key]) {\r\n return []\r\n }\r\n const list = this._state.lists[key]!\r\n return ids.map((id) => {\r\n const index = list.findIndex((row) => row.id === id)\r\n if (index === -1) {\r\n return undefined\r\n } else {\r\n const row = list[index]\r\n list.splice(index, 1)\r\n return row as T\r\n }\r\n })\r\n }\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }