@pack/hydrogen 2.0.3 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/ua-parser-js/src/ua-parser.js","../node_modules/cookie/index.js","../../../node_modules/ms/index.js","../../../node_modules/debug/src/common.js","../../../node_modules/debug/src/browser.js","../../../node_modules/curriable/src/utils.ts","../../../node_modules/curriable/src/index.ts","../../../node_modules/hash-it/es/constants.js","../../../node_modules/hash-it/es/utils.js","../../../node_modules/hash-it/es/index.js","../../../node_modules/json-rules-engine/dist/fact.js","../../../node_modules/json-rules-engine/dist/debug.js","../../../node_modules/lodash.isobjectlike/index.js","../../../node_modules/json-rules-engine/dist/condition.js","../../../node_modules/clone/clone.js","../../../node_modules/json-rules-engine/dist/rule-result.js","../../../node_modules/events/events.js","../../../node_modules/json-rules-engine/dist/rule.js","../../../node_modules/json-rules-engine/dist/operator.js","../../../node_modules/json-rules-engine/dist/errors.js","../../../node_modules/fast-bind/bind-loop.js","../../../node_modules/curry2/index.js","../../../node_modules/brackets2dots/index.js","../../../node_modules/dotsplit.js/index.js","../../../node_modules/selectn/index.js","../../../node_modules/json-rules-engine/dist/almanac.js","../../../node_modules/json-rules-engine/dist/engine-facts.js","../../../node_modules/json-rules-engine/dist/engine-default-operators.js","../../../node_modules/json-rules-engine/dist/engine.js","../../../node_modules/json-rules-engine/dist/json-rules-engine.js","../../../node_modules/json-rules-engine/dist/index.js","../../packlytics/dist/utils/get-packlytics-id.js","../../../node_modules/intl-parse-accept-language/src/index.ts","../../packlytics/dist/utils/get-headers.js","../../packlytics/dist/utils/get-client-locales.js","../../packlytics/dist/utils/sanatize-payload.js","../../packlytics/dist/utils/send-event.js","../../packlytics/dist/utils/page-hit.js","../../packlytics/dist/utils/get-client-device.js","../../packlytics/dist/packlytics.js","../../packlytics/dist/utils/get-client-location.js","../src/handle-request.ts","../src/session/usePackCookies.ts","../../../node_modules/worktop/cookie/index.mjs","../src/constants.ts","../src/session/session.ts","../src/session/cookies-utils.tsx","../src/session/test-session.ts","../src/create-pack-client.ts","../src/tests/test.ts","../src/tests/local-test-resolver.ts","../src/preview/preview-mode.tsx","../src/tests/pack-test-route.ts","../../../node_modules/js-cookie/dist/js.cookie.mjs","../src/tests/pack-test-context.ts","../src/tests/pack-test-provider.tsx","../src/tests/hooks.ts"],"sourcesContent":["/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.37\n Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '1.0.37',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 500;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook',\n CHROMIUM_OS = 'Chromium OS',\n MAC_OS = 'Mac OS';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i<arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n },\n lowerize = function (str) {\n return str.toLowerCase();\n },\n majorize = function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n },\n trim = function (str, len) {\n if (typeof(str) === STR_TYPE) {\n str = str.replace(/^\\s\\s*/, EMPTY);\n return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n if (!regex[j]) { break; }\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant|iemobile|slim)\\s?(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(heytap|ovi)browser\\/([\\d\\.]+)/i, // Heytap/Ovi\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 ' + BROWSER]], [\n /(oculus|sailfish|huawei|vivo)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, 'Sogou Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, 'Sogou Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/2345 Browser\n ], [NAME, VERSION], [\n /(lbbrowser)/i, // LieBao Browser\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /(Klarna)\\/([\\w\\.]+)/i, // Klarna Shopping Browser for iOS & Android\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram/Snapchat\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i, // Links\n /panasonic;(viera)/i // Panasonic Viera\n ], [NAME, VERSION], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /master.|lts./, \"\"]]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /oid[^\\)]+; (2\\d{4}(283|rpbf)[cgl])( bui|\\))/i, // Redmi Pad\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mitv-\\w{5}) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2| pro)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n /\\b(libweb)/i\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i // Windows Phone\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /windows nt 6\\.2; (arm)/i, // Windows RT\n /windows[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i,\n /(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, CHROMIUM_OS], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser[MAJOR] = majorize(_browser[VERSION]);\n // Brave-specific detection\n if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n _browser[NAME] = 'Brave';\n }\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n _device[TYPE] = MOBILE;\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n _device[MODEL] = 'iPad';\n _device[TYPE] = TABLET;\n }\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {\n _os[NAME] = _uach.platform \n .replace(/chrome os/i, CHROMIUM_OS)\n .replace(/macos/i, MAC_OS); // backward compatibility\n }\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var dec = opt.decode || decode;\n\n var index = 0\n while (index < str.length) {\n var eqIdx = str.indexOf('=', index)\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break\n }\n\n var endIdx = str.indexOf(';', index)\n\n if (endIdx === -1) {\n endIdx = str.length\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1\n continue\n }\n\n var key = str.slice(index, eqIdx).trim()\n\n // only assign once\n if (undefined === obj[key]) {\n var val = str.slice(eqIdx + 1, endIdx).trim()\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1)\n }\n\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.partitioned) {\n str += '; Partitioned'\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase()\n : opt.priority\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} val\n * @returns {string}\n */\n\nfunction encode (val) {\n return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]' ||\n val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/**\n * @constant __ placeholder used when parameters are skipped\n */\nexport const __: Placeholder =\n typeof Symbol === 'function' ? Symbol('curriable placeholder') : 0xedd1;\n\n/**\n * @function recursiveCurry\n *\n * @description\n * recursively curry over the arguments until all have been resolved\n *\n * @param fn the function to curry\n * @param arity the length of the function to curry until\n * @param args the existing arguments\n * @returns the result of the function call\n */\nexport function getCurried<Fn extends Handler>(fn: Fn, arity: number): Curry<Fn> {\n function _curried(args: any[]) {\n return function () {\n const length: number = args.length;\n\n const newArgs: IArguments = arguments;\n const { length: newArgsLength } = newArgs;\n\n const combined: any[] = [];\n\n let newArgsIndex = 0;\n let remaining = arity;\n let value: any;\n\n if (length) {\n let index = -1;\n\n while (++index < length) {\n combined[index] = value =\n args[index] === __ && newArgsIndex < newArgsLength\n ? newArgs[newArgsIndex++]\n : args[index];\n\n if (value !== __) {\n --remaining;\n }\n }\n }\n\n if (newArgsIndex < newArgsLength) {\n while (newArgsIndex < newArgsLength) {\n combined[combined.length] = value = newArgs[newArgsIndex];\n\n if (value !== __ && newArgsIndex < arity) {\n --remaining;\n }\n\n ++newArgsIndex;\n }\n }\n\n return remaining > 0 ? _curried(combined) : fn.apply(this, combined);\n };\n }\n\n return _curried([]);\n}\n","// utils\nimport { __, getCurried } from './utils';\n\nexport { __ };\n\n/**\n * @function curry\n *\n * @description\n * get the method passed as a curriable method based on its parameters\n *\n * @param fn the method to make curriable\n * @param arityOverride the hard-coded arity of the curried method\n * @returns the fn passed as a curried function\n */\nexport function curry<Fn extends Handler>(fn: Fn): Curried<Fn>;\nexport function curry<Fn extends Handler>(fn: Fn, arityOverride: number): Handler;\nexport function curry<Fn extends Handler>(fn: Fn, arityOverride?: number) {\n const arity = typeof arityOverride === 'number' ? arityOverride : fn.length;\n const curried = getCurried(fn, arity) as Curried<Fn>;\n\n curried.arity = arity;\n curried.fn = fn;\n\n return curried;\n}\n\ncurry.__ = __;\n\n/**\n * @function isPlaceholder\n *\n * @description\n * is the value passed a placeholder\n *\n * @param value the value to test\n * @returns whether the value is a placeholder\n */\nexport function isPlaceholder(value: any): value is Placeholder {\n return value === __;\n}\n\ncurry.isPlaceholder = isPlaceholder;\n\n/**\n * @function uncurry\n *\n * @description\n * return a function that is the non-curried version of the fn passed\n *\n * @param curried the curried function to uncurry\n * @returns the original fn\n */\nexport function uncurry<Fn extends Handler>(curried: Curried<Fn>): Fn {\n return curried.fn;\n}\n\ncurry.uncurry = uncurry;\n\nexport default curry;\n","var _SELF_TAGS, _TOSTRING_TAGS, _TYPEDARRAY_TAGS, _UNPARSEABLE_TAGS;\n\n/**\n * @constant {boolean} HAS_BUFFER_FROM_SUPPORT\n */\nexport var HAS_BUFFER_FROM_SUPPORT = typeof Buffer !== 'undefined' && typeof Buffer.from === 'function';\n/**\n * @constant {boolean} HAS_UINT16ARRAY_SUPPORT\n */\n\nexport var HAS_UINT16ARRAY_SUPPORT = typeof Uint16Array === 'function';\n/**\n * @constant {RegExp} HTML_ELEMENT_REGEXP\n */\n\nexport var HTML_ELEMENT_REGEXP = /\\[object (HTML(.*)Element)\\]/;\n/**\n * @constant {RegExp} SVG_ELEMENT_REGEXP\n */\n\nexport var SVG_ELEMENT_REGEXP = /\\[object (SVG(.*)Element)\\]/;\n/**\n * @constant {Array<string>} OBJECT_CLASSES\n */\n\nvar OBJECT_CLASSES = ['Arguments', 'Array', 'ArrayBuffer', 'Boolean', 'DataView', 'Date', 'DocumentFragment', 'Error', 'Event', 'Float32Array', 'Float64Array', 'Function', 'Generator', 'GeneratorFunction', 'HTMLElement', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Null', 'Number', 'Object', 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'Undefined', 'WeakMap', 'WeakSet', 'Window'];\n/**\n * @constant {Object} OBJECT_CLASS_MAP\n */\n\nexport var OBJECT_CLASS_MAP = OBJECT_CLASSES.reduce(function (objectClasses, type) {\n objectClasses[\"[object \" + type + \"]\"] = type;\n return objectClasses;\n}, {});\n/**\n * @constant {Object} OBJECT_CLASS_TYPE_MAP\n */\n\nexport var OBJECT_CLASS_TYPE_MAP = Object.keys(OBJECT_CLASS_MAP).reduce(function (objectClassTypes, objectClass) {\n objectClassTypes[OBJECT_CLASS_MAP[objectClass].toUpperCase()] = objectClass;\n return objectClassTypes;\n}, {});\nexport var ITERABLE_TAGS = {\n '[object Map]': true,\n '[object Set]': true\n};\nexport var PRIMITIVE_TAGS = {\n boolean: true,\n function: true,\n number: true,\n string: true,\n undefined: true\n};\nexport var SELF_TAGS = (_SELF_TAGS = {}, _SELF_TAGS[OBJECT_CLASS_TYPE_MAP.ARGUMENTS] = true, _SELF_TAGS[OBJECT_CLASS_TYPE_MAP.ARRAY] = true, _SELF_TAGS);\nexport var TOSTRING_TAGS = (_TOSTRING_TAGS = {}, _TOSTRING_TAGS[OBJECT_CLASS_TYPE_MAP.REGEXP] = true, _TOSTRING_TAGS[OBJECT_CLASS_TYPE_MAP.SYMBOL] = true, _TOSTRING_TAGS);\nexport var TYPEDARRAY_TAGS = (_TYPEDARRAY_TAGS = {}, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.FLOAT32ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.FLOAT64ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.INT8ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.INT16ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.INT32ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.UINT8ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.UINT8CLAMPEDARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.UINT16ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.UINT32ARRAY] = true, _TYPEDARRAY_TAGS);\nexport var UNPARSEABLE_TAGS = (_UNPARSEABLE_TAGS = {}, _UNPARSEABLE_TAGS[OBJECT_CLASS_TYPE_MAP.GENERATOR] = true, _UNPARSEABLE_TAGS[OBJECT_CLASS_TYPE_MAP.PROMISE] = true, _UNPARSEABLE_TAGS[OBJECT_CLASS_TYPE_MAP.WEAKMAP] = true, _UNPARSEABLE_TAGS[OBJECT_CLASS_TYPE_MAP.WEAKSET] = true, _UNPARSEABLE_TAGS);","import { HAS_BUFFER_FROM_SUPPORT, HAS_UINT16ARRAY_SUPPORT, HTML_ELEMENT_REGEXP, ITERABLE_TAGS, OBJECT_CLASS_MAP, OBJECT_CLASS_TYPE_MAP, PRIMITIVE_TAGS, SELF_TAGS, SVG_ELEMENT_REGEXP, TOSTRING_TAGS, TYPEDARRAY_TAGS, UNPARSEABLE_TAGS } from './constants';\nvar FUNCTION_NAME_REGEX = /^\\s*function\\s*([^(]*)/i;\nvar toString = Object.prototype.toString;\nvar keys = Object.keys;\n/**\n * @function getFunctionName\n *\n * @description\n * get the name of the function based on a series of fallback attempts\n *\n * @param {function} fn the function to test\n * @returns {string} the function name\n */\n\nexport function getFunctionName(fn) {\n return fn.name || (fn.toString().match(FUNCTION_NAME_REGEX) || [])[1] || 'anonymous';\n}\n/**\n * @function getIntegerHashValue\n *\n * @description\n * based on string passed, get the integer hash value\n * through bitwise operation (based on spinoff of dbj2\n * with enhancements for reduced collisions)\n *\n * @param {string} string the string to get the hash value for\n * @returns {number} the hash value\n */\n\nexport function getIntegerHashValue(string) {\n var index = string.length,\n hashA = 5381,\n hashB = 52711,\n charCode;\n\n while (index--) {\n charCode = string.charCodeAt(index);\n hashA = hashA * 33 ^ charCode;\n hashB = hashB * 33 ^ charCode;\n }\n\n return (hashA >>> 0) * 4096 + (hashB >>> 0);\n}\n/**\n * @function getSortedEvent\n *\n * @description\n * get the event object sorted by its properties\n *\n * @param {boolean} bubbles does the event bubble up through the DOM\n * @param {function} alias to stopPropagation\n * @param {boolean} cancelable is the event cancelable\n * @param {boolean} composed can the event bubble across the boundary to shadow DOM\n * @param {HTMLElement} [currentTarget] registered target for the event\n * @param {boolean} defaultPrevented has preventDefault been called on the event\n * @param {string} eventPhase the phase of the event flow being processed\n * @param {boolean} isTrusted was the event initiated by the browser\n * @param {HTMLElement} [target] the target with which the event was dispatched\n * @param {number} timeStamp the time at which the event was created\n * @param {string} type the name of the event\n * @returns {Object} the event object with all properties sorted\n */\n\nexport function getSortedEvent(event) {\n return {\n bubbles: event.bubbles,\n cancelBubble: event.cancelBubble,\n cancelable: event.cancelable,\n composed: event.composed,\n currentTarget: event.currentTarget,\n defaultPrevented: event.defaultPrevented,\n eventPhase: event.eventPhase,\n isTrusted: event.isTrusted,\n returnValue: event.returnValue,\n target: event.target,\n type: event.type\n };\n}\n/**\n * @function shouldSort\n *\n * @description\n * get the sort result based on the two values to compare\n *\n * @param {string} valueA the first value to compare\n * @param {string} valueB the second value to compare\n * @returns {boolean} should the value be sorted\n */\n\nexport function shouldSort(valueA, valueB) {\n return valueA > valueB;\n}\n/**\n * @function shouldSortPair\n *\n * @description\n * get the sort result based on the two pairs to compare\n *\n * @param {Object} pairA the first pair to compare\n * @param {Object} pairB the second pair to compare\n * @returns {boolean} should the value be sorted\n */\n\nexport function shouldSortPair(pairA, pairB) {\n return pairA[0] > pairB[0];\n}\n/**\n * @function sort\n *\n * @description\n * sort the array based on the fn passed\n *\n * @param {Array<any>} array the array to sort\n * @param {function} fn the sorting function\n * @returns {Array<any>} the sorted array\n */\n\nexport function sort(array, fn) {\n var subIndex, value;\n\n for (var index = 0; index < array.length; ++index) {\n value = array[index];\n\n for (subIndex = index - 1; ~subIndex && fn(array[subIndex], value); --subIndex) {\n array[subIndex + 1] = array[subIndex];\n }\n\n array[subIndex + 1] = value;\n }\n\n return array;\n}\n/**\n * @function getIterablePairs\n *\n * @description\n * get the pairs in the iterable for stringification\n *\n * @param {Map|Set} iterable the iterable to get the pairs for\n * @returns {Array<{key: string, value: any}>} the pairs\n */\n\nexport function getSortedIterable(iterable, cache, keys) {\n var isMap = typeof iterable.get === 'function';\n var entries = [];\n\n if (isMap) {\n iterable.forEach(function (value, key) {\n entries.push([// eslint-disable-next-line no-use-before-define\n stringify(key, cache, keys), // eslint-disable-next-line no-use-before-define\n stringify(value, cache, keys)]);\n });\n sort(entries, shouldSortPair);\n } else {\n iterable.forEach(function (value) {\n // eslint-disable-next-line no-use-before-define\n entries.push(stringify(value, cache, keys));\n });\n sort(entries, shouldSort);\n }\n\n var _final = getFunctionName(iterable.constructor) + \"|[\";\n\n for (var index = 0, length = entries.length, entry; index < length; ++index) {\n entry = entries[index];\n _final += \"\" + (index ? ',' : '') + (isMap ? \"[\" + entry[0] + \",\" + entry[1] + \"]\" : entry);\n }\n\n return _final + \"]\";\n}\n/**\n * @function getSortedObject\n *\n * @description\n * get the object with the keys sorted\n *\n * @param {Object} object the object to sort\n * @returns {Object} the sorted object\n */\n\nexport function getSortedObject(object) {\n var objectKeys = sort(keys(object), shouldSort);\n var newObject = {};\n var key;\n\n for (var index = 0; index < objectKeys.length; ++index) {\n key = objectKeys[index];\n newObject[key] = object[key];\n }\n\n return newObject;\n}\n/**\n * @function getStringifiedArrayBufferFallback\n *\n * @description\n * get the string value of the buffer passed based on a Buffer\n *\n * @param {ArrayBuffer} buffer the array buffer to convert\n * @returns {string} the stringified buffer\n */\n\nexport function getStringifiedArrayBufferFallback(buffer) {\n return String.fromCharCode.apply(null, new Uint16Array(buffer));\n}\n/**\n * @function getStringifiedArrayBufferModern\n *\n * @description\n * get the string value of the buffer passed based on a Uint16Array\n *\n * @param {ArrayBuffer} buffer the array buffer to convert\n * @returns {string} the stringified buffer\n */\n\nexport function getStringifiedArrayBufferModern(buffer) {\n return Buffer.from(buffer).toString('utf8');\n}\n/**\n * @function getStringifiedArrayBufferNoSupport\n *\n * @description\n * return a placeholder when no arraybuffer support exists\n *\n * @returns {string} the placeholder\n */\n\nexport function getStringifiedArrayBufferNoSupport() {\n return '';\n}\n/**\n * @function getStringifiedArrayBuffer\n *\n * @description\n * get the string value of the buffer passed\n *\n * @param {ArrayBuffer} buffer the array buffer to convert\n * @returns {string} the stringified buffer\n */\n\nexport var getStringifiedArrayBuffer = function () {\n if (HAS_BUFFER_FROM_SUPPORT) {\n return getStringifiedArrayBufferModern;\n }\n\n if (HAS_UINT16ARRAY_SUPPORT) {\n return getStringifiedArrayBufferFallback;\n }\n\n return getStringifiedArrayBufferNoSupport;\n}();\n/**\n * @function getStringifiedDocumentFragment\n *\n * @description\n * build a string based on all the fragment's children\n *\n * @param {DocumentFragment} fragment the fragment to stringify\n * @returns {string} the stringified fragment\n */\n\nexport function getStringifiedDocumentFragment(fragment) {\n var children = fragment.children;\n var innerHTML = '';\n\n for (var index = 0; index < children.length; ++index) {\n innerHTML += children[index].outerHTML;\n }\n\n return innerHTML;\n}\n/**\n * @function getCutoffIndex\n *\n * @description\n * get the index after that of the value match in the array (faster than\n * native indexOf) to determine the cutoff index for the `splice()` call.\n *\n * @param {Array<any>} array the array to get the index of the value at\n * @param {any} value the value to match\n * @returns {number} the index after the value match in the array\n */\n\nexport function getCutoffIndex(array, value) {\n for (var index = 0; index < array.length; ++index) {\n if (array[index] === value) {\n return index + 1;\n }\n }\n\n return 0;\n}\n/**\n * @function getNormalizedValue\n *\n * @description\n * get the value normalized for stringification\n *\n * @param {any} value the value to normalize\n * @param {WeakMap|Object} sortedCache the cache of sorted objects\n * @param {string} [passedTag] the previously-calculated tag\n * @returns {any} the normalized value\n */\n\nexport function getNormalizedValue(value, cache, keys, passedTag) {\n if (passedTag === void 0) {\n var type = typeof value;\n\n if (type === 'string' || PRIMITIVE_TAGS[type]) {\n return type + \"|\" + value;\n }\n\n if (value === null) {\n return \"null|\" + value;\n }\n }\n\n var tag = passedTag || toString.call(value);\n\n if (SELF_TAGS[tag]) {\n return value;\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.OBJECT) {\n return getSortedObject(value);\n }\n\n if (TOSTRING_TAGS[tag]) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + value.toString();\n }\n\n if (ITERABLE_TAGS[tag]) {\n return getSortedIterable(value, cache, keys);\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.DATE) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + value.getTime();\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.ERROR) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + value.stack;\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.EVENT) {\n return getSortedEvent(value);\n }\n\n if (UNPARSEABLE_TAGS[tag]) {\n return OBJECT_CLASS_MAP[tag] + \"|NOT_ENUMERABLE\";\n }\n\n if (HTML_ELEMENT_REGEXP.test(tag) || SVG_ELEMENT_REGEXP.test(tag)) {\n return tag.slice(8, -1) + \"|\" + value.outerHTML;\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.DOCUMENTFRAGMENT) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + getStringifiedDocumentFragment(value);\n }\n\n if (TYPEDARRAY_TAGS[tag]) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + value.join(',');\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.ARRAYBUFFER) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + getStringifiedArrayBuffer(value);\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.DATAVIEW) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + getStringifiedArrayBuffer(value.buffer);\n }\n\n return value;\n}\n/**\n * @function replacer\n *\n * @description\n * create the replacer function used for stringification\n *\n * @param {WeakSet|Object} sortedCache the cache to use for sorting objects\n * @returns {function(key: string, value: any)} function getting the normalized value\n */\n\nexport function createReplacer(cache, keys) {\n if (cache === void 0) {\n cache = [];\n }\n\n if (keys === void 0) {\n keys = [];\n }\n\n return function (key, value) {\n if (typeof value === 'object') {\n if (cache.length) {\n var thisCutoff = getCutoffIndex(cache, this);\n\n if (thisCutoff === 0) {\n cache.push(this);\n } else {\n cache.splice(thisCutoff);\n keys.splice(thisCutoff);\n }\n\n keys.push(key);\n var valueCutoff = getCutoffIndex(cache, value);\n\n if (valueCutoff !== 0) {\n return \"[~\" + (keys.slice(0, valueCutoff).join('.') || '.') + \"]\";\n }\n\n cache.push(value);\n } else {\n cache[0] = value;\n keys[0] = key;\n }\n }\n\n if (key && this[key] instanceof Date) {\n return getNormalizedValue(this[key], cache, keys, OBJECT_CLASS_TYPE_MAP.DATE, cache, keys);\n }\n\n return getNormalizedValue(value, cache, keys);\n };\n}\n/**\n * @function stringify\n *\n * @description\n * stringify the value based on the options passed\n *\n * @param {any} value the value to stringify\n * @returns {string} the stringified value\n */\n\nexport function stringify(value, cache, keys) {\n if (!value || typeof value !== 'object') {\n return getNormalizedValue(value, cache, keys);\n }\n\n var tag = toString.call(value);\n\n if (tag === OBJECT_CLASS_TYPE_MAP.DATE || tag === OBJECT_CLASS_TYPE_MAP.REGEXP) {\n return getNormalizedValue(value, cache, keys, tag);\n }\n\n return JSON.stringify(value, createReplacer(cache, keys));\n}","// external dependencies\nimport { curry } from 'curriable'; // utils\n\nimport { getIntegerHashValue, stringify } from './utils';\n/**\n * @function hash\n *\n * @description\n * hash the value passed to a unique, consistent hash value\n *\n * @param {any} value the value to hash\n * @returns {number} the object hash\n */\n\nexport function hash(value) {\n return getIntegerHashValue(stringify(value));\n}\n/**\n * @function hash.is\n *\n * @description\n * create a comparator for the first object passed to determine if the second is equal\n *\n * @param {any} object the object to test against\n * @returns {function(any): boolean} the method to test against the object\n */\n\nhash.is = curry(function (object, otherObject) {\n return hash(object) === hash(otherObject);\n});\n/**\n * @function hash.is.all\n *\n * @description\n * determine if all of the objects passed are equal in value to the first\n *\n * @param {...Array<any>} objects the objects to test for equality\n * @returns {boolean} are the objects equal\n */\n\nhash.is.all = curry(function (objectBasis) {\n var isEqual = hash.is(objectBasis);\n\n for (var index = 1; index < arguments.length; ++index) {\n if (!isEqual(arguments[index])) {\n return false;\n }\n }\n\n return true;\n}, 2);\n/**\n * @function hash.is.any\n *\n * @description\n * determine if any of the objects passed are equal in value to the first\n *\n * @param {...Array<any>} objects the objects to test for equality\n * @returns {boolean} are the objects equal\n */\n\nhash.is.any = curry(function (objectBasis) {\n var isEqual = hash.is(objectBasis);\n\n for (var index = 1; index < arguments.length; index++) {\n if (isEqual(arguments[index])) {\n return true;\n }\n }\n\n return false;\n}, 2);\n/**\n * @function hash.is.not\n *\n * @description\n * create a comparator for the first object passed to determine if the second is not equal\n *\n * @param {any} object the object to test against\n * @returns {function(any): boolean} the method to test against the object\n */\n\nhash.is.not = curry(function (object, otherObject) {\n return hash(object) !== hash(otherObject);\n});\nexport default hash;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _hashIt = require('hash-it');\n\nvar _hashIt2 = _interopRequireDefault(_hashIt);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Fact = function () {\n /**\n * Returns a new fact instance\n * @param {string} id - fact unique identifer\n * @param {object} options\n * @param {boolean} options.cache - whether to cache the fact's value for future rules\n * @param {primitive|function} valueOrMethod - constant primitive, or method to call when computing the fact's value\n * @return {Fact}\n */\n function Fact(id, valueOrMethod, options) {\n _classCallCheck(this, Fact);\n\n this.id = id;\n var defaultOptions = { cache: true };\n if (typeof options === 'undefined') {\n options = defaultOptions;\n }\n if (typeof valueOrMethod !== 'function') {\n this.value = valueOrMethod;\n this.type = this.constructor.CONSTANT;\n } else {\n this.calculationMethod = valueOrMethod;\n this.type = this.constructor.DYNAMIC;\n }\n\n if (!this.id) throw new Error('factId required');\n if (typeof this.value === 'undefined' && typeof this.calculationMethod === 'undefined') {\n throw new Error('facts must have a value or method');\n }\n\n this.priority = parseInt(options.priority || 1, 10);\n this.options = Object.assign({}, defaultOptions, options);\n this.cacheKeyMethod = this.defaultCacheKeys;\n return this;\n }\n\n _createClass(Fact, [{\n key: 'isConstant',\n value: function isConstant() {\n return this.type === this.constructor.CONSTANT;\n }\n }, {\n key: 'isDynamic',\n value: function isDynamic() {\n return this.type === this.constructor.DYNAMIC;\n }\n\n /**\n * Return the fact value, based on provided parameters\n * @param {object} params\n * @param {Almanac} almanac\n * @return {any} calculation method results\n */\n\n }, {\n key: 'calculate',\n value: function calculate(params, almanac) {\n // if constant fact w/set value, return immediately\n if (this.hasOwnProperty('value')) {\n return this.value;\n }\n return this.calculationMethod(params, almanac);\n }\n\n /**\n * Return a cache key (MD5 string) based on parameters\n * @param {object} obj - properties to generate a hash key from\n * @return {string} MD5 string based on the hash'd object\n */\n\n }, {\n key: 'defaultCacheKeys',\n\n\n /**\n * Default properties to use when caching a fact\n * Assumes every fact is a pure function, whose computed value will only\n * change when input params are modified\n * @param {string} id - fact unique identifer\n * @param {object} params - parameters passed to fact calcution method\n * @return {object} id + params\n */\n value: function defaultCacheKeys(id, params) {\n return { params: params, id: id };\n }\n\n /**\n * Generates the fact's cache key(MD5 string)\n * Returns nothing if the fact's caching has been disabled\n * @param {object} params - parameters that would be passed to the computation method\n * @return {string} cache key\n */\n\n }, {\n key: 'getCacheKey',\n value: function getCacheKey(params) {\n if (this.options.cache === true) {\n var cacheProperties = this.cacheKeyMethod(this.id, params);\n var _hash = Fact.hashFromObject(cacheProperties);\n return _hash;\n }\n }\n }], [{\n key: 'hashFromObject',\n value: function hashFromObject(obj) {\n return (0, _hashIt2.default)(obj);\n }\n }]);\n\n return Fact;\n}();\n\nFact.CONSTANT = 'CONSTANT';\nFact.DYNAMIC = 'DYNAMIC';\n\nexports.default = Fact;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = debug;\nfunction debug(message) {\n if (typeof process !== 'undefined' && process.env && process.env.DEBUG && process.env.DEBUG.match(/json-rules-engine/) || typeof window !== 'undefined' && window.localStorage && window.localStorage.debug && window.localStorage.debug.match(/json-rules-engine/)) {\n console.log(message);\n }\n}","/**\n * lodash 4.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _debug = require('./debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _lodash = require('lodash.isobjectlike');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Condition = function () {\n function Condition(properties) {\n _classCallCheck(this, Condition);\n\n if (!properties) throw new Error('Condition: constructor options required');\n var booleanOperator = Condition.booleanOperator(properties);\n Object.assign(this, properties);\n if (booleanOperator) {\n var subConditions = properties[booleanOperator];\n if (!Array.isArray(subConditions)) {\n throw new Error('\"' + booleanOperator + '\" must be an array');\n }\n this.operator = booleanOperator;\n // boolean conditions always have a priority; default 1\n this.priority = parseInt(properties.priority, 10) || 1;\n this[booleanOperator] = subConditions.map(function (c) {\n return new Condition(c);\n });\n } else {\n if (!properties.hasOwnProperty('fact')) throw new Error('Condition: constructor \"fact\" property required');\n if (!properties.hasOwnProperty('operator')) throw new Error('Condition: constructor \"operator\" property required');\n if (!properties.hasOwnProperty('value')) throw new Error('Condition: constructor \"value\" property required');\n\n // a non-boolean condition does not have a priority by default. this allows\n // priority to be dictated by the fact definition\n if (properties.hasOwnProperty('priority')) {\n properties.priority = parseInt(properties.priority, 10);\n }\n }\n }\n\n /**\n * Converts the condition into a json-friendly structure\n * @param {Boolean} stringify - whether to return as a json string\n * @returns {string,object} json string or json-friendly object\n */\n\n\n _createClass(Condition, [{\n key: 'toJSON',\n value: function toJSON() {\n var stringify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var props = {};\n if (this.priority) {\n props.priority = this.priority;\n }\n var oper = Condition.booleanOperator(this);\n if (oper) {\n props[oper] = this[oper].map(function (c) {\n return c.toJSON(stringify);\n });\n } else {\n props.operator = this.operator;\n props.value = this.value;\n props.fact = this.fact;\n if (this.factResult !== undefined) {\n props.factResult = this.factResult;\n }\n if (this.result !== undefined) {\n props.result = this.result;\n }\n if (this.params) {\n props.params = this.params;\n }\n if (this.path) {\n props.path = this.path;\n }\n }\n if (stringify) {\n return JSON.stringify(props);\n }\n return props;\n }\n\n /**\n * Interprets .value as either a primitive, or if a fact, retrieves the fact value\n */\n\n }, {\n key: '_getValue',\n value: function _getValue(almanac) {\n var value = this.value;\n if ((0, _lodash2.default)(value) && value.hasOwnProperty('fact')) {\n // value: { fact: 'xyz' }\n return almanac.factValue(value.fact, value.params, value.path);\n }\n return Promise.resolve(value);\n }\n\n /**\n * Takes the fact result and compares it to the condition 'value', using the operator\n * LHS OPER RHS\n * <fact + params + path> <operator> <value>\n *\n * @param {Almanac} almanac\n * @param {Map} operatorMap - map of available operators, keyed by operator name\n * @returns {Boolean} - evaluation result\n */\n\n }, {\n key: 'evaluate',\n value: function evaluate(almanac, operatorMap) {\n var _this = this;\n\n if (!almanac) return Promise.reject(new Error('almanac required'));\n if (!operatorMap) return Promise.reject(new Error('operatorMap required'));\n if (this.isBooleanOperator()) return Promise.reject(new Error('Cannot evaluate() a boolean condition'));\n\n var op = operatorMap.get(this.operator);\n if (!op) return Promise.reject(new Error('Unknown operator: ' + this.operator));\n\n return this._getValue(almanac) // todo - parallelize\n .then(function (rightHandSideValue) {\n return almanac.factValue(_this.fact, _this.params, _this.path).then(function (leftHandSideValue) {\n var result = op.evaluate(leftHandSideValue, rightHandSideValue);\n (0, _debug2.default)('condition::evaluate <' + leftHandSideValue + ' ' + _this.operator + ' ' + rightHandSideValue + '?> (' + result + ')');\n return { result: result, leftHandSideValue: leftHandSideValue, rightHandSideValue: rightHandSideValue, operator: _this.operator };\n });\n });\n }\n\n /**\n * Returns the boolean operator for the condition\n * If the condition is not a boolean condition, the result will be 'undefined'\n * @return {string 'all' or 'any'}\n */\n\n }, {\n key: 'booleanOperator',\n\n\n /**\n * Returns the condition's boolean operator\n * Instance version of Condition.isBooleanOperator\n * @returns {string,undefined} - 'any', 'all', or undefined (if not a boolean condition)\n */\n value: function booleanOperator() {\n return Condition.booleanOperator(this);\n }\n\n /**\n * Whether the operator is boolean ('all', 'any')\n * @returns {Boolean}\n */\n\n }, {\n key: 'isBooleanOperator',\n value: function isBooleanOperator() {\n return Condition.booleanOperator(this) !== undefined;\n }\n }], [{\n key: 'booleanOperator',\n value: function booleanOperator(condition) {\n if (condition.hasOwnProperty('any')) {\n return 'any';\n } else if (condition.hasOwnProperty('all')) {\n return 'all';\n }\n }\n }]);\n\n return Condition;\n}();\n\nexports.default = Condition;","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n nativeMap = Map;\n} catch(_) {\n // maybe a reference error because no `Map`. Give it a dummy value that no\n // value will ever be an instanceof.\n nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n nativeSet = Set;\n} catch(_) {\n nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n nativePromise = Promise;\n} catch(_) {\n nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n * should be cloned as well. Non-enumerable properties on the prototype\n * chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n includeNonEnumerable = circular.includeNonEnumerable;\n circular = circular.circular;\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth === 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (_instanceof(parent, nativeMap)) {\n child = new nativeMap();\n } else if (_instanceof(parent, nativeSet)) {\n child = new nativeSet();\n } else if (_instanceof(parent, nativePromise)) {\n child = new nativePromise(function (resolve, reject) {\n parent.then(function(value) {\n resolve(_clone(value, depth - 1));\n }, function(err) {\n reject(_clone(err, depth - 1));\n });\n });\n } else if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else if (_instanceof(parent, Error)) {\n child = Object.create(parent);\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n if (_instanceof(parent, nativeMap)) {\n parent.forEach(function(value, key) {\n var keyChild = _clone(key, depth - 1);\n var valueChild = _clone(value, depth - 1);\n child.set(keyChild, valueChild);\n });\n }\n if (_instanceof(parent, nativeSet)) {\n parent.forEach(function(value) {\n var entryChild = _clone(value, depth - 1);\n child.add(entryChild);\n });\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(parent);\n for (var i = 0; i < symbols.length; i++) {\n // Don't need to worry about cloning a symbol because it is a primitive,\n // like a number or string.\n var symbol = symbols[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n continue;\n }\n child[symbol] = _clone(parent[symbol], depth - 1);\n if (!descriptor.enumerable) {\n Object.defineProperty(child, symbol, {\n enumerable: false\n });\n }\n }\n }\n\n if (includeNonEnumerable) {\n var allPropertyNames = Object.getOwnPropertyNames(parent);\n for (var i = 0; i < allPropertyNames.length; i++) {\n var propertyName = allPropertyNames[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n if (descriptor && descriptor.enumerable) {\n continue;\n }\n child[propertyName] = _clone(parent[propertyName], depth - 1);\n Object.defineProperty(child, propertyName, {\n enumerable: false\n });\n }\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = require('clone');\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RuleResult = function () {\n function RuleResult(conditions, event, priority, name) {\n _classCallCheck(this, RuleResult);\n\n this.conditions = (0, _clone2.default)(conditions);\n this.event = (0, _clone2.default)(event);\n this.priority = (0, _clone2.default)(priority);\n this.name = (0, _clone2.default)(name);\n this.result = null;\n }\n\n _createClass(RuleResult, [{\n key: 'setResult',\n value: function setResult(result) {\n this.result = result;\n }\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var stringify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var props = {\n conditions: this.conditions.toJSON(false),\n event: this.event,\n priority: this.priority,\n name: this.name,\n result: this.result\n };\n if (stringify) {\n return JSON.stringify(props);\n }\n return props;\n }\n }]);\n\n return RuleResult;\n}();\n\nexports.default = RuleResult;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _condition = require('./condition');\n\nvar _condition2 = _interopRequireDefault(_condition);\n\nvar _ruleResult = require('./rule-result');\n\nvar _ruleResult2 = _interopRequireDefault(_ruleResult);\n\nvar _events = require('events');\n\nvar _debug = require('./debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Rule = function (_EventEmitter) {\n _inherits(Rule, _EventEmitter);\n\n /**\n * returns a new Rule instance\n * @param {object,string} options, or json string that can be parsed into options\n * @param {integer} options.priority (>1) - higher runs sooner.\n * @param {Object} options.event - event to fire when rule evaluates as successful\n * @param {string} options.event.type - name of event to emit\n * @param {string} options.event.params - parameters to pass to the event listener\n * @param {Object} options.conditions - conditions to evaluate when processing this rule\n * @param {any} options.name - identifier for a particular rule, particularly valuable in RuleResult output\n * @return {Rule} instance\n */\n function Rule(options) {\n _classCallCheck(this, Rule);\n\n var _this = _possibleConstructorReturn(this, (Rule.__proto__ || Object.getPrototypeOf(Rule)).call(this));\n\n if (typeof options === 'string') {\n options = JSON.parse(options);\n }\n if (options && options.conditions) {\n _this.setConditions(options.conditions);\n }\n if (options && options.onSuccess) {\n _this.on('success', options.onSuccess);\n }\n if (options && options.onFailure) {\n _this.on('failure', options.onFailure);\n }\n if (options && (options.name || options.name === 0)) {\n _this.setName(options.name);\n }\n\n var priority = options && options.priority || 1;\n _this.setPriority(priority);\n\n var event = options && options.event || { type: 'unknown' };\n _this.setEvent(event);\n return _this;\n }\n\n /**\n * Sets the priority of the rule\n * @param {integer} priority (>=1) - increasing the priority causes the rule to be run prior to other rules\n */\n\n\n _createClass(Rule, [{\n key: 'setPriority',\n value: function setPriority(priority) {\n priority = parseInt(priority, 10);\n if (priority <= 0) throw new Error('Priority must be greater than zero');\n this.priority = priority;\n return this;\n }\n\n /**\n * Sets the name of the rule\n * @param {any} name - any truthy input and zero is allowed\n */\n\n }, {\n key: 'setName',\n value: function setName(name) {\n if (!name && name !== 0) {\n throw new Error('Rule \"name\" must be defined');\n }\n this.name = name;\n return this;\n }\n\n /**\n * Sets the conditions to run when evaluating the rule.\n * @param {object} conditions - conditions, root element must be a boolean operator\n */\n\n }, {\n key: 'setConditions',\n value: function setConditions(conditions) {\n if (!conditions.hasOwnProperty('all') && !conditions.hasOwnProperty('any')) {\n throw new Error('\"conditions\" root must contain a single instance of \"all\" or \"any\"');\n }\n this.conditions = new _condition2.default(conditions);\n return this;\n }\n\n /**\n * Sets the event to emit when the conditions evaluate truthy\n * @param {object} event - event to emit\n * @param {string} event.type - event name to emit on\n * @param {string} event.params - parameters to emit as the argument of the event emission\n */\n\n }, {\n key: 'setEvent',\n value: function setEvent(event) {\n if (!event) throw new Error('Rule: setEvent() requires event object');\n if (!event.hasOwnProperty('type')) throw new Error('Rule: setEvent() requires event object with \"type\" property');\n this.event = {\n type: event.type\n };\n if (event.params) this.event.params = event.params;\n return this;\n }\n\n /**\n * Sets the engine to run the rules under\n * @param {object} engine\n * @returns {Rule}\n */\n\n }, {\n key: 'setEngine',\n value: function setEngine(engine) {\n this.engine = engine;\n return this;\n }\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var stringify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var props = {\n conditions: this.conditions.toJSON(false),\n priority: this.priority,\n event: this.event,\n name: this.name\n };\n if (stringify) {\n return JSON.stringify(props);\n }\n return props;\n }\n\n /**\n * Priorizes an array of conditions based on \"priority\"\n * When no explicit priority is provided on the condition itself, the condition's priority is determine by its fact\n * @param {Condition[]} conditions\n * @return {Condition[][]} prioritized two-dimensional array of conditions\n * Each outer array element represents a single priority(integer). Inner array is\n * all conditions with that priority.\n */\n\n }, {\n key: 'prioritizeConditions',\n value: function prioritizeConditions(conditions) {\n var _this2 = this;\n\n var factSets = conditions.reduce(function (sets, condition) {\n // if a priority has been set on this specific condition, honor that first\n // otherwise, use the fact's priority\n var priority = condition.priority;\n if (!priority) {\n var fact = _this2.engine.getFact(condition.fact);\n priority = fact && fact.priority || 1;\n }\n if (!sets[priority]) sets[priority] = [];\n sets[priority].push(condition);\n return sets;\n }, {});\n return Object.keys(factSets).sort(function (a, b) {\n return Number(a) > Number(b) ? -1 : 1; // order highest priority -> lowest\n }).map(function (priority) {\n return factSets[priority];\n });\n }\n\n /**\n * Evaluates the rule, starting with the root boolean operator and recursing down\n * All evaluation is done within the context of an almanac\n * @return {Promise(RuleResult)} rule evaluation result\n */\n\n }, {\n key: 'evaluate',\n value: function evaluate(almanac) {\n var _this3 = this;\n\n var ruleResult = new _ruleResult2.default(this.conditions, this.event, this.priority, this.name);\n\n /**\n * Evaluates the rule conditions\n * @param {Condition} condition - condition to evaluate\n * @return {Promise(true|false)} - resolves with the result of the condition evaluation\n */\n var evaluateCondition = function evaluateCondition(condition) {\n if (condition.isBooleanOperator()) {\n var subConditions = condition[condition.operator];\n var comparisonPromise = void 0;\n if (condition.operator === 'all') {\n comparisonPromise = all(subConditions);\n } else {\n comparisonPromise = any(subConditions);\n }\n // for booleans, rule passing is determined by the all/any result\n return comparisonPromise.then(function (comparisonValue) {\n var passes = comparisonValue === true;\n condition.result = passes;\n return passes;\n });\n } else {\n return condition.evaluate(almanac, _this3.engine.operators).then(function (evaluationResult) {\n var passes = evaluationResult.result;\n condition.factResult = evaluationResult.leftHandSideValue;\n condition.result = passes;\n return passes;\n });\n }\n };\n\n /**\n * Evalutes an array of conditions, using an 'every' or 'some' array operation\n * @param {Condition[]} conditions\n * @param {string(every|some)} array method to call for determining result\n * @return {Promise(boolean)} whether conditions evaluated truthy or falsey based on condition evaluation + method\n */\n var evaluateConditions = function evaluateConditions(conditions, method) {\n if (!Array.isArray(conditions)) conditions = [conditions];\n\n return Promise.all(conditions.map(function (condition) {\n return evaluateCondition(condition);\n })).then(function (conditionResults) {\n (0, _debug2.default)('rule::evaluateConditions results', conditionResults);\n return method.call(conditionResults, function (result) {\n return result === true;\n });\n });\n };\n\n /**\n * Evaluates a set of conditions based on an 'all' or 'any' operator.\n * First, orders the top level conditions based on priority\n * Iterates over each priority set, evaluating each condition\n * If any condition results in the rule to be guaranteed truthy or falsey,\n * it will short-circuit and not bother evaluating any additional rules\n * @param {Condition[]} conditions - conditions to be evaluated\n * @param {string('all'|'any')} operator\n * @return {Promise(boolean)} rule evaluation result\n */\n var prioritizeAndRun = function prioritizeAndRun(conditions, operator) {\n if (conditions.length === 0) {\n return Promise.resolve(true);\n }\n var method = Array.prototype.some;\n if (operator === 'all') {\n method = Array.prototype.every;\n }\n var orderedSets = _this3.prioritizeConditions(conditions);\n var cursor = Promise.resolve();\n // use for() loop over Array.forEach to support IE8 without polyfill\n\n var _loop = function _loop(i) {\n var set = orderedSets[i];\n var stop = false;\n cursor = cursor.then(function (setResult) {\n // after the first set succeeds, don't fire off the remaining promises\n if (operator === 'any' && setResult === true || stop) {\n (0, _debug2.default)('prioritizeAndRun::detected truthy result; skipping remaining conditions');\n stop = true;\n return true;\n }\n\n // after the first set fails, don't fire off the remaining promises\n if (operator === 'all' && setResult === false || stop) {\n (0, _debug2.default)('prioritizeAndRun::detected falsey result; skipping remaining conditions');\n stop = true;\n return false;\n }\n // all conditions passed; proceed with running next set in parallel\n return evaluateConditions(set, method);\n });\n };\n\n for (var i = 0; i < orderedSets.length; i++) {\n _loop(i);\n }\n return cursor;\n };\n\n /**\n * Runs an 'any' boolean operator on an array of conditions\n * @param {Condition[]} conditions to be evaluated\n * @return {Promise(boolean)} condition evaluation result\n */\n var any = function any(conditions) {\n return prioritizeAndRun(conditions, 'any');\n };\n\n /**\n * Runs an 'all' boolean operator on an array of conditions\n * @param {Condition[]} conditions to be evaluated\n * @return {Promise(boolean)} condition evaluation result\n */\n var all = function all(conditions) {\n return prioritizeAndRun(conditions, 'all');\n };\n\n /**\n * Emits based on rule evaluation result, and decorates ruleResult with 'result' property\n * @param {Boolean} result\n */\n var processResult = function processResult(result) {\n ruleResult.setResult(result);\n\n if (result) _this3.emit('success', ruleResult.event, almanac, ruleResult);else _this3.emit('failure', ruleResult.event, almanac, ruleResult);\n return ruleResult;\n };\n\n if (ruleResult.conditions.any) {\n return any(ruleResult.conditions.any).then(function (result) {\n return processResult(result);\n });\n } else {\n return all(ruleResult.conditions.all).then(function (result) {\n return processResult(result);\n });\n }\n }\n }]);\n\n return Rule;\n}(_events.EventEmitter);\n\nexports.default = Rule;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Operator = function () {\n /**\n * Constructor\n * @param {string} name - operator identifier\n * @param {function(factValue, jsonValue)} callback - operator evaluation method\n * @param {function} [factValueValidator] - optional validator for asserting the data type of the fact\n * @returns {Operator} - instance\n */\n function Operator(name, cb, factValueValidator) {\n _classCallCheck(this, Operator);\n\n this.name = String(name);\n if (!name) throw new Error('Missing operator name');\n if (typeof cb !== 'function') throw new Error('Missing operator callback');\n this.cb = cb;\n this.factValueValidator = factValueValidator;\n if (!this.factValueValidator) this.factValueValidator = function () {\n return true;\n };\n }\n\n /**\n * Takes the fact result and compares it to the condition 'value', using the callback\n * @param {mixed} factValue - fact result\n * @param {mixed} jsonValue - \"value\" property of the condition\n * @returns {Boolean} - whether the values pass the operator test\n */\n\n\n _createClass(Operator, [{\n key: 'evaluate',\n value: function evaluate(factValue, jsonValue) {\n return this.factValueValidator(factValue) && this.cb(factValue, jsonValue);\n }\n }]);\n\n return Operator;\n}();\n\nexports.default = Operator;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar UndefinedFactError = exports.UndefinedFactError = function (_Error) {\n _inherits(UndefinedFactError, _Error);\n\n function UndefinedFactError() {\n var _ref;\n\n _classCallCheck(this, UndefinedFactError);\n\n for (var _len = arguments.length, props = Array(_len), _key = 0; _key < _len; _key++) {\n props[_key] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = UndefinedFactError.__proto__ || Object.getPrototypeOf(UndefinedFactError)).call.apply(_ref, [this].concat(props)));\n\n _this.code = 'UNDEFINED_FACT';\n return _this;\n }\n\n return UndefinedFactError;\n}(Error);","'use strict';\nmodule.exports = function(boundThis) {\n var f = this\n , ret\n\n if (arguments.length < 2)\n ret = function() {\n if (this instanceof ret) {\n var ret_ = f.apply(this, arguments)\n return Object(ret_) === ret_\n ? ret_\n : this\n }\n else\n return f.apply(boundThis, arguments)\n }\n else {\n var boundArgs = new Array(arguments.length - 1)\n for (var i = 1; i < arguments.length; i++)\n boundArgs[i - 1] = arguments[i]\n\n ret = function() {\n var boundLen = boundArgs.length\n , args = new Array(boundLen + arguments.length)\n , i\n for (i = 0; i < boundLen; i++)\n args[i] = boundArgs[i]\n for (i = 0; i < arguments.length; i++)\n args[boundLen + i] = arguments[i]\n\n if (this instanceof ret) {\n var ret_ = f.apply(this, args)\n return Object(ret_) === ret_\n ? ret_\n : this\n }\n else\n return f.apply(boundThis, args)\n }\n }\n\n ret.prototype = f.prototype\n return ret\n}\n","'use strict'\n\n/*!\n * imports.\n */\n\nvar bind = Function.prototype.bind || require('fast-bind')\n\n/*!\n * exports.\n */\n\nmodule.exports = curry2\n\n/**\n * Curry a binary function.\n *\n * @param {Function} fn\n * Binary function to curry.\n *\n * @param {Object} [self]\n * Function `this` context.\n *\n * @return {Function|*}\n * If partially applied, return unary function, otherwise, return result of full application.\n */\n\nfunction curry2 (fn, self) {\n var out = function () {\n if (arguments.length === 0) return out\n\n return arguments.length > 1\n ? fn.apply(self, arguments)\n : bind.call(fn, self, arguments[0])\n }\n\n out.uncurry = function uncurry () {\n return fn\n }\n\n return out\n}\n","'use strict';\n\n/*!\n * exports.\n */\n\nmodule.exports = brackets2dots;\n\n/*!\n * regexp patterns.\n */\n\nvar REPLACE_BRACKETS = /\\[([^\\[\\]]+)\\]/g;\nvar LFT_RT_TRIM_DOTS = /^[.]*|[.]*$/g;\n\n/**\n * Convert string with bracket notation to dot property notation.\n *\n * ### Examples:\n *\n * brackets2dots('group[0].section.a.seat[3]')\n * //=> 'group.0.section.a.seat.3'\n *\n * brackets2dots('[0].section.a.seat[3]')\n * //=> '0.section.a.seat.3'\n *\n * brackets2dots('people[*].age')\n * //=> 'people.*.age'\n *\n * @param {String} string\n * original string\n *\n * @return {String}\n * dot/bracket-notation string\n */\n\nfunction brackets2dots(string) {\n return ({}).toString.call(string) == '[object String]'\n ? string.replace(REPLACE_BRACKETS, '.$1').replace(LFT_RT_TRIM_DOTS, '')\n : ''\n}\n","'use strict'\n\nvar toString = Object.prototype.toString\n\n/**\n * Transform dot-delimited strings to array of strings.\n *\n * @param {String} string\n * Dot-delimited string.\n *\n * @return {Array}\n * Array of strings.\n */\n\nfunction dotsplit (string) {\n var idx = -1\n var str = compact(normalize(string).split('.'))\n var end = str.length\n var out = []\n\n while (++idx < end) {\n out.push(todots(str[idx]))\n }\n\n return out\n}\n\n/**\n * Replace escapes with a placeholder.\n *\n * @param {String} string\n * Dot-delimited string.\n *\n * @return {String}\n * Dot-delimited string with placeholders in place of escapes.\n */\n\nfunction normalize (string) {\n return (toString.call(string) === '[object String]' ? string : '').replace(/\\\\\\./g, '\\uffff')\n}\n\n/**\n * Drop empty values from array.\n *\n * @param {Array} array\n * Array of strings.\n *\n * @return {Array}\n * Array of strings (empty values dropped).\n */\n\nfunction compact (arr) {\n var idx = -1\n var end = arr.length\n var out = []\n\n while (++idx < end) {\n if (arr[idx]) out.push(arr[idx])\n }\n\n return out\n}\n\n/**\n * Change placeholder to dots.\n *\n * @param {String} string\n * Dot-delimited string with placeholders.\n *\n * @return {String}\n * Dot-delimited string without placeholders.\n */\n\nfunction todots (string) {\n return string.replace(/\\uffff/g, '.')\n}\n\n/*!\n * exports.\n */\n\nmodule.exports = dotsplit\n","'use strict'\n\nconst curry2 = require('curry2')\nconst dotted = require('brackets2dots')\nconst splits = require('dotsplit.js')\nconst string = Object.prototype.toString\n\nmodule.exports = curry2(selectn)\n\n/**\n * Curried property accessor function that resolves deeply-nested object properties via dot/bracket-notation\n * string path while mitigating `TypeErrors` via friendly and composable API.\n *\n * @param {String|Array} path\n * Dot/bracket-notation string path or array.\n *\n * @param {Object} object\n * Object to access.\n *\n * @return {Function|*|undefined}\n * (1) returns `selectn/1` when partially applied.\n * (2) returns value at path if path exists.\n * (3) returns undefined if path does not exist.\n */\nfunction selectn (path, object) {\n let idx = -1\n const seg = string.call(path) === '[object Array]' ? path : splits(dotted(path))\n const end = seg.length\n let ref = end ? object : undefined\n\n while (++idx < end) {\n if (Object(ref) !== ref) return undefined\n ref = ref[seg[idx]]\n }\n\n return typeof ref === 'function' ? ref() : ref\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _fact = require('./fact');\n\nvar _fact2 = _interopRequireDefault(_fact);\n\nvar _errors = require('./errors');\n\nvar _debug = require('./debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _selectn = require('selectn');\n\nvar _selectn2 = _interopRequireDefault(_selectn);\n\nvar _lodash = require('lodash.isobjectlike');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Fact results lookup\n * Triggers fact computations and saves the results\n * A new almanac is used for every engine run()\n */\nvar Almanac = function () {\n function Almanac(factMap) {\n var runtimeFacts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, Almanac);\n\n this.factMap = new Map(factMap);\n this.factResultsCache = new Map(); // { cacheKey: Promise<factValu> }\n this.allowUndefinedFacts = Boolean(options.allowUndefinedFacts);\n\n for (var factId in runtimeFacts) {\n var fact = void 0;\n if (runtimeFacts[factId] instanceof _fact2.default) {\n fact = runtimeFacts[factId];\n } else {\n fact = new _fact2.default(factId, runtimeFacts[factId]);\n }\n\n this._addConstantFact(fact);\n (0, _debug2.default)('almanac::constructor initialized runtime fact:' + fact.id + ' with ' + fact.value + '<' + _typeof(fact.value) + '>');\n }\n }\n\n /**\n * Retrieve fact by id, raising an exception if it DNE\n * @param {String} factId\n * @return {Fact}\n */\n\n\n _createClass(Almanac, [{\n key: '_getFact',\n value: function _getFact(factId) {\n return this.factMap.get(factId);\n }\n\n /**\n * Registers fact with the almanac\n * @param {[type]} fact [description]\n */\n\n }, {\n key: '_addConstantFact',\n value: function _addConstantFact(fact) {\n this.factMap.set(fact.id, fact);\n this._setFactValue(fact, {}, fact.value);\n }\n\n /**\n * Sets the computed value of a fact\n * @param {Fact} fact\n * @param {Object} params - values for differentiating this fact value from others, used for cache key\n * @param {Mixed} value - computed value\n */\n\n }, {\n key: '_setFactValue',\n value: function _setFactValue(fact, params, value) {\n var cacheKey = fact.getCacheKey(params);\n var factValue = Promise.resolve(value);\n if (cacheKey) {\n this.factResultsCache.set(cacheKey, factValue);\n }\n return factValue;\n }\n\n /**\n * Adds a constant fact during runtime. Can be used mid-run() to add additional information\n * @param {String} fact - fact identifier\n * @param {Mixed} value - constant value of the fact\n */\n\n }, {\n key: 'addRuntimeFact',\n value: function addRuntimeFact(factId, value) {\n var fact = new _fact2.default(factId, value);\n return this._addConstantFact(fact);\n }\n\n /**\n * Returns the value of a fact, based on the given parameters. Utilizes the 'almanac' maintained\n * by the engine, which cache's fact computations based on parameters provided\n * @param {string} factId - fact identifier\n * @param {Object} params - parameters to feed into the fact. By default, these will also be used to compute the cache key\n * @param {String} path - object\n * @return {Promise} a promise which will resolve with the fact computation.\n */\n\n }, {\n key: 'factValue',\n value: function factValue(factId) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n var factValuePromise = void 0;\n var fact = this._getFact(factId);\n if (fact === undefined) {\n if (this.allowUndefinedFacts) {\n return Promise.resolve(undefined);\n } else {\n return Promise.reject(new _errors.UndefinedFactError('Undefined fact: ' + factId));\n }\n }\n if (fact.isConstant()) {\n factValuePromise = Promise.resolve(fact.calculate(params, this));\n } else {\n var cacheKey = fact.getCacheKey(params);\n var cacheVal = cacheKey && this.factResultsCache.get(cacheKey);\n if (cacheVal) {\n factValuePromise = Promise.resolve(cacheVal);\n (0, _debug2.default)('almanac::factValue cache hit for fact:' + factId);\n } else {\n (0, _debug2.default)('almanac::factValue cache miss for fact:' + factId + '; calculating');\n factValuePromise = this._setFactValue(fact, params, fact.calculate(params, this));\n }\n }\n if (path) {\n return factValuePromise.then(function (factValue) {\n if ((0, _lodash2.default)(factValue)) {\n var pathValue = (0, _selectn2.default)(path)(factValue);\n (0, _debug2.default)('condition::evaluate extracting object property ' + path + ', received: ' + pathValue);\n return pathValue;\n } else {\n (0, _debug2.default)('condition::evaluate could not compute object path(' + path + ') of non-object: ' + factValue + ' <' + (typeof factValue === 'undefined' ? 'undefined' : _typeof(factValue)) + '>; continuing with ' + factValue);\n return factValue;\n }\n });\n }\n return factValuePromise;\n }\n }]);\n\n return Almanac;\n}();\n\nexports.default = Almanac;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar SuccessEventFact = function SuccessEventFact() {\n var successTriggers = [];\n return function () {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (params.event) {\n successTriggers.push(params.event);\n }\n return successTriggers;\n };\n};\n\nexports.SuccessEventFact = SuccessEventFact;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _operator = require('./operator');\n\nvar _operator2 = _interopRequireDefault(_operator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Operators = [];\nOperators.push(new _operator2.default('equal', function (a, b) {\n return a === b;\n}));\nOperators.push(new _operator2.default('notEqual', function (a, b) {\n return a !== b;\n}));\nOperators.push(new _operator2.default('in', function (a, b) {\n return b.indexOf(a) > -1;\n}));\nOperators.push(new _operator2.default('notIn', function (a, b) {\n return b.indexOf(a) === -1;\n}));\n\nOperators.push(new _operator2.default('contains', function (a, b) {\n return a.indexOf(b) > -1;\n}, Array.isArray));\nOperators.push(new _operator2.default('doesNotContain', function (a, b) {\n return a.indexOf(b) === -1;\n}, Array.isArray));\n\nfunction numberValidator(factValue) {\n return Number.parseFloat(factValue).toString() !== 'NaN';\n}\nOperators.push(new _operator2.default('lessThan', function (a, b) {\n return a < b;\n}, numberValidator));\nOperators.push(new _operator2.default('lessThanInclusive', function (a, b) {\n return a <= b;\n}, numberValidator));\nOperators.push(new _operator2.default('greaterThan', function (a, b) {\n return a > b;\n}, numberValidator));\nOperators.push(new _operator2.default('greaterThanInclusive', function (a, b) {\n return a >= b;\n}, numberValidator));\n\nexports.default = Operators;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FINISHED = exports.RUNNING = exports.READY = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _fact = require('./fact');\n\nvar _fact2 = _interopRequireDefault(_fact);\n\nvar _rule = require('./rule');\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _operator = require('./operator');\n\nvar _operator2 = _interopRequireDefault(_operator);\n\nvar _almanac = require('./almanac');\n\nvar _almanac2 = _interopRequireDefault(_almanac);\n\nvar _events = require('events');\n\nvar _engineFacts = require('./engine-facts');\n\nvar _engineDefaultOperators = require('./engine-default-operators');\n\nvar _engineDefaultOperators2 = _interopRequireDefault(_engineDefaultOperators);\n\nvar _debug = require('./debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar READY = exports.READY = 'READY';\nvar RUNNING = exports.RUNNING = 'RUNNING';\nvar FINISHED = exports.FINISHED = 'FINISHED';\n\nvar Engine = function (_EventEmitter) {\n _inherits(Engine, _EventEmitter);\n\n /**\n * Returns a new Engine instance\n * @param {Rule[]} rules - array of rules to initialize with\n */\n function Engine() {\n var rules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Engine);\n\n var _this = _possibleConstructorReturn(this, (Engine.__proto__ || Object.getPrototypeOf(Engine)).call(this));\n\n _this.rules = [];\n _this.allowUndefinedFacts = options.allowUndefinedFacts || false;\n _this.operators = new Map();\n _this.facts = new Map();\n _this.status = READY;\n rules.map(function (r) {\n return _this.addRule(r);\n });\n _engineDefaultOperators2.default.map(function (o) {\n return _this.addOperator(o);\n });\n return _this;\n }\n\n /**\n * Add a rule definition to the engine\n * @param {object|Rule} properties - rule definition. can be JSON representation, or instance of Rule\n * @param {integer} properties.priority (>1) - higher runs sooner.\n * @param {Object} properties.event - event to fire when rule evaluates as successful\n * @param {string} properties.event.type - name of event to emit\n * @param {string} properties.event.params - parameters to pass to the event listener\n * @param {Object} properties.conditions - conditions to evaluate when processing this rule\n */\n\n\n _createClass(Engine, [{\n key: 'addRule',\n value: function addRule(properties) {\n if (!properties) throw new Error('Engine: addRule() requires options');\n if (!properties.hasOwnProperty('conditions')) throw new Error('Engine: addRule() argument requires \"conditions\" property');\n if (!properties.hasOwnProperty('event')) throw new Error('Engine: addRule() argument requires \"event\" property');\n\n var rule = void 0;\n if (properties instanceof _rule2.default) {\n rule = properties;\n } else {\n rule = new _rule2.default(properties);\n }\n rule.setEngine(this);\n\n this.rules.push(rule);\n this.prioritizedRules = null;\n return this;\n }\n\n /**\n * Remove a rule from the engine\n * @param {object|Rule} rule - rule definition. Must be a instance of Rule\n */\n\n }, {\n key: 'removeRule',\n value: function removeRule(rule) {\n if (rule instanceof _rule2.default === false) throw new Error('Engine: removeRule() rule must be a instance of Rule');\n\n var index = this.rules.indexOf(rule);\n if (index === -1) return false;\n this.prioritizedRules = null;\n return Boolean(this.rules.splice(index, 1).length);\n }\n\n /**\n * Add a custom operator definition\n * @param {string} operatorOrName - operator identifier within the condition; i.e. instead of 'equals', 'greaterThan', etc\n * @param {function(factValue, jsonValue)} callback - the method to execute when the operator is encountered.\n */\n\n }, {\n key: 'addOperator',\n value: function addOperator(operatorOrName, cb) {\n var operator = void 0;\n if (operatorOrName instanceof _operator2.default) {\n operator = operatorOrName;\n } else {\n operator = new _operator2.default(operatorOrName, cb);\n }\n (0, _debug2.default)('engine::addOperator name:' + operator.name);\n this.operators.set(operator.name, operator);\n }\n\n /**\n * Remove a custom operator definition\n * @param {string} operatorOrName - operator identifier within the condition; i.e. instead of 'equals', 'greaterThan', etc\n * @param {function(factValue, jsonValue)} callback - the method to execute when the operator is encountered.\n */\n\n }, {\n key: 'removeOperator',\n value: function removeOperator(operatorOrName) {\n var operatorName = void 0;\n if (operatorOrName instanceof _operator2.default) {\n operatorName = operatorOrName.name;\n } else {\n operatorName = operatorOrName;\n }\n\n return this.operators.delete(operatorName);\n }\n\n /**\n * Add a fact definition to the engine. Facts are called by rules as they are evaluated.\n * @param {object|Fact} id - fact identifier or instance of Fact\n * @param {function} definitionFunc - function to be called when computing the fact value for a given rule\n * @param {Object} options - options to initialize the fact with. used when \"id\" is not a Fact instance\n */\n\n }, {\n key: 'addFact',\n value: function addFact(id, valueOrMethod, options) {\n var factId = id;\n var fact = void 0;\n if (id instanceof _fact2.default) {\n factId = id.id;\n fact = id;\n } else {\n fact = new _fact2.default(id, valueOrMethod, options);\n }\n (0, _debug2.default)('engine::addFact id:' + factId);\n this.facts.set(factId, fact);\n return this;\n }\n\n /**\n * Add a fact definition to the engine. Facts are called by rules as they are evaluated.\n * @param {object|Fact} id - fact identifier or instance of Fact\n */\n\n }, {\n key: 'removeFact',\n value: function removeFact(factOrId) {\n var factId = void 0;\n if (!(factOrId instanceof _fact2.default)) {\n factId = factOrId;\n } else {\n factId = factOrId.id;\n }\n\n return this.facts.delete(factId);\n }\n\n /**\n * Iterates over the engine rules, organizing them by highest -> lowest priority\n * @return {Rule[][]} two dimensional array of Rules.\n * Each outer array element represents a single priority(integer). Inner array is\n * all rules with that priority.\n */\n\n }, {\n key: 'prioritizeRules',\n value: function prioritizeRules() {\n if (!this.prioritizedRules) {\n var ruleSets = this.rules.reduce(function (sets, rule) {\n var priority = rule.priority;\n if (!sets[priority]) sets[priority] = [];\n sets[priority].push(rule);\n return sets;\n }, {});\n this.prioritizedRules = Object.keys(ruleSets).sort(function (a, b) {\n return Number(a) > Number(b) ? -1 : 1; // order highest priority -> lowest\n }).map(function (priority) {\n return ruleSets[priority];\n });\n }\n return this.prioritizedRules;\n }\n\n /**\n * Stops the rules engine from running the next priority set of Rules. All remaining rules will be resolved as undefined,\n * and no further events emitted. Since rules of the same priority are evaluated in parallel(not series), other rules of\n * the same priority may still emit events, even though the engine is in a \"finished\" state.\n * @return {Engine}\n */\n\n }, {\n key: 'stop',\n value: function stop() {\n this.status = FINISHED;\n return this;\n }\n\n /**\n * Returns a fact by fact-id\n * @param {string} factId - fact identifier\n * @return {Fact} fact instance, or undefined if no such fact exists\n */\n\n }, {\n key: 'getFact',\n value: function getFact(factId) {\n return this.facts.get(factId);\n }\n\n /**\n * Runs an array of rules\n * @param {Rule[]} array of rules to be evaluated\n * @return {Promise} resolves when all rules in the array have been evaluated\n */\n\n }, {\n key: 'evaluateRules',\n value: function evaluateRules(ruleArray, almanac) {\n var _this2 = this;\n\n return Promise.all(ruleArray.map(function (rule) {\n if (_this2.status !== RUNNING) {\n (0, _debug2.default)('engine::run status:' + _this2.status + '; skipping remaining rules');\n return;\n }\n return rule.evaluate(almanac).then(function (ruleResult) {\n (0, _debug2.default)('engine::run ruleResult:' + ruleResult.result);\n if (ruleResult.result) {\n _this2.emit('success', rule.event, almanac, ruleResult);\n _this2.emit(rule.event.type, rule.event.params, almanac, ruleResult);\n almanac.factValue('success-events', { event: rule.event });\n } else {\n _this2.emit('failure', rule.event, almanac, ruleResult);\n }\n });\n }));\n }\n\n /**\n * Runs the rules engine\n * @param {Object} runtimeFacts - fact values known at runtime\n * @param {Object} runOptions - run options\n * @return {Promise} resolves when the engine has completed running\n */\n\n }, {\n key: 'run',\n value: function run() {\n var _this3 = this;\n\n var runtimeFacts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n (0, _debug2.default)('engine::run started');\n (0, _debug2.default)('engine::run runtimeFacts:', runtimeFacts);\n runtimeFacts['success-events'] = new _fact2.default('success-events', (0, _engineFacts.SuccessEventFact)(), { cache: false });\n this.status = RUNNING;\n var almanac = new _almanac2.default(this.facts, runtimeFacts, { allowUndefinedFacts: this.allowUndefinedFacts });\n var orderedSets = this.prioritizeRules();\n var cursor = Promise.resolve();\n // for each rule set, evaluate in parallel,\n // before proceeding to the next priority set.\n return new Promise(function (resolve, reject) {\n orderedSets.map(function (set) {\n cursor = cursor.then(function () {\n return _this3.evaluateRules(set, almanac);\n }).catch(reject);\n return cursor;\n });\n cursor.then(function () {\n _this3.status = FINISHED;\n (0, _debug2.default)('engine::run completed');\n return almanac.factValue('success-events');\n }).then(function (events) {\n resolve({\n events: events,\n almanac: almanac\n });\n }).catch(reject);\n });\n }\n }]);\n\n return Engine;\n}(_events.EventEmitter);\n\nexports.default = Engine;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Engine = exports.Operator = exports.Rule = exports.Fact = undefined;\n\nexports.default = function (rules, options) {\n return new _engine2.default(rules, options);\n};\n\nvar _engine = require('./engine');\n\nvar _engine2 = _interopRequireDefault(_engine);\n\nvar _fact = require('./fact');\n\nvar _fact2 = _interopRequireDefault(_fact);\n\nvar _rule = require('./rule');\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _operator = require('./operator');\n\nvar _operator2 = _interopRequireDefault(_operator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.Fact = _fact2.default;\nexports.Rule = _rule2.default;\nexports.Operator = _operator2.default;\nexports.Engine = _engine2.default;","'use strict';\n\nmodule.exports = require('./json-rules-engine');","function sha256(ascii) {\n function rightRotate(value, amount) {\n return (value >>> amount) | (value << (32 - amount));\n }\n const mathPow = Math.pow;\n const maxWord = mathPow(2, 32);\n const lengthProperty = \"length\";\n let i, j; // Used as a counter across the whole file\n let result = \"\";\n const words = [];\n const asciiBitLength = ascii[lengthProperty] * 8;\n //* caching results is optional - remove/add slash from front of this line to toggle\n // Initial hash value: first 32 bits of the fractional parts of the square roots of the first 8 primes\n // (we actually calculate the first 64, but extra values are just ignored)\n // @ts-ignore\n let hash = (sha256.h = sha256.h || []);\n // Round constants: first 32 bits of the fractional parts of the cube roots of the first 64 primes\n // @ts-ignore\n const k = (sha256.k = sha256.k || []);\n let primeCounter = k[lengthProperty];\n /*/\n var hash = [], k = [];\n var primeCounter = 0;\n //*/\n const isComposite = {};\n for (let candidate = 2; primeCounter < 64; candidate++) {\n // @ts-ignore\n if (!isComposite[candidate]) {\n for (i = 0; i < 313; i += candidate) {\n // @ts-ignore\n isComposite[i] = candidate;\n }\n hash[primeCounter] = (mathPow(candidate, 0.5) * maxWord) | 0;\n k[primeCounter++] = (mathPow(candidate, 1 / 3) * maxWord) | 0;\n }\n }\n ascii += \"\\x80\"; // Append Ƈ' bit (plus zero padding)\n while ((ascii[lengthProperty] % 64) - 56)\n ascii += \"\\x00\"; // More zero padding\n for (i = 0; i < ascii[lengthProperty]; i++) {\n j = ascii.charCodeAt(i);\n if (j >> 8)\n return; // ASCII check: only accept characters in range 0-255\n words[i >> 2] |= j << (((3 - i) % 4) * 8);\n }\n words[words[lengthProperty]] = (asciiBitLength / maxWord) | 0;\n words[words[lengthProperty]] = asciiBitLength;\n // process each chunk\n for (j = 0; j < words[lengthProperty];) {\n const w = words.slice(j, (j += 16)); // The message is expanded into 64 words as part of the iteration\n const oldHash = hash;\n // This is now the undefinedworking hash\", often labelled as variables a...g\n // (we have to truncate as well, otherwise extra entries at the end accumulate\n hash = hash.slice(0, 8);\n for (i = 0; i < 64; i++) {\n const i2 = i + j;\n // Expand the message into 64 words\n // Used below if\n const w15 = w[i - 15], w2 = w[i - 2];\n // Iterate\n const a = hash[0], e = hash[4];\n const temp1 = hash[7] +\n (rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25)) + // S1\n ((e & hash[5]) ^ (~e & hash[6])) + // ch\n k[i] +\n // Expand the message schedule if needed\n (w[i] =\n i < 16\n ? w[i]\n : (w[i - 16] +\n (rightRotate(w15, 7) ^ rightRotate(w15, 18) ^ (w15 >>> 3)) + // s0\n w[i - 7] +\n (rightRotate(w2, 17) ^ rightRotate(w2, 19) ^ (w2 >>> 10))) | // s1\n 0);\n // This is only used once, so *could* be moved below, but it only saves 4 bytes and makes things unreadble\n const temp2 = (rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22)) + // S0\n ((a & hash[1]) ^ (a & hash[2]) ^ (hash[1] & hash[2])); // maj\n hash = [(temp1 + temp2) | 0].concat(hash); // We don't bother trimming off the extra ones, they're harmless as long as we're truncating when we do the slice()\n hash[4] = (hash[4] + temp1) | 0;\n }\n for (i = 0; i < 8; i++) {\n hash[i] = (hash[i] + oldHash[i]) | 0;\n }\n }\n for (i = 0; i < 8; i++) {\n for (j = 3; j + 1; j--) {\n const b = (hash[i] >> (j * 8)) & 255;\n result += (b < 16 ? 0 : \"\") + b.toString(16);\n }\n }\n return result;\n}\nfunction createHash(data) {\n const hash = sha256(data);\n return [\n hash?.substring(0, 8),\n hash?.substring(8, 12),\n hash?.substring(12, 16),\n hash?.substring(16, 20),\n hash?.substring(20, 32),\n ].join(\"-\");\n}\n/**\n * Generates a UUID from the user data, such as user-agent and IP Address + Salt\n * The salt is generated on the currante date + a Secret from the StoreFront,\n * So this UUID will be regenerated every day.\n *\n * We can never use this id to trace back users for GDPR compliance.\n *\n * @param data\n * @param secret\n */\nexport function getPacklyticsId(data, secret) {\n const currentDate = new Date();\n const formattedDate = currentDate.toLocaleDateString(\"en-US\");\n const salt = sha256(formattedDate + secret);\n return createHash(data + salt);\n}\n","export type Options = {\n /**\n * A validate callback that is called for each `locale`. If the `locale` is valid, return the `locale` as a string.\n * Otherwise return `undefined`, `null`, or an empty Array.\n * Should the callback throw an error, the error will be caught and the `locale` will be ignored.\n */\n validate?: (locale: string) => string | string[] | null | undefined;\n\n /**\n * If set to `true`, the wildcard locale `*` will be returned in the array.\n * If set to `false`, the wildcard locale `*` will be ignored.\n * Defaults to `true`.\n */\n ignoreWildcard?: boolean;\n};\n\nconst defaultValidate = (locale: string) => locale;\n\nexport const parseAcceptLanguage = (\n /** The value from the `Accept-Language` header.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language\n */\n languageHeaderValue: string | null | undefined,\n options: Options = {}\n): string[] => {\n if (!languageHeaderValue) return [];\n const { ignoreWildcard = true, validate = defaultValidate } = options;\n\n return languageHeaderValue\n .split(',')\n .map((lang): [number, string] => {\n const [locale, q = 'q=1'] = lang.split(';');\n const trimmedLocale = locale.trim();\n const numQ = Number(q.replace(/q ?=/, ''));\n if (isNaN(numQ)) return [0, trimmedLocale];\n return [numQ, trimmedLocale];\n })\n .sort(([q1], [q2]) => q2 - q1)\n .flatMap(([_, locale]) => {\n if (locale === '*' && ignoreWildcard) return [];\n try {\n return validate(locale) || [];\n // return Intl.DateTimeFormat.supportedLocalesOf(locale);\n } catch {\n return [];\n }\n });\n};\n","export function getHeaders(requestOrHeaders) {\n if (requestOrHeaders instanceof Request) {\n return requestOrHeaders.headers;\n }\n return requestOrHeaders;\n}\n","import { parseAcceptLanguage } from \"intl-parse-accept-language\";\nimport { getHeaders } from \"./get-headers.js\";\nexport function getClientLocales(requestOrHeaders) {\n let headers = getHeaders(requestOrHeaders);\n let acceptLanguage = headers.get(\"Accept-Language\");\n // if the header is not defined, return undefined\n if (!acceptLanguage)\n return undefined;\n let locales = parseAcceptLanguage(acceptLanguage, {\n validate: Intl.DateTimeFormat.supportedLocalesOf,\n ignoreWildcard: true,\n });\n // if there are no locales found, return undefined\n if (locales.length === 0)\n return undefined;\n // if there are multiple locales, return the array\n return locales;\n}\n","// Generic list of potential sensitive payload data\nexport const sanitizePayload = (data) => {\n let dataStr = JSON.stringify(data);\n const sensitiveFields = [\n \"username\",\n \"user\",\n \"user_id\",\n \"userid\",\n \"password\",\n \"pass\",\n \"pin\",\n \"passcode\",\n \"token\",\n \"api_token\",\n \"email\",\n \"address\",\n \"phone\",\n \"sex\",\n \"gender\",\n \"order\",\n \"order_id\",\n \"orderid\",\n \"payment\",\n \"credit_card\",\n ];\n sensitiveFields.forEach((field) => {\n dataStr = dataStr.replaceAll(new RegExp(`(\"${field}\"):(\".+?\"|\\\\d+)`, \"mgi\"), '$1:\"********\"');\n });\n return dataStr;\n};\n","import { sanitizePayload } from \"./sanatize-payload\";\nlet metadata = null;\nconst getPacklyticsMetadata = async () => {\n if (metadata)\n return;\n try {\n const response = await fetch(\"https://cdn.packlytics.packdigital.com/metadata.json\", {\n headers: {\n \"User-Agent\": \"packlytics-js\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n });\n if (response.ok) {\n metadata = await response.json();\n }\n else {\n console.error(\"Error getting Packlytics metadata:\", response.statusText);\n }\n }\n catch (error) {\n // @ts-ignore\n console.error(\"Error getting Packlytics metadata:\", error.message);\n }\n};\nexport const sendEvent = (storefrontId, sessionId) => {\n return async (action, eventPayload) => {\n const sanitizedEventPayload = sanitizePayload({\n ...eventPayload,\n });\n await getPacklyticsMetadata();\n if (!metadata) {\n console.warn(\"Pack event not sent: packlytics medatada is missing\");\n return;\n }\n // implement localization and add EU\n const analyticsData = metadata[\"us\"] || metadata[\"default\"];\n if (!analyticsData.token) {\n console.warn(\"Pack event not sent: api token is missing\");\n return;\n }\n const dataSourceName = metadata[\"dataSourceName\"] || \"analytics_events\";\n const endpointUrl = `${analyticsData.endpoint}/${analyticsData.version}/events?name=${dataSourceName}`;\n // qualified event data with payload and session id\n const eventData = {\n timestamp: new Date().toISOString(),\n action,\n version: \"1\",\n storefront_id: storefrontId || \"unknown\",\n session_id: sessionId,\n payload: sanitizedEventPayload,\n };\n return fetch(endpointUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${analyticsData.token}`,\n },\n body: JSON.stringify(eventData),\n });\n };\n};\n","import { sendEvent } from \"./send-event\";\nexport const trackPageHit = (storefrontId, sessionId) => {\n return (eventPayload = {}) => {\n return sendEvent(storefrontId, sessionId)(\"page_hit\", eventPayload);\n };\n};\n","import parser from \"ua-parser-js\";\nexport function getDevice(userAgent) {\n const userAgentData = parser(userAgent);\n return {\n deviceType: userAgentData.device.type || \"desktop\",\n deviceModel: userAgentData.device.model || \"unknown\",\n deviceVendor: userAgentData.device.vendor || \"unknown\",\n os: userAgentData.os.name || \"unknown\",\n osVersion: userAgentData.os.version || \"unknown\",\n browser: userAgentData.browser.name || \"unknown\",\n browserVersion: userAgentData.browser.version || \"unknown\",\n engine: userAgentData.engine.name || \"unknown\",\n engineVersion: userAgentData.engine.version || \"unknown\",\n cpu: userAgentData.cpu.architecture || \"unknown\",\n };\n}\n","import { getPacklyticsId } from \"./utils/get-packlytics-id\";\nimport { getClientLocales } from \"./utils/get-client-locales\";\nimport { trackPageHit } from \"./utils/page-hit\";\nimport { getDevice } from \"./utils/get-client-device\";\nimport { getStorefrontHeaders } from \"@shopify/remix-oxygen\";\nimport { getClientLocation } from \"./utils/get-client-location\";\nexport async function sendEvent(request, session, params) {\n if (process.env.NODE_ENV === \"development\") {\n return;\n }\n // Preview enabled\n if (!!session.get(\"previewEnabled\")) {\n return;\n }\n const payload = await request.json();\n const url = new URL(request.url);\n const ipaddress = getStorefrontHeaders(request)[\"buyerIp\"] || \"\";\n const dataToHash = `${request.headers.get(\"user-agent\")}${ipaddress}${url.hostname}`;\n const packlyticsId = getPacklyticsId(dataToHash, params.sessionSecret);\n const locale = getClientLocales(request) || [\"en-US\"];\n const location = getClientLocation(payload.locale || locale[0]);\n return trackPageHit(params.storefrontId, packlyticsId)({\n \"pack-session-id\": session.id, // This session ID is saved on the __pack cookie\n \"user-agent\": payload.userAgent || request.headers.get(\"user-agent\") || \"\",\n pathname: payload.pathname,\n query: payload.query,\n screen: payload.screen,\n referrer: payload.referrer,\n hostname: payload.hostname,\n ipaddress: ipaddress,\n userTimeZone: payload.userTimeZone,\n language: payload.language || getClientLocales(request) || \"\",\n locale: payload.locale || locale[0],\n location: location,\n connection: payload.connection || request.headers.get(\"connection\") || \"\",\n deviceCategory: payload.deviceCategory || \"\",\n href: payload.href || request.url,\n ...getDevice(request.headers.get(\"user-agent\") || \"\"),\n });\n}\nexport async function packlytics(pack, request, next) {\n const url = new URL(request.url);\n if (url.pathname.endsWith(\"/pack/track\") && request.method === \"POST\") {\n try {\n await sendEvent(request, pack.session, {\n storefrontId: pack.getPackSessionData().storeId,\n sessionSecret: pack.session.secret,\n });\n }\n catch (err) { }\n return new Response(JSON.stringify({ response: \"ok\" }));\n }\n return next();\n}\n","export function getClientLocation(locale) {\n const localeSplit = locale.split(\"-\");\n return localeSplit.length > 1 ? localeSplit[1].toLowerCase() : \"\";\n}\n","import { Pack } from \"./create-pack-client\";\nimport { packlytics } from \"@pack/packlytics\";\n\nexport async function handleRequest(\n pack: Pack,\n request: Request,\n handleRequest: (request: Request) => Promise<Response>\n): Promise<Response> {\n const packHandleResponse = await pack.handleRequest(request);\n\n const response = await packlytics(pack, request, () => {\n return handleRequest(request);\n });\n\n packHandleResponse(response);\n\n response.headers.append(\"powered-by\", \"Shopify, Hydrogen + Pack Digital\");\n\n // Always commit main session\n response.headers.append(\"Set-Cookie\", await pack.session.commit());\n\n // Only commit test session if there are actual changes\n // This reduces the number of Set-Cookie headers and potential race conditions\n if (pack.testSession.hasChanges()) {\n response.headers.append(\"Set-Cookie\", await pack.testSession.commit());\n }\n\n return response;\n}\n","import { useEffect } from \"react\";\nimport { stringify } from \"worktop/cookie\";\nimport { PACK_COOKIE_MAX_AGE, PACK_USER_CONSENT_COOKIE_ID } from \"../constants\";\n\ntype UsePackCookiesOptions = {\n /**\n * If set to `false`, Shopify cookies will be removed.\n * If set to `true`, Shopify unique user token cookie will have cookie expiry of 1 year.\n * Defaults to false.\n **/\n hasUserConsent?: boolean;\n /**\n * The domain scope of the cookie. Defaults to empty string.\n **/\n domain?: string;\n};\n\nexport function usePackCookies(options?: UsePackCookiesOptions): void {\n const { hasUserConsent = true, domain = \"\" } = options || {};\n\n useEffect(() => {\n setCookie(\n PACK_USER_CONSENT_COOKIE_ID,\n hasUserConsent ? \"true\" : \"false\",\n PACK_COOKIE_MAX_AGE,\n domain,\n );\n }, [hasUserConsent]);\n}\n\nfunction setCookie(\n name: string,\n value: string,\n maxage: number,\n domain: string,\n): void {\n document.cookie = stringify(name, value, {\n maxage,\n domain,\n samesite: \"Lax\",\n path: \"/\",\n });\n}\n","// src/cookie.ts\nvar g = new Set([\n \"domain\",\n \"path\",\n \"max-age\",\n \"expires\",\n \"samesite\",\n \"secure\",\n \"httponly\"\n]);\nfunction u(a) {\n let r = {}, e, t, n = 0, m = a.split(/;\\s*/g), s, i;\n for (; n < m.length; n++)\n if (t = m[n], e = t.indexOf(\"=\"), ~e) {\n if (s = t.substring(0, e++).trim(), i = t.substring(e).trim(), i[0] === '\"' && (i = i.substring(1, i.length - 1)), ~i.indexOf(\"%\"))\n try {\n i = decodeURIComponent(i);\n } catch (f) {\n }\n g.has(t = s.toLowerCase()) ? t === \"expires\" ? r.expires = new Date(i) : t === \"max-age\" ? r.maxage = +i : r[t] = i : r[s] = i;\n } else\n (s = t.trim().toLowerCase()) && (s === \"httponly\" || s === \"secure\") && (r[s] = !0);\n return r;\n}\nfunction l(a, r, e = {}) {\n let t = a + \"=\" + encodeURIComponent(r);\n return e.expires && (t += \"; Expires=\" + new Date(e.expires).toUTCString()), e.maxage != null && e.maxage >= 0 && (t += \"; Max-Age=\" + (e.maxage | 0)), e.domain && (t += \"; Domain=\" + e.domain), e.path && (t += \"; Path=\" + e.path), e.samesite && (t += \"; SameSite=\" + e.samesite), (e.secure || e.samesite === \"None\") && (t += \"; Secure\"), e.httponly && (t += \"; HttpOnly\"), t;\n}\nexport {\n u as parse,\n l as stringify\n};\n","export const PACK_COOKIE_ID = \"__pack\";\nexport const PACK_USER_CONSENT_COOKIE_ID = \"__pack_user_consent\";\nexport const PACK_TEST_COOKIE_ID = \"__pack_test\";\nexport const PACK_COOKIE_MAX_AGE = 60 * 60 * 24 * 360; // 1 year\n","import {\n createCookie,\n createCookieSessionStorage,\n type Session,\n type SessionStorage,\n} from \"@shopify/remix-oxygen\";\nimport { PACK_COOKIE_ID, PACK_COOKIE_MAX_AGE } from \"../constants\";\nimport { buildRandomUUID, hasUserConsent } from \"./cookies-utils\";\n\nfunction isSafari(userAgent: string | null): boolean {\n if (!userAgent) return false;\n\n // Check for iOS devices (iPhone/iPad) or macOS Safari\n return (\n /Safari\\//.test(userAgent) &&\n !/Chrome\\//.test(userAgent) &&\n !/Chromium\\//.test(userAgent) &&\n !/Edg\\//.test(userAgent) &&\n !/Firefox\\//.test(userAgent)\n );\n}\n\nexport class PackSession {\n readonly id: string;\n\n readonly secret: string;\n\n readonly #session: Session;\n\n #sessionStorage: SessionStorage;\n\n constructor(\n id: string,\n secret: string,\n sessionStorage: SessionStorage,\n session: Session\n ) {\n this.id = id;\n this.secret = secret;\n this.#session = session;\n this.#sessionStorage = sessionStorage;\n }\n\n static async init(request: Request, secrets: string[]): Promise<PackSession> {\n const userAgent = request.headers.get(\"User-Agent\");\n\n const storage = createCookieSessionStorage({\n cookie: createCookie(PACK_COOKIE_ID, {\n secure:\n isSafari(userAgent) && process.env.NODE_ENV === \"development\"\n ? false\n : true,\n secrets,\n sameSite: \"none\",\n maxAge: PACK_COOKIE_MAX_AGE,\n }),\n });\n\n const session = await storage.getSession(request.headers.get(\"Cookie\"));\n\n let sessionId = session.get(\"session_id\");\n\n if (!sessionId || !hasUserConsent(request)) {\n sessionId = buildRandomUUID();\n session.set(\"session_id\", sessionId);\n }\n\n return new this(sessionId, secrets[0], storage, session);\n }\n\n has(key: string): boolean {\n return this.#session.has(key);\n }\n\n get(key: string) {\n return this.#session.get(key);\n }\n\n destroy(): Promise<string> {\n for (const key of Object.keys(this.#session.data)) {\n this.#session.unset(key);\n }\n\n return this.#sessionStorage.destroySession(this.#session);\n }\n\n set(key: string, value: any): void {\n this.#session.set(key, value);\n }\n\n commit(): Promise<string> {\n return this.#sessionStorage.commitSession(this.#session);\n }\n}\n","import { PACK_USER_CONSENT_COOKIE_ID } from \"../constants\";\n\nimport cookie from \"cookie\";\n\nconst tokenHash = \"xxxx-4xxx-xxxx-xxxxxxxxxxxx\";\n\nexport function hasUserConsent(request: Request) {\n const cookies = cookie.parse(request.headers.get(\"Cookie\") as string);\n\n return cookies[PACK_USER_CONSENT_COOKIE_ID]\n ? cookies[PACK_USER_CONSENT_COOKIE_ID] === \"true\"\n : true;\n}\n\n/**\n * This will generate a random UUID\n * This is not based on user data,\n * This is based on a random number generator using crypto or math.random\n *\n * This UUID is used to generate a session ID for the session cookie\n *\n * We can never use this id to trace back users for GDPR compliance.\n *\n */\nexport function buildRandomUUID(): string {\n let hash = \"\";\n\n try {\n const crypto: Crypto = window.crypto;\n const randomValuesArray = new Uint16Array(31);\n crypto.getRandomValues(randomValuesArray);\n\n // Generate a strong UUID\n let i = 0;\n hash = tokenHash.replace(/[x]/g, (c: string): string => {\n const r = randomValuesArray[i] % 16;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n i++;\n return v.toString(16);\n });\n } catch (err) {\n // crypto not available, generate weak UUID\n hash = tokenHash.replace(/[x]/g, (c: string): string => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n return `${hexTime()}-${hash}`;\n}\n\nfunction hexTime(): string {\n // 32 bit representations of new Date().getTime() and performance.now()\n let dateNumber = 0;\n let perfNumber = 0;\n\n // Result of zero-fill right shift is always positive\n dateNumber = new Date().getTime() >>> 0;\n\n try {\n perfNumber = performance.now() >>> 0;\n } catch (err) {\n perfNumber = 0;\n }\n\n const output = Math.abs(dateNumber + perfNumber)\n .toString(16)\n .toLowerCase();\n\n // Ensure the output is exactly 8 characters\n return output?.substring(0, 8).padStart(8, \"0\");\n}\n","import {\n createCookie,\n createCookieSessionStorage,\n type Session,\n type SessionStorage,\n} from \"@shopify/remix-oxygen\";\nimport { Test } from \"../tests/test\";\nimport { PACK_COOKIE_MAX_AGE, PACK_TEST_COOKIE_ID } from \"../constants\";\nimport createDebug from \"debug\";\n\nconst debug = createDebug(\"pack:ab-testing:test-session\");\n\nfunction isSafari(userAgent: string | null): boolean {\n if (!userAgent) return false;\n\n return (\n /Safari\\//.test(userAgent) &&\n !/Chrome\\//.test(userAgent) &&\n !/Chromium\\//.test(userAgent) &&\n !/Edg\\//.test(userAgent) &&\n !/Firefox\\//.test(userAgent)\n );\n}\n\nexport class PackTestSession {\n readonly id: string;\n readonly #session: Session;\n #sessionStorage: SessionStorage;\n #isDirty: boolean = false;\n #initialData: { \n test_data?: Test; \n test_expire_at?: string;\n test_rules_cache?: any[];\n test_rules_cache_timestamp?: number;\n } = {};\n\n constructor(id: string, sessionStorage: SessionStorage, session: Session) {\n this.id = id;\n this.#session = session;\n this.#sessionStorage = sessionStorage;\n\n // Store initial state to track changes\n this.#initialData = {\n test_data: this.#session.get(\"test_data\"),\n test_expire_at: this.#session.get(\"test_expire_at\"),\n test_rules_cache: this.#session.get(\"test_rules_cache\"),\n test_rules_cache_timestamp: this.#session.get(\"test_rules_cache_timestamp\"),\n };\n }\n\n static async init(\n request: Request,\n secrets: string[]\n ): Promise<PackTestSession> {\n const userAgent = request.headers.get(\"User-Agent\");\n debug(\"[PackTestSession.init] Initializing test session\", {\n hasSecrets: secrets.length > 0,\n userAgent: userAgent?.substring(0, 50),\n });\n\n const storage = createCookieSessionStorage({\n cookie: createCookie(PACK_TEST_COOKIE_ID, {\n secure:\n isSafari(userAgent) && process.env.NODE_ENV === \"development\"\n ? false\n : true,\n secrets,\n sameSite: \"lax\",\n maxAge: PACK_COOKIE_MAX_AGE,\n path: \"/\",\n }),\n });\n\n const session = await storage.getSession(request.headers.get(\"Cookie\"));\n let sessionId = session.get(\"test_session_id\");\n\n if (!sessionId) {\n sessionId = crypto.randomUUID();\n session.set(\"test_session_id\", sessionId);\n debug(\"[PackTestSession.init] Generated new session ID\", { sessionId });\n } else {\n debug(\"[PackTestSession.init] Using existing session ID\", { sessionId });\n }\n\n return new this(sessionId, storage, session);\n }\n\n getTestData(): Test | undefined {\n const testData = this.#session.get(\"test_data\");\n debug('[getTestData] Called', {\n sessionId: this.id,\n hasTestData: !!testData,\n hasIsFirstExposure: testData && 'isFirstExposure' in testData,\n isFirstExposure: testData ? (testData as any).isFirstExposure : undefined,\n testId: testData?.id,\n testHandle: testData?.handle,\n });\n \n if (testData && 'isFirstExposure' in testData) {\n // Strip isFirstExposure flag from stored session data and re-save clean data\n const { isFirstExposure, ...cleanTestData } = testData as any;\n debug('[getTestData] Cleaning session data, removing isFirstExposure flag', {\n sessionId: this.id,\n isFirstExposure,\n });\n this.#session.set(\"test_data\", cleanTestData);\n this.#isDirty = true;\n return cleanTestData;\n }\n return testData;\n }\n\n getExpireAt(): string | undefined {\n return this.#session.get(\"test_expire_at\");\n }\n\n setTestData(testData: Test | undefined): void {\n debug('[setTestData] Setting test data', {\n sessionId: this.id,\n testId: testData?.id,\n testHandle: testData?.handle,\n variantId: testData?.testVariant?.id,\n variantHandle: testData?.testVariant?.handle,\n });\n this.#isDirty = true;\n this.#session.set(\"test_data\", testData);\n }\n\n setExpireAt(expireAt: string | undefined): void {\n debug('[setExpireAt] Setting expiry', {\n sessionId: this.id,\n expireAt,\n });\n this.#isDirty = true;\n this.#session.set(\"test_expire_at\", expireAt);\n }\n\n clearTestData(): void {\n debug('[clearTestData] Clearing test data and expiry', {\n sessionId: this.id,\n });\n this.#isDirty = true;\n this.#session.unset(\"test_data\");\n this.#session.unset(\"test_expire_at\");\n }\n\n hasTestData(): boolean {\n return this.#session.has(\"test_data\");\n }\n\n // Test rules cache methods\n getTestRulesCache(): any[] | undefined {\n return this.#session.get(\"test_rules_cache\");\n }\n\n getTestRulesCacheTimestamp(): number | undefined {\n return this.#session.get(\"test_rules_cache_timestamp\");\n }\n\n setTestRulesCache(rules: any[], timestamp: number): void {\n debug('[setTestRulesCache] Caching test rules', {\n sessionId: this.id,\n rulesCount: rules.length,\n timestamp: new Date(timestamp).toISOString(),\n });\n this.#isDirty = true;\n this.#session.set(\"test_rules_cache\", rules);\n this.#session.set(\"test_rules_cache_timestamp\", timestamp);\n }\n\n clearTestRulesCache(): void {\n debug('[clearTestRulesCache] Clearing rules cache', {\n sessionId: this.id,\n });\n this.#isDirty = true;\n this.#session.unset(\"test_rules_cache\");\n this.#session.unset(\"test_rules_cache_timestamp\");\n }\n\n isTestRulesCacheValid(cacheDurationMs: number = 60 * 60 * 1000): boolean {\n const timestamp = this.getTestRulesCacheTimestamp();\n if (!timestamp) {\n debug('[isTestRulesCacheValid] No cache timestamp found', {\n sessionId: this.id,\n });\n return false;\n }\n \n const isValid = Date.now() - timestamp < cacheDurationMs;\n debug('[isTestRulesCacheValid] Cache validity check', {\n sessionId: this.id,\n isValid,\n cacheAge: Math.floor((Date.now() - timestamp) / 1000) + 's',\n maxAge: Math.floor(cacheDurationMs / 1000) + 's',\n });\n return isValid;\n }\n\n hasChanges(): boolean {\n // Check if data has actually changed\n const currentTestData = this.getTestData();\n const currentExpireAt = this.getExpireAt();\n const currentTestRulesCache = this.getTestRulesCache();\n const currentTestRulesCacheTimestamp = this.getTestRulesCacheTimestamp();\n\n // Compare with initial state\n const testDataChanged =\n JSON.stringify(currentTestData) !==\n JSON.stringify(this.#initialData.test_data);\n const expireAtChanged =\n currentExpireAt !== this.#initialData.test_expire_at;\n const testRulesCacheChanged =\n JSON.stringify(currentTestRulesCache) !==\n JSON.stringify(this.#initialData.test_rules_cache);\n const testRulesCacheTimestampChanged =\n currentTestRulesCacheTimestamp !== this.#initialData.test_rules_cache_timestamp;\n\n const hasChanges = testDataChanged || expireAtChanged || testRulesCacheChanged || testRulesCacheTimestampChanged || this.#isDirty;\n \n debug('[hasChanges] Checking for changes', {\n sessionId: this.id,\n hasChanges,\n testDataChanged,\n expireAtChanged,\n testRulesCacheChanged,\n testRulesCacheTimestampChanged,\n isDirty: this.#isDirty,\n });\n\n return hasChanges;\n }\n\n commit(): Promise<string> {\n debug('[commit] Committing session', {\n sessionId: this.id,\n isDirty: this.#isDirty,\n hasTestData: !!this.getTestData(),\n });\n // Reset dirty flag after commit\n this.#isDirty = false;\n\n // Update initial data to current state\n this.#initialData = {\n test_data: this.getTestData(),\n test_expire_at: this.getExpireAt(),\n test_rules_cache: this.getTestRulesCache(),\n test_rules_cache_timestamp: this.getTestRulesCacheTimestamp(),\n };\n\n return this.#sessionStorage.commitSession(this.#session);\n }\n\n destroy(): Promise<string> {\n debug('[destroy] Destroying session', {\n sessionId: this.id,\n });\n this.#isDirty = true;\n this.#session.unset(\"test_data\");\n this.#session.unset(\"test_expire_at\");\n this.#session.unset(\"test_rules_cache\");\n this.#session.unset(\"test_rules_cache_timestamp\");\n return this.#sessionStorage.destroySession(this.#session);\n }\n}\n","import { PackClient } from \"@pack/client\";\nimport { CacheCustom, createWithCache } from \"@shopify/hydrogen\";\nimport * as cookie from \"cookie\";\nimport { PackSession } from \"./session/session\";\nimport { PackTestSession } from \"./session/test-session\";\nimport {\n getTestInfo,\n getTestFromQueryParams,\n getTestSession,\n getTestTargetingAttributesFromRequest,\n setTestHeaders,\n Test,\n TestInput,\n TestInfo,\n} from \"./tests/test\";\nimport createDebug from \"debug\";\n\nconst debug = createDebug(\"pack:ab-testing:create-pack-client\");\n\n/** @see https://shopify.dev/docs/custom-storefronts/hydrogen/data-fetching/cache#caching-strategies */\ntype CachingStrategy = ReturnType<typeof CacheCustom>;\n\ninterface EnvironmentOptions {\n /**\n * A Cache API instance.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Cache\n */\n cache: Cache;\n /**\n * A runtime utility for serverless environments\n * @see https://developers.cloudflare.com/workers/runtime-apis/fetch-event/#waituntil\n */\n waitUntil: ExecutionContext[\"waitUntil\"];\n}\n\nexport interface CreatePackClientOptions extends EnvironmentOptions {\n apiUrl?: string;\n token?: string;\n storeId?: string;\n session: PackSession;\n testSession: PackTestSession;\n contentEnvironment?: string;\n /** Default theme data to use when no token is provided */\n defaultThemeData?: DefaultThemeData;\n /**\n * Initial request to extract query parameters from.\n * If not provided, it will be captured from the first handleRequest call.\n * @deprecated Pass request to handleRequest instead of createPackClient\n */\n request?: Request;\n}\n\ntype Variables = Record<string, any>;\n\ninterface QueryOptions {\n variables?: Variables;\n cache?: CachingStrategy;\n test?: TestInput;\n}\n\ninterface QueryError {\n message: string;\n param?: string;\n code?: string;\n type: string;\n}\n\ninterface QueryResponse<T> {\n data: T | null;\n error: QueryError | null;\n packTestInfo?: Test;\n}\n\nexport interface PackCustomizerMeta {\n environment?: string;\n overlay?: {\n src?: string;\n version?: string;\n };\n [key: string]: any;\n}\n\nexport interface Pack {\n abTest: Test | null | undefined;\n /**\n * @deprecated The method should not be used\n */\n getPackSessionData(): {\n storeId: string;\n sessionId: string;\n abTest: Test | null | undefined;\n isPreviewModeEnabled: boolean;\n customizerMeta: any;\n };\n getPackContextData(): {\n packStoreId: string;\n packSessionId: string;\n packAbTest: Test | null | undefined;\n packIsPreviewMode: boolean;\n packCustomizerMeta: PackCustomizerMeta | null;\n };\n handleRequest(request: Request): Promise<(response: Response) => void>;\n isPreviewModeEnabled: () => boolean;\n isValidEditToken: PackClient[\"isValidEditToken\"];\n query: <T = any>(\n query: string,\n options: QueryOptions\n ) => Promise<QueryResponse<T>>;\n session: PackSession;\n testSession: PackTestSession;\n}\n\ninterface DefaultThemeData {\n data: Record<string, any>;\n}\n\n/**\n * Create an SHA-256 hash as a hex string\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\n */\nasync function sha256(message: string): Promise<string> {\n // encode as UTF-8\n const messageBuffer = new TextEncoder().encode(message);\n // hash the message\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", messageBuffer);\n // convert bytes to hex string\n return Array.from(new Uint8Array(hashBuffer))\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\n/**\n * Hash query and its parameters for use as cache key.\n * NOTE: Oxygen deployment will break if the cache key is long or contains `\\n`\n */\nfunction hashQuery(\n query: string,\n variables?: Variables,\n headers?: {}\n): Promise<string> {\n let hash = query;\n if (variables !== null) hash += JSON.stringify(variables);\n if (headers !== null) hash += JSON.stringify(headers);\n\n return sha256(hash);\n}\n\nasync function getCacheKey(\n withCache: ReturnType<typeof createWithCache>,\n query: string,\n token: string,\n options: {\n variables?: Variables;\n headers?: {};\n }\n) {\n let queryHash = await hashQuery(query, options?.variables, options?.headers);\n\n let publishedAt;\n try {\n const resp = await withCache.run<{ publishedAt?: string } | null>(\n {\n cacheKey: [\"pack:content:publishedAt\"],\n cacheStrategy: CacheCustom({\n maxAge: 15,\n staleWhileRevalidate: 15,\n }),\n shouldCacheResult: (value) => value !== null,\n },\n async ({ addDebugData }): Promise<{ publishedAt?: string } | null> => {\n const URL =\n \"https://cache-check-production.packdigital.workers.dev/published-at\";\n const resp = await fetch(URL, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n addDebugData?.({\n displayName: \"Pack Cache Check\",\n response: resp,\n });\n\n const { status } = resp;\n if (status !== 200) {\n let message;\n\n if (status === 401) {\n message =\n \"Pack error: Unauthorized request to cache check service. Please check your token.\";\n } else {\n message = `Pack error: Request to cache check service failed with status ${status}`;\n }\n\n debug(`Cache check error: ${message}`);\n console.error(message);\n return null;\n }\n\n return resp.json();\n }\n );\n\n publishedAt = resp?.publishedAt;\n } catch (err) {\n debug(`Error getting cache key: ${err}`);\n console.error(err);\n }\n\n if (publishedAt) {\n return `${queryHash}:${publishedAt}`;\n }\n\n return queryHash;\n}\n\n// Extends the CacheLong strategy with a stale-if-error policy\nconst cacheCustom = CacheCustom({\n maxAge: 3600,\n staleWhileRevalidate: 82800,\n staleIfError: 86400, // 1 day\n});\n\n/** Resolves the default data for a given query based on the theme config */\nfunction resolveQuery({\n query,\n variables,\n defaultThemeData,\n}: {\n query: string;\n variables?: Variables;\n defaultThemeData: DefaultThemeData;\n}): any {\n const queryField = extractTopLevelField(query);\n const identifier = variables?.handle || variables?.id;\n\n const defaultDataForField = defaultThemeData.data[queryField];\n if (!defaultDataForField) {\n return null;\n }\n\n return {\n [queryField]: identifier\n ? defaultDataForField[identifier]\n : defaultDataForField,\n };\n}\n\n/**\n * Extracts the top-level field from a GraphQL query string.\n *\n * The function assumes that the query follows the standard GraphQL syntax\n * and expects the top-level field to be the first field in the query.\n *\n * @example\n * const query = `\n * query GetProduct($id: ID!) {\n * product(id: $id) {\n * id\n * name\n * }\n * }\n * `;\n * const topLevelField = extractTopLevelField(query);\n * console.log(topLevelField); // Output: \"product\"\n */\nfunction extractTopLevelField(query: string): string {\n const match = query.match(/\\{[^{]*?\\w+(?=\\(|:|\\s*\\{)/);\n if (match) {\n return match[0].slice(1).trim();\n }\n return \"\";\n}\n\nexport function createPackClient(options: CreatePackClientOptions): Pack {\n const {\n cache,\n waitUntil,\n session,\n testSession,\n contentEnvironment,\n storeId,\n token,\n apiUrl,\n defaultThemeData,\n request,\n } = options;\n\n const previewEnabled = !!session.get(\"previewEnabled\");\n const previewEnvironment = session.get(\"environment\");\n\n const clientContentEnvironment = previewEnvironment || contentEnvironment;\n\n let packClient: PackClient;\n let testInfoForRequest: TestInfo | undefined = undefined;\n let testInfoPromise: Promise<TestInfo | undefined> | undefined = undefined;\n let currentRequest: Request | undefined = request;\n let testFromQueryParams: TestInput | null = request\n ? getTestFromQueryParams(request)\n : null;\n\n if (!token && !defaultThemeData) {\n throw new Error(\n \"ERR_HY_MISSING_TOKEN: The Pack client token is missing or empty. Please provide a valid token or default theme data. Doc: https://docs.packdigital.com/err/ERR_HY_MISSING_TOKEN\"\n );\n }\n\n if (!storeId) {\n throw new Error(\n \"ERR_HY_MISSING_STORE_ID: The Pack Store ID is missing or empty. Please provide a valid Store ID. Doc: https://docs.packdigital.com/err/ERR_HY_MISSING_STORE_ID\"\n );\n }\n\n const handleRequest = async (request: Request) => {\n // Store the request for use in query() if not already provided\n if (!currentRequest) {\n currentRequest = request;\n testFromQueryParams = getTestFromQueryParams(request);\n }\n\n return (response: Response) => {\n const hasExposedTestCookie = request.headers\n .get(\"cookie\")\n ?.includes(\"exposedTest\");\n\n if (hasExposedTestCookie) {\n // Clear the exposedTest cookie\n response.headers.append(\n \"Set-Cookie\",\n cookie.serialize(\"exposedTest\", \"\", {\n maxAge: 0,\n expires: new Date(0),\n path: \"/\",\n })\n );\n }\n };\n };\n\n if (!token) {\n return {\n get abTest() {\n return getTestSession(testSession, testFromQueryParams, previewEnabled);\n },\n handleRequest,\n getPackSessionData: () => {\n return {\n storeId: storeId,\n sessionId: session.id,\n abTest: getTestSession(\n testSession,\n testFromQueryParams,\n previewEnabled\n ),\n isPreviewModeEnabled: previewEnabled,\n customizerMeta: session.get(\"customizerMeta\"),\n };\n },\n getPackContextData: (): {\n packStoreId: string;\n packSessionId: string;\n packAbTest: Test | null | undefined;\n packIsPreviewMode: boolean;\n packCustomizerMeta: PackCustomizerMeta | null;\n } => {\n return {\n packStoreId: storeId,\n packSessionId: session.id,\n packAbTest: getTestSession(\n testSession,\n testFromQueryParams,\n previewEnabled\n ),\n packIsPreviewMode: previewEnabled,\n packCustomizerMeta: session.get(\"customizerMeta\"),\n };\n },\n isPreviewModeEnabled: () => previewEnabled,\n isValidEditToken: () => new Promise(() => false),\n async query<T = any>(\n query: string,\n { variables }: QueryOptions = {}\n ): Promise<QueryResponse<T>> {\n if (!defaultThemeData?.data) {\n debug(\"Warning: Invalid default theme data provided to Pack client\");\n console.warn(\"Invalid default theme data provided to Pack client.\");\n return { data: null, error: null };\n }\n\n const data = resolveQuery({ query, variables, defaultThemeData });\n\n return { data: data as T, error: null };\n },\n session,\n testSession,\n };\n }\n\n const resolvedApiUrl = apiUrl\n ? apiUrl\n : previewEnabled || process.env.NODE_ENV === \"development\"\n ? \"https://app.packdigital.com/graphql\"\n : undefined;\n\n packClient = new PackClient({\n // Use apiUrl, it is configured\n // Use active API URL if preview mode is enabled\n // Otherwise, Live PackClient uses its internal configuration\n apiUrl: resolvedApiUrl,\n storeId,\n token,\n contentEnvironment: clientContentEnvironment,\n sessionId: session.id,\n clientName: \"HydrogenClient\",\n });\n\n return {\n get abTest() {\n return getTestSession(testSession, testFromQueryParams, previewEnabled);\n },\n getPackSessionData: () => {\n return {\n storeId: storeId,\n sessionId: session.id,\n abTest: getTestSession(\n testSession,\n testFromQueryParams,\n previewEnabled\n ),\n isPreviewModeEnabled: previewEnabled,\n customizerMeta: session.get(\"customizerMeta\"),\n };\n },\n getPackContextData: (): {\n packStoreId: string;\n packSessionId: string;\n packAbTest: Test | null | undefined;\n packIsPreviewMode: boolean;\n packCustomizerMeta: PackCustomizerMeta | null;\n } => {\n return {\n packStoreId: storeId,\n packSessionId: session.id,\n packAbTest: getTestSession(\n testSession,\n testFromQueryParams,\n previewEnabled\n ),\n packIsPreviewMode: previewEnabled,\n packCustomizerMeta: session.get(\"customizerMeta\"),\n };\n },\n handleRequest,\n isPreviewModeEnabled: () => previewEnabled,\n isValidEditToken: (token: string | null) =>\n packClient.isValidEditToken(token),\n async query<T = any>(\n query: string,\n { variables, cache: strategy = cacheCustom, test }: QueryOptions = {}\n ): Promise<QueryResponse<T>> {\n try {\n let headers: any = {};\n let testInfoForLoader: Test | undefined = undefined;\n\n const withCache = createWithCache({\n cache,\n waitUntil,\n request: new Request(\"https://pack.local/cache\", { method: \"GET\" }),\n });\n\n const queryVariables = variables ? { ...variables } : {};\n if (previewEnabled) {\n queryVariables.version = \"CURRENT\";\n } else {\n queryVariables.version = \"PUBLISHED\";\n }\n\n if (packClient && token && !testInfoForRequest && currentRequest) {\n try {\n if (!testInfoPromise) {\n debug(\n \"[Pack Test] Creating getTestInfo promise - first query for this request\"\n );\n testInfoPromise = getTestInfo({\n request: currentRequest,\n testTargetAudienceAttributes:\n getTestTargetingAttributesFromRequest(currentRequest),\n packClient,\n testSession, // Use dedicated test session instead\n withCache,\n token,\n });\n } else {\n debug(\n \"[Pack Test] Reusing existing getTestInfo promise - concurrent query\"\n );\n }\n testInfoForRequest = await testInfoPromise;\n } catch (error) {\n debug(\n \"[Pack Test] Error getting test info, continuing without test:\",\n error\n );\n console.error(\n \"[Pack Test] Error getting test info, continuing without test:\",\n error\n );\n // Continue without test info to allow site to load\n testInfoForRequest = undefined;\n testInfoPromise = undefined; // Reset promise so it can be retried on next query\n }\n } else if (packClient && token && testInfoForRequest) {\n debug(\"[Pack Test] Using cached testInfo - subsequent query\");\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"[Pack Test] Using cached testInfo - subsequent query\");\n }\n }\n\n if (testInfoForRequest?.isFirstExposure) {\n const { isFirstExposure, ...testInfo } = testInfoForRequest;\n\n testInfoForLoader = testInfo;\n }\n\n headers = setTestHeaders(headers, {\n previewEnabled,\n testInfoForRequest,\n testFromQueryParams: testFromQueryParams || test,\n });\n\n // Preview mode always bypasses the cache\n if (previewEnabled) {\n try {\n const result = await packClient.fetch(query, {\n variables: queryVariables,\n headers: headers,\n });\n\n return {\n ...result,\n packTestInfo: testInfoForLoader,\n };\n } catch (error) {\n return { error: error as QueryError, data: null };\n }\n }\n\n const queryHash = await getCacheKey(withCache, query, token, {\n variables: queryVariables,\n headers,\n });\n\n const response = await withCache.run(\n {\n cacheKey: [queryHash],\n cacheStrategy: strategy,\n shouldCacheResult: (value) => !value?.error,\n },\n async () => {\n try {\n const result = await packClient.fetch(query, {\n variables: queryVariables,\n headers: headers,\n });\n\n return result;\n } catch (error) {\n return { error, data: null };\n }\n }\n );\n\n return response.error\n ? response\n : { ...response, packTestInfo: testInfoForLoader };\n } catch (error) {\n debug(\n \"[Pack Test] Critical error in query method, returning error:\",\n error\n );\n console.error(\n \"[Pack Test] Critical error in query method, returning error:\",\n error\n );\n const queryError: QueryError = {\n message: error instanceof Error ? error.message : String(error),\n type: \"NetworkError\",\n };\n return { error: queryError, data: null };\n }\n },\n session,\n testSession,\n };\n}\n","import { PackClient } from \"@pack/client\";\nimport { PackTestSession } from \"../session/test-session\";\nimport * as cookie from \"cookie\";\nimport { LocalTestResolver } from \"./local-test-resolver\";\nimport createDebug from \"debug\";\n\nconst debug = createDebug(\"pack:ab-testing:test\");\n\nexport interface TestInput {\n testId?: string;\n testHandle?: string;\n testVariantId?: string;\n testVariantHandle?: string;\n}\n\nexport interface Test {\n id: string;\n handle: string;\n testVariant: {\n id: string;\n handle: string;\n };\n}\n\nexport interface TestTargetAudienceAttributes {\n url?: string;\n query?: string;\n path?: string;\n utmCampaign?: string;\n utmContent?: string;\n utmMedium?: string;\n utmSource?: string;\n utmTerm?: string;\n}\n\n// Removed: QUERY_TEST_VARIANT_IS_RUNNING is no longer needed\n// Test validity is now checked via the test-cache-check system\n\nconst QUERY_TESTS_BY_RULES = `#graphql\n query TestsByRules($status: String) {\n testsByRulesV2(status: $status) {\n totalCount\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n cursor\n node {\n id\n handle\n rules {\n attribute\n operator\n value\n }\n testVariants {\n id\n handle\n trafficPercentage\n }\n }\n }\n }\n }\n`;\n\n// Global instance of LocalTestResolver - no caching, just holds rules for request duration\nconst localTestResolver = new LocalTestResolver();\n\n// Generate cache key for shared test rules (same for all users)\nfunction generateTestRulesCacheKey(\n storeId: string,\n contentEnvironment?: string\n): string {\n return `pack-tests:${storeId}:${contentEnvironment || \"default\"}`;\n}\n\n// Function to fetch test rules with shared caching (storefront-environment level)\nasync function fetchTestRulesShared(\n packClient: PackClient,\n withCache: any, // ReturnType<typeof createWithCache>\n token: string\n): Promise<any[]> {\n const baseCacheKey = generateTestRulesCacheKey(\n packClient.storeId || \"\",\n packClient.contentEnvironment\n );\n\n debug(\n \"[Pack Test] Fetching test rules with shared cache:\",\n JSON.stringify({\n baseCacheKey,\n storeId: packClient.storeId,\n contentEnvironment: packClient.contentEnvironment,\n })\n );\n\n // Check test cache timestamp to include in cache key for automatic invalidation\n // This is the only place where test-cache-check should be called\n let testsUpdatedAt;\n try {\n const resp = await withCache.run(\n {\n cacheKey: [\"pack:tests:updatedAt\"],\n cacheStrategy: {\n maxAge: 15,\n staleWhileRevalidate: 15,\n },\n shouldCacheResult: (value: any) => value !== null,\n },\n async ({\n addDebugData,\n }: any): Promise<{ testsUpdatedAt?: string } | null> => {\n // Allow custom test cache check URL via environment variable\n // Default to production URL if not set\n const URL =\n process.env.PACK_TEST_CACHE_CHECK_URL ||\n \"https://test-cache-check-production.packdigital.workers.dev/tests-updated-at\";\n\n debug(\"[Pack Test] Fetching timestamp from:\", URL, {\n isCustom: !!process.env.PACK_TEST_CACHE_CHECK_URL,\n });\n const resp = await fetch(URL, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n addDebugData?.({\n displayName: \"Pack Test Cache Check\",\n response: resp,\n });\n\n const { status } = resp;\n if (status !== 200) {\n let message;\n\n if (status === 401) {\n message =\n \"Pack error: Unauthorized request to test cache check service. Please check your token.\";\n } else {\n message = `Pack error: Request to test cache check service failed with status ${status}`;\n }\n\n debug(`[Pack Test] Cache check error: ${message}`);\n console.error(message);\n return null;\n }\n\n const data = await resp.json();\n debug(\"[Pack Test] Timestamp response:\", JSON.stringify(data));\n return data as { testsUpdatedAt?: string } | null;\n }\n );\n\n testsUpdatedAt = resp?.testsUpdatedAt;\n debug(\n \"[Pack Test] Using timestamp for cache key:\",\n JSON.stringify({\n testsUpdatedAt,\n hasTimestamp: !!testsUpdatedAt,\n })\n );\n } catch (err) {\n debug(\n \"[Pack Test] Error checking test cache timestamp:\",\n JSON.stringify(err)\n );\n console.error(\"[Pack Test] Error checking test cache timestamp:\", err);\n }\n\n // Include testsUpdatedAt in cache key for cache invalidation\n const cacheKey = testsUpdatedAt\n ? `${baseCacheKey}:${testsUpdatedAt}`\n : baseCacheKey;\n\n debug(\"[Pack Test] Final cache key for test rules:\", cacheKey);\n\n return withCache.run(\n {\n cacheKey: [cacheKey],\n cacheStrategy: {\n maxAge: 3600, // 1 hour\n staleWhileRevalidate: 86400, // 24 hours\n staleIfError: 86400, // 24 hours\n },\n shouldCacheResult: (result: any) =>\n Array.isArray(result) && result.length >= 0,\n displayName: \"Pack Test Rules\",\n },\n async ({ addDebugData }: any): Promise<any[]> => {\n const startTime = Date.now();\n debug(\n \"[Pack Test] Cache miss - fetching test rules from Pack GraphQL API\"\n );\n\n try {\n // Fetch test rules from Pack API (only running tests)\n const { data, error } = await packClient.fetch(QUERY_TESTS_BY_RULES, {\n variables: { status: \"running\" },\n });\n\n const fetchDuration = Date.now() - startTime;\n debug(\n \"[Pack Test] GraphQL query completed:\",\n JSON.stringify({\n duration: `${fetchDuration}ms`,\n hasData: !!data,\n hasError: !!error,\n totalCount: data?.testsByRulesV2?.totalCount,\n edgesCount: data?.testsByRulesV2?.edges?.length || 0,\n })\n );\n\n addDebugData?.({\n displayName: \"Pack Test Rules Query\",\n });\n\n if (error) {\n debug(\n \"[Pack Test] Error fetching test rules:\",\n JSON.stringify({\n error,\n errorType: typeof error,\n errorMessage: error?.message || JSON.stringify(error),\n })\n );\n throw new Error(`GraphQL error: ${JSON.stringify(error)}`);\n }\n\n const rules =\n data?.testsByRulesV2?.edges.map((edge: any) => edge.node) || [];\n\n debug(\n \"[Pack Test] Successfully fetched and cached test rules:\",\n JSON.stringify({\n rulesCount: rules.length,\n cacheKey,\n rules: rules.map((rule: any) => ({\n id: rule.id,\n handle: rule.handle,\n rulesCount: rule.rules?.length || 0,\n variantsCount: rule.testVariants?.length || 0,\n })),\n })\n );\n\n return rules;\n } catch (error) {\n const fetchDuration = Date.now() - startTime;\n debug(\n \"[Pack Test] Exception fetching test rules:\",\n JSON.stringify({\n error: error instanceof Error ? error.message : error,\n duration: `${fetchDuration}ms`,\n stack: error instanceof Error ? error.stack : undefined,\n })\n );\n throw error;\n }\n }\n );\n}\n\nexport interface GetTestInfoOptions {\n request: Request;\n testTargetAudienceAttributes: TestTargetAudienceAttributes | null;\n packClient: PackClient;\n testSession: PackTestSession;\n withCache?: any; // ReturnType<typeof createWithCache>\n token?: string; // Pack secret token for cache check service\n}\n\nexport interface TestInfo extends Test {\n isFirstExposure?: boolean;\n}\n\nasync function packClientFetchTestByRules(\n packClient: PackClient,\n testTargetAudienceAttributes: TestTargetAudienceAttributes | null,\n testSession: PackTestSession,\n request: Request,\n withCache?: any,\n token?: string,\n exposedTest?: Test | null,\n validateOnly?: boolean\n) {\n try {\n debug(\n \"[Pack Test] Starting test assignment process:\",\n JSON.stringify({\n storeId: packClient.storeId,\n targetingAttributes: testTargetAudienceAttributes,\n requestUrl: request.url,\n validateOnly,\n })\n );\n\n if (!packClient.storeId) {\n debug(\"[Pack Test] Store ID is required to fetch a test.\");\n console.error(\"[Pack Test] Store ID is required to fetch a test.\");\n return undefined;\n }\n\n debug(\n \"[Pack Test] Checking if rules are loaded:\",\n JSON.stringify({\n hasRules: localTestResolver.hasRules(),\n })\n );\n\n // Always fetch rules through shared cache - it will return cached rules if still valid\n // This ensures we get fresh rules when tests are updated\n if (withCache && token) {\n debug(\"[Pack Test] Fetching test rules through shared cache\");\n try {\n const rules = await fetchTestRulesShared(packClient, withCache, token);\n localTestResolver.setTestRules(rules);\n debug(\n \"[Pack Test] Updated local resolver with rules from shared cache\"\n );\n\n // Check if current session test is still in active rules and get fresh data\n const currentTestData = testSession.getTestData();\n let needsNewTest = false;\n\n if (currentTestData?.id) {\n const freshTestData = localTestResolver.getTestById(\n currentTestData.id\n );\n\n if (!freshTestData) {\n debug(\n \"[Pack Test] Current session test is no longer active (paused/stopped), clearing session:\",\n JSON.stringify({\n testId: currentTestData.id,\n testHandle: currentTestData.handle,\n })\n );\n testSession.clearTestData();\n needsNewTest = true; // Mark that we need to assign a new test\n } else {\n debug(\n \"[Pack Test] Current session test is still active in rules, updating with fresh data:\",\n JSON.stringify({\n testId: freshTestData.id,\n testHandle: freshTestData.handle,\n variantsCount: freshTestData.testVariants?.length,\n })\n );\n\n // Check if the user's variant still exists\n if (currentTestData.testVariant?.id) {\n const currentVariant = freshTestData.testVariants?.find(\n (v) => v.id === currentTestData.testVariant.id\n );\n\n if (currentVariant) {\n // Variant still exists, return refreshed test data\n const refreshedTest = {\n id: freshTestData.id,\n handle: freshTestData.handle,\n testVariant: {\n id: currentVariant.id,\n handle: currentVariant.handle,\n },\n isFirstExposure: undefined,\n } as TestInfo;\n\n // Update session with refreshed data\n const { isFirstExposure, ...testDataWithoutFlag } =\n refreshedTest;\n testSession.setTestData(testDataWithoutFlag);\n testSession.setExpireAt(getExpireAtDate().toISOString());\n\n // Return the refreshed test data (even in validateOnly mode)\n return refreshedTest;\n } else {\n // Variant no longer exists in test, clear session and need new test\n debug(\n \"[Pack Test] Current variant no longer exists in test, clearing session:\",\n JSON.stringify({\n testId: currentTestData.id,\n variantId: currentTestData.testVariant.id,\n })\n );\n testSession.clearTestData();\n needsNewTest = true;\n }\n }\n }\n }\n\n // If in validateOnly mode and test is still valid, we already returned above\n // If we need a new test (old one inactive), continue to assign even in validateOnly\n if (validateOnly && !needsNewTest) {\n debug(\"[Pack Test] Validation complete, no new test needed\");\n return undefined;\n }\n } catch (error) {\n debug(\"[Pack Test] Failed to fetch test rules:\", JSON.stringify(error));\n console.error(\"[Pack Test] Failed to fetch test rules:\", error);\n // Continue without test rules\n }\n } else {\n debug(\n \"[Pack Test] No withCache or token available - cannot fetch test rules\"\n );\n // Cannot fetch without caching infrastructure\n }\n\n // Check if exposed test is still active and get fresh data\n if (exposedTest) {\n const freshTestData = localTestResolver.getTestById(exposedTest.id);\n if (freshTestData) {\n debug(\n \"[Pack Test] Exposed test is still active in rules, restoring with fresh data:\",\n JSON.stringify({\n testId: freshTestData.id,\n testHandle: freshTestData.handle,\n })\n );\n\n // Find the variant in fresh data\n const exposedVariant = freshTestData.testVariants?.find(\n (v) => v.id === exposedTest.testVariant?.id\n );\n\n if (exposedVariant) {\n // Return the exposed test with fresh data\n const result = {\n id: freshTestData.id,\n handle: freshTestData.handle,\n testVariant: {\n id: exposedVariant.id,\n handle: exposedVariant.handle,\n },\n isFirstExposure: undefined,\n } as TestInfo;\n\n // Save to session\n const { isFirstExposure, ...testDataWithoutFlag } = result;\n testSession.setTestData(testDataWithoutFlag);\n testSession.setExpireAt(getExpireAtDate().toISOString());\n\n return result;\n } else {\n debug(\n \"[Pack Test] Exposed test variant no longer exists in fresh data:\",\n JSON.stringify({\n testId: exposedTest.id,\n variantId: exposedTest.testVariant?.id,\n })\n );\n }\n } else {\n debug(\n \"[Pack Test] Exposed test is no longer active in rules:\",\n JSON.stringify({\n testId: exposedTest.id,\n })\n );\n }\n }\n\n // Use local resolver to assign test\n const sessionId = packClient.storeId; // Use store ID as session ID for consistency\n debug(\"[Pack Test] Assigning test with session ID:\", sessionId);\n\n const assignedTest = await localTestResolver.assignTest(\n testTargetAudienceAttributes || {},\n sessionId\n );\n\n debug(\n \"[Pack Test] Test assignment result:\",\n JSON.stringify({\n assigned: !!assignedTest,\n testId: assignedTest?.id,\n testHandle: assignedTest?.handle,\n variantId: assignedTest?.testVariant?.id,\n variantHandle: assignedTest?.testVariant?.handle,\n })\n );\n\n if (!assignedTest) {\n debug(\"[Pack Test] No test assigned - user not eligible for any tests\");\n return undefined;\n }\n\n // Return in the same format as the original implementation\n const result = {\n ...assignedTest,\n isFirstExposure: true,\n } as TestInfo;\n\n debug(\n \"[Pack Test] Test assigned, saving to session:\",\n JSON.stringify({\n testId: result.id,\n testHandle: result.handle,\n variantId: result.testVariant.id,\n variantHandle: result.testVariant.handle,\n })\n );\n\n // Save the assigned test to session WITHOUT isFirstExposure flag\n const { isFirstExposure, ...testDataWithoutFlag } = result;\n testSession.setTestData(testDataWithoutFlag);\n testSession.setExpireAt(getExpireAtDate().toISOString());\n\n debug(\"[Pack Test] Returning test info with first exposure flag\");\n return result;\n } catch (error) {\n debug(\n \"[Pack Test] Error in packClientFetchTestByRules, continuing without test:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error in packClientFetchTestByRules, continuing without test:\",\n error\n );\n // Return undefined to allow site to load without test info\n return undefined;\n }\n}\n\n// Removed: packClientCheckTestIsRunning is no longer needed\n// Test validity is now checked via the test-cache-check system and localTestResolver.isTestActive()\n\nfunction getExpireAtDate() {\n const expireAt = new Date();\n expireAt.setHours(expireAt.getHours() + 4); // 4 hours\n return expireAt;\n}\n\nexport async function getTestInfo({\n request,\n testTargetAudienceAttributes,\n packClient,\n testSession,\n withCache,\n token,\n}: GetTestInfoOptions): Promise<TestInfo | undefined> {\n debug(\n \"[Pack Test] Getting test info:\",\n JSON.stringify({\n hasTestSession: !!testSession,\n targetingAttributes: testTargetAudienceAttributes,\n requestUrl: request.url,\n })\n );\n\n let testInfo: TestInfo | undefined = undefined;\n let exposedTest: Test | undefined = undefined;\n\n if (!testSession) {\n debug(\"[Pack Test] No test session available, returning undefined\");\n return testInfo;\n }\n\n // Retrieve simplified test data and expiry\n const testSessionData: Test | undefined = testSession.getTestData();\n const testSessionExpireAt: string | undefined = testSession.getExpireAt();\n\n debug(\n \"[Pack Test] Session data check:\",\n JSON.stringify({\n hasTestData: !!testSessionData,\n testId: testSessionData?.id,\n testHandle: testSessionData?.handle,\n variantId: testSessionData?.testVariant?.id,\n variantHandle: testSessionData?.testVariant?.handle,\n expireAt: testSessionExpireAt,\n isExpired: testSessionExpireAt\n ? new Date(testSessionExpireAt) < new Date()\n : false,\n })\n );\n\n const exposedTestCookieString = cookie.parse(\n request.headers.get(\"cookie\") || \"\"\n )?.exposedTest;\n\n debug(\n \"[Pack Test] Exposed test cookie check:\",\n JSON.stringify({\n hasExposedTestCookie: !!exposedTestCookieString,\n })\n );\n\n // If we already have a valid test in the session, validate it's still active\n if (testSessionData?.id && testSessionData?.testVariant) {\n debug(\"[Pack Test] Found existing test data in session\");\n\n // First check if test hasn't expired by time\n if (!testSessionExpireAt || new Date(testSessionExpireAt) >= new Date()) {\n debug(\n \"[Pack Test] Test session not expired by time, fetching rules to validate if test is still active\"\n );\n\n // Fetch test rules to validate if the test is still active\n // This will also return refreshed test data or assign a new test if needed\n try {\n const validationResult = await packClientFetchTestByRules(\n packClient,\n testTargetAudienceAttributes,\n testSession,\n request,\n withCache,\n token,\n null,\n true // validateOnly - but will assign new test if current is inactive\n );\n\n // If we got test data back, determine if it's refreshed or new\n if (validationResult) {\n if (validationResult.id === testSessionData.id) {\n debug(\n \"[Pack Test] Test is still active, using refreshed data\",\n JSON.stringify({\n testId: validationResult.id,\n testHandle: validationResult.handle,\n variantId: validationResult.testVariant.id,\n variantHandle: validationResult.testVariant.handle,\n })\n );\n // Same test, just refreshed - no first exposure\n return validationResult;\n } else {\n debug(\n \"[Pack Test] Original test no longer active, new test assigned\",\n JSON.stringify({\n oldTestId: testSessionData.id,\n newTestId: validationResult.id,\n newTestHandle: validationResult.handle,\n newVariantId: validationResult.testVariant.id,\n newVariantHandle: validationResult.testVariant.handle,\n })\n );\n // New test was assigned, mark as first exposure\n return {\n ...validationResult,\n isFirstExposure: true,\n } as TestInfo;\n }\n } else {\n debug(\n \"[Pack Test] Test is no longer active and no new test was assigned\"\n );\n return undefined;\n }\n } catch (error) {\n debug(\n \"[Pack Test] Error validating test, using cached data:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error validating test, using cached data:\",\n error\n );\n // On error, still return the cached data\n return { ...testSessionData, isFirstExposure: undefined } as TestInfo;\n }\n } else {\n debug(\"[Pack Test] Test session has expired by time\");\n // Clear the session data\n debug(\"[Pack Test] Clearing expired test session data\");\n testSession.clearTestData();\n }\n }\n\n if (exposedTestCookieString) {\n try {\n exposedTest = JSON.parse(exposedTestCookieString);\n debug(\n \"[Pack Test] Parsed exposed test from cookie:\",\n JSON.stringify({\n testId: exposedTest?.id,\n testHandle: exposedTest?.handle,\n variantId: exposedTest?.testVariant?.id,\n variantHandle: exposedTest?.testVariant?.handle,\n })\n );\n } catch (error) {\n debug(\n \"[Pack Test] Failed to parse exposed test cookie:\",\n JSON.stringify(error)\n );\n console.error(\"[Pack Test] Failed to parse exposed test cookie:\", error);\n }\n }\n\n if (exposedTest && !testSessionData) {\n debug(\n \"[Pack Test] Found exposed test cookie with no session data - will fetch rules and validate\"\n );\n // If there is no assigned test on the session and an exposed test in the\n // incoming request cookie it means that the user was exposed to a test previously.\n\n // Fetch test rules and check if exposed test is still active\n try {\n // Pass the exposed test to packClientFetchTestByRules\n testInfo = await packClientFetchTestByRules(\n packClient,\n testTargetAudienceAttributes,\n testSession,\n request,\n withCache,\n token,\n exposedTest,\n false // Not validateOnly - allow assigning new tests\n );\n\n if (testInfo?.id === exposedTest.id) {\n debug(\"[Pack Test] Exposed test was restored (still active)\");\n } else if (testInfo) {\n debug(\n \"[Pack Test] Exposed test is no longer active, using newly assigned test:\",\n JSON.stringify({\n exposedTestId: exposedTest.id,\n newTestId: testInfo.id,\n })\n );\n } else {\n debug(\n \"[Pack Test] Exposed test is no longer active and no new test was assigned\"\n );\n }\n } catch (error) {\n debug(\n \"[Pack Test] Error processing exposed test:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error processing exposed test, continuing without test:\",\n error\n );\n // Continue without test info to allow site to load\n testInfo = undefined;\n }\n } else if (testSessionData) {\n debug(\n \"[Pack Test] Test session data exists but was invalid - fetching new test\"\n );\n // This case handles if testSessionData exists but might be expired (handled above)\n // or if there was no exposedTest cookie. We already returned if it was valid.\n // If logic reaches here and testSessionData exists, it implies it was expired.\n // First clear the session\n testSession.clearTestData();\n\n // Then fetch new test\n try {\n testInfo = await packClientFetchTestByRules(\n packClient,\n testTargetAudienceAttributes,\n testSession,\n request,\n withCache,\n token,\n null,\n false // Not validateOnly - allow assigning new tests\n );\n } catch (error) {\n debug(\n \"[Pack Test] Error fetching new test after expired session:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error fetching new test, continuing without test:\",\n error\n );\n // Continue without test info to allow site to load\n testInfo = undefined;\n }\n } else {\n debug(\n \"[Pack Test] No existing test data found - fetching new test for user\"\n );\n // If there is no test on session and no exposed test, check for a new test for client\n try {\n testInfo = await packClientFetchTestByRules(\n packClient,\n testTargetAudienceAttributes,\n testSession,\n request,\n withCache,\n token,\n null,\n false // Not validateOnly - allow assigning new tests\n );\n } catch (error) {\n debug(\n \"[Pack Test] Error fetching new test for user:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error fetching new test, continuing without test:\",\n error\n );\n // Continue without test info to allow site to load\n testInfo = undefined;\n }\n }\n\n debug(\n \"[Pack Test] Final test info result:\",\n JSON.stringify({\n hasTestInfo: !!testInfo,\n testId: testInfo?.id,\n testHandle: testInfo?.handle,\n variantId: testInfo?.testVariant?.id,\n variantHandle: testInfo?.testVariant?.handle,\n isFirstExposure: testInfo?.isFirstExposure,\n })\n );\n\n return testInfo;\n}\n\nexport function getTestSession(\n testSession?: PackTestSession,\n testFromQueryParams: TestInput | null = null,\n previewEnabled: boolean = false\n): Test | null | undefined {\n debug(\n \"[Pack Test] Getting test session:\",\n JSON.stringify({\n hasTestSession: !!testSession,\n hasQueryParams: !!testFromQueryParams,\n previewEnabled,\n })\n );\n\n if (testFromQueryParams) {\n const result = {\n id: testFromQueryParams.testId || \"\",\n handle: testFromQueryParams.testHandle || \"\",\n testVariant: {\n id: testFromQueryParams.testVariantId || \"\",\n handle: testFromQueryParams.testVariantHandle || \"\",\n },\n };\n debug(\n \"[Pack Test] Using test from query parameters:\",\n JSON.stringify(result)\n );\n return result;\n }\n\n if (previewEnabled) {\n const result = {\n id: \"\",\n handle: \"isPreview\",\n testVariant: {\n id: \"\",\n handle: \"isPreview\",\n },\n };\n debug(\n \"[Pack Test] Using preview mode test session:\",\n JSON.stringify(result)\n );\n return result;\n }\n\n if (!testSession) {\n debug(\"[Pack Test] No test session available\");\n return undefined;\n }\n\n // Read simplified test data from the dedicated test session\n const testSessionData: Test | undefined = testSession.getTestData();\n debug(\n \"[Pack Test] Retrieved test session data:\",\n JSON.stringify({\n hasData: !!testSessionData,\n testId: testSessionData?.id,\n testHandle: testSessionData?.handle,\n variantId: testSessionData?.testVariant?.id,\n variantHandle: testSessionData?.testVariant?.handle,\n })\n );\n\n return testSessionData || null;\n}\n\nexport function getTestTargetingAttributesFromRequest(\n request: Request\n): TestTargetAudienceAttributes {\n let testTargetingAttributes: TestTargetAudienceAttributes = {};\n\n const requestUrl = new URL(request.url);\n const searchParams = requestUrl.searchParams;\n\n testTargetingAttributes.url = requestUrl.origin + requestUrl.pathname;\n testTargetingAttributes.query = requestUrl.search;\n testTargetingAttributes.path = requestUrl.pathname;\n searchParams.has(\"utm_campaign\") &&\n (testTargetingAttributes.utmCampaign =\n searchParams.get(\"utm_campaign\") || undefined);\n searchParams.has(\"utm_content\") &&\n (testTargetingAttributes.utmContent =\n searchParams.get(\"utm_content\") || undefined);\n searchParams.has(\"utm_medium\") &&\n (testTargetingAttributes.utmMedium =\n searchParams.get(\"utm_medium\") || undefined);\n searchParams.has(\"utm_source\") &&\n (testTargetingAttributes.utmSource =\n searchParams.get(\"utm_source\") || undefined);\n searchParams.has(\"utm_term\") &&\n (testTargetingAttributes.utmTerm =\n searchParams.get(\"utm_term\") || undefined);\n\n return testTargetingAttributes;\n}\n\nexport function getTestFromQueryParams(request: Request): TestInput | null {\n const requestUrl = new URL(request.url);\n const params = requestUrl.searchParams;\n\n if (\n params.has(\"testId\") ||\n params.has(\"test_id\") ||\n params.has(\"test-id\") ||\n params.has(\"testHandle\") ||\n params.has(\"test_handle\") ||\n params.has(\"test-handle\") ||\n params.has(\"testVariantId\") ||\n params.has(\"test_variant_id\") ||\n params.has(\"test-variant-id\") ||\n params.has(\"testVariantHandle\") ||\n params.has(\"test_variant_handle\") ||\n params.has(\"test-variant-handle\")\n ) {\n return {\n testId:\n params.get(\"testId\") ||\n params.get(\"test_id\") ||\n params.get(\"test-id\") ||\n \"\",\n testHandle:\n params.get(\"testHandle\") ||\n params.get(\"test_handle\") ||\n params.get(\"test-handle\") ||\n \"\",\n testVariantId:\n params.get(\"testVariantId\") ||\n params.get(\"test_variant_id\") ||\n params.get(\"test-variant-id\") ||\n \"\",\n testVariantHandle:\n params.get(\"testVariantHandle\") ||\n params.get(\"test_variant_handle\") ||\n params.get(\"test-variant-handle\") ||\n \"\",\n };\n }\n\n return null;\n}\n\nexport function setTestHeaders(\n headers: any,\n options: {\n previewEnabled: boolean;\n testInfoForRequest?: TestInfo;\n testFromQueryParams?: TestInput;\n }\n) {\n const { testFromQueryParams, testInfoForRequest } = options;\n\n if (testFromQueryParams) {\n headers[\"X-Pack-Test-Ignore-Test-Status\"] = true;\n\n if (testFromQueryParams.testId) {\n headers[\"X-Pack-Test-Id\"] = testFromQueryParams.testId;\n }\n\n if (testFromQueryParams.testHandle) {\n headers[\"X-Pack-Test-Handle\"] = testFromQueryParams.testHandle;\n }\n\n if (testFromQueryParams.testVariantId) {\n headers[\"X-Pack-Test-Variant-Id\"] = testFromQueryParams.testVariantId;\n }\n\n if (testFromQueryParams.testVariantHandle) {\n headers[\"X-Pack-Test-Variant-Handle\"] =\n testFromQueryParams.testVariantHandle;\n }\n } else if (testInfoForRequest) {\n headers[\"X-Pack-Test-Id\"] = testInfoForRequest?.id;\n headers[\"X-Pack-Test-Variant-Id\"] = testInfoForRequest?.testVariant?.id;\n }\n\n return headers;\n}\n","import { Test, TestTargetAudienceAttributes } from \"./test\";\nimport { Engine, Rule } from 'json-rules-engine';\nimport createDebug from \"debug\";\n\nconst debug = createDebug(\"pack:ab-testing:local-resolver\");\n\n// Types for json-rules-engine\ntype EngineResult = any;\n\nexport interface TestWithRules {\n id: string;\n handle: string;\n rules: Array<{\n attribute: string;\n operator: string;\n value: string;\n }>;\n testVariants: Array<{\n id: string;\n handle: string;\n trafficPercentage: number;\n }>;\n}\n\n/**\n * Local test resolver that evaluates test rules without external API calls\n * Rules are stored in memory for the request duration only - caching is handled by fetchTestRulesShared\n */\nexport class LocalTestResolver {\n private testRules: TestWithRules[] = [];\n\n constructor() {\n // No caching logic - rules are managed by fetchTestRulesShared with proper cache invalidation\n }\n\n /**\n * Set test rules (from the shared cache)\n */\n setTestRules(rules: TestWithRules[]) {\n this.testRules = rules;\n }\n\n /**\n * Check if rules are loaded\n */\n hasRules(): boolean {\n return this.testRules.length > 0;\n }\n\n /**\n * Check if a specific test is still active in the current rules\n */\n isTestActive(testId: string): boolean {\n return this.testRules.some(test => test.id === testId);\n }\n\n /**\n * Get fresh test data by ID from current rules\n */\n getTestById(testId: string): TestWithRules | null {\n return this.testRules.find(test => test.id === testId) || null;\n }\n\n /**\n * Get random number for test assignment\n */\n private getRandomNumber(max: number, min: number = 0): number {\n return Math.floor(Math.random() * (max - min + 1) + min);\n }\n\n /**\n * Evaluate test rules and assign a variant\n */\n async assignTest(\n attributes: TestTargetAudienceAttributes,\n _sessionId: string\n ): Promise<Test | null> {\n debug(\"[Pack Test LocalResolver] Starting test assignment:\", JSON.stringify({\n totalRules: this.testRules.length,\n attributes\n }));\n\n if (!this.testRules.length) {\n debug(\"[Pack Test LocalResolver] No test rules available\");\n return null;\n }\n\n // Filter tests by evaluating rules\n const eligibleTests = await this.evaluateRules(this.testRules, attributes);\n\n debug(\"[Pack Test LocalResolver] Rule evaluation result:\", JSON.stringify({\n totalTests: this.testRules.length,\n eligibleTests: eligibleTests.length,\n eligibleTestIds: eligibleTests.map(t => ({ id: t.id, handle: t.handle }))\n }));\n\n if (!eligibleTests.length) {\n debug(\"[Pack Test LocalResolver] No eligible tests found\");\n return null;\n }\n\n // Select a random test from eligible ones\n const randomTestIndex = this.getRandomNumber(eligibleTests.length - 1);\n const selectedTest = eligibleTests[randomTestIndex];\n\n debug(\"[Pack Test LocalResolver] Selected test:\", JSON.stringify({\n testId: selectedTest.id,\n testHandle: selectedTest.handle,\n randomIndex: randomTestIndex,\n totalEligible: eligibleTests.length\n }));\n\n // Assign variant based on traffic percentage\n const randomPercentage = this.getRandomNumber(100, 1);\n let accumulatedPercentage = 0;\n\n debug(\"[Pack Test LocalResolver] Starting variant assignment:\", JSON.stringify({\n randomPercentage,\n variants: selectedTest.testVariants.map(v => ({\n id: v.id,\n handle: v.handle,\n trafficPercentage: v.trafficPercentage\n }))\n }));\n\n for (const variant of selectedTest.testVariants) {\n accumulatedPercentage += variant.trafficPercentage * 100;\n\n debug(\"[Pack Test LocalResolver] Checking variant:\", JSON.stringify({\n variantId: variant.id,\n variantHandle: variant.handle,\n trafficPercentage: variant.trafficPercentage,\n accumulatedPercentage,\n randomPercentage,\n isSelected: accumulatedPercentage >= randomPercentage\n }));\n\n if (accumulatedPercentage >= randomPercentage) {\n const result = {\n id: selectedTest.id,\n handle: selectedTest.handle,\n testVariant: {\n id: variant.id,\n handle: variant.handle,\n },\n };\n debug(\"[Pack Test LocalResolver] Variant selected:\", JSON.stringify(result));\n return result;\n }\n }\n\n debug(\"[Pack Test LocalResolver] No variant selected (should not happen)\");\n return null;\n }\n\n /**\n * Evaluate rules using json-rules-engine (same as tests-service)\n */\n private async evaluateRules(\n tests: TestWithRules[],\n attributes: TestTargetAudienceAttributes\n ): Promise<TestWithRules[]> {\n debug(\"[Pack Test LocalResolver] Starting rule evaluation:\", JSON.stringify({\n totalTests: tests.length,\n attributes,\n isClientSide: typeof window !== \"undefined\"\n }));\n\n // Only run on server side\n if (typeof window !== \"undefined\") {\n debug(\"[Pack Test LocalResolver] Client side - returning all tests\");\n return tests; // Return all tests on client side\n }\n\n const engineResultsPromises: (Promise<EngineResult> | undefined)[] =\n tests.map((test, index) => {\n const { rules } = test;\n \n debug(`[Pack Test LocalResolver] Processing test ${index}:`, JSON.stringify({\n testId: test.id,\n testHandle: test.handle,\n rulesCount: rules?.length || 0,\n rules: rules\n }));\n \n if (rules && Array.isArray(rules)) {\n if (rules.length === 0) {\n debug(`[Pack Test LocalResolver] Test ${test.handle} has no rules - targeting all`);\n // If there are no rules, targeting all, so simulate a targeted event\n return Promise.resolve({\n events: [{ type: \"targeted\" }],\n } as EngineResult);\n } else {\n const engineConditionalProperties = (\n rules.filter(\n (rule: any) =>\n rule !== null &&\n typeof rule === \"object\" &&\n Object.hasOwn(rule, \"attribute\") &&\n Object.hasOwn(rule, \"operator\") &&\n Object.hasOwn(rule, \"value\")\n ) as {\n attribute: string;\n operator: string;\n value: string;\n }[]\n ).map((rule) => ({\n fact: rule.attribute,\n operator: rule.operator,\n value: rule.value,\n }));\n\n debug(`[Pack Test LocalResolver] Test ${test.handle} engine conditions:`, JSON.stringify(engineConditionalProperties));\n\n const engineRules = [\n new Rule({\n conditions: {\n all: engineConditionalProperties,\n },\n event: {\n type: \"targeted\",\n },\n }),\n ];\n\n const engine = new Engine(engineRules, {\n allowUndefinedFacts: true,\n });\n\n // Add custom operators to the engine\n engine.addOperator<string, string>(\n \"stringContains\",\n (factValue, jsonValue) => {\n return !!factValue && factValue.includes(jsonValue);\n }\n );\n engine.addOperator<string, string>(\n \"stringDoesNotContain\",\n (factValue, jsonValue) => {\n return !!factValue && !factValue.includes(jsonValue);\n }\n );\n engine.addOperator<string, string>(\n \"matchesRegex\",\n (factValue, jsonValue) => {\n return !!factValue && new RegExp(jsonValue).test(factValue);\n }\n );\n engine.addOperator<string, string>(\n \"doesNotMatchRegex\",\n (factValue, jsonValue) => {\n return !!factValue && !new RegExp(jsonValue).test(factValue);\n }\n );\n engine.addOperator<string, string>(\n \"isSet\",\n (factValue) => !!factValue\n );\n engine.addOperator<string, string>(\n \"isNotSet\",\n (factValue) => !factValue\n );\n\n const result = engine.run(attributes);\n debug(`[Pack Test LocalResolver] Engine result for test ${test.handle}:`, JSON.stringify(result));\n return result;\n }\n }\n\n debug(`[Pack Test LocalResolver] Test ${test.handle} has invalid rules`);\n // Return undefined for tests without valid rules\n return undefined;\n });\n\n const engineResults = await Promise.all(engineResultsPromises);\n\n debug(\"[Pack Test LocalResolver] All engine results:\", JSON.stringify(engineResults));\n\n const eligibleTests = tests.filter(\n (test, index) => {\n const hasTargetedEvent = !!engineResults?.[index]?.events.find((event: any) => event.type === \"targeted\");\n debug(`[Pack Test LocalResolver] Test ${test.handle} eligibility:`, JSON.stringify({\n hasTargetedEvent,\n events: engineResults?.[index]?.events\n }));\n return hasTargetedEvent;\n }\n );\n\n debug(\"[Pack Test LocalResolver] Final eligible tests:\", JSON.stringify({\n eligibleCount: eligibleTests.length,\n eligibleTests: eligibleTests.map(t => ({ id: t.id, handle: t.handle }))\n }));\n\n return eligibleTests;\n }\n\n /**\n * Resolve test and variant IDs from their handles\n */\n resolveTestIdsFromHandles(testHandle: string, variantHandle: string): {\n testId?: string;\n variantId?: string;\n } | null {\n const test = this.testRules.find(t => t.handle === testHandle);\n if (!test) {\n return null;\n }\n\n const variant = test.testVariants?.find(v => v.handle === variantHandle);\n if (!variant) {\n return null;\n }\n\n return {\n testId: test.id,\n variantId: variant.id\n };\n }\n}\n","import {\n type ActionFunction,\n type LoaderFunction,\n} from \"@remix-run/server-runtime\";\nimport { PackCustomizerMeta } from \"../create-pack-client\";\n\nconst ROOT_PATH = \"/\" as const;\n\ntype JsonFunction = <Data>(\n data: Data,\n init?: number | ResponseInit\n) => TypedResponse<Data>;\n\ntype RedirectFunction = (url: string, init?: number | ResponseInit) => Response;\n\n// must be a type since this is a subtype of response\n// interfaces must conform to the types they extend\ntype TypedResponse<T = unknown> = Omit<Response, \"json\"> & {\n json(): Promise<T>;\n};\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A not found response. Sets the status code.\n */\nfunction notFound(message = \"Not Found\") {\n return new Response(message, { status: 404, statusText: \"Not Found\" });\n}\n\nfunction isLocalPath(request: Request, url: string) {\n // Our domain, based on the current request path\n const currentUrl = new URL(request.url);\n\n // If url is relative, the 2nd argument will act as the base domain.\n const urlToCheck = new URL(url, currentUrl.origin);\n\n // If the origins don't match the slug is not on our domain.\n return currentUrl.origin === urlToCheck.origin;\n}\n\n/**\n * A `POST` request to this route will exit preview mode\n * POST /api/edit Content-Type: application/x-www-form-urlencoded\n */\nexport const action: ActionFunction = async ({ request, context }) => {\n const { session } = context.pack;\n\n if (!(request.method === \"POST\" && session)) {\n return json({ message: \"Method not allowed\" }, 405);\n }\n\n const body = await request.formData();\n const slug = (body.get(\"slug\") as string) ?? ROOT_PATH;\n const redirectTo = isLocalPath(request, slug) ? slug : ROOT_PATH;\n\n await session.destroy()\n\n return redirect(redirectTo);\n};\n\n/**\n * A `GET` request to this route will enter preview mode\n */\nexport const loader: LoaderFunction = async function ({ request, context }) {\n const { pack } = context;\n\n if (!pack.session) return notFound();\n\n const { searchParams } = new URL(request.url);\n\n const token = searchParams.get(\"token\");\n const environment = searchParams.get(\"environment\");\n const path = searchParams.get(\"path\") ?? ROOT_PATH;\n const customizerMeta = searchParams.get(\"customizerMeta\");\n const redirectTo = isLocalPath(request, path) ? path : ROOT_PATH;\n\n if (!searchParams.has(\"token\")) {\n throw new MissingTokenError();\n }\n\n const validatedToken = await pack.isValidEditToken(token);\n\n if (!validatedToken) {\n throw new InvalidTokenError();\n }\n\n let customizerMetaJson: PackCustomizerMeta | null;\n try {\n customizerMetaJson = customizerMeta\n ? (JSON.parse(customizerMeta) as PackCustomizerMeta)\n : null;\n } catch (_error) {\n customizerMetaJson = null;\n }\n\n pack.session.set(\"previewEnabled\", true);\n pack.session.set(\"environment\", environment);\n pack.session.set(\"customizerMeta\", customizerMetaJson);\n\n return redirect(redirectTo, {\n status: 307\n });\n};\n\nclass MissingTokenError extends Response {\n constructor() {\n super(\"Missing token\", { status: 401, statusText: \"Unauthorized\" });\n }\n}\n\nclass InvalidTokenError extends Response {\n constructor() {\n super(\"Invalid token\", { status: 401, statusText: \"Unauthorized\" });\n }\n}\n","import { useLoaderData, useMatches, useRevalidator } from \"@remix-run/react\";\nimport Cookies from \"js-cookie\";\nimport { useEffect, useState } from \"react\";\n\nimport { usePackTestContext } from \"./pack-test-context\";\nimport { Test } from \"./test\";\n\nconst usePackLoaderData = <\n T extends {\n packTestInfo?: Test;\n },\n>(): void => {\n const [exposedTestInfo, setExposedTestInfo] = useState<Test | undefined>();\n\n let packTestInfo: Test | undefined;\n let packIsPreviewMode: boolean | undefined;\n let revalidator: ReturnType<typeof useRevalidator> | undefined;\n\n try {\n const loaderData = useLoaderData<T>();\n packTestInfo = loaderData?.packTestInfo;\n\n const [root] = useMatches();\n packIsPreviewMode = (root?.data as { packIsPreviewMode?: boolean })\n ?.packIsPreviewMode;\n\n revalidator = useRevalidator();\n } catch (error) {\n console.error(\"PackTestRoute router error:\", error);\n // Handle cases where router hooks are called outside of a data router\n packTestInfo = undefined;\n packIsPreviewMode = undefined;\n revalidator = undefined;\n }\n\n const {\n testExposureCallback,\n hasUserConsent,\n pendingExposureQueue,\n setPendingExposureQueue,\n } = usePackTestContext();\n\n const exposedTestCookieString = Cookies.get(\"exposedTest\");\n\n useEffect(() => {\n if (\n packTestInfo &&\n !packIsPreviewMode &&\n !hasUserConsent &&\n exposedTestCookieString &&\n exposedTestInfo\n ) {\n // Add to the pending exposure queue if no user consent\n setPendingExposureQueue?.((prev) => {\n const newQueue = new Map(prev);\n newQueue.set(packTestInfo.id, {\n packTestInfo,\n exposureTime: Date.now(),\n });\n return newQueue;\n });\n }\n }, [\n hasUserConsent,\n packTestInfo,\n packIsPreviewMode,\n exposedTestCookieString,\n exposedTestInfo,\n ]);\n\n useEffect(() => {\n if (\n packTestInfo &&\n hasUserConsent &&\n !exposedTestCookieString &&\n !packIsPreviewMode &&\n !exposedTestInfo\n ) {\n // Set exposedTest cookie used by server to determine if session has been exposed to test\n const expires = new Date();\n expires.setHours(expires.getHours() + 24);\n\n Cookies.set(\"exposedTest\", JSON.stringify(packTestInfo), {\n expires,\n });\n\n setExposedTestInfo(packTestInfo);\n\n // Need to go through current exposure tracking callback queue\n // call tracking callbacks for previous exposures\n pendingExposureQueue?.forEach((data, key) => {\n try {\n testExposureCallback?.({\n ...data.packTestInfo,\n exposureTime: data.exposureTime,\n });\n setPendingExposureQueue?.((prev) => {\n const newQueue = new Map(prev);\n newQueue.delete(key);\n return newQueue;\n });\n } catch (error) {\n console.error(\"Failed to call testExposure after consent:\", error);\n }\n });\n\n testExposureCallback?.({ ...packTestInfo, exposureTime: Date.now() });\n\n // TODO: This results in flashing of UI driven by site settings data.\n // Need non-flashing solution.\n // Delay revalidation to avoid v3_lazyRouteDiscovery race condition bug\n // See: https://github.com/remix-run/remix/issues/10263\n setTimeout(() => {\n revalidator?.revalidate();\n }, 750);\n }\n }, [packTestInfo, testExposureCallback, exposedTestInfo, hasUserConsent]);\n};\n\nexport const PackTestRoute = () => {\n usePackLoaderData();\n\n return null;\n};\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import { createContext, useContext, Dispatch, SetStateAction } from \"react\";\n\nexport interface Test {\n id: string;\n handle: string;\n testVariant: {\n id: string;\n handle: string;\n };\n}\n\ninterface TestExposureCallbackArg extends Test {\n exposureTime: number;\n}\n\ntype PackTestContextValue = {\n testExposureCallback?: (test: TestExposureCallbackArg) => void;\n hasUserConsent?: boolean | undefined;\n pendingExposureQueue?: Map<any, any>;\n setPendingExposureQueue?: Dispatch<SetStateAction<Map<any, any>>>;\n exposedExperiments?: Set<unknown>;\n};\n\nexport const PackTestContext = createContext<PackTestContextValue>({});\n\nexport const usePackTestContext = () => useContext(PackTestContext);\n","import React, { useState, PropsWithChildren } from \"react\";\nimport { PackTestContext, Test } from \"./pack-test-context\";\n\ninterface PackContentProps {\n testExposureCallback?: (test: Test) => void;\n hasUserConsent?: boolean;\n}\n\nexport function PackTestProvider({\n children,\n testExposureCallback,\n hasUserConsent = false,\n}: PropsWithChildren<PackContentProps>) {\n const [pendingExposureQueue, setPendingExposureQueue] = useState(new Map());\n const [exposedExperiments] = useState(new Set());\n\n return (\n <PackTestContext.Provider\n value={{\n testExposureCallback: (test) => {\n testExposureCallback && testExposureCallback(test);\n },\n hasUserConsent,\n pendingExposureQueue,\n setPendingExposureQueue,\n exposedExperiments,\n }}\n >\n {children}\n </PackTestContext.Provider>\n );\n}\n","import { Test } from \"./test\";\nimport { useRouteLoaderData } from \"@remix-run/react\";\n\nexport function useAbTest(): Test | null {\n // @ts-ignore\n const { abTest, packAbTest } = useRouteLoaderData(\"root\");\n\n if (abTest === undefined && packAbTest === undefined) {\n throw new Error(\n \"ERR_HY_MISSING_AB_TEST_CONTEXT: No A/B test found, are you sure you have call ...pack.getPackContextData() on root loader return? Doc: https://docs.packdigital.com/err/ERR_HY_MISSING_AB_TEST_CONTEXT\"\n );\n }\n\n return abTest || packAbTest;\n}\n\nexport function useAbTestSessionId(): string {\n // @ts-ignore\n const { sessionId, packSessionId } = useRouteLoaderData(\"root\");\n\n if (!sessionId && !packSessionId) {\n throw new Error(\n \"ERR_HY_MISSING_SESSION_ID: No Session ID found, are you sure you have call ...pack.getPackContextData() on root loader return? Doc: https://docs.packdigital.com/err/ERR_HY_MISSING_SESSION_ID\"\n );\n }\n\n return sessionId || packSessionId;\n}\n\nexport function useAbTestId(): string | undefined {\n const test = useAbTest();\n\n return test?.id;\n}\n\nexport function useAbTestHandle(): string | undefined {\n const test = useAbTest();\n\n return test?.handle;\n}\n\nexport function useAbTestVariantId(): string | undefined {\n const test = useAbTest();\n\n return test?.testVariant?.id;\n}\n\nexport function useAbTestVariantHandle(): string | undefined {\n const test = useAbTest();\n\n return test?.testVariant?.handle;\n}\n"],"mappings":"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","names":["window","undefined","regexes","ua","parser","parse","serialize","decode","parse","createDebug","hash","debug","self","curry","keys","Fact","getCacheKey","debug","Condition","stringify","clone","parent","depth","RuleResult","stringify","ReflectApply","ReflectOwnKeys","NumberIsNaN","once","keys","self","Rule","stringify","evaluateCondition","evaluateConditions","prioritizeAndRun","_loop","i","any","all","processResult","Operator","self","UndefinedFactError","i","self","toString","Almanac","factValue","SuccessEventFact","self","Engine","hash","defaultValidate","locale","parseAcceptLanguage","languageHeaderValue","options","ignoreWildcard","validate","split","map","lang","q","trimmedLocale","trim","numQ","Number","replace","isNaN","sort","q1","q2","flatMap","action","parser","sendEvent","handleRequest","hasUserConsent","import_cookie","cookie","hash","crypto","createCookie","createCookieSessionStorage","createDebug","isSafari","createCookieSessionStorage","createCookie","cookie","cookie","import_debug","debug","createDebug","import_debug","debug","createDebug","URL","resp","isFirstExposure","testDataWithoutFlag","result","import_debug","debug","createDebug","sha256","hash","URL","resp","handleRequest","request","token","init","converter","useEffect","hasUserConsent","useEffect","useState","hasUserConsent","useState"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/ua-parser-js/src/ua-parser.js","../node_modules/cookie/index.js","../../../node_modules/ms/index.js","../../../node_modules/debug/src/common.js","../../../node_modules/debug/src/browser.js","../../../node_modules/curriable/src/utils.ts","../../../node_modules/curriable/src/index.ts","../../../node_modules/hash-it/es/constants.js","../../../node_modules/hash-it/es/utils.js","../../../node_modules/hash-it/es/index.js","../../../node_modules/json-rules-engine/dist/fact.js","../../../node_modules/json-rules-engine/dist/debug.js","../../../node_modules/lodash.isobjectlike/index.js","../../../node_modules/json-rules-engine/dist/condition.js","../../../node_modules/clone/clone.js","../../../node_modules/json-rules-engine/dist/rule-result.js","../../../node_modules/events/events.js","../../../node_modules/json-rules-engine/dist/rule.js","../../../node_modules/json-rules-engine/dist/operator.js","../../../node_modules/json-rules-engine/dist/errors.js","../../../node_modules/fast-bind/bind-loop.js","../../../node_modules/curry2/index.js","../../../node_modules/brackets2dots/index.js","../../../node_modules/dotsplit.js/index.js","../../../node_modules/selectn/index.js","../../../node_modules/json-rules-engine/dist/almanac.js","../../../node_modules/json-rules-engine/dist/engine-facts.js","../../../node_modules/json-rules-engine/dist/engine-default-operators.js","../../../node_modules/json-rules-engine/dist/engine.js","../../../node_modules/json-rules-engine/dist/json-rules-engine.js","../../../node_modules/json-rules-engine/dist/index.js","../../packlytics/dist/utils/get-packlytics-id.js","../../../node_modules/intl-parse-accept-language/src/index.ts","../../packlytics/dist/utils/get-headers.js","../../packlytics/dist/utils/get-client-locales.js","../../packlytics/dist/utils/sanatize-payload.js","../../packlytics/dist/utils/send-event.js","../../packlytics/dist/utils/page-hit.js","../../packlytics/dist/utils/get-client-device.js","../../packlytics/dist/packlytics.js","../../packlytics/dist/utils/get-client-location.js","../src/handle-request.ts","../src/session/usePackCookies.ts","../../../node_modules/worktop/cookie/index.mjs","../src/constants.ts","../src/session/session.ts","../src/session/cookies-utils.tsx","../src/session/test-session.ts","../src/create-pack-client.ts","../src/tests/test.ts","../src/tests/local-test-resolver.ts","../src/preview/preview-mode.tsx","../src/tests/pack-test-route.ts","../../../node_modules/js-cookie/dist/js.cookie.mjs","../src/tests/pack-test-context.ts","../src/tests/pack-test-provider.tsx","../src/tests/hooks.ts"],"sourcesContent":["/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.37\n Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '1.0.37',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 500;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook',\n CHROMIUM_OS = 'Chromium OS',\n MAC_OS = 'Mac OS';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i<arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n },\n lowerize = function (str) {\n return str.toLowerCase();\n },\n majorize = function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n },\n trim = function (str, len) {\n if (typeof(str) === STR_TYPE) {\n str = str.replace(/^\\s\\s*/, EMPTY);\n return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n if (!regex[j]) { break; }\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant|iemobile|slim)\\s?(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(heytap|ovi)browser\\/([\\d\\.]+)/i, // Heytap/Ovi\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 ' + BROWSER]], [\n /(oculus|sailfish|huawei|vivo)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, 'Sogou Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, 'Sogou Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/2345 Browser\n ], [NAME, VERSION], [\n /(lbbrowser)/i, // LieBao Browser\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /(Klarna)\\/([\\w\\.]+)/i, // Klarna Shopping Browser for iOS & Android\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram/Snapchat\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i, // Links\n /panasonic;(viera)/i // Panasonic Viera\n ], [NAME, VERSION], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /master.|lts./, \"\"]]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /oid[^\\)]+; (2\\d{4}(283|rpbf)[cgl])( bui|\\))/i, // Redmi Pad\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mitv-\\w{5}) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2| pro)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n /\\b(libweb)/i\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i // Windows Phone\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /windows nt 6\\.2; (arm)/i, // Windows RT\n /windows[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i,\n /(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, CHROMIUM_OS], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser[MAJOR] = majorize(_browser[VERSION]);\n // Brave-specific detection\n if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n _browser[NAME] = 'Brave';\n }\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n _device[TYPE] = MOBILE;\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n _device[MODEL] = 'iPad';\n _device[TYPE] = TABLET;\n }\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {\n _os[NAME] = _uach.platform \n .replace(/chrome os/i, CHROMIUM_OS)\n .replace(/macos/i, MAC_OS); // backward compatibility\n }\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var dec = opt.decode || decode;\n\n var index = 0\n while (index < str.length) {\n var eqIdx = str.indexOf('=', index)\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break\n }\n\n var endIdx = str.indexOf(';', index)\n\n if (endIdx === -1) {\n endIdx = str.length\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1\n continue\n }\n\n var key = str.slice(index, eqIdx).trim()\n\n // only assign once\n if (undefined === obj[key]) {\n var val = str.slice(eqIdx + 1, endIdx).trim()\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1)\n }\n\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.partitioned) {\n str += '; Partitioned'\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase()\n : opt.priority\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} val\n * @returns {string}\n */\n\nfunction encode (val) {\n return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]' ||\n val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/**\n * @constant __ placeholder used when parameters are skipped\n */\nexport const __: Placeholder =\n typeof Symbol === 'function' ? Symbol('curriable placeholder') : 0xedd1;\n\n/**\n * @function recursiveCurry\n *\n * @description\n * recursively curry over the arguments until all have been resolved\n *\n * @param fn the function to curry\n * @param arity the length of the function to curry until\n * @param args the existing arguments\n * @returns the result of the function call\n */\nexport function getCurried<Fn extends Handler>(fn: Fn, arity: number): Curry<Fn> {\n function _curried(args: any[]) {\n return function () {\n const length: number = args.length;\n\n const newArgs: IArguments = arguments;\n const { length: newArgsLength } = newArgs;\n\n const combined: any[] = [];\n\n let newArgsIndex = 0;\n let remaining = arity;\n let value: any;\n\n if (length) {\n let index = -1;\n\n while (++index < length) {\n combined[index] = value =\n args[index] === __ && newArgsIndex < newArgsLength\n ? newArgs[newArgsIndex++]\n : args[index];\n\n if (value !== __) {\n --remaining;\n }\n }\n }\n\n if (newArgsIndex < newArgsLength) {\n while (newArgsIndex < newArgsLength) {\n combined[combined.length] = value = newArgs[newArgsIndex];\n\n if (value !== __ && newArgsIndex < arity) {\n --remaining;\n }\n\n ++newArgsIndex;\n }\n }\n\n return remaining > 0 ? _curried(combined) : fn.apply(this, combined);\n };\n }\n\n return _curried([]);\n}\n","// utils\nimport { __, getCurried } from './utils';\n\nexport { __ };\n\n/**\n * @function curry\n *\n * @description\n * get the method passed as a curriable method based on its parameters\n *\n * @param fn the method to make curriable\n * @param arityOverride the hard-coded arity of the curried method\n * @returns the fn passed as a curried function\n */\nexport function curry<Fn extends Handler>(fn: Fn): Curried<Fn>;\nexport function curry<Fn extends Handler>(fn: Fn, arityOverride: number): Handler;\nexport function curry<Fn extends Handler>(fn: Fn, arityOverride?: number) {\n const arity = typeof arityOverride === 'number' ? arityOverride : fn.length;\n const curried = getCurried(fn, arity) as Curried<Fn>;\n\n curried.arity = arity;\n curried.fn = fn;\n\n return curried;\n}\n\ncurry.__ = __;\n\n/**\n * @function isPlaceholder\n *\n * @description\n * is the value passed a placeholder\n *\n * @param value the value to test\n * @returns whether the value is a placeholder\n */\nexport function isPlaceholder(value: any): value is Placeholder {\n return value === __;\n}\n\ncurry.isPlaceholder = isPlaceholder;\n\n/**\n * @function uncurry\n *\n * @description\n * return a function that is the non-curried version of the fn passed\n *\n * @param curried the curried function to uncurry\n * @returns the original fn\n */\nexport function uncurry<Fn extends Handler>(curried: Curried<Fn>): Fn {\n return curried.fn;\n}\n\ncurry.uncurry = uncurry;\n\nexport default curry;\n","var _SELF_TAGS, _TOSTRING_TAGS, _TYPEDARRAY_TAGS, _UNPARSEABLE_TAGS;\n\n/**\n * @constant {boolean} HAS_BUFFER_FROM_SUPPORT\n */\nexport var HAS_BUFFER_FROM_SUPPORT = typeof Buffer !== 'undefined' && typeof Buffer.from === 'function';\n/**\n * @constant {boolean} HAS_UINT16ARRAY_SUPPORT\n */\n\nexport var HAS_UINT16ARRAY_SUPPORT = typeof Uint16Array === 'function';\n/**\n * @constant {RegExp} HTML_ELEMENT_REGEXP\n */\n\nexport var HTML_ELEMENT_REGEXP = /\\[object (HTML(.*)Element)\\]/;\n/**\n * @constant {RegExp} SVG_ELEMENT_REGEXP\n */\n\nexport var SVG_ELEMENT_REGEXP = /\\[object (SVG(.*)Element)\\]/;\n/**\n * @constant {Array<string>} OBJECT_CLASSES\n */\n\nvar OBJECT_CLASSES = ['Arguments', 'Array', 'ArrayBuffer', 'Boolean', 'DataView', 'Date', 'DocumentFragment', 'Error', 'Event', 'Float32Array', 'Float64Array', 'Function', 'Generator', 'GeneratorFunction', 'HTMLElement', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Null', 'Number', 'Object', 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'Undefined', 'WeakMap', 'WeakSet', 'Window'];\n/**\n * @constant {Object} OBJECT_CLASS_MAP\n */\n\nexport var OBJECT_CLASS_MAP = OBJECT_CLASSES.reduce(function (objectClasses, type) {\n objectClasses[\"[object \" + type + \"]\"] = type;\n return objectClasses;\n}, {});\n/**\n * @constant {Object} OBJECT_CLASS_TYPE_MAP\n */\n\nexport var OBJECT_CLASS_TYPE_MAP = Object.keys(OBJECT_CLASS_MAP).reduce(function (objectClassTypes, objectClass) {\n objectClassTypes[OBJECT_CLASS_MAP[objectClass].toUpperCase()] = objectClass;\n return objectClassTypes;\n}, {});\nexport var ITERABLE_TAGS = {\n '[object Map]': true,\n '[object Set]': true\n};\nexport var PRIMITIVE_TAGS = {\n boolean: true,\n function: true,\n number: true,\n string: true,\n undefined: true\n};\nexport var SELF_TAGS = (_SELF_TAGS = {}, _SELF_TAGS[OBJECT_CLASS_TYPE_MAP.ARGUMENTS] = true, _SELF_TAGS[OBJECT_CLASS_TYPE_MAP.ARRAY] = true, _SELF_TAGS);\nexport var TOSTRING_TAGS = (_TOSTRING_TAGS = {}, _TOSTRING_TAGS[OBJECT_CLASS_TYPE_MAP.REGEXP] = true, _TOSTRING_TAGS[OBJECT_CLASS_TYPE_MAP.SYMBOL] = true, _TOSTRING_TAGS);\nexport var TYPEDARRAY_TAGS = (_TYPEDARRAY_TAGS = {}, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.FLOAT32ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.FLOAT64ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.INT8ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.INT16ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.INT32ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.UINT8ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.UINT8CLAMPEDARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.UINT16ARRAY] = true, _TYPEDARRAY_TAGS[OBJECT_CLASS_TYPE_MAP.UINT32ARRAY] = true, _TYPEDARRAY_TAGS);\nexport var UNPARSEABLE_TAGS = (_UNPARSEABLE_TAGS = {}, _UNPARSEABLE_TAGS[OBJECT_CLASS_TYPE_MAP.GENERATOR] = true, _UNPARSEABLE_TAGS[OBJECT_CLASS_TYPE_MAP.PROMISE] = true, _UNPARSEABLE_TAGS[OBJECT_CLASS_TYPE_MAP.WEAKMAP] = true, _UNPARSEABLE_TAGS[OBJECT_CLASS_TYPE_MAP.WEAKSET] = true, _UNPARSEABLE_TAGS);","import { HAS_BUFFER_FROM_SUPPORT, HAS_UINT16ARRAY_SUPPORT, HTML_ELEMENT_REGEXP, ITERABLE_TAGS, OBJECT_CLASS_MAP, OBJECT_CLASS_TYPE_MAP, PRIMITIVE_TAGS, SELF_TAGS, SVG_ELEMENT_REGEXP, TOSTRING_TAGS, TYPEDARRAY_TAGS, UNPARSEABLE_TAGS } from './constants';\nvar FUNCTION_NAME_REGEX = /^\\s*function\\s*([^(]*)/i;\nvar toString = Object.prototype.toString;\nvar keys = Object.keys;\n/**\n * @function getFunctionName\n *\n * @description\n * get the name of the function based on a series of fallback attempts\n *\n * @param {function} fn the function to test\n * @returns {string} the function name\n */\n\nexport function getFunctionName(fn) {\n return fn.name || (fn.toString().match(FUNCTION_NAME_REGEX) || [])[1] || 'anonymous';\n}\n/**\n * @function getIntegerHashValue\n *\n * @description\n * based on string passed, get the integer hash value\n * through bitwise operation (based on spinoff of dbj2\n * with enhancements for reduced collisions)\n *\n * @param {string} string the string to get the hash value for\n * @returns {number} the hash value\n */\n\nexport function getIntegerHashValue(string) {\n var index = string.length,\n hashA = 5381,\n hashB = 52711,\n charCode;\n\n while (index--) {\n charCode = string.charCodeAt(index);\n hashA = hashA * 33 ^ charCode;\n hashB = hashB * 33 ^ charCode;\n }\n\n return (hashA >>> 0) * 4096 + (hashB >>> 0);\n}\n/**\n * @function getSortedEvent\n *\n * @description\n * get the event object sorted by its properties\n *\n * @param {boolean} bubbles does the event bubble up through the DOM\n * @param {function} alias to stopPropagation\n * @param {boolean} cancelable is the event cancelable\n * @param {boolean} composed can the event bubble across the boundary to shadow DOM\n * @param {HTMLElement} [currentTarget] registered target for the event\n * @param {boolean} defaultPrevented has preventDefault been called on the event\n * @param {string} eventPhase the phase of the event flow being processed\n * @param {boolean} isTrusted was the event initiated by the browser\n * @param {HTMLElement} [target] the target with which the event was dispatched\n * @param {number} timeStamp the time at which the event was created\n * @param {string} type the name of the event\n * @returns {Object} the event object with all properties sorted\n */\n\nexport function getSortedEvent(event) {\n return {\n bubbles: event.bubbles,\n cancelBubble: event.cancelBubble,\n cancelable: event.cancelable,\n composed: event.composed,\n currentTarget: event.currentTarget,\n defaultPrevented: event.defaultPrevented,\n eventPhase: event.eventPhase,\n isTrusted: event.isTrusted,\n returnValue: event.returnValue,\n target: event.target,\n type: event.type\n };\n}\n/**\n * @function shouldSort\n *\n * @description\n * get the sort result based on the two values to compare\n *\n * @param {string} valueA the first value to compare\n * @param {string} valueB the second value to compare\n * @returns {boolean} should the value be sorted\n */\n\nexport function shouldSort(valueA, valueB) {\n return valueA > valueB;\n}\n/**\n * @function shouldSortPair\n *\n * @description\n * get the sort result based on the two pairs to compare\n *\n * @param {Object} pairA the first pair to compare\n * @param {Object} pairB the second pair to compare\n * @returns {boolean} should the value be sorted\n */\n\nexport function shouldSortPair(pairA, pairB) {\n return pairA[0] > pairB[0];\n}\n/**\n * @function sort\n *\n * @description\n * sort the array based on the fn passed\n *\n * @param {Array<any>} array the array to sort\n * @param {function} fn the sorting function\n * @returns {Array<any>} the sorted array\n */\n\nexport function sort(array, fn) {\n var subIndex, value;\n\n for (var index = 0; index < array.length; ++index) {\n value = array[index];\n\n for (subIndex = index - 1; ~subIndex && fn(array[subIndex], value); --subIndex) {\n array[subIndex + 1] = array[subIndex];\n }\n\n array[subIndex + 1] = value;\n }\n\n return array;\n}\n/**\n * @function getIterablePairs\n *\n * @description\n * get the pairs in the iterable for stringification\n *\n * @param {Map|Set} iterable the iterable to get the pairs for\n * @returns {Array<{key: string, value: any}>} the pairs\n */\n\nexport function getSortedIterable(iterable, cache, keys) {\n var isMap = typeof iterable.get === 'function';\n var entries = [];\n\n if (isMap) {\n iterable.forEach(function (value, key) {\n entries.push([// eslint-disable-next-line no-use-before-define\n stringify(key, cache, keys), // eslint-disable-next-line no-use-before-define\n stringify(value, cache, keys)]);\n });\n sort(entries, shouldSortPair);\n } else {\n iterable.forEach(function (value) {\n // eslint-disable-next-line no-use-before-define\n entries.push(stringify(value, cache, keys));\n });\n sort(entries, shouldSort);\n }\n\n var _final = getFunctionName(iterable.constructor) + \"|[\";\n\n for (var index = 0, length = entries.length, entry; index < length; ++index) {\n entry = entries[index];\n _final += \"\" + (index ? ',' : '') + (isMap ? \"[\" + entry[0] + \",\" + entry[1] + \"]\" : entry);\n }\n\n return _final + \"]\";\n}\n/**\n * @function getSortedObject\n *\n * @description\n * get the object with the keys sorted\n *\n * @param {Object} object the object to sort\n * @returns {Object} the sorted object\n */\n\nexport function getSortedObject(object) {\n var objectKeys = sort(keys(object), shouldSort);\n var newObject = {};\n var key;\n\n for (var index = 0; index < objectKeys.length; ++index) {\n key = objectKeys[index];\n newObject[key] = object[key];\n }\n\n return newObject;\n}\n/**\n * @function getStringifiedArrayBufferFallback\n *\n * @description\n * get the string value of the buffer passed based on a Buffer\n *\n * @param {ArrayBuffer} buffer the array buffer to convert\n * @returns {string} the stringified buffer\n */\n\nexport function getStringifiedArrayBufferFallback(buffer) {\n return String.fromCharCode.apply(null, new Uint16Array(buffer));\n}\n/**\n * @function getStringifiedArrayBufferModern\n *\n * @description\n * get the string value of the buffer passed based on a Uint16Array\n *\n * @param {ArrayBuffer} buffer the array buffer to convert\n * @returns {string} the stringified buffer\n */\n\nexport function getStringifiedArrayBufferModern(buffer) {\n return Buffer.from(buffer).toString('utf8');\n}\n/**\n * @function getStringifiedArrayBufferNoSupport\n *\n * @description\n * return a placeholder when no arraybuffer support exists\n *\n * @returns {string} the placeholder\n */\n\nexport function getStringifiedArrayBufferNoSupport() {\n return '';\n}\n/**\n * @function getStringifiedArrayBuffer\n *\n * @description\n * get the string value of the buffer passed\n *\n * @param {ArrayBuffer} buffer the array buffer to convert\n * @returns {string} the stringified buffer\n */\n\nexport var getStringifiedArrayBuffer = function () {\n if (HAS_BUFFER_FROM_SUPPORT) {\n return getStringifiedArrayBufferModern;\n }\n\n if (HAS_UINT16ARRAY_SUPPORT) {\n return getStringifiedArrayBufferFallback;\n }\n\n return getStringifiedArrayBufferNoSupport;\n}();\n/**\n * @function getStringifiedDocumentFragment\n *\n * @description\n * build a string based on all the fragment's children\n *\n * @param {DocumentFragment} fragment the fragment to stringify\n * @returns {string} the stringified fragment\n */\n\nexport function getStringifiedDocumentFragment(fragment) {\n var children = fragment.children;\n var innerHTML = '';\n\n for (var index = 0; index < children.length; ++index) {\n innerHTML += children[index].outerHTML;\n }\n\n return innerHTML;\n}\n/**\n * @function getCutoffIndex\n *\n * @description\n * get the index after that of the value match in the array (faster than\n * native indexOf) to determine the cutoff index for the `splice()` call.\n *\n * @param {Array<any>} array the array to get the index of the value at\n * @param {any} value the value to match\n * @returns {number} the index after the value match in the array\n */\n\nexport function getCutoffIndex(array, value) {\n for (var index = 0; index < array.length; ++index) {\n if (array[index] === value) {\n return index + 1;\n }\n }\n\n return 0;\n}\n/**\n * @function getNormalizedValue\n *\n * @description\n * get the value normalized for stringification\n *\n * @param {any} value the value to normalize\n * @param {WeakMap|Object} sortedCache the cache of sorted objects\n * @param {string} [passedTag] the previously-calculated tag\n * @returns {any} the normalized value\n */\n\nexport function getNormalizedValue(value, cache, keys, passedTag) {\n if (passedTag === void 0) {\n var type = typeof value;\n\n if (type === 'string' || PRIMITIVE_TAGS[type]) {\n return type + \"|\" + value;\n }\n\n if (value === null) {\n return \"null|\" + value;\n }\n }\n\n var tag = passedTag || toString.call(value);\n\n if (SELF_TAGS[tag]) {\n return value;\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.OBJECT) {\n return getSortedObject(value);\n }\n\n if (TOSTRING_TAGS[tag]) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + value.toString();\n }\n\n if (ITERABLE_TAGS[tag]) {\n return getSortedIterable(value, cache, keys);\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.DATE) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + value.getTime();\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.ERROR) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + value.stack;\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.EVENT) {\n return getSortedEvent(value);\n }\n\n if (UNPARSEABLE_TAGS[tag]) {\n return OBJECT_CLASS_MAP[tag] + \"|NOT_ENUMERABLE\";\n }\n\n if (HTML_ELEMENT_REGEXP.test(tag) || SVG_ELEMENT_REGEXP.test(tag)) {\n return tag.slice(8, -1) + \"|\" + value.outerHTML;\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.DOCUMENTFRAGMENT) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + getStringifiedDocumentFragment(value);\n }\n\n if (TYPEDARRAY_TAGS[tag]) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + value.join(',');\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.ARRAYBUFFER) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + getStringifiedArrayBuffer(value);\n }\n\n if (tag === OBJECT_CLASS_TYPE_MAP.DATAVIEW) {\n return OBJECT_CLASS_MAP[tag] + \"|\" + getStringifiedArrayBuffer(value.buffer);\n }\n\n return value;\n}\n/**\n * @function replacer\n *\n * @description\n * create the replacer function used for stringification\n *\n * @param {WeakSet|Object} sortedCache the cache to use for sorting objects\n * @returns {function(key: string, value: any)} function getting the normalized value\n */\n\nexport function createReplacer(cache, keys) {\n if (cache === void 0) {\n cache = [];\n }\n\n if (keys === void 0) {\n keys = [];\n }\n\n return function (key, value) {\n if (typeof value === 'object') {\n if (cache.length) {\n var thisCutoff = getCutoffIndex(cache, this);\n\n if (thisCutoff === 0) {\n cache.push(this);\n } else {\n cache.splice(thisCutoff);\n keys.splice(thisCutoff);\n }\n\n keys.push(key);\n var valueCutoff = getCutoffIndex(cache, value);\n\n if (valueCutoff !== 0) {\n return \"[~\" + (keys.slice(0, valueCutoff).join('.') || '.') + \"]\";\n }\n\n cache.push(value);\n } else {\n cache[0] = value;\n keys[0] = key;\n }\n }\n\n if (key && this[key] instanceof Date) {\n return getNormalizedValue(this[key], cache, keys, OBJECT_CLASS_TYPE_MAP.DATE, cache, keys);\n }\n\n return getNormalizedValue(value, cache, keys);\n };\n}\n/**\n * @function stringify\n *\n * @description\n * stringify the value based on the options passed\n *\n * @param {any} value the value to stringify\n * @returns {string} the stringified value\n */\n\nexport function stringify(value, cache, keys) {\n if (!value || typeof value !== 'object') {\n return getNormalizedValue(value, cache, keys);\n }\n\n var tag = toString.call(value);\n\n if (tag === OBJECT_CLASS_TYPE_MAP.DATE || tag === OBJECT_CLASS_TYPE_MAP.REGEXP) {\n return getNormalizedValue(value, cache, keys, tag);\n }\n\n return JSON.stringify(value, createReplacer(cache, keys));\n}","// external dependencies\nimport { curry } from 'curriable'; // utils\n\nimport { getIntegerHashValue, stringify } from './utils';\n/**\n * @function hash\n *\n * @description\n * hash the value passed to a unique, consistent hash value\n *\n * @param {any} value the value to hash\n * @returns {number} the object hash\n */\n\nexport function hash(value) {\n return getIntegerHashValue(stringify(value));\n}\n/**\n * @function hash.is\n *\n * @description\n * create a comparator for the first object passed to determine if the second is equal\n *\n * @param {any} object the object to test against\n * @returns {function(any): boolean} the method to test against the object\n */\n\nhash.is = curry(function (object, otherObject) {\n return hash(object) === hash(otherObject);\n});\n/**\n * @function hash.is.all\n *\n * @description\n * determine if all of the objects passed are equal in value to the first\n *\n * @param {...Array<any>} objects the objects to test for equality\n * @returns {boolean} are the objects equal\n */\n\nhash.is.all = curry(function (objectBasis) {\n var isEqual = hash.is(objectBasis);\n\n for (var index = 1; index < arguments.length; ++index) {\n if (!isEqual(arguments[index])) {\n return false;\n }\n }\n\n return true;\n}, 2);\n/**\n * @function hash.is.any\n *\n * @description\n * determine if any of the objects passed are equal in value to the first\n *\n * @param {...Array<any>} objects the objects to test for equality\n * @returns {boolean} are the objects equal\n */\n\nhash.is.any = curry(function (objectBasis) {\n var isEqual = hash.is(objectBasis);\n\n for (var index = 1; index < arguments.length; index++) {\n if (isEqual(arguments[index])) {\n return true;\n }\n }\n\n return false;\n}, 2);\n/**\n * @function hash.is.not\n *\n * @description\n * create a comparator for the first object passed to determine if the second is not equal\n *\n * @param {any} object the object to test against\n * @returns {function(any): boolean} the method to test against the object\n */\n\nhash.is.not = curry(function (object, otherObject) {\n return hash(object) !== hash(otherObject);\n});\nexport default hash;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _hashIt = require('hash-it');\n\nvar _hashIt2 = _interopRequireDefault(_hashIt);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Fact = function () {\n /**\n * Returns a new fact instance\n * @param {string} id - fact unique identifer\n * @param {object} options\n * @param {boolean} options.cache - whether to cache the fact's value for future rules\n * @param {primitive|function} valueOrMethod - constant primitive, or method to call when computing the fact's value\n * @return {Fact}\n */\n function Fact(id, valueOrMethod, options) {\n _classCallCheck(this, Fact);\n\n this.id = id;\n var defaultOptions = { cache: true };\n if (typeof options === 'undefined') {\n options = defaultOptions;\n }\n if (typeof valueOrMethod !== 'function') {\n this.value = valueOrMethod;\n this.type = this.constructor.CONSTANT;\n } else {\n this.calculationMethod = valueOrMethod;\n this.type = this.constructor.DYNAMIC;\n }\n\n if (!this.id) throw new Error('factId required');\n if (typeof this.value === 'undefined' && typeof this.calculationMethod === 'undefined') {\n throw new Error('facts must have a value or method');\n }\n\n this.priority = parseInt(options.priority || 1, 10);\n this.options = Object.assign({}, defaultOptions, options);\n this.cacheKeyMethod = this.defaultCacheKeys;\n return this;\n }\n\n _createClass(Fact, [{\n key: 'isConstant',\n value: function isConstant() {\n return this.type === this.constructor.CONSTANT;\n }\n }, {\n key: 'isDynamic',\n value: function isDynamic() {\n return this.type === this.constructor.DYNAMIC;\n }\n\n /**\n * Return the fact value, based on provided parameters\n * @param {object} params\n * @param {Almanac} almanac\n * @return {any} calculation method results\n */\n\n }, {\n key: 'calculate',\n value: function calculate(params, almanac) {\n // if constant fact w/set value, return immediately\n if (this.hasOwnProperty('value')) {\n return this.value;\n }\n return this.calculationMethod(params, almanac);\n }\n\n /**\n * Return a cache key (MD5 string) based on parameters\n * @param {object} obj - properties to generate a hash key from\n * @return {string} MD5 string based on the hash'd object\n */\n\n }, {\n key: 'defaultCacheKeys',\n\n\n /**\n * Default properties to use when caching a fact\n * Assumes every fact is a pure function, whose computed value will only\n * change when input params are modified\n * @param {string} id - fact unique identifer\n * @param {object} params - parameters passed to fact calcution method\n * @return {object} id + params\n */\n value: function defaultCacheKeys(id, params) {\n return { params: params, id: id };\n }\n\n /**\n * Generates the fact's cache key(MD5 string)\n * Returns nothing if the fact's caching has been disabled\n * @param {object} params - parameters that would be passed to the computation method\n * @return {string} cache key\n */\n\n }, {\n key: 'getCacheKey',\n value: function getCacheKey(params) {\n if (this.options.cache === true) {\n var cacheProperties = this.cacheKeyMethod(this.id, params);\n var _hash = Fact.hashFromObject(cacheProperties);\n return _hash;\n }\n }\n }], [{\n key: 'hashFromObject',\n value: function hashFromObject(obj) {\n return (0, _hashIt2.default)(obj);\n }\n }]);\n\n return Fact;\n}();\n\nFact.CONSTANT = 'CONSTANT';\nFact.DYNAMIC = 'DYNAMIC';\n\nexports.default = Fact;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = debug;\nfunction debug(message) {\n if (typeof process !== 'undefined' && process.env && process.env.DEBUG && process.env.DEBUG.match(/json-rules-engine/) || typeof window !== 'undefined' && window.localStorage && window.localStorage.debug && window.localStorage.debug.match(/json-rules-engine/)) {\n console.log(message);\n }\n}","/**\n * lodash 4.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _debug = require('./debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _lodash = require('lodash.isobjectlike');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Condition = function () {\n function Condition(properties) {\n _classCallCheck(this, Condition);\n\n if (!properties) throw new Error('Condition: constructor options required');\n var booleanOperator = Condition.booleanOperator(properties);\n Object.assign(this, properties);\n if (booleanOperator) {\n var subConditions = properties[booleanOperator];\n if (!Array.isArray(subConditions)) {\n throw new Error('\"' + booleanOperator + '\" must be an array');\n }\n this.operator = booleanOperator;\n // boolean conditions always have a priority; default 1\n this.priority = parseInt(properties.priority, 10) || 1;\n this[booleanOperator] = subConditions.map(function (c) {\n return new Condition(c);\n });\n } else {\n if (!properties.hasOwnProperty('fact')) throw new Error('Condition: constructor \"fact\" property required');\n if (!properties.hasOwnProperty('operator')) throw new Error('Condition: constructor \"operator\" property required');\n if (!properties.hasOwnProperty('value')) throw new Error('Condition: constructor \"value\" property required');\n\n // a non-boolean condition does not have a priority by default. this allows\n // priority to be dictated by the fact definition\n if (properties.hasOwnProperty('priority')) {\n properties.priority = parseInt(properties.priority, 10);\n }\n }\n }\n\n /**\n * Converts the condition into a json-friendly structure\n * @param {Boolean} stringify - whether to return as a json string\n * @returns {string,object} json string or json-friendly object\n */\n\n\n _createClass(Condition, [{\n key: 'toJSON',\n value: function toJSON() {\n var stringify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var props = {};\n if (this.priority) {\n props.priority = this.priority;\n }\n var oper = Condition.booleanOperator(this);\n if (oper) {\n props[oper] = this[oper].map(function (c) {\n return c.toJSON(stringify);\n });\n } else {\n props.operator = this.operator;\n props.value = this.value;\n props.fact = this.fact;\n if (this.factResult !== undefined) {\n props.factResult = this.factResult;\n }\n if (this.result !== undefined) {\n props.result = this.result;\n }\n if (this.params) {\n props.params = this.params;\n }\n if (this.path) {\n props.path = this.path;\n }\n }\n if (stringify) {\n return JSON.stringify(props);\n }\n return props;\n }\n\n /**\n * Interprets .value as either a primitive, or if a fact, retrieves the fact value\n */\n\n }, {\n key: '_getValue',\n value: function _getValue(almanac) {\n var value = this.value;\n if ((0, _lodash2.default)(value) && value.hasOwnProperty('fact')) {\n // value: { fact: 'xyz' }\n return almanac.factValue(value.fact, value.params, value.path);\n }\n return Promise.resolve(value);\n }\n\n /**\n * Takes the fact result and compares it to the condition 'value', using the operator\n * LHS OPER RHS\n * <fact + params + path> <operator> <value>\n *\n * @param {Almanac} almanac\n * @param {Map} operatorMap - map of available operators, keyed by operator name\n * @returns {Boolean} - evaluation result\n */\n\n }, {\n key: 'evaluate',\n value: function evaluate(almanac, operatorMap) {\n var _this = this;\n\n if (!almanac) return Promise.reject(new Error('almanac required'));\n if (!operatorMap) return Promise.reject(new Error('operatorMap required'));\n if (this.isBooleanOperator()) return Promise.reject(new Error('Cannot evaluate() a boolean condition'));\n\n var op = operatorMap.get(this.operator);\n if (!op) return Promise.reject(new Error('Unknown operator: ' + this.operator));\n\n return this._getValue(almanac) // todo - parallelize\n .then(function (rightHandSideValue) {\n return almanac.factValue(_this.fact, _this.params, _this.path).then(function (leftHandSideValue) {\n var result = op.evaluate(leftHandSideValue, rightHandSideValue);\n (0, _debug2.default)('condition::evaluate <' + leftHandSideValue + ' ' + _this.operator + ' ' + rightHandSideValue + '?> (' + result + ')');\n return { result: result, leftHandSideValue: leftHandSideValue, rightHandSideValue: rightHandSideValue, operator: _this.operator };\n });\n });\n }\n\n /**\n * Returns the boolean operator for the condition\n * If the condition is not a boolean condition, the result will be 'undefined'\n * @return {string 'all' or 'any'}\n */\n\n }, {\n key: 'booleanOperator',\n\n\n /**\n * Returns the condition's boolean operator\n * Instance version of Condition.isBooleanOperator\n * @returns {string,undefined} - 'any', 'all', or undefined (if not a boolean condition)\n */\n value: function booleanOperator() {\n return Condition.booleanOperator(this);\n }\n\n /**\n * Whether the operator is boolean ('all', 'any')\n * @returns {Boolean}\n */\n\n }, {\n key: 'isBooleanOperator',\n value: function isBooleanOperator() {\n return Condition.booleanOperator(this) !== undefined;\n }\n }], [{\n key: 'booleanOperator',\n value: function booleanOperator(condition) {\n if (condition.hasOwnProperty('any')) {\n return 'any';\n } else if (condition.hasOwnProperty('all')) {\n return 'all';\n }\n }\n }]);\n\n return Condition;\n}();\n\nexports.default = Condition;","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n nativeMap = Map;\n} catch(_) {\n // maybe a reference error because no `Map`. Give it a dummy value that no\n // value will ever be an instanceof.\n nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n nativeSet = Set;\n} catch(_) {\n nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n nativePromise = Promise;\n} catch(_) {\n nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n * should be cloned as well. Non-enumerable properties on the prototype\n * chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n includeNonEnumerable = circular.includeNonEnumerable;\n circular = circular.circular;\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth === 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (_instanceof(parent, nativeMap)) {\n child = new nativeMap();\n } else if (_instanceof(parent, nativeSet)) {\n child = new nativeSet();\n } else if (_instanceof(parent, nativePromise)) {\n child = new nativePromise(function (resolve, reject) {\n parent.then(function(value) {\n resolve(_clone(value, depth - 1));\n }, function(err) {\n reject(_clone(err, depth - 1));\n });\n });\n } else if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else if (_instanceof(parent, Error)) {\n child = Object.create(parent);\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n if (_instanceof(parent, nativeMap)) {\n parent.forEach(function(value, key) {\n var keyChild = _clone(key, depth - 1);\n var valueChild = _clone(value, depth - 1);\n child.set(keyChild, valueChild);\n });\n }\n if (_instanceof(parent, nativeSet)) {\n parent.forEach(function(value) {\n var entryChild = _clone(value, depth - 1);\n child.add(entryChild);\n });\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(parent);\n for (var i = 0; i < symbols.length; i++) {\n // Don't need to worry about cloning a symbol because it is a primitive,\n // like a number or string.\n var symbol = symbols[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n continue;\n }\n child[symbol] = _clone(parent[symbol], depth - 1);\n if (!descriptor.enumerable) {\n Object.defineProperty(child, symbol, {\n enumerable: false\n });\n }\n }\n }\n\n if (includeNonEnumerable) {\n var allPropertyNames = Object.getOwnPropertyNames(parent);\n for (var i = 0; i < allPropertyNames.length; i++) {\n var propertyName = allPropertyNames[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n if (descriptor && descriptor.enumerable) {\n continue;\n }\n child[propertyName] = _clone(parent[propertyName], depth - 1);\n Object.defineProperty(child, propertyName, {\n enumerable: false\n });\n }\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = require('clone');\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RuleResult = function () {\n function RuleResult(conditions, event, priority, name) {\n _classCallCheck(this, RuleResult);\n\n this.conditions = (0, _clone2.default)(conditions);\n this.event = (0, _clone2.default)(event);\n this.priority = (0, _clone2.default)(priority);\n this.name = (0, _clone2.default)(name);\n this.result = null;\n }\n\n _createClass(RuleResult, [{\n key: 'setResult',\n value: function setResult(result) {\n this.result = result;\n }\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var stringify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var props = {\n conditions: this.conditions.toJSON(false),\n event: this.event,\n priority: this.priority,\n name: this.name,\n result: this.result\n };\n if (stringify) {\n return JSON.stringify(props);\n }\n return props;\n }\n }]);\n\n return RuleResult;\n}();\n\nexports.default = RuleResult;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _condition = require('./condition');\n\nvar _condition2 = _interopRequireDefault(_condition);\n\nvar _ruleResult = require('./rule-result');\n\nvar _ruleResult2 = _interopRequireDefault(_ruleResult);\n\nvar _events = require('events');\n\nvar _debug = require('./debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Rule = function (_EventEmitter) {\n _inherits(Rule, _EventEmitter);\n\n /**\n * returns a new Rule instance\n * @param {object,string} options, or json string that can be parsed into options\n * @param {integer} options.priority (>1) - higher runs sooner.\n * @param {Object} options.event - event to fire when rule evaluates as successful\n * @param {string} options.event.type - name of event to emit\n * @param {string} options.event.params - parameters to pass to the event listener\n * @param {Object} options.conditions - conditions to evaluate when processing this rule\n * @param {any} options.name - identifier for a particular rule, particularly valuable in RuleResult output\n * @return {Rule} instance\n */\n function Rule(options) {\n _classCallCheck(this, Rule);\n\n var _this = _possibleConstructorReturn(this, (Rule.__proto__ || Object.getPrototypeOf(Rule)).call(this));\n\n if (typeof options === 'string') {\n options = JSON.parse(options);\n }\n if (options && options.conditions) {\n _this.setConditions(options.conditions);\n }\n if (options && options.onSuccess) {\n _this.on('success', options.onSuccess);\n }\n if (options && options.onFailure) {\n _this.on('failure', options.onFailure);\n }\n if (options && (options.name || options.name === 0)) {\n _this.setName(options.name);\n }\n\n var priority = options && options.priority || 1;\n _this.setPriority(priority);\n\n var event = options && options.event || { type: 'unknown' };\n _this.setEvent(event);\n return _this;\n }\n\n /**\n * Sets the priority of the rule\n * @param {integer} priority (>=1) - increasing the priority causes the rule to be run prior to other rules\n */\n\n\n _createClass(Rule, [{\n key: 'setPriority',\n value: function setPriority(priority) {\n priority = parseInt(priority, 10);\n if (priority <= 0) throw new Error('Priority must be greater than zero');\n this.priority = priority;\n return this;\n }\n\n /**\n * Sets the name of the rule\n * @param {any} name - any truthy input and zero is allowed\n */\n\n }, {\n key: 'setName',\n value: function setName(name) {\n if (!name && name !== 0) {\n throw new Error('Rule \"name\" must be defined');\n }\n this.name = name;\n return this;\n }\n\n /**\n * Sets the conditions to run when evaluating the rule.\n * @param {object} conditions - conditions, root element must be a boolean operator\n */\n\n }, {\n key: 'setConditions',\n value: function setConditions(conditions) {\n if (!conditions.hasOwnProperty('all') && !conditions.hasOwnProperty('any')) {\n throw new Error('\"conditions\" root must contain a single instance of \"all\" or \"any\"');\n }\n this.conditions = new _condition2.default(conditions);\n return this;\n }\n\n /**\n * Sets the event to emit when the conditions evaluate truthy\n * @param {object} event - event to emit\n * @param {string} event.type - event name to emit on\n * @param {string} event.params - parameters to emit as the argument of the event emission\n */\n\n }, {\n key: 'setEvent',\n value: function setEvent(event) {\n if (!event) throw new Error('Rule: setEvent() requires event object');\n if (!event.hasOwnProperty('type')) throw new Error('Rule: setEvent() requires event object with \"type\" property');\n this.event = {\n type: event.type\n };\n if (event.params) this.event.params = event.params;\n return this;\n }\n\n /**\n * Sets the engine to run the rules under\n * @param {object} engine\n * @returns {Rule}\n */\n\n }, {\n key: 'setEngine',\n value: function setEngine(engine) {\n this.engine = engine;\n return this;\n }\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var stringify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var props = {\n conditions: this.conditions.toJSON(false),\n priority: this.priority,\n event: this.event,\n name: this.name\n };\n if (stringify) {\n return JSON.stringify(props);\n }\n return props;\n }\n\n /**\n * Priorizes an array of conditions based on \"priority\"\n * When no explicit priority is provided on the condition itself, the condition's priority is determine by its fact\n * @param {Condition[]} conditions\n * @return {Condition[][]} prioritized two-dimensional array of conditions\n * Each outer array element represents a single priority(integer). Inner array is\n * all conditions with that priority.\n */\n\n }, {\n key: 'prioritizeConditions',\n value: function prioritizeConditions(conditions) {\n var _this2 = this;\n\n var factSets = conditions.reduce(function (sets, condition) {\n // if a priority has been set on this specific condition, honor that first\n // otherwise, use the fact's priority\n var priority = condition.priority;\n if (!priority) {\n var fact = _this2.engine.getFact(condition.fact);\n priority = fact && fact.priority || 1;\n }\n if (!sets[priority]) sets[priority] = [];\n sets[priority].push(condition);\n return sets;\n }, {});\n return Object.keys(factSets).sort(function (a, b) {\n return Number(a) > Number(b) ? -1 : 1; // order highest priority -> lowest\n }).map(function (priority) {\n return factSets[priority];\n });\n }\n\n /**\n * Evaluates the rule, starting with the root boolean operator and recursing down\n * All evaluation is done within the context of an almanac\n * @return {Promise(RuleResult)} rule evaluation result\n */\n\n }, {\n key: 'evaluate',\n value: function evaluate(almanac) {\n var _this3 = this;\n\n var ruleResult = new _ruleResult2.default(this.conditions, this.event, this.priority, this.name);\n\n /**\n * Evaluates the rule conditions\n * @param {Condition} condition - condition to evaluate\n * @return {Promise(true|false)} - resolves with the result of the condition evaluation\n */\n var evaluateCondition = function evaluateCondition(condition) {\n if (condition.isBooleanOperator()) {\n var subConditions = condition[condition.operator];\n var comparisonPromise = void 0;\n if (condition.operator === 'all') {\n comparisonPromise = all(subConditions);\n } else {\n comparisonPromise = any(subConditions);\n }\n // for booleans, rule passing is determined by the all/any result\n return comparisonPromise.then(function (comparisonValue) {\n var passes = comparisonValue === true;\n condition.result = passes;\n return passes;\n });\n } else {\n return condition.evaluate(almanac, _this3.engine.operators).then(function (evaluationResult) {\n var passes = evaluationResult.result;\n condition.factResult = evaluationResult.leftHandSideValue;\n condition.result = passes;\n return passes;\n });\n }\n };\n\n /**\n * Evalutes an array of conditions, using an 'every' or 'some' array operation\n * @param {Condition[]} conditions\n * @param {string(every|some)} array method to call for determining result\n * @return {Promise(boolean)} whether conditions evaluated truthy or falsey based on condition evaluation + method\n */\n var evaluateConditions = function evaluateConditions(conditions, method) {\n if (!Array.isArray(conditions)) conditions = [conditions];\n\n return Promise.all(conditions.map(function (condition) {\n return evaluateCondition(condition);\n })).then(function (conditionResults) {\n (0, _debug2.default)('rule::evaluateConditions results', conditionResults);\n return method.call(conditionResults, function (result) {\n return result === true;\n });\n });\n };\n\n /**\n * Evaluates a set of conditions based on an 'all' or 'any' operator.\n * First, orders the top level conditions based on priority\n * Iterates over each priority set, evaluating each condition\n * If any condition results in the rule to be guaranteed truthy or falsey,\n * it will short-circuit and not bother evaluating any additional rules\n * @param {Condition[]} conditions - conditions to be evaluated\n * @param {string('all'|'any')} operator\n * @return {Promise(boolean)} rule evaluation result\n */\n var prioritizeAndRun = function prioritizeAndRun(conditions, operator) {\n if (conditions.length === 0) {\n return Promise.resolve(true);\n }\n var method = Array.prototype.some;\n if (operator === 'all') {\n method = Array.prototype.every;\n }\n var orderedSets = _this3.prioritizeConditions(conditions);\n var cursor = Promise.resolve();\n // use for() loop over Array.forEach to support IE8 without polyfill\n\n var _loop = function _loop(i) {\n var set = orderedSets[i];\n var stop = false;\n cursor = cursor.then(function (setResult) {\n // after the first set succeeds, don't fire off the remaining promises\n if (operator === 'any' && setResult === true || stop) {\n (0, _debug2.default)('prioritizeAndRun::detected truthy result; skipping remaining conditions');\n stop = true;\n return true;\n }\n\n // after the first set fails, don't fire off the remaining promises\n if (operator === 'all' && setResult === false || stop) {\n (0, _debug2.default)('prioritizeAndRun::detected falsey result; skipping remaining conditions');\n stop = true;\n return false;\n }\n // all conditions passed; proceed with running next set in parallel\n return evaluateConditions(set, method);\n });\n };\n\n for (var i = 0; i < orderedSets.length; i++) {\n _loop(i);\n }\n return cursor;\n };\n\n /**\n * Runs an 'any' boolean operator on an array of conditions\n * @param {Condition[]} conditions to be evaluated\n * @return {Promise(boolean)} condition evaluation result\n */\n var any = function any(conditions) {\n return prioritizeAndRun(conditions, 'any');\n };\n\n /**\n * Runs an 'all' boolean operator on an array of conditions\n * @param {Condition[]} conditions to be evaluated\n * @return {Promise(boolean)} condition evaluation result\n */\n var all = function all(conditions) {\n return prioritizeAndRun(conditions, 'all');\n };\n\n /**\n * Emits based on rule evaluation result, and decorates ruleResult with 'result' property\n * @param {Boolean} result\n */\n var processResult = function processResult(result) {\n ruleResult.setResult(result);\n\n if (result) _this3.emit('success', ruleResult.event, almanac, ruleResult);else _this3.emit('failure', ruleResult.event, almanac, ruleResult);\n return ruleResult;\n };\n\n if (ruleResult.conditions.any) {\n return any(ruleResult.conditions.any).then(function (result) {\n return processResult(result);\n });\n } else {\n return all(ruleResult.conditions.all).then(function (result) {\n return processResult(result);\n });\n }\n }\n }]);\n\n return Rule;\n}(_events.EventEmitter);\n\nexports.default = Rule;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Operator = function () {\n /**\n * Constructor\n * @param {string} name - operator identifier\n * @param {function(factValue, jsonValue)} callback - operator evaluation method\n * @param {function} [factValueValidator] - optional validator for asserting the data type of the fact\n * @returns {Operator} - instance\n */\n function Operator(name, cb, factValueValidator) {\n _classCallCheck(this, Operator);\n\n this.name = String(name);\n if (!name) throw new Error('Missing operator name');\n if (typeof cb !== 'function') throw new Error('Missing operator callback');\n this.cb = cb;\n this.factValueValidator = factValueValidator;\n if (!this.factValueValidator) this.factValueValidator = function () {\n return true;\n };\n }\n\n /**\n * Takes the fact result and compares it to the condition 'value', using the callback\n * @param {mixed} factValue - fact result\n * @param {mixed} jsonValue - \"value\" property of the condition\n * @returns {Boolean} - whether the values pass the operator test\n */\n\n\n _createClass(Operator, [{\n key: 'evaluate',\n value: function evaluate(factValue, jsonValue) {\n return this.factValueValidator(factValue) && this.cb(factValue, jsonValue);\n }\n }]);\n\n return Operator;\n}();\n\nexports.default = Operator;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar UndefinedFactError = exports.UndefinedFactError = function (_Error) {\n _inherits(UndefinedFactError, _Error);\n\n function UndefinedFactError() {\n var _ref;\n\n _classCallCheck(this, UndefinedFactError);\n\n for (var _len = arguments.length, props = Array(_len), _key = 0; _key < _len; _key++) {\n props[_key] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = UndefinedFactError.__proto__ || Object.getPrototypeOf(UndefinedFactError)).call.apply(_ref, [this].concat(props)));\n\n _this.code = 'UNDEFINED_FACT';\n return _this;\n }\n\n return UndefinedFactError;\n}(Error);","'use strict';\nmodule.exports = function(boundThis) {\n var f = this\n , ret\n\n if (arguments.length < 2)\n ret = function() {\n if (this instanceof ret) {\n var ret_ = f.apply(this, arguments)\n return Object(ret_) === ret_\n ? ret_\n : this\n }\n else\n return f.apply(boundThis, arguments)\n }\n else {\n var boundArgs = new Array(arguments.length - 1)\n for (var i = 1; i < arguments.length; i++)\n boundArgs[i - 1] = arguments[i]\n\n ret = function() {\n var boundLen = boundArgs.length\n , args = new Array(boundLen + arguments.length)\n , i\n for (i = 0; i < boundLen; i++)\n args[i] = boundArgs[i]\n for (i = 0; i < arguments.length; i++)\n args[boundLen + i] = arguments[i]\n\n if (this instanceof ret) {\n var ret_ = f.apply(this, args)\n return Object(ret_) === ret_\n ? ret_\n : this\n }\n else\n return f.apply(boundThis, args)\n }\n }\n\n ret.prototype = f.prototype\n return ret\n}\n","'use strict'\n\n/*!\n * imports.\n */\n\nvar bind = Function.prototype.bind || require('fast-bind')\n\n/*!\n * exports.\n */\n\nmodule.exports = curry2\n\n/**\n * Curry a binary function.\n *\n * @param {Function} fn\n * Binary function to curry.\n *\n * @param {Object} [self]\n * Function `this` context.\n *\n * @return {Function|*}\n * If partially applied, return unary function, otherwise, return result of full application.\n */\n\nfunction curry2 (fn, self) {\n var out = function () {\n if (arguments.length === 0) return out\n\n return arguments.length > 1\n ? fn.apply(self, arguments)\n : bind.call(fn, self, arguments[0])\n }\n\n out.uncurry = function uncurry () {\n return fn\n }\n\n return out\n}\n","'use strict';\n\n/*!\n * exports.\n */\n\nmodule.exports = brackets2dots;\n\n/*!\n * regexp patterns.\n */\n\nvar REPLACE_BRACKETS = /\\[([^\\[\\]]+)\\]/g;\nvar LFT_RT_TRIM_DOTS = /^[.]*|[.]*$/g;\n\n/**\n * Convert string with bracket notation to dot property notation.\n *\n * ### Examples:\n *\n * brackets2dots('group[0].section.a.seat[3]')\n * //=> 'group.0.section.a.seat.3'\n *\n * brackets2dots('[0].section.a.seat[3]')\n * //=> '0.section.a.seat.3'\n *\n * brackets2dots('people[*].age')\n * //=> 'people.*.age'\n *\n * @param {String} string\n * original string\n *\n * @return {String}\n * dot/bracket-notation string\n */\n\nfunction brackets2dots(string) {\n return ({}).toString.call(string) == '[object String]'\n ? string.replace(REPLACE_BRACKETS, '.$1').replace(LFT_RT_TRIM_DOTS, '')\n : ''\n}\n","'use strict'\n\nvar toString = Object.prototype.toString\n\n/**\n * Transform dot-delimited strings to array of strings.\n *\n * @param {String} string\n * Dot-delimited string.\n *\n * @return {Array}\n * Array of strings.\n */\n\nfunction dotsplit (string) {\n var idx = -1\n var str = compact(normalize(string).split('.'))\n var end = str.length\n var out = []\n\n while (++idx < end) {\n out.push(todots(str[idx]))\n }\n\n return out\n}\n\n/**\n * Replace escapes with a placeholder.\n *\n * @param {String} string\n * Dot-delimited string.\n *\n * @return {String}\n * Dot-delimited string with placeholders in place of escapes.\n */\n\nfunction normalize (string) {\n return (toString.call(string) === '[object String]' ? string : '').replace(/\\\\\\./g, '\\uffff')\n}\n\n/**\n * Drop empty values from array.\n *\n * @param {Array} array\n * Array of strings.\n *\n * @return {Array}\n * Array of strings (empty values dropped).\n */\n\nfunction compact (arr) {\n var idx = -1\n var end = arr.length\n var out = []\n\n while (++idx < end) {\n if (arr[idx]) out.push(arr[idx])\n }\n\n return out\n}\n\n/**\n * Change placeholder to dots.\n *\n * @param {String} string\n * Dot-delimited string with placeholders.\n *\n * @return {String}\n * Dot-delimited string without placeholders.\n */\n\nfunction todots (string) {\n return string.replace(/\\uffff/g, '.')\n}\n\n/*!\n * exports.\n */\n\nmodule.exports = dotsplit\n","'use strict'\n\nconst curry2 = require('curry2')\nconst dotted = require('brackets2dots')\nconst splits = require('dotsplit.js')\nconst string = Object.prototype.toString\n\nmodule.exports = curry2(selectn)\n\n/**\n * Curried property accessor function that resolves deeply-nested object properties via dot/bracket-notation\n * string path while mitigating `TypeErrors` via friendly and composable API.\n *\n * @param {String|Array} path\n * Dot/bracket-notation string path or array.\n *\n * @param {Object} object\n * Object to access.\n *\n * @return {Function|*|undefined}\n * (1) returns `selectn/1` when partially applied.\n * (2) returns value at path if path exists.\n * (3) returns undefined if path does not exist.\n */\nfunction selectn (path, object) {\n let idx = -1\n const seg = string.call(path) === '[object Array]' ? path : splits(dotted(path))\n const end = seg.length\n let ref = end ? object : undefined\n\n while (++idx < end) {\n if (Object(ref) !== ref) return undefined\n ref = ref[seg[idx]]\n }\n\n return typeof ref === 'function' ? ref() : ref\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _fact = require('./fact');\n\nvar _fact2 = _interopRequireDefault(_fact);\n\nvar _errors = require('./errors');\n\nvar _debug = require('./debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _selectn = require('selectn');\n\nvar _selectn2 = _interopRequireDefault(_selectn);\n\nvar _lodash = require('lodash.isobjectlike');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Fact results lookup\n * Triggers fact computations and saves the results\n * A new almanac is used for every engine run()\n */\nvar Almanac = function () {\n function Almanac(factMap) {\n var runtimeFacts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, Almanac);\n\n this.factMap = new Map(factMap);\n this.factResultsCache = new Map(); // { cacheKey: Promise<factValu> }\n this.allowUndefinedFacts = Boolean(options.allowUndefinedFacts);\n\n for (var factId in runtimeFacts) {\n var fact = void 0;\n if (runtimeFacts[factId] instanceof _fact2.default) {\n fact = runtimeFacts[factId];\n } else {\n fact = new _fact2.default(factId, runtimeFacts[factId]);\n }\n\n this._addConstantFact(fact);\n (0, _debug2.default)('almanac::constructor initialized runtime fact:' + fact.id + ' with ' + fact.value + '<' + _typeof(fact.value) + '>');\n }\n }\n\n /**\n * Retrieve fact by id, raising an exception if it DNE\n * @param {String} factId\n * @return {Fact}\n */\n\n\n _createClass(Almanac, [{\n key: '_getFact',\n value: function _getFact(factId) {\n return this.factMap.get(factId);\n }\n\n /**\n * Registers fact with the almanac\n * @param {[type]} fact [description]\n */\n\n }, {\n key: '_addConstantFact',\n value: function _addConstantFact(fact) {\n this.factMap.set(fact.id, fact);\n this._setFactValue(fact, {}, fact.value);\n }\n\n /**\n * Sets the computed value of a fact\n * @param {Fact} fact\n * @param {Object} params - values for differentiating this fact value from others, used for cache key\n * @param {Mixed} value - computed value\n */\n\n }, {\n key: '_setFactValue',\n value: function _setFactValue(fact, params, value) {\n var cacheKey = fact.getCacheKey(params);\n var factValue = Promise.resolve(value);\n if (cacheKey) {\n this.factResultsCache.set(cacheKey, factValue);\n }\n return factValue;\n }\n\n /**\n * Adds a constant fact during runtime. Can be used mid-run() to add additional information\n * @param {String} fact - fact identifier\n * @param {Mixed} value - constant value of the fact\n */\n\n }, {\n key: 'addRuntimeFact',\n value: function addRuntimeFact(factId, value) {\n var fact = new _fact2.default(factId, value);\n return this._addConstantFact(fact);\n }\n\n /**\n * Returns the value of a fact, based on the given parameters. Utilizes the 'almanac' maintained\n * by the engine, which cache's fact computations based on parameters provided\n * @param {string} factId - fact identifier\n * @param {Object} params - parameters to feed into the fact. By default, these will also be used to compute the cache key\n * @param {String} path - object\n * @return {Promise} a promise which will resolve with the fact computation.\n */\n\n }, {\n key: 'factValue',\n value: function factValue(factId) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n var factValuePromise = void 0;\n var fact = this._getFact(factId);\n if (fact === undefined) {\n if (this.allowUndefinedFacts) {\n return Promise.resolve(undefined);\n } else {\n return Promise.reject(new _errors.UndefinedFactError('Undefined fact: ' + factId));\n }\n }\n if (fact.isConstant()) {\n factValuePromise = Promise.resolve(fact.calculate(params, this));\n } else {\n var cacheKey = fact.getCacheKey(params);\n var cacheVal = cacheKey && this.factResultsCache.get(cacheKey);\n if (cacheVal) {\n factValuePromise = Promise.resolve(cacheVal);\n (0, _debug2.default)('almanac::factValue cache hit for fact:' + factId);\n } else {\n (0, _debug2.default)('almanac::factValue cache miss for fact:' + factId + '; calculating');\n factValuePromise = this._setFactValue(fact, params, fact.calculate(params, this));\n }\n }\n if (path) {\n return factValuePromise.then(function (factValue) {\n if ((0, _lodash2.default)(factValue)) {\n var pathValue = (0, _selectn2.default)(path)(factValue);\n (0, _debug2.default)('condition::evaluate extracting object property ' + path + ', received: ' + pathValue);\n return pathValue;\n } else {\n (0, _debug2.default)('condition::evaluate could not compute object path(' + path + ') of non-object: ' + factValue + ' <' + (typeof factValue === 'undefined' ? 'undefined' : _typeof(factValue)) + '>; continuing with ' + factValue);\n return factValue;\n }\n });\n }\n return factValuePromise;\n }\n }]);\n\n return Almanac;\n}();\n\nexports.default = Almanac;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar SuccessEventFact = function SuccessEventFact() {\n var successTriggers = [];\n return function () {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (params.event) {\n successTriggers.push(params.event);\n }\n return successTriggers;\n };\n};\n\nexports.SuccessEventFact = SuccessEventFact;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _operator = require('./operator');\n\nvar _operator2 = _interopRequireDefault(_operator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Operators = [];\nOperators.push(new _operator2.default('equal', function (a, b) {\n return a === b;\n}));\nOperators.push(new _operator2.default('notEqual', function (a, b) {\n return a !== b;\n}));\nOperators.push(new _operator2.default('in', function (a, b) {\n return b.indexOf(a) > -1;\n}));\nOperators.push(new _operator2.default('notIn', function (a, b) {\n return b.indexOf(a) === -1;\n}));\n\nOperators.push(new _operator2.default('contains', function (a, b) {\n return a.indexOf(b) > -1;\n}, Array.isArray));\nOperators.push(new _operator2.default('doesNotContain', function (a, b) {\n return a.indexOf(b) === -1;\n}, Array.isArray));\n\nfunction numberValidator(factValue) {\n return Number.parseFloat(factValue).toString() !== 'NaN';\n}\nOperators.push(new _operator2.default('lessThan', function (a, b) {\n return a < b;\n}, numberValidator));\nOperators.push(new _operator2.default('lessThanInclusive', function (a, b) {\n return a <= b;\n}, numberValidator));\nOperators.push(new _operator2.default('greaterThan', function (a, b) {\n return a > b;\n}, numberValidator));\nOperators.push(new _operator2.default('greaterThanInclusive', function (a, b) {\n return a >= b;\n}, numberValidator));\n\nexports.default = Operators;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FINISHED = exports.RUNNING = exports.READY = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _fact = require('./fact');\n\nvar _fact2 = _interopRequireDefault(_fact);\n\nvar _rule = require('./rule');\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _operator = require('./operator');\n\nvar _operator2 = _interopRequireDefault(_operator);\n\nvar _almanac = require('./almanac');\n\nvar _almanac2 = _interopRequireDefault(_almanac);\n\nvar _events = require('events');\n\nvar _engineFacts = require('./engine-facts');\n\nvar _engineDefaultOperators = require('./engine-default-operators');\n\nvar _engineDefaultOperators2 = _interopRequireDefault(_engineDefaultOperators);\n\nvar _debug = require('./debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar READY = exports.READY = 'READY';\nvar RUNNING = exports.RUNNING = 'RUNNING';\nvar FINISHED = exports.FINISHED = 'FINISHED';\n\nvar Engine = function (_EventEmitter) {\n _inherits(Engine, _EventEmitter);\n\n /**\n * Returns a new Engine instance\n * @param {Rule[]} rules - array of rules to initialize with\n */\n function Engine() {\n var rules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Engine);\n\n var _this = _possibleConstructorReturn(this, (Engine.__proto__ || Object.getPrototypeOf(Engine)).call(this));\n\n _this.rules = [];\n _this.allowUndefinedFacts = options.allowUndefinedFacts || false;\n _this.operators = new Map();\n _this.facts = new Map();\n _this.status = READY;\n rules.map(function (r) {\n return _this.addRule(r);\n });\n _engineDefaultOperators2.default.map(function (o) {\n return _this.addOperator(o);\n });\n return _this;\n }\n\n /**\n * Add a rule definition to the engine\n * @param {object|Rule} properties - rule definition. can be JSON representation, or instance of Rule\n * @param {integer} properties.priority (>1) - higher runs sooner.\n * @param {Object} properties.event - event to fire when rule evaluates as successful\n * @param {string} properties.event.type - name of event to emit\n * @param {string} properties.event.params - parameters to pass to the event listener\n * @param {Object} properties.conditions - conditions to evaluate when processing this rule\n */\n\n\n _createClass(Engine, [{\n key: 'addRule',\n value: function addRule(properties) {\n if (!properties) throw new Error('Engine: addRule() requires options');\n if (!properties.hasOwnProperty('conditions')) throw new Error('Engine: addRule() argument requires \"conditions\" property');\n if (!properties.hasOwnProperty('event')) throw new Error('Engine: addRule() argument requires \"event\" property');\n\n var rule = void 0;\n if (properties instanceof _rule2.default) {\n rule = properties;\n } else {\n rule = new _rule2.default(properties);\n }\n rule.setEngine(this);\n\n this.rules.push(rule);\n this.prioritizedRules = null;\n return this;\n }\n\n /**\n * Remove a rule from the engine\n * @param {object|Rule} rule - rule definition. Must be a instance of Rule\n */\n\n }, {\n key: 'removeRule',\n value: function removeRule(rule) {\n if (rule instanceof _rule2.default === false) throw new Error('Engine: removeRule() rule must be a instance of Rule');\n\n var index = this.rules.indexOf(rule);\n if (index === -1) return false;\n this.prioritizedRules = null;\n return Boolean(this.rules.splice(index, 1).length);\n }\n\n /**\n * Add a custom operator definition\n * @param {string} operatorOrName - operator identifier within the condition; i.e. instead of 'equals', 'greaterThan', etc\n * @param {function(factValue, jsonValue)} callback - the method to execute when the operator is encountered.\n */\n\n }, {\n key: 'addOperator',\n value: function addOperator(operatorOrName, cb) {\n var operator = void 0;\n if (operatorOrName instanceof _operator2.default) {\n operator = operatorOrName;\n } else {\n operator = new _operator2.default(operatorOrName, cb);\n }\n (0, _debug2.default)('engine::addOperator name:' + operator.name);\n this.operators.set(operator.name, operator);\n }\n\n /**\n * Remove a custom operator definition\n * @param {string} operatorOrName - operator identifier within the condition; i.e. instead of 'equals', 'greaterThan', etc\n * @param {function(factValue, jsonValue)} callback - the method to execute when the operator is encountered.\n */\n\n }, {\n key: 'removeOperator',\n value: function removeOperator(operatorOrName) {\n var operatorName = void 0;\n if (operatorOrName instanceof _operator2.default) {\n operatorName = operatorOrName.name;\n } else {\n operatorName = operatorOrName;\n }\n\n return this.operators.delete(operatorName);\n }\n\n /**\n * Add a fact definition to the engine. Facts are called by rules as they are evaluated.\n * @param {object|Fact} id - fact identifier or instance of Fact\n * @param {function} definitionFunc - function to be called when computing the fact value for a given rule\n * @param {Object} options - options to initialize the fact with. used when \"id\" is not a Fact instance\n */\n\n }, {\n key: 'addFact',\n value: function addFact(id, valueOrMethod, options) {\n var factId = id;\n var fact = void 0;\n if (id instanceof _fact2.default) {\n factId = id.id;\n fact = id;\n } else {\n fact = new _fact2.default(id, valueOrMethod, options);\n }\n (0, _debug2.default)('engine::addFact id:' + factId);\n this.facts.set(factId, fact);\n return this;\n }\n\n /**\n * Add a fact definition to the engine. Facts are called by rules as they are evaluated.\n * @param {object|Fact} id - fact identifier or instance of Fact\n */\n\n }, {\n key: 'removeFact',\n value: function removeFact(factOrId) {\n var factId = void 0;\n if (!(factOrId instanceof _fact2.default)) {\n factId = factOrId;\n } else {\n factId = factOrId.id;\n }\n\n return this.facts.delete(factId);\n }\n\n /**\n * Iterates over the engine rules, organizing them by highest -> lowest priority\n * @return {Rule[][]} two dimensional array of Rules.\n * Each outer array element represents a single priority(integer). Inner array is\n * all rules with that priority.\n */\n\n }, {\n key: 'prioritizeRules',\n value: function prioritizeRules() {\n if (!this.prioritizedRules) {\n var ruleSets = this.rules.reduce(function (sets, rule) {\n var priority = rule.priority;\n if (!sets[priority]) sets[priority] = [];\n sets[priority].push(rule);\n return sets;\n }, {});\n this.prioritizedRules = Object.keys(ruleSets).sort(function (a, b) {\n return Number(a) > Number(b) ? -1 : 1; // order highest priority -> lowest\n }).map(function (priority) {\n return ruleSets[priority];\n });\n }\n return this.prioritizedRules;\n }\n\n /**\n * Stops the rules engine from running the next priority set of Rules. All remaining rules will be resolved as undefined,\n * and no further events emitted. Since rules of the same priority are evaluated in parallel(not series), other rules of\n * the same priority may still emit events, even though the engine is in a \"finished\" state.\n * @return {Engine}\n */\n\n }, {\n key: 'stop',\n value: function stop() {\n this.status = FINISHED;\n return this;\n }\n\n /**\n * Returns a fact by fact-id\n * @param {string} factId - fact identifier\n * @return {Fact} fact instance, or undefined if no such fact exists\n */\n\n }, {\n key: 'getFact',\n value: function getFact(factId) {\n return this.facts.get(factId);\n }\n\n /**\n * Runs an array of rules\n * @param {Rule[]} array of rules to be evaluated\n * @return {Promise} resolves when all rules in the array have been evaluated\n */\n\n }, {\n key: 'evaluateRules',\n value: function evaluateRules(ruleArray, almanac) {\n var _this2 = this;\n\n return Promise.all(ruleArray.map(function (rule) {\n if (_this2.status !== RUNNING) {\n (0, _debug2.default)('engine::run status:' + _this2.status + '; skipping remaining rules');\n return;\n }\n return rule.evaluate(almanac).then(function (ruleResult) {\n (0, _debug2.default)('engine::run ruleResult:' + ruleResult.result);\n if (ruleResult.result) {\n _this2.emit('success', rule.event, almanac, ruleResult);\n _this2.emit(rule.event.type, rule.event.params, almanac, ruleResult);\n almanac.factValue('success-events', { event: rule.event });\n } else {\n _this2.emit('failure', rule.event, almanac, ruleResult);\n }\n });\n }));\n }\n\n /**\n * Runs the rules engine\n * @param {Object} runtimeFacts - fact values known at runtime\n * @param {Object} runOptions - run options\n * @return {Promise} resolves when the engine has completed running\n */\n\n }, {\n key: 'run',\n value: function run() {\n var _this3 = this;\n\n var runtimeFacts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n (0, _debug2.default)('engine::run started');\n (0, _debug2.default)('engine::run runtimeFacts:', runtimeFacts);\n runtimeFacts['success-events'] = new _fact2.default('success-events', (0, _engineFacts.SuccessEventFact)(), { cache: false });\n this.status = RUNNING;\n var almanac = new _almanac2.default(this.facts, runtimeFacts, { allowUndefinedFacts: this.allowUndefinedFacts });\n var orderedSets = this.prioritizeRules();\n var cursor = Promise.resolve();\n // for each rule set, evaluate in parallel,\n // before proceeding to the next priority set.\n return new Promise(function (resolve, reject) {\n orderedSets.map(function (set) {\n cursor = cursor.then(function () {\n return _this3.evaluateRules(set, almanac);\n }).catch(reject);\n return cursor;\n });\n cursor.then(function () {\n _this3.status = FINISHED;\n (0, _debug2.default)('engine::run completed');\n return almanac.factValue('success-events');\n }).then(function (events) {\n resolve({\n events: events,\n almanac: almanac\n });\n }).catch(reject);\n });\n }\n }]);\n\n return Engine;\n}(_events.EventEmitter);\n\nexports.default = Engine;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Engine = exports.Operator = exports.Rule = exports.Fact = undefined;\n\nexports.default = function (rules, options) {\n return new _engine2.default(rules, options);\n};\n\nvar _engine = require('./engine');\n\nvar _engine2 = _interopRequireDefault(_engine);\n\nvar _fact = require('./fact');\n\nvar _fact2 = _interopRequireDefault(_fact);\n\nvar _rule = require('./rule');\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _operator = require('./operator');\n\nvar _operator2 = _interopRequireDefault(_operator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.Fact = _fact2.default;\nexports.Rule = _rule2.default;\nexports.Operator = _operator2.default;\nexports.Engine = _engine2.default;","'use strict';\n\nmodule.exports = require('./json-rules-engine');","function sha256(ascii) {\n function rightRotate(value, amount) {\n return (value >>> amount) | (value << (32 - amount));\n }\n const mathPow = Math.pow;\n const maxWord = mathPow(2, 32);\n const lengthProperty = \"length\";\n let i, j; // Used as a counter across the whole file\n let result = \"\";\n const words = [];\n const asciiBitLength = ascii[lengthProperty] * 8;\n //* caching results is optional - remove/add slash from front of this line to toggle\n // Initial hash value: first 32 bits of the fractional parts of the square roots of the first 8 primes\n // (we actually calculate the first 64, but extra values are just ignored)\n // @ts-ignore\n let hash = (sha256.h = sha256.h || []);\n // Round constants: first 32 bits of the fractional parts of the cube roots of the first 64 primes\n // @ts-ignore\n const k = (sha256.k = sha256.k || []);\n let primeCounter = k[lengthProperty];\n /*/\n var hash = [], k = [];\n var primeCounter = 0;\n //*/\n const isComposite = {};\n for (let candidate = 2; primeCounter < 64; candidate++) {\n // @ts-ignore\n if (!isComposite[candidate]) {\n for (i = 0; i < 313; i += candidate) {\n // @ts-ignore\n isComposite[i] = candidate;\n }\n hash[primeCounter] = (mathPow(candidate, 0.5) * maxWord) | 0;\n k[primeCounter++] = (mathPow(candidate, 1 / 3) * maxWord) | 0;\n }\n }\n ascii += \"\\x80\"; // Append Ƈ' bit (plus zero padding)\n while ((ascii[lengthProperty] % 64) - 56)\n ascii += \"\\x00\"; // More zero padding\n for (i = 0; i < ascii[lengthProperty]; i++) {\n j = ascii.charCodeAt(i);\n if (j >> 8)\n return; // ASCII check: only accept characters in range 0-255\n words[i >> 2] |= j << (((3 - i) % 4) * 8);\n }\n words[words[lengthProperty]] = (asciiBitLength / maxWord) | 0;\n words[words[lengthProperty]] = asciiBitLength;\n // process each chunk\n for (j = 0; j < words[lengthProperty];) {\n const w = words.slice(j, (j += 16)); // The message is expanded into 64 words as part of the iteration\n const oldHash = hash;\n // This is now the undefinedworking hash\", often labelled as variables a...g\n // (we have to truncate as well, otherwise extra entries at the end accumulate\n hash = hash.slice(0, 8);\n for (i = 0; i < 64; i++) {\n const i2 = i + j;\n // Expand the message into 64 words\n // Used below if\n const w15 = w[i - 15], w2 = w[i - 2];\n // Iterate\n const a = hash[0], e = hash[4];\n const temp1 = hash[7] +\n (rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25)) + // S1\n ((e & hash[5]) ^ (~e & hash[6])) + // ch\n k[i] +\n // Expand the message schedule if needed\n (w[i] =\n i < 16\n ? w[i]\n : (w[i - 16] +\n (rightRotate(w15, 7) ^ rightRotate(w15, 18) ^ (w15 >>> 3)) + // s0\n w[i - 7] +\n (rightRotate(w2, 17) ^ rightRotate(w2, 19) ^ (w2 >>> 10))) | // s1\n 0);\n // This is only used once, so *could* be moved below, but it only saves 4 bytes and makes things unreadble\n const temp2 = (rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22)) + // S0\n ((a & hash[1]) ^ (a & hash[2]) ^ (hash[1] & hash[2])); // maj\n hash = [(temp1 + temp2) | 0].concat(hash); // We don't bother trimming off the extra ones, they're harmless as long as we're truncating when we do the slice()\n hash[4] = (hash[4] + temp1) | 0;\n }\n for (i = 0; i < 8; i++) {\n hash[i] = (hash[i] + oldHash[i]) | 0;\n }\n }\n for (i = 0; i < 8; i++) {\n for (j = 3; j + 1; j--) {\n const b = (hash[i] >> (j * 8)) & 255;\n result += (b < 16 ? 0 : \"\") + b.toString(16);\n }\n }\n return result;\n}\nfunction createHash(data) {\n const hash = sha256(data);\n return [\n hash?.substring(0, 8),\n hash?.substring(8, 12),\n hash?.substring(12, 16),\n hash?.substring(16, 20),\n hash?.substring(20, 32),\n ].join(\"-\");\n}\n/**\n * Generates a UUID from the user data, such as user-agent and IP Address + Salt\n * The salt is generated on the currante date + a Secret from the StoreFront,\n * So this UUID will be regenerated every day.\n *\n * We can never use this id to trace back users for GDPR compliance.\n *\n * @param data\n * @param secret\n */\nexport function getPacklyticsId(data, secret) {\n const currentDate = new Date();\n const formattedDate = currentDate.toLocaleDateString(\"en-US\");\n const salt = sha256(formattedDate + secret);\n return createHash(data + salt);\n}\n","export type Options = {\n /**\n * A validate callback that is called for each `locale`. If the `locale` is valid, return the `locale` as a string.\n * Otherwise return `undefined`, `null`, or an empty Array.\n * Should the callback throw an error, the error will be caught and the `locale` will be ignored.\n */\n validate?: (locale: string) => string | string[] | null | undefined;\n\n /**\n * If set to `true`, the wildcard locale `*` will be returned in the array.\n * If set to `false`, the wildcard locale `*` will be ignored.\n * Defaults to `true`.\n */\n ignoreWildcard?: boolean;\n};\n\nconst defaultValidate = (locale: string) => locale;\n\nexport const parseAcceptLanguage = (\n /** The value from the `Accept-Language` header.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language\n */\n languageHeaderValue: string | null | undefined,\n options: Options = {}\n): string[] => {\n if (!languageHeaderValue) return [];\n const { ignoreWildcard = true, validate = defaultValidate } = options;\n\n return languageHeaderValue\n .split(',')\n .map((lang): [number, string] => {\n const [locale, q = 'q=1'] = lang.split(';');\n const trimmedLocale = locale.trim();\n const numQ = Number(q.replace(/q ?=/, ''));\n if (isNaN(numQ)) return [0, trimmedLocale];\n return [numQ, trimmedLocale];\n })\n .sort(([q1], [q2]) => q2 - q1)\n .flatMap(([_, locale]) => {\n if (locale === '*' && ignoreWildcard) return [];\n try {\n return validate(locale) || [];\n // return Intl.DateTimeFormat.supportedLocalesOf(locale);\n } catch {\n return [];\n }\n });\n};\n","export function getHeaders(requestOrHeaders) {\n if (requestOrHeaders instanceof Request) {\n return requestOrHeaders.headers;\n }\n return requestOrHeaders;\n}\n","import { parseAcceptLanguage } from \"intl-parse-accept-language\";\nimport { getHeaders } from \"./get-headers.js\";\nexport function getClientLocales(requestOrHeaders) {\n let headers = getHeaders(requestOrHeaders);\n let acceptLanguage = headers.get(\"Accept-Language\");\n // if the header is not defined, return undefined\n if (!acceptLanguage)\n return undefined;\n let locales = parseAcceptLanguage(acceptLanguage, {\n validate: Intl.DateTimeFormat.supportedLocalesOf,\n ignoreWildcard: true,\n });\n // if there are no locales found, return undefined\n if (locales.length === 0)\n return undefined;\n // if there are multiple locales, return the array\n return locales;\n}\n","// Generic list of potential sensitive payload data\nexport const sanitizePayload = (data) => {\n let dataStr = JSON.stringify(data);\n const sensitiveFields = [\n \"username\",\n \"user\",\n \"user_id\",\n \"userid\",\n \"password\",\n \"pass\",\n \"pin\",\n \"passcode\",\n \"token\",\n \"api_token\",\n \"email\",\n \"address\",\n \"phone\",\n \"sex\",\n \"gender\",\n \"order\",\n \"order_id\",\n \"orderid\",\n \"payment\",\n \"credit_card\",\n ];\n sensitiveFields.forEach((field) => {\n dataStr = dataStr.replaceAll(new RegExp(`(\"${field}\"):(\".+?\"|\\\\d+)`, \"mgi\"), '$1:\"********\"');\n });\n return dataStr;\n};\n","import { sanitizePayload } from \"./sanatize-payload\";\nlet metadata = null;\nconst getPacklyticsMetadata = async () => {\n if (metadata)\n return;\n try {\n const response = await fetch(\"https://cdn.packlytics.packdigital.com/metadata.json\", {\n headers: {\n \"User-Agent\": \"packlytics-js\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n });\n if (response.ok) {\n metadata = await response.json();\n }\n else {\n console.error(\"Error getting Packlytics metadata:\", response.statusText);\n }\n }\n catch (error) {\n // @ts-ignore\n console.error(\"Error getting Packlytics metadata:\", error.message);\n }\n};\nexport const sendEvent = (storefrontId, sessionId) => {\n return async (action, eventPayload) => {\n const sanitizedEventPayload = sanitizePayload({\n ...eventPayload,\n });\n await getPacklyticsMetadata();\n if (!metadata) {\n console.warn(\"Pack event not sent: packlytics medatada is missing\");\n return;\n }\n // implement localization and add EU\n const analyticsData = metadata[\"us\"] || metadata[\"default\"];\n if (!analyticsData.token) {\n console.warn(\"Pack event not sent: api token is missing\");\n return;\n }\n const dataSourceName = metadata[\"dataSourceName\"] || \"analytics_events\";\n const endpointUrl = `${analyticsData.endpoint}/${analyticsData.version}/events?name=${dataSourceName}`;\n // qualified event data with payload and session id\n const eventData = {\n timestamp: new Date().toISOString(),\n action,\n version: \"1\",\n storefront_id: storefrontId || \"unknown\",\n session_id: sessionId,\n payload: sanitizedEventPayload,\n };\n return fetch(endpointUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${analyticsData.token}`,\n },\n body: JSON.stringify(eventData),\n });\n };\n};\n","import { sendEvent } from \"./send-event\";\nexport const trackPageHit = (storefrontId, sessionId) => {\n return (eventPayload = {}) => {\n return sendEvent(storefrontId, sessionId)(\"page_hit\", eventPayload);\n };\n};\n","import parser from \"ua-parser-js\";\nexport function getDevice(userAgent) {\n const userAgentData = parser(userAgent);\n return {\n deviceType: userAgentData.device.type || \"desktop\",\n deviceModel: userAgentData.device.model || \"unknown\",\n deviceVendor: userAgentData.device.vendor || \"unknown\",\n os: userAgentData.os.name || \"unknown\",\n osVersion: userAgentData.os.version || \"unknown\",\n browser: userAgentData.browser.name || \"unknown\",\n browserVersion: userAgentData.browser.version || \"unknown\",\n engine: userAgentData.engine.name || \"unknown\",\n engineVersion: userAgentData.engine.version || \"unknown\",\n cpu: userAgentData.cpu.architecture || \"unknown\",\n };\n}\n","import { getPacklyticsId } from \"./utils/get-packlytics-id\";\nimport { getClientLocales } from \"./utils/get-client-locales\";\nimport { trackPageHit } from \"./utils/page-hit\";\nimport { getDevice } from \"./utils/get-client-device\";\nimport { getStorefrontHeaders } from \"@shopify/remix-oxygen\";\nimport { getClientLocation } from \"./utils/get-client-location\";\nexport async function sendEvent(request, session, params) {\n if (process.env.NODE_ENV === \"development\") {\n return;\n }\n // Preview enabled\n if (!!session.get(\"previewEnabled\")) {\n return;\n }\n const payload = await request.json();\n const url = new URL(request.url);\n const ipaddress = getStorefrontHeaders(request)[\"buyerIp\"] || \"\";\n const dataToHash = `${request.headers.get(\"user-agent\")}${ipaddress}${url.hostname}`;\n const packlyticsId = getPacklyticsId(dataToHash, params.sessionSecret);\n const locale = getClientLocales(request) || [\"en-US\"];\n const location = getClientLocation(payload.locale || locale[0]);\n return trackPageHit(params.storefrontId, packlyticsId)({\n \"pack-session-id\": session.id, // This session ID is saved on the __pack cookie\n \"user-agent\": payload.userAgent || request.headers.get(\"user-agent\") || \"\",\n pathname: payload.pathname,\n query: payload.query,\n screen: payload.screen,\n referrer: payload.referrer,\n hostname: payload.hostname,\n ipaddress: ipaddress,\n userTimeZone: payload.userTimeZone,\n language: payload.language || getClientLocales(request) || \"\",\n locale: payload.locale || locale[0],\n location: location,\n connection: payload.connection || request.headers.get(\"connection\") || \"\",\n deviceCategory: payload.deviceCategory || \"\",\n href: payload.href || request.url,\n ...getDevice(request.headers.get(\"user-agent\") || \"\"),\n });\n}\nexport async function packlytics(pack, request, next) {\n const url = new URL(request.url);\n if (url.pathname.endsWith(\"/pack/track\") && request.method === \"POST\") {\n try {\n await sendEvent(request, pack.session, {\n storefrontId: pack.getPackSessionData().storeId,\n sessionSecret: pack.session.secret,\n });\n }\n catch (err) { }\n return new Response(JSON.stringify({ response: \"ok\" }));\n }\n return next();\n}\n","export function getClientLocation(locale) {\n const localeSplit = locale.split(\"-\");\n return localeSplit.length > 1 ? localeSplit[1].toLowerCase() : \"\";\n}\n","import { Pack } from \"./create-pack-client\";\nimport { packlytics } from \"@pack/packlytics\";\n\nexport async function handleRequest(\n pack: Pack,\n request: Request,\n handleRequest: (request: Request) => Promise<Response>\n): Promise<Response> {\n const packHandleResponse = await pack.handleRequest(request);\n\n const response = await packlytics(pack, request, () => {\n return handleRequest(request);\n });\n\n packHandleResponse(response);\n\n response.headers.append(\"powered-by\", \"Shopify, Hydrogen + Pack Digital\");\n\n // Always commit main session\n response.headers.append(\"Set-Cookie\", await pack.session.commit());\n\n // Only commit test session if there are actual changes\n // This reduces the number of Set-Cookie headers and potential race conditions\n if (pack.testSession.hasChanges()) {\n response.headers.append(\"Set-Cookie\", await pack.testSession.commit());\n }\n\n return response;\n}\n","import { useEffect } from \"react\";\nimport { stringify } from \"worktop/cookie\";\nimport { PACK_COOKIE_MAX_AGE, PACK_USER_CONSENT_COOKIE_ID } from \"../constants\";\n\ntype UsePackCookiesOptions = {\n /**\n * If set to `false`, Shopify cookies will be removed.\n * If set to `true`, Shopify unique user token cookie will have cookie expiry of 1 year.\n * Defaults to false.\n **/\n hasUserConsent?: boolean;\n /**\n * The domain scope of the cookie. Defaults to empty string.\n **/\n domain?: string;\n};\n\nexport function usePackCookies(options?: UsePackCookiesOptions): void {\n const { hasUserConsent = true, domain = \"\" } = options || {};\n\n useEffect(() => {\n setCookie(\n PACK_USER_CONSENT_COOKIE_ID,\n hasUserConsent ? \"true\" : \"false\",\n PACK_COOKIE_MAX_AGE,\n domain,\n );\n }, [hasUserConsent]);\n}\n\nfunction setCookie(\n name: string,\n value: string,\n maxage: number,\n domain: string,\n): void {\n document.cookie = stringify(name, value, {\n maxage,\n domain,\n samesite: \"Lax\",\n path: \"/\",\n });\n}\n","// src/cookie.ts\nvar g = new Set([\n \"domain\",\n \"path\",\n \"max-age\",\n \"expires\",\n \"samesite\",\n \"secure\",\n \"httponly\"\n]);\nfunction u(a) {\n let r = {}, e, t, n = 0, m = a.split(/;\\s*/g), s, i;\n for (; n < m.length; n++)\n if (t = m[n], e = t.indexOf(\"=\"), ~e) {\n if (s = t.substring(0, e++).trim(), i = t.substring(e).trim(), i[0] === '\"' && (i = i.substring(1, i.length - 1)), ~i.indexOf(\"%\"))\n try {\n i = decodeURIComponent(i);\n } catch (f) {\n }\n g.has(t = s.toLowerCase()) ? t === \"expires\" ? r.expires = new Date(i) : t === \"max-age\" ? r.maxage = +i : r[t] = i : r[s] = i;\n } else\n (s = t.trim().toLowerCase()) && (s === \"httponly\" || s === \"secure\") && (r[s] = !0);\n return r;\n}\nfunction l(a, r, e = {}) {\n let t = a + \"=\" + encodeURIComponent(r);\n return e.expires && (t += \"; Expires=\" + new Date(e.expires).toUTCString()), e.maxage != null && e.maxage >= 0 && (t += \"; Max-Age=\" + (e.maxage | 0)), e.domain && (t += \"; Domain=\" + e.domain), e.path && (t += \"; Path=\" + e.path), e.samesite && (t += \"; SameSite=\" + e.samesite), (e.secure || e.samesite === \"None\") && (t += \"; Secure\"), e.httponly && (t += \"; HttpOnly\"), t;\n}\nexport {\n u as parse,\n l as stringify\n};\n","export const PACK_COOKIE_ID = \"__pack\";\nexport const PACK_USER_CONSENT_COOKIE_ID = \"__pack_user_consent\";\nexport const PACK_TEST_COOKIE_ID = \"__pack_test\";\nexport const PACK_COOKIE_MAX_AGE = 60 * 60 * 24 * 360; // 1 year\n","import {\n createCookie,\n createCookieSessionStorage,\n type Session,\n type SessionStorage,\n} from \"@shopify/remix-oxygen\";\nimport { PACK_COOKIE_ID, PACK_COOKIE_MAX_AGE } from \"../constants\";\nimport { buildRandomUUID, hasUserConsent } from \"./cookies-utils\";\n\nfunction isSafari(userAgent: string | null): boolean {\n if (!userAgent) return false;\n\n // Check for iOS devices (iPhone/iPad) or macOS Safari\n return (\n /Safari\\//.test(userAgent) &&\n !/Chrome\\//.test(userAgent) &&\n !/Chromium\\//.test(userAgent) &&\n !/Edg\\//.test(userAgent) &&\n !/Firefox\\//.test(userAgent)\n );\n}\n\nexport class PackSession {\n readonly id: string;\n\n readonly secret: string;\n\n readonly #session: Session;\n\n #sessionStorage: SessionStorage;\n\n constructor(\n id: string,\n secret: string,\n sessionStorage: SessionStorage,\n session: Session\n ) {\n this.id = id;\n this.secret = secret;\n this.#session = session;\n this.#sessionStorage = sessionStorage;\n }\n\n static async init(request: Request, secrets: string[]): Promise<PackSession> {\n const userAgent = request.headers.get(\"User-Agent\");\n\n const storage = createCookieSessionStorage({\n cookie: createCookie(PACK_COOKIE_ID, {\n secure:\n isSafari(userAgent) && process.env.NODE_ENV === \"development\"\n ? false\n : true,\n secrets,\n sameSite: \"none\",\n maxAge: PACK_COOKIE_MAX_AGE,\n }),\n });\n\n const session = await storage.getSession(request.headers.get(\"Cookie\"));\n\n let sessionId = session.get(\"session_id\");\n\n if (!sessionId || !hasUserConsent(request)) {\n sessionId = buildRandomUUID();\n session.set(\"session_id\", sessionId);\n }\n\n return new this(sessionId, secrets[0], storage, session);\n }\n\n has(key: string): boolean {\n return this.#session.has(key);\n }\n\n get(key: string) {\n return this.#session.get(key);\n }\n\n destroy(): Promise<string> {\n for (const key of Object.keys(this.#session.data)) {\n this.#session.unset(key);\n }\n\n return this.#sessionStorage.destroySession(this.#session);\n }\n\n set(key: string, value: any): void {\n this.#session.set(key, value);\n }\n\n commit(): Promise<string> {\n return this.#sessionStorage.commitSession(this.#session);\n }\n}\n","import { PACK_USER_CONSENT_COOKIE_ID } from \"../constants\";\n\nimport cookie from \"cookie\";\n\nconst tokenHash = \"xxxx-4xxx-xxxx-xxxxxxxxxxxx\";\n\nexport function hasUserConsent(request: Request) {\n const cookies = cookie.parse(request.headers.get(\"Cookie\") as string);\n\n return cookies[PACK_USER_CONSENT_COOKIE_ID]\n ? cookies[PACK_USER_CONSENT_COOKIE_ID] === \"true\"\n : true;\n}\n\n/**\n * This will generate a random UUID\n * This is not based on user data,\n * This is based on a random number generator using crypto or math.random\n *\n * This UUID is used to generate a session ID for the session cookie\n *\n * We can never use this id to trace back users for GDPR compliance.\n *\n */\nexport function buildRandomUUID(): string {\n let hash = \"\";\n\n try {\n const crypto: Crypto = window.crypto;\n const randomValuesArray = new Uint16Array(31);\n crypto.getRandomValues(randomValuesArray);\n\n // Generate a strong UUID\n let i = 0;\n hash = tokenHash.replace(/[x]/g, (c: string): string => {\n const r = randomValuesArray[i] % 16;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n i++;\n return v.toString(16);\n });\n } catch (err) {\n // crypto not available, generate weak UUID\n hash = tokenHash.replace(/[x]/g, (c: string): string => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n return `${hexTime()}-${hash}`;\n}\n\nfunction hexTime(): string {\n // 32 bit representations of new Date().getTime() and performance.now()\n let dateNumber = 0;\n let perfNumber = 0;\n\n // Result of zero-fill right shift is always positive\n dateNumber = new Date().getTime() >>> 0;\n\n try {\n perfNumber = performance.now() >>> 0;\n } catch (err) {\n perfNumber = 0;\n }\n\n const output = Math.abs(dateNumber + perfNumber)\n .toString(16)\n .toLowerCase();\n\n // Ensure the output is exactly 8 characters\n return output?.substring(0, 8).padStart(8, \"0\");\n}\n","import {\n createCookie,\n createCookieSessionStorage,\n type Session,\n type SessionStorage,\n} from \"@shopify/remix-oxygen\";\nimport { Test } from \"../tests/test\";\nimport { PACK_COOKIE_MAX_AGE, PACK_TEST_COOKIE_ID } from \"../constants\";\nimport createDebug from \"debug\";\n\nconst debug = createDebug(\"pack:ab-testing:test-session\");\n\nfunction isSafari(userAgent: string | null): boolean {\n if (!userAgent) return false;\n\n return (\n /Safari\\//.test(userAgent) &&\n !/Chrome\\//.test(userAgent) &&\n !/Chromium\\//.test(userAgent) &&\n !/Edg\\//.test(userAgent) &&\n !/Firefox\\//.test(userAgent)\n );\n}\n\nexport class PackTestSession {\n readonly id: string;\n readonly #session: Session;\n #sessionStorage: SessionStorage;\n #isDirty: boolean = false;\n #initialData: { \n test_data?: Test; \n test_expire_at?: string;\n test_rules_cache?: any[];\n test_rules_cache_timestamp?: number;\n } = {};\n\n constructor(id: string, sessionStorage: SessionStorage, session: Session) {\n this.id = id;\n this.#session = session;\n this.#sessionStorage = sessionStorage;\n\n // Store initial state to track changes\n this.#initialData = {\n test_data: this.#session.get(\"test_data\"),\n test_expire_at: this.#session.get(\"test_expire_at\"),\n test_rules_cache: this.#session.get(\"test_rules_cache\"),\n test_rules_cache_timestamp: this.#session.get(\"test_rules_cache_timestamp\"),\n };\n }\n\n static async init(\n request: Request,\n secrets: string[]\n ): Promise<PackTestSession> {\n const userAgent = request.headers.get(\"User-Agent\");\n debug(\"[PackTestSession.init] Initializing test session\", {\n hasSecrets: secrets.length > 0,\n userAgent: userAgent?.substring(0, 50),\n });\n\n const storage = createCookieSessionStorage({\n cookie: createCookie(PACK_TEST_COOKIE_ID, {\n secure:\n isSafari(userAgent) && process.env.NODE_ENV === \"development\"\n ? false\n : true,\n secrets,\n sameSite: \"lax\",\n maxAge: PACK_COOKIE_MAX_AGE,\n path: \"/\",\n }),\n });\n\n const session = await storage.getSession(request.headers.get(\"Cookie\"));\n let sessionId = session.get(\"test_session_id\");\n\n if (!sessionId) {\n sessionId = crypto.randomUUID();\n session.set(\"test_session_id\", sessionId);\n debug(\"[PackTestSession.init] Generated new session ID\", { sessionId });\n } else {\n debug(\"[PackTestSession.init] Using existing session ID\", { sessionId });\n }\n\n return new this(sessionId, storage, session);\n }\n\n getTestData(): Test | undefined {\n const testData = this.#session.get(\"test_data\");\n debug('[getTestData] Called', {\n sessionId: this.id,\n hasTestData: !!testData,\n hasIsFirstExposure: testData && 'isFirstExposure' in testData,\n isFirstExposure: testData ? (testData as any).isFirstExposure : undefined,\n testId: testData?.id,\n testHandle: testData?.handle,\n });\n \n if (testData && 'isFirstExposure' in testData) {\n // Strip isFirstExposure flag from stored session data and re-save clean data\n const { isFirstExposure, ...cleanTestData } = testData as any;\n debug('[getTestData] Cleaning session data, removing isFirstExposure flag', {\n sessionId: this.id,\n isFirstExposure,\n });\n this.#session.set(\"test_data\", cleanTestData);\n this.#isDirty = true;\n return cleanTestData;\n }\n return testData;\n }\n\n getExpireAt(): string | undefined {\n return this.#session.get(\"test_expire_at\");\n }\n\n setTestData(testData: Test | undefined): void {\n debug('[setTestData] Setting test data', {\n sessionId: this.id,\n testId: testData?.id,\n testHandle: testData?.handle,\n variantId: testData?.testVariant?.id,\n variantHandle: testData?.testVariant?.handle,\n });\n this.#isDirty = true;\n this.#session.set(\"test_data\", testData);\n }\n\n setExpireAt(expireAt: string | undefined): void {\n debug('[setExpireAt] Setting expiry', {\n sessionId: this.id,\n expireAt,\n });\n this.#isDirty = true;\n this.#session.set(\"test_expire_at\", expireAt);\n }\n\n clearTestData(): void {\n debug('[clearTestData] Clearing test data and expiry', {\n sessionId: this.id,\n });\n this.#isDirty = true;\n this.#session.unset(\"test_data\");\n this.#session.unset(\"test_expire_at\");\n }\n\n hasTestData(): boolean {\n return this.#session.has(\"test_data\");\n }\n\n // Test rules cache methods\n getTestRulesCache(): any[] | undefined {\n return this.#session.get(\"test_rules_cache\");\n }\n\n getTestRulesCacheTimestamp(): number | undefined {\n return this.#session.get(\"test_rules_cache_timestamp\");\n }\n\n setTestRulesCache(rules: any[], timestamp: number): void {\n debug('[setTestRulesCache] Caching test rules', {\n sessionId: this.id,\n rulesCount: rules.length,\n timestamp: new Date(timestamp).toISOString(),\n });\n this.#isDirty = true;\n this.#session.set(\"test_rules_cache\", rules);\n this.#session.set(\"test_rules_cache_timestamp\", timestamp);\n }\n\n clearTestRulesCache(): void {\n debug('[clearTestRulesCache] Clearing rules cache', {\n sessionId: this.id,\n });\n this.#isDirty = true;\n this.#session.unset(\"test_rules_cache\");\n this.#session.unset(\"test_rules_cache_timestamp\");\n }\n\n isTestRulesCacheValid(cacheDurationMs: number = 60 * 60 * 1000): boolean {\n const timestamp = this.getTestRulesCacheTimestamp();\n if (!timestamp) {\n debug('[isTestRulesCacheValid] No cache timestamp found', {\n sessionId: this.id,\n });\n return false;\n }\n \n const isValid = Date.now() - timestamp < cacheDurationMs;\n debug('[isTestRulesCacheValid] Cache validity check', {\n sessionId: this.id,\n isValid,\n cacheAge: Math.floor((Date.now() - timestamp) / 1000) + 's',\n maxAge: Math.floor(cacheDurationMs / 1000) + 's',\n });\n return isValid;\n }\n\n hasChanges(): boolean {\n // Check if data has actually changed\n const currentTestData = this.getTestData();\n const currentExpireAt = this.getExpireAt();\n const currentTestRulesCache = this.getTestRulesCache();\n const currentTestRulesCacheTimestamp = this.getTestRulesCacheTimestamp();\n\n // Compare with initial state\n const testDataChanged =\n JSON.stringify(currentTestData) !==\n JSON.stringify(this.#initialData.test_data);\n const expireAtChanged =\n currentExpireAt !== this.#initialData.test_expire_at;\n const testRulesCacheChanged =\n JSON.stringify(currentTestRulesCache) !==\n JSON.stringify(this.#initialData.test_rules_cache);\n const testRulesCacheTimestampChanged =\n currentTestRulesCacheTimestamp !== this.#initialData.test_rules_cache_timestamp;\n\n const hasChanges = testDataChanged || expireAtChanged || testRulesCacheChanged || testRulesCacheTimestampChanged || this.#isDirty;\n \n debug('[hasChanges] Checking for changes', {\n sessionId: this.id,\n hasChanges,\n testDataChanged,\n expireAtChanged,\n testRulesCacheChanged,\n testRulesCacheTimestampChanged,\n isDirty: this.#isDirty,\n });\n\n return hasChanges;\n }\n\n commit(): Promise<string> {\n debug('[commit] Committing session', {\n sessionId: this.id,\n isDirty: this.#isDirty,\n hasTestData: !!this.getTestData(),\n });\n // Reset dirty flag after commit\n this.#isDirty = false;\n\n // Update initial data to current state\n this.#initialData = {\n test_data: this.getTestData(),\n test_expire_at: this.getExpireAt(),\n test_rules_cache: this.getTestRulesCache(),\n test_rules_cache_timestamp: this.getTestRulesCacheTimestamp(),\n };\n\n return this.#sessionStorage.commitSession(this.#session);\n }\n\n destroy(): Promise<string> {\n debug('[destroy] Destroying session', {\n sessionId: this.id,\n });\n this.#isDirty = true;\n this.#session.unset(\"test_data\");\n this.#session.unset(\"test_expire_at\");\n this.#session.unset(\"test_rules_cache\");\n this.#session.unset(\"test_rules_cache_timestamp\");\n return this.#sessionStorage.destroySession(this.#session);\n }\n}\n","import { PackClient } from \"@pack/client\";\nimport { CacheCustom, createWithCache } from \"@shopify/hydrogen\";\nimport * as cookie from \"cookie\";\nimport { PackSession } from \"./session/session\";\nimport { PackTestSession } from \"./session/test-session\";\nimport {\n getTestInfo,\n getTestFromQueryParams,\n getTestSession,\n getTestTargetingAttributesFromRequest,\n setTestHeaders,\n Test,\n TestInput,\n TestInfo,\n} from \"./tests/test\";\nimport createDebug from \"debug\";\n\nconst debug = createDebug(\"pack:ab-testing:create-pack-client\");\n\n/** @see https://shopify.dev/docs/custom-storefronts/hydrogen/data-fetching/cache#caching-strategies */\ntype CachingStrategy = ReturnType<typeof CacheCustom>;\n\ninterface EnvironmentOptions {\n /**\n * A Cache API instance.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Cache\n */\n cache: Cache;\n /**\n * A runtime utility for serverless environments\n * @see https://developers.cloudflare.com/workers/runtime-apis/fetch-event/#waituntil\n */\n waitUntil: ExecutionContext[\"waitUntil\"];\n}\n\nexport interface CreatePackClientOptions extends EnvironmentOptions {\n apiUrl?: string;\n token?: string;\n storeId?: string;\n session: PackSession;\n testSession: PackTestSession;\n contentEnvironment?: string;\n /** Default theme data to use when no token is provided */\n defaultThemeData?: DefaultThemeData;\n /**\n * Initial request to extract query parameters from.\n * If not provided, it will be captured from the first handleRequest call.\n * @deprecated Pass request to handleRequest instead of createPackClient\n */\n request?: Request;\n}\n\ntype Variables = Record<string, any>;\n\ninterface QueryOptions {\n variables?: Variables;\n cache?: CachingStrategy;\n test?: TestInput;\n}\n\ninterface QueryError {\n message: string;\n param?: string;\n code?: string;\n type: string;\n}\n\ninterface QueryResponse<T> {\n data: T | null;\n error: QueryError | null;\n packTestInfo?: Test;\n}\n\nexport interface PackCustomizerMeta {\n environment?: string;\n overlay?: {\n src?: string;\n version?: string;\n };\n [key: string]: any;\n}\n\nexport interface Pack {\n abTest: Test | null | undefined;\n /**\n * @deprecated The method should not be used\n */\n getPackSessionData(): {\n storeId: string;\n sessionId: string;\n abTest: Test | null | undefined;\n isPreviewModeEnabled: boolean;\n customizerMeta: any;\n };\n getPackContextData(): {\n packStoreId: string;\n packSessionId: string;\n packAbTest: Test | null | undefined;\n packIsPreviewMode: boolean;\n packCustomizerMeta: PackCustomizerMeta | null;\n };\n handleRequest(request: Request): Promise<(response: Response) => void>;\n isPreviewModeEnabled: () => boolean;\n isValidEditToken: PackClient[\"isValidEditToken\"];\n query: <T = any>(\n query: string,\n options: QueryOptions\n ) => Promise<QueryResponse<T>>;\n session: PackSession;\n testSession: PackTestSession;\n}\n\ninterface DefaultThemeData {\n data: Record<string, any>;\n}\n\n/**\n * Create an SHA-256 hash as a hex string\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\n */\nasync function sha256(message: string): Promise<string> {\n // encode as UTF-8\n const messageBuffer = new TextEncoder().encode(message);\n // hash the message\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", messageBuffer);\n // convert bytes to hex string\n return Array.from(new Uint8Array(hashBuffer))\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\n/**\n * Hash query and its parameters for use as cache key.\n * NOTE: Oxygen deployment will break if the cache key is long or contains `\\n`\n */\nfunction hashQuery(\n query: string,\n variables?: Variables,\n headers?: {}\n): Promise<string> {\n let hash = query;\n if (variables !== null) hash += JSON.stringify(variables);\n if (headers !== null) hash += JSON.stringify(headers);\n\n return sha256(hash);\n}\n\nasync function getCacheKey(\n withCache: ReturnType<typeof createWithCache>,\n query: string,\n token: string,\n options: {\n variables?: Variables;\n headers?: {};\n }\n) {\n let queryHash = await hashQuery(query, options?.variables, options?.headers);\n\n let publishedAt;\n try {\n const resp = await withCache.run<{ publishedAt?: string } | null>(\n {\n cacheKey: [\"pack:content:publishedAt\"],\n cacheStrategy: CacheCustom({\n maxAge: 15,\n staleWhileRevalidate: 15,\n }),\n shouldCacheResult: (value) => value !== null,\n },\n async ({ addDebugData }): Promise<{ publishedAt?: string } | null> => {\n const URL =\n \"https://cache-check-production.packdigital.workers.dev/published-at\";\n const resp = await fetch(URL, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n addDebugData?.({\n displayName: \"Pack Cache Check\",\n response: resp,\n });\n\n const { status } = resp;\n if (status !== 200) {\n let message;\n\n if (status === 401) {\n message =\n \"Pack error: Unauthorized request to cache check service. Please check your token.\";\n } else {\n message = `Pack error: Request to cache check service failed with status ${status}`;\n }\n\n debug(`Cache check error: ${message}`);\n console.error(message);\n return null;\n }\n\n return resp.json();\n }\n );\n\n publishedAt = resp?.publishedAt;\n } catch (err) {\n debug(`Error getting cache key: ${err}`);\n console.error(err);\n }\n\n if (publishedAt) {\n return `${queryHash}:${publishedAt}`;\n }\n\n return queryHash;\n}\n\n// Extends the CacheLong strategy with a stale-if-error policy\nconst cacheCustom = CacheCustom({\n maxAge: 3600,\n staleWhileRevalidate: 82800,\n staleIfError: 86400, // 1 day\n});\n\n/** Resolves the default data for a given query based on the theme config */\nfunction resolveQuery({\n query,\n variables,\n defaultThemeData,\n}: {\n query: string;\n variables?: Variables;\n defaultThemeData: DefaultThemeData;\n}): any {\n const queryField = extractTopLevelField(query);\n const identifier = variables?.handle || variables?.id;\n\n const defaultDataForField = defaultThemeData.data[queryField];\n if (!defaultDataForField) {\n return null;\n }\n\n return {\n [queryField]: identifier\n ? defaultDataForField[identifier]\n : defaultDataForField,\n };\n}\n\n/**\n * Extracts the top-level field from a GraphQL query string.\n *\n * The function assumes that the query follows the standard GraphQL syntax\n * and expects the top-level field to be the first field in the query.\n *\n * @example\n * const query = `\n * query GetProduct($id: ID!) {\n * product(id: $id) {\n * id\n * name\n * }\n * }\n * `;\n * const topLevelField = extractTopLevelField(query);\n * console.log(topLevelField); // Output: \"product\"\n */\nfunction extractTopLevelField(query: string): string {\n const match = query.match(/\\{[^{]*?\\w+(?=\\(|:|\\s*\\{)/);\n if (match) {\n return match[0].slice(1).trim();\n }\n return \"\";\n}\n\nexport function createPackClient(options: CreatePackClientOptions): Pack {\n const {\n cache,\n waitUntil,\n session,\n testSession,\n contentEnvironment,\n storeId,\n token,\n apiUrl,\n defaultThemeData,\n request,\n } = options;\n\n const previewEnabled = !!session.get(\"previewEnabled\");\n const previewEnvironment = session.get(\"environment\");\n\n const clientContentEnvironment = previewEnvironment || contentEnvironment;\n\n let packClient: PackClient;\n let testInfoForRequest: TestInfo | undefined = undefined;\n let testInfoPromise: Promise<TestInfo | undefined> | undefined = undefined;\n let currentRequest: Request | undefined = request;\n let testFromQueryParams: TestInput | null = request\n ? getTestFromQueryParams(request)\n : null;\n\n if (!token && !defaultThemeData) {\n throw new Error(\n \"ERR_HY_MISSING_TOKEN: The Pack client token is missing or empty. Please provide a valid token or default theme data. Doc: https://docs.packdigital.com/err/ERR_HY_MISSING_TOKEN\"\n );\n }\n\n if (!storeId) {\n throw new Error(\n \"ERR_HY_MISSING_STORE_ID: The Pack Store ID is missing or empty. Please provide a valid Store ID. Doc: https://docs.packdigital.com/err/ERR_HY_MISSING_STORE_ID\"\n );\n }\n\n const handleRequest = async (request: Request) => {\n // Store the request for use in query() if not already provided\n if (!currentRequest) {\n currentRequest = request;\n testFromQueryParams = getTestFromQueryParams(request);\n }\n\n return (response: Response) => {\n const hasExposedTestCookie = request.headers\n .get(\"cookie\")\n ?.includes(\"exposedTest\");\n\n if (hasExposedTestCookie) {\n // Clear the exposedTest cookie\n response.headers.append(\n \"Set-Cookie\",\n cookie.serialize(\"exposedTest\", \"\", {\n maxAge: 0,\n expires: new Date(0),\n path: \"/\",\n })\n );\n }\n };\n };\n\n if (!token) {\n return {\n get abTest() {\n return getTestSession(testSession, testFromQueryParams, previewEnabled);\n },\n handleRequest,\n getPackSessionData: () => {\n return {\n storeId: storeId,\n sessionId: session.id,\n abTest: getTestSession(\n testSession,\n testFromQueryParams,\n previewEnabled\n ),\n isPreviewModeEnabled: previewEnabled,\n customizerMeta: session.get(\"customizerMeta\"),\n };\n },\n getPackContextData: (): {\n packStoreId: string;\n packSessionId: string;\n packAbTest: Test | null | undefined;\n packIsPreviewMode: boolean;\n packCustomizerMeta: PackCustomizerMeta | null;\n } => {\n return {\n packStoreId: storeId,\n packSessionId: session.id,\n packAbTest: getTestSession(\n testSession,\n testFromQueryParams,\n previewEnabled\n ),\n packIsPreviewMode: previewEnabled,\n packCustomizerMeta: session.get(\"customizerMeta\"),\n };\n },\n isPreviewModeEnabled: () => previewEnabled,\n isValidEditToken: () => new Promise(() => false),\n async query<T = any>(\n query: string,\n { variables }: QueryOptions = {}\n ): Promise<QueryResponse<T>> {\n if (!defaultThemeData?.data) {\n debug(\"Warning: Invalid default theme data provided to Pack client\");\n console.warn(\"Invalid default theme data provided to Pack client.\");\n return { data: null, error: null };\n }\n\n const data = resolveQuery({ query, variables, defaultThemeData });\n\n return { data: data as T, error: null };\n },\n session,\n testSession,\n };\n }\n\n const resolvedApiUrl = apiUrl\n ? apiUrl\n : previewEnabled || process.env.NODE_ENV === \"development\"\n ? \"https://app.packdigital.com/graphql\"\n : undefined;\n\n packClient = new PackClient({\n // Use apiUrl, it is configured\n // Use active API URL if preview mode is enabled\n // Otherwise, Live PackClient uses its internal configuration\n apiUrl: resolvedApiUrl,\n storeId,\n token,\n contentEnvironment: clientContentEnvironment,\n sessionId: session.id,\n clientName: \"HydrogenClient\",\n });\n\n return {\n get abTest() {\n return getTestSession(testSession, testFromQueryParams, previewEnabled);\n },\n getPackSessionData: () => {\n return {\n storeId: storeId,\n sessionId: session.id,\n abTest: getTestSession(\n testSession,\n testFromQueryParams,\n previewEnabled\n ),\n isPreviewModeEnabled: previewEnabled,\n customizerMeta: session.get(\"customizerMeta\"),\n };\n },\n getPackContextData: (): {\n packStoreId: string;\n packSessionId: string;\n packAbTest: Test | null | undefined;\n packIsPreviewMode: boolean;\n packCustomizerMeta: PackCustomizerMeta | null;\n } => {\n return {\n packStoreId: storeId,\n packSessionId: session.id,\n packAbTest: getTestSession(\n testSession,\n testFromQueryParams,\n previewEnabled\n ),\n packIsPreviewMode: previewEnabled,\n packCustomizerMeta: session.get(\"customizerMeta\"),\n };\n },\n handleRequest,\n isPreviewModeEnabled: () => previewEnabled,\n isValidEditToken: (token: string | null) =>\n packClient.isValidEditToken(token),\n async query<T = any>(\n query: string,\n { variables, cache: strategy = cacheCustom, test }: QueryOptions = {}\n ): Promise<QueryResponse<T>> {\n try {\n let headers: any = {};\n let testInfoForLoader: Test | undefined = undefined;\n\n const withCache = createWithCache({\n cache,\n waitUntil,\n request: new Request(\"https://pack.local/cache\", { method: \"GET\" }),\n });\n\n const queryVariables = variables ? { ...variables } : {};\n if (previewEnabled) {\n queryVariables.version = \"CURRENT\";\n } else {\n queryVariables.version = \"PUBLISHED\";\n }\n\n if (packClient && token && !testInfoForRequest && currentRequest) {\n try {\n if (!testInfoPromise) {\n debug(\n \"[Pack Test] Creating getTestInfo promise - first query for this request\"\n );\n testInfoPromise = getTestInfo({\n request: currentRequest,\n testTargetAudienceAttributes:\n getTestTargetingAttributesFromRequest(currentRequest),\n packClient,\n testSession, // Use dedicated test session instead\n withCache,\n token,\n });\n } else {\n debug(\n \"[Pack Test] Reusing existing getTestInfo promise - concurrent query\"\n );\n }\n testInfoForRequest = await testInfoPromise;\n } catch (error) {\n debug(\n \"[Pack Test] Error getting test info, continuing without test:\",\n error\n );\n console.error(\n \"[Pack Test] Error getting test info, continuing without test:\",\n error\n );\n // Continue without test info to allow site to load\n testInfoForRequest = undefined;\n testInfoPromise = undefined; // Reset promise so it can be retried on next query\n }\n } else if (packClient && token && testInfoForRequest) {\n debug(\"[Pack Test] Using cached testInfo - subsequent query\");\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"[Pack Test] Using cached testInfo - subsequent query\");\n }\n }\n\n if (testInfoForRequest?.isFirstExposure) {\n const { isFirstExposure, ...testInfo } = testInfoForRequest;\n\n testInfoForLoader = testInfo;\n }\n\n headers = setTestHeaders(headers, {\n previewEnabled,\n testInfoForRequest,\n testFromQueryParams: testFromQueryParams || test,\n });\n\n // Preview mode always bypasses the cache\n if (previewEnabled) {\n try {\n const result = await packClient.fetch(query, {\n variables: queryVariables,\n headers: headers,\n });\n\n return {\n ...result,\n packTestInfo: testInfoForLoader,\n };\n } catch (error) {\n return { error: error as QueryError, data: null };\n }\n }\n\n const queryHash = await getCacheKey(withCache, query, token, {\n variables: queryVariables,\n headers,\n });\n\n const response = await withCache.run(\n {\n cacheKey: [queryHash],\n cacheStrategy: strategy,\n shouldCacheResult: (value) => !value?.error,\n },\n async () => {\n try {\n const result = await packClient.fetch(query, {\n variables: queryVariables,\n headers: headers,\n });\n\n return result;\n } catch (error) {\n return { error, data: null };\n }\n }\n );\n\n return response.error\n ? response\n : { ...response, packTestInfo: testInfoForLoader };\n } catch (error) {\n debug(\n \"[Pack Test] Critical error in query method, returning error:\",\n error\n );\n console.error(\n \"[Pack Test] Critical error in query method, returning error:\",\n error\n );\n const queryError: QueryError = {\n message: error instanceof Error ? error.message : String(error),\n type: \"NetworkError\",\n };\n return { error: queryError, data: null };\n }\n },\n session,\n testSession,\n };\n}\n","import { PackClient } from \"@pack/client\";\nimport { PackTestSession } from \"../session/test-session\";\nimport * as cookie from \"cookie\";\nimport { LocalTestResolver } from \"./local-test-resolver\";\nimport createDebug from \"debug\";\n\nconst debug = createDebug(\"pack:ab-testing:test\");\n\nexport interface TestInput {\n testId?: string;\n testHandle?: string;\n testVariantId?: string;\n testVariantHandle?: string;\n}\n\nexport interface Test {\n id: string;\n handle: string;\n testVariant: {\n id: string;\n handle: string;\n };\n}\n\nexport interface TestTargetAudienceAttributes {\n url?: string;\n query?: string;\n path?: string;\n utmCampaign?: string;\n utmContent?: string;\n utmMedium?: string;\n utmSource?: string;\n utmTerm?: string;\n}\n\n// Removed: QUERY_TEST_VARIANT_IS_RUNNING is no longer needed\n// Test validity is now checked via the test-cache-check system\n\nconst QUERY_TESTS_BY_RULES = `#graphql\n query TestsByRules($status: String) {\n testsByRulesV2(status: $status) {\n totalCount\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n cursor\n node {\n id\n handle\n rules {\n attribute\n operator\n value\n }\n testVariants {\n id\n handle\n trafficPercentage\n }\n }\n }\n }\n }\n`;\n\n// Global instance of LocalTestResolver - no caching, just holds rules for request duration\nconst localTestResolver = new LocalTestResolver();\n\n// Generate cache key for shared test rules (same for all users)\nfunction generateTestRulesCacheKey(\n storeId: string,\n contentEnvironment?: string\n): string {\n return `pack-tests:${storeId}:${contentEnvironment || \"default\"}`;\n}\n\n// Function to fetch test rules with shared caching (storefront-environment level)\nasync function fetchTestRulesShared(\n packClient: PackClient,\n withCache: any, // ReturnType<typeof createWithCache>\n token: string\n): Promise<any[]> {\n const baseCacheKey = generateTestRulesCacheKey(\n packClient.storeId || \"\",\n packClient.contentEnvironment\n );\n\n debug(\n \"[Pack Test] Fetching test rules with shared cache:\",\n JSON.stringify({\n baseCacheKey,\n storeId: packClient.storeId,\n contentEnvironment: packClient.contentEnvironment,\n })\n );\n\n // Check test cache timestamp to include in cache key for automatic invalidation\n // This is the only place where test-cache-check should be called\n let testsUpdatedAt;\n try {\n const resp = await withCache.run(\n {\n cacheKey: [\"pack:tests:updatedAt\"],\n cacheStrategy: {\n maxAge: 15,\n staleWhileRevalidate: 15,\n },\n shouldCacheResult: (value: any) => value !== null,\n },\n async ({\n addDebugData,\n }: any): Promise<{ testsUpdatedAt?: string } | null> => {\n // Always use production endpoint for now\n // TODO: Add proper environment variable support for custom URLs\n const URL =\n \"https://test-cache-check-production.packdigital.workers.dev/tests-updated-at\";\n\n const resp = await fetch(URL, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n addDebugData?.({\n displayName: \"Pack Test Cache Check\",\n response: resp,\n });\n\n const { status } = resp;\n if (status !== 200) {\n let message;\n\n if (status === 401) {\n message =\n \"Pack error: Unauthorized request to test cache check service. Please check your token.\";\n } else {\n message = `Pack error: Request to test cache check service failed with status ${status}`;\n }\n\n debug(`[Pack Test] Cache check error: ${message}`);\n console.error(message);\n return null;\n }\n\n const data = await resp.json();\n debug(\"[Pack Test] Timestamp response:\", JSON.stringify(data));\n return data as { testsUpdatedAt?: string } | null;\n }\n );\n\n testsUpdatedAt = resp?.testsUpdatedAt;\n debug(\n \"[Pack Test] Using timestamp for cache key:\",\n JSON.stringify({\n testsUpdatedAt,\n hasTimestamp: !!testsUpdatedAt,\n })\n );\n } catch (err) {\n debug(\n \"[Pack Test] Error checking test cache timestamp:\",\n JSON.stringify(err)\n );\n console.error(\"[Pack Test] Error checking test cache timestamp:\", err);\n }\n\n // Include testsUpdatedAt in cache key for cache invalidation\n const cacheKey = testsUpdatedAt\n ? `${baseCacheKey}:${testsUpdatedAt}`\n : baseCacheKey;\n\n debug(\"[Pack Test] Final cache key for test rules:\", cacheKey);\n\n return withCache.run(\n {\n cacheKey: [cacheKey],\n cacheStrategy: {\n maxAge: 3600, // 1 hour\n staleWhileRevalidate: 86400, // 24 hours\n staleIfError: 86400, // 24 hours\n },\n shouldCacheResult: (result: any) =>\n Array.isArray(result) && result.length >= 0,\n displayName: \"Pack Test Rules\",\n },\n async ({ addDebugData }: any): Promise<any[]> => {\n const startTime = Date.now();\n debug(\n \"[Pack Test] Cache miss - fetching test rules from Pack GraphQL API\"\n );\n\n try {\n // Fetch test rules from Pack API (only running tests)\n const { data, error } = await packClient.fetch(QUERY_TESTS_BY_RULES, {\n variables: { status: \"running\" },\n });\n\n const fetchDuration = Date.now() - startTime;\n debug(\n \"[Pack Test] GraphQL query completed:\",\n JSON.stringify({\n duration: `${fetchDuration}ms`,\n hasData: !!data,\n hasError: !!error,\n totalCount: data?.testsByRulesV2?.totalCount,\n edgesCount: data?.testsByRulesV2?.edges?.length || 0,\n })\n );\n\n addDebugData?.({\n displayName: \"Pack Test Rules Query\",\n });\n\n if (error) {\n debug(\n \"[Pack Test] Error fetching test rules:\",\n JSON.stringify({\n error,\n errorType: typeof error,\n errorMessage: error?.message || JSON.stringify(error),\n })\n );\n throw new Error(`GraphQL error: ${JSON.stringify(error)}`);\n }\n\n const rules =\n data?.testsByRulesV2?.edges.map((edge: any) => edge.node) || [];\n\n debug(\n \"[Pack Test] Successfully fetched and cached test rules:\",\n JSON.stringify({\n rulesCount: rules.length,\n cacheKey,\n rules: rules.map((rule: any) => ({\n id: rule.id,\n handle: rule.handle,\n rulesCount: rule.rules?.length || 0,\n variantsCount: rule.testVariants?.length || 0,\n })),\n })\n );\n\n return rules;\n } catch (error) {\n const fetchDuration = Date.now() - startTime;\n debug(\n \"[Pack Test] Exception fetching test rules:\",\n JSON.stringify({\n error: error instanceof Error ? error.message : error,\n duration: `${fetchDuration}ms`,\n stack: error instanceof Error ? error.stack : undefined,\n })\n );\n throw error;\n }\n }\n );\n}\n\nexport interface GetTestInfoOptions {\n request: Request;\n testTargetAudienceAttributes: TestTargetAudienceAttributes | null;\n packClient: PackClient;\n testSession: PackTestSession;\n withCache?: any; // ReturnType<typeof createWithCache>\n token?: string; // Pack secret token for cache check service\n}\n\nexport interface TestInfo extends Test {\n isFirstExposure?: boolean;\n}\n\nasync function packClientFetchTestByRules(\n packClient: PackClient,\n testTargetAudienceAttributes: TestTargetAudienceAttributes | null,\n testSession: PackTestSession,\n request: Request,\n withCache?: any,\n token?: string,\n exposedTest?: Test | null,\n validateOnly?: boolean\n) {\n try {\n debug(\n \"[Pack Test] Starting test assignment process:\",\n JSON.stringify({\n storeId: packClient.storeId,\n targetingAttributes: testTargetAudienceAttributes,\n requestUrl: request.url,\n validateOnly,\n })\n );\n\n if (!packClient.storeId) {\n debug(\"[Pack Test] Store ID is required to fetch a test.\");\n console.error(\"[Pack Test] Store ID is required to fetch a test.\");\n return undefined;\n }\n\n debug(\n \"[Pack Test] Checking if rules are loaded:\",\n JSON.stringify({\n hasRules: localTestResolver.hasRules(),\n })\n );\n\n // Always fetch rules through shared cache - it will return cached rules if still valid\n // This ensures we get fresh rules when tests are updated\n if (withCache && token) {\n debug(\"[Pack Test] Fetching test rules through shared cache\");\n try {\n const rules = await fetchTestRulesShared(packClient, withCache, token);\n localTestResolver.setTestRules(rules);\n debug(\n \"[Pack Test] Updated local resolver with rules from shared cache\"\n );\n\n // Check if current session test is still in active rules and get fresh data\n const currentTestData = testSession.getTestData();\n let needsNewTest = false;\n\n if (currentTestData?.id) {\n const freshTestData = localTestResolver.getTestById(\n currentTestData.id\n );\n\n if (!freshTestData) {\n debug(\n \"[Pack Test] Current session test is no longer active (paused/stopped), clearing session:\",\n JSON.stringify({\n testId: currentTestData.id,\n testHandle: currentTestData.handle,\n })\n );\n testSession.clearTestData();\n needsNewTest = true; // Mark that we need to assign a new test\n } else {\n debug(\n \"[Pack Test] Current session test is still active in rules, updating with fresh data:\",\n JSON.stringify({\n testId: freshTestData.id,\n testHandle: freshTestData.handle,\n variantsCount: freshTestData.testVariants?.length,\n })\n );\n\n // Check if the user's variant still exists\n if (currentTestData.testVariant?.id) {\n const currentVariant = freshTestData.testVariants?.find(\n (v) => v.id === currentTestData.testVariant.id\n );\n\n if (currentVariant) {\n // Variant still exists, return refreshed test data\n const refreshedTest = {\n id: freshTestData.id,\n handle: freshTestData.handle,\n testVariant: {\n id: currentVariant.id,\n handle: currentVariant.handle,\n },\n isFirstExposure: undefined,\n } as TestInfo;\n\n // Update session with refreshed data\n const { isFirstExposure, ...testDataWithoutFlag } =\n refreshedTest;\n testSession.setTestData(testDataWithoutFlag);\n testSession.setExpireAt(getExpireAtDate().toISOString());\n\n // Return the refreshed test data (even in validateOnly mode)\n return refreshedTest;\n } else {\n // Variant no longer exists in test, clear session and need new test\n debug(\n \"[Pack Test] Current variant no longer exists in test, clearing session:\",\n JSON.stringify({\n testId: currentTestData.id,\n variantId: currentTestData.testVariant.id,\n })\n );\n testSession.clearTestData();\n needsNewTest = true;\n }\n }\n }\n }\n\n // If in validateOnly mode and test is still valid, we already returned above\n // If we need a new test (old one inactive), continue to assign even in validateOnly\n if (validateOnly && !needsNewTest) {\n debug(\"[Pack Test] Validation complete, no new test needed\");\n return undefined;\n }\n } catch (error) {\n debug(\"[Pack Test] Failed to fetch test rules:\", JSON.stringify(error));\n console.error(\"[Pack Test] Failed to fetch test rules:\", error);\n // Continue without test rules\n }\n } else {\n debug(\n \"[Pack Test] No withCache or token available - cannot fetch test rules\"\n );\n // Cannot fetch without caching infrastructure\n }\n\n // Check if exposed test is still active and get fresh data\n if (exposedTest) {\n const freshTestData = localTestResolver.getTestById(exposedTest.id);\n if (freshTestData) {\n debug(\n \"[Pack Test] Exposed test is still active in rules, restoring with fresh data:\",\n JSON.stringify({\n testId: freshTestData.id,\n testHandle: freshTestData.handle,\n })\n );\n\n // Find the variant in fresh data\n const exposedVariant = freshTestData.testVariants?.find(\n (v) => v.id === exposedTest.testVariant?.id\n );\n\n if (exposedVariant) {\n // Return the exposed test with fresh data\n const result = {\n id: freshTestData.id,\n handle: freshTestData.handle,\n testVariant: {\n id: exposedVariant.id,\n handle: exposedVariant.handle,\n },\n isFirstExposure: undefined,\n } as TestInfo;\n\n // Save to session\n const { isFirstExposure, ...testDataWithoutFlag } = result;\n testSession.setTestData(testDataWithoutFlag);\n testSession.setExpireAt(getExpireAtDate().toISOString());\n\n return result;\n } else {\n debug(\n \"[Pack Test] Exposed test variant no longer exists in fresh data:\",\n JSON.stringify({\n testId: exposedTest.id,\n variantId: exposedTest.testVariant?.id,\n })\n );\n }\n } else {\n debug(\n \"[Pack Test] Exposed test is no longer active in rules:\",\n JSON.stringify({\n testId: exposedTest.id,\n })\n );\n }\n }\n\n // Use local resolver to assign test\n const sessionId = packClient.storeId; // Use store ID as session ID for consistency\n debug(\"[Pack Test] Assigning test with session ID:\", sessionId);\n\n const assignedTest = await localTestResolver.assignTest(\n testTargetAudienceAttributes || {},\n sessionId\n );\n\n debug(\n \"[Pack Test] Test assignment result:\",\n JSON.stringify({\n assigned: !!assignedTest,\n testId: assignedTest?.id,\n testHandle: assignedTest?.handle,\n variantId: assignedTest?.testVariant?.id,\n variantHandle: assignedTest?.testVariant?.handle,\n })\n );\n\n if (!assignedTest) {\n debug(\"[Pack Test] No test assigned - user not eligible for any tests\");\n return undefined;\n }\n\n // Return in the same format as the original implementation\n const result = {\n ...assignedTest,\n isFirstExposure: true,\n } as TestInfo;\n\n debug(\n \"[Pack Test] Test assigned, saving to session:\",\n JSON.stringify({\n testId: result.id,\n testHandle: result.handle,\n variantId: result.testVariant.id,\n variantHandle: result.testVariant.handle,\n })\n );\n\n // Save the assigned test to session WITHOUT isFirstExposure flag\n const { isFirstExposure, ...testDataWithoutFlag } = result;\n testSession.setTestData(testDataWithoutFlag);\n testSession.setExpireAt(getExpireAtDate().toISOString());\n\n debug(\"[Pack Test] Returning test info with first exposure flag\");\n return result;\n } catch (error) {\n debug(\n \"[Pack Test] Error in packClientFetchTestByRules, continuing without test:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error in packClientFetchTestByRules, continuing without test:\",\n error\n );\n // Return undefined to allow site to load without test info\n return undefined;\n }\n}\n\n// Removed: packClientCheckTestIsRunning is no longer needed\n// Test validity is now checked via the test-cache-check system and localTestResolver.isTestActive()\n\nfunction getExpireAtDate() {\n const expireAt = new Date();\n expireAt.setHours(expireAt.getHours() + 4); // 4 hours\n return expireAt;\n}\n\nexport async function getTestInfo({\n request,\n testTargetAudienceAttributes,\n packClient,\n testSession,\n withCache,\n token,\n}: GetTestInfoOptions): Promise<TestInfo | undefined> {\n debug(\n \"[Pack Test] Getting test info:\",\n JSON.stringify({\n hasTestSession: !!testSession,\n targetingAttributes: testTargetAudienceAttributes,\n requestUrl: request.url,\n })\n );\n\n let testInfo: TestInfo | undefined = undefined;\n let exposedTest: Test | undefined = undefined;\n\n if (!testSession) {\n debug(\"[Pack Test] No test session available, returning undefined\");\n return testInfo;\n }\n\n // Retrieve simplified test data and expiry\n const testSessionData: Test | undefined = testSession.getTestData();\n const testSessionExpireAt: string | undefined = testSession.getExpireAt();\n\n debug(\n \"[Pack Test] Session data check:\",\n JSON.stringify({\n hasTestData: !!testSessionData,\n testId: testSessionData?.id,\n testHandle: testSessionData?.handle,\n variantId: testSessionData?.testVariant?.id,\n variantHandle: testSessionData?.testVariant?.handle,\n expireAt: testSessionExpireAt,\n isExpired: testSessionExpireAt\n ? new Date(testSessionExpireAt) < new Date()\n : false,\n })\n );\n\n const exposedTestCookieString = cookie.parse(\n request.headers.get(\"cookie\") || \"\"\n )?.exposedTest;\n\n debug(\n \"[Pack Test] Exposed test cookie check:\",\n JSON.stringify({\n hasExposedTestCookie: !!exposedTestCookieString,\n })\n );\n\n // If we already have a valid test in the session, validate it's still active\n if (testSessionData?.id && testSessionData?.testVariant) {\n debug(\"[Pack Test] Found existing test data in session\");\n\n // First check if test hasn't expired by time\n if (!testSessionExpireAt || new Date(testSessionExpireAt) >= new Date()) {\n debug(\n \"[Pack Test] Test session not expired by time, fetching rules to validate if test is still active\"\n );\n\n // Fetch test rules to validate if the test is still active\n // This will also return refreshed test data or assign a new test if needed\n try {\n const validationResult = await packClientFetchTestByRules(\n packClient,\n testTargetAudienceAttributes,\n testSession,\n request,\n withCache,\n token,\n null,\n true // validateOnly - but will assign new test if current is inactive\n );\n\n // If we got test data back, determine if it's refreshed or new\n if (validationResult) {\n if (validationResult.id === testSessionData.id) {\n debug(\n \"[Pack Test] Test is still active, using refreshed data\",\n JSON.stringify({\n testId: validationResult.id,\n testHandle: validationResult.handle,\n variantId: validationResult.testVariant.id,\n variantHandle: validationResult.testVariant.handle,\n })\n );\n // Same test, just refreshed - no first exposure\n return validationResult;\n } else {\n debug(\n \"[Pack Test] Original test no longer active, new test assigned\",\n JSON.stringify({\n oldTestId: testSessionData.id,\n newTestId: validationResult.id,\n newTestHandle: validationResult.handle,\n newVariantId: validationResult.testVariant.id,\n newVariantHandle: validationResult.testVariant.handle,\n })\n );\n // New test was assigned, mark as first exposure\n return {\n ...validationResult,\n isFirstExposure: true,\n } as TestInfo;\n }\n } else {\n debug(\n \"[Pack Test] Test is no longer active and no new test was assigned\"\n );\n return undefined;\n }\n } catch (error) {\n debug(\n \"[Pack Test] Error validating test, using cached data:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error validating test, using cached data:\",\n error\n );\n // On error, still return the cached data\n return { ...testSessionData, isFirstExposure: undefined } as TestInfo;\n }\n } else {\n debug(\"[Pack Test] Test session has expired by time\");\n // Clear the session data\n debug(\"[Pack Test] Clearing expired test session data\");\n testSession.clearTestData();\n }\n }\n\n if (exposedTestCookieString) {\n try {\n exposedTest = JSON.parse(exposedTestCookieString);\n debug(\n \"[Pack Test] Parsed exposed test from cookie:\",\n JSON.stringify({\n testId: exposedTest?.id,\n testHandle: exposedTest?.handle,\n variantId: exposedTest?.testVariant?.id,\n variantHandle: exposedTest?.testVariant?.handle,\n })\n );\n } catch (error) {\n debug(\n \"[Pack Test] Failed to parse exposed test cookie:\",\n JSON.stringify(error)\n );\n console.error(\"[Pack Test] Failed to parse exposed test cookie:\", error);\n }\n }\n\n if (exposedTest && !testSessionData) {\n debug(\n \"[Pack Test] Found exposed test cookie with no session data - will fetch rules and validate\"\n );\n // If there is no assigned test on the session and an exposed test in the\n // incoming request cookie it means that the user was exposed to a test previously.\n\n // Fetch test rules and check if exposed test is still active\n try {\n // Pass the exposed test to packClientFetchTestByRules\n testInfo = await packClientFetchTestByRules(\n packClient,\n testTargetAudienceAttributes,\n testSession,\n request,\n withCache,\n token,\n exposedTest,\n false // Not validateOnly - allow assigning new tests\n );\n\n if (testInfo?.id === exposedTest.id) {\n debug(\"[Pack Test] Exposed test was restored (still active)\");\n } else if (testInfo) {\n debug(\n \"[Pack Test] Exposed test is no longer active, using newly assigned test:\",\n JSON.stringify({\n exposedTestId: exposedTest.id,\n newTestId: testInfo.id,\n })\n );\n } else {\n debug(\n \"[Pack Test] Exposed test is no longer active and no new test was assigned\"\n );\n }\n } catch (error) {\n debug(\n \"[Pack Test] Error processing exposed test:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error processing exposed test, continuing without test:\",\n error\n );\n // Continue without test info to allow site to load\n testInfo = undefined;\n }\n } else if (testSessionData) {\n debug(\n \"[Pack Test] Test session data exists but was invalid - fetching new test\"\n );\n // This case handles if testSessionData exists but might be expired (handled above)\n // or if there was no exposedTest cookie. We already returned if it was valid.\n // If logic reaches here and testSessionData exists, it implies it was expired.\n // First clear the session\n testSession.clearTestData();\n\n // Then fetch new test\n try {\n testInfo = await packClientFetchTestByRules(\n packClient,\n testTargetAudienceAttributes,\n testSession,\n request,\n withCache,\n token,\n null,\n false // Not validateOnly - allow assigning new tests\n );\n } catch (error) {\n debug(\n \"[Pack Test] Error fetching new test after expired session:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error fetching new test, continuing without test:\",\n error\n );\n // Continue without test info to allow site to load\n testInfo = undefined;\n }\n } else {\n debug(\n \"[Pack Test] No existing test data found - fetching new test for user\"\n );\n // If there is no test on session and no exposed test, check for a new test for client\n try {\n testInfo = await packClientFetchTestByRules(\n packClient,\n testTargetAudienceAttributes,\n testSession,\n request,\n withCache,\n token,\n null,\n false // Not validateOnly - allow assigning new tests\n );\n } catch (error) {\n debug(\n \"[Pack Test] Error fetching new test for user:\",\n JSON.stringify(error)\n );\n console.error(\n \"[Pack Test] Error fetching new test, continuing without test:\",\n error\n );\n // Continue without test info to allow site to load\n testInfo = undefined;\n }\n }\n\n debug(\n \"[Pack Test] Final test info result:\",\n JSON.stringify({\n hasTestInfo: !!testInfo,\n testId: testInfo?.id,\n testHandle: testInfo?.handle,\n variantId: testInfo?.testVariant?.id,\n variantHandle: testInfo?.testVariant?.handle,\n isFirstExposure: testInfo?.isFirstExposure,\n })\n );\n\n return testInfo;\n}\n\nexport function getTestSession(\n testSession?: PackTestSession,\n testFromQueryParams: TestInput | null = null,\n previewEnabled: boolean = false\n): Test | null | undefined {\n debug(\n \"[Pack Test] Getting test session:\",\n JSON.stringify({\n hasTestSession: !!testSession,\n hasQueryParams: !!testFromQueryParams,\n previewEnabled,\n })\n );\n\n if (testFromQueryParams) {\n const result = {\n id: testFromQueryParams.testId || \"\",\n handle: testFromQueryParams.testHandle || \"\",\n testVariant: {\n id: testFromQueryParams.testVariantId || \"\",\n handle: testFromQueryParams.testVariantHandle || \"\",\n },\n };\n debug(\n \"[Pack Test] Using test from query parameters:\",\n JSON.stringify(result)\n );\n return result;\n }\n\n if (previewEnabled) {\n const result = {\n id: \"\",\n handle: \"isPreview\",\n testVariant: {\n id: \"\",\n handle: \"isPreview\",\n },\n };\n debug(\n \"[Pack Test] Using preview mode test session:\",\n JSON.stringify(result)\n );\n return result;\n }\n\n if (!testSession) {\n debug(\"[Pack Test] No test session available\");\n return undefined;\n }\n\n // Read simplified test data from the dedicated test session\n const testSessionData: Test | undefined = testSession.getTestData();\n debug(\n \"[Pack Test] Retrieved test session data:\",\n JSON.stringify({\n hasData: !!testSessionData,\n testId: testSessionData?.id,\n testHandle: testSessionData?.handle,\n variantId: testSessionData?.testVariant?.id,\n variantHandle: testSessionData?.testVariant?.handle,\n })\n );\n\n return testSessionData || null;\n}\n\nexport function getTestTargetingAttributesFromRequest(\n request: Request\n): TestTargetAudienceAttributes {\n let testTargetingAttributes: TestTargetAudienceAttributes = {};\n\n const requestUrl = new URL(request.url);\n const searchParams = requestUrl.searchParams;\n\n testTargetingAttributes.url = requestUrl.origin + requestUrl.pathname;\n testTargetingAttributes.query = requestUrl.search;\n testTargetingAttributes.path = requestUrl.pathname;\n searchParams.has(\"utm_campaign\") &&\n (testTargetingAttributes.utmCampaign =\n searchParams.get(\"utm_campaign\") || undefined);\n searchParams.has(\"utm_content\") &&\n (testTargetingAttributes.utmContent =\n searchParams.get(\"utm_content\") || undefined);\n searchParams.has(\"utm_medium\") &&\n (testTargetingAttributes.utmMedium =\n searchParams.get(\"utm_medium\") || undefined);\n searchParams.has(\"utm_source\") &&\n (testTargetingAttributes.utmSource =\n searchParams.get(\"utm_source\") || undefined);\n searchParams.has(\"utm_term\") &&\n (testTargetingAttributes.utmTerm =\n searchParams.get(\"utm_term\") || undefined);\n\n return testTargetingAttributes;\n}\n\nexport function getTestFromQueryParams(request: Request): TestInput | null {\n const requestUrl = new URL(request.url);\n const params = requestUrl.searchParams;\n\n if (\n params.has(\"testId\") ||\n params.has(\"test_id\") ||\n params.has(\"test-id\") ||\n params.has(\"testHandle\") ||\n params.has(\"test_handle\") ||\n params.has(\"test-handle\") ||\n params.has(\"testVariantId\") ||\n params.has(\"test_variant_id\") ||\n params.has(\"test-variant-id\") ||\n params.has(\"testVariantHandle\") ||\n params.has(\"test_variant_handle\") ||\n params.has(\"test-variant-handle\")\n ) {\n return {\n testId:\n params.get(\"testId\") ||\n params.get(\"test_id\") ||\n params.get(\"test-id\") ||\n \"\",\n testHandle:\n params.get(\"testHandle\") ||\n params.get(\"test_handle\") ||\n params.get(\"test-handle\") ||\n \"\",\n testVariantId:\n params.get(\"testVariantId\") ||\n params.get(\"test_variant_id\") ||\n params.get(\"test-variant-id\") ||\n \"\",\n testVariantHandle:\n params.get(\"testVariantHandle\") ||\n params.get(\"test_variant_handle\") ||\n params.get(\"test-variant-handle\") ||\n \"\",\n };\n }\n\n return null;\n}\n\nexport function setTestHeaders(\n headers: any,\n options: {\n previewEnabled: boolean;\n testInfoForRequest?: TestInfo;\n testFromQueryParams?: TestInput;\n }\n) {\n const { testFromQueryParams, testInfoForRequest } = options;\n\n if (testFromQueryParams) {\n headers[\"X-Pack-Test-Ignore-Test-Status\"] = true;\n\n if (testFromQueryParams.testId) {\n headers[\"X-Pack-Test-Id\"] = testFromQueryParams.testId;\n }\n\n if (testFromQueryParams.testHandle) {\n headers[\"X-Pack-Test-Handle\"] = testFromQueryParams.testHandle;\n }\n\n if (testFromQueryParams.testVariantId) {\n headers[\"X-Pack-Test-Variant-Id\"] = testFromQueryParams.testVariantId;\n }\n\n if (testFromQueryParams.testVariantHandle) {\n headers[\"X-Pack-Test-Variant-Handle\"] =\n testFromQueryParams.testVariantHandle;\n }\n } else if (testInfoForRequest) {\n headers[\"X-Pack-Test-Id\"] = testInfoForRequest?.id;\n headers[\"X-Pack-Test-Variant-Id\"] = testInfoForRequest?.testVariant?.id;\n }\n\n return headers;\n}\n","import { Test, TestTargetAudienceAttributes } from \"./test\";\nimport { Engine, Rule } from 'json-rules-engine';\nimport createDebug from \"debug\";\n\nconst debug = createDebug(\"pack:ab-testing:local-resolver\");\n\n// Types for json-rules-engine\ntype EngineResult = any;\n\nexport interface TestWithRules {\n id: string;\n handle: string;\n rules: Array<{\n attribute: string;\n operator: string;\n value: string;\n }>;\n testVariants: Array<{\n id: string;\n handle: string;\n trafficPercentage: number;\n }>;\n}\n\n/**\n * Local test resolver that evaluates test rules without external API calls\n * Rules are stored in memory for the request duration only - caching is handled by fetchTestRulesShared\n */\nexport class LocalTestResolver {\n private testRules: TestWithRules[] = [];\n\n constructor() {\n // No caching logic - rules are managed by fetchTestRulesShared with proper cache invalidation\n }\n\n /**\n * Set test rules (from the shared cache)\n */\n setTestRules(rules: TestWithRules[]) {\n this.testRules = rules;\n }\n\n /**\n * Check if rules are loaded\n */\n hasRules(): boolean {\n return this.testRules.length > 0;\n }\n\n /**\n * Check if a specific test is still active in the current rules\n */\n isTestActive(testId: string): boolean {\n return this.testRules.some(test => test.id === testId);\n }\n\n /**\n * Get fresh test data by ID from current rules\n */\n getTestById(testId: string): TestWithRules | null {\n return this.testRules.find(test => test.id === testId) || null;\n }\n\n /**\n * Get random number for test assignment\n */\n private getRandomNumber(max: number, min: number = 0): number {\n return Math.floor(Math.random() * (max - min + 1) + min);\n }\n\n /**\n * Evaluate test rules and assign a variant\n */\n async assignTest(\n attributes: TestTargetAudienceAttributes,\n _sessionId: string\n ): Promise<Test | null> {\n debug(\"[Pack Test LocalResolver] Starting test assignment:\", JSON.stringify({\n totalRules: this.testRules.length,\n attributes\n }));\n\n if (!this.testRules.length) {\n debug(\"[Pack Test LocalResolver] No test rules available\");\n return null;\n }\n\n // Filter tests by evaluating rules\n const eligibleTests = await this.evaluateRules(this.testRules, attributes);\n\n debug(\"[Pack Test LocalResolver] Rule evaluation result:\", JSON.stringify({\n totalTests: this.testRules.length,\n eligibleTests: eligibleTests.length,\n eligibleTestIds: eligibleTests.map(t => ({ id: t.id, handle: t.handle }))\n }));\n\n if (!eligibleTests.length) {\n debug(\"[Pack Test LocalResolver] No eligible tests found\");\n return null;\n }\n\n // Select a random test from eligible ones\n const randomTestIndex = this.getRandomNumber(eligibleTests.length - 1);\n const selectedTest = eligibleTests[randomTestIndex];\n\n debug(\"[Pack Test LocalResolver] Selected test:\", JSON.stringify({\n testId: selectedTest.id,\n testHandle: selectedTest.handle,\n randomIndex: randomTestIndex,\n totalEligible: eligibleTests.length\n }));\n\n // Assign variant based on traffic percentage\n const randomPercentage = this.getRandomNumber(100, 1);\n let accumulatedPercentage = 0;\n\n debug(\"[Pack Test LocalResolver] Starting variant assignment:\", JSON.stringify({\n randomPercentage,\n variants: selectedTest.testVariants.map(v => ({\n id: v.id,\n handle: v.handle,\n trafficPercentage: v.trafficPercentage\n }))\n }));\n\n for (const variant of selectedTest.testVariants) {\n accumulatedPercentage += variant.trafficPercentage * 100;\n\n debug(\"[Pack Test LocalResolver] Checking variant:\", JSON.stringify({\n variantId: variant.id,\n variantHandle: variant.handle,\n trafficPercentage: variant.trafficPercentage,\n accumulatedPercentage,\n randomPercentage,\n isSelected: accumulatedPercentage >= randomPercentage\n }));\n\n if (accumulatedPercentage >= randomPercentage) {\n const result = {\n id: selectedTest.id,\n handle: selectedTest.handle,\n testVariant: {\n id: variant.id,\n handle: variant.handle,\n },\n };\n debug(\"[Pack Test LocalResolver] Variant selected:\", JSON.stringify(result));\n return result;\n }\n }\n\n debug(\"[Pack Test LocalResolver] No variant selected (should not happen)\");\n return null;\n }\n\n /**\n * Evaluate rules using json-rules-engine (same as tests-service)\n */\n private async evaluateRules(\n tests: TestWithRules[],\n attributes: TestTargetAudienceAttributes\n ): Promise<TestWithRules[]> {\n debug(\"[Pack Test LocalResolver] Starting rule evaluation:\", JSON.stringify({\n totalTests: tests.length,\n attributes,\n isClientSide: typeof window !== \"undefined\"\n }));\n\n // Only run on server side\n if (typeof window !== \"undefined\") {\n debug(\"[Pack Test LocalResolver] Client side - returning all tests\");\n return tests; // Return all tests on client side\n }\n\n const engineResultsPromises: (Promise<EngineResult> | undefined)[] =\n tests.map((test, index) => {\n const { rules } = test;\n \n debug(`[Pack Test LocalResolver] Processing test ${index}:`, JSON.stringify({\n testId: test.id,\n testHandle: test.handle,\n rulesCount: rules?.length || 0,\n rules: rules\n }));\n \n if (rules && Array.isArray(rules)) {\n if (rules.length === 0) {\n debug(`[Pack Test LocalResolver] Test ${test.handle} has no rules - targeting all`);\n // If there are no rules, targeting all, so simulate a targeted event\n return Promise.resolve({\n events: [{ type: \"targeted\" }],\n } as EngineResult);\n } else {\n const engineConditionalProperties = (\n rules.filter(\n (rule: any) =>\n rule !== null &&\n typeof rule === \"object\" &&\n Object.hasOwn(rule, \"attribute\") &&\n Object.hasOwn(rule, \"operator\") &&\n Object.hasOwn(rule, \"value\")\n ) as {\n attribute: string;\n operator: string;\n value: string;\n }[]\n ).map((rule) => ({\n fact: rule.attribute,\n operator: rule.operator,\n value: rule.value,\n }));\n\n debug(`[Pack Test LocalResolver] Test ${test.handle} engine conditions:`, JSON.stringify(engineConditionalProperties));\n\n const engineRules = [\n new Rule({\n conditions: {\n all: engineConditionalProperties,\n },\n event: {\n type: \"targeted\",\n },\n }),\n ];\n\n const engine = new Engine(engineRules, {\n allowUndefinedFacts: true,\n });\n\n // Add custom operators to the engine\n engine.addOperator<string, string>(\n \"stringContains\",\n (factValue, jsonValue) => {\n return !!factValue && factValue.includes(jsonValue);\n }\n );\n engine.addOperator<string, string>(\n \"stringDoesNotContain\",\n (factValue, jsonValue) => {\n return !!factValue && !factValue.includes(jsonValue);\n }\n );\n engine.addOperator<string, string>(\n \"matchesRegex\",\n (factValue, jsonValue) => {\n return !!factValue && new RegExp(jsonValue).test(factValue);\n }\n );\n engine.addOperator<string, string>(\n \"doesNotMatchRegex\",\n (factValue, jsonValue) => {\n return !!factValue && !new RegExp(jsonValue).test(factValue);\n }\n );\n engine.addOperator<string, string>(\n \"isSet\",\n (factValue) => !!factValue\n );\n engine.addOperator<string, string>(\n \"isNotSet\",\n (factValue) => !factValue\n );\n\n const result = engine.run(attributes);\n debug(`[Pack Test LocalResolver] Engine result for test ${test.handle}:`, JSON.stringify(result));\n return result;\n }\n }\n\n debug(`[Pack Test LocalResolver] Test ${test.handle} has invalid rules`);\n // Return undefined for tests without valid rules\n return undefined;\n });\n\n const engineResults = await Promise.all(engineResultsPromises);\n\n debug(\"[Pack Test LocalResolver] All engine results:\", JSON.stringify(engineResults));\n\n const eligibleTests = tests.filter(\n (test, index) => {\n const hasTargetedEvent = !!engineResults?.[index]?.events.find((event: any) => event.type === \"targeted\");\n debug(`[Pack Test LocalResolver] Test ${test.handle} eligibility:`, JSON.stringify({\n hasTargetedEvent,\n events: engineResults?.[index]?.events\n }));\n return hasTargetedEvent;\n }\n );\n\n debug(\"[Pack Test LocalResolver] Final eligible tests:\", JSON.stringify({\n eligibleCount: eligibleTests.length,\n eligibleTests: eligibleTests.map(t => ({ id: t.id, handle: t.handle }))\n }));\n\n return eligibleTests;\n }\n\n /**\n * Resolve test and variant IDs from their handles\n */\n resolveTestIdsFromHandles(testHandle: string, variantHandle: string): {\n testId?: string;\n variantId?: string;\n } | null {\n const test = this.testRules.find(t => t.handle === testHandle);\n if (!test) {\n return null;\n }\n\n const variant = test.testVariants?.find(v => v.handle === variantHandle);\n if (!variant) {\n return null;\n }\n\n return {\n testId: test.id,\n variantId: variant.id\n };\n }\n}\n","import {\n type ActionFunction,\n type LoaderFunction,\n} from \"@remix-run/server-runtime\";\nimport { PackCustomizerMeta } from \"../create-pack-client\";\n\nconst ROOT_PATH = \"/\" as const;\n\ntype JsonFunction = <Data>(\n data: Data,\n init?: number | ResponseInit\n) => TypedResponse<Data>;\n\ntype RedirectFunction = (url: string, init?: number | ResponseInit) => Response;\n\n// must be a type since this is a subtype of response\n// interfaces must conform to the types they extend\ntype TypedResponse<T = unknown> = Omit<Response, \"json\"> & {\n json(): Promise<T>;\n};\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A not found response. Sets the status code.\n */\nfunction notFound(message = \"Not Found\") {\n return new Response(message, { status: 404, statusText: \"Not Found\" });\n}\n\nfunction isLocalPath(request: Request, url: string) {\n // Our domain, based on the current request path\n const currentUrl = new URL(request.url);\n\n // If url is relative, the 2nd argument will act as the base domain.\n const urlToCheck = new URL(url, currentUrl.origin);\n\n // If the origins don't match the slug is not on our domain.\n return currentUrl.origin === urlToCheck.origin;\n}\n\n/**\n * A `POST` request to this route will exit preview mode\n * POST /api/edit Content-Type: application/x-www-form-urlencoded\n */\nexport const action: ActionFunction = async ({ request, context }) => {\n const { session } = context.pack;\n\n if (!(request.method === \"POST\" && session)) {\n return json({ message: \"Method not allowed\" }, 405);\n }\n\n const body = await request.formData();\n const slug = (body.get(\"slug\") as string) ?? ROOT_PATH;\n const redirectTo = isLocalPath(request, slug) ? slug : ROOT_PATH;\n\n await session.destroy()\n\n return redirect(redirectTo);\n};\n\n/**\n * A `GET` request to this route will enter preview mode\n */\nexport const loader: LoaderFunction = async function ({ request, context }) {\n const { pack } = context;\n\n if (!pack.session) return notFound();\n\n const { searchParams } = new URL(request.url);\n\n const token = searchParams.get(\"token\");\n const environment = searchParams.get(\"environment\");\n const path = searchParams.get(\"path\") ?? ROOT_PATH;\n const customizerMeta = searchParams.get(\"customizerMeta\");\n const redirectTo = isLocalPath(request, path) ? path : ROOT_PATH;\n\n if (!searchParams.has(\"token\")) {\n throw new MissingTokenError();\n }\n\n const validatedToken = await pack.isValidEditToken(token);\n\n if (!validatedToken) {\n throw new InvalidTokenError();\n }\n\n let customizerMetaJson: PackCustomizerMeta | null;\n try {\n customizerMetaJson = customizerMeta\n ? (JSON.parse(customizerMeta) as PackCustomizerMeta)\n : null;\n } catch (_error) {\n customizerMetaJson = null;\n }\n\n pack.session.set(\"previewEnabled\", true);\n pack.session.set(\"environment\", environment);\n pack.session.set(\"customizerMeta\", customizerMetaJson);\n\n return redirect(redirectTo, {\n status: 307\n });\n};\n\nclass MissingTokenError extends Response {\n constructor() {\n super(\"Missing token\", { status: 401, statusText: \"Unauthorized\" });\n }\n}\n\nclass InvalidTokenError extends Response {\n constructor() {\n super(\"Invalid token\", { status: 401, statusText: \"Unauthorized\" });\n }\n}\n","import { useLoaderData, useMatches, useRevalidator } from \"@remix-run/react\";\nimport Cookies from \"js-cookie\";\nimport { useEffect, useState } from \"react\";\n\nimport { usePackTestContext } from \"./pack-test-context\";\nimport { Test } from \"./test\";\n\nconst usePackLoaderData = <\n T extends {\n packTestInfo?: Test;\n },\n>(): void => {\n const [exposedTestInfo, setExposedTestInfo] = useState<Test | undefined>();\n\n let packTestInfo: Test | undefined;\n let packIsPreviewMode: boolean | undefined;\n let revalidator: ReturnType<typeof useRevalidator> | undefined;\n\n try {\n const loaderData = useLoaderData<T>();\n packTestInfo = loaderData?.packTestInfo;\n\n const [root] = useMatches();\n packIsPreviewMode = (root?.data as { packIsPreviewMode?: boolean })\n ?.packIsPreviewMode;\n\n revalidator = useRevalidator();\n } catch (error) {\n console.error(\"PackTestRoute router error:\", error);\n // Handle cases where router hooks are called outside of a data router\n packTestInfo = undefined;\n packIsPreviewMode = undefined;\n revalidator = undefined;\n }\n\n const {\n testExposureCallback,\n hasUserConsent,\n pendingExposureQueue,\n setPendingExposureQueue,\n } = usePackTestContext();\n\n const exposedTestCookieString = Cookies.get(\"exposedTest\");\n\n useEffect(() => {\n if (\n packTestInfo &&\n !packIsPreviewMode &&\n !hasUserConsent &&\n exposedTestCookieString &&\n exposedTestInfo\n ) {\n // Add to the pending exposure queue if no user consent\n setPendingExposureQueue?.((prev) => {\n const newQueue = new Map(prev);\n newQueue.set(packTestInfo.id, {\n packTestInfo,\n exposureTime: Date.now(),\n });\n return newQueue;\n });\n }\n }, [\n hasUserConsent,\n packTestInfo,\n packIsPreviewMode,\n exposedTestCookieString,\n exposedTestInfo,\n ]);\n\n useEffect(() => {\n if (\n packTestInfo &&\n hasUserConsent &&\n !exposedTestCookieString &&\n !packIsPreviewMode &&\n !exposedTestInfo\n ) {\n // Set exposedTest cookie used by server to determine if session has been exposed to test\n const expires = new Date();\n expires.setHours(expires.getHours() + 24);\n\n Cookies.set(\"exposedTest\", JSON.stringify(packTestInfo), {\n expires,\n });\n\n setExposedTestInfo(packTestInfo);\n\n // Need to go through current exposure tracking callback queue\n // call tracking callbacks for previous exposures\n pendingExposureQueue?.forEach((data, key) => {\n try {\n testExposureCallback?.({\n ...data.packTestInfo,\n exposureTime: data.exposureTime,\n });\n setPendingExposureQueue?.((prev) => {\n const newQueue = new Map(prev);\n newQueue.delete(key);\n return newQueue;\n });\n } catch (error) {\n console.error(\"Failed to call testExposure after consent:\", error);\n }\n });\n\n testExposureCallback?.({ ...packTestInfo, exposureTime: Date.now() });\n\n // TODO: This results in flashing of UI driven by site settings data.\n // Need non-flashing solution.\n // Delay revalidation to avoid v3_lazyRouteDiscovery race condition bug\n // See: https://github.com/remix-run/remix/issues/10263\n setTimeout(() => {\n revalidator?.revalidate();\n }, 750);\n }\n }, [packTestInfo, testExposureCallback, exposedTestInfo, hasUserConsent, packIsPreviewMode]);\n};\n\nexport const PackTestRoute = () => {\n usePackLoaderData();\n\n return null;\n};\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import { createContext, useContext, Dispatch, SetStateAction } from \"react\";\n\nexport interface Test {\n id: string;\n handle: string;\n testVariant: {\n id: string;\n handle: string;\n };\n}\n\ninterface TestExposureCallbackArg extends Test {\n exposureTime: number;\n}\n\ntype PackTestContextValue = {\n testExposureCallback?: (test: TestExposureCallbackArg) => void;\n hasUserConsent?: boolean | undefined;\n pendingExposureQueue?: Map<any, any>;\n setPendingExposureQueue?: Dispatch<SetStateAction<Map<any, any>>>;\n exposedExperiments?: Set<unknown>;\n};\n\nexport const PackTestContext = createContext<PackTestContextValue>({});\n\nexport const usePackTestContext = () => useContext(PackTestContext);\n","import React, { useState, PropsWithChildren } from \"react\";\nimport { PackTestContext, Test } from \"./pack-test-context\";\n\ninterface PackContentProps {\n testExposureCallback?: (test: Test) => void;\n hasUserConsent?: boolean;\n}\n\nexport function PackTestProvider({\n children,\n testExposureCallback,\n hasUserConsent = false,\n}: PropsWithChildren<PackContentProps>) {\n const [pendingExposureQueue, setPendingExposureQueue] = useState(new Map());\n const [exposedExperiments] = useState(new Set());\n\n return (\n <PackTestContext.Provider\n value={{\n testExposureCallback: (test) => {\n testExposureCallback && testExposureCallback(test);\n },\n hasUserConsent,\n pendingExposureQueue,\n setPendingExposureQueue,\n exposedExperiments,\n }}\n >\n {children}\n </PackTestContext.Provider>\n );\n}\n","import { Test } from \"./test\";\nimport { useRouteLoaderData } from \"@remix-run/react\";\n\nexport function useAbTest(): Test | null {\n // @ts-ignore\n const { abTest, packAbTest } = useRouteLoaderData(\"root\");\n\n if (abTest === undefined && packAbTest === undefined) {\n throw new Error(\n \"ERR_HY_MISSING_AB_TEST_CONTEXT: No A/B test found, are you sure you have call ...pack.getPackContextData() on root loader return? Doc: https://docs.packdigital.com/err/ERR_HY_MISSING_AB_TEST_CONTEXT\"\n );\n }\n\n return abTest || packAbTest;\n}\n\nexport function useAbTestSessionId(): string {\n // @ts-ignore\n const { sessionId, packSessionId } = useRouteLoaderData(\"root\");\n\n if (!sessionId && !packSessionId) {\n throw new Error(\n \"ERR_HY_MISSING_SESSION_ID: No Session ID found, are you sure you have call ...pack.getPackContextData() on root loader return? Doc: https://docs.packdigital.com/err/ERR_HY_MISSING_SESSION_ID\"\n );\n }\n\n return sessionId || packSessionId;\n}\n\nexport function useAbTestId(): string | undefined {\n const test = useAbTest();\n\n return test?.id;\n}\n\nexport function useAbTestHandle(): string | undefined {\n const test = useAbTest();\n\n return test?.handle;\n}\n\nexport function useAbTestVariantId(): string | undefined {\n const test = useAbTest();\n\n return test?.testVariant?.id;\n}\n\nexport function useAbTestVariantHandle(): string | undefined {\n const test = useAbTest();\n\n return test?.testVariant?.handle;\n}\n"],"mappings":"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","names":["window","undefined","regexes","ua","parser","parse","serialize","decode","parse","createDebug","hash","debug","self","curry","keys","Fact","getCacheKey","debug","Condition","stringify","clone","parent","depth","RuleResult","stringify","ReflectApply","ReflectOwnKeys","NumberIsNaN","once","keys","self","Rule","stringify","evaluateCondition","evaluateConditions","prioritizeAndRun","_loop","i","any","all","processResult","Operator","self","UndefinedFactError","i","self","toString","Almanac","factValue","SuccessEventFact","self","Engine","hash","defaultValidate","locale","parseAcceptLanguage","languageHeaderValue","options","ignoreWildcard","validate","split","map","lang","q","trimmedLocale","trim","numQ","Number","replace","isNaN","sort","q1","q2","flatMap","action","parser","sendEvent","handleRequest","hasUserConsent","import_cookie","cookie","hash","crypto","createCookie","createCookieSessionStorage","createDebug","isSafari","createCookieSessionStorage","createCookie","cookie","cookie","import_debug","debug","createDebug","import_debug","debug","createDebug","URL","resp","isFirstExposure","testDataWithoutFlag","result","import_debug","debug","createDebug","sha256","hash","URL","resp","handleRequest","request","token","init","converter","useEffect","hasUserConsent","useEffect","useState","hasUserConsent","useState"]}
|