diff --git a/404.html b/404.html index 65f2d11b3..edad65992 100644 --- a/404.html +++ b/404.html @@ -48,7 +48,7 @@ } } }) - 404: Not Found | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

Not Found

You just hit a route that doesn't exist... the sadness.

© 2022 All Rights Reserved
404: Not Found | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

Not Found

You just hit a route that doesn't exist... the sadness.

© 2023 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/404/index.html b/404/index.html index e2f0c7111..6d4f88fd4 100644 --- a/404/index.html +++ b/404/index.html @@ -48,7 +48,7 @@ } } }) - 404: Not Found | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

Not Found

You just hit a route that doesn't exist... the sadness.

© 2022 All Rights Reserved
404: Not Found | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

Not Found

You just hit a route that doesn't exist... the sadness.

© 2023 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/640-ed44390873d02c1ac634.js.map b/640-ed44390873d02c1ac634.js.map index ad84b2c8a..12e07e6f0 100644 --- a/640-ed44390873d02c1ac634.js.map +++ b/640-ed44390873d02c1ac634.js.map @@ -1 +1 @@ -{"version":3,"file":"640-ed44390873d02c1ac634.js","mappings":"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","sources":["webpack://website/../../node_modules/web-vitals/dist/web-vitals.base.js"],"sourcesContent":["var t = function t(_t, e) {\n return {\n name: _t,\n value: void 0 === e ? -1 : e,\n delta: 0,\n entries: [],\n id: \"v1-\".concat(Date.now(), \"-\").concat(Math.floor(8999999999999 * Math.random()) + 1e12)\n };\n},\n e = function e(t, _e) {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(t)) {\n if (\"first-input\" === t && !(\"PerformanceEventTiming\" in self)) return;\n var n = new PerformanceObserver(function (t) {\n return t.getEntries().map(_e);\n });\n return n.observe({\n type: t,\n buffered: !0\n }), n;\n }\n } catch (t) {}\n},\n n = function n(t, e) {\n var n = function n(i) {\n \"pagehide\" !== i.type && \"hidden\" !== document.visibilityState || (t(i), e && (removeEventListener(\"visibilitychange\", n, !0), removeEventListener(\"pagehide\", n, !0)));\n };\n\n addEventListener(\"visibilitychange\", n, !0), addEventListener(\"pagehide\", n, !0);\n},\n i = function i(t) {\n addEventListener(\"pageshow\", function (e) {\n e.persisted && t(e);\n }, !0);\n},\n a = \"function\" == typeof WeakSet ? new WeakSet() : new Set(),\n r = function r(t, e, n) {\n var i;\n return function () {\n e.value >= 0 && (n || a.has(e) || \"hidden\" === document.visibilityState) && (e.delta = e.value - (i || 0), (e.delta || void 0 === i) && (i = e.value, t(e)));\n };\n},\n o = function o(a, _o) {\n var u,\n c = t(\"CLS\", 0),\n s = function s(t) {\n t.hadRecentInput || (c.value += t.value, c.entries.push(t), u());\n },\n f = e(\"layout-shift\", s);\n\n f && (u = r(a, c, _o), n(function () {\n f.takeRecords().map(s), u();\n }), i(function () {\n c = t(\"CLS\", 0), u = r(a, c, _o);\n }));\n},\n u = -1,\n c = function c() {\n n(function (t) {\n var e = t.timeStamp;\n u = e;\n }, !0);\n},\n s = function s() {\n return u < 0 && ((u = self.webVitals.firstHiddenTime) === 1 / 0 && c(), i(function () {\n setTimeout(function () {\n u = \"hidden\" === document.visibilityState ? 0 : 1 / 0, c();\n }, 0);\n })), {\n get timeStamp() {\n return u;\n }\n\n };\n},\n f = function f(n, o) {\n var u,\n c = s(),\n f = t(\"FCP\"),\n d = function d(t) {\n \"first-contentful-paint\" === t.name && (v && v.disconnect(), t.startTime < c.timeStamp && (f.value = t.startTime, f.entries.push(t), a.add(f), u()));\n },\n m = performance.getEntriesByName(\"first-contentful-paint\")[0],\n v = m ? null : e(\"paint\", d);\n\n (m || v) && (u = r(n, f, o), m && d(m), i(function (e) {\n f = t(\"FCP\"), u = r(n, f, o), requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n f.value = performance.now() - e.timeStamp, a.add(f), u();\n });\n });\n }));\n},\n d = function d(o, u) {\n var c,\n f = s(),\n d = t(\"FID\"),\n m = function m(t) {\n t.startTime < f.timeStamp && (d.value = t.processingStart - t.startTime, d.entries.push(t), a.add(d), c());\n },\n v = e(\"first-input\", m);\n\n c = r(o, d, u), v && n(function () {\n v.takeRecords().map(m), v.disconnect();\n }, !0), v || window.webVitals.firstInputPolyfill(m), i(function () {\n d = t(\"FID\"), c = r(o, d, u), window.webVitals.resetFirstInputPolyfill(), window.webVitals.firstInputPolyfill(m);\n });\n},\n m = function m(o, u) {\n var c,\n f = s(),\n d = t(\"LCP\"),\n m = function m(t) {\n var e = t.startTime;\n e < f.timeStamp && (d.value = e, d.entries.push(t)), c();\n },\n v = e(\"largest-contentful-paint\", m);\n\n if (v) {\n c = r(o, d, u);\n\n var p = function p() {\n a.has(d) || (v.takeRecords().map(m), v.disconnect(), a.add(d), c());\n };\n\n [\"keydown\", \"click\"].forEach(function (t) {\n addEventListener(t, p, {\n once: !0,\n capture: !0\n });\n }), n(p, !0), i(function (e) {\n d = t(\"LCP\"), c = r(o, d, u), requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n d.value = performance.now() - e.timeStamp, a.add(d), c();\n });\n });\n });\n }\n},\n v = function v(e) {\n var n,\n i = t(\"TTFB\");\n n = function n() {\n try {\n var t = performance.getEntriesByType(\"navigation\")[0] || function () {\n var t = performance.timing,\n e = {\n entryType: \"navigation\",\n startTime: 0\n };\n\n for (var n in t) {\n \"navigationStart\" !== n && \"toJSON\" !== n && (e[n] = Math.max(t[n] - t.navigationStart, 0));\n }\n\n return e;\n }();\n\n if (i.value = i.delta = t.responseStart, i.value < 0) return;\n i.entries = [t], e(i);\n } catch (t) {}\n }, \"complete\" === document.readyState ? setTimeout(n, 0) : addEventListener(\"pageshow\", n);\n};\n\nexport { o as getCLS, f as getFCP, d as getFID, m as getLCP, v as getTTFB };"],"names":["t","_t","e","name","value","delta","entries","id","concat","Date","now","Math","floor","random","_e","PerformanceObserver","supportedEntryTypes","includes","self","n","getEntries","map","observe","type","buffered","i","document","visibilityState","removeEventListener","addEventListener","persisted","a","WeakSet","Set","r","has","o","_o","u","c","s","hadRecentInput","push","f","takeRecords","timeStamp","webVitals","firstHiddenTime","setTimeout","d","v","disconnect","startTime","add","m","performance","getEntriesByName","requestAnimationFrame","processingStart","window","firstInputPolyfill","resetFirstInputPolyfill","p","forEach","once","capture","getEntriesByType","timing","entryType","max","navigationStart","responseStart","readyState"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"640-ed44390873d02c1ac634.js","mappings":"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","sources":["webpack://website/../../node_modules/web-vitals/dist/web-vitals.base.js"],"sourcesContent":["var t = function t(_t, e) {\n return {\n name: _t,\n value: void 0 === e ? -1 : e,\n delta: 0,\n entries: [],\n id: \"v1-\".concat(Date.now(), \"-\").concat(Math.floor(8999999999999 * Math.random()) + 1e12)\n };\n},\n e = function e(t, _e) {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(t)) {\n if (\"first-input\" === t && !(\"PerformanceEventTiming\" in self)) return;\n var n = new PerformanceObserver(function (t) {\n return t.getEntries().map(_e);\n });\n return n.observe({\n type: t,\n buffered: !0\n }), n;\n }\n } catch (t) {}\n},\n n = function n(t, e) {\n var n = function n(i) {\n \"pagehide\" !== i.type && \"hidden\" !== document.visibilityState || (t(i), e && (removeEventListener(\"visibilitychange\", n, !0), removeEventListener(\"pagehide\", n, !0)));\n };\n\n addEventListener(\"visibilitychange\", n, !0), addEventListener(\"pagehide\", n, !0);\n},\n i = function i(t) {\n addEventListener(\"pageshow\", function (e) {\n e.persisted && t(e);\n }, !0);\n},\n a = \"function\" == typeof WeakSet ? new WeakSet() : new Set(),\n r = function r(t, e, n) {\n var i;\n return function () {\n e.value >= 0 && (n || a.has(e) || \"hidden\" === document.visibilityState) && (e.delta = e.value - (i || 0), (e.delta || void 0 === i) && (i = e.value, t(e)));\n };\n},\n o = function o(a, _o) {\n var u,\n c = t(\"CLS\", 0),\n s = function s(t) {\n t.hadRecentInput || (c.value += t.value, c.entries.push(t), u());\n },\n f = e(\"layout-shift\", s);\n\n f && (u = r(a, c, _o), n(function () {\n f.takeRecords().map(s), u();\n }), i(function () {\n c = t(\"CLS\", 0), u = r(a, c, _o);\n }));\n},\n u = -1,\n c = function c() {\n n(function (t) {\n var e = t.timeStamp;\n u = e;\n }, !0);\n},\n s = function s() {\n return u < 0 && ((u = self.webVitals.firstHiddenTime) === 1 / 0 && c(), i(function () {\n setTimeout(function () {\n u = \"hidden\" === document.visibilityState ? 0 : 1 / 0, c();\n }, 0);\n })), {\n get timeStamp() {\n return u;\n }\n\n };\n},\n f = function f(n, o) {\n var u,\n c = s(),\n f = t(\"FCP\"),\n d = function d(t) {\n \"first-contentful-paint\" === t.name && (v && v.disconnect(), t.startTime < c.timeStamp && (f.value = t.startTime, f.entries.push(t), a.add(f), u()));\n },\n m = performance.getEntriesByName(\"first-contentful-paint\")[0],\n v = m ? null : e(\"paint\", d);\n\n (m || v) && (u = r(n, f, o), m && d(m), i(function (e) {\n f = t(\"FCP\"), u = r(n, f, o), requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n f.value = performance.now() - e.timeStamp, a.add(f), u();\n });\n });\n }));\n},\n d = function d(o, u) {\n var c,\n f = s(),\n d = t(\"FID\"),\n m = function m(t) {\n t.startTime < f.timeStamp && (d.value = t.processingStart - t.startTime, d.entries.push(t), a.add(d), c());\n },\n v = e(\"first-input\", m);\n\n c = r(o, d, u), v && n(function () {\n v.takeRecords().map(m), v.disconnect();\n }, !0), v || window.webVitals.firstInputPolyfill(m), i(function () {\n d = t(\"FID\"), c = r(o, d, u), window.webVitals.resetFirstInputPolyfill(), window.webVitals.firstInputPolyfill(m);\n });\n},\n m = function m(o, u) {\n var c,\n f = s(),\n d = t(\"LCP\"),\n m = function m(t) {\n var e = t.startTime;\n e < f.timeStamp && (d.value = e, d.entries.push(t)), c();\n },\n v = e(\"largest-contentful-paint\", m);\n\n if (v) {\n c = r(o, d, u);\n\n var p = function p() {\n a.has(d) || (v.takeRecords().map(m), v.disconnect(), a.add(d), c());\n };\n\n [\"keydown\", \"click\"].forEach(function (t) {\n addEventListener(t, p, {\n once: !0,\n capture: !0\n });\n }), n(p, !0), i(function (e) {\n d = t(\"LCP\"), c = r(o, d, u), requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n d.value = performance.now() - e.timeStamp, a.add(d), c();\n });\n });\n });\n }\n},\n v = function v(e) {\n var n,\n i = t(\"TTFB\");\n n = function n() {\n try {\n var t = performance.getEntriesByType(\"navigation\")[0] || function () {\n var t = performance.timing,\n e = {\n entryType: \"navigation\",\n startTime: 0\n };\n\n for (var n in t) {\n \"navigationStart\" !== n && \"toJSON\" !== n && (e[n] = Math.max(t[n] - t.navigationStart, 0));\n }\n\n return e;\n }();\n\n if (i.value = i.delta = t.responseStart, i.value < 0) return;\n i.entries = [t], e(i);\n } catch (t) {}\n }, \"complete\" === document.readyState ? setTimeout(n, 0) : addEventListener(\"pageshow\", n);\n};\n\nexport { o as getCLS, f as getFCP, d as getFID, m as getLCP, v as getTTFB };"],"names":["t","_t","e","name","value","delta","entries","id","concat","Date","now","Math","floor","random","_e","PerformanceObserver","supportedEntryTypes","includes","self","n","getEntries","map","observe","type","buffered","i","document","visibilityState","removeEventListener","addEventListener","persisted","a","WeakSet","Set","r","has","o","_o","u","c","s","hadRecentInput","push","f","takeRecords","timeStamp","webVitals","firstHiddenTime","setTimeout","d","v","disconnect","startTime","add","m","performance","getEntriesByName","requestAnimationFrame","processingStart","window","firstInputPolyfill","resetFirstInputPolyfill","p","forEach","once","capture","getEntriesByType","timing","entryType","max","navigationStart","responseStart","readyState"],"sourceRoot":""} \ No newline at end of file diff --git a/app-2825acd8c555263e0b03.js.map b/app-2825acd8c555263e0b03.js.map index b34d8ba0a..e7ca4878f 100644 --- a/app-2825acd8c555263e0b03.js.map +++ b/app-2825acd8c555263e0b03.js.map @@ -1 +1 @@ -{"version":3,"file":"app-2825acd8c555263e0b03.js","mappings":"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","sources":["webpack://website/../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://website/../../node_modules/@babel/runtime/helpers/extends.js","webpack://website/../../node_modules/@babel/runtime/helpers/inheritsLoose.js","webpack://website/../../node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack://website/../../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack://website/../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/lib/history.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/lib/utils.js","webpack://website/../../node_modules/gatsby/dist/internal-plugins/bundle-optimisations/polyfills/object-assign.js","webpack://website/../../node_modules/gatsby-link/index.js","webpack://website/../../node_modules/gatsby-link/parse-path.js","webpack://website/../../node_modules/gatsby-react-router-scroll/index.js","webpack://website/../../node_modules/gatsby-react-router-scroll/scroll-handler.js","webpack://website/../../node_modules/gatsby-react-router-scroll/session-storage.js","webpack://website/../../node_modules/gatsby-react-router-scroll/use-scroll-restoration.js","webpack://website/../../node_modules/gatsby-plugin-google-gtag/gatsby-browser.js","webpack://website/../../node_modules/gatsby-plugin-google-tagmanager/gatsby-browser.js","webpack://website/../../node_modules/gatsby-plugin-manifest/gatsby-browser.js","webpack://website/../../node_modules/gatsby-plugin-manifest/get-manifest-pathname.js","webpack://website/../../node_modules/gatsby-remark-autolink-headers/gatsby-browser.js","webpack://website/../../node_modules/gatsby-remark-images/constants.js","webpack://website/../../node_modules/gatsby-remark-images/gatsby-browser.js","webpack://website/./.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js","webpack://website/./.cache/api-runner-browser-plugins.js","webpack://website/./.cache/api-runner-browser.js","webpack://website/../../node_modules/mitt/dist/mitt.es.js","webpack://website/./.cache/emitter.js","webpack://website/./.cache/normalize-page-path.js","webpack://website/./.cache/find-path.js","webpack://website/./.cache/gatsby-browser-entry.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://website/./.cache/prefetch.js","webpack://website/./.cache/loader.js","webpack://website/./.cache/page-renderer.js","webpack://website/./.cache/route-announcer-props.js","webpack://website/./.cache/navigation.js","webpack://website/../../node_modules/shallow-compare/es/index.js","webpack://website/./.cache/ensure-resources.js","webpack://website/./.cache/production-app.js","webpack://website/./.cache/public-page-renderer-prod.js","webpack://website/./.cache/public-page-renderer.js","webpack://website/./.cache/react-lifecycles-compat.js","webpack://website/./.cache/redirect-utils.js","webpack://website/./.cache/register-service-worker.js","webpack://website/./.cache/strip-prefix.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/es/lib/utils.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/es/lib/history.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/es/index.js","webpack://website/../../node_modules/invariant/browser.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"],"sourcesContent":["function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inheritsLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","\"use strict\";\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexports.globalHistory = globalHistory;\nexports.navigate = navigate;\nexports.createHistory = createHistory;\nexports.createMemorySource = createMemorySource;","\"use strict\";\n\nexports.__esModule = true;\nexports.shallowCompare = exports.validateRedirect = exports.insertParams = exports.resolve = exports.match = exports.pick = exports.startsWith = undefined;\n\nvar _invariant = require(\"invariant\");\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? (0, _invariant2.default)(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : (0, _invariant2.default)(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexports.startsWith = startsWith;\nexports.pick = pick;\nexports.match = match;\nexports.resolve = resolve;\nexports.insertParams = insertParams;\nexports.validateRedirect = validateRedirect;\nexports.shallowCompare = shallowCompare;","\"use strict\";\n\nmodule.exports = Object.assign;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.withPrefix = withPrefix;\nexports.withAssetPrefix = withAssetPrefix;\nexports.navigate = exports.default = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nvar _utils = require(\"@gatsbyjs/reach-router/lib/utils\");\n\nvar _parsePath = require(\"./parse-path\");\n\nexports.parsePath = _parsePath.parsePath;\nvar _excluded = [\"to\", \"getProps\", \"onClick\", \"onMouseEnter\", \"activeClassName\", \"activeStyle\", \"innerRef\", \"partiallyActive\", \"state\", \"replace\", \"_location\"];\n\nvar isAbsolutePath = function isAbsolutePath(path) {\n return path === null || path === void 0 ? void 0 : path.startsWith(\"/\");\n};\n\nfunction withPrefix(path, prefix) {\n var _ref, _prefix;\n\n if (prefix === void 0) {\n prefix = getGlobalBasePrefix();\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n if (path.startsWith(\"./\") || path.startsWith(\"../\")) {\n return path;\n }\n\n var base = (_ref = (_prefix = prefix) !== null && _prefix !== void 0 ? _prefix : getGlobalPathPrefix()) !== null && _ref !== void 0 ? _ref : \"/\";\n return \"\" + (base !== null && base !== void 0 && base.endsWith(\"/\") ? base.slice(0, -1) : base) + (path.startsWith(\"/\") ? path : \"/\" + path);\n} // These global values are wrapped in typeof clauses to ensure the values exist.\n// This is especially problematic in unit testing of this component.\n\n\nvar getGlobalPathPrefix = function getGlobalPathPrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __PATH_PREFIX__ !== \"undefined\" ? __PATH_PREFIX__ : undefined : __PATH_PREFIX__;\n};\n\nvar getGlobalBasePrefix = function getGlobalBasePrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __BASE_PATH__ !== \"undefined\" ? __BASE_PATH__ : undefined : __BASE_PATH__;\n};\n\nvar isLocalLink = function isLocalLink(path) {\n return path && !path.startsWith(\"http://\") && !path.startsWith(\"https://\") && !path.startsWith(\"//\");\n};\n\nfunction withAssetPrefix(path) {\n return withPrefix(path, getGlobalPathPrefix());\n}\n\nfunction absolutify(path, current) {\n // If it's already absolute, return as-is\n if (isAbsolutePath(path)) {\n return path;\n }\n\n return (0, _utils.resolve)(path, current);\n}\n\nvar rewriteLinkPath = function rewriteLinkPath(path, relativeTo) {\n if (typeof path === \"number\") {\n return path;\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n return isAbsolutePath(path) ? withPrefix(path) : absolutify(path, relativeTo);\n};\n\nvar NavLinkPropTypes = {\n activeClassName: _propTypes.default.string,\n activeStyle: _propTypes.default.object,\n partiallyActive: _propTypes.default.bool\n}; // Set up IntersectionObserver\n\nvar createIntersectionObserver = function createIntersectionObserver(el, cb) {\n var io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (el === entry.target) {\n // Check if element is within viewport, remove listener, destroy observer, and run link callback.\n // MSEdge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(el);\n io.disconnect();\n cb();\n }\n }\n });\n }); // Add element to the observer\n\n io.observe(el);\n return {\n instance: io,\n el: el\n };\n};\n\nfunction GatsbyLinkLocationWrapper(props) {\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, function (_ref2) {\n var location = _ref2.location;\n return /*#__PURE__*/_react.default.createElement(GatsbyLink, (0, _extends2.default)({}, props, {\n _location: location\n }));\n });\n}\n\nvar GatsbyLink = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(GatsbyLink, _React$Component);\n\n function GatsbyLink(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // Default to no support for IntersectionObserver\n\n _this.defaultGetProps = function (_ref3) {\n var isPartiallyCurrent = _ref3.isPartiallyCurrent,\n isCurrent = _ref3.isCurrent;\n\n if (_this.props.partiallyActive ? isPartiallyCurrent : isCurrent) {\n return {\n className: [_this.props.className, _this.props.activeClassName].filter(Boolean).join(\" \"),\n style: (0, _extends2.default)({}, _this.props.style, _this.props.activeStyle)\n };\n }\n\n return null;\n };\n\n var IOSupported = false;\n\n if (typeof window !== \"undefined\" && window.IntersectionObserver) {\n IOSupported = true;\n }\n\n _this.state = {\n IOSupported: IOSupported\n };\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = GatsbyLink.prototype;\n\n _proto._prefetch = function _prefetch() {\n var currentPath = window.location.pathname; // reach router should have the correct state\n\n if (this.props._location && this.props._location.pathname) {\n currentPath = this.props._location.pathname;\n }\n\n var rewrittenPath = rewriteLinkPath(this.props.to, currentPath);\n var newPathName = (0, _parsePath.parsePath)(rewrittenPath).pathname; // Prefech is used to speed up next navigations. When you use it on the current navigation,\n // there could be a race-condition where Chrome uses the stale data instead of waiting for the network to complete\n\n if (currentPath !== newPathName) {\n ___loader.enqueue(newPathName);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // Preserve non IO functionality if no support\n if (this.props.to !== prevProps.to && !this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n // Preserve non IO functionality if no support\n if (!this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (!this.io) {\n return;\n }\n\n var _this$io = this.io,\n instance = _this$io.instance,\n el = _this$io.el;\n instance.unobserve(el);\n instance.disconnect();\n };\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.props.innerRef && this.props.innerRef.hasOwnProperty(\"current\")) {\n this.props.innerRef.current = ref;\n } else if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n if (this.state.IOSupported && ref) {\n // If IO supported and element reference found, setup Observer functionality\n this.io = createIntersectionObserver(ref, function () {\n _this2._prefetch();\n });\n }\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props = this.props,\n to = _this$props.to,\n _this$props$getProps = _this$props.getProps,\n getProps = _this$props$getProps === void 0 ? this.defaultGetProps : _this$props$getProps,\n _onClick = _this$props.onClick,\n _onMouseEnter = _this$props.onMouseEnter,\n $activeClassName = _this$props.activeClassName,\n $activeStyle = _this$props.activeStyle,\n $innerRef = _this$props.innerRef,\n partiallyActive = _this$props.partiallyActive,\n state = _this$props.state,\n replace = _this$props.replace,\n _location = _this$props._location,\n rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props, _excluded);\n\n if (process.env.NODE_ENV !== \"production\" && !isLocalLink(to)) {\n console.warn(\"External link \" + to + \" was detected in a Link component. Use the Link component only for internal links. See: https://gatsby.dev/internal-links\");\n }\n\n var prefixedTo = rewriteLinkPath(to, _location.pathname);\n\n if (!isLocalLink(prefixedTo)) {\n return /*#__PURE__*/_react.default.createElement(\"a\", (0, _extends2.default)({\n href: prefixedTo\n }, rest));\n }\n\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Link, (0, _extends2.default)({\n to: prefixedTo,\n state: state,\n getProps: getProps,\n innerRef: this.handleRef,\n onMouseEnter: function onMouseEnter(e) {\n if (_onMouseEnter) {\n _onMouseEnter(e);\n }\n\n ___loader.hovering((0, _parsePath.parsePath)(prefixedTo).pathname);\n },\n onClick: function onClick(e) {\n if (_onClick) {\n _onClick(e);\n }\n\n if (e.button === 0 && // ignore right clicks\n !_this3.props.target && // let browser handle \"target=_blank\"\n !e.defaultPrevented && // onClick prevented default\n !e.metaKey && // ignore clicks with modifier keys...\n !e.altKey && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault();\n var shouldReplace = replace;\n\n var isCurrent = encodeURI(prefixedTo) === _location.pathname;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n shouldReplace = true;\n } // Make sure the necessary scripts and data are\n // loaded before continuing.\n\n\n window.___navigate(prefixedTo, {\n state: state,\n replace: shouldReplace\n });\n }\n\n return true;\n }\n }, rest));\n };\n\n return GatsbyLink;\n}(_react.default.Component);\n\nGatsbyLink.propTypes = (0, _extends2.default)({}, NavLinkPropTypes, {\n onClick: _propTypes.default.func,\n to: _propTypes.default.string.isRequired,\n replace: _propTypes.default.bool,\n state: _propTypes.default.object\n});\n\nvar _default = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n return /*#__PURE__*/_react.default.createElement(GatsbyLinkLocationWrapper, (0, _extends2.default)({\n innerRef: ref\n }, props));\n});\n\nexports.default = _default;\n\nvar navigate = function navigate(to, options) {\n window.___navigate(rewriteLinkPath(to, window.location.pathname), options);\n};\n\nexports.navigate = navigate;","\"use strict\";\n\nexports.__esModule = true;\nexports.parsePath = parsePath;\n\nfunction parsePath(path) {\n var pathname = path || \"/\";\n var search = \"\";\n var hash = \"\";\n var hashIndex = pathname.indexOf(\"#\");\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf(\"?\");\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === \"?\" ? \"\" : search,\n hash: hash === \"#\" ? \"\" : hash\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = exports.ScrollContext = void 0;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nexports.ScrollContext = _scrollHandler.ScrollHandler;\n\nvar _useScrollRestoration = require(\"./use-scroll-restoration\");\n\nexports.useScrollRestoration = _useScrollRestoration.useScrollRestoration;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _sessionStorage = require(\"./session-storage\");\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = \"GatsbyScrollContext\";\n\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n\n function ScrollHandler() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this._stateStorage = new _sessionStorage.SessionStorage();\n _this._isTicking = false;\n _this._latestKnownScrollY = 0;\n\n _this.scrollListener = function () {\n _this._latestKnownScrollY = window.scrollY;\n\n if (!_this._isTicking) {\n _this._isTicking = true;\n requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n }\n };\n\n _this.windowScroll = function (position, prevProps) {\n if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n window.scrollTo(0, position);\n }\n };\n\n _this.scrollToHash = function (hash, prevProps) {\n var node = document.getElementById(hash.substring(1));\n\n if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n node.scrollIntoView();\n }\n };\n\n _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n\n if (!shouldUpdateScroll) {\n return true;\n } // Hack to allow accessing this._stateStorage.\n\n\n return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n };\n\n return _this;\n }\n\n var _proto = ScrollHandler.prototype;\n\n _proto._saveScroll = function _saveScroll() {\n var key = this.props.location.key || null;\n\n if (key) {\n this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n }\n\n this._isTicking = false;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n window.addEventListener(\"scroll\", this.scrollListener);\n var scrollPosition;\n var _this$props$location = this.props.location,\n key = _this$props$location.key,\n hash = _this$props$location.hash;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n\n if (scrollPosition) {\n this.windowScroll(scrollPosition, undefined);\n } else if (hash) {\n this.scrollToHash(decodeURI(hash), undefined);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n window.removeEventListener(\"scroll\", this.scrollListener);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props$location2 = this.props.location,\n hash = _this$props$location2.hash,\n key = _this$props$location2.key;\n var scrollPosition;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n /** There are two pieces of state: the browser url and\n * history state which keeps track of scroll position\n * Native behaviour prescribes that we ought to restore scroll position\n * when a user navigates back in their browser (this is the `POP` action)\n * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n * So we _always_ stick to the url as a source of truth — if the url\n * contains a hash, we scroll to it\n */\n\n\n if (hash) {\n this.scrollToHash(decodeURI(hash), prevProps);\n } else {\n this.windowScroll(scrollPosition, prevProps);\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n value: this._stateStorage\n }, this.props.children);\n };\n\n return ScrollHandler;\n}(React.Component);\n\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n shouldUpdateScroll: _propTypes.default.func,\n children: _propTypes.default.element.isRequired,\n location: _propTypes.default.object.isRequired\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = \"@@scroll|\";\nvar GATSBY_ROUTER_SCROLL_STATE = \"___GATSBY_REACT_ROUTER_SCROLL\";\n\nvar SessionStorage = /*#__PURE__*/function () {\n function SessionStorage() {}\n\n var _proto = SessionStorage.prototype;\n\n _proto.read = function read(location, key) {\n var stateKey = this.getStateKey(location, key);\n\n try {\n var value = window.sessionStorage.getItem(stateKey);\n return value ? JSON.parse(value) : 0;\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to access sessionStorage; sessionStorage is not available.\");\n }\n\n if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n }\n\n return 0;\n }\n };\n\n _proto.save = function save(location, key, value) {\n var stateKey = this.getStateKey(location, key);\n var storedValue = JSON.stringify(value);\n\n try {\n window.sessionStorage.setItem(stateKey, storedValue);\n } catch (e) {\n if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n } else {\n window[GATSBY_ROUTER_SCROLL_STATE] = {};\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to save state in sessionStorage; sessionStorage is not available.\");\n }\n }\n };\n\n _proto.getStateKey = function getStateKey(location, key) {\n var stateKeyBase = \"\" + STATE_KEY_PREFIX + location.pathname;\n return key === null || typeof key === \"undefined\" ? stateKeyBase : stateKeyBase + \"|\" + key;\n };\n\n return SessionStorage;\n}();\n\nexports.SessionStorage = SessionStorage;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nvar _react = require(\"react\");\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nfunction useScrollRestoration(identifier) {\n var location = (0, _reachRouter.useLocation)();\n var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n var ref = (0, _react.useRef)(null);\n (0, _react.useLayoutEffect)(function () {\n if (ref.current) {\n var position = state.read(location, identifier);\n ref.current.scrollTo(0, position || 0);\n }\n }, [location.key]);\n return {\n ref: ref,\n onScroll: function onScroll() {\n if (ref.current) {\n state.save(location, identifier, ref.current.scrollTop);\n }\n }\n };\n}","\"use strict\";\n\nexports.onRouteUpdate = function (_ref) {\n var location = _ref.location;\n\n if (process.env.NODE_ENV !== \"production\" || typeof gtag !== \"function\") {\n return null;\n }\n\n var pathIsExcluded = location && typeof window.excludeGtagPaths !== \"undefined\" && window.excludeGtagPaths.some(function (rx) {\n return rx.test(location.pathname);\n });\n if (pathIsExcluded) return null; // wrap inside a timeout to make sure react-helmet is done with its changes (https://github.com/gatsbyjs/gatsby/issues/11592)\n\n var sendPageView = function sendPageView() {\n var pagePath = location ? location.pathname + location.search + location.hash : undefined;\n window.gtag(\"event\", \"page_view\", {\n page_path: pagePath\n });\n };\n\n if (\"requestAnimationFrame\" in window) {\n requestAnimationFrame(function () {\n requestAnimationFrame(sendPageView);\n });\n } else {\n // simulate 2 rAF calls\n setTimeout(sendPageView, 32);\n }\n\n return null;\n};","const listOfMetricsSend = new Set();\n\nfunction debounce(fn, timeout) {\n let timer = null;\n return function (...args) {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(fn, timeout, ...args);\n };\n}\n\nfunction sendWebVitals(dataLayerName = `dataLayer`) {\n const win = window;\n\n function sendData(data) {\n if (listOfMetricsSend.has(data.name)) {\n return;\n }\n\n listOfMetricsSend.add(data.name);\n sendToGTM(data, win[dataLayerName]);\n }\n\n return import(`web-vitals/base`).then(({\n getLCP,\n getFID,\n getCLS\n }) => {\n const debouncedCLS = debounce(sendData, 3000); // we don't need to debounce FID - we send it when it happens\n\n const debouncedFID = sendData; // LCP can occur multiple times so we debounce it\n\n const debouncedLCP = debounce(sendData, 3000); // With the true flag, we measure all previous occurences too, in case we start listening to late.\n\n getCLS(debouncedCLS, true);\n getFID(debouncedFID, true);\n getLCP(debouncedLCP, true);\n });\n}\n\nfunction sendToGTM({\n name,\n value,\n id\n}, dataLayer) {\n dataLayer.push({\n event: `core-web-vitals`,\n webVitalsMeasurement: {\n name: name,\n // The `id` value will be unique to the current page load. When sending\n // multiple values from the same page (e.g. for CLS), Google Analytics can\n // compute a total by grouping on this ID (note: requires `eventLabel` to\n // be a dimension in your report).\n id,\n // Google Analytics metrics must be integers, so the value is rounded.\n // For CLS the value is first multiplied by 1000 for greater precision\n // (note: increase the multiplier for greater precision if needed).\n value: Math.round(name === `CLS` ? value * 1000 : value)\n }\n });\n}\n\nexport function onRouteUpdate(_, pluginOptions) {\n if (process.env.NODE_ENV === `production` || pluginOptions.includeInDevelopment) {\n // wrap inside a timeout to ensure the title has properly been changed\n setTimeout(() => {\n const data = pluginOptions.dataLayerName ? window[pluginOptions.dataLayerName] : window.dataLayer;\n const eventName = pluginOptions.routeChangeEventName ? pluginOptions.routeChangeEventName : `gatsby-route-change`;\n data.push({\n event: eventName\n });\n }, 50);\n }\n}\nexport function onInitialClientRender(_, pluginOptions) {\n // we only load the polyfill in production so we can't enable it in development\n if (process.env.NODE_ENV === `production` && pluginOptions.enableWebVitalsTracking) {\n sendWebVitals(pluginOptions.dataLayerName);\n }\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _gatsby = require(\"gatsby\");\n\nvar _getManifestPathname = _interopRequireDefault(require(\"./get-manifest-pathname\"));\n\n/* global __MANIFEST_PLUGIN_HAS_LOCALISATION__ */\n// when we don't have localisation in our manifest, we tree shake everything away\nif (__MANIFEST_PLUGIN_HAS_LOCALISATION__) {\n exports.onRouteUpdate = function (_ref, pluginOptions) {\n var location = _ref.location;\n var localize = pluginOptions.localize;\n var manifestFilename = (0, _getManifestPathname.default)(location.pathname, localize);\n var manifestEl = document.head.querySelector(\"link[rel=\\\"manifest\\\"]\");\n\n if (manifestEl) {\n manifestEl.setAttribute(\"href\", (0, _gatsby.withPrefix)(manifestFilename));\n }\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\n/**\n * Get a manifest filename depending on localized pathname\n *\n * @param {string} pathname\n * @param {Array<{start_url: string, lang: string}>} localizedManifests\n * @return string\n */\nvar _default = function _default(pathname, localizedManifests) {\n var defaultFilename = \"manifest.webmanifest\";\n\n if (!Array.isArray(localizedManifests)) {\n return defaultFilename;\n }\n\n var localizedManifest = localizedManifests.find(function (app) {\n return pathname.startsWith(app.start_url);\n });\n\n if (!localizedManifest) {\n return defaultFilename;\n }\n\n return \"manifest_\" + localizedManifest.lang + \".webmanifest\";\n};\n\nexports.default = _default;","\"use strict\";\n\nvar offsetY = 0;\n\nvar getTargetOffset = function getTargetOffset(hash) {\n var id = window.decodeURI(hash.replace(\"#\", \"\"));\n\n if (id !== \"\") {\n var element = document.getElementById(id);\n\n if (element) {\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;\n var clientTop = document.documentElement.clientTop || document.body.clientTop || 0;\n var computedStyles = window.getComputedStyle(element);\n var scrollMarginTop = computedStyles.getPropertyValue(\"scroll-margin-top\") || computedStyles.getPropertyValue(\"scroll-snap-margin-top\") || \"0px\";\n return element.getBoundingClientRect().top + scrollTop - parseInt(scrollMarginTop, 10) - clientTop - offsetY;\n }\n }\n\n return null;\n};\n\nexports.onInitialClientRender = function (_, pluginOptions) {\n if (pluginOptions.offsetY) {\n offsetY = pluginOptions.offsetY;\n }\n\n requestAnimationFrame(function () {\n var offset = getTargetOffset(window.location.hash);\n\n if (offset !== null) {\n window.scrollTo(0, offset);\n }\n });\n};\n\nexports.shouldUpdateScroll = function (_ref) {\n var location = _ref.routerProps.location;\n var offset = getTargetOffset(location.hash);\n return offset !== null ? [0, offset] : true;\n};","\"use strict\";\n\nexports.DEFAULT_OPTIONS = {\n maxWidth: 650,\n wrapperStyle: \"\",\n backgroundColor: \"white\",\n linkImagesToOriginal: true,\n showCaptions: false,\n markdownCaptions: false,\n withWebp: false,\n withAvif: false,\n tracedSVG: false,\n loading: \"lazy\",\n decoding: \"async\",\n disableBgImageOnAlpha: false,\n disableBgImage: false\n};\nexports.EMPTY_ALT = \"GATSBY_EMPTY_ALT\";\nexports.imageClass = \"gatsby-resp-image-image\";\nexports.imageWrapperClass = \"gatsby-resp-image-wrapper\";\nexports.imageBackgroundClass = \"gatsby-resp-image-background-image\";","\"use strict\";\n\nvar _require = require(\"./constants\"),\n DEFAULT_OPTIONS = _require.DEFAULT_OPTIONS,\n imageClass = _require.imageClass,\n imageBackgroundClass = _require.imageBackgroundClass,\n imageWrapperClass = _require.imageWrapperClass;\n\nexports.onRouteUpdate = function (apiCallbackContext, pluginOptions) {\n var options = Object.assign({}, DEFAULT_OPTIONS, pluginOptions);\n var imageWrappers = document.querySelectorAll(\".\" + imageWrapperClass); // https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/\n // for cross-browser looping through NodeList without polyfills\n\n var _loop = function _loop(i) {\n var imageWrapper = imageWrappers[i];\n var backgroundElement = imageWrapper.querySelector(\".\" + imageBackgroundClass);\n var imageElement = imageWrapper.querySelector(\".\" + imageClass);\n\n var onImageLoad = function onImageLoad() {\n backgroundElement.style.transition = \"opacity 0.5s 0.5s\";\n imageElement.style.transition = \"opacity 0.5s\";\n onImageComplete();\n };\n\n var onImageComplete = function onImageComplete() {\n backgroundElement.style.opacity = 0;\n imageElement.style.opacity = 1;\n imageElement.style.color = \"inherit\";\n imageElement.style.boxShadow = \"inset 0px 0px 0px 400px \" + options.backgroundColor;\n imageElement.removeEventListener(\"load\", onImageLoad);\n imageElement.removeEventListener(\"error\", onImageComplete);\n };\n\n imageElement.style.opacity = 0;\n imageElement.addEventListener(\"load\", onImageLoad);\n imageElement.addEventListener(\"error\", onImageComplete);\n\n if (imageElement.complete) {\n onImageComplete();\n }\n };\n\n for (var i = 0; i < imageWrappers.length; i++) {\n _loop(i);\n }\n};","// prefer default export if available\nconst preferDefault = m => (m && m.default) || m\n\nexports.components = {\n \"component---src-pages-404-tsx\": () => import(\"./../../../src/pages/404.tsx\" /* webpackChunkName: \"component---src-pages-404-tsx\" */),\n \"component---src-pages-index-tsx\": () => import(\"./../../../src/pages/index.tsx\" /* webpackChunkName: \"component---src-pages-index-tsx\" */),\n \"component---src-templates-blog-post-tsx\": () => import(\"./../../../src/templates/blog-post.tsx\" /* webpackChunkName: \"component---src-templates-blog-post-tsx\" */),\n \"component---src-templates-course-page-tsx\": () => import(\"./../../../src/templates/course-page.tsx\" /* webpackChunkName: \"component---src-templates-course-page-tsx\" */)\n}\n\n","module.exports = [{\n plugin: require('../../../node_modules/gatsby-remark-autolink-headers/gatsby-browser.js'),\n options: {\"plugins\":[],\"offsetY\":0,\"className\":\"anchor\"},\n },{\n plugin: require('../../../node_modules/gatsby-remark-images/gatsby-browser.js'),\n options: {\"plugins\":[],\"maxWidth\":1000,\"linkImagesToOriginal\":true,\"showCaptions\":false,\"markdownCaptions\":false,\"sizeByPixelDensity\":false,\"backgroundColor\":\"white\",\"quality\":50,\"withWebp\":false,\"tracedSVG\":false,\"loading\":\"lazy\",\"decoding\":\"async\",\"disableBgImageOnAlpha\":false,\"disableBgImage\":false},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-google-tagmanager/gatsby-browser.js'),\n options: {\"plugins\":[],\"id\":\"GTM-PW24ZG5\",\"includeInDevelopment\":false,\"defaultDataLayer\":{\"type\":\"object\",\"value\":{\"platform\":\"gatsby\"}},\"routeChangeEventName\":\"gatsby-route-change\",\"enableWebVitalsTracking\":false,\"selfHostedOrigin\":\"https://www.googletagmanager.com\"},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-google-gtag/gatsby-browser.js'),\n options: {\"plugins\":[],\"trackingIds\":[\"G-NPMJTDV8W2\"]},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-manifest/gatsby-browser.js'),\n options: {\"plugins\":[],\"name\":\"TypeScript Training: Learn TypeScript with Mike North!\",\"short_name\":\"TS Training\",\"start_url\":\"/\",\"theme_color\":\"#3178C6\",\"display\":\"minimal-ui\",\"icon\":\"content/assets/ts-logo-512.png\",\"legacy\":true,\"theme_color_in_head\":true,\"cache_busting_mode\":\"query\",\"crossOrigin\":\"anonymous\",\"include_favicon\":true,\"cacheDigest\":\"f750dd4b7cf3a79182eff8c092509daf\"},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-typography/gatsby-browser.js'),\n options: {\"plugins\":[],\"pathToConfigModule\":\"src/utils/typography\"},\n },{\n plugin: require('../gatsby-browser.js'),\n options: {\"plugins\":[]},\n }]\n","const plugins = require(`./api-runner-browser-plugins`)\nconst { getResourceURLsForPathname, loadPage, loadPageSync } =\n require(`./loader`).publicLoader\n\nexports.apiRunner = (api, args = {}, defaultReturn, argTransform) => {\n // Hooks for gatsby-cypress's API handler\n if (process.env.CYPRESS_SUPPORT) {\n if (window.___apiHandler) {\n window.___apiHandler(api)\n } else if (window.___resolvedAPIs) {\n window.___resolvedAPIs.push(api)\n } else {\n window.___resolvedAPIs = [api]\n }\n }\n\n let results = plugins.map(plugin => {\n if (!plugin.plugin[api]) {\n return undefined\n }\n\n args.getResourceURLsForPathname = getResourceURLsForPathname\n args.loadPage = loadPage\n args.loadPageSync = loadPageSync\n\n const result = plugin.plugin[api](args, plugin.options)\n if (result && argTransform) {\n args = argTransform({ args, result, plugin })\n }\n return result\n })\n\n // Filter out undefined results.\n results = results.filter(result => typeof result !== `undefined`)\n\n if (results.length > 0) {\n return results\n } else if (defaultReturn) {\n return [defaultReturn]\n } else {\n return []\n }\n}\n\nexports.apiRunnerAsync = (api, args, defaultReturn) =>\n plugins.reduce(\n (previous, next) =>\n next.plugin[api]\n ? previous.then(() => next.plugin[api](args, next.options))\n : previous,\n Promise.resolve()\n )\n","// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nexport default mitt;\n//# sourceMappingURL=mitt.es.js.map\n","import mitt from \"mitt\"\n\nconst emitter = mitt()\nexport default emitter\n","export default path => {\n if (path === undefined) {\n return path\n }\n if (path === `/`) {\n return `/`\n }\n if (path.charAt(path.length - 1) === `/`) {\n return path.slice(0, -1)\n }\n return path\n}\n","import { pick } from \"@gatsbyjs/reach-router/lib/utils\"\nimport stripPrefix from \"./strip-prefix\"\nimport normalizePagePath from \"./normalize-page-path\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\n\nconst pathCache = new Map()\nlet matchPaths = []\n\nconst trimPathname = rawPathname => {\n const pathname = decodeURIComponent(rawPathname)\n // Remove the pathPrefix from the pathname.\n const trimmedPathname = stripPrefix(\n pathname,\n decodeURIComponent(__BASE_PATH__)\n )\n // Remove any hashfragment\n .split(`#`)[0]\n // Remove search query\n .split(`?`)[0]\n\n return trimmedPathname\n}\n\nfunction absolutify(path) {\n // If it's already absolute, return as-is\n if (\n path.startsWith(`/`) ||\n path.startsWith(`https://`) ||\n path.startsWith(`http://`)\n ) {\n return path\n }\n // Calculate path relative to current location, adding a trailing slash to\n // match behavior of @reach/router\n return new URL(\n path,\n window.location.href + (window.location.href.endsWith(`/`) ? `` : `/`)\n ).pathname\n}\n\n/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */\nexport const setMatchPaths = value => {\n matchPaths = value\n}\n\n/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */\nexport const findMatchPath = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return normalizePagePath(path.route.originalPath)\n }\n\n return null\n}\n\n/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ \":bar/*foo\" }`, and the path is /baz/zaz/zoo\n * then it returns\n * { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */\nexport const grabMatchParams = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return path.params\n }\n\n return {}\n}\n\n// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n// `/foo?bar=far` => `/page1`\nexport const findPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n if (pathCache.has(trimmedPathname)) {\n return pathCache.get(trimmedPathname)\n }\n\n const redirect = maybeGetBrowserRedirect(rawPathname)\n if (redirect) {\n return findPath(redirect.toPath)\n }\n\n let foundPath = findMatchPath(trimmedPathname)\n\n if (!foundPath) {\n foundPath = cleanPath(rawPathname)\n }\n\n pathCache.set(trimmedPathname, foundPath)\n\n return foundPath\n}\n\n/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */\nexport const cleanPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n\n let foundPath = trimmedPathname\n if (foundPath === `/index.html`) {\n foundPath = `/`\n }\n\n foundPath = normalizePagePath(foundPath)\n\n return foundPath\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport Link, {\n withPrefix,\n withAssetPrefix,\n navigate,\n push,\n replace,\n navigateTo,\n parsePath,\n} from \"gatsby-link\"\nimport { useScrollRestoration } from \"gatsby-react-router-scroll\"\nimport PageRenderer from \"./public-page-renderer\"\nimport loader from \"./loader\"\n\nconst prefetchPathname = loader.enqueue\n\nconst StaticQueryContext = React.createContext({})\n\nfunction StaticQueryDataRenderer({ staticQueryData, data, query, render }) {\n const finalData = data\n ? data.data\n : staticQueryData[query] && staticQueryData[query].data\n\n return (\n \n {finalData && render(finalData)}\n {!finalData &&
Loading (StaticQuery)
}\n
\n )\n}\n\nconst StaticQuery = props => {\n const { data, query, render, children } = props\n\n return (\n \n {staticQueryData => (\n \n )}\n \n )\n}\n\nconst useStaticQuery = query => {\n if (\n typeof React.useContext !== `function` &&\n process.env.NODE_ENV === `development`\n ) {\n throw new Error(\n `You're likely using a version of React that doesn't support Hooks\\n` +\n `Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.`\n )\n }\n const context = React.useContext(StaticQueryContext)\n\n // query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n // to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n // catch the misuse of the API and give proper direction\n if (isNaN(Number(query))) {\n throw new Error(`useStaticQuery was called with a string but expects to be called using \\`graphql\\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\\`${query}\\`);\n`)\n }\n\n if (context[query]?.data) {\n return context[query].data\n } else {\n throw new Error(\n `The result of this StaticQuery could not be fetched.\\n\\n` +\n `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +\n `please open an issue in https://github.com/gatsbyjs/gatsby/issues`\n )\n }\n}\n\nStaticQuery.propTypes = {\n data: PropTypes.object,\n query: PropTypes.string.isRequired,\n render: PropTypes.func,\n children: PropTypes.func,\n}\n\nfunction graphql() {\n throw new Error(\n `It appears like Gatsby is misconfigured. Gatsby related \\`graphql\\` calls ` +\n `are supposed to only be evaluated at compile time, and then compiled away. ` +\n `Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n` +\n `Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.`\n )\n}\n\nexport {\n Link,\n withAssetPrefix,\n withPrefix,\n graphql,\n parsePath,\n navigate,\n useScrollRestoration,\n StaticQueryContext,\n StaticQuery,\n PageRenderer,\n useStaticQuery,\n prefetchPathname,\n}\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","const support = function (feature) {\n if (typeof document === `undefined`) {\n return false\n }\n const fakeLink = document.createElement(`link`)\n try {\n if (fakeLink.relList && typeof fakeLink.relList.supports === `function`) {\n return fakeLink.relList.supports(feature)\n }\n } catch (err) {\n return false\n }\n return false\n}\n\nconst linkPrefetchStrategy = function (url, options) {\n return new Promise((resolve, reject) => {\n if (typeof document === `undefined`) {\n reject()\n return\n }\n\n const link = document.createElement(`link`)\n link.setAttribute(`rel`, `prefetch`)\n link.setAttribute(`href`, url)\n\n Object.keys(options).forEach(key => {\n link.setAttribute(key, options[key])\n })\n\n link.onload = resolve\n link.onerror = reject\n\n const parentElement =\n document.getElementsByTagName(`head`)[0] ||\n document.getElementsByName(`script`)[0].parentNode\n parentElement.appendChild(link)\n })\n}\n\nconst xhrPrefetchStrategy = function (url) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(`GET`, url, true)\n\n req.onload = () => {\n if (req.status === 200) {\n resolve()\n } else {\n reject()\n }\n }\n\n req.send(null)\n })\n}\n\nconst supportedPrefetchStrategy = support(`prefetch`)\n ? linkPrefetchStrategy\n : xhrPrefetchStrategy\n\nconst preFetched = {}\n\nconst prefetch = function (url, options) {\n return new Promise(resolve => {\n if (preFetched[url]) {\n resolve()\n return\n }\n\n supportedPrefetchStrategy(url, options)\n .then(() => {\n resolve()\n preFetched[url] = true\n })\n .catch(() => {}) // 404s are logged to the console anyway\n })\n}\n\nexport default prefetch\n","import prefetchHelper from \"./prefetch\"\nimport emitter from \"./emitter\"\nimport { setMatchPaths, findPath, findMatchPath } from \"./find-path\"\n\n/**\n * Available resource loading statuses\n */\nexport const PageResourceStatus = {\n /**\n * At least one of critical resources failed to load\n */\n Error: `error`,\n /**\n * Resources loaded successfully\n */\n Success: `success`,\n}\n\nconst preferDefault = m => (m && m.default) || m\n\nconst stripSurroundingSlashes = s => {\n s = s[0] === `/` ? s.slice(1) : s\n s = s.endsWith(`/`) ? s.slice(0, -1) : s\n return s\n}\n\nconst createPageDataUrl = path => {\n const fixedPath = path === `/` ? `index` : stripSurroundingSlashes(path)\n return `${__PATH_PREFIX__}/page-data/${fixedPath}/page-data.json`\n}\n\nfunction doFetch(url, method = `GET`) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(method, url, true)\n req.onreadystatechange = () => {\n if (req.readyState == 4) {\n resolve(req)\n }\n }\n req.send(null)\n })\n}\n\nconst doesConnectionSupportPrefetch = () => {\n if (\n `connection` in navigator &&\n typeof navigator.connection !== `undefined`\n ) {\n if ((navigator.connection.effectiveType || ``).includes(`2g`)) {\n return false\n }\n if (navigator.connection.saveData) {\n return false\n }\n }\n return true\n}\n\nconst toPageResources = (pageData, component = null) => {\n const page = {\n componentChunkName: pageData.componentChunkName,\n path: pageData.path,\n webpackCompilationHash: pageData.webpackCompilationHash,\n matchPath: pageData.matchPath,\n staticQueryHashes: pageData.staticQueryHashes,\n }\n\n return {\n component,\n json: pageData.result,\n page,\n }\n}\n\nexport class BaseLoader {\n constructor(loadComponent, matchPaths) {\n // Map of pagePath -> Page. Where Page is an object with: {\n // status: PageResourceStatus.Success || PageResourceStatus.Error,\n // payload: PageResources, // undefined if PageResourceStatus.Error\n // }\n // PageResources is {\n // component,\n // json: pageData.result,\n // page: {\n // componentChunkName,\n // path,\n // webpackCompilationHash,\n // staticQueryHashes\n // },\n // staticQueryResults\n // }\n this.pageDb = new Map()\n this.inFlightDb = new Map()\n this.staticQueryDb = {}\n this.pageDataDb = new Map()\n this.prefetchTriggered = new Set()\n this.prefetchCompleted = new Set()\n this.loadComponent = loadComponent\n setMatchPaths(matchPaths)\n }\n\n inFlightNetworkRequests = new Map()\n\n memoizedGet(url) {\n let inFlightPromise = this.inFlightNetworkRequests.get(url)\n\n if (!inFlightPromise) {\n inFlightPromise = doFetch(url, `GET`)\n this.inFlightNetworkRequests.set(url, inFlightPromise)\n }\n\n // Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\n return inFlightPromise\n .then(response => {\n this.inFlightNetworkRequests.delete(url)\n return response\n })\n .catch(err => {\n this.inFlightNetworkRequests.delete(url)\n throw err\n })\n }\n\n setApiRunner(apiRunner) {\n this.apiRunner = apiRunner\n this.prefetchDisabled = apiRunner(`disableCorePrefetching`).some(a => a)\n }\n\n fetchPageDataJson(loadObj) {\n const { pagePath, retries = 0 } = loadObj\n const url = createPageDataUrl(pagePath)\n return this.memoizedGet(url).then(req => {\n const { status, responseText } = req\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.path === undefined) {\n throw new Error(`not a valid pageData response`)\n }\n\n return Object.assign(loadObj, {\n status: PageResourceStatus.Success,\n payload: jsonPayload,\n })\n } catch (err) {\n // continue regardless of error\n }\n }\n\n // Handle 404\n if (status === 404 || status === 200) {\n // If the request was for a 404 page and it doesn't exist, we're done\n if (pagePath === `/404.html`) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Need some code here to cache the 404 request. In case\n // multiple loadPageDataJsons result in 404s\n return this.fetchPageDataJson(\n Object.assign(loadObj, { pagePath: `/404.html`, notFound: true })\n )\n }\n\n // handle 500 response (Unrecoverable)\n if (status === 500) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Handle everything else, including status === 0, and 503s. Should retry\n if (retries < 3) {\n return this.fetchPageDataJson(\n Object.assign(loadObj, { retries: retries + 1 })\n )\n }\n\n // Retried 3 times already, result is an error.\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n })\n }\n\n loadPageDataJson(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDataDb.has(pagePath)) {\n const pageData = this.pageDataDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !pageData.stale) {\n return Promise.resolve(pageData)\n }\n }\n\n return this.fetchPageDataJson({ pagePath }).then(pageData => {\n this.pageDataDb.set(pagePath, pageData)\n\n return pageData\n })\n }\n\n findMatchPath(rawPath) {\n return findMatchPath(rawPath)\n }\n\n // TODO check all uses of this and whether they use undefined for page resources not exist\n loadPage(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const page = this.pageDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !page.payload.stale) {\n if (page.error) {\n return {\n error: page.error,\n status: page.status,\n }\n }\n\n return Promise.resolve(page.payload)\n }\n }\n\n if (this.inFlightDb.has(pagePath)) {\n return this.inFlightDb.get(pagePath)\n }\n\n const inFlightPromise = Promise.all([\n this.loadAppData(),\n this.loadPageDataJson(pagePath),\n ]).then(allData => {\n const result = allData[1]\n if (result.status === PageResourceStatus.Error) {\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n let pageData = result.payload\n const { componentChunkName, staticQueryHashes = [] } = pageData\n\n const finalResult = {}\n\n const componentChunkPromise = this.loadComponent(componentChunkName).then(\n component => {\n finalResult.createdAt = new Date()\n let pageResources\n if (!component || component instanceof Error) {\n finalResult.status = PageResourceStatus.Error\n finalResult.error = component\n } else {\n finalResult.status = PageResourceStatus.Success\n if (result.notFound === true) {\n finalResult.notFound = true\n }\n pageData = Object.assign(pageData, {\n webpackCompilationHash: allData[0]\n ? allData[0].webpackCompilationHash\n : ``,\n })\n pageResources = toPageResources(pageData, component)\n }\n // undefined if final result is an error\n return pageResources\n }\n )\n\n const staticQueryBatchPromise = Promise.all(\n staticQueryHashes.map(staticQueryHash => {\n // Check for cache in case this static query result has already been loaded\n if (this.staticQueryDb[staticQueryHash]) {\n const jsonPayload = this.staticQueryDb[staticQueryHash]\n return { staticQueryHash, jsonPayload }\n }\n\n return this.memoizedGet(\n `${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json`\n )\n .then(req => {\n const jsonPayload = JSON.parse(req.responseText)\n return { staticQueryHash, jsonPayload }\n })\n .catch(() => {\n throw new Error(\n `We couldn't load \"${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json\"`\n )\n })\n })\n ).then(staticQueryResults => {\n const staticQueryResultsMap = {}\n\n staticQueryResults.forEach(({ staticQueryHash, jsonPayload }) => {\n staticQueryResultsMap[staticQueryHash] = jsonPayload\n this.staticQueryDb[staticQueryHash] = jsonPayload\n })\n\n return staticQueryResultsMap\n })\n\n return (\n Promise.all([componentChunkPromise, staticQueryBatchPromise])\n .then(([pageResources, staticQueryResults]) => {\n let payload\n if (pageResources) {\n payload = { ...pageResources, staticQueryResults }\n finalResult.payload = payload\n emitter.emit(`onPostLoadPageResources`, {\n page: payload,\n pageResources: payload,\n })\n }\n\n this.pageDb.set(pagePath, finalResult)\n\n if (finalResult.error) {\n return {\n error: finalResult.error,\n status: finalResult.status,\n }\n }\n\n return payload\n })\n // when static-query fail to load we throw a better error\n .catch(err => {\n return {\n error: err,\n status: PageResourceStatus.Error,\n }\n })\n )\n })\n\n inFlightPromise\n .then(() => {\n this.inFlightDb.delete(pagePath)\n })\n .catch(error => {\n this.inFlightDb.delete(pagePath)\n throw error\n })\n\n this.inFlightDb.set(pagePath, inFlightPromise)\n\n return inFlightPromise\n }\n\n // returns undefined if the page does not exists in cache\n loadPageSync(rawPath, options = {}) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const pageData = this.pageDb.get(pagePath)\n\n if (pageData.payload) {\n return pageData.payload\n }\n\n if (options?.withErrorDetails) {\n return {\n error: pageData.error,\n status: pageData.status,\n }\n }\n }\n return undefined\n }\n\n shouldPrefetch(pagePath) {\n // Skip prefetching if we know user is on slow or constrained connection\n if (!doesConnectionSupportPrefetch()) {\n return false\n }\n\n // Check if the page exists.\n if (this.pageDb.has(pagePath)) {\n return false\n }\n\n return true\n }\n\n prefetch(pagePath) {\n if (!this.shouldPrefetch(pagePath)) {\n return false\n }\n\n // Tell plugins with custom prefetching logic that they should start\n // prefetching this path.\n if (!this.prefetchTriggered.has(pagePath)) {\n this.apiRunner(`onPrefetchPathname`, { pathname: pagePath })\n this.prefetchTriggered.add(pagePath)\n }\n\n // If a plugin has disabled core prefetching, stop now.\n if (this.prefetchDisabled) {\n return false\n }\n\n const realPath = findPath(pagePath)\n // Todo make doPrefetch logic cacheable\n // eslint-disable-next-line consistent-return\n this.doPrefetch(realPath).then(() => {\n if (!this.prefetchCompleted.has(pagePath)) {\n this.apiRunner(`onPostPrefetchPathname`, { pathname: pagePath })\n this.prefetchCompleted.add(pagePath)\n }\n })\n\n return true\n }\n\n doPrefetch(pagePath) {\n const pageDataUrl = createPageDataUrl(pagePath)\n return prefetchHelper(pageDataUrl, {\n crossOrigin: `anonymous`,\n as: `fetch`,\n }).then(() =>\n // This was just prefetched, so will return a response from\n // the cache instead of making another request to the server\n this.loadPageDataJson(pagePath)\n )\n }\n\n hovering(rawPath) {\n this.loadPage(rawPath)\n }\n\n getResourceURLsForPathname(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDataDb.get(pagePath)\n if (page) {\n const pageResources = toPageResources(page.payload)\n\n return [\n ...createComponentUrls(pageResources.page.componentChunkName),\n createPageDataUrl(pagePath),\n ]\n } else {\n return null\n }\n }\n\n isPageNotFound(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDb.get(pagePath)\n return !page || page.notFound\n }\n\n loadAppData(retries = 0) {\n return this.memoizedGet(`${__PATH_PREFIX__}/page-data/app-data.json`).then(\n req => {\n const { status, responseText } = req\n\n let appData\n\n if (status !== 200 && retries < 3) {\n // Retry 3 times incase of non-200 responses\n return this.loadAppData(retries + 1)\n }\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.webpackCompilationHash === undefined) {\n throw new Error(`not a valid app-data response`)\n }\n\n appData = jsonPayload\n } catch (err) {\n // continue regardless of error\n }\n }\n\n return appData\n }\n )\n }\n}\n\nconst createComponentUrls = componentChunkName =>\n (window.___chunkMapping[componentChunkName] || []).map(\n chunk => __PATH_PREFIX__ + chunk\n )\n\nexport class ProdLoader extends BaseLoader {\n constructor(asyncRequires, matchPaths, pageData) {\n const loadComponent = chunkName => {\n if (!asyncRequires.components[chunkName]) {\n throw new Error(\n `We couldn't find the correct component chunk with the name ${chunkName}`\n )\n }\n\n return (\n asyncRequires.components[chunkName]()\n .then(preferDefault)\n // loader will handle the case when component is error\n .catch(err => err)\n )\n }\n\n super(loadComponent, matchPaths)\n\n if (pageData) {\n this.pageDataDb.set(pageData.path, {\n pagePath: pageData.path,\n payload: pageData,\n status: `success`,\n })\n }\n }\n\n doPrefetch(pagePath) {\n return super.doPrefetch(pagePath).then(result => {\n if (result.status !== PageResourceStatus.Success) {\n return Promise.resolve()\n }\n const pageData = result.payload\n const chunkName = pageData.componentChunkName\n const componentUrls = createComponentUrls(chunkName)\n return Promise.all(componentUrls.map(prefetchHelper)).then(() => pageData)\n })\n }\n\n loadPageDataJson(rawPath) {\n return super.loadPageDataJson(rawPath).then(data => {\n if (data.notFound) {\n // check if html file exist using HEAD request:\n // if it does we should navigate to it instead of showing 404\n return doFetch(rawPath, `HEAD`).then(req => {\n if (req.status === 200) {\n // page (.html file) actually exist (or we asked for 404 )\n // returning page resources status as errored to trigger\n // regular browser navigation to given page\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n // if HEAD request wasn't 200, return notFound result\n // and show 404 page\n return data\n })\n }\n return data\n })\n }\n}\n\nlet instance\n\nexport const setLoader = _loader => {\n instance = _loader\n}\n\nexport const publicLoader = {\n enqueue: rawPath => instance.prefetch(rawPath),\n\n // Real methods\n getResourceURLsForPathname: rawPath =>\n instance.getResourceURLsForPathname(rawPath),\n loadPage: rawPath => instance.loadPage(rawPath),\n // TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\n loadPageSync: (rawPath, options = {}) =>\n instance.loadPageSync(rawPath, options),\n prefetch: rawPath => instance.prefetch(rawPath),\n isPageNotFound: rawPath => instance.isPageNotFound(rawPath),\n hovering: rawPath => instance.hovering(rawPath),\n loadAppData: () => instance.loadAppData(),\n}\n\nexport default publicLoader\n\nexport function getStaticQueryResults() {\n if (instance) {\n return instance.staticQueryDb\n } else {\n return {}\n }\n}\n","import React, { createElement } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport { grabMatchParams } from \"./find-path\"\n\n// Renders page\nclass PageRenderer extends React.Component {\n render() {\n const props = {\n ...this.props,\n params: {\n ...grabMatchParams(this.props.location.pathname),\n ...this.props.pageResources.json.pageContext.__params,\n },\n }\n\n const pageElement = createElement(this.props.pageResources.component, {\n ...props,\n key: this.props.path || this.props.pageResources.page.path,\n })\n\n const wrappedPage = apiRunner(\n `wrapPageElement`,\n { element: pageElement, props },\n pageElement,\n ({ result }) => {\n return { element: result, props }\n }\n ).pop()\n\n return wrappedPage\n }\n}\n\nPageRenderer.propTypes = {\n location: PropTypes.object.isRequired,\n pageResources: PropTypes.object.isRequired,\n data: PropTypes.object,\n pageContext: PropTypes.object.isRequired,\n}\n\nexport default PageRenderer\n","// This is extracted to separate module because it's shared\n// between browser and SSR code\nexport const RouteAnnouncerProps = {\n id: `gatsby-announcer`,\n style: {\n position: `absolute`,\n top: 0,\n width: 1,\n height: 1,\n padding: 0,\n overflow: `hidden`,\n clip: `rect(0, 0, 0, 0)`,\n whiteSpace: `nowrap`,\n border: 0,\n },\n \"aria-live\": `assertive`,\n \"aria-atomic\": `true`,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport emitter from \"./emitter\"\nimport { RouteAnnouncerProps } from \"./route-announcer-props\"\nimport { navigate as reachNavigate } from \"@gatsbyjs/reach-router\"\nimport { globalHistory } from \"@gatsbyjs/reach-router/lib/history\"\nimport { parsePath } from \"gatsby-link\"\n\nfunction maybeRedirect(pathname) {\n const redirect = maybeGetBrowserRedirect(pathname)\n const { hash, search } = window.location\n\n if (redirect != null) {\n window.___replace(redirect.toPath + search + hash)\n return true\n } else {\n return false\n }\n}\n\n// Catch unhandled chunk loading errors and force a restart of the app.\nlet nextRoute = ``\n\nwindow.addEventListener(`unhandledrejection`, event => {\n if (/loading chunk \\d* failed./i.test(event.reason)) {\n if (nextRoute) {\n window.location.pathname = nextRoute\n }\n }\n})\n\nconst onPreRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n nextRoute = location.pathname\n apiRunner(`onPreRouteUpdate`, { location, prevLocation })\n }\n}\n\nconst onRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n apiRunner(`onRouteUpdate`, { location, prevLocation })\n if (\n process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND &&\n process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`\n ) {\n emitter.emit(`onRouteUpdate`, { location, prevLocation })\n }\n }\n}\n\nconst navigate = (to, options = {}) => {\n // Support forward/backward navigation with numbers\n // navigate(-2) (jumps back 2 history steps)\n // navigate(2) (jumps forward 2 history steps)\n if (typeof to === `number`) {\n globalHistory.navigate(to)\n return\n }\n\n const { pathname, search, hash } = parsePath(to)\n const redirect = maybeGetBrowserRedirect(pathname)\n\n // If we're redirecting, just replace the passed in pathname\n // to the one we want to redirect to.\n if (redirect) {\n to = redirect.toPath + search + hash\n }\n\n // If we had a service worker update, no matter the path, reload window and\n // reset the pathname whitelist\n if (window.___swUpdated) {\n window.location = pathname + search + hash\n return\n }\n\n // Start a timer to wait for a second before transitioning and showing a\n // loader in case resources aren't around yet.\n const timeoutId = setTimeout(() => {\n emitter.emit(`onDelayedLoadPageResources`, { pathname })\n apiRunner(`onRouteUpdateDelayed`, {\n location: window.location,\n })\n }, 1000)\n\n loader.loadPage(pathname).then(pageResources => {\n // If no page resources, then refresh the page\n // Do this, rather than simply `window.location.reload()`, so that\n // pressing the back/forward buttons work - otherwise when pressing\n // back, the browser will just change the URL and expect JS to handle\n // the change, which won't always work since it might not be a Gatsby\n // page.\n if (!pageResources || pageResources.status === PageResourceStatus.Error) {\n window.history.replaceState({}, ``, location.href)\n window.location = pathname\n clearTimeout(timeoutId)\n return\n }\n\n // If the loaded page has a different compilation hash to the\n // window, then a rebuild has occurred on the server. Reload.\n if (process.env.NODE_ENV === `production` && pageResources) {\n // window.___webpackCompilationHash gets set in production-app.js after navigationInit() is called\n // So on a direct visit of a page with a browser redirect this check is truthy and thus the codepath is hit\n // While the resource actually exists, but only too late\n // TODO: This should probably be fixed by setting ___webpackCompilationHash before navigationInit() is called\n if (\n pageResources.page.webpackCompilationHash !==\n window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n window.location = pathname + search + hash\n }\n }\n reachNavigate(to, options)\n clearTimeout(timeoutId)\n })\n}\n\nfunction shouldUpdateScroll(prevRouterProps, { location }) {\n const { pathname, hash } = location\n const results = apiRunner(`shouldUpdateScroll`, {\n prevRouterProps,\n // `pathname` for backwards compatibility\n pathname,\n routerProps: { location },\n getSavedScrollPosition: args => [\n 0,\n // FIXME this is actually a big code smell, we should fix this\n // eslint-disable-next-line @babel/no-invalid-this\n this._stateStorage.read(args, args.key),\n ],\n })\n if (results.length > 0) {\n // Use the latest registered shouldUpdateScroll result, this allows users to override plugin's configuration\n // @see https://github.com/gatsbyjs/gatsby/issues/12038\n return results[results.length - 1]\n }\n\n if (prevRouterProps) {\n const {\n location: { pathname: oldPathname },\n } = prevRouterProps\n if (oldPathname === pathname) {\n // Scroll to element if it exists, if it doesn't, or no hash is provided,\n // scroll to top.\n return hash ? decodeURI(hash.slice(1)) : [0, 0]\n }\n }\n return true\n}\n\nfunction init() {\n // The \"scroll-behavior\" package expects the \"action\" to be on the location\n // object so let's copy it over.\n globalHistory.listen(args => {\n args.location.action = args.action\n })\n\n window.___push = to => navigate(to, { replace: false })\n window.___replace = to => navigate(to, { replace: true })\n window.___navigate = (to, options) => navigate(to, options)\n\n // Check for initial page-load redirect\n maybeRedirect(window.location.pathname)\n}\n\nclass RouteAnnouncer extends React.Component {\n constructor(props) {\n super(props)\n this.announcementRef = React.createRef()\n }\n\n componentDidUpdate(prevProps, nextProps) {\n requestAnimationFrame(() => {\n let pageName = `new page at ${this.props.location.pathname}`\n if (document.title) {\n pageName = document.title\n }\n const pageHeadings = document.querySelectorAll(`#gatsby-focus-wrapper h1`)\n if (pageHeadings && pageHeadings.length) {\n pageName = pageHeadings[0].textContent\n }\n const newAnnouncement = `Navigated to ${pageName}`\n if (this.announcementRef.current) {\n const oldAnnouncement = this.announcementRef.current.innerText\n if (oldAnnouncement !== newAnnouncement) {\n this.announcementRef.current.innerText = newAnnouncement\n }\n }\n })\n }\n\n render() {\n return
\n }\n}\n\nconst compareLocationProps = (prevLocation, nextLocation) => {\n if (prevLocation.href !== nextLocation.href) {\n return true\n }\n\n if (prevLocation?.state?.key !== nextLocation?.state?.key) {\n return true\n }\n\n return false\n}\n\n// Fire on(Pre)RouteUpdate APIs\nclass RouteUpdates extends React.Component {\n constructor(props) {\n super(props)\n onPreRouteUpdate(props.location, null)\n }\n\n componentDidMount() {\n onRouteUpdate(this.props.location, null)\n }\n\n shouldComponentUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onPreRouteUpdate(this.props.location, prevProps.location)\n return true\n }\n return false\n }\n\n componentDidUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onRouteUpdate(this.props.location, prevProps.location)\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n \n \n )\n }\n}\n\nRouteUpdates.propTypes = {\n location: PropTypes.object.isRequired,\n}\n\nexport { init, shouldUpdateScroll, RouteUpdates, maybeGetBrowserRedirect }\n","// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\nexport default (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});","import React from \"react\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport shallowCompare from \"shallow-compare\"\n\nclass EnsureResources extends React.Component {\n constructor(props) {\n super()\n const { location, pageResources } = props\n this.state = {\n location: { ...location },\n pageResources:\n pageResources ||\n loader.loadPageSync(location.pathname, { withErrorDetails: true }),\n }\n }\n\n static getDerivedStateFromProps({ location }, prevState) {\n if (prevState.location.href !== location.href) {\n const pageResources = loader.loadPageSync(location.pathname, {\n withErrorDetails: true,\n })\n\n return {\n pageResources,\n location: { ...location },\n }\n }\n\n return {\n location: { ...location },\n }\n }\n\n loadResources(rawPath) {\n loader.loadPage(rawPath).then(pageResources => {\n if (pageResources && pageResources.status !== PageResourceStatus.Error) {\n this.setState({\n location: { ...window.location },\n pageResources,\n })\n } else {\n window.history.replaceState({}, ``, location.href)\n window.location = rawPath\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n // Always return false if we're missing resources.\n if (!nextState.pageResources) {\n this.loadResources(nextProps.location.pathname)\n return false\n }\n\n if (\n process.env.BUILD_STAGE === `develop` &&\n nextState.pageResources.stale\n ) {\n this.loadResources(nextProps.location.pathname)\n return false\n }\n\n // Check if the component or json have changed.\n if (this.state.pageResources !== nextState.pageResources) {\n return true\n }\n if (\n this.state.pageResources.component !== nextState.pageResources.component\n ) {\n return true\n }\n\n if (this.state.pageResources.json !== nextState.pageResources.json) {\n return true\n }\n // Check if location has changed on a page using internal routing\n // via matchPath configuration.\n if (\n this.state.location.key !== nextState.location.key &&\n nextState.pageResources.page &&\n (nextState.pageResources.page.matchPath ||\n nextState.pageResources.page.path)\n ) {\n return true\n }\n return shallowCompare(this, nextProps, nextState)\n }\n\n render() {\n if (\n process.env.NODE_ENV !== `production` &&\n (!this.state.pageResources ||\n this.state.pageResources.status === PageResourceStatus.Error)\n ) {\n const message = `EnsureResources was not able to find resources for path: \"${this.props.location.pathname}\"\nThis typically means that an issue occurred building components for that path.\nRun \\`gatsby clean\\` to remove any cached elements.`\n if (this.state.pageResources?.error) {\n console.error(message)\n throw this.state.pageResources.error\n }\n\n throw new Error(message)\n }\n\n return this.props.children(this.state)\n }\n}\n\nexport default EnsureResources\n","import { apiRunner, apiRunnerAsync } from \"./api-runner-browser\"\nimport React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Router, navigate, Location, BaseContext } from \"@gatsbyjs/reach-router\"\nimport { ScrollContext } from \"gatsby-react-router-scroll\"\nimport { StaticQueryContext } from \"gatsby\"\nimport {\n shouldUpdateScroll,\n init as navigationInit,\n RouteUpdates,\n} from \"./navigation\"\nimport emitter from \"./emitter\"\nimport PageRenderer from \"./page-renderer\"\nimport asyncRequires from \"$virtual/async-requires\"\nimport {\n setLoader,\n ProdLoader,\n publicLoader,\n PageResourceStatus,\n getStaticQueryResults,\n} from \"./loader\"\nimport EnsureResources from \"./ensure-resources\"\nimport stripPrefix from \"./strip-prefix\"\n\n// Generated during bootstrap\nimport matchPaths from \"$virtual/match-paths.json\"\n\nconst loader = new ProdLoader(asyncRequires, matchPaths, window.pageData)\nsetLoader(loader)\nloader.setApiRunner(apiRunner)\n\nwindow.asyncRequires = asyncRequires\nwindow.___emitter = emitter\nwindow.___loader = publicLoader\n\nnavigationInit()\n\napiRunnerAsync(`onClientEntry`).then(() => {\n // Let plugins register a service worker. The plugin just needs\n // to return true.\n if (apiRunner(`registerServiceWorker`).filter(Boolean).length > 0) {\n require(`./register-service-worker`)\n }\n\n // In gatsby v2 if Router is used in page using matchPaths\n // paths need to contain full path.\n // For example:\n // - page have `/app/*` matchPath\n // - inside template user needs to use `/app/xyz` as path\n // Resetting `basepath`/`baseuri` keeps current behaviour\n // to not introduce breaking change.\n // Remove this in v3\n const RouteHandler = props => (\n \n \n \n )\n\n const DataContext = React.createContext({})\n\n class GatsbyRoot extends React.Component {\n render() {\n const { children } = this.props\n return (\n \n {({ location }) => (\n \n {({ pageResources, location }) => {\n const staticQueryResults = getStaticQueryResults()\n return (\n \n \n {children}\n \n \n )\n }}\n \n )}\n \n )\n }\n }\n\n class LocationHandler extends React.Component {\n render() {\n return (\n \n {({ pageResources, location }) => (\n \n \n \n \n
\n \n \n )}\n \n )\n }\n }\n\n const { pagePath, location: browserLoc } = window\n\n // Explicitly call navigate if the canonical path (window.pagePath)\n // is different to the browser path (window.location.pathname). But\n // only if NONE of the following conditions hold:\n //\n // - The url matches a client side route (page.matchPath)\n // - it's a 404 page\n // - it's the offline plugin shell (/offline-plugin-app-shell-fallback/)\n if (\n pagePath &&\n __BASE_PATH__ + pagePath !== browserLoc.pathname &&\n !(\n loader.findMatchPath(stripPrefix(browserLoc.pathname, __BASE_PATH__)) ||\n pagePath === `/404.html` ||\n pagePath.match(/^\\/404\\/?$/) ||\n pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/)\n )\n ) {\n navigate(__BASE_PATH__ + pagePath + browserLoc.search + browserLoc.hash, {\n replace: true,\n })\n }\n\n publicLoader.loadPage(browserLoc.pathname).then(page => {\n if (!page || page.status === PageResourceStatus.Error) {\n const message = `page resources for ${browserLoc.pathname} not found. Not rendering React`\n\n // if the chunk throws an error we want to capture the real error\n // This should help with https://github.com/gatsbyjs/gatsby/issues/19618\n if (page && page.error) {\n console.error(message)\n throw page.error\n }\n\n throw new Error(message)\n }\n\n window.___webpackCompilationHash = page.page.webpackCompilationHash\n\n const SiteRoot = apiRunner(\n `wrapRootElement`,\n { element: },\n ,\n ({ result }) => {\n return { element: result }\n }\n ).pop()\n\n const App = function App() {\n const onClientEntryRanRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!onClientEntryRanRef.current) {\n onClientEntryRanRef.current = true\n if (performance.mark) {\n performance.mark(`onInitialClientRender`)\n }\n\n apiRunner(`onInitialClientRender`)\n }\n }, [])\n\n return {SiteRoot}\n }\n\n const renderer = apiRunner(\n `replaceHydrateFunction`,\n undefined,\n ReactDOM.hydrateRoot ? ReactDOM.hydrateRoot : ReactDOM.hydrate\n )[0]\n\n function runRender() {\n const rootElement =\n typeof window !== `undefined`\n ? document.getElementById(`___gatsby`)\n : null\n\n if (renderer === ReactDOM.hydrateRoot) {\n renderer(rootElement, )\n } else {\n renderer(, rootElement)\n }\n }\n\n // https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450\n // TODO remove IE 10 support\n const doc = document\n if (\n doc.readyState === `complete` ||\n (doc.readyState !== `loading` && !doc.documentElement.doScroll)\n ) {\n setTimeout(function () {\n runRender()\n }, 0)\n } else {\n const handler = function () {\n doc.removeEventListener(`DOMContentLoaded`, handler, false)\n window.removeEventListener(`load`, handler, false)\n\n runRender()\n }\n\n doc.addEventListener(`DOMContentLoaded`, handler, false)\n window.addEventListener(`load`, handler, false)\n }\n })\n})\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nimport loader from \"./loader\"\nimport InternalPageRenderer from \"./page-renderer\"\n\nconst ProdPageRenderer = ({ location }) => {\n const pageResources = loader.loadPageSync(location.pathname)\n if (!pageResources) {\n return null\n }\n return React.createElement(InternalPageRenderer, {\n location,\n pageResources,\n ...pageResources.json,\n })\n}\n\nProdPageRenderer.propTypes = {\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default ProdPageRenderer\n","const preferDefault = m => (m && m.default) || m\n\nif (process.env.BUILD_STAGE === `develop`) {\n module.exports = preferDefault(require(`./public-page-renderer-dev`))\n} else if (process.env.BUILD_STAGE === `build-javascript`) {\n module.exports = preferDefault(require(`./public-page-renderer-prod`))\n} else {\n module.exports = () => null\n}\n","exports.polyfill = Component => Component\n","import redirects from \"./redirects.json\"\n\n// Convert to a map for faster lookup in maybeRedirect()\n\nconst redirectMap = new Map()\nconst redirectIgnoreCaseMap = new Map()\n\nredirects.forEach(redirect => {\n if (redirect.ignoreCase) {\n redirectIgnoreCaseMap.set(redirect.fromPath, redirect)\n } else {\n redirectMap.set(redirect.fromPath, redirect)\n }\n})\n\nexport function maybeGetBrowserRedirect(pathname) {\n let redirect = redirectMap.get(pathname)\n if (!redirect) {\n redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase())\n }\n return redirect\n}\n","import { apiRunner } from \"./api-runner-browser\"\n\nif (\n window.location.protocol !== `https:` &&\n window.location.hostname !== `localhost`\n) {\n console.error(\n `Service workers can only be used over HTTPS, or on localhost for development`\n )\n} else if (`serviceWorker` in navigator) {\n navigator.serviceWorker\n .register(`${__BASE_PATH__}/sw.js`)\n .then(function (reg) {\n reg.addEventListener(`updatefound`, () => {\n apiRunner(`onServiceWorkerUpdateFound`, { serviceWorker: reg })\n // The updatefound event implies that reg.installing is set; see\n // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n const installingWorker = reg.installing\n console.log(`installingWorker`, installingWorker)\n installingWorker.addEventListener(`statechange`, () => {\n switch (installingWorker.state) {\n case `installed`:\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n\n // We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\n window.___swUpdated = true\n // We call the onServiceWorkerUpdateReady API so users can show update prompts.\n apiRunner(`onServiceWorkerUpdateReady`, { serviceWorker: reg })\n\n // If resources failed for the current page, reload.\n if (window.___failedResources) {\n console.log(`resources failed, SW updated - reloading`)\n window.location.reload()\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log(`Content is now available offline!`)\n\n // Post to service worker that install is complete.\n // Delay to allow time for the event listener to be added --\n // otherwise fetch is called too soon and resources aren't cached.\n apiRunner(`onServiceWorkerInstalled`, { serviceWorker: reg })\n }\n break\n\n case `redundant`:\n console.error(`The installing service worker became redundant.`)\n apiRunner(`onServiceWorkerRedundant`, { serviceWorker: reg })\n break\n\n case `activated`:\n apiRunner(`onServiceWorkerActive`, { serviceWorker: reg })\n break\n }\n })\n })\n })\n .catch(function (e) {\n console.error(`Error during service worker registration:`, e)\n })\n}\n","/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn't found.\n */\n\nexport default function stripPrefix(str, prefix = ``) {\n if (!prefix) {\n return str\n }\n\n if (str === prefix) {\n return `/`\n }\n\n if (str.startsWith(`${prefix}/`)) {\n return str.slice(prefix.length)\n }\n\n return str\n}\n","import invariant from \"invariant\"; ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : invariant(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexport { startsWith, pick, match, resolve, insertParams, validateRedirect, shallowCompare };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexport { globalHistory, navigate, createHistory, createMemorySource };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n/* eslint-disable jsx-a11y/anchor-has-content */\n\n\nimport React, { useContext, createContext } from \"react\";\nimport invariant from \"invariant\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { startsWith, pick, resolve, match, insertParams, validateRedirect, shallowCompare } from \"./lib/utils\";\nimport { globalHistory, navigate, createHistory, createMemorySource } from \"./lib/history\"; ////////////////////////////////////////////////////////////////////////////////\n\nvar createNamedContext = function createNamedContext(name, defaultValue) {\n var Ctx = createContext(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Location Context/Provider\n\n\nvar LocationContext = createNamedContext(\"Location\"); // sets up a listener if there isn't one already so apps don't need to be\n// wrapped in some top level provider\n\nvar Location = function Location(_ref) {\n var children = _ref.children;\n return React.createElement(LocationContext.Consumer, null, function (context) {\n return context ? children(context) : React.createElement(LocationProvider, null, children);\n });\n};\n\nvar LocationProvider = function (_React$Component) {\n _inherits(LocationProvider, _React$Component);\n\n function LocationProvider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, LocationProvider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n context: _this.getContext(),\n refs: {\n unlisten: null\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n LocationProvider.prototype.getContext = function getContext() {\n var _props$history = this.props.history,\n navigate = _props$history.navigate,\n location = _props$history.location;\n return {\n navigate: navigate,\n location: location\n };\n };\n\n LocationProvider.prototype.componentDidCatch = function componentDidCatch(error, info) {\n if (isRedirect(error)) {\n var _navigate = this.props.history.navigate;\n\n _navigate(error.uri, {\n replace: true\n });\n } else {\n throw error;\n }\n };\n\n LocationProvider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevState.context.location !== this.state.context.location) {\n this.props.history._onTransitionComplete();\n }\n };\n\n LocationProvider.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var refs = this.state.refs,\n history = this.props.history;\n\n history._onTransitionComplete();\n\n refs.unlisten = history.listen(function () {\n Promise.resolve().then(function () {\n // TODO: replace rAF with react deferred update API when it's ready https://github.com/facebook/react/issues/13306\n requestAnimationFrame(function () {\n if (!_this2.unmounted) {\n _this2.setState(function () {\n return {\n context: _this2.getContext()\n };\n });\n }\n });\n });\n });\n };\n\n LocationProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n var refs = this.state.refs;\n this.unmounted = true;\n refs.unlisten();\n };\n\n LocationProvider.prototype.render = function render() {\n var context = this.state.context,\n children = this.props.children;\n return React.createElement(LocationContext.Provider, {\n value: context\n }, typeof children === \"function\" ? children(context) : children || null);\n };\n\n return LocationProvider;\n}(React.Component); ////////////////////////////////////////////////////////////////////////////////\n\n\nLocationProvider.defaultProps = {\n history: globalHistory\n};\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0;\n\nvar ServerLocation = function ServerLocation(_ref2) {\n var url = _ref2.url,\n children = _ref2.children;\n var searchIndex = url.indexOf(\"?\");\n var searchExists = searchIndex > -1;\n var pathname = void 0;\n var search = \"\";\n var hash = \"\";\n\n if (searchExists) {\n pathname = url.substring(0, searchIndex);\n search = url.substring(searchIndex);\n } else {\n pathname = url;\n }\n\n return React.createElement(LocationContext.Provider, {\n value: {\n location: {\n pathname: pathname,\n search: search,\n hash: hash\n },\n navigate: function navigate() {\n throw new Error(\"You can't call navigate on the server.\");\n }\n }\n }, children);\n}; ////////////////////////////////////////////////////////////////////////////////\n// Sets baseuri and basepath for nested routers and links\n\n\nvar BaseContext = createNamedContext(\"Base\", {\n baseuri: \"/\",\n basepath: \"/\",\n navigate: globalHistory.navigate\n}); ////////////////////////////////////////////////////////////////////////////////\n// The main event, welcome to the show everybody.\n\nvar Router = function Router(props) {\n return React.createElement(BaseContext.Consumer, null, function (baseContext) {\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RouterImpl, _extends({}, baseContext, locationContext, props));\n });\n });\n};\n\nvar RouterImpl = function (_React$PureComponent) {\n _inherits(RouterImpl, _React$PureComponent);\n\n function RouterImpl() {\n _classCallCheck(this, RouterImpl);\n\n return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));\n }\n\n RouterImpl.prototype.render = function render() {\n var _props = this.props,\n location = _props.location,\n _navigate2 = _props.navigate,\n basepath = _props.basepath,\n primary = _props.primary,\n children = _props.children,\n baseuri = _props.baseuri,\n _props$component = _props.component,\n component = _props$component === undefined ? \"div\" : _props$component,\n domProps = _objectWithoutProperties(_props, [\"location\", \"navigate\", \"basepath\", \"primary\", \"children\", \"baseuri\", \"component\"]);\n\n var routes = React.Children.toArray(children).reduce(function (array, child) {\n var routes = createRoute(basepath)(child);\n return array.concat(routes);\n }, []);\n var pathname = location.pathname;\n var match = pick(routes, pathname);\n\n if (match) {\n var params = match.params,\n uri = match.uri,\n route = match.route,\n element = match.route.value; // remove the /* from the end for child routes relative paths\n\n basepath = route.default ? basepath : route.path.replace(/\\*$/, \"\");\n\n var props = _extends({}, params, {\n uri: uri,\n location: location,\n navigate: function navigate(to, options) {\n return _navigate2(resolve(to, uri), options);\n }\n });\n\n var clone = React.cloneElement(element, props, element.props.children ? React.createElement(Router, {\n location: location,\n primary: primary\n }, element.props.children) : undefined); // using 'div' for < 16.3 support\n\n var FocusWrapper = primary ? FocusHandler : component; // don't pass any props to 'div'\n\n var wrapperProps = primary ? _extends({\n uri: uri,\n location: location,\n component: component\n }, domProps) : domProps;\n return React.createElement(BaseContext.Provider, {\n value: {\n baseuri: uri,\n basepath: basepath,\n navigate: props.navigate\n }\n }, React.createElement(FocusWrapper, wrapperProps, clone));\n } else {\n // Not sure if we want this, would require index routes at every level\n // warning(\n // false,\n // `\\n\\nNothing matched:\\n\\t${\n // location.pathname\n // }\\n\\nPaths checked: \\n\\t${routes\n // .map(route => route.path)\n // .join(\n // \"\\n\\t\"\n // )}\\n\\nTo get rid of this warning, add a default NotFound component as child of Router:\n // \\n\\tlet NotFound = () =>
Not Found!
\n // \\n\\t\\n\\t \\n\\t {/* ... */}\\n\\t`\n // );\n return null;\n }\n };\n\n return RouterImpl;\n}(React.PureComponent);\n\nRouterImpl.defaultProps = {\n primary: true\n};\nvar FocusContext = createNamedContext(\"Focus\");\n\nvar FocusHandler = function FocusHandler(_ref3) {\n var uri = _ref3.uri,\n location = _ref3.location,\n component = _ref3.component,\n domProps = _objectWithoutProperties(_ref3, [\"uri\", \"location\", \"component\"]);\n\n return React.createElement(FocusContext.Consumer, null, function (requestFocus) {\n return React.createElement(FocusHandlerImpl, _extends({}, domProps, {\n component: component,\n requestFocus: requestFocus,\n uri: uri,\n location: location\n }));\n });\n}; // don't focus on initial render\n\n\nvar initialRender = true;\nvar focusHandlerCount = 0;\n\nvar FocusHandlerImpl = function (_React$Component2) {\n _inherits(FocusHandlerImpl, _React$Component2);\n\n function FocusHandlerImpl() {\n var _temp2, _this4, _ret2;\n\n _classCallCheck(this, FocusHandlerImpl);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this4 = _possibleConstructorReturn(this, _React$Component2.call.apply(_React$Component2, [this].concat(args))), _this4), _this4.state = {}, _this4.requestFocus = function (node) {\n if (!_this4.state.shouldFocus && node) {\n node.focus();\n }\n }, _temp2), _possibleConstructorReturn(_this4, _ret2);\n }\n\n FocusHandlerImpl.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var initial = prevState.uri == null;\n\n if (initial) {\n return _extends({\n shouldFocus: true\n }, nextProps);\n } else {\n var myURIChanged = nextProps.uri !== prevState.uri;\n var navigatedUpToMe = prevState.location.pathname !== nextProps.location.pathname && nextProps.location.pathname === nextProps.uri;\n return _extends({\n shouldFocus: myURIChanged || navigatedUpToMe\n }, nextProps);\n }\n };\n\n FocusHandlerImpl.prototype.componentDidMount = function componentDidMount() {\n focusHandlerCount++;\n this.focus();\n };\n\n FocusHandlerImpl.prototype.componentWillUnmount = function componentWillUnmount() {\n focusHandlerCount--;\n\n if (focusHandlerCount === 0) {\n initialRender = true;\n }\n };\n\n FocusHandlerImpl.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevProps.location !== this.props.location && this.state.shouldFocus) {\n this.focus();\n }\n };\n\n FocusHandlerImpl.prototype.focus = function focus() {\n if (process.env.NODE_ENV === \"test\") {\n // getting cannot read property focus of null in the tests\n // and that bit of global `initialRender` state causes problems\n // should probably figure it out!\n return;\n }\n\n var requestFocus = this.props.requestFocus;\n\n if (requestFocus) {\n requestFocus(this.node);\n } else {\n if (initialRender) {\n initialRender = false;\n } else if (this.node) {\n // React polyfills [autofocus] and it fires earlier than cDM,\n // so we were stealing focus away, this line prevents that.\n if (!this.node.contains(document.activeElement)) {\n this.node.focus();\n }\n }\n }\n };\n\n FocusHandlerImpl.prototype.render = function render() {\n var _this5 = this;\n\n var _props2 = this.props,\n children = _props2.children,\n style = _props2.style,\n requestFocus = _props2.requestFocus,\n _props2$component = _props2.component,\n Comp = _props2$component === undefined ? \"div\" : _props2$component,\n uri = _props2.uri,\n location = _props2.location,\n domProps = _objectWithoutProperties(_props2, [\"children\", \"style\", \"requestFocus\", \"component\", \"uri\", \"location\"]);\n\n return React.createElement(Comp, _extends({\n style: _extends({\n outline: \"none\"\n }, style),\n tabIndex: \"-1\",\n ref: function ref(n) {\n return _this5.node = n;\n }\n }, domProps), React.createElement(FocusContext.Provider, {\n value: this.requestFocus\n }, this.props.children));\n };\n\n return FocusHandlerImpl;\n}(React.Component);\n\npolyfill(FocusHandlerImpl);\n\nvar k = function k() {}; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar forwardRef = React.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = function forwardRef(C) {\n return C;\n };\n}\n\nvar Link = forwardRef(function (_ref4, ref) {\n var innerRef = _ref4.innerRef,\n props = _objectWithoutProperties(_ref4, [\"innerRef\"]);\n\n return React.createElement(BaseContext.Consumer, null, function (_ref5) {\n var basepath = _ref5.basepath,\n baseuri = _ref5.baseuri;\n return React.createElement(Location, null, function (_ref6) {\n var location = _ref6.location,\n navigate = _ref6.navigate;\n\n var to = props.to,\n state = props.state,\n replace = props.replace,\n _props$getProps = props.getProps,\n getProps = _props$getProps === undefined ? k : _props$getProps,\n anchorProps = _objectWithoutProperties(props, [\"to\", \"state\", \"replace\", \"getProps\"]);\n\n var href = resolve(to, baseuri);\n var encodedHref = encodeURI(href);\n var isCurrent = location.pathname === encodedHref;\n var isPartiallyCurrent = startsWith(location.pathname, encodedHref);\n return React.createElement(\"a\", _extends({\n ref: ref || innerRef,\n \"aria-current\": isCurrent ? \"page\" : undefined\n }, anchorProps, getProps({\n isCurrent: isCurrent,\n isPartiallyCurrent: isPartiallyCurrent,\n href: href,\n location: location\n }), {\n href: href,\n onClick: function onClick(event) {\n if (anchorProps.onClick) anchorProps.onClick(event);\n\n if (shouldNavigate(event)) {\n event.preventDefault();\n var shouldReplace = replace;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n var _location$state = _extends({}, location.state),\n key = _location$state.key,\n restState = _objectWithoutProperties(_location$state, [\"key\"]);\n\n shouldReplace = shallowCompare(_extends({}, state), restState);\n }\n\n navigate(href, {\n state: state,\n replace: shouldReplace\n });\n }\n }\n }));\n });\n });\n});\nLink.displayName = \"Link\";\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nfunction RedirectRequest(uri) {\n this.uri = uri;\n}\n\nvar isRedirect = function isRedirect(o) {\n return o instanceof RedirectRequest;\n};\n\nvar redirectTo = function redirectTo(to) {\n throw new RedirectRequest(to);\n};\n\nvar RedirectImpl = function (_React$Component3) {\n _inherits(RedirectImpl, _React$Component3);\n\n function RedirectImpl() {\n _classCallCheck(this, RedirectImpl);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n } // Support React < 16 with this hook\n\n\n RedirectImpl.prototype.componentDidMount = function componentDidMount() {\n var _props3 = this.props,\n navigate = _props3.navigate,\n to = _props3.to,\n from = _props3.from,\n _props3$replace = _props3.replace,\n replace = _props3$replace === undefined ? true : _props3$replace,\n state = _props3.state,\n noThrow = _props3.noThrow,\n baseuri = _props3.baseuri,\n props = _objectWithoutProperties(_props3, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n Promise.resolve().then(function () {\n var resolvedTo = resolve(to, baseuri);\n navigate(insertParams(resolvedTo, props), {\n replace: replace,\n state: state\n });\n });\n };\n\n RedirectImpl.prototype.render = function render() {\n var _props4 = this.props,\n navigate = _props4.navigate,\n to = _props4.to,\n from = _props4.from,\n replace = _props4.replace,\n state = _props4.state,\n noThrow = _props4.noThrow,\n baseuri = _props4.baseuri,\n props = _objectWithoutProperties(_props4, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n var resolvedTo = resolve(to, baseuri);\n if (!noThrow) redirectTo(insertParams(resolvedTo, props));\n return null;\n };\n\n return RedirectImpl;\n}(React.Component);\n\nvar Redirect = function Redirect(props) {\n return React.createElement(BaseContext.Consumer, null, function (_ref7) {\n var baseuri = _ref7.baseuri;\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RedirectImpl, _extends({}, locationContext, {\n baseuri: baseuri\n }, props));\n });\n });\n};\n\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar Match = function Match(_ref8) {\n var path = _ref8.path,\n children = _ref8.children;\n return React.createElement(BaseContext.Consumer, null, function (_ref9) {\n var baseuri = _ref9.baseuri;\n return React.createElement(Location, null, function (_ref10) {\n var navigate = _ref10.navigate,\n location = _ref10.location;\n var resolvedPath = resolve(path, baseuri);\n var result = match(resolvedPath, location.pathname);\n return children({\n navigate: navigate,\n location: location,\n match: result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null\n });\n });\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n// Hooks\n\n\nvar useLocation = function useLocation() {\n var context = useContext(LocationContext);\n\n if (!context) {\n throw new Error(\"useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.location;\n};\n\nvar useNavigate = function useNavigate() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useNavigate hook was used but a BaseContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.navigate;\n};\n\nvar useParams = function useParams() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var results = match(context.basepath, location.pathname);\n return results ? results.params : null;\n};\n\nvar useMatch = function useMatch(path) {\n if (!path) {\n throw new Error(\"useMatch(path: string) requires an argument of a string to match against\");\n }\n\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var resolvedPath = resolve(path, context.baseuri);\n var result = match(resolvedPath, location.pathname);\n return result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar stripSlashes = function stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, \"\");\n};\n\nvar createRoute = function createRoute(basepath) {\n return function (element) {\n if (!element) {\n return null;\n }\n\n if (element.type === React.Fragment && element.props.children) {\n return React.Children.map(element.props.children, createRoute(basepath));\n }\n\n !(element.props.path || element.props.default || element.type === Redirect) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \": Children of must have a `path` or `default` prop, or be a ``. None found on element type `\" + element.type + \"`\") : invariant(false) : void 0;\n !!(element.type === Redirect && (!element.props.from || !element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" requires both \\\"from\\\" and \\\"to\\\" props when inside a .\") : invariant(false) : void 0;\n !!(element.type === Redirect && !validateRedirect(element.props.from, element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.\") : invariant(false) : void 0;\n\n if (element.props.default) {\n return {\n value: element,\n default: true\n };\n }\n\n var elementPath = element.type === Redirect ? element.props.from : element.props.path;\n var path = elementPath === \"/\" ? basepath : stripSlashes(basepath) + \"/\" + stripSlashes(elementPath);\n return {\n value: element,\n default: element.props.default,\n path: element.props.children ? stripSlashes(path) + \"/*\" : path\n };\n };\n};\n\nvar shouldNavigate = function shouldNavigate(event) {\n return !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}; ////////////////////////////////////////////////////////////////////////\n\n\nexport { Link, Location, LocationProvider, Match, Redirect, Router, ServerLocation, createHistory, createMemorySource, isRedirect, navigate, redirectTo, globalHistory, match as matchPath, useLocation, useNavigate, useParams, useMatch , BaseContext };","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}"],"names":["module","exports","self","ReferenceError","__esModule","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","setPrototypeOf","subClass","superClass","create","constructor","obj","excluded","sourceKeys","keys","indexOf","_setPrototypeOf","o","p","__proto__","getLocation","_source$location","location","search","hash","href","origin","protocol","host","hostname","port","pathname","canUseDOM","URL","encodeURI","decodeURI","state","history","createHistory","options","listeners","transitioning","resolveTransition","_onTransitionComplete","listen","listener","push","popstateListener","action","addEventListener","removeEventListener","filter","fn","navigate","to","_ref","undefined","_ref$replace","replace","go","Date","now","replaceState","pushState","e","transition","Promise","res","forEach","createMemorySource","initialPath","searchIndex","initialLocation","substr","index","stack","states","name","entries","_","uri","_uri$split","split","_uri$split$","_uri$split2","_uri$split2$","newIndex","window","document","createElement","globalHistory","shallowCompare","validateRedirect","insertParams","resolve","match","pick","startsWith","_invariant","_invariant2","default","string","routes","default_","uriPathname","uriSegments","segmentize","isRootUri","ranked","rankRoutes","l","missed","route","params","routeSegments","path","max","Math","routeSegment","uriSegment","isSplat","slice","map","decodeURIComponent","join","dynamicMatch","paramRe","exec","reservedNames","value","isDynamic","segment","test","rankRoute","score","reduce","isRootSegment","SEGMENT_POINTS","sort","a","b","addQuery","_len","query","Array","_key","q","base","_to$split","toPathname","toQuery","basePathname","toSegments","baseSegments","concat","allSegments","segments","pop","_path$split","pathBase","_path$split$","constructedPath","_params$location","_params$location$sear","searchSplit","from","obj1","obj2","obj1Keys","every","_interopRequireDefault","withPrefix","getGlobalPathPrefix","_objectWithoutPropertiesLoose2","_assertThisInitialized2","_inheritsLoose2","_extends2","_propTypes","_react","_reachRouter","_utils","_parsePath","parsePath","_excluded","isAbsolutePath","prefix","_prefix","getGlobalBasePrefix","isLocalLink","endsWith","rewriteLinkPath","relativeTo","current","absolutify","NavLinkPropTypes","activeClassName","activeStyle","object","partiallyActive","bool","GatsbyLinkLocationWrapper","props","Location","_ref2","GatsbyLink","_location","_React$Component","_this","defaultGetProps","_ref3","isPartiallyCurrent","isCurrent","className","Boolean","style","IOSupported","IntersectionObserver","handleRef","bind","_proto","_prefetch","currentPath","rewrittenPath","newPathName","___loader","enqueue","componentDidUpdate","prevProps","prevState","componentDidMount","componentWillUnmount","io","_this$io","instance","el","unobserve","disconnect","ref","cb","_this2","innerRef","entry","isIntersecting","intersectionRatio","observe","render","_this3","_this$props","_this$props$getProps","getProps","_onClick","onClick","_onMouseEnter","onMouseEnter","rest","prefixedTo","Link","hovering","button","defaultPrevented","metaKey","altKey","ctrlKey","shiftKey","preventDefault","shouldReplace","___navigate","Component","propTypes","func","isRequired","_default","forwardRef","hashIndex","_scrollHandler","ScrollHandler","_useScrollRestoration","useScrollRestoration","ScrollContext","React","nodeInterop","cache","_getRequireWildcardCache","has","get","newObj","hasPropertyDescriptor","defineProperty","getOwnPropertyDescriptor","desc","set","_interopRequireWildcard","_sessionStorage","WeakMap","cacheBabelInterop","cacheNodeInterop","createContext","SessionStorage","displayName","args","_stateStorage","_isTicking","_latestKnownScrollY","scrollListener","scrollY","requestAnimationFrame","_saveScroll","windowScroll","position","shouldUpdateScroll","scrollTo","scrollToHash","node","getElementById","substring","scrollIntoView","prevRouterProps","routerProps","save","scrollPosition","_this$props$location","read","_this$props$location2","Provider","children","element","GATSBY_ROUTER_SCROLL_STATE","stateKey","getStateKey","sessionStorage","getItem","JSON","parse","storedValue","stringify","setItem","stateKeyBase","identifier","useLocation","useContext","useRef","useLayoutEffect","onScroll","scrollTop","onRouteUpdate","gtag","excludeGtagPaths","some","rx","sendPageView","pagePath","page_path","setTimeout","listOfMetricsSend","Set","debounce","timeout","timer","clearTimeout","sendWebVitals","dataLayerName","win","sendData","data","dataLayer","id","add","event","webVitalsMeasurement","round","then","getLCP","getFID","getCLS","debouncedCLS","debouncedFID","debouncedLCP","pluginOptions","eventName","routeChangeEventName","onInitialClientRender","enableWebVitalsTracking","require","localizedManifests","defaultFilename","isArray","localizedManifest","find","app","start_url","lang","offsetY","getTargetOffset","pageYOffset","documentElement","body","clientTop","computedStyles","getComputedStyle","scrollMarginTop","getPropertyValue","getBoundingClientRect","top","parseInt","offset","DEFAULT_OPTIONS","maxWidth","wrapperStyle","backgroundColor","linkImagesToOriginal","showCaptions","markdownCaptions","withWebp","withAvif","tracedSVG","loading","decoding","disableBgImageOnAlpha","disableBgImage","EMPTY_ALT","imageClass","imageWrapperClass","imageBackgroundClass","_require","apiCallbackContext","imageWrappers","querySelectorAll","_loop","imageWrapper","backgroundElement","querySelector","imageElement","onImageLoad","onImageComplete","opacity","color","boxShadow","complete","components","plugin","plugins","getResourceURLsForPathname","loadPage","loadPageSync","api","defaultReturn","argTransform","results","result","previous","next","all","on","type","handler","off","splice","emit","evt","mitt","charAt","pathCache","Map","matchPaths","trimPathname","rawPathname","stripPrefix","__BASE_PATH__","setMatchPaths","findMatchPath","trimmedPathname","cleanPath","pickPaths","matchPath","originalPath","normalizePagePath","grabMatchParams","findPath","redirect","maybeGetBrowserRedirect","toPath","foundPath","prefetchPathname","loader","StaticQueryContext","StaticQueryDataRenderer","staticQueryData","finalData","StaticQuery","Consumer","useStaticQuery","context","isNaN","Number","Error","graphql","_arrayLikeToArray","arr","len","arr2","_toConsumableArray","iter","Symbol","iterator","minLen","n","toString","TypeError","supportedPrefetchStrategy","feature","fakeLink","relList","supports","err","support","url","reject","link","setAttribute","onload","onerror","getElementsByTagName","getElementsByName","parentNode","appendChild","req","XMLHttpRequest","open","status","send","preFetched","catch","PageResourceStatus","Success","preferDefault","m","createPageDataUrl","s","doFetch","method","onreadystatechange","readyState","toPageResources","pageData","component","page","componentChunkName","webpackCompilationHash","staticQueryHashes","json","BaseLoader","loadComponent","inFlightNetworkRequests","pageDb","inFlightDb","staticQueryDb","pageDataDb","prefetchTriggered","prefetchCompleted","memoizedGet","inFlightPromise","response","delete","setApiRunner","apiRunner","prefetchDisabled","fetchPageDataJson","loadObj","retries","responseText","jsonPayload","payload","notFound","loadPageDataJson","rawPath","error","loadAppData","allData","finalResult","componentChunkPromise","pageResources","createdAt","staticQueryBatchPromise","staticQueryHash","staticQueryResults","staticQueryResultsMap","emitter","withErrorDetails","shouldPrefetch","navigator","connection","effectiveType","includes","saveData","doesConnectionSupportPrefetch","prefetch","realPath","doPrefetch","pageDataUrl","prefetchHelper","crossOrigin","as","createComponentUrls","isPageNotFound","appData","___chunkMapping","chunk","__PATH_PREFIX__","ProdLoader","asyncRequires","chunkName","componentUrls","setLoader","_loader","publicLoader","getStaticQueryResults","PageRenderer","pageContext","__params","pageElement","RouteAnnouncerProps","width","height","padding","overflow","clip","whiteSpace","border","maybeRedirect","___replace","nextRoute","reason","onPreRouteUpdate","prevLocation","___swUpdated","timeoutId","___webpackCompilationHash","serviceWorker","controller","postMessage","gatsbyApi","reachNavigate","getSavedScrollPosition","RouteAnnouncer","announcementRef","nextProps","pageName","title","pageHeadings","textContent","newAnnouncement","innerText","compareLocationProps","nextLocation","RouteUpdates","shouldComponentUpdate","shallowDiffers","_i","EnsureResources","getDerivedStateFromProps","loadResources","setState","nextState","___emitter","___push","apiRunnerAsync","RouteHandler","BaseContext","baseuri","basepath","DataContext","GatsbyRoot","LocationHandler","Router","browserLoc","message","console","SiteRoot","App","onClientEntryRanRef","performance","mark","renderer","ReactDOM","runRender","rootElement","doc","doScroll","InternalPageRenderer","redirectMap","redirectIgnoreCaseMap","toLowerCase","redirects","ignoreCase","fromPath","register","reg","installingWorker","installing","log","___failedResources","reload","str","_objectWithoutProperties","_classCallCheck","Constructor","_possibleConstructorReturn","_inherits","enumerable","writable","configurable","createNamedContext","defaultValue","Ctx","LocationContext","LocationProvider","_temp","getContext","refs","unlisten","_props$history","componentDidCatch","info","isRedirect","_navigate","unmounted","defaultProps","ServerLocation","baseContext","locationContext","RouterImpl","_React$PureComponent","_props","_navigate2","primary","_props$component","domProps","array","child","createRoute","clone","FocusWrapper","FocusHandler","wrapperProps","FocusContext","requestFocus","FocusHandlerImpl","initialRender","focusHandlerCount","_React$Component2","_temp2","_this4","_len2","_key2","shouldFocus","focus","myURIChanged","navigatedUpToMe","contains","activeElement","_this5","_props2","_props2$component","Comp","outline","tabIndex","k","C","_ref4","_ref5","_ref6","_props$getProps","anchorProps","encodedHref","shouldNavigate","_location$state","restState","RedirectRequest","redirectTo","RedirectImpl","_React$Component3","_props3","_props3$replace","noThrow","resolvedTo","_props4","Redirect","_ref7","Match","_ref8","_ref9","_ref10","resolvedPath","useNavigate","useParams","useMatch","stripSlashes","elementPath","condition","format","c","d","f","argIndex","framesToPop","_inheritsLoose"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"app-2825acd8c555263e0b03.js","mappings":"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","sources":["webpack://website/../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://website/../../node_modules/@babel/runtime/helpers/extends.js","webpack://website/../../node_modules/@babel/runtime/helpers/inheritsLoose.js","webpack://website/../../node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack://website/../../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack://website/../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/lib/history.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/lib/utils.js","webpack://website/../../node_modules/gatsby/dist/internal-plugins/bundle-optimisations/polyfills/object-assign.js","webpack://website/../../node_modules/gatsby-link/index.js","webpack://website/../../node_modules/gatsby-link/parse-path.js","webpack://website/../../node_modules/gatsby-react-router-scroll/index.js","webpack://website/../../node_modules/gatsby-react-router-scroll/scroll-handler.js","webpack://website/../../node_modules/gatsby-react-router-scroll/session-storage.js","webpack://website/../../node_modules/gatsby-react-router-scroll/use-scroll-restoration.js","webpack://website/../../node_modules/gatsby-plugin-google-gtag/gatsby-browser.js","webpack://website/../../node_modules/gatsby-plugin-google-tagmanager/gatsby-browser.js","webpack://website/../../node_modules/gatsby-plugin-manifest/gatsby-browser.js","webpack://website/../../node_modules/gatsby-plugin-manifest/get-manifest-pathname.js","webpack://website/../../node_modules/gatsby-remark-autolink-headers/gatsby-browser.js","webpack://website/../../node_modules/gatsby-remark-images/constants.js","webpack://website/../../node_modules/gatsby-remark-images/gatsby-browser.js","webpack://website/./.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js","webpack://website/./.cache/api-runner-browser-plugins.js","webpack://website/./.cache/api-runner-browser.js","webpack://website/../../node_modules/mitt/dist/mitt.es.js","webpack://website/./.cache/emitter.js","webpack://website/./.cache/normalize-page-path.js","webpack://website/./.cache/find-path.js","webpack://website/./.cache/gatsby-browser-entry.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://website/./.cache/prefetch.js","webpack://website/./.cache/loader.js","webpack://website/./.cache/page-renderer.js","webpack://website/./.cache/route-announcer-props.js","webpack://website/./.cache/navigation.js","webpack://website/../../node_modules/shallow-compare/es/index.js","webpack://website/./.cache/ensure-resources.js","webpack://website/./.cache/production-app.js","webpack://website/./.cache/public-page-renderer-prod.js","webpack://website/./.cache/public-page-renderer.js","webpack://website/./.cache/react-lifecycles-compat.js","webpack://website/./.cache/redirect-utils.js","webpack://website/./.cache/register-service-worker.js","webpack://website/./.cache/strip-prefix.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/es/lib/utils.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/es/lib/history.js","webpack://website/../../node_modules/@gatsbyjs/reach-router/es/index.js","webpack://website/../../node_modules/invariant/browser.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://website/../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"],"sourcesContent":["function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inheritsLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","\"use strict\";\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexports.globalHistory = globalHistory;\nexports.navigate = navigate;\nexports.createHistory = createHistory;\nexports.createMemorySource = createMemorySource;","\"use strict\";\n\nexports.__esModule = true;\nexports.shallowCompare = exports.validateRedirect = exports.insertParams = exports.resolve = exports.match = exports.pick = exports.startsWith = undefined;\n\nvar _invariant = require(\"invariant\");\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? (0, _invariant2.default)(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : (0, _invariant2.default)(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexports.startsWith = startsWith;\nexports.pick = pick;\nexports.match = match;\nexports.resolve = resolve;\nexports.insertParams = insertParams;\nexports.validateRedirect = validateRedirect;\nexports.shallowCompare = shallowCompare;","\"use strict\";\n\nmodule.exports = Object.assign;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.withPrefix = withPrefix;\nexports.withAssetPrefix = withAssetPrefix;\nexports.navigate = exports.default = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nvar _utils = require(\"@gatsbyjs/reach-router/lib/utils\");\n\nvar _parsePath = require(\"./parse-path\");\n\nexports.parsePath = _parsePath.parsePath;\nvar _excluded = [\"to\", \"getProps\", \"onClick\", \"onMouseEnter\", \"activeClassName\", \"activeStyle\", \"innerRef\", \"partiallyActive\", \"state\", \"replace\", \"_location\"];\n\nvar isAbsolutePath = function isAbsolutePath(path) {\n return path === null || path === void 0 ? void 0 : path.startsWith(\"/\");\n};\n\nfunction withPrefix(path, prefix) {\n var _ref, _prefix;\n\n if (prefix === void 0) {\n prefix = getGlobalBasePrefix();\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n if (path.startsWith(\"./\") || path.startsWith(\"../\")) {\n return path;\n }\n\n var base = (_ref = (_prefix = prefix) !== null && _prefix !== void 0 ? _prefix : getGlobalPathPrefix()) !== null && _ref !== void 0 ? _ref : \"/\";\n return \"\" + (base !== null && base !== void 0 && base.endsWith(\"/\") ? base.slice(0, -1) : base) + (path.startsWith(\"/\") ? path : \"/\" + path);\n} // These global values are wrapped in typeof clauses to ensure the values exist.\n// This is especially problematic in unit testing of this component.\n\n\nvar getGlobalPathPrefix = function getGlobalPathPrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __PATH_PREFIX__ !== \"undefined\" ? __PATH_PREFIX__ : undefined : __PATH_PREFIX__;\n};\n\nvar getGlobalBasePrefix = function getGlobalBasePrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __BASE_PATH__ !== \"undefined\" ? __BASE_PATH__ : undefined : __BASE_PATH__;\n};\n\nvar isLocalLink = function isLocalLink(path) {\n return path && !path.startsWith(\"http://\") && !path.startsWith(\"https://\") && !path.startsWith(\"//\");\n};\n\nfunction withAssetPrefix(path) {\n return withPrefix(path, getGlobalPathPrefix());\n}\n\nfunction absolutify(path, current) {\n // If it's already absolute, return as-is\n if (isAbsolutePath(path)) {\n return path;\n }\n\n return (0, _utils.resolve)(path, current);\n}\n\nvar rewriteLinkPath = function rewriteLinkPath(path, relativeTo) {\n if (typeof path === \"number\") {\n return path;\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n return isAbsolutePath(path) ? withPrefix(path) : absolutify(path, relativeTo);\n};\n\nvar NavLinkPropTypes = {\n activeClassName: _propTypes.default.string,\n activeStyle: _propTypes.default.object,\n partiallyActive: _propTypes.default.bool\n}; // Set up IntersectionObserver\n\nvar createIntersectionObserver = function createIntersectionObserver(el, cb) {\n var io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (el === entry.target) {\n // Check if element is within viewport, remove listener, destroy observer, and run link callback.\n // MSEdge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(el);\n io.disconnect();\n cb();\n }\n }\n });\n }); // Add element to the observer\n\n io.observe(el);\n return {\n instance: io,\n el: el\n };\n};\n\nfunction GatsbyLinkLocationWrapper(props) {\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, function (_ref2) {\n var location = _ref2.location;\n return /*#__PURE__*/_react.default.createElement(GatsbyLink, (0, _extends2.default)({}, props, {\n _location: location\n }));\n });\n}\n\nvar GatsbyLink = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(GatsbyLink, _React$Component);\n\n function GatsbyLink(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // Default to no support for IntersectionObserver\n\n _this.defaultGetProps = function (_ref3) {\n var isPartiallyCurrent = _ref3.isPartiallyCurrent,\n isCurrent = _ref3.isCurrent;\n\n if (_this.props.partiallyActive ? isPartiallyCurrent : isCurrent) {\n return {\n className: [_this.props.className, _this.props.activeClassName].filter(Boolean).join(\" \"),\n style: (0, _extends2.default)({}, _this.props.style, _this.props.activeStyle)\n };\n }\n\n return null;\n };\n\n var IOSupported = false;\n\n if (typeof window !== \"undefined\" && window.IntersectionObserver) {\n IOSupported = true;\n }\n\n _this.state = {\n IOSupported: IOSupported\n };\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = GatsbyLink.prototype;\n\n _proto._prefetch = function _prefetch() {\n var currentPath = window.location.pathname; // reach router should have the correct state\n\n if (this.props._location && this.props._location.pathname) {\n currentPath = this.props._location.pathname;\n }\n\n var rewrittenPath = rewriteLinkPath(this.props.to, currentPath);\n var newPathName = (0, _parsePath.parsePath)(rewrittenPath).pathname; // Prefech is used to speed up next navigations. When you use it on the current navigation,\n // there could be a race-condition where Chrome uses the stale data instead of waiting for the network to complete\n\n if (currentPath !== newPathName) {\n ___loader.enqueue(newPathName);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // Preserve non IO functionality if no support\n if (this.props.to !== prevProps.to && !this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n // Preserve non IO functionality if no support\n if (!this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (!this.io) {\n return;\n }\n\n var _this$io = this.io,\n instance = _this$io.instance,\n el = _this$io.el;\n instance.unobserve(el);\n instance.disconnect();\n };\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.props.innerRef && this.props.innerRef.hasOwnProperty(\"current\")) {\n this.props.innerRef.current = ref;\n } else if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n if (this.state.IOSupported && ref) {\n // If IO supported and element reference found, setup Observer functionality\n this.io = createIntersectionObserver(ref, function () {\n _this2._prefetch();\n });\n }\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props = this.props,\n to = _this$props.to,\n _this$props$getProps = _this$props.getProps,\n getProps = _this$props$getProps === void 0 ? this.defaultGetProps : _this$props$getProps,\n _onClick = _this$props.onClick,\n _onMouseEnter = _this$props.onMouseEnter,\n $activeClassName = _this$props.activeClassName,\n $activeStyle = _this$props.activeStyle,\n $innerRef = _this$props.innerRef,\n partiallyActive = _this$props.partiallyActive,\n state = _this$props.state,\n replace = _this$props.replace,\n _location = _this$props._location,\n rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props, _excluded);\n\n if (process.env.NODE_ENV !== \"production\" && !isLocalLink(to)) {\n console.warn(\"External link \" + to + \" was detected in a Link component. Use the Link component only for internal links. See: https://gatsby.dev/internal-links\");\n }\n\n var prefixedTo = rewriteLinkPath(to, _location.pathname);\n\n if (!isLocalLink(prefixedTo)) {\n return /*#__PURE__*/_react.default.createElement(\"a\", (0, _extends2.default)({\n href: prefixedTo\n }, rest));\n }\n\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Link, (0, _extends2.default)({\n to: prefixedTo,\n state: state,\n getProps: getProps,\n innerRef: this.handleRef,\n onMouseEnter: function onMouseEnter(e) {\n if (_onMouseEnter) {\n _onMouseEnter(e);\n }\n\n ___loader.hovering((0, _parsePath.parsePath)(prefixedTo).pathname);\n },\n onClick: function onClick(e) {\n if (_onClick) {\n _onClick(e);\n }\n\n if (e.button === 0 && // ignore right clicks\n !_this3.props.target && // let browser handle \"target=_blank\"\n !e.defaultPrevented && // onClick prevented default\n !e.metaKey && // ignore clicks with modifier keys...\n !e.altKey && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault();\n var shouldReplace = replace;\n\n var isCurrent = encodeURI(prefixedTo) === _location.pathname;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n shouldReplace = true;\n } // Make sure the necessary scripts and data are\n // loaded before continuing.\n\n\n window.___navigate(prefixedTo, {\n state: state,\n replace: shouldReplace\n });\n }\n\n return true;\n }\n }, rest));\n };\n\n return GatsbyLink;\n}(_react.default.Component);\n\nGatsbyLink.propTypes = (0, _extends2.default)({}, NavLinkPropTypes, {\n onClick: _propTypes.default.func,\n to: _propTypes.default.string.isRequired,\n replace: _propTypes.default.bool,\n state: _propTypes.default.object\n});\n\nvar _default = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n return /*#__PURE__*/_react.default.createElement(GatsbyLinkLocationWrapper, (0, _extends2.default)({\n innerRef: ref\n }, props));\n});\n\nexports.default = _default;\n\nvar navigate = function navigate(to, options) {\n window.___navigate(rewriteLinkPath(to, window.location.pathname), options);\n};\n\nexports.navigate = navigate;","\"use strict\";\n\nexports.__esModule = true;\nexports.parsePath = parsePath;\n\nfunction parsePath(path) {\n var pathname = path || \"/\";\n var search = \"\";\n var hash = \"\";\n var hashIndex = pathname.indexOf(\"#\");\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf(\"?\");\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === \"?\" ? \"\" : search,\n hash: hash === \"#\" ? \"\" : hash\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = exports.ScrollContext = void 0;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nexports.ScrollContext = _scrollHandler.ScrollHandler;\n\nvar _useScrollRestoration = require(\"./use-scroll-restoration\");\n\nexports.useScrollRestoration = _useScrollRestoration.useScrollRestoration;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _sessionStorage = require(\"./session-storage\");\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = \"GatsbyScrollContext\";\n\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n\n function ScrollHandler() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this._stateStorage = new _sessionStorage.SessionStorage();\n _this._isTicking = false;\n _this._latestKnownScrollY = 0;\n\n _this.scrollListener = function () {\n _this._latestKnownScrollY = window.scrollY;\n\n if (!_this._isTicking) {\n _this._isTicking = true;\n requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n }\n };\n\n _this.windowScroll = function (position, prevProps) {\n if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n window.scrollTo(0, position);\n }\n };\n\n _this.scrollToHash = function (hash, prevProps) {\n var node = document.getElementById(hash.substring(1));\n\n if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n node.scrollIntoView();\n }\n };\n\n _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n\n if (!shouldUpdateScroll) {\n return true;\n } // Hack to allow accessing this._stateStorage.\n\n\n return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n };\n\n return _this;\n }\n\n var _proto = ScrollHandler.prototype;\n\n _proto._saveScroll = function _saveScroll() {\n var key = this.props.location.key || null;\n\n if (key) {\n this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n }\n\n this._isTicking = false;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n window.addEventListener(\"scroll\", this.scrollListener);\n var scrollPosition;\n var _this$props$location = this.props.location,\n key = _this$props$location.key,\n hash = _this$props$location.hash;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n\n if (scrollPosition) {\n this.windowScroll(scrollPosition, undefined);\n } else if (hash) {\n this.scrollToHash(decodeURI(hash), undefined);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n window.removeEventListener(\"scroll\", this.scrollListener);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props$location2 = this.props.location,\n hash = _this$props$location2.hash,\n key = _this$props$location2.key;\n var scrollPosition;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n /** There are two pieces of state: the browser url and\n * history state which keeps track of scroll position\n * Native behaviour prescribes that we ought to restore scroll position\n * when a user navigates back in their browser (this is the `POP` action)\n * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n * So we _always_ stick to the url as a source of truth — if the url\n * contains a hash, we scroll to it\n */\n\n\n if (hash) {\n this.scrollToHash(decodeURI(hash), prevProps);\n } else {\n this.windowScroll(scrollPosition, prevProps);\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n value: this._stateStorage\n }, this.props.children);\n };\n\n return ScrollHandler;\n}(React.Component);\n\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n shouldUpdateScroll: _propTypes.default.func,\n children: _propTypes.default.element.isRequired,\n location: _propTypes.default.object.isRequired\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = \"@@scroll|\";\nvar GATSBY_ROUTER_SCROLL_STATE = \"___GATSBY_REACT_ROUTER_SCROLL\";\n\nvar SessionStorage = /*#__PURE__*/function () {\n function SessionStorage() {}\n\n var _proto = SessionStorage.prototype;\n\n _proto.read = function read(location, key) {\n var stateKey = this.getStateKey(location, key);\n\n try {\n var value = window.sessionStorage.getItem(stateKey);\n return value ? JSON.parse(value) : 0;\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to access sessionStorage; sessionStorage is not available.\");\n }\n\n if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n }\n\n return 0;\n }\n };\n\n _proto.save = function save(location, key, value) {\n var stateKey = this.getStateKey(location, key);\n var storedValue = JSON.stringify(value);\n\n try {\n window.sessionStorage.setItem(stateKey, storedValue);\n } catch (e) {\n if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n } else {\n window[GATSBY_ROUTER_SCROLL_STATE] = {};\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to save state in sessionStorage; sessionStorage is not available.\");\n }\n }\n };\n\n _proto.getStateKey = function getStateKey(location, key) {\n var stateKeyBase = \"\" + STATE_KEY_PREFIX + location.pathname;\n return key === null || typeof key === \"undefined\" ? stateKeyBase : stateKeyBase + \"|\" + key;\n };\n\n return SessionStorage;\n}();\n\nexports.SessionStorage = SessionStorage;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nvar _react = require(\"react\");\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nfunction useScrollRestoration(identifier) {\n var location = (0, _reachRouter.useLocation)();\n var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n var ref = (0, _react.useRef)(null);\n (0, _react.useLayoutEffect)(function () {\n if (ref.current) {\n var position = state.read(location, identifier);\n ref.current.scrollTo(0, position || 0);\n }\n }, [location.key]);\n return {\n ref: ref,\n onScroll: function onScroll() {\n if (ref.current) {\n state.save(location, identifier, ref.current.scrollTop);\n }\n }\n };\n}","\"use strict\";\n\nexports.onRouteUpdate = function (_ref) {\n var location = _ref.location;\n\n if (process.env.NODE_ENV !== \"production\" || typeof gtag !== \"function\") {\n return null;\n }\n\n var pathIsExcluded = location && typeof window.excludeGtagPaths !== \"undefined\" && window.excludeGtagPaths.some(function (rx) {\n return rx.test(location.pathname);\n });\n if (pathIsExcluded) return null; // wrap inside a timeout to make sure react-helmet is done with its changes (https://github.com/gatsbyjs/gatsby/issues/11592)\n\n var sendPageView = function sendPageView() {\n var pagePath = location ? location.pathname + location.search + location.hash : undefined;\n window.gtag(\"event\", \"page_view\", {\n page_path: pagePath\n });\n };\n\n if (\"requestAnimationFrame\" in window) {\n requestAnimationFrame(function () {\n requestAnimationFrame(sendPageView);\n });\n } else {\n // simulate 2 rAF calls\n setTimeout(sendPageView, 32);\n }\n\n return null;\n};","const listOfMetricsSend = new Set();\n\nfunction debounce(fn, timeout) {\n let timer = null;\n return function (...args) {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(fn, timeout, ...args);\n };\n}\n\nfunction sendWebVitals(dataLayerName = `dataLayer`) {\n const win = window;\n\n function sendData(data) {\n if (listOfMetricsSend.has(data.name)) {\n return;\n }\n\n listOfMetricsSend.add(data.name);\n sendToGTM(data, win[dataLayerName]);\n }\n\n return import(`web-vitals/base`).then(({\n getLCP,\n getFID,\n getCLS\n }) => {\n const debouncedCLS = debounce(sendData, 3000); // we don't need to debounce FID - we send it when it happens\n\n const debouncedFID = sendData; // LCP can occur multiple times so we debounce it\n\n const debouncedLCP = debounce(sendData, 3000); // With the true flag, we measure all previous occurences too, in case we start listening to late.\n\n getCLS(debouncedCLS, true);\n getFID(debouncedFID, true);\n getLCP(debouncedLCP, true);\n });\n}\n\nfunction sendToGTM({\n name,\n value,\n id\n}, dataLayer) {\n dataLayer.push({\n event: `core-web-vitals`,\n webVitalsMeasurement: {\n name: name,\n // The `id` value will be unique to the current page load. When sending\n // multiple values from the same page (e.g. for CLS), Google Analytics can\n // compute a total by grouping on this ID (note: requires `eventLabel` to\n // be a dimension in your report).\n id,\n // Google Analytics metrics must be integers, so the value is rounded.\n // For CLS the value is first multiplied by 1000 for greater precision\n // (note: increase the multiplier for greater precision if needed).\n value: Math.round(name === `CLS` ? value * 1000 : value)\n }\n });\n}\n\nexport function onRouteUpdate(_, pluginOptions) {\n if (process.env.NODE_ENV === `production` || pluginOptions.includeInDevelopment) {\n // wrap inside a timeout to ensure the title has properly been changed\n setTimeout(() => {\n const data = pluginOptions.dataLayerName ? window[pluginOptions.dataLayerName] : window.dataLayer;\n const eventName = pluginOptions.routeChangeEventName ? pluginOptions.routeChangeEventName : `gatsby-route-change`;\n data.push({\n event: eventName\n });\n }, 50);\n }\n}\nexport function onInitialClientRender(_, pluginOptions) {\n // we only load the polyfill in production so we can't enable it in development\n if (process.env.NODE_ENV === `production` && pluginOptions.enableWebVitalsTracking) {\n sendWebVitals(pluginOptions.dataLayerName);\n }\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _gatsby = require(\"gatsby\");\n\nvar _getManifestPathname = _interopRequireDefault(require(\"./get-manifest-pathname\"));\n\n/* global __MANIFEST_PLUGIN_HAS_LOCALISATION__ */\n// when we don't have localisation in our manifest, we tree shake everything away\nif (__MANIFEST_PLUGIN_HAS_LOCALISATION__) {\n exports.onRouteUpdate = function (_ref, pluginOptions) {\n var location = _ref.location;\n var localize = pluginOptions.localize;\n var manifestFilename = (0, _getManifestPathname.default)(location.pathname, localize);\n var manifestEl = document.head.querySelector(\"link[rel=\\\"manifest\\\"]\");\n\n if (manifestEl) {\n manifestEl.setAttribute(\"href\", (0, _gatsby.withPrefix)(manifestFilename));\n }\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\n/**\n * Get a manifest filename depending on localized pathname\n *\n * @param {string} pathname\n * @param {Array<{start_url: string, lang: string}>} localizedManifests\n * @return string\n */\nvar _default = function _default(pathname, localizedManifests) {\n var defaultFilename = \"manifest.webmanifest\";\n\n if (!Array.isArray(localizedManifests)) {\n return defaultFilename;\n }\n\n var localizedManifest = localizedManifests.find(function (app) {\n return pathname.startsWith(app.start_url);\n });\n\n if (!localizedManifest) {\n return defaultFilename;\n }\n\n return \"manifest_\" + localizedManifest.lang + \".webmanifest\";\n};\n\nexports.default = _default;","\"use strict\";\n\nvar offsetY = 0;\n\nvar getTargetOffset = function getTargetOffset(hash) {\n var id = window.decodeURI(hash.replace(\"#\", \"\"));\n\n if (id !== \"\") {\n var element = document.getElementById(id);\n\n if (element) {\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;\n var clientTop = document.documentElement.clientTop || document.body.clientTop || 0;\n var computedStyles = window.getComputedStyle(element);\n var scrollMarginTop = computedStyles.getPropertyValue(\"scroll-margin-top\") || computedStyles.getPropertyValue(\"scroll-snap-margin-top\") || \"0px\";\n return element.getBoundingClientRect().top + scrollTop - parseInt(scrollMarginTop, 10) - clientTop - offsetY;\n }\n }\n\n return null;\n};\n\nexports.onInitialClientRender = function (_, pluginOptions) {\n if (pluginOptions.offsetY) {\n offsetY = pluginOptions.offsetY;\n }\n\n requestAnimationFrame(function () {\n var offset = getTargetOffset(window.location.hash);\n\n if (offset !== null) {\n window.scrollTo(0, offset);\n }\n });\n};\n\nexports.shouldUpdateScroll = function (_ref) {\n var location = _ref.routerProps.location;\n var offset = getTargetOffset(location.hash);\n return offset !== null ? [0, offset] : true;\n};","\"use strict\";\n\nexports.DEFAULT_OPTIONS = {\n maxWidth: 650,\n wrapperStyle: \"\",\n backgroundColor: \"white\",\n linkImagesToOriginal: true,\n showCaptions: false,\n markdownCaptions: false,\n withWebp: false,\n withAvif: false,\n tracedSVG: false,\n loading: \"lazy\",\n decoding: \"async\",\n disableBgImageOnAlpha: false,\n disableBgImage: false\n};\nexports.EMPTY_ALT = \"GATSBY_EMPTY_ALT\";\nexports.imageClass = \"gatsby-resp-image-image\";\nexports.imageWrapperClass = \"gatsby-resp-image-wrapper\";\nexports.imageBackgroundClass = \"gatsby-resp-image-background-image\";","\"use strict\";\n\nvar _require = require(\"./constants\"),\n DEFAULT_OPTIONS = _require.DEFAULT_OPTIONS,\n imageClass = _require.imageClass,\n imageBackgroundClass = _require.imageBackgroundClass,\n imageWrapperClass = _require.imageWrapperClass;\n\nexports.onRouteUpdate = function (apiCallbackContext, pluginOptions) {\n var options = Object.assign({}, DEFAULT_OPTIONS, pluginOptions);\n var imageWrappers = document.querySelectorAll(\".\" + imageWrapperClass); // https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/\n // for cross-browser looping through NodeList without polyfills\n\n var _loop = function _loop(i) {\n var imageWrapper = imageWrappers[i];\n var backgroundElement = imageWrapper.querySelector(\".\" + imageBackgroundClass);\n var imageElement = imageWrapper.querySelector(\".\" + imageClass);\n\n var onImageLoad = function onImageLoad() {\n backgroundElement.style.transition = \"opacity 0.5s 0.5s\";\n imageElement.style.transition = \"opacity 0.5s\";\n onImageComplete();\n };\n\n var onImageComplete = function onImageComplete() {\n backgroundElement.style.opacity = 0;\n imageElement.style.opacity = 1;\n imageElement.style.color = \"inherit\";\n imageElement.style.boxShadow = \"inset 0px 0px 0px 400px \" + options.backgroundColor;\n imageElement.removeEventListener(\"load\", onImageLoad);\n imageElement.removeEventListener(\"error\", onImageComplete);\n };\n\n imageElement.style.opacity = 0;\n imageElement.addEventListener(\"load\", onImageLoad);\n imageElement.addEventListener(\"error\", onImageComplete);\n\n if (imageElement.complete) {\n onImageComplete();\n }\n };\n\n for (var i = 0; i < imageWrappers.length; i++) {\n _loop(i);\n }\n};","// prefer default export if available\nconst preferDefault = m => (m && m.default) || m\n\nexports.components = {\n \"component---src-pages-404-tsx\": () => import(\"./../../../src/pages/404.tsx\" /* webpackChunkName: \"component---src-pages-404-tsx\" */),\n \"component---src-pages-index-tsx\": () => import(\"./../../../src/pages/index.tsx\" /* webpackChunkName: \"component---src-pages-index-tsx\" */),\n \"component---src-templates-blog-post-tsx\": () => import(\"./../../../src/templates/blog-post.tsx\" /* webpackChunkName: \"component---src-templates-blog-post-tsx\" */),\n \"component---src-templates-course-page-tsx\": () => import(\"./../../../src/templates/course-page.tsx\" /* webpackChunkName: \"component---src-templates-course-page-tsx\" */)\n}\n\n","module.exports = [{\n plugin: require('../../../node_modules/gatsby-remark-autolink-headers/gatsby-browser.js'),\n options: {\"plugins\":[],\"offsetY\":0,\"className\":\"anchor\"},\n },{\n plugin: require('../../../node_modules/gatsby-remark-images/gatsby-browser.js'),\n options: {\"plugins\":[],\"maxWidth\":1000,\"linkImagesToOriginal\":true,\"showCaptions\":false,\"markdownCaptions\":false,\"sizeByPixelDensity\":false,\"backgroundColor\":\"white\",\"quality\":50,\"withWebp\":false,\"tracedSVG\":false,\"loading\":\"lazy\",\"decoding\":\"async\",\"disableBgImageOnAlpha\":false,\"disableBgImage\":false},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-google-tagmanager/gatsby-browser.js'),\n options: {\"plugins\":[],\"id\":\"GTM-PW24ZG5\",\"includeInDevelopment\":false,\"defaultDataLayer\":{\"type\":\"object\",\"value\":{\"platform\":\"gatsby\"}},\"routeChangeEventName\":\"gatsby-route-change\",\"enableWebVitalsTracking\":false,\"selfHostedOrigin\":\"https://www.googletagmanager.com\"},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-google-gtag/gatsby-browser.js'),\n options: {\"plugins\":[],\"trackingIds\":[\"G-NPMJTDV8W2\"]},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-manifest/gatsby-browser.js'),\n options: {\"plugins\":[],\"name\":\"TypeScript Training: Learn TypeScript with Mike North!\",\"short_name\":\"TS Training\",\"start_url\":\"/\",\"theme_color\":\"#3178C6\",\"display\":\"minimal-ui\",\"icon\":\"content/assets/ts-logo-512.png\",\"legacy\":true,\"theme_color_in_head\":true,\"cache_busting_mode\":\"query\",\"crossOrigin\":\"anonymous\",\"include_favicon\":true,\"cacheDigest\":\"f750dd4b7cf3a79182eff8c092509daf\"},\n },{\n plugin: require('../../../node_modules/gatsby-plugin-typography/gatsby-browser.js'),\n options: {\"plugins\":[],\"pathToConfigModule\":\"src/utils/typography\"},\n },{\n plugin: require('../gatsby-browser.js'),\n options: {\"plugins\":[]},\n }]\n","const plugins = require(`./api-runner-browser-plugins`)\nconst { getResourceURLsForPathname, loadPage, loadPageSync } =\n require(`./loader`).publicLoader\n\nexports.apiRunner = (api, args = {}, defaultReturn, argTransform) => {\n // Hooks for gatsby-cypress's API handler\n if (process.env.CYPRESS_SUPPORT) {\n if (window.___apiHandler) {\n window.___apiHandler(api)\n } else if (window.___resolvedAPIs) {\n window.___resolvedAPIs.push(api)\n } else {\n window.___resolvedAPIs = [api]\n }\n }\n\n let results = plugins.map(plugin => {\n if (!plugin.plugin[api]) {\n return undefined\n }\n\n args.getResourceURLsForPathname = getResourceURLsForPathname\n args.loadPage = loadPage\n args.loadPageSync = loadPageSync\n\n const result = plugin.plugin[api](args, plugin.options)\n if (result && argTransform) {\n args = argTransform({ args, result, plugin })\n }\n return result\n })\n\n // Filter out undefined results.\n results = results.filter(result => typeof result !== `undefined`)\n\n if (results.length > 0) {\n return results\n } else if (defaultReturn) {\n return [defaultReturn]\n } else {\n return []\n }\n}\n\nexports.apiRunnerAsync = (api, args, defaultReturn) =>\n plugins.reduce(\n (previous, next) =>\n next.plugin[api]\n ? previous.then(() => next.plugin[api](args, next.options))\n : previous,\n Promise.resolve()\n )\n","// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nexport default mitt;\n//# sourceMappingURL=mitt.es.js.map\n","import mitt from \"mitt\"\n\nconst emitter = mitt()\nexport default emitter\n","export default path => {\n if (path === undefined) {\n return path\n }\n if (path === `/`) {\n return `/`\n }\n if (path.charAt(path.length - 1) === `/`) {\n return path.slice(0, -1)\n }\n return path\n}\n","import { pick } from \"@gatsbyjs/reach-router/lib/utils\"\nimport stripPrefix from \"./strip-prefix\"\nimport normalizePagePath from \"./normalize-page-path\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\n\nconst pathCache = new Map()\nlet matchPaths = []\n\nconst trimPathname = rawPathname => {\n const pathname = decodeURIComponent(rawPathname)\n // Remove the pathPrefix from the pathname.\n const trimmedPathname = stripPrefix(\n pathname,\n decodeURIComponent(__BASE_PATH__)\n )\n // Remove any hashfragment\n .split(`#`)[0]\n // Remove search query\n .split(`?`)[0]\n\n return trimmedPathname\n}\n\nfunction absolutify(path) {\n // If it's already absolute, return as-is\n if (\n path.startsWith(`/`) ||\n path.startsWith(`https://`) ||\n path.startsWith(`http://`)\n ) {\n return path\n }\n // Calculate path relative to current location, adding a trailing slash to\n // match behavior of @reach/router\n return new URL(\n path,\n window.location.href + (window.location.href.endsWith(`/`) ? `` : `/`)\n ).pathname\n}\n\n/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */\nexport const setMatchPaths = value => {\n matchPaths = value\n}\n\n/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */\nexport const findMatchPath = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return normalizePagePath(path.route.originalPath)\n }\n\n return null\n}\n\n/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ \":bar/*foo\" }`, and the path is /baz/zaz/zoo\n * then it returns\n * { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */\nexport const grabMatchParams = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return path.params\n }\n\n return {}\n}\n\n// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n// `/foo?bar=far` => `/page1`\nexport const findPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n if (pathCache.has(trimmedPathname)) {\n return pathCache.get(trimmedPathname)\n }\n\n const redirect = maybeGetBrowserRedirect(rawPathname)\n if (redirect) {\n return findPath(redirect.toPath)\n }\n\n let foundPath = findMatchPath(trimmedPathname)\n\n if (!foundPath) {\n foundPath = cleanPath(rawPathname)\n }\n\n pathCache.set(trimmedPathname, foundPath)\n\n return foundPath\n}\n\n/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */\nexport const cleanPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n\n let foundPath = trimmedPathname\n if (foundPath === `/index.html`) {\n foundPath = `/`\n }\n\n foundPath = normalizePagePath(foundPath)\n\n return foundPath\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport Link, {\n withPrefix,\n withAssetPrefix,\n navigate,\n push,\n replace,\n navigateTo,\n parsePath,\n} from \"gatsby-link\"\nimport { useScrollRestoration } from \"gatsby-react-router-scroll\"\nimport PageRenderer from \"./public-page-renderer\"\nimport loader from \"./loader\"\n\nconst prefetchPathname = loader.enqueue\n\nconst StaticQueryContext = React.createContext({})\n\nfunction StaticQueryDataRenderer({ staticQueryData, data, query, render }) {\n const finalData = data\n ? data.data\n : staticQueryData[query] && staticQueryData[query].data\n\n return (\n \n {finalData && render(finalData)}\n {!finalData &&
Loading (StaticQuery)
}\n
\n )\n}\n\nconst StaticQuery = props => {\n const { data, query, render, children } = props\n\n return (\n \n {staticQueryData => (\n \n )}\n \n )\n}\n\nconst useStaticQuery = query => {\n if (\n typeof React.useContext !== `function` &&\n process.env.NODE_ENV === `development`\n ) {\n throw new Error(\n `You're likely using a version of React that doesn't support Hooks\\n` +\n `Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.`\n )\n }\n const context = React.useContext(StaticQueryContext)\n\n // query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n // to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n // catch the misuse of the API and give proper direction\n if (isNaN(Number(query))) {\n throw new Error(`useStaticQuery was called with a string but expects to be called using \\`graphql\\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\\`${query}\\`);\n`)\n }\n\n if (context[query]?.data) {\n return context[query].data\n } else {\n throw new Error(\n `The result of this StaticQuery could not be fetched.\\n\\n` +\n `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +\n `please open an issue in https://github.com/gatsbyjs/gatsby/issues`\n )\n }\n}\n\nStaticQuery.propTypes = {\n data: PropTypes.object,\n query: PropTypes.string.isRequired,\n render: PropTypes.func,\n children: PropTypes.func,\n}\n\nfunction graphql() {\n throw new Error(\n `It appears like Gatsby is misconfigured. Gatsby related \\`graphql\\` calls ` +\n `are supposed to only be evaluated at compile time, and then compiled away. ` +\n `Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n` +\n `Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.`\n )\n}\n\nexport {\n Link,\n withAssetPrefix,\n withPrefix,\n graphql,\n parsePath,\n navigate,\n useScrollRestoration,\n StaticQueryContext,\n StaticQuery,\n PageRenderer,\n useStaticQuery,\n prefetchPathname,\n}\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","const support = function (feature) {\n if (typeof document === `undefined`) {\n return false\n }\n const fakeLink = document.createElement(`link`)\n try {\n if (fakeLink.relList && typeof fakeLink.relList.supports === `function`) {\n return fakeLink.relList.supports(feature)\n }\n } catch (err) {\n return false\n }\n return false\n}\n\nconst linkPrefetchStrategy = function (url, options) {\n return new Promise((resolve, reject) => {\n if (typeof document === `undefined`) {\n reject()\n return\n }\n\n const link = document.createElement(`link`)\n link.setAttribute(`rel`, `prefetch`)\n link.setAttribute(`href`, url)\n\n Object.keys(options).forEach(key => {\n link.setAttribute(key, options[key])\n })\n\n link.onload = resolve\n link.onerror = reject\n\n const parentElement =\n document.getElementsByTagName(`head`)[0] ||\n document.getElementsByName(`script`)[0].parentNode\n parentElement.appendChild(link)\n })\n}\n\nconst xhrPrefetchStrategy = function (url) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(`GET`, url, true)\n\n req.onload = () => {\n if (req.status === 200) {\n resolve()\n } else {\n reject()\n }\n }\n\n req.send(null)\n })\n}\n\nconst supportedPrefetchStrategy = support(`prefetch`)\n ? linkPrefetchStrategy\n : xhrPrefetchStrategy\n\nconst preFetched = {}\n\nconst prefetch = function (url, options) {\n return new Promise(resolve => {\n if (preFetched[url]) {\n resolve()\n return\n }\n\n supportedPrefetchStrategy(url, options)\n .then(() => {\n resolve()\n preFetched[url] = true\n })\n .catch(() => {}) // 404s are logged to the console anyway\n })\n}\n\nexport default prefetch\n","import prefetchHelper from \"./prefetch\"\nimport emitter from \"./emitter\"\nimport { setMatchPaths, findPath, findMatchPath } from \"./find-path\"\n\n/**\n * Available resource loading statuses\n */\nexport const PageResourceStatus = {\n /**\n * At least one of critical resources failed to load\n */\n Error: `error`,\n /**\n * Resources loaded successfully\n */\n Success: `success`,\n}\n\nconst preferDefault = m => (m && m.default) || m\n\nconst stripSurroundingSlashes = s => {\n s = s[0] === `/` ? s.slice(1) : s\n s = s.endsWith(`/`) ? s.slice(0, -1) : s\n return s\n}\n\nconst createPageDataUrl = path => {\n const fixedPath = path === `/` ? `index` : stripSurroundingSlashes(path)\n return `${__PATH_PREFIX__}/page-data/${fixedPath}/page-data.json`\n}\n\nfunction doFetch(url, method = `GET`) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(method, url, true)\n req.onreadystatechange = () => {\n if (req.readyState == 4) {\n resolve(req)\n }\n }\n req.send(null)\n })\n}\n\nconst doesConnectionSupportPrefetch = () => {\n if (\n `connection` in navigator &&\n typeof navigator.connection !== `undefined`\n ) {\n if ((navigator.connection.effectiveType || ``).includes(`2g`)) {\n return false\n }\n if (navigator.connection.saveData) {\n return false\n }\n }\n return true\n}\n\nconst toPageResources = (pageData, component = null) => {\n const page = {\n componentChunkName: pageData.componentChunkName,\n path: pageData.path,\n webpackCompilationHash: pageData.webpackCompilationHash,\n matchPath: pageData.matchPath,\n staticQueryHashes: pageData.staticQueryHashes,\n }\n\n return {\n component,\n json: pageData.result,\n page,\n }\n}\n\nexport class BaseLoader {\n constructor(loadComponent, matchPaths) {\n // Map of pagePath -> Page. Where Page is an object with: {\n // status: PageResourceStatus.Success || PageResourceStatus.Error,\n // payload: PageResources, // undefined if PageResourceStatus.Error\n // }\n // PageResources is {\n // component,\n // json: pageData.result,\n // page: {\n // componentChunkName,\n // path,\n // webpackCompilationHash,\n // staticQueryHashes\n // },\n // staticQueryResults\n // }\n this.pageDb = new Map()\n this.inFlightDb = new Map()\n this.staticQueryDb = {}\n this.pageDataDb = new Map()\n this.prefetchTriggered = new Set()\n this.prefetchCompleted = new Set()\n this.loadComponent = loadComponent\n setMatchPaths(matchPaths)\n }\n\n inFlightNetworkRequests = new Map()\n\n memoizedGet(url) {\n let inFlightPromise = this.inFlightNetworkRequests.get(url)\n\n if (!inFlightPromise) {\n inFlightPromise = doFetch(url, `GET`)\n this.inFlightNetworkRequests.set(url, inFlightPromise)\n }\n\n // Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\n return inFlightPromise\n .then(response => {\n this.inFlightNetworkRequests.delete(url)\n return response\n })\n .catch(err => {\n this.inFlightNetworkRequests.delete(url)\n throw err\n })\n }\n\n setApiRunner(apiRunner) {\n this.apiRunner = apiRunner\n this.prefetchDisabled = apiRunner(`disableCorePrefetching`).some(a => a)\n }\n\n fetchPageDataJson(loadObj) {\n const { pagePath, retries = 0 } = loadObj\n const url = createPageDataUrl(pagePath)\n return this.memoizedGet(url).then(req => {\n const { status, responseText } = req\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.path === undefined) {\n throw new Error(`not a valid pageData response`)\n }\n\n return Object.assign(loadObj, {\n status: PageResourceStatus.Success,\n payload: jsonPayload,\n })\n } catch (err) {\n // continue regardless of error\n }\n }\n\n // Handle 404\n if (status === 404 || status === 200) {\n // If the request was for a 404 page and it doesn't exist, we're done\n if (pagePath === `/404.html`) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Need some code here to cache the 404 request. In case\n // multiple loadPageDataJsons result in 404s\n return this.fetchPageDataJson(\n Object.assign(loadObj, { pagePath: `/404.html`, notFound: true })\n )\n }\n\n // handle 500 response (Unrecoverable)\n if (status === 500) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Handle everything else, including status === 0, and 503s. Should retry\n if (retries < 3) {\n return this.fetchPageDataJson(\n Object.assign(loadObj, { retries: retries + 1 })\n )\n }\n\n // Retried 3 times already, result is an error.\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n })\n }\n\n loadPageDataJson(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDataDb.has(pagePath)) {\n const pageData = this.pageDataDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !pageData.stale) {\n return Promise.resolve(pageData)\n }\n }\n\n return this.fetchPageDataJson({ pagePath }).then(pageData => {\n this.pageDataDb.set(pagePath, pageData)\n\n return pageData\n })\n }\n\n findMatchPath(rawPath) {\n return findMatchPath(rawPath)\n }\n\n // TODO check all uses of this and whether they use undefined for page resources not exist\n loadPage(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const page = this.pageDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !page.payload.stale) {\n if (page.error) {\n return {\n error: page.error,\n status: page.status,\n }\n }\n\n return Promise.resolve(page.payload)\n }\n }\n\n if (this.inFlightDb.has(pagePath)) {\n return this.inFlightDb.get(pagePath)\n }\n\n const inFlightPromise = Promise.all([\n this.loadAppData(),\n this.loadPageDataJson(pagePath),\n ]).then(allData => {\n const result = allData[1]\n if (result.status === PageResourceStatus.Error) {\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n let pageData = result.payload\n const { componentChunkName, staticQueryHashes = [] } = pageData\n\n const finalResult = {}\n\n const componentChunkPromise = this.loadComponent(componentChunkName).then(\n component => {\n finalResult.createdAt = new Date()\n let pageResources\n if (!component || component instanceof Error) {\n finalResult.status = PageResourceStatus.Error\n finalResult.error = component\n } else {\n finalResult.status = PageResourceStatus.Success\n if (result.notFound === true) {\n finalResult.notFound = true\n }\n pageData = Object.assign(pageData, {\n webpackCompilationHash: allData[0]\n ? allData[0].webpackCompilationHash\n : ``,\n })\n pageResources = toPageResources(pageData, component)\n }\n // undefined if final result is an error\n return pageResources\n }\n )\n\n const staticQueryBatchPromise = Promise.all(\n staticQueryHashes.map(staticQueryHash => {\n // Check for cache in case this static query result has already been loaded\n if (this.staticQueryDb[staticQueryHash]) {\n const jsonPayload = this.staticQueryDb[staticQueryHash]\n return { staticQueryHash, jsonPayload }\n }\n\n return this.memoizedGet(\n `${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json`\n )\n .then(req => {\n const jsonPayload = JSON.parse(req.responseText)\n return { staticQueryHash, jsonPayload }\n })\n .catch(() => {\n throw new Error(\n `We couldn't load \"${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json\"`\n )\n })\n })\n ).then(staticQueryResults => {\n const staticQueryResultsMap = {}\n\n staticQueryResults.forEach(({ staticQueryHash, jsonPayload }) => {\n staticQueryResultsMap[staticQueryHash] = jsonPayload\n this.staticQueryDb[staticQueryHash] = jsonPayload\n })\n\n return staticQueryResultsMap\n })\n\n return (\n Promise.all([componentChunkPromise, staticQueryBatchPromise])\n .then(([pageResources, staticQueryResults]) => {\n let payload\n if (pageResources) {\n payload = { ...pageResources, staticQueryResults }\n finalResult.payload = payload\n emitter.emit(`onPostLoadPageResources`, {\n page: payload,\n pageResources: payload,\n })\n }\n\n this.pageDb.set(pagePath, finalResult)\n\n if (finalResult.error) {\n return {\n error: finalResult.error,\n status: finalResult.status,\n }\n }\n\n return payload\n })\n // when static-query fail to load we throw a better error\n .catch(err => {\n return {\n error: err,\n status: PageResourceStatus.Error,\n }\n })\n )\n })\n\n inFlightPromise\n .then(() => {\n this.inFlightDb.delete(pagePath)\n })\n .catch(error => {\n this.inFlightDb.delete(pagePath)\n throw error\n })\n\n this.inFlightDb.set(pagePath, inFlightPromise)\n\n return inFlightPromise\n }\n\n // returns undefined if the page does not exists in cache\n loadPageSync(rawPath, options = {}) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const pageData = this.pageDb.get(pagePath)\n\n if (pageData.payload) {\n return pageData.payload\n }\n\n if (options?.withErrorDetails) {\n return {\n error: pageData.error,\n status: pageData.status,\n }\n }\n }\n return undefined\n }\n\n shouldPrefetch(pagePath) {\n // Skip prefetching if we know user is on slow or constrained connection\n if (!doesConnectionSupportPrefetch()) {\n return false\n }\n\n // Check if the page exists.\n if (this.pageDb.has(pagePath)) {\n return false\n }\n\n return true\n }\n\n prefetch(pagePath) {\n if (!this.shouldPrefetch(pagePath)) {\n return false\n }\n\n // Tell plugins with custom prefetching logic that they should start\n // prefetching this path.\n if (!this.prefetchTriggered.has(pagePath)) {\n this.apiRunner(`onPrefetchPathname`, { pathname: pagePath })\n this.prefetchTriggered.add(pagePath)\n }\n\n // If a plugin has disabled core prefetching, stop now.\n if (this.prefetchDisabled) {\n return false\n }\n\n const realPath = findPath(pagePath)\n // Todo make doPrefetch logic cacheable\n // eslint-disable-next-line consistent-return\n this.doPrefetch(realPath).then(() => {\n if (!this.prefetchCompleted.has(pagePath)) {\n this.apiRunner(`onPostPrefetchPathname`, { pathname: pagePath })\n this.prefetchCompleted.add(pagePath)\n }\n })\n\n return true\n }\n\n doPrefetch(pagePath) {\n const pageDataUrl = createPageDataUrl(pagePath)\n return prefetchHelper(pageDataUrl, {\n crossOrigin: `anonymous`,\n as: `fetch`,\n }).then(() =>\n // This was just prefetched, so will return a response from\n // the cache instead of making another request to the server\n this.loadPageDataJson(pagePath)\n )\n }\n\n hovering(rawPath) {\n this.loadPage(rawPath)\n }\n\n getResourceURLsForPathname(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDataDb.get(pagePath)\n if (page) {\n const pageResources = toPageResources(page.payload)\n\n return [\n ...createComponentUrls(pageResources.page.componentChunkName),\n createPageDataUrl(pagePath),\n ]\n } else {\n return null\n }\n }\n\n isPageNotFound(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDb.get(pagePath)\n return !page || page.notFound\n }\n\n loadAppData(retries = 0) {\n return this.memoizedGet(`${__PATH_PREFIX__}/page-data/app-data.json`).then(\n req => {\n const { status, responseText } = req\n\n let appData\n\n if (status !== 200 && retries < 3) {\n // Retry 3 times incase of non-200 responses\n return this.loadAppData(retries + 1)\n }\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.webpackCompilationHash === undefined) {\n throw new Error(`not a valid app-data response`)\n }\n\n appData = jsonPayload\n } catch (err) {\n // continue regardless of error\n }\n }\n\n return appData\n }\n )\n }\n}\n\nconst createComponentUrls = componentChunkName =>\n (window.___chunkMapping[componentChunkName] || []).map(\n chunk => __PATH_PREFIX__ + chunk\n )\n\nexport class ProdLoader extends BaseLoader {\n constructor(asyncRequires, matchPaths, pageData) {\n const loadComponent = chunkName => {\n if (!asyncRequires.components[chunkName]) {\n throw new Error(\n `We couldn't find the correct component chunk with the name ${chunkName}`\n )\n }\n\n return (\n asyncRequires.components[chunkName]()\n .then(preferDefault)\n // loader will handle the case when component is error\n .catch(err => err)\n )\n }\n\n super(loadComponent, matchPaths)\n\n if (pageData) {\n this.pageDataDb.set(pageData.path, {\n pagePath: pageData.path,\n payload: pageData,\n status: `success`,\n })\n }\n }\n\n doPrefetch(pagePath) {\n return super.doPrefetch(pagePath).then(result => {\n if (result.status !== PageResourceStatus.Success) {\n return Promise.resolve()\n }\n const pageData = result.payload\n const chunkName = pageData.componentChunkName\n const componentUrls = createComponentUrls(chunkName)\n return Promise.all(componentUrls.map(prefetchHelper)).then(() => pageData)\n })\n }\n\n loadPageDataJson(rawPath) {\n return super.loadPageDataJson(rawPath).then(data => {\n if (data.notFound) {\n // check if html file exist using HEAD request:\n // if it does we should navigate to it instead of showing 404\n return doFetch(rawPath, `HEAD`).then(req => {\n if (req.status === 200) {\n // page (.html file) actually exist (or we asked for 404 )\n // returning page resources status as errored to trigger\n // regular browser navigation to given page\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n // if HEAD request wasn't 200, return notFound result\n // and show 404 page\n return data\n })\n }\n return data\n })\n }\n}\n\nlet instance\n\nexport const setLoader = _loader => {\n instance = _loader\n}\n\nexport const publicLoader = {\n enqueue: rawPath => instance.prefetch(rawPath),\n\n // Real methods\n getResourceURLsForPathname: rawPath =>\n instance.getResourceURLsForPathname(rawPath),\n loadPage: rawPath => instance.loadPage(rawPath),\n // TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\n loadPageSync: (rawPath, options = {}) =>\n instance.loadPageSync(rawPath, options),\n prefetch: rawPath => instance.prefetch(rawPath),\n isPageNotFound: rawPath => instance.isPageNotFound(rawPath),\n hovering: rawPath => instance.hovering(rawPath),\n loadAppData: () => instance.loadAppData(),\n}\n\nexport default publicLoader\n\nexport function getStaticQueryResults() {\n if (instance) {\n return instance.staticQueryDb\n } else {\n return {}\n }\n}\n","import React, { createElement } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport { grabMatchParams } from \"./find-path\"\n\n// Renders page\nclass PageRenderer extends React.Component {\n render() {\n const props = {\n ...this.props,\n params: {\n ...grabMatchParams(this.props.location.pathname),\n ...this.props.pageResources.json.pageContext.__params,\n },\n }\n\n const pageElement = createElement(this.props.pageResources.component, {\n ...props,\n key: this.props.path || this.props.pageResources.page.path,\n })\n\n const wrappedPage = apiRunner(\n `wrapPageElement`,\n { element: pageElement, props },\n pageElement,\n ({ result }) => {\n return { element: result, props }\n }\n ).pop()\n\n return wrappedPage\n }\n}\n\nPageRenderer.propTypes = {\n location: PropTypes.object.isRequired,\n pageResources: PropTypes.object.isRequired,\n data: PropTypes.object,\n pageContext: PropTypes.object.isRequired,\n}\n\nexport default PageRenderer\n","// This is extracted to separate module because it's shared\n// between browser and SSR code\nexport const RouteAnnouncerProps = {\n id: `gatsby-announcer`,\n style: {\n position: `absolute`,\n top: 0,\n width: 1,\n height: 1,\n padding: 0,\n overflow: `hidden`,\n clip: `rect(0, 0, 0, 0)`,\n whiteSpace: `nowrap`,\n border: 0,\n },\n \"aria-live\": `assertive`,\n \"aria-atomic\": `true`,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport emitter from \"./emitter\"\nimport { RouteAnnouncerProps } from \"./route-announcer-props\"\nimport { navigate as reachNavigate } from \"@gatsbyjs/reach-router\"\nimport { globalHistory } from \"@gatsbyjs/reach-router/lib/history\"\nimport { parsePath } from \"gatsby-link\"\n\nfunction maybeRedirect(pathname) {\n const redirect = maybeGetBrowserRedirect(pathname)\n const { hash, search } = window.location\n\n if (redirect != null) {\n window.___replace(redirect.toPath + search + hash)\n return true\n } else {\n return false\n }\n}\n\n// Catch unhandled chunk loading errors and force a restart of the app.\nlet nextRoute = ``\n\nwindow.addEventListener(`unhandledrejection`, event => {\n if (/loading chunk \\d* failed./i.test(event.reason)) {\n if (nextRoute) {\n window.location.pathname = nextRoute\n }\n }\n})\n\nconst onPreRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n nextRoute = location.pathname\n apiRunner(`onPreRouteUpdate`, { location, prevLocation })\n }\n}\n\nconst onRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n apiRunner(`onRouteUpdate`, { location, prevLocation })\n if (\n process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND &&\n process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`\n ) {\n emitter.emit(`onRouteUpdate`, { location, prevLocation })\n }\n }\n}\n\nconst navigate = (to, options = {}) => {\n // Support forward/backward navigation with numbers\n // navigate(-2) (jumps back 2 history steps)\n // navigate(2) (jumps forward 2 history steps)\n if (typeof to === `number`) {\n globalHistory.navigate(to)\n return\n }\n\n const { pathname, search, hash } = parsePath(to)\n const redirect = maybeGetBrowserRedirect(pathname)\n\n // If we're redirecting, just replace the passed in pathname\n // to the one we want to redirect to.\n if (redirect) {\n to = redirect.toPath + search + hash\n }\n\n // If we had a service worker update, no matter the path, reload window and\n // reset the pathname whitelist\n if (window.___swUpdated) {\n window.location = pathname + search + hash\n return\n }\n\n // Start a timer to wait for a second before transitioning and showing a\n // loader in case resources aren't around yet.\n const timeoutId = setTimeout(() => {\n emitter.emit(`onDelayedLoadPageResources`, { pathname })\n apiRunner(`onRouteUpdateDelayed`, {\n location: window.location,\n })\n }, 1000)\n\n loader.loadPage(pathname).then(pageResources => {\n // If no page resources, then refresh the page\n // Do this, rather than simply `window.location.reload()`, so that\n // pressing the back/forward buttons work - otherwise when pressing\n // back, the browser will just change the URL and expect JS to handle\n // the change, which won't always work since it might not be a Gatsby\n // page.\n if (!pageResources || pageResources.status === PageResourceStatus.Error) {\n window.history.replaceState({}, ``, location.href)\n window.location = pathname\n clearTimeout(timeoutId)\n return\n }\n\n // If the loaded page has a different compilation hash to the\n // window, then a rebuild has occurred on the server. Reload.\n if (process.env.NODE_ENV === `production` && pageResources) {\n // window.___webpackCompilationHash gets set in production-app.js after navigationInit() is called\n // So on a direct visit of a page with a browser redirect this check is truthy and thus the codepath is hit\n // While the resource actually exists, but only too late\n // TODO: This should probably be fixed by setting ___webpackCompilationHash before navigationInit() is called\n if (\n pageResources.page.webpackCompilationHash !==\n window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n window.location = pathname + search + hash\n }\n }\n reachNavigate(to, options)\n clearTimeout(timeoutId)\n })\n}\n\nfunction shouldUpdateScroll(prevRouterProps, { location }) {\n const { pathname, hash } = location\n const results = apiRunner(`shouldUpdateScroll`, {\n prevRouterProps,\n // `pathname` for backwards compatibility\n pathname,\n routerProps: { location },\n getSavedScrollPosition: args => [\n 0,\n // FIXME this is actually a big code smell, we should fix this\n // eslint-disable-next-line @babel/no-invalid-this\n this._stateStorage.read(args, args.key),\n ],\n })\n if (results.length > 0) {\n // Use the latest registered shouldUpdateScroll result, this allows users to override plugin's configuration\n // @see https://github.com/gatsbyjs/gatsby/issues/12038\n return results[results.length - 1]\n }\n\n if (prevRouterProps) {\n const {\n location: { pathname: oldPathname },\n } = prevRouterProps\n if (oldPathname === pathname) {\n // Scroll to element if it exists, if it doesn't, or no hash is provided,\n // scroll to top.\n return hash ? decodeURI(hash.slice(1)) : [0, 0]\n }\n }\n return true\n}\n\nfunction init() {\n // The \"scroll-behavior\" package expects the \"action\" to be on the location\n // object so let's copy it over.\n globalHistory.listen(args => {\n args.location.action = args.action\n })\n\n window.___push = to => navigate(to, { replace: false })\n window.___replace = to => navigate(to, { replace: true })\n window.___navigate = (to, options) => navigate(to, options)\n\n // Check for initial page-load redirect\n maybeRedirect(window.location.pathname)\n}\n\nclass RouteAnnouncer extends React.Component {\n constructor(props) {\n super(props)\n this.announcementRef = React.createRef()\n }\n\n componentDidUpdate(prevProps, nextProps) {\n requestAnimationFrame(() => {\n let pageName = `new page at ${this.props.location.pathname}`\n if (document.title) {\n pageName = document.title\n }\n const pageHeadings = document.querySelectorAll(`#gatsby-focus-wrapper h1`)\n if (pageHeadings && pageHeadings.length) {\n pageName = pageHeadings[0].textContent\n }\n const newAnnouncement = `Navigated to ${pageName}`\n if (this.announcementRef.current) {\n const oldAnnouncement = this.announcementRef.current.innerText\n if (oldAnnouncement !== newAnnouncement) {\n this.announcementRef.current.innerText = newAnnouncement\n }\n }\n })\n }\n\n render() {\n return
\n }\n}\n\nconst compareLocationProps = (prevLocation, nextLocation) => {\n if (prevLocation.href !== nextLocation.href) {\n return true\n }\n\n if (prevLocation?.state?.key !== nextLocation?.state?.key) {\n return true\n }\n\n return false\n}\n\n// Fire on(Pre)RouteUpdate APIs\nclass RouteUpdates extends React.Component {\n constructor(props) {\n super(props)\n onPreRouteUpdate(props.location, null)\n }\n\n componentDidMount() {\n onRouteUpdate(this.props.location, null)\n }\n\n shouldComponentUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onPreRouteUpdate(this.props.location, prevProps.location)\n return true\n }\n return false\n }\n\n componentDidUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onRouteUpdate(this.props.location, prevProps.location)\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n \n \n )\n }\n}\n\nRouteUpdates.propTypes = {\n location: PropTypes.object.isRequired,\n}\n\nexport { init, shouldUpdateScroll, RouteUpdates, maybeGetBrowserRedirect }\n","// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\nexport default (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});","import React from \"react\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport shallowCompare from \"shallow-compare\"\n\nclass EnsureResources extends React.Component {\n constructor(props) {\n super()\n const { location, pageResources } = props\n this.state = {\n location: { ...location },\n pageResources:\n pageResources ||\n loader.loadPageSync(location.pathname, { withErrorDetails: true }),\n }\n }\n\n static getDerivedStateFromProps({ location }, prevState) {\n if (prevState.location.href !== location.href) {\n const pageResources = loader.loadPageSync(location.pathname, {\n withErrorDetails: true,\n })\n\n return {\n pageResources,\n location: { ...location },\n }\n }\n\n return {\n location: { ...location },\n }\n }\n\n loadResources(rawPath) {\n loader.loadPage(rawPath).then(pageResources => {\n if (pageResources && pageResources.status !== PageResourceStatus.Error) {\n this.setState({\n location: { ...window.location },\n pageResources,\n })\n } else {\n window.history.replaceState({}, ``, location.href)\n window.location = rawPath\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n // Always return false if we're missing resources.\n if (!nextState.pageResources) {\n this.loadResources(nextProps.location.pathname)\n return false\n }\n\n if (\n process.env.BUILD_STAGE === `develop` &&\n nextState.pageResources.stale\n ) {\n this.loadResources(nextProps.location.pathname)\n return false\n }\n\n // Check if the component or json have changed.\n if (this.state.pageResources !== nextState.pageResources) {\n return true\n }\n if (\n this.state.pageResources.component !== nextState.pageResources.component\n ) {\n return true\n }\n\n if (this.state.pageResources.json !== nextState.pageResources.json) {\n return true\n }\n // Check if location has changed on a page using internal routing\n // via matchPath configuration.\n if (\n this.state.location.key !== nextState.location.key &&\n nextState.pageResources.page &&\n (nextState.pageResources.page.matchPath ||\n nextState.pageResources.page.path)\n ) {\n return true\n }\n return shallowCompare(this, nextProps, nextState)\n }\n\n render() {\n if (\n process.env.NODE_ENV !== `production` &&\n (!this.state.pageResources ||\n this.state.pageResources.status === PageResourceStatus.Error)\n ) {\n const message = `EnsureResources was not able to find resources for path: \"${this.props.location.pathname}\"\nThis typically means that an issue occurred building components for that path.\nRun \\`gatsby clean\\` to remove any cached elements.`\n if (this.state.pageResources?.error) {\n console.error(message)\n throw this.state.pageResources.error\n }\n\n throw new Error(message)\n }\n\n return this.props.children(this.state)\n }\n}\n\nexport default EnsureResources\n","import { apiRunner, apiRunnerAsync } from \"./api-runner-browser\"\nimport React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Router, navigate, Location, BaseContext } from \"@gatsbyjs/reach-router\"\nimport { ScrollContext } from \"gatsby-react-router-scroll\"\nimport { StaticQueryContext } from \"gatsby\"\nimport {\n shouldUpdateScroll,\n init as navigationInit,\n RouteUpdates,\n} from \"./navigation\"\nimport emitter from \"./emitter\"\nimport PageRenderer from \"./page-renderer\"\nimport asyncRequires from \"$virtual/async-requires\"\nimport {\n setLoader,\n ProdLoader,\n publicLoader,\n PageResourceStatus,\n getStaticQueryResults,\n} from \"./loader\"\nimport EnsureResources from \"./ensure-resources\"\nimport stripPrefix from \"./strip-prefix\"\n\n// Generated during bootstrap\nimport matchPaths from \"$virtual/match-paths.json\"\n\nconst loader = new ProdLoader(asyncRequires, matchPaths, window.pageData)\nsetLoader(loader)\nloader.setApiRunner(apiRunner)\n\nwindow.asyncRequires = asyncRequires\nwindow.___emitter = emitter\nwindow.___loader = publicLoader\n\nnavigationInit()\n\napiRunnerAsync(`onClientEntry`).then(() => {\n // Let plugins register a service worker. The plugin just needs\n // to return true.\n if (apiRunner(`registerServiceWorker`).filter(Boolean).length > 0) {\n require(`./register-service-worker`)\n }\n\n // In gatsby v2 if Router is used in page using matchPaths\n // paths need to contain full path.\n // For example:\n // - page have `/app/*` matchPath\n // - inside template user needs to use `/app/xyz` as path\n // Resetting `basepath`/`baseuri` keeps current behaviour\n // to not introduce breaking change.\n // Remove this in v3\n const RouteHandler = props => (\n \n \n \n )\n\n const DataContext = React.createContext({})\n\n class GatsbyRoot extends React.Component {\n render() {\n const { children } = this.props\n return (\n \n {({ location }) => (\n \n {({ pageResources, location }) => {\n const staticQueryResults = getStaticQueryResults()\n return (\n \n \n {children}\n \n \n )\n }}\n \n )}\n \n )\n }\n }\n\n class LocationHandler extends React.Component {\n render() {\n return (\n \n {({ pageResources, location }) => (\n \n \n \n \n
\n \n \n )}\n \n )\n }\n }\n\n const { pagePath, location: browserLoc } = window\n\n // Explicitly call navigate if the canonical path (window.pagePath)\n // is different to the browser path (window.location.pathname). But\n // only if NONE of the following conditions hold:\n //\n // - The url matches a client side route (page.matchPath)\n // - it's a 404 page\n // - it's the offline plugin shell (/offline-plugin-app-shell-fallback/)\n if (\n pagePath &&\n __BASE_PATH__ + pagePath !== browserLoc.pathname &&\n !(\n loader.findMatchPath(stripPrefix(browserLoc.pathname, __BASE_PATH__)) ||\n pagePath === `/404.html` ||\n pagePath.match(/^\\/404\\/?$/) ||\n pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/)\n )\n ) {\n navigate(__BASE_PATH__ + pagePath + browserLoc.search + browserLoc.hash, {\n replace: true,\n })\n }\n\n publicLoader.loadPage(browserLoc.pathname).then(page => {\n if (!page || page.status === PageResourceStatus.Error) {\n const message = `page resources for ${browserLoc.pathname} not found. Not rendering React`\n\n // if the chunk throws an error we want to capture the real error\n // This should help with https://github.com/gatsbyjs/gatsby/issues/19618\n if (page && page.error) {\n console.error(message)\n throw page.error\n }\n\n throw new Error(message)\n }\n\n window.___webpackCompilationHash = page.page.webpackCompilationHash\n\n const SiteRoot = apiRunner(\n `wrapRootElement`,\n { element: },\n ,\n ({ result }) => {\n return { element: result }\n }\n ).pop()\n\n const App = function App() {\n const onClientEntryRanRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!onClientEntryRanRef.current) {\n onClientEntryRanRef.current = true\n if (performance.mark) {\n performance.mark(`onInitialClientRender`)\n }\n\n apiRunner(`onInitialClientRender`)\n }\n }, [])\n\n return {SiteRoot}\n }\n\n const renderer = apiRunner(\n `replaceHydrateFunction`,\n undefined,\n ReactDOM.hydrateRoot ? ReactDOM.hydrateRoot : ReactDOM.hydrate\n )[0]\n\n function runRender() {\n const rootElement =\n typeof window !== `undefined`\n ? document.getElementById(`___gatsby`)\n : null\n\n if (renderer === ReactDOM.hydrateRoot) {\n renderer(rootElement, )\n } else {\n renderer(, rootElement)\n }\n }\n\n // https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450\n // TODO remove IE 10 support\n const doc = document\n if (\n doc.readyState === `complete` ||\n (doc.readyState !== `loading` && !doc.documentElement.doScroll)\n ) {\n setTimeout(function () {\n runRender()\n }, 0)\n } else {\n const handler = function () {\n doc.removeEventListener(`DOMContentLoaded`, handler, false)\n window.removeEventListener(`load`, handler, false)\n\n runRender()\n }\n\n doc.addEventListener(`DOMContentLoaded`, handler, false)\n window.addEventListener(`load`, handler, false)\n }\n })\n})\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nimport loader from \"./loader\"\nimport InternalPageRenderer from \"./page-renderer\"\n\nconst ProdPageRenderer = ({ location }) => {\n const pageResources = loader.loadPageSync(location.pathname)\n if (!pageResources) {\n return null\n }\n return React.createElement(InternalPageRenderer, {\n location,\n pageResources,\n ...pageResources.json,\n })\n}\n\nProdPageRenderer.propTypes = {\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default ProdPageRenderer\n","const preferDefault = m => (m && m.default) || m\n\nif (process.env.BUILD_STAGE === `develop`) {\n module.exports = preferDefault(require(`./public-page-renderer-dev`))\n} else if (process.env.BUILD_STAGE === `build-javascript`) {\n module.exports = preferDefault(require(`./public-page-renderer-prod`))\n} else {\n module.exports = () => null\n}\n","exports.polyfill = Component => Component\n","import redirects from \"./redirects.json\"\n\n// Convert to a map for faster lookup in maybeRedirect()\n\nconst redirectMap = new Map()\nconst redirectIgnoreCaseMap = new Map()\n\nredirects.forEach(redirect => {\n if (redirect.ignoreCase) {\n redirectIgnoreCaseMap.set(redirect.fromPath, redirect)\n } else {\n redirectMap.set(redirect.fromPath, redirect)\n }\n})\n\nexport function maybeGetBrowserRedirect(pathname) {\n let redirect = redirectMap.get(pathname)\n if (!redirect) {\n redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase())\n }\n return redirect\n}\n","import { apiRunner } from \"./api-runner-browser\"\n\nif (\n window.location.protocol !== `https:` &&\n window.location.hostname !== `localhost`\n) {\n console.error(\n `Service workers can only be used over HTTPS, or on localhost for development`\n )\n} else if (`serviceWorker` in navigator) {\n navigator.serviceWorker\n .register(`${__BASE_PATH__}/sw.js`)\n .then(function (reg) {\n reg.addEventListener(`updatefound`, () => {\n apiRunner(`onServiceWorkerUpdateFound`, { serviceWorker: reg })\n // The updatefound event implies that reg.installing is set; see\n // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n const installingWorker = reg.installing\n console.log(`installingWorker`, installingWorker)\n installingWorker.addEventListener(`statechange`, () => {\n switch (installingWorker.state) {\n case `installed`:\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n\n // We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\n window.___swUpdated = true\n // We call the onServiceWorkerUpdateReady API so users can show update prompts.\n apiRunner(`onServiceWorkerUpdateReady`, { serviceWorker: reg })\n\n // If resources failed for the current page, reload.\n if (window.___failedResources) {\n console.log(`resources failed, SW updated - reloading`)\n window.location.reload()\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log(`Content is now available offline!`)\n\n // Post to service worker that install is complete.\n // Delay to allow time for the event listener to be added --\n // otherwise fetch is called too soon and resources aren't cached.\n apiRunner(`onServiceWorkerInstalled`, { serviceWorker: reg })\n }\n break\n\n case `redundant`:\n console.error(`The installing service worker became redundant.`)\n apiRunner(`onServiceWorkerRedundant`, { serviceWorker: reg })\n break\n\n case `activated`:\n apiRunner(`onServiceWorkerActive`, { serviceWorker: reg })\n break\n }\n })\n })\n })\n .catch(function (e) {\n console.error(`Error during service worker registration:`, e)\n })\n}\n","/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn't found.\n */\n\nexport default function stripPrefix(str, prefix = ``) {\n if (!prefix) {\n return str\n }\n\n if (str === prefix) {\n return `/`\n }\n\n if (str.startsWith(`${prefix}/`)) {\n return str.slice(prefix.length)\n }\n\n return str\n}\n","import invariant from \"invariant\"; ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : invariant(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexport { startsWith, pick, match, resolve, insertParams, validateRedirect, shallowCompare };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexport { globalHistory, navigate, createHistory, createMemorySource };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n/* eslint-disable jsx-a11y/anchor-has-content */\n\n\nimport React, { useContext, createContext } from \"react\";\nimport invariant from \"invariant\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { startsWith, pick, resolve, match, insertParams, validateRedirect, shallowCompare } from \"./lib/utils\";\nimport { globalHistory, navigate, createHistory, createMemorySource } from \"./lib/history\"; ////////////////////////////////////////////////////////////////////////////////\n\nvar createNamedContext = function createNamedContext(name, defaultValue) {\n var Ctx = createContext(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Location Context/Provider\n\n\nvar LocationContext = createNamedContext(\"Location\"); // sets up a listener if there isn't one already so apps don't need to be\n// wrapped in some top level provider\n\nvar Location = function Location(_ref) {\n var children = _ref.children;\n return React.createElement(LocationContext.Consumer, null, function (context) {\n return context ? children(context) : React.createElement(LocationProvider, null, children);\n });\n};\n\nvar LocationProvider = function (_React$Component) {\n _inherits(LocationProvider, _React$Component);\n\n function LocationProvider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, LocationProvider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n context: _this.getContext(),\n refs: {\n unlisten: null\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n LocationProvider.prototype.getContext = function getContext() {\n var _props$history = this.props.history,\n navigate = _props$history.navigate,\n location = _props$history.location;\n return {\n navigate: navigate,\n location: location\n };\n };\n\n LocationProvider.prototype.componentDidCatch = function componentDidCatch(error, info) {\n if (isRedirect(error)) {\n var _navigate = this.props.history.navigate;\n\n _navigate(error.uri, {\n replace: true\n });\n } else {\n throw error;\n }\n };\n\n LocationProvider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevState.context.location !== this.state.context.location) {\n this.props.history._onTransitionComplete();\n }\n };\n\n LocationProvider.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var refs = this.state.refs,\n history = this.props.history;\n\n history._onTransitionComplete();\n\n refs.unlisten = history.listen(function () {\n Promise.resolve().then(function () {\n // TODO: replace rAF with react deferred update API when it's ready https://github.com/facebook/react/issues/13306\n requestAnimationFrame(function () {\n if (!_this2.unmounted) {\n _this2.setState(function () {\n return {\n context: _this2.getContext()\n };\n });\n }\n });\n });\n });\n };\n\n LocationProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n var refs = this.state.refs;\n this.unmounted = true;\n refs.unlisten();\n };\n\n LocationProvider.prototype.render = function render() {\n var context = this.state.context,\n children = this.props.children;\n return React.createElement(LocationContext.Provider, {\n value: context\n }, typeof children === \"function\" ? children(context) : children || null);\n };\n\n return LocationProvider;\n}(React.Component); ////////////////////////////////////////////////////////////////////////////////\n\n\nLocationProvider.defaultProps = {\n history: globalHistory\n};\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0;\n\nvar ServerLocation = function ServerLocation(_ref2) {\n var url = _ref2.url,\n children = _ref2.children;\n var searchIndex = url.indexOf(\"?\");\n var searchExists = searchIndex > -1;\n var pathname = void 0;\n var search = \"\";\n var hash = \"\";\n\n if (searchExists) {\n pathname = url.substring(0, searchIndex);\n search = url.substring(searchIndex);\n } else {\n pathname = url;\n }\n\n return React.createElement(LocationContext.Provider, {\n value: {\n location: {\n pathname: pathname,\n search: search,\n hash: hash\n },\n navigate: function navigate() {\n throw new Error(\"You can't call navigate on the server.\");\n }\n }\n }, children);\n}; ////////////////////////////////////////////////////////////////////////////////\n// Sets baseuri and basepath for nested routers and links\n\n\nvar BaseContext = createNamedContext(\"Base\", {\n baseuri: \"/\",\n basepath: \"/\",\n navigate: globalHistory.navigate\n}); ////////////////////////////////////////////////////////////////////////////////\n// The main event, welcome to the show everybody.\n\nvar Router = function Router(props) {\n return React.createElement(BaseContext.Consumer, null, function (baseContext) {\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RouterImpl, _extends({}, baseContext, locationContext, props));\n });\n });\n};\n\nvar RouterImpl = function (_React$PureComponent) {\n _inherits(RouterImpl, _React$PureComponent);\n\n function RouterImpl() {\n _classCallCheck(this, RouterImpl);\n\n return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));\n }\n\n RouterImpl.prototype.render = function render() {\n var _props = this.props,\n location = _props.location,\n _navigate2 = _props.navigate,\n basepath = _props.basepath,\n primary = _props.primary,\n children = _props.children,\n baseuri = _props.baseuri,\n _props$component = _props.component,\n component = _props$component === undefined ? \"div\" : _props$component,\n domProps = _objectWithoutProperties(_props, [\"location\", \"navigate\", \"basepath\", \"primary\", \"children\", \"baseuri\", \"component\"]);\n\n var routes = React.Children.toArray(children).reduce(function (array, child) {\n var routes = createRoute(basepath)(child);\n return array.concat(routes);\n }, []);\n var pathname = location.pathname;\n var match = pick(routes, pathname);\n\n if (match) {\n var params = match.params,\n uri = match.uri,\n route = match.route,\n element = match.route.value; // remove the /* from the end for child routes relative paths\n\n basepath = route.default ? basepath : route.path.replace(/\\*$/, \"\");\n\n var props = _extends({}, params, {\n uri: uri,\n location: location,\n navigate: function navigate(to, options) {\n return _navigate2(resolve(to, uri), options);\n }\n });\n\n var clone = React.cloneElement(element, props, element.props.children ? React.createElement(Router, {\n location: location,\n primary: primary\n }, element.props.children) : undefined); // using 'div' for < 16.3 support\n\n var FocusWrapper = primary ? FocusHandler : component; // don't pass any props to 'div'\n\n var wrapperProps = primary ? _extends({\n uri: uri,\n location: location,\n component: component\n }, domProps) : domProps;\n return React.createElement(BaseContext.Provider, {\n value: {\n baseuri: uri,\n basepath: basepath,\n navigate: props.navigate\n }\n }, React.createElement(FocusWrapper, wrapperProps, clone));\n } else {\n // Not sure if we want this, would require index routes at every level\n // warning(\n // false,\n // `\\n\\nNothing matched:\\n\\t${\n // location.pathname\n // }\\n\\nPaths checked: \\n\\t${routes\n // .map(route => route.path)\n // .join(\n // \"\\n\\t\"\n // )}\\n\\nTo get rid of this warning, add a default NotFound component as child of Router:\n // \\n\\tlet NotFound = () =>
Not Found!
\n // \\n\\t\\n\\t \\n\\t {/* ... */}\\n\\t`\n // );\n return null;\n }\n };\n\n return RouterImpl;\n}(React.PureComponent);\n\nRouterImpl.defaultProps = {\n primary: true\n};\nvar FocusContext = createNamedContext(\"Focus\");\n\nvar FocusHandler = function FocusHandler(_ref3) {\n var uri = _ref3.uri,\n location = _ref3.location,\n component = _ref3.component,\n domProps = _objectWithoutProperties(_ref3, [\"uri\", \"location\", \"component\"]);\n\n return React.createElement(FocusContext.Consumer, null, function (requestFocus) {\n return React.createElement(FocusHandlerImpl, _extends({}, domProps, {\n component: component,\n requestFocus: requestFocus,\n uri: uri,\n location: location\n }));\n });\n}; // don't focus on initial render\n\n\nvar initialRender = true;\nvar focusHandlerCount = 0;\n\nvar FocusHandlerImpl = function (_React$Component2) {\n _inherits(FocusHandlerImpl, _React$Component2);\n\n function FocusHandlerImpl() {\n var _temp2, _this4, _ret2;\n\n _classCallCheck(this, FocusHandlerImpl);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this4 = _possibleConstructorReturn(this, _React$Component2.call.apply(_React$Component2, [this].concat(args))), _this4), _this4.state = {}, _this4.requestFocus = function (node) {\n if (!_this4.state.shouldFocus && node) {\n node.focus();\n }\n }, _temp2), _possibleConstructorReturn(_this4, _ret2);\n }\n\n FocusHandlerImpl.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var initial = prevState.uri == null;\n\n if (initial) {\n return _extends({\n shouldFocus: true\n }, nextProps);\n } else {\n var myURIChanged = nextProps.uri !== prevState.uri;\n var navigatedUpToMe = prevState.location.pathname !== nextProps.location.pathname && nextProps.location.pathname === nextProps.uri;\n return _extends({\n shouldFocus: myURIChanged || navigatedUpToMe\n }, nextProps);\n }\n };\n\n FocusHandlerImpl.prototype.componentDidMount = function componentDidMount() {\n focusHandlerCount++;\n this.focus();\n };\n\n FocusHandlerImpl.prototype.componentWillUnmount = function componentWillUnmount() {\n focusHandlerCount--;\n\n if (focusHandlerCount === 0) {\n initialRender = true;\n }\n };\n\n FocusHandlerImpl.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevProps.location !== this.props.location && this.state.shouldFocus) {\n this.focus();\n }\n };\n\n FocusHandlerImpl.prototype.focus = function focus() {\n if (process.env.NODE_ENV === \"test\") {\n // getting cannot read property focus of null in the tests\n // and that bit of global `initialRender` state causes problems\n // should probably figure it out!\n return;\n }\n\n var requestFocus = this.props.requestFocus;\n\n if (requestFocus) {\n requestFocus(this.node);\n } else {\n if (initialRender) {\n initialRender = false;\n } else if (this.node) {\n // React polyfills [autofocus] and it fires earlier than cDM,\n // so we were stealing focus away, this line prevents that.\n if (!this.node.contains(document.activeElement)) {\n this.node.focus();\n }\n }\n }\n };\n\n FocusHandlerImpl.prototype.render = function render() {\n var _this5 = this;\n\n var _props2 = this.props,\n children = _props2.children,\n style = _props2.style,\n requestFocus = _props2.requestFocus,\n _props2$component = _props2.component,\n Comp = _props2$component === undefined ? \"div\" : _props2$component,\n uri = _props2.uri,\n location = _props2.location,\n domProps = _objectWithoutProperties(_props2, [\"children\", \"style\", \"requestFocus\", \"component\", \"uri\", \"location\"]);\n\n return React.createElement(Comp, _extends({\n style: _extends({\n outline: \"none\"\n }, style),\n tabIndex: \"-1\",\n ref: function ref(n) {\n return _this5.node = n;\n }\n }, domProps), React.createElement(FocusContext.Provider, {\n value: this.requestFocus\n }, this.props.children));\n };\n\n return FocusHandlerImpl;\n}(React.Component);\n\npolyfill(FocusHandlerImpl);\n\nvar k = function k() {}; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar forwardRef = React.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = function forwardRef(C) {\n return C;\n };\n}\n\nvar Link = forwardRef(function (_ref4, ref) {\n var innerRef = _ref4.innerRef,\n props = _objectWithoutProperties(_ref4, [\"innerRef\"]);\n\n return React.createElement(BaseContext.Consumer, null, function (_ref5) {\n var basepath = _ref5.basepath,\n baseuri = _ref5.baseuri;\n return React.createElement(Location, null, function (_ref6) {\n var location = _ref6.location,\n navigate = _ref6.navigate;\n\n var to = props.to,\n state = props.state,\n replace = props.replace,\n _props$getProps = props.getProps,\n getProps = _props$getProps === undefined ? k : _props$getProps,\n anchorProps = _objectWithoutProperties(props, [\"to\", \"state\", \"replace\", \"getProps\"]);\n\n var href = resolve(to, baseuri);\n var encodedHref = encodeURI(href);\n var isCurrent = location.pathname === encodedHref;\n var isPartiallyCurrent = startsWith(location.pathname, encodedHref);\n return React.createElement(\"a\", _extends({\n ref: ref || innerRef,\n \"aria-current\": isCurrent ? \"page\" : undefined\n }, anchorProps, getProps({\n isCurrent: isCurrent,\n isPartiallyCurrent: isPartiallyCurrent,\n href: href,\n location: location\n }), {\n href: href,\n onClick: function onClick(event) {\n if (anchorProps.onClick) anchorProps.onClick(event);\n\n if (shouldNavigate(event)) {\n event.preventDefault();\n var shouldReplace = replace;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n var _location$state = _extends({}, location.state),\n key = _location$state.key,\n restState = _objectWithoutProperties(_location$state, [\"key\"]);\n\n shouldReplace = shallowCompare(_extends({}, state), restState);\n }\n\n navigate(href, {\n state: state,\n replace: shouldReplace\n });\n }\n }\n }));\n });\n });\n});\nLink.displayName = \"Link\";\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nfunction RedirectRequest(uri) {\n this.uri = uri;\n}\n\nvar isRedirect = function isRedirect(o) {\n return o instanceof RedirectRequest;\n};\n\nvar redirectTo = function redirectTo(to) {\n throw new RedirectRequest(to);\n};\n\nvar RedirectImpl = function (_React$Component3) {\n _inherits(RedirectImpl, _React$Component3);\n\n function RedirectImpl() {\n _classCallCheck(this, RedirectImpl);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n } // Support React < 16 with this hook\n\n\n RedirectImpl.prototype.componentDidMount = function componentDidMount() {\n var _props3 = this.props,\n navigate = _props3.navigate,\n to = _props3.to,\n from = _props3.from,\n _props3$replace = _props3.replace,\n replace = _props3$replace === undefined ? true : _props3$replace,\n state = _props3.state,\n noThrow = _props3.noThrow,\n baseuri = _props3.baseuri,\n props = _objectWithoutProperties(_props3, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n Promise.resolve().then(function () {\n var resolvedTo = resolve(to, baseuri);\n navigate(insertParams(resolvedTo, props), {\n replace: replace,\n state: state\n });\n });\n };\n\n RedirectImpl.prototype.render = function render() {\n var _props4 = this.props,\n navigate = _props4.navigate,\n to = _props4.to,\n from = _props4.from,\n replace = _props4.replace,\n state = _props4.state,\n noThrow = _props4.noThrow,\n baseuri = _props4.baseuri,\n props = _objectWithoutProperties(_props4, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n var resolvedTo = resolve(to, baseuri);\n if (!noThrow) redirectTo(insertParams(resolvedTo, props));\n return null;\n };\n\n return RedirectImpl;\n}(React.Component);\n\nvar Redirect = function Redirect(props) {\n return React.createElement(BaseContext.Consumer, null, function (_ref7) {\n var baseuri = _ref7.baseuri;\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RedirectImpl, _extends({}, locationContext, {\n baseuri: baseuri\n }, props));\n });\n });\n};\n\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar Match = function Match(_ref8) {\n var path = _ref8.path,\n children = _ref8.children;\n return React.createElement(BaseContext.Consumer, null, function (_ref9) {\n var baseuri = _ref9.baseuri;\n return React.createElement(Location, null, function (_ref10) {\n var navigate = _ref10.navigate,\n location = _ref10.location;\n var resolvedPath = resolve(path, baseuri);\n var result = match(resolvedPath, location.pathname);\n return children({\n navigate: navigate,\n location: location,\n match: result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null\n });\n });\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n// Hooks\n\n\nvar useLocation = function useLocation() {\n var context = useContext(LocationContext);\n\n if (!context) {\n throw new Error(\"useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.location;\n};\n\nvar useNavigate = function useNavigate() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useNavigate hook was used but a BaseContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.navigate;\n};\n\nvar useParams = function useParams() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var results = match(context.basepath, location.pathname);\n return results ? results.params : null;\n};\n\nvar useMatch = function useMatch(path) {\n if (!path) {\n throw new Error(\"useMatch(path: string) requires an argument of a string to match against\");\n }\n\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var resolvedPath = resolve(path, context.baseuri);\n var result = match(resolvedPath, location.pathname);\n return result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar stripSlashes = function stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, \"\");\n};\n\nvar createRoute = function createRoute(basepath) {\n return function (element) {\n if (!element) {\n return null;\n }\n\n if (element.type === React.Fragment && element.props.children) {\n return React.Children.map(element.props.children, createRoute(basepath));\n }\n\n !(element.props.path || element.props.default || element.type === Redirect) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \": Children of must have a `path` or `default` prop, or be a ``. None found on element type `\" + element.type + \"`\") : invariant(false) : void 0;\n !!(element.type === Redirect && (!element.props.from || !element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" requires both \\\"from\\\" and \\\"to\\\" props when inside a .\") : invariant(false) : void 0;\n !!(element.type === Redirect && !validateRedirect(element.props.from, element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.\") : invariant(false) : void 0;\n\n if (element.props.default) {\n return {\n value: element,\n default: true\n };\n }\n\n var elementPath = element.type === Redirect ? element.props.from : element.props.path;\n var path = elementPath === \"/\" ? basepath : stripSlashes(basepath) + \"/\" + stripSlashes(elementPath);\n return {\n value: element,\n default: element.props.default,\n path: element.props.children ? stripSlashes(path) + \"/*\" : path\n };\n };\n};\n\nvar shouldNavigate = function shouldNavigate(event) {\n return !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}; ////////////////////////////////////////////////////////////////////////\n\n\nexport { Link, Location, LocationProvider, Match, Redirect, Router, ServerLocation, createHistory, createMemorySource, isRedirect, navigate, redirectTo, globalHistory, match as matchPath, useLocation, useNavigate, useParams, useMatch , BaseContext };","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}"],"names":["module","exports","self","ReferenceError","__esModule","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","setPrototypeOf","subClass","superClass","create","constructor","obj","excluded","sourceKeys","keys","indexOf","_setPrototypeOf","o","p","__proto__","getLocation","_source$location","location","search","hash","href","origin","protocol","host","hostname","port","pathname","canUseDOM","URL","encodeURI","decodeURI","state","history","createHistory","options","listeners","transitioning","resolveTransition","_onTransitionComplete","listen","listener","push","popstateListener","action","addEventListener","removeEventListener","filter","fn","navigate","to","_ref","undefined","_ref$replace","replace","go","Date","now","replaceState","pushState","e","transition","Promise","res","forEach","createMemorySource","initialPath","searchIndex","initialLocation","substr","index","stack","states","name","entries","_","uri","_uri$split","split","_uri$split$","_uri$split2","_uri$split2$","newIndex","window","document","createElement","globalHistory","shallowCompare","validateRedirect","insertParams","resolve","match","pick","startsWith","_invariant","_invariant2","default","string","routes","default_","uriPathname","uriSegments","segmentize","isRootUri","ranked","rankRoutes","l","missed","route","params","routeSegments","path","max","Math","routeSegment","uriSegment","isSplat","slice","map","decodeURIComponent","join","dynamicMatch","paramRe","exec","reservedNames","value","isDynamic","segment","test","rankRoute","score","reduce","isRootSegment","SEGMENT_POINTS","sort","a","b","addQuery","_len","query","Array","_key","q","base","_to$split","toPathname","toQuery","basePathname","toSegments","baseSegments","concat","allSegments","segments","pop","_path$split","pathBase","_path$split$","constructedPath","_params$location","_params$location$sear","searchSplit","from","obj1","obj2","obj1Keys","every","_interopRequireDefault","withPrefix","getGlobalPathPrefix","_objectWithoutPropertiesLoose2","_assertThisInitialized2","_inheritsLoose2","_extends2","_propTypes","_react","_reachRouter","_utils","_parsePath","parsePath","_excluded","isAbsolutePath","prefix","_prefix","getGlobalBasePrefix","isLocalLink","endsWith","rewriteLinkPath","relativeTo","current","absolutify","NavLinkPropTypes","activeClassName","activeStyle","object","partiallyActive","bool","GatsbyLinkLocationWrapper","props","Location","_ref2","GatsbyLink","_location","_React$Component","_this","defaultGetProps","_ref3","isPartiallyCurrent","isCurrent","className","Boolean","style","IOSupported","IntersectionObserver","handleRef","bind","_proto","_prefetch","currentPath","rewrittenPath","newPathName","___loader","enqueue","componentDidUpdate","prevProps","prevState","componentDidMount","componentWillUnmount","io","_this$io","instance","el","unobserve","disconnect","ref","cb","_this2","innerRef","entry","isIntersecting","intersectionRatio","observe","render","_this3","_this$props","_this$props$getProps","getProps","_onClick","onClick","_onMouseEnter","onMouseEnter","rest","prefixedTo","Link","hovering","button","defaultPrevented","metaKey","altKey","ctrlKey","shiftKey","preventDefault","shouldReplace","___navigate","Component","propTypes","func","isRequired","_default","forwardRef","hashIndex","_scrollHandler","ScrollHandler","_useScrollRestoration","useScrollRestoration","ScrollContext","React","nodeInterop","cache","_getRequireWildcardCache","has","get","newObj","hasPropertyDescriptor","defineProperty","getOwnPropertyDescriptor","desc","set","_interopRequireWildcard","_sessionStorage","WeakMap","cacheBabelInterop","cacheNodeInterop","createContext","SessionStorage","displayName","args","_stateStorage","_isTicking","_latestKnownScrollY","scrollListener","scrollY","requestAnimationFrame","_saveScroll","windowScroll","position","shouldUpdateScroll","scrollTo","scrollToHash","node","getElementById","substring","scrollIntoView","prevRouterProps","routerProps","save","scrollPosition","_this$props$location","read","_this$props$location2","Provider","children","element","GATSBY_ROUTER_SCROLL_STATE","stateKey","getStateKey","sessionStorage","getItem","JSON","parse","storedValue","stringify","setItem","stateKeyBase","identifier","useLocation","useContext","useRef","useLayoutEffect","onScroll","scrollTop","onRouteUpdate","gtag","excludeGtagPaths","some","rx","sendPageView","pagePath","page_path","setTimeout","listOfMetricsSend","Set","debounce","timeout","timer","clearTimeout","sendWebVitals","dataLayerName","win","sendData","data","dataLayer","id","add","event","webVitalsMeasurement","round","then","getLCP","getFID","getCLS","debouncedCLS","debouncedFID","debouncedLCP","pluginOptions","eventName","routeChangeEventName","onInitialClientRender","enableWebVitalsTracking","require","localizedManifests","defaultFilename","isArray","localizedManifest","find","app","start_url","lang","offsetY","getTargetOffset","pageYOffset","documentElement","body","clientTop","computedStyles","getComputedStyle","scrollMarginTop","getPropertyValue","getBoundingClientRect","top","parseInt","offset","DEFAULT_OPTIONS","maxWidth","wrapperStyle","backgroundColor","linkImagesToOriginal","showCaptions","markdownCaptions","withWebp","withAvif","tracedSVG","loading","decoding","disableBgImageOnAlpha","disableBgImage","EMPTY_ALT","imageClass","imageWrapperClass","imageBackgroundClass","_require","apiCallbackContext","imageWrappers","querySelectorAll","_loop","imageWrapper","backgroundElement","querySelector","imageElement","onImageLoad","onImageComplete","opacity","color","boxShadow","complete","components","plugin","plugins","getResourceURLsForPathname","loadPage","loadPageSync","api","defaultReturn","argTransform","results","result","previous","next","all","on","type","handler","off","splice","emit","evt","mitt","charAt","pathCache","Map","matchPaths","trimPathname","rawPathname","stripPrefix","__BASE_PATH__","setMatchPaths","findMatchPath","trimmedPathname","cleanPath","pickPaths","matchPath","originalPath","normalizePagePath","grabMatchParams","findPath","redirect","maybeGetBrowserRedirect","toPath","foundPath","prefetchPathname","loader","StaticQueryContext","StaticQueryDataRenderer","staticQueryData","finalData","StaticQuery","Consumer","useStaticQuery","context","isNaN","Number","Error","graphql","_arrayLikeToArray","arr","len","arr2","_toConsumableArray","iter","Symbol","iterator","minLen","n","toString","TypeError","supportedPrefetchStrategy","feature","fakeLink","relList","supports","err","support","url","reject","link","setAttribute","onload","onerror","getElementsByTagName","getElementsByName","parentNode","appendChild","req","XMLHttpRequest","open","status","send","preFetched","catch","PageResourceStatus","Success","preferDefault","m","createPageDataUrl","s","doFetch","method","onreadystatechange","readyState","toPageResources","pageData","component","page","componentChunkName","webpackCompilationHash","staticQueryHashes","json","BaseLoader","loadComponent","inFlightNetworkRequests","pageDb","inFlightDb","staticQueryDb","pageDataDb","prefetchTriggered","prefetchCompleted","memoizedGet","inFlightPromise","response","delete","setApiRunner","apiRunner","prefetchDisabled","fetchPageDataJson","loadObj","retries","responseText","jsonPayload","payload","notFound","loadPageDataJson","rawPath","error","loadAppData","allData","finalResult","componentChunkPromise","pageResources","createdAt","staticQueryBatchPromise","staticQueryHash","staticQueryResults","staticQueryResultsMap","emitter","withErrorDetails","shouldPrefetch","navigator","connection","effectiveType","includes","saveData","doesConnectionSupportPrefetch","prefetch","realPath","doPrefetch","pageDataUrl","prefetchHelper","crossOrigin","as","createComponentUrls","isPageNotFound","appData","___chunkMapping","chunk","__PATH_PREFIX__","ProdLoader","asyncRequires","chunkName","componentUrls","setLoader","_loader","publicLoader","getStaticQueryResults","PageRenderer","pageContext","__params","pageElement","RouteAnnouncerProps","width","height","padding","overflow","clip","whiteSpace","border","maybeRedirect","___replace","nextRoute","reason","onPreRouteUpdate","prevLocation","___swUpdated","timeoutId","___webpackCompilationHash","serviceWorker","controller","postMessage","gatsbyApi","reachNavigate","getSavedScrollPosition","RouteAnnouncer","announcementRef","nextProps","pageName","title","pageHeadings","textContent","newAnnouncement","innerText","compareLocationProps","nextLocation","RouteUpdates","shouldComponentUpdate","shallowDiffers","_i","EnsureResources","getDerivedStateFromProps","loadResources","setState","nextState","___emitter","___push","apiRunnerAsync","RouteHandler","BaseContext","baseuri","basepath","DataContext","GatsbyRoot","LocationHandler","Router","browserLoc","message","console","SiteRoot","App","onClientEntryRanRef","performance","mark","renderer","ReactDOM","hydrateRoot","runRender","rootElement","doc","doScroll","InternalPageRenderer","redirectMap","redirectIgnoreCaseMap","toLowerCase","ignoreCase","fromPath","register","reg","installingWorker","installing","log","___failedResources","reload","str","_objectWithoutProperties","_classCallCheck","Constructor","_possibleConstructorReturn","_inherits","enumerable","writable","configurable","createNamedContext","defaultValue","Ctx","LocationContext","LocationProvider","_temp","getContext","refs","unlisten","_props$history","componentDidCatch","info","isRedirect","_navigate","unmounted","defaultProps","ServerLocation","baseContext","locationContext","RouterImpl","_React$PureComponent","_props","_navigate2","primary","_props$component","domProps","toArray","array","child","createRoute","clone","FocusWrapper","FocusHandler","wrapperProps","FocusContext","requestFocus","FocusHandlerImpl","initialRender","focusHandlerCount","_React$Component2","_temp2","_this4","_len2","_key2","shouldFocus","focus","myURIChanged","navigatedUpToMe","contains","activeElement","_this5","_props2","_props2$component","Comp","outline","tabIndex","k","C","_ref4","_ref5","_ref6","_props$getProps","anchorProps","encodedHref","shouldNavigate","_location$state","restState","RedirectRequest","redirectTo","RedirectImpl","_React$Component3","_props3","_props3$replace","noThrow","resolvedTo","_props4","Redirect","_ref7","Match","_ref8","_ref9","_ref10","resolvedPath","useNavigate","useParams","useMatch","stripSlashes","elementPath","condition","format","c","d","f","argIndex","framesToPop","_inheritsLoose"],"sourceRoot":""} \ No newline at end of file diff --git a/c08ea0bdbaa45f31cfbc4328bc5134cd16b2791b-996fd920e2366d845af4.js.map b/c08ea0bdbaa45f31cfbc4328bc5134cd16b2791b-996fd920e2366d845af4.js.map index efdfb8c29..46cb946b8 100644 --- a/c08ea0bdbaa45f31cfbc4328bc5134cd16b2791b-996fd920e2366d845af4.js.map +++ b/c08ea0bdbaa45f31cfbc4328bc5134cd16b2791b-996fd920e2366d845af4.js.map @@ -1 +1 @@ -{"version":3,"file":"c08ea0bdbaa45f31cfbc4328bc5134cd16b2791b-996fd920e2366d845af4.js","mappings":"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","sources":["webpack://website/./src/components/bio.tsx","webpack://website/../../node_modules/gatsby-image/index.js"],"sourcesContent":["import * as React from 'react';\nimport { useStaticQuery, graphql } from 'gatsby';\nimport Image, { FixedObject } from 'gatsby-image';\n\nimport { rhythm } from '../utils/typography';\n\ninterface IPureBioProps {\n author: {\n name: string;\n summary: string;\n };\n social: {\n twitter: string;\n linkedin: string;\n };\n avatar: {\n childImageSharp: {\n fixed: FixedObject;\n };\n };\n}\n\nconst PureBio: React.FunctionComponent = ({\n author,\n social,\n avatar,\n}) => {\n return (\n \n \n

\n Written by {author.name} {author.summary}\n {` `}\n \n You should connect with him on LinkedIn\n \n  or \n \n follow him on Twitter\n \n

\n \n );\n};\n\nconst Bio = (): JSX.Element => {\n const data = useStaticQuery(graphql`\n query BioQuery {\n avatar: file(absolutePath: { regex: \"/profile-pic.jpg/\" }) {\n childImageSharp {\n fixed(width: 125, height: 125) {\n ...GatsbyImageSharpFixed\n }\n }\n }\n site {\n siteMetadata {\n author {\n name\n summary\n }\n social {\n twitter\n linkedin\n }\n }\n }\n }\n `);\n\n const { author, social } = data.site.siteMetadata;\n return ;\n};\n\nexport default Bio;\nexport { PureBio, IPureBioProps };\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _excluded = [\"sizes\", \"srcSet\", \"src\", \"style\", \"onLoad\", \"onError\", \"loading\", \"draggable\", \"ariaHidden\"];\n\nvar logDeprecationNotice = function logDeprecationNotice(prop, replacement) {\n if (process.env.NODE_ENV === \"production\") {\n return;\n }\n\n console.log(\"\\n The \\\"\" + prop + \"\\\" prop is now deprecated and will be removed in the next major version\\n of \\\"gatsby-image\\\".\\n \");\n\n if (replacement) {\n console.log(\"Please use \" + replacement + \" instead of \\\"\" + prop + \"\\\".\");\n }\n}; // Handle legacy props during their deprecation phase\n\n\nvar convertProps = function convertProps(props) {\n var convertedProps = (0, _extends2.default)({}, props);\n var resolutions = convertedProps.resolutions,\n sizes = convertedProps.sizes,\n critical = convertedProps.critical;\n\n if (resolutions) {\n convertedProps.fixed = resolutions;\n logDeprecationNotice(\"resolutions\", \"the gatsby-image v2 prop \\\"fixed\\\"\");\n delete convertedProps.resolutions;\n }\n\n if (sizes) {\n convertedProps.fluid = sizes;\n logDeprecationNotice(\"sizes\", \"the gatsby-image v2 prop \\\"fluid\\\"\");\n delete convertedProps.sizes;\n }\n\n if (critical) {\n logDeprecationNotice(\"critical\", \"the native \\\"loading\\\" attribute\");\n convertedProps.loading = \"eager\";\n } // convert fluid & fixed to arrays so we only have to work with arrays\n\n\n if (convertedProps.fluid) {\n convertedProps.fluid = groupByMedia([].concat(convertedProps.fluid));\n }\n\n if (convertedProps.fixed) {\n convertedProps.fixed = groupByMedia([].concat(convertedProps.fixed));\n }\n\n return convertedProps;\n};\n/**\n * Checks if fluid or fixed are art-direction arrays.\n *\n * @param currentData {{media?: string}[]} The props to check for images.\n * @return {boolean}\n */\n\n\nvar hasArtDirectionSupport = function hasArtDirectionSupport(currentData) {\n return !!currentData && Array.isArray(currentData) && currentData.some(function (image) {\n return typeof image.media !== \"undefined\";\n });\n};\n/**\n * Tries to detect if a media query matches the current viewport.\n * @property media {{media?: string}} A media query string.\n * @return {boolean}\n */\n\n\nvar matchesMedia = function matchesMedia(_ref) {\n var media = _ref.media;\n return media ? isBrowser && !!window.matchMedia(media).matches : false;\n};\n/**\n * Find the source of an image to use as a key in the image cache.\n * Use `the first image in either `fixed` or `fluid`\n * @param {{fluid: {src: string, media?: string}[], fixed: {src: string, media?: string}[]}} args\n * @return {string?} Returns image src or undefined it not given.\n */\n\n\nvar getImageCacheKey = function getImageCacheKey(_ref2) {\n var fluid = _ref2.fluid,\n fixed = _ref2.fixed;\n var srcData = getCurrentSrcData(fluid || fixed || []);\n return srcData && srcData.src;\n};\n/**\n * Returns the current src - Preferably with art-direction support.\n * @param currentData {{media?: string}[], maxWidth?: Number, maxHeight?: Number} The fluid or fixed image array.\n * @return {{src: string, media?: string, maxWidth?: Number, maxHeight?: Number}}\n */\n\n\nvar getCurrentSrcData = function getCurrentSrcData(currentData) {\n if (isBrowser && hasArtDirectionSupport(currentData)) {\n // Do we have an image for the current Viewport?\n var foundMedia = currentData.findIndex(matchesMedia);\n\n if (foundMedia !== -1) {\n return currentData[foundMedia];\n } // No media matches, select first element without a media condition\n\n\n var noMedia = currentData.findIndex(function (image) {\n return typeof image.media === \"undefined\";\n });\n\n if (noMedia !== -1) {\n return currentData[noMedia];\n }\n } // Else return the first image.\n\n\n return currentData[0];\n}; // Cache if we've seen an image before so we don't bother with\n// lazy-loading & fading in on subsequent mounts.\n\n\nvar imageCache = Object.create({});\n\nvar inImageCache = function inImageCache(props) {\n var convertedProps = convertProps(props);\n var cacheKey = getImageCacheKey(convertedProps);\n return imageCache[cacheKey] || false;\n};\n\nvar activateCacheForImage = function activateCacheForImage(props) {\n var convertedProps = convertProps(props);\n var cacheKey = getImageCacheKey(convertedProps);\n\n if (cacheKey) {\n imageCache[cacheKey] = true;\n }\n}; // Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\n\n\nvar hasNativeLazyLoadSupport = typeof HTMLImageElement !== \"undefined\" && \"loading\" in HTMLImageElement.prototype;\nvar isBrowser = typeof window !== \"undefined\";\nvar hasIOSupport = isBrowser && window.IntersectionObserver;\nvar io;\nvar listeners = new WeakMap();\n\nfunction getIO() {\n if (typeof io === \"undefined\" && typeof window !== \"undefined\" && window.IntersectionObserver) {\n io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (listeners.has(entry.target)) {\n var cb = listeners.get(entry.target); // Edge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(entry.target);\n listeners.delete(entry.target);\n cb();\n }\n }\n });\n }, {\n rootMargin: \"200px\"\n });\n }\n\n return io;\n}\n\nfunction generateImageSources(imageVariants) {\n return imageVariants.map(function (_ref3) {\n var src = _ref3.src,\n srcSet = _ref3.srcSet,\n srcSetWebp = _ref3.srcSetWebp,\n media = _ref3.media,\n sizes = _ref3.sizes;\n return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {\n key: src\n }, srcSetWebp && /*#__PURE__*/_react.default.createElement(\"source\", {\n type: \"image/webp\",\n media: media,\n srcSet: srcSetWebp,\n sizes: sizes\n }), srcSet && /*#__PURE__*/_react.default.createElement(\"source\", {\n media: media,\n srcSet: srcSet,\n sizes: sizes\n }));\n });\n} // Return an array ordered by elements having a media prop, does not use\n// native sort, as a stable sort is not guaranteed by all browsers/versions\n\n\nfunction groupByMedia(imageVariants) {\n var withMedia = [];\n var without = [];\n imageVariants.forEach(function (variant) {\n return (variant.media ? withMedia : without).push(variant);\n });\n\n if (without.length > 1 && process.env.NODE_ENV !== \"production\") {\n console.warn(\"We've found \" + without.length + \" sources without a media property. They might be ignored by the browser, see: https://www.gatsbyjs.org/packages/gatsby-image/#art-directing-multiple-images\");\n }\n\n return [].concat(withMedia, without);\n}\n\nfunction generateTracedSVGSources(imageVariants) {\n return imageVariants.map(function (_ref4) {\n var src = _ref4.src,\n media = _ref4.media,\n tracedSVG = _ref4.tracedSVG;\n return /*#__PURE__*/_react.default.createElement(\"source\", {\n key: src,\n media: media,\n srcSet: tracedSVG\n });\n });\n}\n\nfunction generateBase64Sources(imageVariants) {\n return imageVariants.map(function (_ref5) {\n var src = _ref5.src,\n media = _ref5.media,\n base64 = _ref5.base64;\n return /*#__PURE__*/_react.default.createElement(\"source\", {\n key: src,\n media: media,\n srcSet: base64\n });\n });\n}\n\nfunction generateNoscriptSource(_ref6, isWebp) {\n var srcSet = _ref6.srcSet,\n srcSetWebp = _ref6.srcSetWebp,\n media = _ref6.media,\n sizes = _ref6.sizes;\n var src = isWebp ? srcSetWebp : srcSet;\n var mediaAttr = media ? \"media=\\\"\" + media + \"\\\" \" : \"\";\n var typeAttr = isWebp ? \"type='image/webp' \" : \"\";\n var sizesAttr = sizes ? \"sizes=\\\"\" + sizes + \"\\\" \" : \"\";\n return \"\";\n}\n\nfunction generateNoscriptSources(imageVariants) {\n return imageVariants.map(function (variant) {\n return (variant.srcSetWebp ? generateNoscriptSource(variant, true) : \"\") + generateNoscriptSource(variant);\n }).join(\"\");\n}\n\nvar listenToIntersections = function listenToIntersections(el, cb) {\n var observer = getIO();\n\n if (observer) {\n observer.observe(el);\n listeners.set(el, cb);\n }\n\n return function () {\n observer.unobserve(el);\n listeners.delete(el);\n };\n};\n\nvar noscriptImg = function noscriptImg(props) {\n // Check if prop exists before adding each attribute to the string output below to prevent\n // HTML validation issues caused by empty values like width=\"\" and height=\"\"\n var src = props.src ? \"src=\\\"\" + props.src + \"\\\" \" : \"src=\\\"\\\" \"; // required attribute\n\n var sizes = props.sizes ? \"sizes=\\\"\" + props.sizes + \"\\\" \" : \"\";\n var srcSet = props.srcSet ? \"srcset=\\\"\" + props.srcSet + \"\\\" \" : \"\";\n var title = props.title ? \"title=\\\"\" + props.title + \"\\\" \" : \"\";\n var alt = props.alt ? \"alt=\\\"\" + props.alt + \"\\\" \" : \"alt=\\\"\\\" \"; // required attribute\n\n var width = props.width ? \"width=\\\"\" + props.width + \"\\\" \" : \"\";\n var height = props.height ? \"height=\\\"\" + props.height + \"\\\" \" : \"\";\n var crossOrigin = props.crossOrigin ? \"crossorigin=\\\"\" + props.crossOrigin + \"\\\" \" : \"\";\n var loading = props.loading ? \"loading=\\\"\" + props.loading + \"\\\" \" : \"\";\n var draggable = props.draggable ? \"draggable=\\\"\" + props.draggable + \"\\\" \" : \"\";\n var sources = generateNoscriptSources(props.imageVariants);\n return \"\" + sources + \"\";\n}; // Earlier versions of gatsby-image during the 2.x cycle did not wrap\n// the `Img` component in a `picture` element. This maintains compatibility\n// until a breaking change can be introduced in the next major release\n\n\nvar Placeholder = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n var src = props.src,\n imageVariants = props.imageVariants,\n generateSources = props.generateSources,\n spreadProps = props.spreadProps,\n ariaHidden = props.ariaHidden;\n\n var baseImage = /*#__PURE__*/_react.default.createElement(Img, (0, _extends2.default)({\n ref: ref,\n src: src\n }, spreadProps, {\n ariaHidden: ariaHidden\n }));\n\n return imageVariants.length > 1 ? /*#__PURE__*/_react.default.createElement(\"picture\", null, generateSources(imageVariants), baseImage) : baseImage;\n});\n\nvar Img = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n var sizes = props.sizes,\n srcSet = props.srcSet,\n src = props.src,\n style = props.style,\n onLoad = props.onLoad,\n onError = props.onError,\n loading = props.loading,\n draggable = props.draggable,\n ariaHidden = props.ariaHidden,\n otherProps = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);\n return /*#__PURE__*/_react.default.createElement(\"img\", (0, _extends2.default)({\n \"aria-hidden\": ariaHidden,\n sizes: sizes,\n srcSet: srcSet,\n src: src\n }, otherProps, {\n onLoad: onLoad,\n onError: onError,\n ref: ref,\n loading: loading,\n draggable: draggable,\n style: (0, _extends2.default)({\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: \"center\"\n }, style)\n }));\n});\n\nImg.propTypes = {\n style: _propTypes.default.object,\n onError: _propTypes.default.func,\n onLoad: _propTypes.default.func\n};\n\nvar Image = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(Image, _React$Component);\n\n function Image(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // If this image has already been loaded before then we can assume it's\n // already in the browser cache so it's cheap to just show directly.\n\n _this.seenBefore = isBrowser && inImageCache(props);\n _this.isCritical = props.loading === \"eager\" || props.critical;\n _this.addNoScript = !(_this.isCritical && !props.fadeIn);\n _this.useIOSupport = !hasNativeLazyLoadSupport && hasIOSupport && !_this.isCritical && !_this.seenBefore;\n var isVisible = _this.isCritical || isBrowser && (hasNativeLazyLoadSupport || !_this.useIOSupport);\n _this.state = {\n isVisible: isVisible,\n imgLoaded: false,\n imgCached: false,\n fadeIn: !_this.seenBefore && props.fadeIn,\n isHydrated: false\n };\n _this.imageRef = /*#__PURE__*/_react.default.createRef();\n _this.placeholderRef = props.placeholderRef || /*#__PURE__*/_react.default.createRef();\n _this.handleImageLoaded = _this.handleImageLoaded.bind((0, _assertThisInitialized2.default)(_this));\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = Image.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.setState({\n isHydrated: isBrowser\n });\n\n if (this.state.isVisible && typeof this.props.onStartLoad === \"function\") {\n this.props.onStartLoad({\n wasCached: inImageCache(this.props)\n });\n }\n\n if (this.isCritical) {\n var img = this.imageRef.current;\n\n if (img && img.complete) {\n this.handleImageLoaded();\n }\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.cleanUpListeners) {\n this.cleanUpListeners();\n }\n } // Specific to IntersectionObserver based lazy-load support\n ;\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.useIOSupport && ref) {\n this.cleanUpListeners = listenToIntersections(ref, function () {\n var imageInCache = inImageCache(_this2.props);\n\n if (!_this2.state.isVisible && typeof _this2.props.onStartLoad === \"function\") {\n _this2.props.onStartLoad({\n wasCached: imageInCache\n });\n } // imgCached and imgLoaded must update after isVisible,\n // Once isVisible is true, imageRef becomes accessible, which imgCached needs access to.\n // imgLoaded and imgCached are in a 2nd setState call to be changed together,\n // avoiding initiating unnecessary animation frames from style changes.\n\n\n _this2.setState({\n isVisible: true\n }, function () {\n _this2.setState({\n imgLoaded: imageInCache,\n // `currentSrc` should be a string, but can be `undefined` in IE,\n // !! operator validates the value is not undefined/null/\"\"\n // for lazyloaded components this might be null\n // TODO fix imgCached behaviour as it's now false when it's lazyloaded\n imgCached: !!(_this2.imageRef.current && _this2.imageRef.current.currentSrc)\n });\n });\n });\n }\n };\n\n _proto.handleImageLoaded = function handleImageLoaded() {\n activateCacheForImage(this.props);\n this.setState({\n imgLoaded: true\n });\n\n if (this.props.onLoad) {\n this.props.onLoad();\n }\n };\n\n _proto.render = function render() {\n var _convertProps = convertProps(this.props),\n title = _convertProps.title,\n alt = _convertProps.alt,\n className = _convertProps.className,\n _convertProps$style = _convertProps.style,\n style = _convertProps$style === void 0 ? {} : _convertProps$style,\n _convertProps$imgStyl = _convertProps.imgStyle,\n imgStyle = _convertProps$imgStyl === void 0 ? {} : _convertProps$imgStyl,\n _convertProps$placeho = _convertProps.placeholderStyle,\n placeholderStyle = _convertProps$placeho === void 0 ? {} : _convertProps$placeho,\n placeholderClassName = _convertProps.placeholderClassName,\n fluid = _convertProps.fluid,\n fixed = _convertProps.fixed,\n backgroundColor = _convertProps.backgroundColor,\n durationFadeIn = _convertProps.durationFadeIn,\n Tag = _convertProps.Tag,\n itemProp = _convertProps.itemProp,\n loading = _convertProps.loading,\n draggable = _convertProps.draggable;\n\n var imageVariants = fluid || fixed; // Abort early if missing image data (#25371)\n\n if (!imageVariants) {\n return null;\n }\n\n var shouldReveal = this.state.fadeIn === false || this.state.imgLoaded;\n var shouldFadeIn = this.state.fadeIn === true && !this.state.imgCached;\n var imageStyle = (0, _extends2.default)({\n opacity: shouldReveal ? 1 : 0,\n transition: shouldFadeIn ? \"opacity \" + durationFadeIn + \"ms\" : \"none\"\n }, imgStyle);\n var bgColor = typeof backgroundColor === \"boolean\" ? \"lightgray\" : backgroundColor;\n var delayHideStyle = {\n transitionDelay: durationFadeIn + \"ms\"\n };\n var imagePlaceholderStyle = (0, _extends2.default)({\n opacity: this.state.imgLoaded ? 0 : 1\n }, shouldFadeIn && delayHideStyle, imgStyle, placeholderStyle);\n var placeholderImageProps = {\n title: title,\n alt: !this.state.isVisible ? alt : \"\",\n style: imagePlaceholderStyle,\n className: placeholderClassName,\n itemProp: itemProp\n }; // Initial client render state needs to match SSR until hydration finishes.\n // Once hydration completes, render again to update to the correct image.\n // `imageVariants` is always an Array type at this point due to `convertProps()`\n\n var image = !this.state.isHydrated ? imageVariants[0] : getCurrentSrcData(imageVariants);\n\n if (fluid) {\n return /*#__PURE__*/_react.default.createElement(Tag, {\n className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n style: (0, _extends2.default)({\n position: \"relative\",\n overflow: \"hidden\",\n maxWidth: image.maxWidth ? image.maxWidth + \"px\" : null,\n maxHeight: image.maxHeight ? image.maxHeight + \"px\" : null\n }, style),\n ref: this.handleRef,\n key: \"fluid-\" + JSON.stringify(image.srcSet)\n }, /*#__PURE__*/_react.default.createElement(Tag, {\n \"aria-hidden\": true,\n style: {\n width: \"100%\",\n paddingBottom: 100 / image.aspectRatio + \"%\"\n }\n }), bgColor && /*#__PURE__*/_react.default.createElement(Tag, {\n \"aria-hidden\": true,\n title: title,\n style: (0, _extends2.default)({\n backgroundColor: bgColor,\n position: \"absolute\",\n top: 0,\n bottom: 0,\n opacity: !this.state.imgLoaded ? 1 : 0,\n right: 0,\n left: 0\n }, shouldFadeIn && delayHideStyle)\n }), image.base64 && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.base64,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateBase64Sources\n }), image.tracedSVG && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.tracedSVG,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateTracedSVGSources\n }), this.state.isVisible && /*#__PURE__*/_react.default.createElement(\"picture\", null, generateImageSources(imageVariants), /*#__PURE__*/_react.default.createElement(Img, {\n alt: alt,\n title: title,\n sizes: image.sizes,\n src: image.src,\n crossOrigin: this.props.crossOrigin,\n srcSet: image.srcSet,\n style: imageStyle,\n ref: this.imageRef,\n onLoad: this.handleImageLoaded,\n onError: this.props.onError,\n itemProp: itemProp,\n loading: loading,\n draggable: draggable\n })), this.addNoScript && /*#__PURE__*/_react.default.createElement(\"noscript\", {\n dangerouslySetInnerHTML: {\n __html: noscriptImg((0, _extends2.default)({\n alt: alt,\n title: title,\n loading: loading\n }, image, {\n imageVariants: imageVariants\n }))\n }\n }));\n }\n\n if (fixed) {\n var divStyle = (0, _extends2.default)({\n position: \"relative\",\n overflow: \"hidden\",\n display: \"inline-block\",\n width: image.width,\n height: image.height\n }, style);\n\n if (style.display === \"inherit\") {\n delete divStyle.display;\n }\n\n return /*#__PURE__*/_react.default.createElement(Tag, {\n className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n style: divStyle,\n ref: this.handleRef,\n key: \"fixed-\" + JSON.stringify(image.srcSet)\n }, bgColor && /*#__PURE__*/_react.default.createElement(Tag, {\n \"aria-hidden\": true,\n title: title,\n style: (0, _extends2.default)({\n backgroundColor: bgColor,\n width: image.width,\n opacity: !this.state.imgLoaded ? 1 : 0,\n height: image.height\n }, shouldFadeIn && delayHideStyle)\n }), image.base64 && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.base64,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateBase64Sources\n }), image.tracedSVG && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.tracedSVG,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateTracedSVGSources\n }), this.state.isVisible && /*#__PURE__*/_react.default.createElement(\"picture\", null, generateImageSources(imageVariants), /*#__PURE__*/_react.default.createElement(Img, {\n alt: alt,\n title: title,\n width: image.width,\n height: image.height,\n sizes: image.sizes,\n src: image.src,\n crossOrigin: this.props.crossOrigin,\n srcSet: image.srcSet,\n style: imageStyle,\n ref: this.imageRef,\n onLoad: this.handleImageLoaded,\n onError: this.props.onError,\n itemProp: itemProp,\n loading: loading,\n draggable: draggable\n })), this.addNoScript && /*#__PURE__*/_react.default.createElement(\"noscript\", {\n dangerouslySetInnerHTML: {\n __html: noscriptImg((0, _extends2.default)({\n alt: alt,\n title: title,\n loading: loading\n }, image, {\n imageVariants: imageVariants\n }))\n }\n }));\n }\n\n return null;\n };\n\n return Image;\n}(_react.default.Component);\n\nImage.defaultProps = {\n fadeIn: true,\n durationFadeIn: 500,\n alt: \"\",\n Tag: \"div\",\n // We set it to `lazy` by default because it's best to default to a performant\n // setting and let the user \"opt out\" to `eager`\n loading: \"lazy\"\n};\n\nvar fixedObject = _propTypes.default.shape({\n width: _propTypes.default.number.isRequired,\n height: _propTypes.default.number.isRequired,\n src: _propTypes.default.string.isRequired,\n srcSet: _propTypes.default.string.isRequired,\n base64: _propTypes.default.string,\n tracedSVG: _propTypes.default.string,\n srcWebp: _propTypes.default.string,\n srcSetWebp: _propTypes.default.string,\n media: _propTypes.default.string\n});\n\nvar fluidObject = _propTypes.default.shape({\n aspectRatio: _propTypes.default.number.isRequired,\n src: _propTypes.default.string.isRequired,\n srcSet: _propTypes.default.string.isRequired,\n sizes: _propTypes.default.string.isRequired,\n base64: _propTypes.default.string,\n tracedSVG: _propTypes.default.string,\n srcWebp: _propTypes.default.string,\n srcSetWebp: _propTypes.default.string,\n media: _propTypes.default.string,\n maxWidth: _propTypes.default.number,\n maxHeight: _propTypes.default.number\n});\n\nfunction requireFixedOrFluid(originalPropTypes) {\n return function (props, propName, componentName) {\n var _PropTypes$checkPropT;\n\n if (!props.fixed && !props.fluid) {\n throw new Error(\"The prop `fluid` or `fixed` is marked as required in `\" + componentName + \"`, but their values are both `undefined`.\");\n }\n\n _propTypes.default.checkPropTypes((_PropTypes$checkPropT = {}, _PropTypes$checkPropT[propName] = originalPropTypes, _PropTypes$checkPropT), props, \"prop\", componentName);\n };\n} // If you modify these propTypes, please don't forget to update following files as well:\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/index.d.ts\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/README.md#gatsby-image-props\n// https://github.com/gatsbyjs/gatsby/blob/master/docs/docs/gatsby-image.md#gatsby-image-props\n\n\nImage.propTypes = {\n resolutions: fixedObject,\n sizes: fluidObject,\n fixed: requireFixedOrFluid(_propTypes.default.oneOfType([fixedObject, _propTypes.default.arrayOf(fixedObject)])),\n fluid: requireFixedOrFluid(_propTypes.default.oneOfType([fluidObject, _propTypes.default.arrayOf(fluidObject)])),\n fadeIn: _propTypes.default.bool,\n durationFadeIn: _propTypes.default.number,\n title: _propTypes.default.string,\n alt: _propTypes.default.string,\n className: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]),\n // Support Glamor's css prop.\n critical: _propTypes.default.bool,\n crossOrigin: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n style: _propTypes.default.object,\n imgStyle: _propTypes.default.object,\n placeholderStyle: _propTypes.default.object,\n placeholderClassName: _propTypes.default.string,\n backgroundColor: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n onLoad: _propTypes.default.func,\n onError: _propTypes.default.func,\n onStartLoad: _propTypes.default.func,\n Tag: _propTypes.default.string,\n itemProp: _propTypes.default.string,\n loading: _propTypes.default.oneOf([\"auto\", \"lazy\", \"eager\"]),\n draggable: _propTypes.default.bool\n};\nvar _default = Image;\nexports.default = _default;"],"names":["PureBio","author","social","avatar","style","display","marginBottom","rhythm","fixed","childImageSharp","alt","name","marginRight","minWidth","borderRadius","imgStyle","flex","summary","href","linkedin","twitter","data","useStaticQuery","site","siteMetadata","_interopRequireDefault","require","exports","io","_assertThisInitialized2","_inheritsLoose2","_objectWithoutPropertiesLoose2","_extends2","_react","_propTypes","_excluded","convertProps","props","convertedProps","default","resolutions","sizes","critical","fluid","loading","groupByMedia","concat","matchesMedia","_ref","media","isBrowser","window","matchMedia","matches","getImageCacheKey","_ref2","srcData","getCurrentSrcData","src","currentData","Array","isArray","some","image","hasArtDirectionSupport","foundMedia","findIndex","noMedia","imageCache","Object","create","inImageCache","cacheKey","hasNativeLazyLoadSupport","HTMLImageElement","prototype","hasIOSupport","IntersectionObserver","listeners","WeakMap","generateImageSources","imageVariants","map","_ref3","srcSet","srcSetWebp","createElement","Fragment","key","type","withMedia","without","forEach","variant","push","generateTracedSVGSources","_ref4","tracedSVG","generateBase64Sources","_ref5","base64","generateNoscriptSource","_ref6","isWebp","listenToIntersections","el","cb","observer","entries","entry","has","target","get","isIntersecting","intersectionRatio","unobserve","delete","rootMargin","observe","set","noscriptImg","title","width","height","crossOrigin","draggable","join","Placeholder","forwardRef","ref","generateSources","spreadProps","ariaHidden","baseImage","Img","length","onLoad","onError","otherProps","position","top","left","objectFit","objectPosition","propTypes","object","func","Image","_React$Component","_this","call","this","seenBefore","isCritical","addNoScript","fadeIn","useIOSupport","isVisible","state","imgLoaded","imgCached","isHydrated","imageRef","createRef","placeholderRef","handleImageLoaded","bind","handleRef","_proto","componentDidMount","setState","onStartLoad","wasCached","img","current","complete","componentWillUnmount","cleanUpListeners","_this2","imageInCache","currentSrc","render","_convertProps","className","_convertProps$style","_convertProps$imgStyl","_convertProps$placeho","placeholderStyle","placeholderClassName","backgroundColor","durationFadeIn","Tag","itemProp","shouldReveal","shouldFadeIn","imageStyle","opacity","transition","bgColor","delayHideStyle","transitionDelay","imagePlaceholderStyle","placeholderImageProps","overflow","maxWidth","maxHeight","JSON","stringify","paddingBottom","aspectRatio","bottom","right","dangerouslySetInnerHTML","__html","divStyle","Component","defaultProps","fixedObject","shape","number","isRequired","string","srcWebp","fluidObject","requireFixedOrFluid","originalPropTypes","propName","componentName","_PropTypes$checkPropT","Error","checkPropTypes","oneOfType","arrayOf","bool","oneOf","_default"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"c08ea0bdbaa45f31cfbc4328bc5134cd16b2791b-996fd920e2366d845af4.js","mappings":"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","sources":["webpack://website/./src/components/bio.tsx","webpack://website/../../node_modules/gatsby-image/index.js"],"sourcesContent":["import * as React from 'react';\nimport { useStaticQuery, graphql } from 'gatsby';\nimport Image, { FixedObject } from 'gatsby-image';\n\nimport { rhythm } from '../utils/typography';\n\ninterface IPureBioProps {\n author: {\n name: string;\n summary: string;\n };\n social: {\n twitter: string;\n linkedin: string;\n };\n avatar: {\n childImageSharp: {\n fixed: FixedObject;\n };\n };\n}\n\nconst PureBio: React.FunctionComponent = ({\n author,\n social,\n avatar,\n}) => {\n return (\n \n \n

\n Written by {author.name} {author.summary}\n {` `}\n \n You should connect with him on LinkedIn\n \n  or \n \n follow him on Twitter\n \n

\n \n );\n};\n\nconst Bio = (): JSX.Element => {\n const data = useStaticQuery(graphql`\n query BioQuery {\n avatar: file(absolutePath: { regex: \"/profile-pic.jpg/\" }) {\n childImageSharp {\n fixed(width: 125, height: 125) {\n ...GatsbyImageSharpFixed\n }\n }\n }\n site {\n siteMetadata {\n author {\n name\n summary\n }\n social {\n twitter\n linkedin\n }\n }\n }\n }\n `);\n\n const { author, social } = data.site.siteMetadata;\n return ;\n};\n\nexport default Bio;\nexport { PureBio, IPureBioProps };\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _excluded = [\"sizes\", \"srcSet\", \"src\", \"style\", \"onLoad\", \"onError\", \"loading\", \"draggable\", \"ariaHidden\"];\n\nvar logDeprecationNotice = function logDeprecationNotice(prop, replacement) {\n if (process.env.NODE_ENV === \"production\") {\n return;\n }\n\n console.log(\"\\n The \\\"\" + prop + \"\\\" prop is now deprecated and will be removed in the next major version\\n of \\\"gatsby-image\\\".\\n \");\n\n if (replacement) {\n console.log(\"Please use \" + replacement + \" instead of \\\"\" + prop + \"\\\".\");\n }\n}; // Handle legacy props during their deprecation phase\n\n\nvar convertProps = function convertProps(props) {\n var convertedProps = (0, _extends2.default)({}, props);\n var resolutions = convertedProps.resolutions,\n sizes = convertedProps.sizes,\n critical = convertedProps.critical;\n\n if (resolutions) {\n convertedProps.fixed = resolutions;\n logDeprecationNotice(\"resolutions\", \"the gatsby-image v2 prop \\\"fixed\\\"\");\n delete convertedProps.resolutions;\n }\n\n if (sizes) {\n convertedProps.fluid = sizes;\n logDeprecationNotice(\"sizes\", \"the gatsby-image v2 prop \\\"fluid\\\"\");\n delete convertedProps.sizes;\n }\n\n if (critical) {\n logDeprecationNotice(\"critical\", \"the native \\\"loading\\\" attribute\");\n convertedProps.loading = \"eager\";\n } // convert fluid & fixed to arrays so we only have to work with arrays\n\n\n if (convertedProps.fluid) {\n convertedProps.fluid = groupByMedia([].concat(convertedProps.fluid));\n }\n\n if (convertedProps.fixed) {\n convertedProps.fixed = groupByMedia([].concat(convertedProps.fixed));\n }\n\n return convertedProps;\n};\n/**\n * Checks if fluid or fixed are art-direction arrays.\n *\n * @param currentData {{media?: string}[]} The props to check for images.\n * @return {boolean}\n */\n\n\nvar hasArtDirectionSupport = function hasArtDirectionSupport(currentData) {\n return !!currentData && Array.isArray(currentData) && currentData.some(function (image) {\n return typeof image.media !== \"undefined\";\n });\n};\n/**\n * Tries to detect if a media query matches the current viewport.\n * @property media {{media?: string}} A media query string.\n * @return {boolean}\n */\n\n\nvar matchesMedia = function matchesMedia(_ref) {\n var media = _ref.media;\n return media ? isBrowser && !!window.matchMedia(media).matches : false;\n};\n/**\n * Find the source of an image to use as a key in the image cache.\n * Use `the first image in either `fixed` or `fluid`\n * @param {{fluid: {src: string, media?: string}[], fixed: {src: string, media?: string}[]}} args\n * @return {string?} Returns image src or undefined it not given.\n */\n\n\nvar getImageCacheKey = function getImageCacheKey(_ref2) {\n var fluid = _ref2.fluid,\n fixed = _ref2.fixed;\n var srcData = getCurrentSrcData(fluid || fixed || []);\n return srcData && srcData.src;\n};\n/**\n * Returns the current src - Preferably with art-direction support.\n * @param currentData {{media?: string}[], maxWidth?: Number, maxHeight?: Number} The fluid or fixed image array.\n * @return {{src: string, media?: string, maxWidth?: Number, maxHeight?: Number}}\n */\n\n\nvar getCurrentSrcData = function getCurrentSrcData(currentData) {\n if (isBrowser && hasArtDirectionSupport(currentData)) {\n // Do we have an image for the current Viewport?\n var foundMedia = currentData.findIndex(matchesMedia);\n\n if (foundMedia !== -1) {\n return currentData[foundMedia];\n } // No media matches, select first element without a media condition\n\n\n var noMedia = currentData.findIndex(function (image) {\n return typeof image.media === \"undefined\";\n });\n\n if (noMedia !== -1) {\n return currentData[noMedia];\n }\n } // Else return the first image.\n\n\n return currentData[0];\n}; // Cache if we've seen an image before so we don't bother with\n// lazy-loading & fading in on subsequent mounts.\n\n\nvar imageCache = Object.create({});\n\nvar inImageCache = function inImageCache(props) {\n var convertedProps = convertProps(props);\n var cacheKey = getImageCacheKey(convertedProps);\n return imageCache[cacheKey] || false;\n};\n\nvar activateCacheForImage = function activateCacheForImage(props) {\n var convertedProps = convertProps(props);\n var cacheKey = getImageCacheKey(convertedProps);\n\n if (cacheKey) {\n imageCache[cacheKey] = true;\n }\n}; // Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\n\n\nvar hasNativeLazyLoadSupport = typeof HTMLImageElement !== \"undefined\" && \"loading\" in HTMLImageElement.prototype;\nvar isBrowser = typeof window !== \"undefined\";\nvar hasIOSupport = isBrowser && window.IntersectionObserver;\nvar io;\nvar listeners = new WeakMap();\n\nfunction getIO() {\n if (typeof io === \"undefined\" && typeof window !== \"undefined\" && window.IntersectionObserver) {\n io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (listeners.has(entry.target)) {\n var cb = listeners.get(entry.target); // Edge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(entry.target);\n listeners.delete(entry.target);\n cb();\n }\n }\n });\n }, {\n rootMargin: \"200px\"\n });\n }\n\n return io;\n}\n\nfunction generateImageSources(imageVariants) {\n return imageVariants.map(function (_ref3) {\n var src = _ref3.src,\n srcSet = _ref3.srcSet,\n srcSetWebp = _ref3.srcSetWebp,\n media = _ref3.media,\n sizes = _ref3.sizes;\n return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {\n key: src\n }, srcSetWebp && /*#__PURE__*/_react.default.createElement(\"source\", {\n type: \"image/webp\",\n media: media,\n srcSet: srcSetWebp,\n sizes: sizes\n }), srcSet && /*#__PURE__*/_react.default.createElement(\"source\", {\n media: media,\n srcSet: srcSet,\n sizes: sizes\n }));\n });\n} // Return an array ordered by elements having a media prop, does not use\n// native sort, as a stable sort is not guaranteed by all browsers/versions\n\n\nfunction groupByMedia(imageVariants) {\n var withMedia = [];\n var without = [];\n imageVariants.forEach(function (variant) {\n return (variant.media ? withMedia : without).push(variant);\n });\n\n if (without.length > 1 && process.env.NODE_ENV !== \"production\") {\n console.warn(\"We've found \" + without.length + \" sources without a media property. They might be ignored by the browser, see: https://www.gatsbyjs.org/packages/gatsby-image/#art-directing-multiple-images\");\n }\n\n return [].concat(withMedia, without);\n}\n\nfunction generateTracedSVGSources(imageVariants) {\n return imageVariants.map(function (_ref4) {\n var src = _ref4.src,\n media = _ref4.media,\n tracedSVG = _ref4.tracedSVG;\n return /*#__PURE__*/_react.default.createElement(\"source\", {\n key: src,\n media: media,\n srcSet: tracedSVG\n });\n });\n}\n\nfunction generateBase64Sources(imageVariants) {\n return imageVariants.map(function (_ref5) {\n var src = _ref5.src,\n media = _ref5.media,\n base64 = _ref5.base64;\n return /*#__PURE__*/_react.default.createElement(\"source\", {\n key: src,\n media: media,\n srcSet: base64\n });\n });\n}\n\nfunction generateNoscriptSource(_ref6, isWebp) {\n var srcSet = _ref6.srcSet,\n srcSetWebp = _ref6.srcSetWebp,\n media = _ref6.media,\n sizes = _ref6.sizes;\n var src = isWebp ? srcSetWebp : srcSet;\n var mediaAttr = media ? \"media=\\\"\" + media + \"\\\" \" : \"\";\n var typeAttr = isWebp ? \"type='image/webp' \" : \"\";\n var sizesAttr = sizes ? \"sizes=\\\"\" + sizes + \"\\\" \" : \"\";\n return \"\";\n}\n\nfunction generateNoscriptSources(imageVariants) {\n return imageVariants.map(function (variant) {\n return (variant.srcSetWebp ? generateNoscriptSource(variant, true) : \"\") + generateNoscriptSource(variant);\n }).join(\"\");\n}\n\nvar listenToIntersections = function listenToIntersections(el, cb) {\n var observer = getIO();\n\n if (observer) {\n observer.observe(el);\n listeners.set(el, cb);\n }\n\n return function () {\n observer.unobserve(el);\n listeners.delete(el);\n };\n};\n\nvar noscriptImg = function noscriptImg(props) {\n // Check if prop exists before adding each attribute to the string output below to prevent\n // HTML validation issues caused by empty values like width=\"\" and height=\"\"\n var src = props.src ? \"src=\\\"\" + props.src + \"\\\" \" : \"src=\\\"\\\" \"; // required attribute\n\n var sizes = props.sizes ? \"sizes=\\\"\" + props.sizes + \"\\\" \" : \"\";\n var srcSet = props.srcSet ? \"srcset=\\\"\" + props.srcSet + \"\\\" \" : \"\";\n var title = props.title ? \"title=\\\"\" + props.title + \"\\\" \" : \"\";\n var alt = props.alt ? \"alt=\\\"\" + props.alt + \"\\\" \" : \"alt=\\\"\\\" \"; // required attribute\n\n var width = props.width ? \"width=\\\"\" + props.width + \"\\\" \" : \"\";\n var height = props.height ? \"height=\\\"\" + props.height + \"\\\" \" : \"\";\n var crossOrigin = props.crossOrigin ? \"crossorigin=\\\"\" + props.crossOrigin + \"\\\" \" : \"\";\n var loading = props.loading ? \"loading=\\\"\" + props.loading + \"\\\" \" : \"\";\n var draggable = props.draggable ? \"draggable=\\\"\" + props.draggable + \"\\\" \" : \"\";\n var sources = generateNoscriptSources(props.imageVariants);\n return \"\" + sources + \"\";\n}; // Earlier versions of gatsby-image during the 2.x cycle did not wrap\n// the `Img` component in a `picture` element. This maintains compatibility\n// until a breaking change can be introduced in the next major release\n\n\nvar Placeholder = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n var src = props.src,\n imageVariants = props.imageVariants,\n generateSources = props.generateSources,\n spreadProps = props.spreadProps,\n ariaHidden = props.ariaHidden;\n\n var baseImage = /*#__PURE__*/_react.default.createElement(Img, (0, _extends2.default)({\n ref: ref,\n src: src\n }, spreadProps, {\n ariaHidden: ariaHidden\n }));\n\n return imageVariants.length > 1 ? /*#__PURE__*/_react.default.createElement(\"picture\", null, generateSources(imageVariants), baseImage) : baseImage;\n});\n\nvar Img = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n var sizes = props.sizes,\n srcSet = props.srcSet,\n src = props.src,\n style = props.style,\n onLoad = props.onLoad,\n onError = props.onError,\n loading = props.loading,\n draggable = props.draggable,\n ariaHidden = props.ariaHidden,\n otherProps = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);\n return /*#__PURE__*/_react.default.createElement(\"img\", (0, _extends2.default)({\n \"aria-hidden\": ariaHidden,\n sizes: sizes,\n srcSet: srcSet,\n src: src\n }, otherProps, {\n onLoad: onLoad,\n onError: onError,\n ref: ref,\n loading: loading,\n draggable: draggable,\n style: (0, _extends2.default)({\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: \"center\"\n }, style)\n }));\n});\n\nImg.propTypes = {\n style: _propTypes.default.object,\n onError: _propTypes.default.func,\n onLoad: _propTypes.default.func\n};\n\nvar Image = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(Image, _React$Component);\n\n function Image(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // If this image has already been loaded before then we can assume it's\n // already in the browser cache so it's cheap to just show directly.\n\n _this.seenBefore = isBrowser && inImageCache(props);\n _this.isCritical = props.loading === \"eager\" || props.critical;\n _this.addNoScript = !(_this.isCritical && !props.fadeIn);\n _this.useIOSupport = !hasNativeLazyLoadSupport && hasIOSupport && !_this.isCritical && !_this.seenBefore;\n var isVisible = _this.isCritical || isBrowser && (hasNativeLazyLoadSupport || !_this.useIOSupport);\n _this.state = {\n isVisible: isVisible,\n imgLoaded: false,\n imgCached: false,\n fadeIn: !_this.seenBefore && props.fadeIn,\n isHydrated: false\n };\n _this.imageRef = /*#__PURE__*/_react.default.createRef();\n _this.placeholderRef = props.placeholderRef || /*#__PURE__*/_react.default.createRef();\n _this.handleImageLoaded = _this.handleImageLoaded.bind((0, _assertThisInitialized2.default)(_this));\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = Image.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.setState({\n isHydrated: isBrowser\n });\n\n if (this.state.isVisible && typeof this.props.onStartLoad === \"function\") {\n this.props.onStartLoad({\n wasCached: inImageCache(this.props)\n });\n }\n\n if (this.isCritical) {\n var img = this.imageRef.current;\n\n if (img && img.complete) {\n this.handleImageLoaded();\n }\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.cleanUpListeners) {\n this.cleanUpListeners();\n }\n } // Specific to IntersectionObserver based lazy-load support\n ;\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.useIOSupport && ref) {\n this.cleanUpListeners = listenToIntersections(ref, function () {\n var imageInCache = inImageCache(_this2.props);\n\n if (!_this2.state.isVisible && typeof _this2.props.onStartLoad === \"function\") {\n _this2.props.onStartLoad({\n wasCached: imageInCache\n });\n } // imgCached and imgLoaded must update after isVisible,\n // Once isVisible is true, imageRef becomes accessible, which imgCached needs access to.\n // imgLoaded and imgCached are in a 2nd setState call to be changed together,\n // avoiding initiating unnecessary animation frames from style changes.\n\n\n _this2.setState({\n isVisible: true\n }, function () {\n _this2.setState({\n imgLoaded: imageInCache,\n // `currentSrc` should be a string, but can be `undefined` in IE,\n // !! operator validates the value is not undefined/null/\"\"\n // for lazyloaded components this might be null\n // TODO fix imgCached behaviour as it's now false when it's lazyloaded\n imgCached: !!(_this2.imageRef.current && _this2.imageRef.current.currentSrc)\n });\n });\n });\n }\n };\n\n _proto.handleImageLoaded = function handleImageLoaded() {\n activateCacheForImage(this.props);\n this.setState({\n imgLoaded: true\n });\n\n if (this.props.onLoad) {\n this.props.onLoad();\n }\n };\n\n _proto.render = function render() {\n var _convertProps = convertProps(this.props),\n title = _convertProps.title,\n alt = _convertProps.alt,\n className = _convertProps.className,\n _convertProps$style = _convertProps.style,\n style = _convertProps$style === void 0 ? {} : _convertProps$style,\n _convertProps$imgStyl = _convertProps.imgStyle,\n imgStyle = _convertProps$imgStyl === void 0 ? {} : _convertProps$imgStyl,\n _convertProps$placeho = _convertProps.placeholderStyle,\n placeholderStyle = _convertProps$placeho === void 0 ? {} : _convertProps$placeho,\n placeholderClassName = _convertProps.placeholderClassName,\n fluid = _convertProps.fluid,\n fixed = _convertProps.fixed,\n backgroundColor = _convertProps.backgroundColor,\n durationFadeIn = _convertProps.durationFadeIn,\n Tag = _convertProps.Tag,\n itemProp = _convertProps.itemProp,\n loading = _convertProps.loading,\n draggable = _convertProps.draggable;\n\n var imageVariants = fluid || fixed; // Abort early if missing image data (#25371)\n\n if (!imageVariants) {\n return null;\n }\n\n var shouldReveal = this.state.fadeIn === false || this.state.imgLoaded;\n var shouldFadeIn = this.state.fadeIn === true && !this.state.imgCached;\n var imageStyle = (0, _extends2.default)({\n opacity: shouldReveal ? 1 : 0,\n transition: shouldFadeIn ? \"opacity \" + durationFadeIn + \"ms\" : \"none\"\n }, imgStyle);\n var bgColor = typeof backgroundColor === \"boolean\" ? \"lightgray\" : backgroundColor;\n var delayHideStyle = {\n transitionDelay: durationFadeIn + \"ms\"\n };\n var imagePlaceholderStyle = (0, _extends2.default)({\n opacity: this.state.imgLoaded ? 0 : 1\n }, shouldFadeIn && delayHideStyle, imgStyle, placeholderStyle);\n var placeholderImageProps = {\n title: title,\n alt: !this.state.isVisible ? alt : \"\",\n style: imagePlaceholderStyle,\n className: placeholderClassName,\n itemProp: itemProp\n }; // Initial client render state needs to match SSR until hydration finishes.\n // Once hydration completes, render again to update to the correct image.\n // `imageVariants` is always an Array type at this point due to `convertProps()`\n\n var image = !this.state.isHydrated ? imageVariants[0] : getCurrentSrcData(imageVariants);\n\n if (fluid) {\n return /*#__PURE__*/_react.default.createElement(Tag, {\n className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n style: (0, _extends2.default)({\n position: \"relative\",\n overflow: \"hidden\",\n maxWidth: image.maxWidth ? image.maxWidth + \"px\" : null,\n maxHeight: image.maxHeight ? image.maxHeight + \"px\" : null\n }, style),\n ref: this.handleRef,\n key: \"fluid-\" + JSON.stringify(image.srcSet)\n }, /*#__PURE__*/_react.default.createElement(Tag, {\n \"aria-hidden\": true,\n style: {\n width: \"100%\",\n paddingBottom: 100 / image.aspectRatio + \"%\"\n }\n }), bgColor && /*#__PURE__*/_react.default.createElement(Tag, {\n \"aria-hidden\": true,\n title: title,\n style: (0, _extends2.default)({\n backgroundColor: bgColor,\n position: \"absolute\",\n top: 0,\n bottom: 0,\n opacity: !this.state.imgLoaded ? 1 : 0,\n right: 0,\n left: 0\n }, shouldFadeIn && delayHideStyle)\n }), image.base64 && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.base64,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateBase64Sources\n }), image.tracedSVG && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.tracedSVG,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateTracedSVGSources\n }), this.state.isVisible && /*#__PURE__*/_react.default.createElement(\"picture\", null, generateImageSources(imageVariants), /*#__PURE__*/_react.default.createElement(Img, {\n alt: alt,\n title: title,\n sizes: image.sizes,\n src: image.src,\n crossOrigin: this.props.crossOrigin,\n srcSet: image.srcSet,\n style: imageStyle,\n ref: this.imageRef,\n onLoad: this.handleImageLoaded,\n onError: this.props.onError,\n itemProp: itemProp,\n loading: loading,\n draggable: draggable\n })), this.addNoScript && /*#__PURE__*/_react.default.createElement(\"noscript\", {\n dangerouslySetInnerHTML: {\n __html: noscriptImg((0, _extends2.default)({\n alt: alt,\n title: title,\n loading: loading\n }, image, {\n imageVariants: imageVariants\n }))\n }\n }));\n }\n\n if (fixed) {\n var divStyle = (0, _extends2.default)({\n position: \"relative\",\n overflow: \"hidden\",\n display: \"inline-block\",\n width: image.width,\n height: image.height\n }, style);\n\n if (style.display === \"inherit\") {\n delete divStyle.display;\n }\n\n return /*#__PURE__*/_react.default.createElement(Tag, {\n className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n style: divStyle,\n ref: this.handleRef,\n key: \"fixed-\" + JSON.stringify(image.srcSet)\n }, bgColor && /*#__PURE__*/_react.default.createElement(Tag, {\n \"aria-hidden\": true,\n title: title,\n style: (0, _extends2.default)({\n backgroundColor: bgColor,\n width: image.width,\n opacity: !this.state.imgLoaded ? 1 : 0,\n height: image.height\n }, shouldFadeIn && delayHideStyle)\n }), image.base64 && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.base64,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateBase64Sources\n }), image.tracedSVG && /*#__PURE__*/_react.default.createElement(Placeholder, {\n ariaHidden: true,\n ref: this.placeholderRef,\n src: image.tracedSVG,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateTracedSVGSources\n }), this.state.isVisible && /*#__PURE__*/_react.default.createElement(\"picture\", null, generateImageSources(imageVariants), /*#__PURE__*/_react.default.createElement(Img, {\n alt: alt,\n title: title,\n width: image.width,\n height: image.height,\n sizes: image.sizes,\n src: image.src,\n crossOrigin: this.props.crossOrigin,\n srcSet: image.srcSet,\n style: imageStyle,\n ref: this.imageRef,\n onLoad: this.handleImageLoaded,\n onError: this.props.onError,\n itemProp: itemProp,\n loading: loading,\n draggable: draggable\n })), this.addNoScript && /*#__PURE__*/_react.default.createElement(\"noscript\", {\n dangerouslySetInnerHTML: {\n __html: noscriptImg((0, _extends2.default)({\n alt: alt,\n title: title,\n loading: loading\n }, image, {\n imageVariants: imageVariants\n }))\n }\n }));\n }\n\n return null;\n };\n\n return Image;\n}(_react.default.Component);\n\nImage.defaultProps = {\n fadeIn: true,\n durationFadeIn: 500,\n alt: \"\",\n Tag: \"div\",\n // We set it to `lazy` by default because it's best to default to a performant\n // setting and let the user \"opt out\" to `eager`\n loading: \"lazy\"\n};\n\nvar fixedObject = _propTypes.default.shape({\n width: _propTypes.default.number.isRequired,\n height: _propTypes.default.number.isRequired,\n src: _propTypes.default.string.isRequired,\n srcSet: _propTypes.default.string.isRequired,\n base64: _propTypes.default.string,\n tracedSVG: _propTypes.default.string,\n srcWebp: _propTypes.default.string,\n srcSetWebp: _propTypes.default.string,\n media: _propTypes.default.string\n});\n\nvar fluidObject = _propTypes.default.shape({\n aspectRatio: _propTypes.default.number.isRequired,\n src: _propTypes.default.string.isRequired,\n srcSet: _propTypes.default.string.isRequired,\n sizes: _propTypes.default.string.isRequired,\n base64: _propTypes.default.string,\n tracedSVG: _propTypes.default.string,\n srcWebp: _propTypes.default.string,\n srcSetWebp: _propTypes.default.string,\n media: _propTypes.default.string,\n maxWidth: _propTypes.default.number,\n maxHeight: _propTypes.default.number\n});\n\nfunction requireFixedOrFluid(originalPropTypes) {\n return function (props, propName, componentName) {\n var _PropTypes$checkPropT;\n\n if (!props.fixed && !props.fluid) {\n throw new Error(\"The prop `fluid` or `fixed` is marked as required in `\" + componentName + \"`, but their values are both `undefined`.\");\n }\n\n _propTypes.default.checkPropTypes((_PropTypes$checkPropT = {}, _PropTypes$checkPropT[propName] = originalPropTypes, _PropTypes$checkPropT), props, \"prop\", componentName);\n };\n} // If you modify these propTypes, please don't forget to update following files as well:\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/index.d.ts\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/README.md#gatsby-image-props\n// https://github.com/gatsbyjs/gatsby/blob/master/docs/docs/gatsby-image.md#gatsby-image-props\n\n\nImage.propTypes = {\n resolutions: fixedObject,\n sizes: fluidObject,\n fixed: requireFixedOrFluid(_propTypes.default.oneOfType([fixedObject, _propTypes.default.arrayOf(fixedObject)])),\n fluid: requireFixedOrFluid(_propTypes.default.oneOfType([fluidObject, _propTypes.default.arrayOf(fluidObject)])),\n fadeIn: _propTypes.default.bool,\n durationFadeIn: _propTypes.default.number,\n title: _propTypes.default.string,\n alt: _propTypes.default.string,\n className: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]),\n // Support Glamor's css prop.\n critical: _propTypes.default.bool,\n crossOrigin: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n style: _propTypes.default.object,\n imgStyle: _propTypes.default.object,\n placeholderStyle: _propTypes.default.object,\n placeholderClassName: _propTypes.default.string,\n backgroundColor: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n onLoad: _propTypes.default.func,\n onError: _propTypes.default.func,\n onStartLoad: _propTypes.default.func,\n Tag: _propTypes.default.string,\n itemProp: _propTypes.default.string,\n loading: _propTypes.default.oneOf([\"auto\", \"lazy\", \"eager\"]),\n draggable: _propTypes.default.bool\n};\nvar _default = Image;\nexports.default = _default;"],"names":["PureBio","author","social","avatar","style","display","marginBottom","rhythm","fixed","childImageSharp","alt","name","marginRight","minWidth","borderRadius","imgStyle","flex","summary","href","linkedin","twitter","data","useStaticQuery","site","siteMetadata","_interopRequireDefault","require","exports","io","_assertThisInitialized2","_inheritsLoose2","_objectWithoutPropertiesLoose2","_extends2","_react","_propTypes","_excluded","convertProps","props","convertedProps","default","resolutions","sizes","critical","fluid","loading","groupByMedia","concat","matchesMedia","_ref","media","isBrowser","window","matchMedia","matches","getImageCacheKey","_ref2","srcData","getCurrentSrcData","src","currentData","Array","isArray","some","image","hasArtDirectionSupport","foundMedia","findIndex","noMedia","imageCache","Object","create","inImageCache","cacheKey","hasNativeLazyLoadSupport","HTMLImageElement","prototype","hasIOSupport","IntersectionObserver","listeners","WeakMap","generateImageSources","imageVariants","map","_ref3","srcSet","srcSetWebp","createElement","Fragment","key","type","withMedia","without","forEach","variant","push","generateTracedSVGSources","_ref4","tracedSVG","generateBase64Sources","_ref5","base64","generateNoscriptSource","_ref6","isWebp","listenToIntersections","el","cb","observer","entries","entry","has","target","get","isIntersecting","intersectionRatio","unobserve","delete","rootMargin","observe","set","noscriptImg","title","width","height","crossOrigin","draggable","join","Placeholder","forwardRef","ref","generateSources","spreadProps","ariaHidden","baseImage","Img","length","onLoad","onError","otherProps","position","top","left","objectFit","objectPosition","propTypes","object","func","Image","_React$Component","_this","call","this","seenBefore","isCritical","addNoScript","fadeIn","useIOSupport","isVisible","state","imgLoaded","imgCached","isHydrated","imageRef","createRef","placeholderRef","handleImageLoaded","bind","handleRef","_proto","componentDidMount","setState","onStartLoad","wasCached","img","current","complete","componentWillUnmount","cleanUpListeners","_this2","imageInCache","currentSrc","render","_convertProps","className","_convertProps$style","_convertProps$imgStyl","_convertProps$placeho","placeholderStyle","placeholderClassName","backgroundColor","durationFadeIn","Tag","itemProp","shouldReveal","shouldFadeIn","imageStyle","opacity","transition","bgColor","delayHideStyle","transitionDelay","imagePlaceholderStyle","placeholderImageProps","overflow","maxWidth","maxHeight","JSON","stringify","paddingBottom","aspectRatio","bottom","right","dangerouslySetInnerHTML","__html","divStyle","Component","defaultProps","fixedObject","shape","number","isRequired","string","srcWebp","fluidObject","requireFixedOrFluid","originalPropTypes","propName","componentName","_PropTypes$checkPropT","Error","checkPropTypes","oneOfType","arrayOf","bool","oneOf","_default"],"sourceRoot":""} \ No newline at end of file diff --git a/chunk-map.json b/chunk-map.json index 0c884d17b..5b4028ee3 100644 --- a/chunk-map.json +++ b/chunk-map.json @@ -1 +1 @@ -{"polyfill":["/polyfill-f1c9d2adeed69fbf3144.js"],"app":["/app-2825acd8c555263e0b03.js"],"component---src-pages-404-tsx":["/component---src-pages-404-tsx-104170120904e71ad973.js"],"component---src-pages-index-tsx":["/component---src-pages-index-tsx-f3cd6267e6fe4f91c637.js"],"component---src-templates-blog-post-tsx":["/component---src-templates-blog-post-tsx-0dd7fac3be4c0e15694c.js"],"component---src-templates-course-page-tsx":["/component---src-templates-course-page-tsx-8600bb4260367ddb119b.js"]} \ No newline at end of file +{"polyfill":["/polyfill-4db1c98e783bd0dcb2bb.js"],"app":["/app-2825acd8c555263e0b03.js"],"component---src-pages-404-tsx":["/component---src-pages-404-tsx-104170120904e71ad973.js"],"component---src-pages-index-tsx":["/component---src-pages-index-tsx-f3cd6267e6fe4f91c637.js"],"component---src-templates-blog-post-tsx":["/component---src-templates-blog-post-tsx-0dd7fac3be4c0e15694c.js"],"component---src-templates-course-page-tsx":["/component---src-templates-course-page-tsx-8600bb4260367ddb119b.js"]} \ No newline at end of file diff --git a/commons-68da696858ecdfa09cb4.js b/commons-68da696858ecdfa09cb4.js new file mode 100644 index 000000000..80ffb3315 --- /dev/null +++ b/commons-68da696858ecdfa09cb4.js @@ -0,0 +1,3 @@ +/*! For license information please see commons-68da696858ecdfa09cb4.js.LICENSE.txt */ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[351],{4672:function(t,e,n){var r=n(2489),o=n(7562),i=function(t){return o(t)[1]},a=function(t){return o(t)[0]},u={baseFontSize:"16px",baseLineHeight:1.5,rhythmUnit:"rem",defaultRhythmBorderWidth:"1px",defaultRhythmBorderStyle:"solid",roundToNearestHalfLine:!0,minLinePadding:"2px"},c=function(t,e){var n,o=r(e.baseFontSize),i=a(o(t,"px")),u=a(e.baseLineHeightInPx),c=a(o(e.minLinePadding,"px"));return(n=e.roundToNearestHalfLine?Math.ceil(2*i/u)/2:Math.ceil(i/u))*u-i<2*c&&(n+=e.roundToNearestHalfLine?.5:1),n},f=function(t){var e=r(t.baseFontSize);return function(n,r,o){null==n&&(n=1),null==r&&(r=t.baseFontSize),null==o&&(o=0);var u=n*a(t.baseLineHeightInPx)-o+"px",c=e(u,t.rhythmUnit,r);return"px"===i(c)&&(c=Math.floor(a(c))+i(c)),parseFloat(a(c).toFixed(5))+i(c)}};t.exports=function(t){var e=JSON.parse(JSON.stringify(u)),n=Object.assign({},e,t),o=r(n.baseFontSize);return i(n.baseLineHeight)?(a(o(n.baseFontSize,"px")),n.baseLineHeightInPx=o(n.baseLineHeight,"px")):n.baseLineHeightInPx=a(n.baseFontSize)*n.baseLineHeight+"px",{rhythm:f(n),establishBaseline:function(){return function(t){return r(t.baseFontSize),{fontSize:a(t.baseFontSize)/16*100+"%",lineHeight:t.baseLineHeight.toString()}}(n)},linesForFontSize:function(t){return c(t,n)},adjustFontSizeTo:function(t,e,o){return null==e&&(e="auto"),function(t,e,n,o){null==n&&(n=o.baseFontSize),"%"===i(t)&&(t=a(o.baseFontSize)*(a(t)/100)+"px");var u=r(o.baseFontSize);t=u(t,"px",n=u(n,"px"));var s=f(o);return"auto"===e&&(e=c(t,o)),{fontSize:u(t,o.rhythmUnit,n),lineHeight:s(e,n)}}(t,e,o,n)}}}},2489:function(t,e,n){var r=n(7562),o=function(t){return r(t)[0]};t.exports=function(t){return function(e,n,i,a){null==i&&(i=t),null==a&&(a=i);var u=function(t){return r(t)[1]}(e);if(u===n)return e;var c=o(e);if("px"!==u)if("em"===u)c=o(e)*o(i);else if("rem"===u)c=o(e)*o(t);else{if("ex"!==u)return e;c=o(e)*o(i)*2}var f=c;if("px"!==n)if("em"===n)f=c/o(a);else if("rem"===n)f=c/o(t);else{if("ex"!==n)return e;f=c/o(a)/2}return parseFloat(f.toFixed(5))+n}}},8495:function(t){"use strict";t.exports=function(t,e){if("string"!=typeof t)throw new TypeError("Expected a string");return e=void 0===e?"_":e,t.replace(/([a-z\d])([A-Z])/g,"$1"+e+"$2").replace(/([A-Z]+)([A-Z][a-z\d]+)/g,"$1"+e+"$2").toLowerCase()}},1342:function(t){function e(t){return!isNaN(parseFloat(t))&&isFinite(t)}t.exports=function(t,n,r){if(void 0===n&&(n=0),void 0===r&&(r=!1),"cool"===n?n=237:"slate"===n?n=122:"warm"===n&&(n=69),!e(n))throw new Error("Hue is not a number");if(!e(t))throw new Error("Lightness is not a number");t>100&&(t=100),t<0&&(t=0);var o=0;if(0!==n){o=19.92978+-.3651759*t+.001737214*Math.pow(t,2)}var i=0;return r?(i=t/100,t="100%,"):(i=(100-t)/100,t="0%,"),"hsla("+n+","+o+"%,"+t+i+")"}},4003:function(t){var e=Object.prototype.toString;t.exports=function(t){return"number"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Number]"==e.call(t)}},540:function(t,e,n){var r,o;r=n(4003),o={"minor second":16/15,"major second":9/8,"minor third":1.2,"major third":4/3,"diminished fourth":Math.sqrt(2),"perfect fifth":1.5,"minor sixth":1.6,golden:1.61803398875,phi:1.61803398875,"major sixth":5/3,"minor seventh":16/9,"major seventh":15/8,octave:2,"major tenth":2.5,"major eleventh":8/3,"major twelfth":3,"double octave":4},t.exports=function(t,e){var n;return null==t&&(t=0),null==e&&(e="golden"),n=r(e)?e:null!=o[e]?o[e]:o.golden,Math.pow(n,t)}},7562:function(t){t.exports=function(t,e){e||(e=[0,""]),t=String(t);var n=parseFloat(t,10);return e[0]=n,e[1]=t.match(/[\d.\-\+]*\s*(.*)/)[1]||"",e}},2161:function(t){var e="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(t,a){if(t===a)return!0;if(t&&a&&"object"==typeof t&&"object"==typeof a){if(t.constructor!==a.constructor)return!1;var u,c,f,s;if(Array.isArray(t)){if((u=t.length)!=a.length)return!1;for(c=u;0!=c--;)if(!i(t[c],a[c]))return!1;return!0}if(n&&t instanceof Map&&a instanceof Map){if(t.size!==a.size)return!1;for(s=t.entries();!(c=s.next()).done;)if(!a.has(c.value[0]))return!1;for(s=t.entries();!(c=s.next()).done;)if(!i(c.value[1],a.get(c.value[0])))return!1;return!0}if(r&&t instanceof Set&&a instanceof Set){if(t.size!==a.size)return!1;for(s=t.entries();!(c=s.next()).done;)if(!a.has(c.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(t)&&ArrayBuffer.isView(a)){if((u=t.length)!=a.length)return!1;for(c=u;0!=c--;)if(t[c]!==a[c])return!1;return!0}if(t.constructor===RegExp)return t.source===a.source&&t.flags===a.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===a.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===a.toString();if((u=(f=Object.keys(t)).length)!==Object.keys(a).length)return!1;for(c=u;0!=c--;)if(!Object.prototype.hasOwnProperty.call(a,f[c]))return!1;if(e&&t instanceof Element)return!1;for(c=u;0!=c--;)if(("_owner"!==f[c]&&"__v"!==f[c]&&"__o"!==f[c]||!t.$$typeof)&&!i(t[f[c]],a[f[c]]))return!1;return!0}return t!=t&&a!=a}t.exports=function(t,e){try{return i(t,e)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},2773:function(t,e,n){"use strict";var r,o=n(2784),i=(r=o)&&"object"==typeof r&&"default"in r?r.default:r;function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var u=!("undefined"==typeof window||!window.document||!window.document.createElement);t.exports=function(t,e,n){if("function"!=typeof t)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof e)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==n&&"function"!=typeof n)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(r){if("function"!=typeof r)throw new Error("Expected WrappedComponent to be a React component.");var c,f=[];function s(){c=t(f.map((function(t){return t.props}))),l.canUseDOM?e(c):n&&(c=n(c))}var l=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n,o.peek=function(){return c},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var t=c;return c=void 0,f=[],t};var a=o.prototype;return a.UNSAFE_componentWillMount=function(){f.push(this),s()},a.componentDidUpdate=function(){s()},a.componentWillUnmount=function(){var t=f.indexOf(this);f.splice(t,1),s()},a.render=function(){return i.createElement(r,this.props)},o}(o.PureComponent);return a(l,"displayName","SideEffect("+function(t){return t.displayName||t.name||"Component"}(r)+")"),a(l,"canUseDOM",u),l}}},7651:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.LARGER_DISPLAY_WIDTH="1600px",e.LARGE_DISPLAY_WIDTH="1280px",e.DEFAULT_WIDTH="980px",e.TABLET_WIDTH="768px",e.MOBILE_WIDTH="480px",e.LARGER_DISPLAY_MEDIA_QUERY="@media only screen and (max-width:1600px)",e.LARGE_DISPLAY_MEDIA_QUERY="@media only screen and (max-width:1280px)",e.DEFAULT_MEDIA_QUERY="@media only screen and (max-width:980px)",e.TABLET_MEDIA_QUERY="@media only screen and (max-width:768px)",e.MOBILE_MEDIA_QUERY="@media only screen and (max-width:480px)",e.MIN_LARGER_DISPLAY_MEDIA_QUERY="@media (min-width:1600px)",e.MIN_LARGE_DISPLAY_MEDIA_QUERY="@media (min-width:1280px)",e.MIN_DEFAULT_MEDIA_QUERY="@media (min-width:980px)",e.MIN_TABLET_MEDIA_QUERY="@media (min-width:768px)",e.MIN_MOBILE_MEDIA_QUERY="@media (min-width:480px)"},9438:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default="html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}"},1319:function(t,e,n){"use strict";var r,o=Object.assign||function(t){for(var e=1;e :last-child":{marginBottom:0},"blockquote cite":o({},r(e.baseFontSize),{color:e.bodyColor,fontWeight:e.bodyWeight}),"blockquote cite:before":{content:'"— "'},ul:{listStyle:"disc"},"ul,ol":{marginLeft:0}},u.MOBILE_MEDIA_QUERY,{"ul,ol":{marginLeft:f(1)},blockquote:{marginLeft:f(-3/4),marginRight:0,paddingLeft:f(9/16)}}),c(n,"h1,h2,h3,h4,h5,h6",{marginTop:f(2)}),c(n,"h4",{letterSpacing:"0.140625em",textTransform:"uppercase"}),c(n,"h6",{fontStyle:"italic"}),c(n,"a",{boxShadow:"0 1px 0 0 currentColor",color:"#007acc",textDecoration:"none"}),c(n,"a:hover,a:active",{boxShadow:"none"}),c(n,"mark,ins",{background:"#007acc",color:"white",padding:f(1/16)+" "+f(1/8),textDecoration:"none"}),n}};e.Z=f},2182:function(t,e,n){var r=n(308),o=n(4672),i=n(540),a=n(1342),u=n(6765),c=n(9756),f=n(537),s=n(5505),l=n(1049),p=n(6152),d=n(8537),h=n(8215),v=n(9438),b=n(8495),y=n(9259);function g(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var m=g(r),x=g(o),w=g(i),_=g(a),j=g(u),T=g(c),S=g(f),O=g(s),A=g(l),E=g(p),L=g(d),k=g(h),C=g(v),F=g(b),z=g(y);function I(){return(I=Object.assign||function(t){for(var e=1;e ol","li > ul"],{marginLeft:t.rhythm(1),marginBottom:"calc("+n+" / 2)",marginTop:"calc("+n+" / 2)"}),r=M(r,["blockquote *:last-child","li *:last-child","p *:last-child"],{marginBottom:0}),r=M(r,["li > p"],{marginBottom:"calc("+n+" / 2)"}),r=M(r,["code","kbd","pre","samp"],I({},t.adjustFontSizeTo("85%"))),(r=M(r,["abbr","acronym"],{borderBottom:"1px dotted "+_.default(50),cursor:"help"}))["abbr[title]"]={borderBottom:"1px dotted "+_.default(50),cursor:"help",textDecoration:"none"},r=M(r,["table"],I({},t.adjustFontSizeTo(e.baseFontSize),{borderCollapse:"collapse",width:"100%"})),r=M(r,["thead"],{textAlign:"left"}),r=M(r,["td,th"],{textAlign:"left",borderBottom:"1px solid "+_.default(88),fontFeatureSettings:'"tnum"',MozFontFeatureSettings:'"tnum"',msFontFeatureSettings:'"tnum"',WebkitFontFeatureSettings:'"tnum"',paddingLeft:t.rhythm(2/3),paddingRight:t.rhythm(2/3),paddingTop:t.rhythm(.5),paddingBottom:"calc("+t.rhythm(.5)+" - 1px)"}),r=M(r,"th:first-child,td:first-child",{paddingLeft:0}),r=M(r,"th:last-child,td:last-child",{paddingRight:0}),r=M(r,["h1","h2","h3","h4","h5","h6"],{color:e.headerColor,fontFamily:e.headerFontFamily.map(R).join(","),fontWeight:e.headerWeight,textRendering:"optimizeLegibility"});var i=t.scale(1),a=t.scale(.6),u=t.scale(.4),c=t.scale(0),f=t.scale(-.2),s=t.scale(-.3);return T.default([i,a,u,c,f,s],(function(t,n){r=j.default(r,"h"+(n+1)+".fontSize",t.fontSize),r=j.default(r,"h"+(n+1)+".lineHeight",e.headerLineHeight)})),E.default(e.plugins)&&(r=k.default(e.plugins,(function(n,r){return L.default(n,r(t,e,n))}),r)),e.overrideStyles&&A.default(e.overrideStyles)&&(r=L.default(r,e.overrideStyles(t,e,r))),e.overrideThemeStyles&&A.default(e.overrideThemeStyles)&&(r=L.default(r,e.overrideThemeStyles(t,e,r))),r}(n,e)},toString:function(){return D(0,e,this.toJSON())},injectStyles:function(){if("undefined"!=typeof document)if(document.getElementById("typography.js"))document.getElementById("typography.js").innerHTML=this.toString();else{var t=document.createElement("style");t.id="typography.js",t.innerHTML=this.toString();var e=document.head;e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t)}}})}},8977:function(t,e,n){"use strict";n.d(e,{Z:function(){return vt}});var r,o,i,a,u=n(2784),c=n(3980),f=n.n(c),s=n(2773),l=n.n(s),p=n(2161),d=n.n(p),h=n(308),v=n.n(h),b="bodyAttributes",y="htmlAttributes",g="titleAttributes",m={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},x=(Object.keys(m).map((function(t){return m[t]})),"charset"),w="cssText",_="href",j="http-equiv",T="innerHTML",S="itemprop",O="name",A="property",E="rel",L="src",k="target",C={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},F="defaultTitle",z="defer",I="encodeSpecialCharacters",M="onChangeClientState",P="titleTemplate",R=Object.keys(C).reduce((function(t,e){return t[C[e]]=e,t}),{}),B=[m.NOSCRIPT,m.SCRIPT,m.STYLE],D="data-react-helmet",N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},H=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n},Y=function(t){return!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])?String(t):String(t).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},q=function(t){var e=K(t,m.TITLE),n=K(t,P);if(n&&e)return n.replace(/%s/g,(function(){return Array.isArray(e)?e.join(""):e}));var r=K(t,F);return e||r||void 0},$=function(t){return K(t,M)||function(){}},Q=function(t,e){return e.filter((function(e){return void 0!==e[t]})).map((function(e){return e[t]})).reduce((function(t,e){return U({},t,e)}),{})},G=function(t,e){return e.filter((function(t){return void 0!==t[m.BASE]})).map((function(t){return t[m.BASE]})).reverse().reduce((function(e,n){if(!e.length)for(var r=Object.keys(n),o=0;o=0;n--){var r=t[n];if(r.hasOwnProperty(e))return r[e]}return null},V=(r=Date.now(),function(t){var e=Date.now();e-r>16?(r=e,t(e)):setTimeout((function(){V(t)}),0)}),J=function(t){return clearTimeout(t)},X="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||V:n.g.requestAnimationFrame||V,tt="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||J:n.g.cancelAnimationFrame||J,et=function(t){return console&&"function"==typeof console.warn&&console.warn(t)},nt=null,rt=function(t,e){var n=t.baseTag,r=t.bodyAttributes,o=t.htmlAttributes,i=t.linkTags,a=t.metaTags,u=t.noscriptTags,c=t.onChangeClientState,f=t.scriptTags,s=t.styleTags,l=t.title,p=t.titleAttributes;at(m.BODY,r),at(m.HTML,o),it(l,p);var d={baseTag:ut(m.BASE,n),linkTags:ut(m.LINK,i),metaTags:ut(m.META,a),noscriptTags:ut(m.NOSCRIPT,u),scriptTags:ut(m.SCRIPT,f),styleTags:ut(m.STYLE,s)},h={},v={};Object.keys(d).forEach((function(t){var e=d[t],n=e.newTags,r=e.oldTags;n.length&&(h[t]=n),r.length&&(v[t]=d[t].oldTags)})),e&&e(),c(t,h,v)},ot=function(t){return Array.isArray(t)?t.join(""):t},it=function(t,e){void 0!==t&&document.title!==t&&(document.title=ot(t)),at(m.TITLE,e)},at=function(t,e){var n=document.getElementsByTagName(t)[0];if(n){for(var r=n.getAttribute(D),o=r?r.split(","):[],i=[].concat(o),a=Object.keys(e),u=0;u=0;l--)n.removeAttribute(i[l]);o.length===i.length?n.removeAttribute(D):n.getAttribute(D)!==a.join(",")&&n.setAttribute(D,a.join(","))}},ut=function(t,e){var n=document.head||document.querySelector(m.HEAD),r=n.querySelectorAll(t+"["+D+"]"),o=Array.prototype.slice.call(r),i=[],a=void 0;return e&&e.length&&e.forEach((function(e){var n=document.createElement(t);for(var r in e)if(e.hasOwnProperty(r))if(r===T)n.innerHTML=e.innerHTML;else if(r===w)n.styleSheet?n.styleSheet.cssText=e.cssText:n.appendChild(document.createTextNode(e.cssText));else{var u=void 0===e[r]?"":e[r];n.setAttribute(r,u)}n.setAttribute(D,"true"),o.some((function(t,e){return a=e,n.isEqualNode(t)}))?o.splice(a,1):i.push(n)})),o.forEach((function(t){return t.parentNode.removeChild(t)})),i.forEach((function(t){return n.appendChild(t)})),{oldTags:o,newTags:i}},ct=function(t){return Object.keys(t).reduce((function(e,n){var r=void 0!==t[n]?n+'="'+t[n]+'"':""+n;return e?e+" "+r:r}),"")},ft=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(t).reduce((function(e,n){return e[C[n]||n]=t[n],e}),e)},st=function(t,e,n){switch(t){case m.TITLE:return{toComponent:function(){return t=e.title,n=e.titleAttributes,(r={key:t})[D]=!0,o=ft(n,r),[u.createElement(m.TITLE,o,t)];var t,n,r,o},toString:function(){return function(t,e,n,r){var o=ct(n),i=ot(e);return o?"<"+t+" "+D+'="true" '+o+">"+Y(i,r)+"":"<"+t+" "+D+'="true">'+Y(i,r)+""}(t,e.title,e.titleAttributes,n)}};case b:case y:return{toComponent:function(){return ft(e)},toString:function(){return ct(e)}};default:return{toComponent:function(){return function(t,e){return e.map((function(e,n){var r,o=((r={key:n})[D]=!0,r);return Object.keys(e).forEach((function(t){var n=C[t]||t;if(n===T||n===w){var r=e.innerHTML||e.cssText;o.dangerouslySetInnerHTML={__html:r}}else o[n]=e[t]})),u.createElement(t,o)}))}(t,e)},toString:function(){return function(t,e,n){return e.reduce((function(e,r){var o=Object.keys(r).filter((function(t){return!(t===T||t===w)})).reduce((function(t,e){var o=void 0===r[e]?e:e+'="'+Y(r[e],n)+'"';return t?t+" "+o:o}),""),i=r.innerHTML||r.cssText||"",a=-1===B.indexOf(t);return e+"<"+t+" "+D+'="true" '+o+(a?"/>":">"+i+"")}),"")}(t,e,n)}}}},lt=function(t){var e=t.baseTag,n=t.bodyAttributes,r=t.encode,o=t.htmlAttributes,i=t.linkTags,a=t.metaTags,u=t.noscriptTags,c=t.scriptTags,f=t.styleTags,s=t.title,l=void 0===s?"":s,p=t.titleAttributes;return{base:st(m.BASE,e,r),bodyAttributes:st(b,n,r),htmlAttributes:st(y,o,r),link:st(m.LINK,i,r),meta:st(m.META,a,r),noscript:st(m.NOSCRIPT,u,r),script:st(m.SCRIPT,c,r),style:st(m.STYLE,f,r),title:st(m.TITLE,{title:l,titleAttributes:p},r)}},pt=l()((function(t){return{baseTag:G([_,k],t),bodyAttributes:Q(b,t),defer:K(t,z),encode:K(t,I),htmlAttributes:Q(y,t),linkTags:Z(m.LINK,[E,_],t),metaTags:Z(m.META,[O,x,j,A,S],t),noscriptTags:Z(m.NOSCRIPT,[T],t),onChangeClientState:$(t),scriptTags:Z(m.SCRIPT,[L,T],t),styleTags:Z(m.STYLE,[w],t),title:q(t),titleAttributes:Q(g,t)}}),(function(t){nt&&tt(nt),t.defer?nt=X((function(){rt(t,(function(){nt=null}))})):(rt(t),nt=null)}),lt)((function(){return null})),dt=(o=pt,a=i=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.apply(this,arguments))}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.shouldComponentUpdate=function(t){return!d()(this.props,t)},e.prototype.mapNestedChildrenToProps=function(t,e){if(!e)return null;switch(t.type){case m.SCRIPT:case m.NOSCRIPT:return{innerHTML:e};case m.STYLE:return{cssText:e}}throw new Error("<"+t.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},e.prototype.flattenArrayTypeChildren=function(t){var e,n=t.child,r=t.arrayTypeChildren,o=t.newChildProps,i=t.nestedChildren;return U({},r,((e={})[n.type]=[].concat(r[n.type]||[],[U({},o,this.mapNestedChildrenToProps(n,i))]),e))},e.prototype.mapObjectTypeChildren=function(t){var e,n,r=t.child,o=t.newProps,i=t.newChildProps,a=t.nestedChildren;switch(r.type){case m.TITLE:return U({},o,((e={})[r.type]=a,e.titleAttributes=U({},i),e));case m.BODY:return U({},o,{bodyAttributes:U({},i)});case m.HTML:return U({},o,{htmlAttributes:U({},i)})}return U({},o,((n={})[r.type]=U({},i),n))},e.prototype.mapArrayTypeChildrenToProps=function(t,e){var n=U({},e);return Object.keys(t).forEach((function(e){var r;n=U({},n,((r={})[e]=t[e],r))})),n},e.prototype.warnOnInvalidChildren=function(t,e){return!0},e.prototype.mapChildrenToProps=function(t,e){var n=this,r={};return u.Children.forEach(t,(function(t){if(t&&t.props){var o=t.props,i=o.children,a=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(t).reduce((function(e,n){return e[R[n]||n]=t[n],e}),e)}(W(o,["children"]));switch(n.warnOnInvalidChildren(t,i),t.type){case m.LINK:case m.META:case m.NOSCRIPT:case m.SCRIPT:case m.STYLE:r=n.flattenArrayTypeChildren({child:t,arrayTypeChildren:r,newChildProps:a,nestedChildren:i});break;default:e=n.mapObjectTypeChildren({child:t,newProps:e,newChildProps:a,nestedChildren:i})}}})),e=this.mapArrayTypeChildrenToProps(r,e)},e.prototype.render=function(){var t=this.props,e=t.children,n=W(t,["children"]),r=U({},n);return e&&(r=this.mapChildrenToProps(e,r)),u.createElement(o,r)},H(e,null,[{key:"canUseDOM",set:function(t){o.canUseDOM=t}}]),e}(u.Component),i.propTypes={base:f().object,bodyAttributes:f().object,children:f().oneOfType([f().arrayOf(f().node),f().node]),defaultTitle:f().string,defer:f().bool,encodeSpecialCharacters:f().bool,htmlAttributes:f().object,link:f().arrayOf(f().object),meta:f().arrayOf(f().object),noscript:f().arrayOf(f().object),onChangeClientState:f().func,script:f().arrayOf(f().object),style:f().arrayOf(f().object),title:f().string,titleAttributes:f().object,titleTemplate:f().string},i.defaultProps={defer:!0,encodeSpecialCharacters:!0},i.peek=o.peek,i.rewind=function(){var t=o.rewind();return t||(t=lt({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),t},a);dt.renderStatic=dt.rewind;var ht=n(8447),vt=function(t){var e=t.description,n=t.lang,r=void 0===n?"en":n,o=t.meta,i=void 0===o?[]:o,a=t.title,c=t.facebookImage,f=t.twitterImage,s=(0,ht.useStaticQuery)("2841359383").site,l=e||s.siteMetadata.description,p=[];return c&&p.push({property:"og:image",content:c}),f&&p.push({property:"twitter:image",content:f}),u.createElement(dt,{htmlAttributes:{lang:r},title:a,titleTemplate:"%s | "+s.siteMetadata.title,meta:[{name:"description",content:l},{property:"og:title",content:a},{property:"og:description",content:l},{property:"og:type",content:"website"},{name:"twitter:card",content:"summary"},{name:"twitter:creator",content:s.siteMetadata.social.twitter},{name:"twitter:title",content:a},{name:"twitter:description",content:l}].concat(p).concat(i)})}},6376:function(t,e,n){"use strict";n.d(e,{bA:function(){return c},qZ:function(){return u}});var r=n(2182),o=n.n(r),i=n(1319);i.Z.overrideThemeStyles=function(){return{h1:{fontWeight:700,color:"#111"},h2:{color:"#111"},h3:{color:"#111"},h4:{color:"#111"},body:{color:"#222"},strong:{fontWeight:900,color:"#000",backgroundColor:"#ff9"},"a.gatsby-resp-image-link":{boxShadow:"none"}}},delete i.Z.googleFonts;var a=new(o())(i.Z);var u=a.rhythm,c=a.scale},9515:function(t,e,n){var r=n(8761)(n(7772),"DataView");t.exports=r},9612:function(t,e,n){var r=n(2118),o=n(6909),i=n(8138),a=n(4174),u=n(7942);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(i--,a):void 0,u&&o(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),e=Object(e);++rs))return!1;var p=c.get(t),d=c.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,b=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++h-1&&t%1==0&&t-1}},4769:function(t,e,n){var r=n(2218);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},2411:function(t,e,n){var r=n(9612),o=n(235),i=n(326);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},6417:function(t,e,n){var r=n(7937);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},6928:function(t,e,n){var r=n(7937);t.exports=function(t){return r(this,t).get(t)}},9493:function(t,e,n){var r=n(7937);t.exports=function(t){return r(this,t).has(t)}},4150:function(t,e,n){var r=n(7937);t.exports=function(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}},5179:function(t){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},3477:function(t){t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},7777:function(t,e,n){var r=n(733);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},9191:function(t,e,n){var r=n(8761)(Object,"create");t.exports=r},4248:function(t,e,n){var r=n(241)(Object.keys,Object);t.exports=r},2966:function(t){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},4146:function(t,e,n){t=n.nmd(t);var r=n(1242),o=e&&!e.nodeType&&e,i=o&&t&&!t.nodeType&&t,a=i&&i.exports===o&&r.process,u=function(){try{var t=i&&i.require&&i.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}();t.exports=u},7157:function(t){var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},241:function(t){t.exports=function(t,e){return function(n){return t(e(n))}}},3114:function(t,e,n){var r=n(9432),o=Math.max;t.exports=function(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,a=-1,u=o(i.length-e,0),c=Array(u);++a0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}},5243:function(t,e,n){var r=n(235);t.exports=function(){this.__data__=new r,this.size=0}},2858:function(t){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},4417:function(t){t.exports=function(t){return this.__data__.get(t)}},8605:function(t){t.exports=function(t){return this.__data__.has(t)}},1418:function(t,e,n){var r=n(235),o=n(326),i=n(6738);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!o||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(a)}return n.set(t,e),this.size=n.size,this}},4452:function(t,e,n){var r=n(7777),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,a=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,(function(t,n,r,o){e.push(r?o.replace(i,"$1"):n||t)})),e}));t.exports=a},3812:function(t,e,n){var r=n(4795);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-Infinity?"-0":e}},7035:function(t){var e=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return e.call(t)}catch(n){}try{return t+""}catch(n){}}return""}},6874:function(t){t.exports=function(t){return function(){return t}}},1225:function(t){t.exports=function(t,e){return t===e||t!=t&&e!=e}},9756:function(t,e,n){var r=n(2517),o=n(4303),i=n(9419),a=n(6152);t.exports=function(t,e){return(a(t)?r:o)(t,i(e))}},2579:function(t,e,n){var r=n(3324);t.exports=function(t,e,n){var o=null==t?void 0:r(t,e);return void 0===o?n:o}},5041:function(t,e,n){var r=n(187),o=n(1369);t.exports=function(t,e){return null!=t&&o(t,e,r)}},3059:function(t){t.exports=function(t){return t}},9631:function(t,e,n){var r=n(5183),o=n(5125),i=Object.prototype,a=i.hasOwnProperty,u=i.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return o(t)&&a.call(t,"callee")&&!u.call(t,"callee")};t.exports=c},6152:function(t){var e=Array.isArray;t.exports=e},7878:function(t,e,n){var r=n(1049),o=n(1158);t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},3746:function(t,e,n){var r=n(7878),o=n(5125);t.exports=function(t){return o(t)&&r(t)}},3226:function(t,e,n){t=n.nmd(t);var r=n(7772),o=n(6330),i=e&&!e.nodeType&&e,a=i&&t&&!t.nodeType&&t,u=a&&a.exports===i?r.Buffer:void 0,c=(u?u.isBuffer:void 0)||o;t.exports=c},1049:function(t,e,n){var r=n(3366),o=n(9259);t.exports=function(t){if(!o(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1158:function(t){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},537:function(t,e,n){var r=n(3366),o=n(5125);t.exports=function(t){return"number"==typeof t||o(t)&&"[object Number]"==r(t)}},9259:function(t){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},5125:function(t){t.exports=function(t){return null!=t&&"object"==typeof t}},7030:function(t,e,n){var r=n(3366),o=n(7353),i=n(5125),a=Function.prototype,u=Object.prototype,c=a.toString,f=u.hasOwnProperty,s=c.call(Object);t.exports=function(t){if(!i(t)||"[object Object]"!=r(t))return!1;var e=o(t);if(null===e)return!0;var n=f.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==s}},5505:function(t,e,n){var r=n(3366),o=n(6152),i=n(5125);t.exports=function(t){return"string"==typeof t||!o(t)&&i(t)&&"[object String]"==r(t)}},4795:function(t,e,n){var r=n(3366),o=n(5125);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},7598:function(t,e,n){var r=n(5522),o=n(7826),i=n(4146),a=i&&i.isTypedArray,u=a?o(a):r;t.exports=u},249:function(t,e,n){var r=n(1634),o=n(6411),i=n(7878);t.exports=function(t){return i(t)?r(t):o(t)}},4225:function(t,e,n){var r=n(1634),o=n(8390),i=n(7878);t.exports=function(t){return i(t)?r(t,!0):o(t)}},733:function(t,e,n){var r=n(6738);function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=t.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(o.Cache||r),n}o.Cache=r,t.exports=o},8537:function(t,e,n){var r=n(4565),o=n(7263)((function(t,e,n){r(t,e,n)}));t.exports=o},5798:function(t,e,n){var r=n(256),o=n(2952),i=n(1401),a=n(3812);t.exports=function(t){return i(t)?r(a(t)):o(t)}},8215:function(t,e,n){var r=n(1207),o=n(4303),i=n(8286),a=n(5877),u=n(6152);t.exports=function(t,e,n){var c=u(t)?r:a,f=arguments.length<3;return c(t,i(e,4),n,f,o)}},6765:function(t,e,n){var r=n(2857);t.exports=function(t,e,n){return null==t?t:r(t,e,n)}},981:function(t){t.exports=function(){return[]}},6330:function(t){t.exports=function(){return!1}},3329:function(t,e,n){var r=n(752),o=n(4225);t.exports=function(t){return r(t,o(t))}},6188:function(t,e,n){var r=n(1054);t.exports=function(t){return null==t?"":r(t)}}}]); +//# sourceMappingURL=commons-68da696858ecdfa09cb4.js.map \ No newline at end of file diff --git a/commons-789ecc3d12bd23c53b79.js.LICENSE.txt b/commons-68da696858ecdfa09cb4.js.LICENSE.txt similarity index 100% rename from commons-789ecc3d12bd23c53b79.js.LICENSE.txt rename to commons-68da696858ecdfa09cb4.js.LICENSE.txt diff --git a/commons-68da696858ecdfa09cb4.js.map b/commons-68da696858ecdfa09cb4.js.map new file mode 100644 index 000000000..885077e57 --- /dev/null +++ b/commons-68da696858ecdfa09cb4.js.map @@ -0,0 +1 @@ +{"version":3,"file":"commons-68da696858ecdfa09cb4.js","mappings":"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","sources":["webpack://website/../../node_modules/compass-vertical-rhythm/dist/index.js","webpack://website/../../node_modules/convert-css-length/dist/index.js","webpack://website/../../node_modules/decamelize/index.js","webpack://website/../../node_modules/gray-percentage/index.js","webpack://website/../../node_modules/lodash.isnumber/index.js","webpack://website/../../node_modules/modularscale/dist/index.js","webpack://website/../../node_modules/parse-unit/index.js","webpack://website/../../node_modules/react-fast-compare/index.js","webpack://website/../../node_modules/react-side-effect/lib/index.js","webpack://website/../../node_modules/typography-breakpoint-constants/dist/index.js","webpack://website/../../node_modules/typography-normalize/dist/index.js","webpack://website/../../node_modules/typography-theme-wordpress-2016/dist/index.js","webpack://website/../../node_modules/typography/dist/index.js","webpack://website/../../node_modules/react-helmet/es/Helmet.js","webpack://website/./src/components/seo.tsx","webpack://website/./src/utils/typography.ts","webpack://website/../../node_modules/lodash/_DataView.js","webpack://website/../../node_modules/lodash/_Hash.js","webpack://website/../../node_modules/lodash/_ListCache.js","webpack://website/../../node_modules/lodash/_Map.js","webpack://website/../../node_modules/lodash/_MapCache.js","webpack://website/../../node_modules/lodash/_Promise.js","webpack://website/../../node_modules/lodash/_Set.js","webpack://website/../../node_modules/lodash/_SetCache.js","webpack://website/../../node_modules/lodash/_Stack.js","webpack://website/../../node_modules/lodash/_Symbol.js","webpack://website/../../node_modules/lodash/_Uint8Array.js","webpack://website/../../node_modules/lodash/_WeakMap.js","webpack://website/../../node_modules/lodash/_apply.js","webpack://website/../../node_modules/lodash/_arrayEach.js","webpack://website/../../node_modules/lodash/_arrayFilter.js","webpack://website/../../node_modules/lodash/_arrayLikeKeys.js","webpack://website/../../node_modules/lodash/_arrayMap.js","webpack://website/../../node_modules/lodash/_arrayPush.js","webpack://website/../../node_modules/lodash/_arrayReduce.js","webpack://website/../../node_modules/lodash/_arraySome.js","webpack://website/../../node_modules/lodash/_assignMergeValue.js","webpack://website/../../node_modules/lodash/_assignValue.js","webpack://website/../../node_modules/lodash/_assocIndexOf.js","webpack://website/../../node_modules/lodash/_baseAssignValue.js","webpack://website/../../node_modules/lodash/_baseCreate.js","webpack://website/../../node_modules/lodash/_baseEach.js","webpack://website/../../node_modules/lodash/_baseFor.js","webpack://website/../../node_modules/lodash/_baseForOwn.js","webpack://website/../../node_modules/lodash/_baseGet.js","webpack://website/../../node_modules/lodash/_baseGetAllKeys.js","webpack://website/../../node_modules/lodash/_baseGetTag.js","webpack://website/../../node_modules/lodash/_baseHasIn.js","webpack://website/../../node_modules/lodash/_baseIsArguments.js","webpack://website/../../node_modules/lodash/_baseIsEqual.js","webpack://website/../../node_modules/lodash/_baseIsEqualDeep.js","webpack://website/../../node_modules/lodash/_baseIsMatch.js","webpack://website/../../node_modules/lodash/_baseIsNative.js","webpack://website/../../node_modules/lodash/_baseIsTypedArray.js","webpack://website/../../node_modules/lodash/_baseIteratee.js","webpack://website/../../node_modules/lodash/_baseKeys.js","webpack://website/../../node_modules/lodash/_baseKeysIn.js","webpack://website/../../node_modules/lodash/_baseMatches.js","webpack://website/../../node_modules/lodash/_baseMatchesProperty.js","webpack://website/../../node_modules/lodash/_baseMerge.js","webpack://website/../../node_modules/lodash/_baseMergeDeep.js","webpack://website/../../node_modules/lodash/_baseProperty.js","webpack://website/../../node_modules/lodash/_basePropertyDeep.js","webpack://website/../../node_modules/lodash/_baseReduce.js","webpack://website/../../node_modules/lodash/_baseRest.js","webpack://website/../../node_modules/lodash/_baseSet.js","webpack://website/../../node_modules/lodash/_baseSetToString.js","webpack://website/../../node_modules/lodash/_baseTimes.js","webpack://website/../../node_modules/lodash/_baseToString.js","webpack://website/../../node_modules/lodash/_baseUnary.js","webpack://website/../../node_modules/lodash/_cacheHas.js","webpack://website/../../node_modules/lodash/_castFunction.js","webpack://website/../../node_modules/lodash/_castPath.js","webpack://website/../../node_modules/lodash/_cloneArrayBuffer.js","webpack://website/../../node_modules/lodash/_cloneBuffer.js","webpack://website/../../node_modules/lodash/_cloneTypedArray.js","webpack://website/../../node_modules/lodash/_copyArray.js","webpack://website/../../node_modules/lodash/_copyObject.js","webpack://website/../../node_modules/lodash/_coreJsData.js","webpack://website/../../node_modules/lodash/_createAssigner.js","webpack://website/../../node_modules/lodash/_createBaseEach.js","webpack://website/../../node_modules/lodash/_createBaseFor.js","webpack://website/../../node_modules/lodash/_defineProperty.js","webpack://website/../../node_modules/lodash/_equalArrays.js","webpack://website/../../node_modules/lodash/_equalByTag.js","webpack://website/../../node_modules/lodash/_equalObjects.js","webpack://website/../../node_modules/lodash/_freeGlobal.js","webpack://website/../../node_modules/lodash/_getAllKeys.js","webpack://website/../../node_modules/lodash/_getMapData.js","webpack://website/../../node_modules/lodash/_getMatchData.js","webpack://website/../../node_modules/lodash/_getNative.js","webpack://website/../../node_modules/lodash/_getPrototype.js","webpack://website/../../node_modules/lodash/_getRawTag.js","webpack://website/../../node_modules/lodash/_getSymbols.js","webpack://website/../../node_modules/lodash/_getTag.js","webpack://website/../../node_modules/lodash/_getValue.js","webpack://website/../../node_modules/lodash/_hasPath.js","webpack://website/../../node_modules/lodash/_hashClear.js","webpack://website/../../node_modules/lodash/_hashDelete.js","webpack://website/../../node_modules/lodash/_hashGet.js","webpack://website/../../node_modules/lodash/_hashHas.js","webpack://website/../../node_modules/lodash/_hashSet.js","webpack://website/../../node_modules/lodash/_initCloneObject.js","webpack://website/../../node_modules/lodash/_isIndex.js","webpack://website/../../node_modules/lodash/_isIterateeCall.js","webpack://website/../../node_modules/lodash/_isKey.js","webpack://website/../../node_modules/lodash/_isKeyable.js","webpack://website/../../node_modules/lodash/_isMasked.js","webpack://website/../../node_modules/lodash/_isPrototype.js","webpack://website/../../node_modules/lodash/_isStrictComparable.js","webpack://website/../../node_modules/lodash/_listCacheClear.js","webpack://website/../../node_modules/lodash/_listCacheDelete.js","webpack://website/../../node_modules/lodash/_listCacheGet.js","webpack://website/../../node_modules/lodash/_listCacheHas.js","webpack://website/../../node_modules/lodash/_listCacheSet.js","webpack://website/../../node_modules/lodash/_mapCacheClear.js","webpack://website/../../node_modules/lodash/_mapCacheDelete.js","webpack://website/../../node_modules/lodash/_mapCacheGet.js","webpack://website/../../node_modules/lodash/_mapCacheHas.js","webpack://website/../../node_modules/lodash/_mapCacheSet.js","webpack://website/../../node_modules/lodash/_mapToArray.js","webpack://website/../../node_modules/lodash/_matchesStrictComparable.js","webpack://website/../../node_modules/lodash/_memoizeCapped.js","webpack://website/../../node_modules/lodash/_nativeCreate.js","webpack://website/../../node_modules/lodash/_nativeKeys.js","webpack://website/../../node_modules/lodash/_nativeKeysIn.js","webpack://website/../../node_modules/lodash/_nodeUtil.js","webpack://website/../../node_modules/lodash/_objectToString.js","webpack://website/../../node_modules/lodash/_overArg.js","webpack://website/../../node_modules/lodash/_overRest.js","webpack://website/../../node_modules/lodash/_root.js","webpack://website/../../node_modules/lodash/_safeGet.js","webpack://website/../../node_modules/lodash/_setCacheAdd.js","webpack://website/../../node_modules/lodash/_setCacheHas.js","webpack://website/../../node_modules/lodash/_setToArray.js","webpack://website/../../node_modules/lodash/_setToString.js","webpack://website/../../node_modules/lodash/_shortOut.js","webpack://website/../../node_modules/lodash/_stackClear.js","webpack://website/../../node_modules/lodash/_stackDelete.js","webpack://website/../../node_modules/lodash/_stackGet.js","webpack://website/../../node_modules/lodash/_stackHas.js","webpack://website/../../node_modules/lodash/_stackSet.js","webpack://website/../../node_modules/lodash/_stringToPath.js","webpack://website/../../node_modules/lodash/_toKey.js","webpack://website/../../node_modules/lodash/_toSource.js","webpack://website/../../node_modules/lodash/constant.js","webpack://website/../../node_modules/lodash/eq.js","webpack://website/../../node_modules/lodash/forEach.js","webpack://website/../../node_modules/lodash/get.js","webpack://website/../../node_modules/lodash/hasIn.js","webpack://website/../../node_modules/lodash/identity.js","webpack://website/../../node_modules/lodash/isArguments.js","webpack://website/../../node_modules/lodash/isArray.js","webpack://website/../../node_modules/lodash/isArrayLike.js","webpack://website/../../node_modules/lodash/isArrayLikeObject.js","webpack://website/../../node_modules/lodash/isBuffer.js","webpack://website/../../node_modules/lodash/isFunction.js","webpack://website/../../node_modules/lodash/isLength.js","webpack://website/../../node_modules/lodash/isNumber.js","webpack://website/../../node_modules/lodash/isObject.js","webpack://website/../../node_modules/lodash/isObjectLike.js","webpack://website/../../node_modules/lodash/isPlainObject.js","webpack://website/../../node_modules/lodash/isString.js","webpack://website/../../node_modules/lodash/isSymbol.js","webpack://website/../../node_modules/lodash/isTypedArray.js","webpack://website/../../node_modules/lodash/keys.js","webpack://website/../../node_modules/lodash/keysIn.js","webpack://website/../../node_modules/lodash/memoize.js","webpack://website/../../node_modules/lodash/merge.js","webpack://website/../../node_modules/lodash/property.js","webpack://website/../../node_modules/lodash/reduce.js","webpack://website/../../node_modules/lodash/set.js","webpack://website/../../node_modules/lodash/stubArray.js","webpack://website/../../node_modules/lodash/stubFalse.js","webpack://website/../../node_modules/lodash/toPlainObject.js","webpack://website/../../node_modules/lodash/toString.js"],"sourcesContent":["var e = require(\"convert-css-length\"),\n n = require(\"parse-unit\"),\n t = function t(e) {\n return n(e)[1];\n},\n i = function i(e) {\n return n(e)[0];\n},\n r = {\n baseFontSize: \"16px\",\n baseLineHeight: 1.5,\n rhythmUnit: \"rem\",\n defaultRhythmBorderWidth: \"1px\",\n defaultRhythmBorderStyle: \"solid\",\n roundToNearestHalfLine: !0,\n minLinePadding: \"2px\"\n},\n a = function a(n, t) {\n var r,\n a = e(t.baseFontSize),\n o = i(a(n, \"px\")),\n s = i(t.baseLineHeightInPx),\n u = i(a(t.minLinePadding, \"px\"));\n return (r = t.roundToNearestHalfLine ? Math.ceil(2 * o / s) / 2 : Math.ceil(o / s)) * s - o < 2 * u && (r += t.roundToNearestHalfLine ? .5 : 1), r;\n},\n o = function o(n) {\n var r = e(n.baseFontSize);\n return function (e, a, o) {\n null == e && (e = 1), null == a && (a = n.baseFontSize), null == o && (o = 0);\n var s = e * i(n.baseLineHeightInPx) - o + \"px\",\n u = r(s, n.rhythmUnit, a);\n return \"px\" === t(u) && (u = Math.floor(i(u)) + t(u)), parseFloat(i(u).toFixed(5)) + t(u);\n };\n};\n\nmodule.exports = function (n) {\n var s = JSON.parse(JSON.stringify(r)),\n u = Object.assign({}, s, n),\n h = e(u.baseFontSize);\n\n if (t(u.baseLineHeight)) {\n i(h(u.baseFontSize, \"px\"));\n u.baseLineHeightInPx = h(u.baseLineHeight, \"px\");\n } else u.baseLineHeightInPx = i(u.baseFontSize) * u.baseLineHeight + \"px\";\n\n return {\n rhythm: o(u),\n establishBaseline: function establishBaseline() {\n return function (n) {\n e(n.baseFontSize);\n return {\n fontSize: i(n.baseFontSize) / 16 * 100 + \"%\",\n lineHeight: n.baseLineHeight.toString()\n };\n }(u);\n },\n linesForFontSize: function linesForFontSize(e) {\n return a(e, u);\n },\n adjustFontSizeTo: function adjustFontSizeTo(n, r, s) {\n return null == r && (r = \"auto\"), function (n, r, s, u) {\n null == s && (s = u.baseFontSize), \"%\" === t(n) && (n = i(u.baseFontSize) * (i(n) / 100) + \"px\");\n var h = e(u.baseFontSize);\n n = h(n, \"px\", s = h(s, \"px\"));\n var l = o(u);\n return \"auto\" === r && (r = a(n, u)), {\n fontSize: h(n, u.rhythmUnit, s),\n lineHeight: l(r, s)\n };\n }(n, r, s, u);\n }\n };\n};","var e = require(\"parse-unit\"),\n r = function r(_r) {\n return e(_r)[0];\n};\n\nmodule.exports = function (n) {\n return null == n && (n = n), function (u, i, t, f) {\n null == t && (t = n), null == f && (f = t);\n\n var l = function (r) {\n return e(r)[1];\n }(u);\n\n if (l === i) return u;\n var o = r(u);\n if (\"px\" !== l) if (\"em\" === l) o = r(u) * r(t);else if (\"rem\" === l) o = r(u) * r(n);else {\n if (\"ex\" !== l) return u;\n o = r(u) * r(t) * 2;\n }\n var a = o;\n if (\"px\" !== i) if (\"em\" === i) a = o / r(f);else if (\"rem\" === i) a = o / r(n);else {\n if (\"ex\" !== i) return u;\n a = o / r(f) / 2;\n }\n return parseFloat(a.toFixed(5)) + i;\n };\n};","'use strict';\n\nmodule.exports = function (str, sep) {\n if (typeof str !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n sep = typeof sep === 'undefined' ? '_' : sep;\n return str.replace(/([a-z\\d])([A-Z])/g, '$1' + sep + '$2').replace(/([A-Z]+)([A-Z][a-z\\d]+)/g, '$1' + sep + '$2').toLowerCase();\n};","function isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nmodule.exports = function (lightness, hue, darkBackground) {\n if (typeof hue === \"undefined\") {\n hue = 0;\n }\n\n if (typeof darkBackground === \"undefined\") {\n darkBackground = false;\n } // Convert named hues into numeric lightness value.\n\n\n if (hue === \"cool\") {\n hue = 237;\n } else if (hue === \"slate\") {\n hue = 122;\n } else if (hue === \"warm\") {\n hue = 69;\n }\n\n if (!isNumeric(hue)) {\n throw new Error(\"Hue is not a number\");\n }\n\n if (!isNumeric(lightness)) {\n throw new Error(\"Lightness is not a number\");\n }\n\n if (lightness > 100) {\n lightness = 100;\n }\n\n if (lightness < 0) {\n lightness = 0;\n }\n\n var saturation = 0;\n\n if (hue !== 0) {\n var a = 19.92978;\n var b = -0.3651759;\n var c = 0.001737214;\n saturation = a + b * lightness + c * Math.pow(lightness, 2);\n }\n\n var opacity = 0;\n\n if (darkBackground) {\n opacity = lightness / 100;\n lightness = '100%,';\n } else {\n opacity = (100 - lightness) / 100;\n lightness = '0%,';\n }\n\n return \"hsla(\" + hue + \",\" + saturation + \"%,\" + lightness + opacity + \")\";\n};","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar objectToString = objectProto.toString;\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 */\n\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\n * as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n\n\nfunction isNumber(value) {\n return typeof value == 'number' || isObjectLike(value) && objectToString.call(value) == numberTag;\n}\n\nmodule.exports = isNumber;","// Generated by CoffeeScript 1.9.1\nvar isNumber, ratios;\nisNumber = require('lodash.isnumber');\nratios = {\n \"minor second\": 16 / 15,\n \"major second\": 9 / 8,\n \"minor third\": 6 / 5,\n \"major third\": 4 / 3,\n \"diminished fourth\": Math.sqrt(2),\n \"perfect fifth\": 3 / 2,\n \"minor sixth\": 8 / 5,\n \"golden\": 1.61803398875,\n \"phi\": 1.61803398875,\n \"major sixth\": 5 / 3,\n \"minor seventh\": 16 / 9,\n \"major seventh\": 15 / 8,\n \"octave\": 2,\n \"major tenth\": 5 / 2,\n \"major eleventh\": 8 / 3,\n \"major twelfth\": 3,\n \"double octave\": 4\n};\n\nmodule.exports = function (value, ratio) {\n var r;\n\n if (value == null) {\n value = 0;\n }\n\n if (ratio == null) {\n ratio = \"golden\";\n }\n\n if (isNumber(ratio)) {\n r = ratio;\n } else if (ratios[ratio] != null) {\n r = ratios[ratio];\n } else {\n r = ratios['golden'];\n }\n\n return Math.pow(r, value);\n};","module.exports = function parseUnit(str, out) {\n if (!out) out = [0, ''];\n str = String(str);\n var num = parseFloat(str, 10);\n out[0] = num;\n out[1] = str.match(/[\\d.\\-\\+]*\\s*(.*)/)[1] || '';\n return out;\n};","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; // Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n var length, i, keys;\n\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!equal(a[i], b[i])) return false;\n }\n\n return true;\n } // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n\n\n var it;\n\n if (hasMap && a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n }\n\n return true;\n }\n\n if (hasSet && a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n return true;\n } // END: Modifications\n\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n } // END: fast-deep-equal\n // START: react-fast-compare\n // custom handling for DOM elements\n\n\n if (hasElementType && a instanceof Element) return false; // custom handling for React/Preact\n\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n continue;\n } // all other properties should be traversed as usual\n\n\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n } // END: react-fast-compare\n // START: fast-deep-equal\n\n\n return true;\n }\n\n return a !== a && b !== b;\n} // end fast-deep-equal\n\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if ((error.message || '').match(/stack|recursion/i)) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n } // some other error. we should definitely know about these\n\n\n throw error;\n }\n};","'use strict';\n\nfunction _interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nvar React = require('react');\n\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n } // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n\n\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LARGER_DISPLAY_WIDTH = exports.LARGER_DISPLAY_WIDTH = \"1600px\";\nvar LARGE_DISPLAY_WIDTH = exports.LARGE_DISPLAY_WIDTH = \"1280px\";\nvar DEFAULT_WIDTH = exports.DEFAULT_WIDTH = \"980px\";\nvar TABLET_WIDTH = exports.TABLET_WIDTH = \"768px\";\nvar MOBILE_WIDTH = exports.MOBILE_WIDTH = \"480px\";\nvar LARGER_DISPLAY_MEDIA_QUERY = exports.LARGER_DISPLAY_MEDIA_QUERY = \"@media only screen and (max-width:1600px)\";\nvar LARGE_DISPLAY_MEDIA_QUERY = exports.LARGE_DISPLAY_MEDIA_QUERY = \"@media only screen and (max-width:1280px)\";\nvar DEFAULT_MEDIA_QUERY = exports.DEFAULT_MEDIA_QUERY = \"@media only screen and (max-width:980px)\";\nvar TABLET_MEDIA_QUERY = exports.TABLET_MEDIA_QUERY = \"@media only screen and (max-width:768px)\";\nvar MOBILE_MEDIA_QUERY = exports.MOBILE_MEDIA_QUERY = \"@media only screen and (max-width:480px)\";\nvar MIN_LARGER_DISPLAY_MEDIA_QUERY = exports.MIN_LARGER_DISPLAY_MEDIA_QUERY = \"@media (min-width:1600px)\";\nvar MIN_LARGE_DISPLAY_MEDIA_QUERY = exports.MIN_LARGE_DISPLAY_MEDIA_QUERY = \"@media (min-width:1280px)\";\nvar MIN_DEFAULT_MEDIA_QUERY = exports.MIN_DEFAULT_MEDIA_QUERY = \"@media (min-width:980px)\";\nvar MIN_TABLET_MEDIA_QUERY = exports.MIN_TABLET_MEDIA_QUERY = \"@media (min-width:768px)\";\nvar MIN_MOBILE_MEDIA_QUERY = exports.MIN_MOBILE_MEDIA_QUERY = \"@media (min-width:480px)\";","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* eslint-disable */\n\n/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */\n\nexports.default = \"html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}\";","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _grayPercentage = require(\"gray-percentage\");\n\nvar _grayPercentage2 = _interopRequireDefault(_grayPercentage);\n\nvar _typographyBreakpointConstants = require(\"typography-breakpoint-constants\");\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nvar theme = {\n title: \"Wordpress Theme 2016\",\n baseFontSize: \"16px\",\n baseLineHeight: 1.75,\n scaleRatio: 5 / 2,\n googleFonts: [{\n name: \"Montserrat\",\n styles: [\"700\"]\n }, {\n name: \"Merriweather\",\n styles: [\"400\", \"400i\", \"700\", \"700i\", \"900\", \"900i\"]\n }],\n headerFontFamily: [\"Merriweather\", \"Georgia\", \"serif\"],\n bodyFontFamily: [\"Merriweather\", \"Georgia\", \"serif\"],\n bodyColor: \"hsla(0,0%,0%,0.9)\",\n headerWeight: 900,\n bodyWeight: 400,\n boldWeight: 700,\n overrideStyles: function overrideStyles(_ref, options) {\n var _ref2;\n\n var adjustFontSizeTo = _ref.adjustFontSizeTo,\n scale = _ref.scale,\n rhythm = _ref.rhythm;\n return _ref2 = {\n h1: {\n fontFamily: [\"Montserrat\", \"sans-serif\"].join(\",\")\n },\n blockquote: _extends({}, scale(1 / 5), {\n color: (0, _grayPercentage2.default)(41),\n fontStyle: \"italic\",\n paddingLeft: rhythm(13 / 16),\n marginLeft: rhythm(-1),\n borderLeft: rhythm(3 / 16) + \" solid \" + (0, _grayPercentage2.default)(10)\n }),\n \"blockquote > :last-child\": {\n marginBottom: 0\n },\n \"blockquote cite\": _extends({}, adjustFontSizeTo(options.baseFontSize), {\n color: options.bodyColor,\n fontWeight: options.bodyWeight\n }),\n \"blockquote cite:before\": {\n content: '\"— \"'\n },\n ul: {\n listStyle: \"disc\"\n },\n \"ul,ol\": {\n marginLeft: 0\n }\n }, _defineProperty(_ref2, _typographyBreakpointConstants.MOBILE_MEDIA_QUERY, {\n \"ul,ol\": {\n marginLeft: rhythm(1)\n },\n blockquote: {\n marginLeft: rhythm(-3 / 4),\n marginRight: 0,\n paddingLeft: rhythm(9 / 16)\n }\n }), _defineProperty(_ref2, \"h1,h2,h3,h4,h5,h6\", {\n marginTop: rhythm(2)\n }), _defineProperty(_ref2, \"h4\", {\n letterSpacing: \"0.140625em\",\n textTransform: \"uppercase\"\n }), _defineProperty(_ref2, \"h6\", {\n fontStyle: \"italic\"\n }), _defineProperty(_ref2, \"a\", {\n boxShadow: \"0 1px 0 0 currentColor\",\n color: \"#007acc\",\n textDecoration: \"none\"\n }), _defineProperty(_ref2, \"a:hover,a:active\", {\n boxShadow: \"none\"\n }), _defineProperty(_ref2, \"mark,ins\", {\n background: \"#007acc\",\n color: \"white\",\n padding: rhythm(1 / 16) + \" \" + rhythm(1 / 8),\n textDecoration: \"none\"\n }), _ref2;\n }\n};\nexports.default = theme;","var e = require(\"object-assign\"),\n t = require(\"compass-vertical-rhythm\"),\n i = require(\"modularscale\"),\n o = require(\"gray-percentage\"),\n r = require(\"lodash/set\"),\n n = require(\"lodash/forEach\"),\n a = require(\"lodash/isNumber\"),\n l = require(\"lodash/isString\"),\n d = require(\"lodash/isFunction\"),\n u = require(\"lodash/isArray\"),\n s = require(\"lodash/merge\"),\n h = require(\"lodash/reduce\"),\n g = require(\"typography-normalize\"),\n c = require(\"decamelize\"),\n f = require(\"lodash/isObject\");\n\nfunction m(e) {\n return e && \"object\" == typeof e && \"default\" in e ? e : {\n default: e\n };\n}\n\nvar p = m(e),\n y = m(t),\n b = m(i),\n S = m(o),\n F = m(r),\n v = m(n),\n B = m(a),\n k = m(l),\n x = m(d),\n z = m(u),\n q = m(s),\n j = m(h),\n L = m(g),\n W = m(c),\n T = m(f);\n\nfunction M() {\n return (M = Object.assign || function (e) {\n for (var t = 1; t < arguments.length; t++) {\n var i = arguments[t];\n\n for (var o in i) {\n Object.prototype.hasOwnProperty.call(i, o) && (e[o] = i[o]);\n }\n }\n\n return e;\n }).apply(this, arguments);\n}\n\nvar C = function C(e, t, i) {\n var o;\n return void 0 === e && (e = {}), o = z.default(t) ? t : [t], v.default(o, function (t) {\n v.default(i, function (i, o) {\n F.default(e, t + \".\" + o, i);\n });\n }), e;\n},\n O = [\"inherit\", \"default\", \"serif\", \"sans-serif\", \"monospace\", \"fantasy\", \"cursive\", \"-apple-system\"],\n R = function R(e) {\n return -1 !== O.indexOf(e) ? e : \"'\" + e + \"'\";\n},\n H = function e(t) {\n return j.default(t, function (t, i, o) {\n return t += o + \"{\", v.default(i, function (i, o) {\n if (T.default(i)) {\n var r = {};\n r[o] = i, t += e(r);\n } else {\n var n = W.default(o, \"-\") + \":\" + i + \";\";\n [\"Webkit\", \"ms\", \"Moz\", \"O\"].forEach(function (e) {\n o.slice(0, e.length) === e && (n = \"-\" + n);\n }), t += n;\n }\n }), t += \"}\";\n }, \"\");\n},\n N = function N(e, t, i) {\n var o = H(i);\n return t.includeNormalize && (o = \"\" + L.default + o), o;\n};\n\nmodule.exports = function (e) {\n var t = p.default({}, {\n baseFontSize: \"16px\",\n baseLineHeight: 1.45,\n headerLineHeight: 1.1,\n scaleRatio: 2,\n googleFonts: [],\n headerFontFamily: [\"-apple-system\", \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"sans-serif\"],\n bodyFontFamily: [\"georgia\", \"serif\"],\n headerColor: \"inherit\",\n bodyColor: \"hsla(0,0%,0%,0.8)\",\n headerWeight: \"bold\",\n bodyWeight: \"normal\",\n boldWeight: \"bold\",\n includeNormalize: !0,\n blockMarginBottom: 1\n }, e),\n i = y.default(t);\n return i.scale = function (e) {\n var o = parseInt(t.baseFontSize, 10),\n r = b.default(e, t.scaleRatio) * o + \"px\";\n return i.adjustFontSizeTo(r);\n }, M({\n options: t\n }, i, {\n createStyles: function createStyles() {\n return this.toString();\n },\n toJSON: function toJSON() {\n return function (e, t) {\n var i,\n o = {},\n r = e.establishBaseline();\n o = C(o, \"html\", {\n font: r.fontSize + \"/\" + r.lineHeight + \" \" + t.bodyFontFamily.map(R).join(\",\"),\n boxSizing: \"border-box\",\n overflowY: \"scroll\"\n }), o = C(o, [\"*\", \"*:before\", \"*:after\"], {\n boxSizing: \"inherit\"\n }), o = C(o, \"body\", {\n color: t.bodyColor,\n fontFamily: t.bodyFontFamily.map(R).join(\",\"),\n fontWeight: t.bodyWeight,\n wordWrap: \"break-word\",\n fontKerning: \"normal\",\n MozFontFeatureSettings: '\"kern\", \"liga\", \"clig\", \"calt\"',\n msFontFeatureSettings: '\"kern\", \"liga\", \"clig\", \"calt\"',\n WebkitFontFeatureSettings: '\"kern\", \"liga\", \"clig\", \"calt\"',\n fontFeatureSettings: '\"kern\", \"liga\", \"clig\", \"calt\"'\n }), o = C(o, \"img\", {\n maxWidth: \"100%\"\n }), i = B.default(t.blockMarginBottom) ? e.rhythm(t.blockMarginBottom) : k.default(t.blockMarginBottom) ? t.blockMarginBottom : e.rhythm(1), o = C(o, [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hgroup\", \"ul\", \"ol\", \"dl\", \"dd\", \"p\", \"figure\", \"pre\", \"table\", \"fieldset\", \"blockquote\", \"form\", \"noscript\", \"iframe\", \"img\", \"hr\", \"address\"], {\n marginLeft: 0,\n marginRight: 0,\n marginTop: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n marginBottom: i\n }), o = C(o, \"blockquote\", {\n marginRight: e.rhythm(1),\n marginBottom: i,\n marginLeft: e.rhythm(1)\n }), o = C(o, [\"b\", \"strong\", \"dt\", \"th\"], {\n fontWeight: t.boldWeight\n }), o = C(o, \"hr\", {\n background: S.default(80),\n border: \"none\",\n height: \"1px\",\n marginBottom: \"calc(\" + i + \" - 1px)\"\n }), o = C(o, [\"ol\", \"ul\"], {\n listStylePosition: \"outside\",\n listStyleImage: \"none\",\n marginLeft: e.rhythm(1)\n }), o = C(o, \"li\", {\n marginBottom: \"calc(\" + i + \" / 2)\"\n }), o = C(o, [\"ol li\", \"ul li\"], {\n paddingLeft: 0\n }), o = C(o, [\"li > ol\", \"li > ul\"], {\n marginLeft: e.rhythm(1),\n marginBottom: \"calc(\" + i + \" / 2)\",\n marginTop: \"calc(\" + i + \" / 2)\"\n }), o = C(o, [\"blockquote *:last-child\", \"li *:last-child\", \"p *:last-child\"], {\n marginBottom: 0\n }), o = C(o, [\"li > p\"], {\n marginBottom: \"calc(\" + i + \" / 2)\"\n }), o = C(o, [\"code\", \"kbd\", \"pre\", \"samp\"], M({}, e.adjustFontSizeTo(\"85%\"))), (o = C(o, [\"abbr\", \"acronym\"], {\n borderBottom: \"1px dotted \" + S.default(50),\n cursor: \"help\"\n }))[\"abbr[title]\"] = {\n borderBottom: \"1px dotted \" + S.default(50),\n cursor: \"help\",\n textDecoration: \"none\"\n }, o = C(o, [\"table\"], M({}, e.adjustFontSizeTo(t.baseFontSize), {\n borderCollapse: \"collapse\",\n width: \"100%\"\n })), o = C(o, [\"thead\"], {\n textAlign: \"left\"\n }), o = C(o, [\"td,th\"], {\n textAlign: \"left\",\n borderBottom: \"1px solid \" + S.default(88),\n fontFeatureSettings: '\"tnum\"',\n MozFontFeatureSettings: '\"tnum\"',\n msFontFeatureSettings: '\"tnum\"',\n WebkitFontFeatureSettings: '\"tnum\"',\n paddingLeft: e.rhythm(2 / 3),\n paddingRight: e.rhythm(2 / 3),\n paddingTop: e.rhythm(.5),\n paddingBottom: \"calc(\" + e.rhythm(.5) + \" - 1px)\"\n }), o = C(o, \"th:first-child,td:first-child\", {\n paddingLeft: 0\n }), o = C(o, \"th:last-child,td:last-child\", {\n paddingRight: 0\n }), o = C(o, [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"], {\n color: t.headerColor,\n fontFamily: t.headerFontFamily.map(R).join(\",\"),\n fontWeight: t.headerWeight,\n textRendering: \"optimizeLegibility\"\n });\n var n = e.scale(1),\n a = e.scale(.6),\n l = e.scale(.4),\n d = e.scale(0),\n u = e.scale(-.2),\n s = e.scale(-.3);\n return v.default([n, a, l, d, u, s], function (e, i) {\n o = F.default(o, \"h\" + (i + 1) + \".fontSize\", e.fontSize), o = F.default(o, \"h\" + (i + 1) + \".lineHeight\", t.headerLineHeight);\n }), z.default(t.plugins) && (o = j.default(t.plugins, function (i, o) {\n return q.default(i, o(e, t, i));\n }, o)), t.overrideStyles && x.default(t.overrideStyles) && (o = q.default(o, t.overrideStyles(e, t, o))), t.overrideThemeStyles && x.default(t.overrideThemeStyles) && (o = q.default(o, t.overrideThemeStyles(e, t, o))), o;\n }(i, t);\n },\n toString: function toString() {\n return N(0, t, this.toJSON());\n },\n injectStyles: function injectStyles() {\n if (\"undefined\" != typeof document) if (document.getElementById(\"typography.js\")) document.getElementById(\"typography.js\").innerHTML = this.toString();else {\n var e = document.createElement(\"style\");\n e.id = \"typography.js\", e.innerHTML = this.toString();\n var t = document.head;\n t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e);\n }\n }\n });\n};","import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase(); // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n } // Special case for innerHTML which doesn't work lowercased\n\n\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n }); // Update seen tags with tags from this instance\n\n var keys = Object.keys(instanceSeenTags);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n updateTitle(title, titleAttributes);\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n var addedTags = {};\n var removedTags = {};\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n cb && cb();\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\"); // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps; // assigning into an array to define toString function on it\n\n\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = {\n __html: content\n };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, {\n title: title,\n titleAttributes: titleAttributes\n }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``} ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \" console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\nexport default HelmetExport;\nexport { HelmetExport as Helmet };","/**\n * SEO component that queries for data with\n * Gatsby's useStaticQuery React hook\n *\n * See: https://www.gatsbyjs.org/docs/use-static-query/\n */\n\nimport * as React from 'react';\nimport { Helmet } from 'react-helmet';\nimport { useStaticQuery, graphql } from 'gatsby';\n\ninterface ISEOProps {\n description?: string;\n lang?: string;\n meta?: { name: string; content: string }[];\n title: string;\n facebookImage?: string;\n twitterImage?: string;\n}\n\nconst SEO: React.FunctionComponent = ({\n description,\n lang = 'en',\n meta = [],\n title,\n facebookImage,\n twitterImage\n}) => {\n const { site } = useStaticQuery(\n graphql`\n query {\n site {\n siteMetadata {\n title\n description\n social {\n twitter\n }\n }\n }\n }\n `,\n );\n\n const metaDescription =\n description || site.siteMetadata.description;\n\n const imageTags: React.DetailedHTMLProps<\n React.MetaHTMLAttributes,\n HTMLMetaElement\n >[] = [];\n if (facebookImage) imageTags.push({\n property: `og:image`,\n content: facebookImage,\n })\n if (twitterImage) imageTags.push({\n property: `twitter:image`,\n content: twitterImage,\n })\n\n return (\n \n );\n};\n\nexport default SEO;\n","import Typography from 'typography';\nimport Wordpress2016 from 'typography-theme-wordpress-2016';\n\nWordpress2016.overrideThemeStyles = () => {\n return {\n h1: {\n fontWeight: 700,\n color: '#111'\n },\n h2: { color: '#111'},\n h3: { color: '#111'},\n h4: { color: '#111'},\n body: {\n color: '#222'\n },\n strong: {\n fontWeight: 900,\n color: '#000',\n backgroundColor: '#ff9'\n },\n 'a.gatsby-resp-image-link': {\n boxShadow: `none`,\n },\n };\n};\n\ndelete Wordpress2016.googleFonts;\n\nconst typography = new Typography(Wordpress2016);\n\n// Hot reload typography in development.\n// eslint-disable-next-line\nif (process.env.NODE_ENV !== `production`) {\n typography.injectStyles();\n}\n\nexport default typography;\nexport const rhythm = typography.rhythm;\nexport const scale = typography.scale;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var arrayReduce = require('./_arrayReduce'),\n baseEach = require('./_baseEach'),\n baseIteratee = require('./_baseIteratee'),\n baseReduce = require('./_baseReduce'),\n isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n"],"names":["e","n","t","i","r","baseFontSize","baseLineHeight","rhythmUnit","defaultRhythmBorderWidth","defaultRhythmBorderStyle","roundToNearestHalfLine","minLinePadding","a","o","s","baseLineHeightInPx","u","Math","ceil","floor","parseFloat","toFixed","module","exports","JSON","parse","stringify","Object","assign","h","rhythm","establishBaseline","fontSize","lineHeight","toString","linesForFontSize","adjustFontSizeTo","l","_r","f","str","sep","TypeError","replace","toLowerCase","isNumeric","isNaN","isFinite","lightness","hue","darkBackground","Error","saturation","pow","opacity","objectToString","prototype","value","isObjectLike","call","isNumber","ratios","sqrt","ratio","out","String","num","match","hasElementType","Element","hasMap","Map","hasSet","Set","hasArrayBuffer","ArrayBuffer","isView","equal","b","constructor","length","keys","it","Array","isArray","size","entries","next","done","has","get","RegExp","source","flags","valueOf","hasOwnProperty","$$typeof","error","message","console","warn","ex","React","React__default","_defineProperty","obj","key","defineProperty","enumerable","configurable","writable","canUseDOM","window","document","createElement","reducePropsToState","handleStateChangeOnClient","mapStateOnServer","WrappedComponent","state","mountedInstances","emitChange","map","instance","props","SideEffect","_PureComponent","subClass","superClass","apply","this","arguments","create","__proto__","peek","rewind","recordedState","undefined","_proto","UNSAFE_componentWillMount","push","componentDidUpdate","componentWillUnmount","index","indexOf","splice","render","PureComponent","displayName","name","getDisplayName","LARGER_DISPLAY_WIDTH","LARGE_DISPLAY_WIDTH","DEFAULT_WIDTH","TABLET_WIDTH","MOBILE_WIDTH","LARGER_DISPLAY_MEDIA_QUERY","LARGE_DISPLAY_MEDIA_QUERY","DEFAULT_MEDIA_QUERY","TABLET_MEDIA_QUERY","MOBILE_MEDIA_QUERY","MIN_LARGER_DISPLAY_MEDIA_QUERY","MIN_LARGE_DISPLAY_MEDIA_QUERY","MIN_DEFAULT_MEDIA_QUERY","MIN_TABLET_MEDIA_QUERY","MIN_MOBILE_MEDIA_QUERY","_extends","target","_grayPercentage","_grayPercentage2","__esModule","default","_typographyBreakpointConstants","theme","title","scaleRatio","googleFonts","styles","headerFontFamily","bodyFontFamily","bodyColor","headerWeight","bodyWeight","boldWeight","overrideStyles","_ref","options","_ref2","scale","h1","fontFamily","join","blockquote","color","fontStyle","paddingLeft","marginLeft","borderLeft","marginBottom","fontWeight","content","ul","listStyle","marginRight","marginTop","letterSpacing","textTransform","boxShadow","textDecoration","background","padding","d","g","c","m","p","y","S","F","v","B","k","x","z","q","j","L","W","T","M","C","O","R","H","forEach","slice","N","includeNormalize","headerLineHeight","headerColor","blockMarginBottom","parseInt","createStyles","toJSON","font","boxSizing","overflowY","wordWrap","fontKerning","MozFontFeatureSettings","msFontFeatureSettings","WebkitFontFeatureSettings","fontFeatureSettings","maxWidth","paddingBottom","paddingRight","paddingTop","border","height","listStylePosition","listStyleImage","borderBottom","cursor","borderCollapse","width","textAlign","textRendering","plugins","overrideThemeStyles","injectStyles","getElementById","innerHTML","id","head","firstChild","insertBefore","appendChild","clock","Component","_class","_temp","ATTRIBUTE_NAMES","TAG_NAMES","BASE","BODY","HEAD","HTML","LINK","META","NOSCRIPT","SCRIPT","STYLE","TITLE","TAG_PROPERTIES","REACT_TAG_MAP","accesskey","charset","class","contenteditable","contextmenu","itemprop","tabindex","HELMET_PROPS","HTML_TAG_MAP","reduce","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","_typeof","Symbol","iterator","createClass","defineProperties","descriptor","Constructor","protoProps","staticProps","objectWithoutProperties","encodeSpecialCharacters","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","filter","tagAttrs","current","getBaseTagFromPropsList","primaryAttributes","reverse","innermostBaseTag","tag","lowerCaseAttributeKey","concat","getTagsFromPropsList","tagName","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","tagUnion","property","rafPolyfill","Date","now","callback","currentTime","setTimeout","cafPolyfill","clearTimeout","requestAnimationFrame","bind","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msg","_helmetCallback","commitTagChanges","newState","cb","baseTag","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","attributes","elementTag","getElementsByTagName","helmetAttributeString","getAttribute","helmetAttributes","split","attributesToRemove","attributeKeys","attribute","setAttribute","indexToSave","_i","removeAttribute","type","tags","headElement","querySelector","tagNodes","querySelectorAll","indexToDelete","newElement","styleSheet","cssText","createTextNode","some","existingTag","isEqualNode","parentNode","removeChild","generateElementAttributesAsString","attr","convertElementAttributestoReactProps","initProps","getMethodsForTag","encode","toComponent","_initProps","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","dangerouslySetInnerHTML","__html","generateTagsAsReactComponent","attributeHtml","string","tagContent","isSelfClosing","generateTagsAsString","_ref$title","base","link","meta","noscript","script","style","HelmetSideEffects","defer","HelmetExport","_React$Component","HelmetWrapper","classCallCheck","self","ReferenceError","possibleConstructorReturn","setPrototypeOf","inherits","shouldComponentUpdate","nextProps","mapNestedChildrenToProps","child","nestedChildren","flattenArrayTypeChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_babelHelpers$extends2","_babelHelpers$extends3","newProps","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","warnOnInvalidChildren","mapChildrenToProps","children","_this2","_child$props","initAttributes","convertReactPropstoHtmlAttributes","_props","set","propTypes","defaultTitle","titleTemplate","defaultProps","mappedState","renderStatic","description","lang","facebookImage","twitterImage","site","useStaticQuery","metaDescription","siteMetadata","imageTags","social","twitter","Wordpress2016","h2","h3","h4","body","strong","backgroundColor","typography","Typography","DataView","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","clear","entry","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","Promise","setCacheAdd","setCacheHas","SetCache","values","__data__","add","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","data","Uint8Array","WeakMap","func","thisArg","args","array","iteratee","predicate","resIndex","result","baseTimes","isArguments","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","offset","accumulator","initAccum","baseAssignValue","eq","object","objValue","isObject","objectCreate","baseCreate","proto","baseForOwn","baseEach","createBaseEach","baseFor","createBaseFor","castPath","toKey","path","arrayPush","keysFunc","symbolsFunc","getRawTag","symToStringTag","toStringTag","baseGetTag","baseIsEqualDeep","baseIsEqual","other","bitmask","customizer","stack","equalArrays","equalByTag","equalObjects","getTag","argsTag","arrayTag","objectTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isFunction","isMasked","toSource","reIsHostCtor","funcProto","Function","objectProto","funcToString","reIsNative","test","isLength","typedArrayTags","baseMatches","baseMatchesProperty","identity","isPrototype","nativeKeys","nativeKeysIn","isProto","baseIsMatch","getMatchData","matchesStrictComparable","hasIn","isKey","isStrictComparable","assignMergeValue","baseMergeDeep","keysIn","safeGet","baseMerge","srcIndex","newValue","cloneBuffer","cloneTypedArray","copyArray","initCloneObject","isArrayLikeObject","isPlainObject","toPlainObject","mergeFunc","stacked","isCommon","isTyped","baseGet","collection","eachFunc","overRest","setToString","start","assignValue","lastIndex","nested","constant","baseSetToString","arrayMap","isSymbol","symbolProto","symbolToString","baseToString","cache","stringToPath","arrayBuffer","byteLength","root","freeExports","nodeType","freeModule","Buffer","allocUnsafe","buffer","isDeep","copy","cloneArrayBuffer","typedArray","byteOffset","isNew","coreJsData","baseRest","isIterateeCall","assigner","sources","guard","isArrayLike","fromRight","iterable","arraySome","cacheHas","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","symbolValueOf","convert","getAllKeys","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","freeGlobal","baseGetAllKeys","getSymbols","isKeyable","baseIsNative","getValue","getPrototype","overArg","getPrototypeOf","nativeObjectToString","isOwn","unmasked","arrayFilter","stubArray","propertyIsEnumerable","nativeGetSymbols","getOwnPropertySymbols","symbol","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","resolve","Ctor","ctorString","hasFunc","nativeCreate","reIsUint","reIsDeepProp","reIsPlainProp","uid","maskSrcKey","exec","IE_PROTO","assocIndexOf","pop","getMapData","memoize","freeProcess","process","nodeUtil","types","require","binding","transform","arg","nativeMax","max","otherArgs","freeSelf","shortOut","nativeNow","count","lastCalled","stamp","remaining","pairs","LARGE_ARRAY_SIZE","memoizeCapped","rePropName","reEscapeChar","charCodeAt","number","quote","subString","arrayEach","castFunction","defaultValue","baseHasIn","hasPath","baseIsArguments","stubFalse","objectCtorString","baseIsTypedArray","baseUnary","nodeIsTypedArray","arrayLikeKeys","baseKeys","baseKeysIn","resolver","memoized","Cache","merge","createAssigner","baseProperty","basePropertyDeep","arrayReduce","baseIteratee","baseReduce","baseSet","copyObject"],"sourceRoot":""} \ No newline at end of file diff --git a/commons-789ecc3d12bd23c53b79.js b/commons-789ecc3d12bd23c53b79.js deleted file mode 100644 index b1aba023b..000000000 --- a/commons-789ecc3d12bd23c53b79.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see commons-789ecc3d12bd23c53b79.js.LICENSE.txt */ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[351],{4672:function(t,e,n){var r=n(2489),o=n(7562),i=function(t){return o(t)[1]},a=function(t){return o(t)[0]},u={baseFontSize:"16px",baseLineHeight:1.5,rhythmUnit:"rem",defaultRhythmBorderWidth:"1px",defaultRhythmBorderStyle:"solid",roundToNearestHalfLine:!0,minLinePadding:"2px"},c=function(t,e){var n,o=r(e.baseFontSize),i=a(o(t,"px")),u=a(e.baseLineHeightInPx),c=a(o(e.minLinePadding,"px"));return(n=e.roundToNearestHalfLine?Math.ceil(2*i/u)/2:Math.ceil(i/u))*u-i<2*c&&(n+=e.roundToNearestHalfLine?.5:1),n},f=function(t){var e=r(t.baseFontSize);return function(n,r,o){null==n&&(n=1),null==r&&(r=t.baseFontSize),null==o&&(o=0);var u=n*a(t.baseLineHeightInPx)-o+"px",c=e(u,t.rhythmUnit,r);return"px"===i(c)&&(c=Math.floor(a(c))+i(c)),parseFloat(a(c).toFixed(5))+i(c)}};t.exports=function(t){var e=JSON.parse(JSON.stringify(u)),n=Object.assign({},e,t),o=r(n.baseFontSize);return i(n.baseLineHeight)?(a(o(n.baseFontSize,"px")),n.baseLineHeightInPx=o(n.baseLineHeight,"px")):n.baseLineHeightInPx=a(n.baseFontSize)*n.baseLineHeight+"px",{rhythm:f(n),establishBaseline:function(){return function(t){return r(t.baseFontSize),{fontSize:a(t.baseFontSize)/16*100+"%",lineHeight:t.baseLineHeight.toString()}}(n)},linesForFontSize:function(t){return c(t,n)},adjustFontSizeTo:function(t,e,o){return null==e&&(e="auto"),function(t,e,n,o){null==n&&(n=o.baseFontSize),"%"===i(t)&&(t=a(o.baseFontSize)*(a(t)/100)+"px");var u=r(o.baseFontSize);t=u(t,"px",n=u(n,"px"));var s=f(o);return"auto"===e&&(e=c(t,o)),{fontSize:u(t,o.rhythmUnit,n),lineHeight:s(e,n)}}(t,e,o,n)}}}},2489:function(t,e,n){var r=n(7562),o=function(t){return r(t)[0]};t.exports=function(t){return null==t&&(t=t),function(e,n,i,a){null==i&&(i=t),null==a&&(a=i);var u=function(t){return r(t)[1]}(e);if(u===n)return e;var c=o(e);if("px"!==u)if("em"===u)c=o(e)*o(i);else if("rem"===u)c=o(e)*o(t);else{if("ex"!==u)return e;c=o(e)*o(i)*2}var f=c;if("px"!==n)if("em"===n)f=c/o(a);else if("rem"===n)f=c/o(t);else{if("ex"!==n)return e;f=c/o(a)/2}return parseFloat(f.toFixed(5))+n}}},8495:function(t){"use strict";t.exports=function(t,e){if("string"!=typeof t)throw new TypeError("Expected a string");return e=void 0===e?"_":e,t.replace(/([a-z\d])([A-Z])/g,"$1"+e+"$2").replace(/([A-Z]+)([A-Z][a-z\d]+)/g,"$1"+e+"$2").toLowerCase()}},1342:function(t){function e(t){return!isNaN(parseFloat(t))&&isFinite(t)}t.exports=function(t,n,r){if(void 0===n&&(n=0),void 0===r&&(r=!1),"cool"===n?n=237:"slate"===n?n=122:"warm"===n&&(n=69),!e(n))throw new Error("Hue is not a number");if(!e(t))throw new Error("Lightness is not a number");t>100&&(t=100),t<0&&(t=0);var o=0;if(0!==n){o=19.92978+-.3651759*t+.001737214*Math.pow(t,2)}var i=0;return r?(i=t/100,t="100%,"):(i=(100-t)/100,t="0%,"),"hsla("+n+","+o+"%,"+t+i+")"}},4003:function(t){var e=Object.prototype.toString;t.exports=function(t){return"number"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Number]"==e.call(t)}},540:function(t,e,n){var r,o;r=n(4003),o={"minor second":16/15,"major second":9/8,"minor third":1.2,"major third":4/3,"diminished fourth":Math.sqrt(2),"perfect fifth":1.5,"minor sixth":1.6,golden:1.61803398875,phi:1.61803398875,"major sixth":5/3,"minor seventh":16/9,"major seventh":15/8,octave:2,"major tenth":2.5,"major eleventh":8/3,"major twelfth":3,"double octave":4},t.exports=function(t,e){var n;return null==t&&(t=0),null==e&&(e="golden"),n=r(e)?e:null!=o[e]?o[e]:o.golden,Math.pow(n,t)}},7562:function(t){t.exports=function(t,e){e||(e=[0,""]),t=String(t);var n=parseFloat(t,10);return e[0]=n,e[1]=t.match(/[\d.\-\+]*\s*(.*)/)[1]||"",e}},2161:function(t){var e="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(t,a){if(t===a)return!0;if(t&&a&&"object"==typeof t&&"object"==typeof a){if(t.constructor!==a.constructor)return!1;var u,c,f,s;if(Array.isArray(t)){if((u=t.length)!=a.length)return!1;for(c=u;0!=c--;)if(!i(t[c],a[c]))return!1;return!0}if(n&&t instanceof Map&&a instanceof Map){if(t.size!==a.size)return!1;for(s=t.entries();!(c=s.next()).done;)if(!a.has(c.value[0]))return!1;for(s=t.entries();!(c=s.next()).done;)if(!i(c.value[1],a.get(c.value[0])))return!1;return!0}if(r&&t instanceof Set&&a instanceof Set){if(t.size!==a.size)return!1;for(s=t.entries();!(c=s.next()).done;)if(!a.has(c.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(t)&&ArrayBuffer.isView(a)){if((u=t.length)!=a.length)return!1;for(c=u;0!=c--;)if(t[c]!==a[c])return!1;return!0}if(t.constructor===RegExp)return t.source===a.source&&t.flags===a.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===a.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===a.toString();if((u=(f=Object.keys(t)).length)!==Object.keys(a).length)return!1;for(c=u;0!=c--;)if(!Object.prototype.hasOwnProperty.call(a,f[c]))return!1;if(e&&t instanceof Element)return!1;for(c=u;0!=c--;)if(("_owner"!==f[c]&&"__v"!==f[c]&&"__o"!==f[c]||!t.$$typeof)&&!i(t[f[c]],a[f[c]]))return!1;return!0}return t!=t&&a!=a}t.exports=function(t,e){try{return i(t,e)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},2773:function(t,e,n){"use strict";var r,o=n(2784),i=(r=o)&&"object"==typeof r&&"default"in r?r.default:r;function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var u=!("undefined"==typeof window||!window.document||!window.document.createElement);t.exports=function(t,e,n){if("function"!=typeof t)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof e)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==n&&"function"!=typeof n)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(r){if("function"!=typeof r)throw new Error("Expected WrappedComponent to be a React component.");var c,f=[];function s(){c=t(f.map((function(t){return t.props}))),l.canUseDOM?e(c):n&&(c=n(c))}var l=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n,o.peek=function(){return c},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var t=c;return c=void 0,f=[],t};var a=o.prototype;return a.UNSAFE_componentWillMount=function(){f.push(this),s()},a.componentDidUpdate=function(){s()},a.componentWillUnmount=function(){var t=f.indexOf(this);f.splice(t,1),s()},a.render=function(){return i.createElement(r,this.props)},o}(o.PureComponent);return a(l,"displayName","SideEffect("+function(t){return t.displayName||t.name||"Component"}(r)+")"),a(l,"canUseDOM",u),l}}},7651:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.LARGER_DISPLAY_WIDTH="1600px",e.LARGE_DISPLAY_WIDTH="1280px",e.DEFAULT_WIDTH="980px",e.TABLET_WIDTH="768px",e.MOBILE_WIDTH="480px",e.LARGER_DISPLAY_MEDIA_QUERY="@media only screen and (max-width:1600px)",e.LARGE_DISPLAY_MEDIA_QUERY="@media only screen and (max-width:1280px)",e.DEFAULT_MEDIA_QUERY="@media only screen and (max-width:980px)",e.TABLET_MEDIA_QUERY="@media only screen and (max-width:768px)",e.MOBILE_MEDIA_QUERY="@media only screen and (max-width:480px)",e.MIN_LARGER_DISPLAY_MEDIA_QUERY="@media (min-width:1600px)",e.MIN_LARGE_DISPLAY_MEDIA_QUERY="@media (min-width:1280px)",e.MIN_DEFAULT_MEDIA_QUERY="@media (min-width:980px)",e.MIN_TABLET_MEDIA_QUERY="@media (min-width:768px)",e.MIN_MOBILE_MEDIA_QUERY="@media (min-width:480px)"},9438:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default="html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}"},1319:function(t,e,n){"use strict";var r,o=Object.assign||function(t){for(var e=1;e :last-child":{marginBottom:0},"blockquote cite":o({},r(e.baseFontSize),{color:e.bodyColor,fontWeight:e.bodyWeight}),"blockquote cite:before":{content:'"— "'},ul:{listStyle:"disc"},"ul,ol":{marginLeft:0}},u.MOBILE_MEDIA_QUERY,{"ul,ol":{marginLeft:f(1)},blockquote:{marginLeft:f(-3/4),marginRight:0,paddingLeft:f(9/16)}}),c(n,"h1,h2,h3,h4,h5,h6",{marginTop:f(2)}),c(n,"h4",{letterSpacing:"0.140625em",textTransform:"uppercase"}),c(n,"h6",{fontStyle:"italic"}),c(n,"a",{boxShadow:"0 1px 0 0 currentColor",color:"#007acc",textDecoration:"none"}),c(n,"a:hover,a:active",{boxShadow:"none"}),c(n,"mark,ins",{background:"#007acc",color:"white",padding:f(1/16)+" "+f(1/8),textDecoration:"none"}),n}};e.Z=f},2182:function(t,e,n){var r=n(308),o=n(4672),i=n(540),a=n(1342),u=n(6765),c=n(9756),f=n(537),s=n(5505),l=n(1049),p=n(6152),d=n(8537),h=n(8215),v=n(9438),b=n(8495),y=n(9259);function g(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var m=g(r),x=g(o),w=g(i),_=g(a),j=g(u),T=g(c),S=g(f),O=g(s),A=g(l),E=g(p),L=g(d),k=g(h),C=g(v),F=g(b),z=g(y);function I(){return(I=Object.assign||function(t){for(var e=1;e ol","li > ul"],{marginLeft:t.rhythm(1),marginBottom:"calc("+n+" / 2)",marginTop:"calc("+n+" / 2)"}),r=M(r,["blockquote *:last-child","li *:last-child","p *:last-child"],{marginBottom:0}),r=M(r,["li > p"],{marginBottom:"calc("+n+" / 2)"}),r=M(r,["code","kbd","pre","samp"],I({},t.adjustFontSizeTo("85%"))),(r=M(r,["abbr","acronym"],{borderBottom:"1px dotted "+_.default(50),cursor:"help"}))["abbr[title]"]={borderBottom:"1px dotted "+_.default(50),cursor:"help",textDecoration:"none"},r=M(r,["table"],I({},t.adjustFontSizeTo(e.baseFontSize),{borderCollapse:"collapse",width:"100%"})),r=M(r,["thead"],{textAlign:"left"}),r=M(r,["td,th"],{textAlign:"left",borderBottom:"1px solid "+_.default(88),fontFeatureSettings:'"tnum"',MozFontFeatureSettings:'"tnum"',msFontFeatureSettings:'"tnum"',WebkitFontFeatureSettings:'"tnum"',paddingLeft:t.rhythm(2/3),paddingRight:t.rhythm(2/3),paddingTop:t.rhythm(.5),paddingBottom:"calc("+t.rhythm(.5)+" - 1px)"}),r=M(r,"th:first-child,td:first-child",{paddingLeft:0}),r=M(r,"th:last-child,td:last-child",{paddingRight:0}),r=M(r,["h1","h2","h3","h4","h5","h6"],{color:e.headerColor,fontFamily:e.headerFontFamily.map(R).join(","),fontWeight:e.headerWeight,textRendering:"optimizeLegibility"});var i=t.scale(1),a=t.scale(.6),u=t.scale(.4),c=t.scale(0),f=t.scale(-.2),s=t.scale(-.3);return T.default([i,a,u,c,f,s],(function(t,n){r=j.default(r,"h"+(n+1)+".fontSize",t.fontSize),r=j.default(r,"h"+(n+1)+".lineHeight",e.headerLineHeight)})),E.default(e.plugins)&&(r=k.default(e.plugins,(function(n,r){return L.default(n,r(t,e,n))}),r)),e.overrideStyles&&A.default(e.overrideStyles)&&(r=L.default(r,e.overrideStyles(t,e,r))),e.overrideThemeStyles&&A.default(e.overrideThemeStyles)&&(r=L.default(r,e.overrideThemeStyles(t,e,r))),r}(n,e)},toString:function(){return D(0,e,this.toJSON())},injectStyles:function(){if("undefined"!=typeof document)if(document.getElementById("typography.js"))document.getElementById("typography.js").innerHTML=this.toString();else{var t=document.createElement("style");t.id="typography.js",t.innerHTML=this.toString();var e=document.head;e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t)}}})}},8977:function(t,e,n){"use strict";n.d(e,{Z:function(){return yt}});var r,o,i,a,u=n(2784),c=n(3980),f=n.n(c),s=n(2773),l=n.n(s),p=n(2161),d=n.n(p),h=n(308),v=n.n(h),b="bodyAttributes",y="htmlAttributes",g="titleAttributes",m={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},x=(Object.keys(m).map((function(t){return m[t]})),"charset"),w="cssText",_="href",j="http-equiv",T="innerHTML",S="itemprop",O="name",A="property",E="rel",L="src",k="target",C={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},F="defaultTitle",z="defer",I="encodeSpecialCharacters",M="onChangeClientState",P="titleTemplate",R=Object.keys(C).reduce((function(t,e){return t[C[e]]=e,t}),{}),B=[m.NOSCRIPT,m.SCRIPT,m.STYLE],D="data-react-helmet",N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},H=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},U=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n},q=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},$=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!1===e?String(t):String(t).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},Q=function(t){var e=J(t,m.TITLE),n=J(t,P);if(n&&e)return n.replace(/%s/g,(function(){return Array.isArray(e)?e.join(""):e}));var r=J(t,F);return e||r||void 0},G=function(t){return J(t,M)||function(){}},Z=function(t,e){return e.filter((function(e){return void 0!==e[t]})).map((function(e){return e[t]})).reduce((function(t,e){return W({},t,e)}),{})},K=function(t,e){return e.filter((function(t){return void 0!==t[m.BASE]})).map((function(t){return t[m.BASE]})).reverse().reduce((function(e,n){if(!e.length)for(var r=Object.keys(n),o=0;o=0;n--){var r=t[n];if(r.hasOwnProperty(e))return r[e]}return null},X=(r=Date.now(),function(t){var e=Date.now();e-r>16?(r=e,t(e)):setTimeout((function(){X(t)}),0)}),tt=function(t){return clearTimeout(t)},et="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||X:n.g.requestAnimationFrame||X,nt="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||tt:n.g.cancelAnimationFrame||tt,rt=function(t){return console&&"function"==typeof console.warn&&console.warn(t)},ot=null,it=function(t,e){var n=t.baseTag,r=t.bodyAttributes,o=t.htmlAttributes,i=t.linkTags,a=t.metaTags,u=t.noscriptTags,c=t.onChangeClientState,f=t.scriptTags,s=t.styleTags,l=t.title,p=t.titleAttributes;ct(m.BODY,r),ct(m.HTML,o),ut(l,p);var d={baseTag:ft(m.BASE,n),linkTags:ft(m.LINK,i),metaTags:ft(m.META,a),noscriptTags:ft(m.NOSCRIPT,u),scriptTags:ft(m.SCRIPT,f),styleTags:ft(m.STYLE,s)},h={},v={};Object.keys(d).forEach((function(t){var e=d[t],n=e.newTags,r=e.oldTags;n.length&&(h[t]=n),r.length&&(v[t]=d[t].oldTags)})),e&&e(),c(t,h,v)},at=function(t){return Array.isArray(t)?t.join(""):t},ut=function(t,e){void 0!==t&&document.title!==t&&(document.title=at(t)),ct(m.TITLE,e)},ct=function(t,e){var n=document.getElementsByTagName(t)[0];if(n){for(var r=n.getAttribute(D),o=r?r.split(","):[],i=[].concat(o),a=Object.keys(e),u=0;u=0;l--)n.removeAttribute(i[l]);o.length===i.length?n.removeAttribute(D):n.getAttribute(D)!==a.join(",")&&n.setAttribute(D,a.join(","))}},ft=function(t,e){var n=document.head||document.querySelector(m.HEAD),r=n.querySelectorAll(t+"["+"data-react-helmet]"),o=Array.prototype.slice.call(r),i=[],a=void 0;return e&&e.length&&e.forEach((function(e){var n=document.createElement(t);for(var r in e)if(e.hasOwnProperty(r))if(r===T)n.innerHTML=e.innerHTML;else if(r===w)n.styleSheet?n.styleSheet.cssText=e.cssText:n.appendChild(document.createTextNode(e.cssText));else{var u=void 0===e[r]?"":e[r];n.setAttribute(r,u)}n.setAttribute(D,"true"),o.some((function(t,e){return a=e,n.isEqualNode(t)}))?o.splice(a,1):i.push(n)})),o.forEach((function(t){return t.parentNode.removeChild(t)})),i.forEach((function(t){return n.appendChild(t)})),{oldTags:o,newTags:i}},st=function(t){return Object.keys(t).reduce((function(e,n){var r=void 0!==t[n]?n+'="'+t[n]+'"':""+n;return e?e+" "+r:r}),"")},lt=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(t).reduce((function(e,n){return e[C[n]||n]=t[n],e}),e)},pt=function(t,e,n){switch(t){case m.TITLE:return{toComponent:function(){return t=e.title,n=e.titleAttributes,(r={key:t})[D]=!0,o=lt(n,r),[u.createElement(m.TITLE,o,t)];var t,n,r,o},toString:function(){return function(t,e,n,r){var o=st(n),i=at(e);return o?"<"+t+' data-react-helmet="true" '+o+">"+$(i,r)+"":"<"+t+' data-react-helmet="true">'+$(i,r)+""}(t,e.title,e.titleAttributes,n)}};case b:case y:return{toComponent:function(){return lt(e)},toString:function(){return st(e)}};default:return{toComponent:function(){return function(t,e){return e.map((function(e,n){var r,o=((r={key:n})[D]=!0,r);return Object.keys(e).forEach((function(t){var n=C[t]||t;if(n===T||n===w){var r=e.innerHTML||e.cssText;o.dangerouslySetInnerHTML={__html:r}}else o[n]=e[t]})),u.createElement(t,o)}))}(t,e)},toString:function(){return function(t,e,n){return e.reduce((function(e,r){var o=Object.keys(r).filter((function(t){return!(t===T||t===w)})).reduce((function(t,e){var o=void 0===r[e]?e:e+'="'+$(r[e],n)+'"';return t?t+" "+o:o}),""),i=r.innerHTML||r.cssText||"",a=-1===B.indexOf(t);return e+"<"+t+' data-react-helmet="true" '+o+(a?"/>":">"+i+"")}),"")}(t,e,n)}}}},dt=function(t){var e=t.baseTag,n=t.bodyAttributes,r=t.encode,o=t.htmlAttributes,i=t.linkTags,a=t.metaTags,u=t.noscriptTags,c=t.scriptTags,f=t.styleTags,s=t.title,l=void 0===s?"":s,p=t.titleAttributes;return{base:pt(m.BASE,e,r),bodyAttributes:pt(b,n,r),htmlAttributes:pt(y,o,r),link:pt(m.LINK,i,r),meta:pt(m.META,a,r),noscript:pt(m.NOSCRIPT,u,r),script:pt(m.SCRIPT,c,r),style:pt(m.STYLE,f,r),title:pt(m.TITLE,{title:l,titleAttributes:p},r)}},ht=l()((function(t){return{baseTag:K([_,k],t),bodyAttributes:Z(b,t),defer:J(t,z),encode:J(t,I),htmlAttributes:Z(y,t),linkTags:V(m.LINK,[E,_],t),metaTags:V(m.META,[O,x,j,A,S],t),noscriptTags:V(m.NOSCRIPT,[T],t),onChangeClientState:G(t),scriptTags:V(m.SCRIPT,[L,T],t),styleTags:V(m.STYLE,[w],t),title:Q(t),titleAttributes:Z(g,t)}}),(function(t){ot&&nt(ot),t.defer?ot=et((function(){it(t,(function(){ot=null}))})):(it(t),ot=null)}),dt)((function(){return null})),vt=(o=ht,a=i=function(t){function e(){return H(this,e),q(this,t.apply(this,arguments))}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.shouldComponentUpdate=function(t){return!d()(this.props,t)},e.prototype.mapNestedChildrenToProps=function(t,e){if(!e)return null;switch(t.type){case m.SCRIPT:case m.NOSCRIPT:return{innerHTML:e};case m.STYLE:return{cssText:e}}throw new Error("<"+t.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},e.prototype.flattenArrayTypeChildren=function(t){var e,n=t.child,r=t.arrayTypeChildren,o=t.newChildProps,i=t.nestedChildren;return W({},r,((e={})[n.type]=[].concat(r[n.type]||[],[W({},o,this.mapNestedChildrenToProps(n,i))]),e))},e.prototype.mapObjectTypeChildren=function(t){var e,n,r=t.child,o=t.newProps,i=t.newChildProps,a=t.nestedChildren;switch(r.type){case m.TITLE:return W({},o,((e={})[r.type]=a,e.titleAttributes=W({},i),e));case m.BODY:return W({},o,{bodyAttributes:W({},i)});case m.HTML:return W({},o,{htmlAttributes:W({},i)})}return W({},o,((n={})[r.type]=W({},i),n))},e.prototype.mapArrayTypeChildrenToProps=function(t,e){var n=W({},e);return Object.keys(t).forEach((function(e){var r;n=W({},n,((r={})[e]=t[e],r))})),n},e.prototype.warnOnInvalidChildren=function(t,e){return!0},e.prototype.mapChildrenToProps=function(t,e){var n=this,r={};return u.Children.forEach(t,(function(t){if(t&&t.props){var o=t.props,i=o.children,a=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(t).reduce((function(e,n){return e[R[n]||n]=t[n],e}),e)}(Y(o,["children"]));switch(n.warnOnInvalidChildren(t,i),t.type){case m.LINK:case m.META:case m.NOSCRIPT:case m.SCRIPT:case m.STYLE:r=n.flattenArrayTypeChildren({child:t,arrayTypeChildren:r,newChildProps:a,nestedChildren:i});break;default:e=n.mapObjectTypeChildren({child:t,newProps:e,newChildProps:a,nestedChildren:i})}}})),e=this.mapArrayTypeChildrenToProps(r,e)},e.prototype.render=function(){var t=this.props,e=t.children,n=Y(t,["children"]),r=W({},n);return e&&(r=this.mapChildrenToProps(e,r)),u.createElement(o,r)},U(e,null,[{key:"canUseDOM",set:function(t){o.canUseDOM=t}}]),e}(u.Component),i.propTypes={base:f().object,bodyAttributes:f().object,children:f().oneOfType([f().arrayOf(f().node),f().node]),defaultTitle:f().string,defer:f().bool,encodeSpecialCharacters:f().bool,htmlAttributes:f().object,link:f().arrayOf(f().object),meta:f().arrayOf(f().object),noscript:f().arrayOf(f().object),onChangeClientState:f().func,script:f().arrayOf(f().object),style:f().arrayOf(f().object),title:f().string,titleAttributes:f().object,titleTemplate:f().string},i.defaultProps={defer:!0,encodeSpecialCharacters:!0},i.peek=o.peek,i.rewind=function(){var t=o.rewind();return t||(t=dt({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),t},a);vt.renderStatic=vt.rewind;var bt=n(8447),yt=function(t){var e=t.description,n=t.lang,r=void 0===n?"en":n,o=t.meta,i=void 0===o?[]:o,a=t.title,c=t.facebookImage,f=t.twitterImage,s=(0,bt.useStaticQuery)("2841359383").site,l=e||s.siteMetadata.description,p=[];return c&&p.push({property:"og:image",content:c}),f&&p.push({property:"twitter:image",content:f}),u.createElement(vt,{htmlAttributes:{lang:r},title:a,titleTemplate:"%s | "+s.siteMetadata.title,meta:[{name:"description",content:l},{property:"og:title",content:a},{property:"og:description",content:l},{property:"og:type",content:"website"},{name:"twitter:card",content:"summary"},{name:"twitter:creator",content:s.siteMetadata.social.twitter},{name:"twitter:title",content:a},{name:"twitter:description",content:l}].concat(p).concat(i)})}},6376:function(t,e,n){"use strict";n.d(e,{bA:function(){return c},qZ:function(){return u}});var r=n(2182),o=n.n(r),i=n(1319);i.Z.overrideThemeStyles=function(){return{h1:{fontWeight:700,color:"#111"},h2:{color:"#111"},h3:{color:"#111"},h4:{color:"#111"},body:{color:"#222"},strong:{fontWeight:900,color:"#000",backgroundColor:"#ff9"},"a.gatsby-resp-image-link":{boxShadow:"none"}}},delete i.Z.googleFonts;var a=new(o())(i.Z);var u=a.rhythm,c=a.scale},9515:function(t,e,n){var r=n(8761)(n(7772),"DataView");t.exports=r},9612:function(t,e,n){var r=n(2118),o=n(6909),i=n(8138),a=n(4174),u=n(7942);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(i--,a):void 0,u&&o(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),e=Object(e);++rs))return!1;var p=c.get(t),d=c.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,b=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++h-1&&t%1==0&&t-1}},4769:function(t,e,n){var r=n(2218);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},2411:function(t,e,n){var r=n(9612),o=n(235),i=n(326);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},6417:function(t,e,n){var r=n(7937);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},6928:function(t,e,n){var r=n(7937);t.exports=function(t){return r(this,t).get(t)}},9493:function(t,e,n){var r=n(7937);t.exports=function(t){return r(this,t).has(t)}},4150:function(t,e,n){var r=n(7937);t.exports=function(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}},5179:function(t){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},3477:function(t){t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},7777:function(t,e,n){var r=n(733);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},9191:function(t,e,n){var r=n(8761)(Object,"create");t.exports=r},4248:function(t,e,n){var r=n(241)(Object.keys,Object);t.exports=r},2966:function(t){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},4146:function(t,e,n){t=n.nmd(t);var r=n(1242),o=e&&!e.nodeType&&e,i=o&&t&&!t.nodeType&&t,a=i&&i.exports===o&&r.process,u=function(){try{var t=i&&i.require&&i.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}();t.exports=u},7157:function(t){var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},241:function(t){t.exports=function(t,e){return function(n){return t(e(n))}}},3114:function(t,e,n){var r=n(9432),o=Math.max;t.exports=function(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,a=-1,u=o(i.length-e,0),c=Array(u);++a0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}},5243:function(t,e,n){var r=n(235);t.exports=function(){this.__data__=new r,this.size=0}},2858:function(t){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},4417:function(t){t.exports=function(t){return this.__data__.get(t)}},8605:function(t){t.exports=function(t){return this.__data__.has(t)}},1418:function(t,e,n){var r=n(235),o=n(326),i=n(6738);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!o||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(a)}return n.set(t,e),this.size=n.size,this}},4452:function(t,e,n){var r=n(7777),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,a=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,(function(t,n,r,o){e.push(r?o.replace(i,"$1"):n||t)})),e}));t.exports=a},3812:function(t,e,n){var r=n(4795);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-Infinity?"-0":e}},7035:function(t){var e=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return e.call(t)}catch(n){}try{return t+""}catch(n){}}return""}},6874:function(t){t.exports=function(t){return function(){return t}}},1225:function(t){t.exports=function(t,e){return t===e||t!=t&&e!=e}},9756:function(t,e,n){var r=n(2517),o=n(4303),i=n(9419),a=n(6152);t.exports=function(t,e){return(a(t)?r:o)(t,i(e))}},2579:function(t,e,n){var r=n(3324);t.exports=function(t,e,n){var o=null==t?void 0:r(t,e);return void 0===o?n:o}},5041:function(t,e,n){var r=n(187),o=n(1369);t.exports=function(t,e){return null!=t&&o(t,e,r)}},3059:function(t){t.exports=function(t){return t}},9631:function(t,e,n){var r=n(5183),o=n(5125),i=Object.prototype,a=i.hasOwnProperty,u=i.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return o(t)&&a.call(t,"callee")&&!u.call(t,"callee")};t.exports=c},6152:function(t){var e=Array.isArray;t.exports=e},7878:function(t,e,n){var r=n(1049),o=n(1158);t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},3746:function(t,e,n){var r=n(7878),o=n(5125);t.exports=function(t){return o(t)&&r(t)}},3226:function(t,e,n){t=n.nmd(t);var r=n(7772),o=n(6330),i=e&&!e.nodeType&&e,a=i&&t&&!t.nodeType&&t,u=a&&a.exports===i?r.Buffer:void 0,c=(u?u.isBuffer:void 0)||o;t.exports=c},1049:function(t,e,n){var r=n(3366),o=n(9259);t.exports=function(t){if(!o(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1158:function(t){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},537:function(t,e,n){var r=n(3366),o=n(5125);t.exports=function(t){return"number"==typeof t||o(t)&&"[object Number]"==r(t)}},9259:function(t){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},5125:function(t){t.exports=function(t){return null!=t&&"object"==typeof t}},7030:function(t,e,n){var r=n(3366),o=n(7353),i=n(5125),a=Function.prototype,u=Object.prototype,c=a.toString,f=u.hasOwnProperty,s=c.call(Object);t.exports=function(t){if(!i(t)||"[object Object]"!=r(t))return!1;var e=o(t);if(null===e)return!0;var n=f.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==s}},5505:function(t,e,n){var r=n(3366),o=n(6152),i=n(5125);t.exports=function(t){return"string"==typeof t||!o(t)&&i(t)&&"[object String]"==r(t)}},4795:function(t,e,n){var r=n(3366),o=n(5125);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},7598:function(t,e,n){var r=n(5522),o=n(7826),i=n(4146),a=i&&i.isTypedArray,u=a?o(a):r;t.exports=u},249:function(t,e,n){var r=n(1634),o=n(6411),i=n(7878);t.exports=function(t){return i(t)?r(t):o(t)}},4225:function(t,e,n){var r=n(1634),o=n(8390),i=n(7878);t.exports=function(t){return i(t)?r(t,!0):o(t)}},733:function(t,e,n){var r=n(6738);function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=t.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(o.Cache||r),n}o.Cache=r,t.exports=o},8537:function(t,e,n){var r=n(4565),o=n(7263)((function(t,e,n){r(t,e,n)}));t.exports=o},5798:function(t,e,n){var r=n(256),o=n(2952),i=n(1401),a=n(3812);t.exports=function(t){return i(t)?r(a(t)):o(t)}},8215:function(t,e,n){var r=n(1207),o=n(4303),i=n(8286),a=n(5877),u=n(6152);t.exports=function(t,e,n){var c=u(t)?r:a,f=arguments.length<3;return c(t,i(e,4),n,f,o)}},6765:function(t,e,n){var r=n(2857);t.exports=function(t,e,n){return null==t?t:r(t,e,n)}},981:function(t){t.exports=function(){return[]}},6330:function(t){t.exports=function(){return!1}},3329:function(t,e,n){var r=n(752),o=n(4225);t.exports=function(t){return r(t,o(t))}},6188:function(t,e,n){var r=n(1054);t.exports=function(t){return null==t?"":r(t)}}}]); -//# sourceMappingURL=commons-789ecc3d12bd23c53b79.js.map \ No newline at end of file diff --git a/commons-789ecc3d12bd23c53b79.js.map b/commons-789ecc3d12bd23c53b79.js.map deleted file mode 100644 index 8312755c6..000000000 --- a/commons-789ecc3d12bd23c53b79.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"commons-789ecc3d12bd23c53b79.js","mappings":"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","sources":["webpack://website/../../node_modules/compass-vertical-rhythm/dist/index.js","webpack://website/../../node_modules/convert-css-length/dist/index.js","webpack://website/../../node_modules/decamelize/index.js","webpack://website/../../node_modules/gray-percentage/index.js","webpack://website/../../node_modules/lodash.isnumber/index.js","webpack://website/../../node_modules/modularscale/dist/index.js","webpack://website/../../node_modules/parse-unit/index.js","webpack://website/../../node_modules/react-fast-compare/index.js","webpack://website/../../node_modules/react-side-effect/lib/index.js","webpack://website/../../node_modules/typography-breakpoint-constants/dist/index.js","webpack://website/../../node_modules/typography-normalize/dist/index.js","webpack://website/../../node_modules/typography-theme-wordpress-2016/dist/index.js","webpack://website/../../node_modules/typography/dist/index.js","webpack://website/../../node_modules/react-helmet/es/Helmet.js","webpack://website/./src/components/seo.tsx","webpack://website/./src/utils/typography.ts","webpack://website/../../node_modules/lodash/_DataView.js","webpack://website/../../node_modules/lodash/_Hash.js","webpack://website/../../node_modules/lodash/_ListCache.js","webpack://website/../../node_modules/lodash/_Map.js","webpack://website/../../node_modules/lodash/_MapCache.js","webpack://website/../../node_modules/lodash/_Promise.js","webpack://website/../../node_modules/lodash/_Set.js","webpack://website/../../node_modules/lodash/_SetCache.js","webpack://website/../../node_modules/lodash/_Stack.js","webpack://website/../../node_modules/lodash/_Symbol.js","webpack://website/../../node_modules/lodash/_Uint8Array.js","webpack://website/../../node_modules/lodash/_WeakMap.js","webpack://website/../../node_modules/lodash/_apply.js","webpack://website/../../node_modules/lodash/_arrayEach.js","webpack://website/../../node_modules/lodash/_arrayFilter.js","webpack://website/../../node_modules/lodash/_arrayLikeKeys.js","webpack://website/../../node_modules/lodash/_arrayMap.js","webpack://website/../../node_modules/lodash/_arrayPush.js","webpack://website/../../node_modules/lodash/_arrayReduce.js","webpack://website/../../node_modules/lodash/_arraySome.js","webpack://website/../../node_modules/lodash/_assignMergeValue.js","webpack://website/../../node_modules/lodash/_assignValue.js","webpack://website/../../node_modules/lodash/_assocIndexOf.js","webpack://website/../../node_modules/lodash/_baseAssignValue.js","webpack://website/../../node_modules/lodash/_baseCreate.js","webpack://website/../../node_modules/lodash/_baseEach.js","webpack://website/../../node_modules/lodash/_baseFor.js","webpack://website/../../node_modules/lodash/_baseForOwn.js","webpack://website/../../node_modules/lodash/_baseGet.js","webpack://website/../../node_modules/lodash/_baseGetAllKeys.js","webpack://website/../../node_modules/lodash/_baseGetTag.js","webpack://website/../../node_modules/lodash/_baseHasIn.js","webpack://website/../../node_modules/lodash/_baseIsArguments.js","webpack://website/../../node_modules/lodash/_baseIsEqual.js","webpack://website/../../node_modules/lodash/_baseIsEqualDeep.js","webpack://website/../../node_modules/lodash/_baseIsMatch.js","webpack://website/../../node_modules/lodash/_baseIsNative.js","webpack://website/../../node_modules/lodash/_baseIsTypedArray.js","webpack://website/../../node_modules/lodash/_baseIteratee.js","webpack://website/../../node_modules/lodash/_baseKeys.js","webpack://website/../../node_modules/lodash/_baseKeysIn.js","webpack://website/../../node_modules/lodash/_baseMatches.js","webpack://website/../../node_modules/lodash/_baseMatchesProperty.js","webpack://website/../../node_modules/lodash/_baseMerge.js","webpack://website/../../node_modules/lodash/_baseMergeDeep.js","webpack://website/../../node_modules/lodash/_baseProperty.js","webpack://website/../../node_modules/lodash/_basePropertyDeep.js","webpack://website/../../node_modules/lodash/_baseReduce.js","webpack://website/../../node_modules/lodash/_baseRest.js","webpack://website/../../node_modules/lodash/_baseSet.js","webpack://website/../../node_modules/lodash/_baseSetToString.js","webpack://website/../../node_modules/lodash/_baseTimes.js","webpack://website/../../node_modules/lodash/_baseToString.js","webpack://website/../../node_modules/lodash/_baseUnary.js","webpack://website/../../node_modules/lodash/_cacheHas.js","webpack://website/../../node_modules/lodash/_castFunction.js","webpack://website/../../node_modules/lodash/_castPath.js","webpack://website/../../node_modules/lodash/_cloneArrayBuffer.js","webpack://website/../../node_modules/lodash/_cloneBuffer.js","webpack://website/../../node_modules/lodash/_cloneTypedArray.js","webpack://website/../../node_modules/lodash/_copyArray.js","webpack://website/../../node_modules/lodash/_copyObject.js","webpack://website/../../node_modules/lodash/_coreJsData.js","webpack://website/../../node_modules/lodash/_createAssigner.js","webpack://website/../../node_modules/lodash/_createBaseEach.js","webpack://website/../../node_modules/lodash/_createBaseFor.js","webpack://website/../../node_modules/lodash/_defineProperty.js","webpack://website/../../node_modules/lodash/_equalArrays.js","webpack://website/../../node_modules/lodash/_equalByTag.js","webpack://website/../../node_modules/lodash/_equalObjects.js","webpack://website/../../node_modules/lodash/_freeGlobal.js","webpack://website/../../node_modules/lodash/_getAllKeys.js","webpack://website/../../node_modules/lodash/_getMapData.js","webpack://website/../../node_modules/lodash/_getMatchData.js","webpack://website/../../node_modules/lodash/_getNative.js","webpack://website/../../node_modules/lodash/_getPrototype.js","webpack://website/../../node_modules/lodash/_getRawTag.js","webpack://website/../../node_modules/lodash/_getSymbols.js","webpack://website/../../node_modules/lodash/_getTag.js","webpack://website/../../node_modules/lodash/_getValue.js","webpack://website/../../node_modules/lodash/_hasPath.js","webpack://website/../../node_modules/lodash/_hashClear.js","webpack://website/../../node_modules/lodash/_hashDelete.js","webpack://website/../../node_modules/lodash/_hashGet.js","webpack://website/../../node_modules/lodash/_hashHas.js","webpack://website/../../node_modules/lodash/_hashSet.js","webpack://website/../../node_modules/lodash/_initCloneObject.js","webpack://website/../../node_modules/lodash/_isIndex.js","webpack://website/../../node_modules/lodash/_isIterateeCall.js","webpack://website/../../node_modules/lodash/_isKey.js","webpack://website/../../node_modules/lodash/_isKeyable.js","webpack://website/../../node_modules/lodash/_isMasked.js","webpack://website/../../node_modules/lodash/_isPrototype.js","webpack://website/../../node_modules/lodash/_isStrictComparable.js","webpack://website/../../node_modules/lodash/_listCacheClear.js","webpack://website/../../node_modules/lodash/_listCacheDelete.js","webpack://website/../../node_modules/lodash/_listCacheGet.js","webpack://website/../../node_modules/lodash/_listCacheHas.js","webpack://website/../../node_modules/lodash/_listCacheSet.js","webpack://website/../../node_modules/lodash/_mapCacheClear.js","webpack://website/../../node_modules/lodash/_mapCacheDelete.js","webpack://website/../../node_modules/lodash/_mapCacheGet.js","webpack://website/../../node_modules/lodash/_mapCacheHas.js","webpack://website/../../node_modules/lodash/_mapCacheSet.js","webpack://website/../../node_modules/lodash/_mapToArray.js","webpack://website/../../node_modules/lodash/_matchesStrictComparable.js","webpack://website/../../node_modules/lodash/_memoizeCapped.js","webpack://website/../../node_modules/lodash/_nativeCreate.js","webpack://website/../../node_modules/lodash/_nativeKeys.js","webpack://website/../../node_modules/lodash/_nativeKeysIn.js","webpack://website/../../node_modules/lodash/_nodeUtil.js","webpack://website/../../node_modules/lodash/_objectToString.js","webpack://website/../../node_modules/lodash/_overArg.js","webpack://website/../../node_modules/lodash/_overRest.js","webpack://website/../../node_modules/lodash/_root.js","webpack://website/../../node_modules/lodash/_safeGet.js","webpack://website/../../node_modules/lodash/_setCacheAdd.js","webpack://website/../../node_modules/lodash/_setCacheHas.js","webpack://website/../../node_modules/lodash/_setToArray.js","webpack://website/../../node_modules/lodash/_setToString.js","webpack://website/../../node_modules/lodash/_shortOut.js","webpack://website/../../node_modules/lodash/_stackClear.js","webpack://website/../../node_modules/lodash/_stackDelete.js","webpack://website/../../node_modules/lodash/_stackGet.js","webpack://website/../../node_modules/lodash/_stackHas.js","webpack://website/../../node_modules/lodash/_stackSet.js","webpack://website/../../node_modules/lodash/_stringToPath.js","webpack://website/../../node_modules/lodash/_toKey.js","webpack://website/../../node_modules/lodash/_toSource.js","webpack://website/../../node_modules/lodash/constant.js","webpack://website/../../node_modules/lodash/eq.js","webpack://website/../../node_modules/lodash/forEach.js","webpack://website/../../node_modules/lodash/get.js","webpack://website/../../node_modules/lodash/hasIn.js","webpack://website/../../node_modules/lodash/identity.js","webpack://website/../../node_modules/lodash/isArguments.js","webpack://website/../../node_modules/lodash/isArray.js","webpack://website/../../node_modules/lodash/isArrayLike.js","webpack://website/../../node_modules/lodash/isArrayLikeObject.js","webpack://website/../../node_modules/lodash/isBuffer.js","webpack://website/../../node_modules/lodash/isFunction.js","webpack://website/../../node_modules/lodash/isLength.js","webpack://website/../../node_modules/lodash/isNumber.js","webpack://website/../../node_modules/lodash/isObject.js","webpack://website/../../node_modules/lodash/isObjectLike.js","webpack://website/../../node_modules/lodash/isPlainObject.js","webpack://website/../../node_modules/lodash/isString.js","webpack://website/../../node_modules/lodash/isSymbol.js","webpack://website/../../node_modules/lodash/isTypedArray.js","webpack://website/../../node_modules/lodash/keys.js","webpack://website/../../node_modules/lodash/keysIn.js","webpack://website/../../node_modules/lodash/memoize.js","webpack://website/../../node_modules/lodash/merge.js","webpack://website/../../node_modules/lodash/property.js","webpack://website/../../node_modules/lodash/reduce.js","webpack://website/../../node_modules/lodash/set.js","webpack://website/../../node_modules/lodash/stubArray.js","webpack://website/../../node_modules/lodash/stubFalse.js","webpack://website/../../node_modules/lodash/toPlainObject.js","webpack://website/../../node_modules/lodash/toString.js"],"sourcesContent":["var e = require(\"convert-css-length\"),\n n = require(\"parse-unit\"),\n t = function t(e) {\n return n(e)[1];\n},\n i = function i(e) {\n return n(e)[0];\n},\n r = {\n baseFontSize: \"16px\",\n baseLineHeight: 1.5,\n rhythmUnit: \"rem\",\n defaultRhythmBorderWidth: \"1px\",\n defaultRhythmBorderStyle: \"solid\",\n roundToNearestHalfLine: !0,\n minLinePadding: \"2px\"\n},\n a = function a(n, t) {\n var r,\n a = e(t.baseFontSize),\n o = i(a(n, \"px\")),\n s = i(t.baseLineHeightInPx),\n u = i(a(t.minLinePadding, \"px\"));\n return (r = t.roundToNearestHalfLine ? Math.ceil(2 * o / s) / 2 : Math.ceil(o / s)) * s - o < 2 * u && (r += t.roundToNearestHalfLine ? .5 : 1), r;\n},\n o = function o(n) {\n var r = e(n.baseFontSize);\n return function (e, a, o) {\n null == e && (e = 1), null == a && (a = n.baseFontSize), null == o && (o = 0);\n var s = e * i(n.baseLineHeightInPx) - o + \"px\",\n u = r(s, n.rhythmUnit, a);\n return \"px\" === t(u) && (u = Math.floor(i(u)) + t(u)), parseFloat(i(u).toFixed(5)) + t(u);\n };\n};\n\nmodule.exports = function (n) {\n var s = JSON.parse(JSON.stringify(r)),\n u = Object.assign({}, s, n),\n h = e(u.baseFontSize);\n\n if (t(u.baseLineHeight)) {\n i(h(u.baseFontSize, \"px\"));\n u.baseLineHeightInPx = h(u.baseLineHeight, \"px\");\n } else u.baseLineHeightInPx = i(u.baseFontSize) * u.baseLineHeight + \"px\";\n\n return {\n rhythm: o(u),\n establishBaseline: function establishBaseline() {\n return function (n) {\n e(n.baseFontSize);\n return {\n fontSize: i(n.baseFontSize) / 16 * 100 + \"%\",\n lineHeight: n.baseLineHeight.toString()\n };\n }(u);\n },\n linesForFontSize: function linesForFontSize(e) {\n return a(e, u);\n },\n adjustFontSizeTo: function adjustFontSizeTo(n, r, s) {\n return null == r && (r = \"auto\"), function (n, r, s, u) {\n null == s && (s = u.baseFontSize), \"%\" === t(n) && (n = i(u.baseFontSize) * (i(n) / 100) + \"px\");\n var h = e(u.baseFontSize);\n n = h(n, \"px\", s = h(s, \"px\"));\n var l = o(u);\n return \"auto\" === r && (r = a(n, u)), {\n fontSize: h(n, u.rhythmUnit, s),\n lineHeight: l(r, s)\n };\n }(n, r, s, u);\n }\n };\n};","var e = require(\"parse-unit\"),\n r = function r(_r) {\n return e(_r)[0];\n};\n\nmodule.exports = function (n) {\n return null == n && (n = n), function (u, i, t, f) {\n null == t && (t = n), null == f && (f = t);\n\n var l = function (r) {\n return e(r)[1];\n }(u);\n\n if (l === i) return u;\n var o = r(u);\n if (\"px\" !== l) if (\"em\" === l) o = r(u) * r(t);else if (\"rem\" === l) o = r(u) * r(n);else {\n if (\"ex\" !== l) return u;\n o = r(u) * r(t) * 2;\n }\n var a = o;\n if (\"px\" !== i) if (\"em\" === i) a = o / r(f);else if (\"rem\" === i) a = o / r(n);else {\n if (\"ex\" !== i) return u;\n a = o / r(f) / 2;\n }\n return parseFloat(a.toFixed(5)) + i;\n };\n};","'use strict';\n\nmodule.exports = function (str, sep) {\n if (typeof str !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n sep = typeof sep === 'undefined' ? '_' : sep;\n return str.replace(/([a-z\\d])([A-Z])/g, '$1' + sep + '$2').replace(/([A-Z]+)([A-Z][a-z\\d]+)/g, '$1' + sep + '$2').toLowerCase();\n};","function isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nmodule.exports = function (lightness, hue, darkBackground) {\n if (typeof hue === \"undefined\") {\n hue = 0;\n }\n\n if (typeof darkBackground === \"undefined\") {\n darkBackground = false;\n } // Convert named hues into numeric lightness value.\n\n\n if (hue === \"cool\") {\n hue = 237;\n } else if (hue === \"slate\") {\n hue = 122;\n } else if (hue === \"warm\") {\n hue = 69;\n }\n\n if (!isNumeric(hue)) {\n throw new Error(\"Hue is not a number\");\n }\n\n if (!isNumeric(lightness)) {\n throw new Error(\"Lightness is not a number\");\n }\n\n if (lightness > 100) {\n lightness = 100;\n }\n\n if (lightness < 0) {\n lightness = 0;\n }\n\n var saturation = 0;\n\n if (hue !== 0) {\n var a = 19.92978;\n var b = -0.3651759;\n var c = 0.001737214;\n saturation = a + b * lightness + c * Math.pow(lightness, 2);\n }\n\n var opacity = 0;\n\n if (darkBackground) {\n opacity = lightness / 100;\n lightness = '100%,';\n } else {\n opacity = (100 - lightness) / 100;\n lightness = '0%,';\n }\n\n return \"hsla(\" + hue + \",\" + saturation + \"%,\" + lightness + opacity + \")\";\n};","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar objectToString = objectProto.toString;\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 */\n\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\n * as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n\n\nfunction isNumber(value) {\n return typeof value == 'number' || isObjectLike(value) && objectToString.call(value) == numberTag;\n}\n\nmodule.exports = isNumber;","// Generated by CoffeeScript 1.9.1\nvar isNumber, ratios;\nisNumber = require('lodash.isnumber');\nratios = {\n \"minor second\": 16 / 15,\n \"major second\": 9 / 8,\n \"minor third\": 6 / 5,\n \"major third\": 4 / 3,\n \"diminished fourth\": Math.sqrt(2),\n \"perfect fifth\": 3 / 2,\n \"minor sixth\": 8 / 5,\n \"golden\": 1.61803398875,\n \"phi\": 1.61803398875,\n \"major sixth\": 5 / 3,\n \"minor seventh\": 16 / 9,\n \"major seventh\": 15 / 8,\n \"octave\": 2,\n \"major tenth\": 5 / 2,\n \"major eleventh\": 8 / 3,\n \"major twelfth\": 3,\n \"double octave\": 4\n};\n\nmodule.exports = function (value, ratio) {\n var r;\n\n if (value == null) {\n value = 0;\n }\n\n if (ratio == null) {\n ratio = \"golden\";\n }\n\n if (isNumber(ratio)) {\n r = ratio;\n } else if (ratios[ratio] != null) {\n r = ratios[ratio];\n } else {\n r = ratios['golden'];\n }\n\n return Math.pow(r, value);\n};","module.exports = function parseUnit(str, out) {\n if (!out) out = [0, ''];\n str = String(str);\n var num = parseFloat(str, 10);\n out[0] = num;\n out[1] = str.match(/[\\d.\\-\\+]*\\s*(.*)/)[1] || '';\n return out;\n};","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; // Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n var length, i, keys;\n\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!equal(a[i], b[i])) return false;\n }\n\n return true;\n } // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n\n\n var it;\n\n if (hasMap && a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n }\n\n return true;\n }\n\n if (hasSet && a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n return true;\n } // END: Modifications\n\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n } // END: fast-deep-equal\n // START: react-fast-compare\n // custom handling for DOM elements\n\n\n if (hasElementType && a instanceof Element) return false; // custom handling for React/Preact\n\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n continue;\n } // all other properties should be traversed as usual\n\n\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n } // END: react-fast-compare\n // START: fast-deep-equal\n\n\n return true;\n }\n\n return a !== a && b !== b;\n} // end fast-deep-equal\n\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if ((error.message || '').match(/stack|recursion/i)) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n } // some other error. we should definitely know about these\n\n\n throw error;\n }\n};","'use strict';\n\nfunction _interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nvar React = require('react');\n\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n } // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n\n\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LARGER_DISPLAY_WIDTH = exports.LARGER_DISPLAY_WIDTH = \"1600px\";\nvar LARGE_DISPLAY_WIDTH = exports.LARGE_DISPLAY_WIDTH = \"1280px\";\nvar DEFAULT_WIDTH = exports.DEFAULT_WIDTH = \"980px\";\nvar TABLET_WIDTH = exports.TABLET_WIDTH = \"768px\";\nvar MOBILE_WIDTH = exports.MOBILE_WIDTH = \"480px\";\nvar LARGER_DISPLAY_MEDIA_QUERY = exports.LARGER_DISPLAY_MEDIA_QUERY = \"@media only screen and (max-width:1600px)\";\nvar LARGE_DISPLAY_MEDIA_QUERY = exports.LARGE_DISPLAY_MEDIA_QUERY = \"@media only screen and (max-width:1280px)\";\nvar DEFAULT_MEDIA_QUERY = exports.DEFAULT_MEDIA_QUERY = \"@media only screen and (max-width:980px)\";\nvar TABLET_MEDIA_QUERY = exports.TABLET_MEDIA_QUERY = \"@media only screen and (max-width:768px)\";\nvar MOBILE_MEDIA_QUERY = exports.MOBILE_MEDIA_QUERY = \"@media only screen and (max-width:480px)\";\nvar MIN_LARGER_DISPLAY_MEDIA_QUERY = exports.MIN_LARGER_DISPLAY_MEDIA_QUERY = \"@media (min-width:1600px)\";\nvar MIN_LARGE_DISPLAY_MEDIA_QUERY = exports.MIN_LARGE_DISPLAY_MEDIA_QUERY = \"@media (min-width:1280px)\";\nvar MIN_DEFAULT_MEDIA_QUERY = exports.MIN_DEFAULT_MEDIA_QUERY = \"@media (min-width:980px)\";\nvar MIN_TABLET_MEDIA_QUERY = exports.MIN_TABLET_MEDIA_QUERY = \"@media (min-width:768px)\";\nvar MIN_MOBILE_MEDIA_QUERY = exports.MIN_MOBILE_MEDIA_QUERY = \"@media (min-width:480px)\";","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* eslint-disable */\n\n/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */\n\nexports.default = \"html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}\";","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _grayPercentage = require(\"gray-percentage\");\n\nvar _grayPercentage2 = _interopRequireDefault(_grayPercentage);\n\nvar _typographyBreakpointConstants = require(\"typography-breakpoint-constants\");\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nvar theme = {\n title: \"Wordpress Theme 2016\",\n baseFontSize: \"16px\",\n baseLineHeight: 1.75,\n scaleRatio: 5 / 2,\n googleFonts: [{\n name: \"Montserrat\",\n styles: [\"700\"]\n }, {\n name: \"Merriweather\",\n styles: [\"400\", \"400i\", \"700\", \"700i\", \"900\", \"900i\"]\n }],\n headerFontFamily: [\"Merriweather\", \"Georgia\", \"serif\"],\n bodyFontFamily: [\"Merriweather\", \"Georgia\", \"serif\"],\n bodyColor: \"hsla(0,0%,0%,0.9)\",\n headerWeight: 900,\n bodyWeight: 400,\n boldWeight: 700,\n overrideStyles: function overrideStyles(_ref, options) {\n var _ref2;\n\n var adjustFontSizeTo = _ref.adjustFontSizeTo,\n scale = _ref.scale,\n rhythm = _ref.rhythm;\n return _ref2 = {\n h1: {\n fontFamily: [\"Montserrat\", \"sans-serif\"].join(\",\")\n },\n blockquote: _extends({}, scale(1 / 5), {\n color: (0, _grayPercentage2.default)(41),\n fontStyle: \"italic\",\n paddingLeft: rhythm(13 / 16),\n marginLeft: rhythm(-1),\n borderLeft: rhythm(3 / 16) + \" solid \" + (0, _grayPercentage2.default)(10)\n }),\n \"blockquote > :last-child\": {\n marginBottom: 0\n },\n \"blockquote cite\": _extends({}, adjustFontSizeTo(options.baseFontSize), {\n color: options.bodyColor,\n fontWeight: options.bodyWeight\n }),\n \"blockquote cite:before\": {\n content: '\"— \"'\n },\n ul: {\n listStyle: \"disc\"\n },\n \"ul,ol\": {\n marginLeft: 0\n }\n }, _defineProperty(_ref2, _typographyBreakpointConstants.MOBILE_MEDIA_QUERY, {\n \"ul,ol\": {\n marginLeft: rhythm(1)\n },\n blockquote: {\n marginLeft: rhythm(-3 / 4),\n marginRight: 0,\n paddingLeft: rhythm(9 / 16)\n }\n }), _defineProperty(_ref2, \"h1,h2,h3,h4,h5,h6\", {\n marginTop: rhythm(2)\n }), _defineProperty(_ref2, \"h4\", {\n letterSpacing: \"0.140625em\",\n textTransform: \"uppercase\"\n }), _defineProperty(_ref2, \"h6\", {\n fontStyle: \"italic\"\n }), _defineProperty(_ref2, \"a\", {\n boxShadow: \"0 1px 0 0 currentColor\",\n color: \"#007acc\",\n textDecoration: \"none\"\n }), _defineProperty(_ref2, \"a:hover,a:active\", {\n boxShadow: \"none\"\n }), _defineProperty(_ref2, \"mark,ins\", {\n background: \"#007acc\",\n color: \"white\",\n padding: rhythm(1 / 16) + \" \" + rhythm(1 / 8),\n textDecoration: \"none\"\n }), _ref2;\n }\n};\nexports.default = theme;","var e = require(\"object-assign\"),\n t = require(\"compass-vertical-rhythm\"),\n i = require(\"modularscale\"),\n o = require(\"gray-percentage\"),\n r = require(\"lodash/set\"),\n n = require(\"lodash/forEach\"),\n a = require(\"lodash/isNumber\"),\n l = require(\"lodash/isString\"),\n d = require(\"lodash/isFunction\"),\n u = require(\"lodash/isArray\"),\n s = require(\"lodash/merge\"),\n h = require(\"lodash/reduce\"),\n g = require(\"typography-normalize\"),\n c = require(\"decamelize\"),\n f = require(\"lodash/isObject\");\n\nfunction m(e) {\n return e && \"object\" == typeof e && \"default\" in e ? e : {\n default: e\n };\n}\n\nvar p = m(e),\n y = m(t),\n b = m(i),\n S = m(o),\n F = m(r),\n v = m(n),\n B = m(a),\n k = m(l),\n x = m(d),\n z = m(u),\n q = m(s),\n j = m(h),\n L = m(g),\n W = m(c),\n T = m(f);\n\nfunction M() {\n return (M = Object.assign || function (e) {\n for (var t = 1; t < arguments.length; t++) {\n var i = arguments[t];\n\n for (var o in i) {\n Object.prototype.hasOwnProperty.call(i, o) && (e[o] = i[o]);\n }\n }\n\n return e;\n }).apply(this, arguments);\n}\n\nvar C = function C(e, t, i) {\n var o;\n return void 0 === e && (e = {}), o = z.default(t) ? t : [t], v.default(o, function (t) {\n v.default(i, function (i, o) {\n F.default(e, t + \".\" + o, i);\n });\n }), e;\n},\n O = [\"inherit\", \"default\", \"serif\", \"sans-serif\", \"monospace\", \"fantasy\", \"cursive\", \"-apple-system\"],\n R = function R(e) {\n return -1 !== O.indexOf(e) ? e : \"'\" + e + \"'\";\n},\n H = function e(t) {\n return j.default(t, function (t, i, o) {\n return t += o + \"{\", v.default(i, function (i, o) {\n if (T.default(i)) {\n var r = {};\n r[o] = i, t += e(r);\n } else {\n var n = W.default(o, \"-\") + \":\" + i + \";\";\n [\"Webkit\", \"ms\", \"Moz\", \"O\"].forEach(function (e) {\n o.slice(0, e.length) === e && (n = \"-\" + n);\n }), t += n;\n }\n }), t += \"}\";\n }, \"\");\n},\n N = function N(e, t, i) {\n var o = H(i);\n return t.includeNormalize && (o = \"\" + L.default + o), o;\n};\n\nmodule.exports = function (e) {\n var t = p.default({}, {\n baseFontSize: \"16px\",\n baseLineHeight: 1.45,\n headerLineHeight: 1.1,\n scaleRatio: 2,\n googleFonts: [],\n headerFontFamily: [\"-apple-system\", \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"sans-serif\"],\n bodyFontFamily: [\"georgia\", \"serif\"],\n headerColor: \"inherit\",\n bodyColor: \"hsla(0,0%,0%,0.8)\",\n headerWeight: \"bold\",\n bodyWeight: \"normal\",\n boldWeight: \"bold\",\n includeNormalize: !0,\n blockMarginBottom: 1\n }, e),\n i = y.default(t);\n return i.scale = function (e) {\n var o = parseInt(t.baseFontSize, 10),\n r = b.default(e, t.scaleRatio) * o + \"px\";\n return i.adjustFontSizeTo(r);\n }, M({\n options: t\n }, i, {\n createStyles: function createStyles() {\n return this.toString();\n },\n toJSON: function toJSON() {\n return function (e, t) {\n var i,\n o = {},\n r = e.establishBaseline();\n o = C(o, \"html\", {\n font: r.fontSize + \"/\" + r.lineHeight + \" \" + t.bodyFontFamily.map(R).join(\",\"),\n boxSizing: \"border-box\",\n overflowY: \"scroll\"\n }), o = C(o, [\"*\", \"*:before\", \"*:after\"], {\n boxSizing: \"inherit\"\n }), o = C(o, \"body\", {\n color: t.bodyColor,\n fontFamily: t.bodyFontFamily.map(R).join(\",\"),\n fontWeight: t.bodyWeight,\n wordWrap: \"break-word\",\n fontKerning: \"normal\",\n MozFontFeatureSettings: '\"kern\", \"liga\", \"clig\", \"calt\"',\n msFontFeatureSettings: '\"kern\", \"liga\", \"clig\", \"calt\"',\n WebkitFontFeatureSettings: '\"kern\", \"liga\", \"clig\", \"calt\"',\n fontFeatureSettings: '\"kern\", \"liga\", \"clig\", \"calt\"'\n }), o = C(o, \"img\", {\n maxWidth: \"100%\"\n }), i = B.default(t.blockMarginBottom) ? e.rhythm(t.blockMarginBottom) : k.default(t.blockMarginBottom) ? t.blockMarginBottom : e.rhythm(1), o = C(o, [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hgroup\", \"ul\", \"ol\", \"dl\", \"dd\", \"p\", \"figure\", \"pre\", \"table\", \"fieldset\", \"blockquote\", \"form\", \"noscript\", \"iframe\", \"img\", \"hr\", \"address\"], {\n marginLeft: 0,\n marginRight: 0,\n marginTop: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n marginBottom: i\n }), o = C(o, \"blockquote\", {\n marginRight: e.rhythm(1),\n marginBottom: i,\n marginLeft: e.rhythm(1)\n }), o = C(o, [\"b\", \"strong\", \"dt\", \"th\"], {\n fontWeight: t.boldWeight\n }), o = C(o, \"hr\", {\n background: S.default(80),\n border: \"none\",\n height: \"1px\",\n marginBottom: \"calc(\" + i + \" - 1px)\"\n }), o = C(o, [\"ol\", \"ul\"], {\n listStylePosition: \"outside\",\n listStyleImage: \"none\",\n marginLeft: e.rhythm(1)\n }), o = C(o, \"li\", {\n marginBottom: \"calc(\" + i + \" / 2)\"\n }), o = C(o, [\"ol li\", \"ul li\"], {\n paddingLeft: 0\n }), o = C(o, [\"li > ol\", \"li > ul\"], {\n marginLeft: e.rhythm(1),\n marginBottom: \"calc(\" + i + \" / 2)\",\n marginTop: \"calc(\" + i + \" / 2)\"\n }), o = C(o, [\"blockquote *:last-child\", \"li *:last-child\", \"p *:last-child\"], {\n marginBottom: 0\n }), o = C(o, [\"li > p\"], {\n marginBottom: \"calc(\" + i + \" / 2)\"\n }), o = C(o, [\"code\", \"kbd\", \"pre\", \"samp\"], M({}, e.adjustFontSizeTo(\"85%\"))), (o = C(o, [\"abbr\", \"acronym\"], {\n borderBottom: \"1px dotted \" + S.default(50),\n cursor: \"help\"\n }))[\"abbr[title]\"] = {\n borderBottom: \"1px dotted \" + S.default(50),\n cursor: \"help\",\n textDecoration: \"none\"\n }, o = C(o, [\"table\"], M({}, e.adjustFontSizeTo(t.baseFontSize), {\n borderCollapse: \"collapse\",\n width: \"100%\"\n })), o = C(o, [\"thead\"], {\n textAlign: \"left\"\n }), o = C(o, [\"td,th\"], {\n textAlign: \"left\",\n borderBottom: \"1px solid \" + S.default(88),\n fontFeatureSettings: '\"tnum\"',\n MozFontFeatureSettings: '\"tnum\"',\n msFontFeatureSettings: '\"tnum\"',\n WebkitFontFeatureSettings: '\"tnum\"',\n paddingLeft: e.rhythm(2 / 3),\n paddingRight: e.rhythm(2 / 3),\n paddingTop: e.rhythm(.5),\n paddingBottom: \"calc(\" + e.rhythm(.5) + \" - 1px)\"\n }), o = C(o, \"th:first-child,td:first-child\", {\n paddingLeft: 0\n }), o = C(o, \"th:last-child,td:last-child\", {\n paddingRight: 0\n }), o = C(o, [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"], {\n color: t.headerColor,\n fontFamily: t.headerFontFamily.map(R).join(\",\"),\n fontWeight: t.headerWeight,\n textRendering: \"optimizeLegibility\"\n });\n var n = e.scale(1),\n a = e.scale(.6),\n l = e.scale(.4),\n d = e.scale(0),\n u = e.scale(-.2),\n s = e.scale(-.3);\n return v.default([n, a, l, d, u, s], function (e, i) {\n o = F.default(o, \"h\" + (i + 1) + \".fontSize\", e.fontSize), o = F.default(o, \"h\" + (i + 1) + \".lineHeight\", t.headerLineHeight);\n }), z.default(t.plugins) && (o = j.default(t.plugins, function (i, o) {\n return q.default(i, o(e, t, i));\n }, o)), t.overrideStyles && x.default(t.overrideStyles) && (o = q.default(o, t.overrideStyles(e, t, o))), t.overrideThemeStyles && x.default(t.overrideThemeStyles) && (o = q.default(o, t.overrideThemeStyles(e, t, o))), o;\n }(i, t);\n },\n toString: function toString() {\n return N(0, t, this.toJSON());\n },\n injectStyles: function injectStyles() {\n if (\"undefined\" != typeof document) if (document.getElementById(\"typography.js\")) document.getElementById(\"typography.js\").innerHTML = this.toString();else {\n var e = document.createElement(\"style\");\n e.id = \"typography.js\", e.innerHTML = this.toString();\n var t = document.head;\n t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e);\n }\n }\n });\n};","import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase(); // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n } // Special case for innerHTML which doesn't work lowercased\n\n\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n }); // Update seen tags with tags from this instance\n\n var keys = Object.keys(instanceSeenTags);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n updateTitle(title, titleAttributes);\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n var addedTags = {};\n var removedTags = {};\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n cb && cb();\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\"); // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps; // assigning into an array to define toString function on it\n\n\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = {\n __html: content\n };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, {\n title: title,\n titleAttributes: titleAttributes\n }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``} ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \" console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\nexport default HelmetExport;\nexport { HelmetExport as Helmet };","/**\n * SEO component that queries for data with\n * Gatsby's useStaticQuery React hook\n *\n * See: https://www.gatsbyjs.org/docs/use-static-query/\n */\n\nimport * as React from 'react';\nimport { Helmet } from 'react-helmet';\nimport { useStaticQuery, graphql } from 'gatsby';\n\ninterface ISEOProps {\n description?: string;\n lang?: string;\n meta?: { name: string; content: string }[];\n title: string;\n facebookImage?: string;\n twitterImage?: string;\n}\n\nconst SEO: React.FunctionComponent = ({\n description,\n lang = 'en',\n meta = [],\n title,\n facebookImage,\n twitterImage\n}) => {\n const { site } = useStaticQuery(\n graphql`\n query {\n site {\n siteMetadata {\n title\n description\n social {\n twitter\n }\n }\n }\n }\n `,\n );\n\n const metaDescription =\n description || site.siteMetadata.description;\n\n const imageTags: React.DetailedHTMLProps<\n React.MetaHTMLAttributes,\n HTMLMetaElement\n >[] = [];\n if (facebookImage) imageTags.push({\n property: `og:image`,\n content: facebookImage,\n })\n if (twitterImage) imageTags.push({\n property: `twitter:image`,\n content: twitterImage,\n })\n\n return (\n \n );\n};\n\nexport default SEO;\n","import Typography from 'typography';\nimport Wordpress2016 from 'typography-theme-wordpress-2016';\n\nWordpress2016.overrideThemeStyles = () => {\n return {\n h1: {\n fontWeight: 700,\n color: '#111'\n },\n h2: { color: '#111'},\n h3: { color: '#111'},\n h4: { color: '#111'},\n body: {\n color: '#222'\n },\n strong: {\n fontWeight: 900,\n color: '#000',\n backgroundColor: '#ff9'\n },\n 'a.gatsby-resp-image-link': {\n boxShadow: `none`,\n },\n };\n};\n\ndelete Wordpress2016.googleFonts;\n\nconst typography = new Typography(Wordpress2016);\n\n// Hot reload typography in development.\n// eslint-disable-next-line\nif (process.env.NODE_ENV !== `production`) {\n typography.injectStyles();\n}\n\nexport default typography;\nexport const rhythm = typography.rhythm;\nexport const scale = typography.scale;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var arrayReduce = require('./_arrayReduce'),\n baseEach = require('./_baseEach'),\n baseIteratee = require('./_baseIteratee'),\n baseReduce = require('./_baseReduce'),\n isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n"],"names":["e","n","t","i","r","baseFontSize","baseLineHeight","rhythmUnit","defaultRhythmBorderWidth","defaultRhythmBorderStyle","roundToNearestHalfLine","minLinePadding","a","o","s","baseLineHeightInPx","u","Math","ceil","floor","parseFloat","toFixed","module","exports","JSON","parse","stringify","Object","assign","h","rhythm","establishBaseline","fontSize","lineHeight","toString","linesForFontSize","adjustFontSizeTo","l","_r","f","str","sep","TypeError","replace","toLowerCase","isNumeric","isNaN","isFinite","lightness","hue","darkBackground","Error","saturation","pow","opacity","objectToString","prototype","value","isObjectLike","call","isNumber","ratios","sqrt","ratio","out","String","num","match","hasElementType","Element","hasMap","Map","hasSet","Set","hasArrayBuffer","ArrayBuffer","isView","equal","b","constructor","length","keys","it","Array","isArray","size","entries","next","done","has","get","RegExp","source","flags","valueOf","hasOwnProperty","$$typeof","error","message","console","warn","ex","React","React__default","_defineProperty","obj","key","defineProperty","enumerable","configurable","writable","canUseDOM","window","document","createElement","reducePropsToState","handleStateChangeOnClient","mapStateOnServer","WrappedComponent","state","mountedInstances","emitChange","map","instance","props","SideEffect","_PureComponent","subClass","superClass","apply","this","arguments","create","__proto__","peek","rewind","recordedState","undefined","_proto","UNSAFE_componentWillMount","push","componentDidUpdate","componentWillUnmount","index","indexOf","splice","render","PureComponent","displayName","name","getDisplayName","LARGER_DISPLAY_WIDTH","LARGE_DISPLAY_WIDTH","DEFAULT_WIDTH","TABLET_WIDTH","MOBILE_WIDTH","LARGER_DISPLAY_MEDIA_QUERY","LARGE_DISPLAY_MEDIA_QUERY","DEFAULT_MEDIA_QUERY","TABLET_MEDIA_QUERY","MOBILE_MEDIA_QUERY","MIN_LARGER_DISPLAY_MEDIA_QUERY","MIN_LARGE_DISPLAY_MEDIA_QUERY","MIN_DEFAULT_MEDIA_QUERY","MIN_TABLET_MEDIA_QUERY","MIN_MOBILE_MEDIA_QUERY","_extends","target","_grayPercentage","_grayPercentage2","__esModule","default","_typographyBreakpointConstants","theme","title","scaleRatio","googleFonts","styles","headerFontFamily","bodyFontFamily","bodyColor","headerWeight","bodyWeight","boldWeight","overrideStyles","_ref","options","_ref2","scale","h1","fontFamily","join","blockquote","color","fontStyle","paddingLeft","marginLeft","borderLeft","marginBottom","fontWeight","content","ul","listStyle","marginRight","marginTop","letterSpacing","textTransform","boxShadow","textDecoration","background","padding","d","g","c","m","p","y","S","F","v","B","k","x","z","q","j","L","W","T","M","C","O","R","H","forEach","slice","N","includeNormalize","headerLineHeight","headerColor","blockMarginBottom","parseInt","createStyles","toJSON","font","boxSizing","overflowY","wordWrap","fontKerning","MozFontFeatureSettings","msFontFeatureSettings","WebkitFontFeatureSettings","fontFeatureSettings","maxWidth","paddingBottom","paddingRight","paddingTop","border","height","listStylePosition","listStyleImage","borderBottom","cursor","borderCollapse","width","textAlign","textRendering","plugins","overrideThemeStyles","injectStyles","getElementById","innerHTML","id","head","firstChild","insertBefore","appendChild","clock","Component","_class","_temp","ATTRIBUTE_NAMES","TAG_NAMES","BASE","BODY","HEAD","HTML","LINK","META","NOSCRIPT","SCRIPT","STYLE","TITLE","TAG_PROPERTIES","REACT_TAG_MAP","accesskey","charset","class","contenteditable","contextmenu","itemprop","tabindex","HELMET_PROPS","HTML_TAG_MAP","reduce","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","_typeof","Symbol","iterator","classCallCheck","Constructor","createClass","defineProperties","descriptor","protoProps","staticProps","objectWithoutProperties","possibleConstructorReturn","self","ReferenceError","encodeSpecialCharacters","encode","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","filter","tagAttrs","current","getBaseTagFromPropsList","primaryAttributes","reverse","innermostBaseTag","tag","lowerCaseAttributeKey","concat","getTagsFromPropsList","tagName","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","tagUnion","property","rafPolyfill","Date","now","callback","currentTime","setTimeout","cafPolyfill","clearTimeout","requestAnimationFrame","bind","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msg","_helmetCallback","commitTagChanges","newState","cb","baseTag","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","attributes","elementTag","getElementsByTagName","helmetAttributeString","getAttribute","helmetAttributes","split","attributesToRemove","attributeKeys","attribute","setAttribute","indexToSave","_i","removeAttribute","type","tags","headElement","querySelector","tagNodes","querySelectorAll","indexToDelete","newElement","styleSheet","cssText","createTextNode","some","existingTag","isEqualNode","parentNode","removeChild","generateElementAttributesAsString","attr","convertElementAttributestoReactProps","initProps","getMethodsForTag","toComponent","_initProps","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","dangerouslySetInnerHTML","__html","generateTagsAsReactComponent","attributeHtml","string","tagContent","isSelfClosing","generateTagsAsString","_ref$title","base","link","meta","noscript","script","style","HelmetSideEffects","defer","HelmetExport","_React$Component","HelmetWrapper","setPrototypeOf","inherits","shouldComponentUpdate","nextProps","mapNestedChildrenToProps","child","nestedChildren","flattenArrayTypeChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_babelHelpers$extends2","_babelHelpers$extends3","newProps","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","warnOnInvalidChildren","mapChildrenToProps","children","_this2","_child$props","initAttributes","convertReactPropstoHtmlAttributes","_props","set","propTypes","defaultTitle","titleTemplate","defaultProps","mappedState","renderStatic","description","lang","facebookImage","twitterImage","site","useStaticQuery","metaDescription","siteMetadata","imageTags","social","twitter","Wordpress2016","h2","h3","h4","body","strong","backgroundColor","typography","Typography","DataView","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","clear","entry","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","Promise","setCacheAdd","setCacheHas","SetCache","values","__data__","add","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","data","Uint8Array","WeakMap","func","thisArg","args","array","iteratee","predicate","resIndex","result","baseTimes","isArguments","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","offset","accumulator","initAccum","baseAssignValue","eq","object","objValue","isObject","objectCreate","baseCreate","proto","baseForOwn","baseEach","createBaseEach","baseFor","createBaseFor","castPath","toKey","path","arrayPush","keysFunc","symbolsFunc","getRawTag","symToStringTag","toStringTag","baseGetTag","baseIsEqualDeep","baseIsEqual","other","bitmask","customizer","stack","equalArrays","equalByTag","equalObjects","getTag","argsTag","arrayTag","objectTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isFunction","isMasked","toSource","reIsHostCtor","funcProto","Function","objectProto","funcToString","reIsNative","test","isLength","typedArrayTags","baseMatches","baseMatchesProperty","identity","isPrototype","nativeKeys","nativeKeysIn","isProto","baseIsMatch","getMatchData","matchesStrictComparable","hasIn","isKey","isStrictComparable","assignMergeValue","baseMergeDeep","keysIn","safeGet","baseMerge","srcIndex","newValue","cloneBuffer","cloneTypedArray","copyArray","initCloneObject","isArrayLikeObject","isPlainObject","toPlainObject","mergeFunc","stacked","isCommon","isTyped","baseGet","collection","eachFunc","overRest","setToString","start","assignValue","lastIndex","nested","constant","baseSetToString","arrayMap","isSymbol","symbolProto","symbolToString","baseToString","cache","stringToPath","arrayBuffer","byteLength","root","freeExports","nodeType","freeModule","Buffer","allocUnsafe","buffer","isDeep","copy","cloneArrayBuffer","typedArray","byteOffset","isNew","coreJsData","baseRest","isIterateeCall","assigner","sources","guard","isArrayLike","fromRight","iterable","arraySome","cacheHas","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","symbolValueOf","convert","getAllKeys","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","freeGlobal","baseGetAllKeys","getSymbols","isKeyable","baseIsNative","getValue","getPrototype","overArg","getPrototypeOf","nativeObjectToString","isOwn","unmasked","arrayFilter","stubArray","propertyIsEnumerable","nativeGetSymbols","getOwnPropertySymbols","symbol","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","resolve","Ctor","ctorString","hasFunc","nativeCreate","reIsUint","reIsDeepProp","reIsPlainProp","uid","maskSrcKey","exec","IE_PROTO","assocIndexOf","pop","getMapData","memoize","freeProcess","process","nodeUtil","types","require","binding","transform","arg","nativeMax","max","otherArgs","freeSelf","shortOut","nativeNow","count","lastCalled","stamp","remaining","pairs","LARGE_ARRAY_SIZE","memoizeCapped","rePropName","reEscapeChar","charCodeAt","number","quote","subString","arrayEach","castFunction","defaultValue","baseHasIn","hasPath","baseIsArguments","stubFalse","objectCtorString","baseIsTypedArray","baseUnary","nodeIsTypedArray","arrayLikeKeys","baseKeys","baseKeysIn","resolver","memoized","Cache","merge","createAssigner","baseProperty","basePropertyDeep","arrayReduce","baseIteratee","baseReduce","baseSet","copyObject"],"sourceRoot":""} \ No newline at end of file diff --git a/component---src-pages-404-tsx-104170120904e71ad973.js.map b/component---src-pages-404-tsx-104170120904e71ad973.js.map index cfbafffc9..3d7df371d 100644 --- a/component---src-pages-404-tsx-104170120904e71ad973.js.map +++ b/component---src-pages-404-tsx-104170120904e71ad973.js.map @@ -1 +1 @@ -{"version":3,"file":"component---src-pages-404-tsx-104170120904e71ad973.js","mappings":"yIA2EA,IA/DsD,SAAC,GAIhD,IAEDA,EALJC,EAGI,EAHJA,SACAC,EAEI,EAFJA,MACAC,EACI,EADJA,SA4CA,OAtCEH,EAJY,MAGVC,EAASG,SAET,sBACEC,MAAK,kBACAC,EAAAA,EAAAA,IAAM,KADN,CAEHC,cAAcC,EAAAA,EAAAA,IAAO,KACrBC,UAAW,KAGb,gBAAC,EAAAC,KAAD,CACEL,MAAO,CACLM,UAAU,OACVC,MAAM,WAERC,GAAE,KAEDX,IAML,sBACEG,MAAO,CACLI,UAAW,IAGb,gBAAC,EAAAC,KAAD,CACEL,MAAO,CACLM,UAAU,OACVC,MAAM,WAERC,GAAE,KAEDX,IAMP,uBACEG,MAAO,CACLS,WAAW,OACXC,YAAY,OACZC,UAAUR,EAAAA,EAAAA,IAAO,IACjBS,SAAYT,EAAAA,EAAAA,IAAO,KAAZ,KAAoBA,EAAAA,EAAAA,IAAO,EAAI,KAGxC,8BAASR,GACT,4BAAOG,GACP,oCAAW,IAAIe,MAAOC,cAAtB,2B,6DCpCN,UAfkE,SAAC,GAG5D,IAFLC,EAEI,EAFJA,KACAnB,EACI,EADJA,SAEMoB,EAAYD,EAAKE,KAAKC,aAAarB,MAEzC,OACE,gBAAC,IAAD,CAAQD,SAAUA,EAAUC,MAAOmB,GACjC,gBAAC,IAAD,CAAKnB,MAAM,mBACX,uCACA","sources":["webpack://website/./src/components/layout.tsx","webpack://website/./src/pages/404.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\n\nimport { rhythm, scale } from '../utils/typography';\n\ninterface ILayoutProps {\n location: {\n pathname: string;\n };\n title: string;\n}\n\nconst Layout: React.FunctionComponent = ({\n location,\n title,\n children,\n}) => {\n const rootPath = `${__PATH_PREFIX__}/`;\n let header;\n\n if (location.pathname === rootPath) {\n header = (\n \n \n {title}\n \n \n );\n } else {\n header = (\n \n \n {title}\n \n \n );\n }\n return (\n \n
{header}
\n
{children}
\n
© {new Date().getFullYear()} All Rights Reserved
\n \n );\n};\n\nexport default Layout;\n","import * as React from 'react';\nimport { graphql } from 'gatsby';\n\nimport Layout from '../components/layout';\nimport SEO from '../components/seo';\n\ninterface INotFoundPageProps {\n data: {\n site: {\n siteMetadata: {\n title: string;\n };\n };\n };\n location: {\n pathname: string;\n };\n}\n\nconst NotFoundPage: React.FunctionComponent = ({\n data,\n location,\n}) => {\n const siteTitle = data.site.siteMetadata.title;\n\n return (\n \n \n

Not Found

\n

You just hit a route that doesn't exist... the sadness.

\n
\n );\n};\n\nexport default NotFoundPage;\n\nexport const pageQuery = graphql`\n query {\n site {\n siteMetadata {\n title\n }\n }\n }\n`;\n"],"names":["header","location","title","children","pathname","style","scale","marginBottom","rhythm","marginTop","Link","boxShadow","color","to","marginLeft","marginRight","maxWidth","padding","Date","getFullYear","data","siteTitle","site","siteMetadata"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"component---src-pages-404-tsx-104170120904e71ad973.js","mappings":"yIA2EA,IA/DsD,SAAC,GAIhD,IAEDA,EALJC,EAGI,EAHJA,SACAC,EAEI,EAFJA,MACAC,EACI,EADJA,SA4CA,OAtCEH,EAJY,MAGVC,EAASG,SAET,sBACEC,MAAK,kBACAC,EAAAA,EAAAA,IAAM,KADN,CAEHC,cAAcC,EAAAA,EAAAA,IAAO,KACrBC,UAAW,KAGb,gBAAC,EAAAC,KAAD,CACEL,MAAO,CACLM,UAAU,OACVC,MAAM,WAERC,GAAE,KAEDX,IAML,sBACEG,MAAO,CACLI,UAAW,IAGb,gBAAC,EAAAC,KAAD,CACEL,MAAO,CACLM,UAAU,OACVC,MAAM,WAERC,GAAE,KAEDX,IAMP,uBACEG,MAAO,CACLS,WAAW,OACXC,YAAY,OACZC,UAAUR,EAAAA,EAAAA,IAAO,IACjBS,SAAYT,EAAAA,EAAAA,IAAO,KAAZ,KAAoBA,EAAAA,EAAAA,IAAO,EAAI,KAGxC,8BAASR,GACT,4BAAOG,GACP,oCAAW,IAAIe,MAAOC,cAAtB,wBAGL,C,+DCvCD,UAfkE,SAAC,GAG5D,IAFLC,EAEI,EAFJA,KACAnB,EACI,EADJA,SAEMoB,EAAYD,EAAKE,KAAKC,aAAarB,MAEzC,OACE,gBAAC,IAAD,CAAQD,SAAUA,EAAUC,MAAOmB,GACjC,gBAAC,IAAD,CAAKnB,MAAM,mBACX,uCACA,oFAGL,C","sources":["webpack://website/./src/components/layout.tsx","webpack://website/./src/pages/404.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\n\nimport { rhythm, scale } from '../utils/typography';\n\ninterface ILayoutProps {\n location: {\n pathname: string;\n };\n title: string;\n}\n\nconst Layout: React.FunctionComponent = ({\n location,\n title,\n children,\n}) => {\n const rootPath = `${__PATH_PREFIX__}/`;\n let header;\n\n if (location.pathname === rootPath) {\n header = (\n \n \n {title}\n \n \n );\n } else {\n header = (\n \n \n {title}\n \n \n );\n }\n return (\n \n
{header}
\n
{children}
\n
© {new Date().getFullYear()} All Rights Reserved
\n \n );\n};\n\nexport default Layout;\n","import * as React from 'react';\nimport { graphql } from 'gatsby';\n\nimport Layout from '../components/layout';\nimport SEO from '../components/seo';\n\ninterface INotFoundPageProps {\n data: {\n site: {\n siteMetadata: {\n title: string;\n };\n };\n };\n location: {\n pathname: string;\n };\n}\n\nconst NotFoundPage: React.FunctionComponent = ({\n data,\n location,\n}) => {\n const siteTitle = data.site.siteMetadata.title;\n\n return (\n \n \n

Not Found

\n

You just hit a route that doesn't exist... the sadness.

\n
\n );\n};\n\nexport default NotFoundPage;\n\nexport const pageQuery = graphql`\n query {\n site {\n siteMetadata {\n title\n }\n }\n }\n`;\n"],"names":["header","location","title","children","pathname","style","scale","marginBottom","rhythm","marginTop","Link","boxShadow","color","to","marginLeft","marginRight","maxWidth","padding","Date","getFullYear","data","siteTitle","site","siteMetadata"],"sourceRoot":""} \ No newline at end of file diff --git a/component---src-pages-index-tsx-f3cd6267e6fe4f91c637.js.map b/component---src-pages-index-tsx-f3cd6267e6fe4f91c637.js.map index 20bf9c796..605c58f28 100644 --- a/component---src-pages-index-tsx-f3cd6267e6fe4f91c637.js.map +++ b/component---src-pages-index-tsx-f3cd6267e6fe4f91c637.js.map @@ -1 +1 @@ -{"version":3,"file":"component---src-pages-index-tsx-f3cd6267e6fe4f91c637.js","mappings":"yIA2EA,IA/DsD,SAAC,GAIhD,IAEDA,EALJC,EAGI,EAHJA,SACAC,EAEI,EAFJA,MACAC,EACI,EADJA,SA4CA,OAtCEH,EAJY,MAGVC,EAASG,SAET,sBACEC,MAAK,kBACAC,EAAAA,EAAAA,IAAM,KADN,CAEHC,cAAcC,EAAAA,EAAAA,IAAO,KACrBC,UAAW,KAGb,gBAAC,EAAAC,KAAD,CACEL,MAAO,CACLM,UAAU,OACVC,MAAM,WAERC,GAAE,KAEDX,IAML,sBACEG,MAAO,CACLI,UAAW,IAGb,gBAAC,EAAAC,KAAD,CACEL,MAAO,CACLM,UAAU,OACVC,MAAM,WAERC,GAAE,KAEDX,IAMP,uBACEG,MAAO,CACLS,WAAW,OACXC,YAAY,OACZC,UAAUR,EAAAA,EAAAA,IAAO,IACjBS,SAAYT,EAAAA,EAAAA,IAAO,KAAZ,KAAoBA,EAAAA,EAAAA,IAAO,EAAI,KAGxC,8BAASR,GACT,4BAAOG,GACP,oCAAW,IAAIe,MAAOC,cAAtB,2B,2FCKN,UArC4D,SAAC,GAGtD,IAFLC,EAEI,EAFJA,KACAnB,EACI,EADJA,SAEMoB,EAAYD,EAAKE,KAAKC,aAAarB,MACnCsB,EAAUJ,EAAKE,KAAKC,aAAaC,QAGvC,OACE,gBAAC,IAAD,CAAQvB,SAAUA,EAAUC,MAAOmB,GACjC,gBAAC,IAAD,CAAKnB,MAAM,YACX,gBAAC,IAAD,MACCsB,EAAQC,QAAO,SAAAC,GAAC,OAAKA,EAAEC,YAAUC,KAAI,YAA0C,IAAvC1B,EAAsC,EAAtCA,MAAO2B,EAA+B,EAA/BA,GAAIC,EAA2B,EAA3BA,YAAaC,EAAc,EAAdA,QAC/D,OACE,2BAASC,UAAU,iBAAiBC,IAAKJ,GACvC,8BACE,sBACExB,MAAO,CACLE,cAAcC,EAAAA,EAAAA,IAAO,EAAI,KAG3B,uBAAKH,MAAO,CAAC6B,MAAO,SAAUC,MAAO,IAAKC,IAAKN,IAC/C,gBAAC,EAAApB,KAAD,CAAML,MAAO,CAAEM,UAAU,QAAWE,GAAE,UAAYgB,GAC/C3B,KAIP,+BACE,yBAAI6B","sources":["webpack://website/./src/components/layout.tsx","webpack://website/./src/pages/index.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\n\nimport { rhythm, scale } from '../utils/typography';\n\ninterface ILayoutProps {\n location: {\n pathname: string;\n };\n title: string;\n}\n\nconst Layout: React.FunctionComponent = ({\n location,\n title,\n children,\n}) => {\n const rootPath = `${__PATH_PREFIX__}/`;\n let header;\n\n if (location.pathname === rootPath) {\n header = (\n \n \n {title}\n \n \n );\n } else {\n header = (\n \n \n {title}\n \n \n );\n }\n return (\n \n
{header}
\n
{children}
\n
© {new Date().getFullYear()} All Rights Reserved
\n \n );\n};\n\nexport default Layout;\n","import * as React from 'react';\nimport { Link, graphql } from 'gatsby';\n\nimport Bio from '../components/bio';\nimport Layout from '../components/layout';\nimport SEO from '../components/seo';\nimport { rhythm } from '../utils/typography';\n\n\ninterface IBlogIndexProps {\n data: {\n allMarkdownRemark: {\n edges: {\n node: {\n excerpt: string;\n frontmatter: { title: string; date: string; description: string };\n fields: { slug: string };\n };\n }[];\n };\n site: {\n siteMetadata: {\n title: string;\n courses: {\n id: string;\n title: string;\n summary: string;\n squareImage: string;\n disabled: boolean;\n }[];\n };\n };\n };\n location: {\n pathname: string;\n };\n}\n\nconst BlogIndex: React.FunctionComponent = ({\n data,\n location,\n}) => {\n const siteTitle = data.site.siteMetadata.title;\n const courses = data.site.siteMetadata.courses;\n // const posts = data.allMarkdownRemark.edges;\n\n return (\n \n \n \n {courses.filter(c => !c.disabled).map(({ title, id, squareImage, summary }) => {\n return (\n
\n
\n \n \n \n {title}\n \n \n
\n
\n

{summary}

\n
\n
\n );\n })}\n
\n );\n};\n\nexport default BlogIndex;\n\nexport const pageQuery = graphql`\n query {\n site {\n siteMetadata {\n title\n courses {\n id\n title\n summary\n squareImage\n facebookImage\n twitterImage\n femCourseUrl\n femCoursePublished\n disabled\n }\n }\n }\n allMarkdownRemark(sort: { fields: [frontmatter___order], order: ASC }) {\n edges {\n node {\n excerpt\n fields {\n slug\n }\n frontmatter {\n date(formatString: \"MMMM DD, YYYY\")\n title\n description\n order\n }\n }\n }\n }\n }\n`;\n"],"names":["header","location","title","children","pathname","style","scale","marginBottom","rhythm","marginTop","Link","boxShadow","color","to","marginLeft","marginRight","maxWidth","padding","Date","getFullYear","data","siteTitle","site","siteMetadata","courses","filter","c","disabled","map","id","squareImage","summary","className","key","float","width","src"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"component---src-pages-index-tsx-f3cd6267e6fe4f91c637.js","mappings":"yIA2EA,IA/DsD,SAAC,GAIhD,IAEDA,EALJC,EAGI,EAHJA,SACAC,EAEI,EAFJA,MACAC,EACI,EADJA,SA4CA,OAtCEH,EAJY,MAGVC,EAASG,SAET,sBACEC,MAAK,kBACAC,EAAAA,EAAAA,IAAM,KADN,CAEHC,cAAcC,EAAAA,EAAAA,IAAO,KACrBC,UAAW,KAGb,gBAAC,EAAAC,KAAD,CACEL,MAAO,CACLM,UAAU,OACVC,MAAM,WAERC,GAAE,KAEDX,IAML,sBACEG,MAAO,CACLI,UAAW,IAGb,gBAAC,EAAAC,KAAD,CACEL,MAAO,CACLM,UAAU,OACVC,MAAM,WAERC,GAAE,KAEDX,IAMP,uBACEG,MAAO,CACLS,WAAW,OACXC,YAAY,OACZC,UAAUR,EAAAA,EAAAA,IAAO,IACjBS,SAAYT,EAAAA,EAAAA,IAAO,KAAZ,KAAoBA,EAAAA,EAAAA,IAAO,EAAI,KAGxC,8BAASR,GACT,4BAAOG,GACP,oCAAW,IAAIe,MAAOC,cAAtB,wBAGL,C,6FCED,UArC4D,SAAC,GAGtD,IAFLC,EAEI,EAFJA,KACAnB,EACI,EADJA,SAEMoB,EAAYD,EAAKE,KAAKC,aAAarB,MACnCsB,EAAUJ,EAAKE,KAAKC,aAAaC,QAGvC,OACE,gBAAC,IAAD,CAAQvB,SAAUA,EAAUC,MAAOmB,GACjC,gBAAC,IAAD,CAAKnB,MAAM,YACX,gBAAC,IAAD,MACCsB,EAAQC,QAAO,SAAAC,GAAC,OAAKA,EAAEC,QAAP,IAAiBC,KAAI,YAA0C,IAAvC1B,EAAsC,EAAtCA,MAAO2B,EAA+B,EAA/BA,GAAIC,EAA2B,EAA3BA,YAAaC,EAAc,EAAdA,QAC/D,OACE,2BAASC,UAAU,iBAAiBC,IAAKJ,GACvC,8BACE,sBACExB,MAAO,CACLE,cAAcC,EAAAA,EAAAA,IAAO,EAAI,KAG3B,uBAAKH,MAAO,CAAC6B,MAAO,SAAUC,MAAO,IAAKC,IAAKN,IAC/C,gBAAC,EAAApB,KAAD,CAAML,MAAO,CAAEM,UAAU,QAAWE,GAAE,UAAYgB,GAC/C3B,KAIP,+BACE,yBAAI6B,IAIX,IAGN,C","sources":["webpack://website/./src/components/layout.tsx","webpack://website/./src/pages/index.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\n\nimport { rhythm, scale } from '../utils/typography';\n\ninterface ILayoutProps {\n location: {\n pathname: string;\n };\n title: string;\n}\n\nconst Layout: React.FunctionComponent = ({\n location,\n title,\n children,\n}) => {\n const rootPath = `${__PATH_PREFIX__}/`;\n let header;\n\n if (location.pathname === rootPath) {\n header = (\n \n \n {title}\n \n \n );\n } else {\n header = (\n \n \n {title}\n \n \n );\n }\n return (\n \n
{header}
\n
{children}
\n
© {new Date().getFullYear()} All Rights Reserved
\n \n );\n};\n\nexport default Layout;\n","import * as React from 'react';\nimport { Link, graphql } from 'gatsby';\n\nimport Bio from '../components/bio';\nimport Layout from '../components/layout';\nimport SEO from '../components/seo';\nimport { rhythm } from '../utils/typography';\n\n\ninterface IBlogIndexProps {\n data: {\n allMarkdownRemark: {\n edges: {\n node: {\n excerpt: string;\n frontmatter: { title: string; date: string; description: string };\n fields: { slug: string };\n };\n }[];\n };\n site: {\n siteMetadata: {\n title: string;\n courses: {\n id: string;\n title: string;\n summary: string;\n squareImage: string;\n disabled: boolean;\n }[];\n };\n };\n };\n location: {\n pathname: string;\n };\n}\n\nconst BlogIndex: React.FunctionComponent = ({\n data,\n location,\n}) => {\n const siteTitle = data.site.siteMetadata.title;\n const courses = data.site.siteMetadata.courses;\n // const posts = data.allMarkdownRemark.edges;\n\n return (\n \n \n \n {courses.filter(c => !c.disabled).map(({ title, id, squareImage, summary }) => {\n return (\n
\n
\n \n \n \n {title}\n \n \n
\n
\n

{summary}

\n
\n
\n );\n })}\n
\n );\n};\n\nexport default BlogIndex;\n\nexport const pageQuery = graphql`\n query {\n site {\n siteMetadata {\n title\n courses {\n id\n title\n summary\n squareImage\n facebookImage\n twitterImage\n femCourseUrl\n femCoursePublished\n disabled\n }\n }\n }\n allMarkdownRemark(sort: { fields: [frontmatter___order], order: ASC }) {\n edges {\n node {\n excerpt\n fields {\n slug\n }\n frontmatter {\n date(formatString: \"MMMM DD, YYYY\")\n title\n description\n order\n }\n }\n }\n }\n }\n`;\n"],"names":["header","location","title","children","pathname","style","scale","marginBottom","rhythm","marginTop","Link","boxShadow","color","to","marginLeft","marginRight","maxWidth","padding","Date","getFullYear","data","siteTitle","site","siteMetadata","courses","filter","c","disabled","map","id","squareImage","summary","className","key","float","width","src"],"sourceRoot":""} \ No newline at end of file diff --git a/component---src-templates-blog-post-tsx-0dd7fac3be4c0e15694c.js.map b/component---src-templates-blog-post-tsx-0dd7fac3be4c0e15694c.js.map index e2e44fbe9..897709ca2 100644 --- a/component---src-templates-blog-post-tsx-0dd7fac3be4c0e15694c.js.map +++ b/component---src-templates-blog-post-tsx-0dd7fac3be4c0e15694c.js.map @@ -1 +1 @@ -{"version":3,"file":"component---src-templates-blog-post-tsx-0dd7fac3be4c0e15694c.js","mappings":"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","sources":["webpack://website/./src/components/layout.tsx","webpack://website/./src/components/EditOnGitHub.tsx","webpack://website/./content/assets/GitHub-Mark-32px.png","webpack://website/./src/utils/setup-two-slash.ts","webpack://website/./src/templates/blog-post.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\n\nimport { rhythm, scale } from '../utils/typography';\n\ninterface ILayoutProps {\n location: {\n pathname: string;\n };\n title: string;\n}\n\nconst Layout: React.FunctionComponent = ({\n location,\n title,\n children,\n}) => {\n const rootPath = `${__PATH_PREFIX__}/`;\n let header;\n\n if (location.pathname === rootPath) {\n header = (\n \n \n {title}\n \n \n );\n } else {\n header = (\n \n \n {title}\n \n \n );\n }\n return (\n \n
{header}
\n
{children}
\n
© {new Date().getFullYear()} All Rights Reserved
\n \n );\n};\n\nexport default Layout;\n","import * as React from 'react';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error\nimport githubIcon from '../../content/assets/GitHub-Mark-32px.png';\n\nexport interface EditOnGitHubLinkProps {\n chapter: string;\n}\n\nconst REPO = 'mike-north/ts-fundamentals-v3';\n\nconst EditOnGitHubLink: React.FunctionComponent = ({\n chapter,\n}): JSX.Element => {\n const url = `https://github.com/${REPO}/edit/main/packages/website/content/blog/${chapter\n .replace('/course', '')\n .substr(1)}index.md`;\n return (\n \n
\n \"GitHub\"\n Edit on GitHub\n
\n
\n );\n};\nexport default EditOnGitHubLink;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACLElEQVR4AbSWA6weQRSFf9W2FTaubcVWbUW1FaMO6zao3agIa0S1bdt+Z5Lzksnm3lnNv8n3MPfcc+56M1G3enXq1gZjwBZwCXwG/8lnrm2hpnbG1waz1mAn+M2wKPxmT+s0wdXAevCPpkn4R49qSfb6Hk18cA+0jhreB3z0Fk7o2ScsvK3PcGWItlp4DXA/0HAN7E041Ef2XrPXmVFDGmCTYDKUtXK8vV4EbrtjxL4tX1Bbjr1DBd9NwfB2yl60Ee6MliAn7ECOtWqB9TaKdztbtE8RtffwHGmveO8rFdQHfxTRCA8DjJC8mVnfCCYogsegpocBaoJHSsYEI9ipFEd7fJyPVjJ2muI15fBU8zhANeU0XzPFb0LhYcbzZjyFnG8Z5dDcLsIAd6QsbYBPRRjgk5SlFkBdj+F11R3FjwtKcbjHAYYrGRdMcaNSvAgKHsIL9JIyNhrBIKlIVnoYYKXDf5ARVAFfHaLdoH6C4AbsFX2ZWaVUvNoqLAE9wXFr7RfYBcaBdiCvHOrOYCLYx57/DlbbzU3Bd+tDcjooB84JjftAVhggCw5Q44RZTYMGiwKiTqCF8CLp5jjsPSIOsEi7Wk9aoiNcrw7GgHlgAMg7BqgTFs6MgmZQP/DInBzzwqvuCqd3/TCTZuC21XQCzAQjwRxQPskA9GwW5yPikGJUPcEAh2J/3PCqHgtepRjgNW/dbJonWWXelrfAG1DOoS1HjdHOAJUzJRvsAADCkEdhn2JIcgAAAABJRU5ErkJggg==\"","// Gets the position of an element relative to the whole page\nconst getAbsoluteElementPos = (element: HTMLElement) => {\n const bodyRect = document.body.getBoundingClientRect();\n const elemRect = element.getBoundingClientRect();\n const top = elemRect.top - bodyRect.top;\n const left = elemRect.left - bodyRect.left;\n return {\n top,\n left,\n };\n};\n\n// Hide it\nconst resetHover = () => {\n const globalPopover = document.getElementById(\n 'twoslash-mouse-hover-info',\n );\n if (globalPopover) globalPopover.style.display = 'none';\n};\n\n// Get it\nconst findOrCreateTooltip = () => {\n let globalPopover = document.getElementById(\n 'twoslash-mouse-hover-info',\n );\n if (!globalPopover) {\n globalPopover = document.createElement('div');\n globalPopover.style.position = 'absolute';\n globalPopover.id = 'twoslash-mouse-hover-info';\n document.body.appendChild(globalPopover);\n }\n return globalPopover;\n};\n\nconst getRootRect = (element: HTMLElement): DOMRect => {\n if (element.nodeName.toLowerCase() === 'pre')\n return element.getBoundingClientRect();\n const { parentElement } = element;\n if (!parentElement)\n throw new Error('No parentElement found for element');\n return getRootRect(parentElement);\n};\n\nconst setupTwoslashHovers = (): void => {\n // prettier-ignore\n const twoslashes = document.querySelectorAll('.shiki.twoslash')\n console.log(twoslashes);\n // Gets triggered on the spans inside the codeblocks\n const hover = (event: Event) => {\n const hovered = event.target as HTMLElement;\n if (hovered.nodeName !== 'DATA-LSP')\n return resetHover();\n const message = hovered.getAttribute('lsp');\n if (message === null) {\n throw new Error('no lsp attribute found');\n }\n const position = getAbsoluteElementPos(hovered);\n\n // Create or re-use the current hover div\n const tooltip = findOrCreateTooltip();\n\n // Use a textarea to un-htmlencode for presenting to the user\n const txt = document.createElement('textarea');\n txt.innerHTML = message;\n tooltip.innerHTML = txt.value;\n\n // Offset it a bit from the mouse and present it at an absolute position\n const yOffset = 20;\n tooltip.style.display = 'block';\n tooltip.style.fontSize = '18px';\n tooltip.style.top = `${position.top + yOffset}px`;\n tooltip.style.left = `${position.left}px`;\n\n // limit the width of the tooltip to the outer container (pre)\n const rootRect = getRootRect(hovered);\n const relativeLeft = position.left - rootRect.x;\n tooltip.style.maxWidth = `${\n rootRect.width - relativeLeft\n }px`;\n };\n\n twoslashes.forEach((codeblock) => {\n codeblock.addEventListener('mouseover', hover);\n codeblock.addEventListener('mouseout', resetHover);\n });\n};\n\nexport default setupTwoslashHovers;\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { Link, graphql } from 'gatsby';\n\nimport Bio from '../components/bio';\nimport Layout from '../components/layout';\nimport EditOnGitHubLink from '../components/EditOnGitHub';\nimport SEO from '../components/seo';\nimport { rhythm, scale } from '../utils/typography';\n\nimport { ICourse } from './course-page';\nimport setupTwoslashHovers from '../utils/setup-two-slash';\n\ninterface IPost {\n tableOfContents: string;\n excerpt: string;\n frontmatter: {\n title: string;\n date: string;\n description: string;\n course: string;\n };\n fields: { slug: string };\n html: string;\n}\ninterface IBlogPostTemplateProps {\n data: {\n markdownRemark: IPost;\n\n site: {\n siteMetadata: {\n title: string;\n courses: ICourse[];\n };\n };\n };\n pageContext: {\n previous: IPost;\n next: IPost;\n };\n location: {\n pathname: string;\n };\n}\n\nfunction makeHTMLAdjustments(raw: string): string {\n return (\n raw &&\n raw.replace(\n /\n
Table of Contents
\n\n \n \n ) : (\n ''\n );\n\n return (\n \n \n\n
\n
\n \n {course.title}\n \n \n

{post.frontmatter.title}

\n \n {post.frontmatter.date}\n

\n
\n \n {toc}\n \n\n \n \n\n \n
\n \n
\n
\n
\n );\n};\n\nexport default BlogPostTemplate;\n\nexport const pageQuery = graphql`\n query BlogPostBySlug($slug: String!) {\n site {\n siteMetadata {\n title\n courses {\n id\n title\n summary\n }\n }\n }\n markdownRemark(fields: { slug: { eq: $slug } }) {\n id\n excerpt(pruneLength: 160)\n html\n tableOfContents(maxDepth: 4)\n fields {\n slug\n }\n frontmatter {\n title\n course\n date(formatString: \"MMMM DD, YYYY\")\n description\n }\n }\n }\n`;\n"],"names":["header","location","title","children","pathname","style","scale","marginBottom","rhythm","marginTop","Link","boxShadow","color","to","marginLeft","marginRight","maxWidth","padding","Date","getFullYear","url","chapter","replace","substr","href","target","className","src","alt","resetHover","globalPopover","document","getElementById","display","getRootRect","element","nodeName","toLowerCase","getBoundingClientRect","parentElement","Error","twoslashes","querySelectorAll","console","log","hover","event","hovered","message","getAttribute","bodyRect","elemRect","position","body","top","left","tooltip","createElement","id","appendChild","txt","innerHTML","value","fontSize","rootRect","relativeLeft","x","width","forEach","codeblock","addEventListener","data","pageContext","post","markdownRemark","siteTitle","site","siteMetadata","previous","next","useEffect","setupTwoslashHovers","raw","postHtml","html","course","courses","find","c","frontmatter","toc","tableOfContents","trim","dangerouslySetInnerHTML","__html","description","excerpt","rel","EditOnGitHub","fields","slug","date","flexWrap","justifyContent","listStyle"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"component---src-templates-blog-post-tsx-0dd7fac3be4c0e15694c.js","mappings":"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","sources":["webpack://website/./src/components/layout.tsx","webpack://website/./src/components/EditOnGitHub.tsx","webpack://website/./content/assets/GitHub-Mark-32px.png","webpack://website/./src/utils/setup-two-slash.ts","webpack://website/./src/templates/blog-post.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\n\nimport { rhythm, scale } from '../utils/typography';\n\ninterface ILayoutProps {\n location: {\n pathname: string;\n };\n title: string;\n}\n\nconst Layout: React.FunctionComponent = ({\n location,\n title,\n children,\n}) => {\n const rootPath = `${__PATH_PREFIX__}/`;\n let header;\n\n if (location.pathname === rootPath) {\n header = (\n \n \n {title}\n \n \n );\n } else {\n header = (\n \n \n {title}\n \n \n );\n }\n return (\n \n
{header}
\n
{children}
\n
© {new Date().getFullYear()} All Rights Reserved
\n \n );\n};\n\nexport default Layout;\n","import * as React from 'react';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error\nimport githubIcon from '../../content/assets/GitHub-Mark-32px.png';\n\nexport interface EditOnGitHubLinkProps {\n chapter: string;\n}\n\nconst REPO = 'mike-north/ts-fundamentals-v3';\n\nconst EditOnGitHubLink: React.FunctionComponent = ({\n chapter,\n}): JSX.Element => {\n const url = `https://github.com/${REPO}/edit/main/packages/website/content/blog/${chapter\n .replace('/course', '')\n .substr(1)}index.md`;\n return (\n
\n
\n \"GitHub\"\n Edit on GitHub\n
\n
\n );\n};\nexport default EditOnGitHubLink;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACLElEQVR4AbSWA6weQRSFf9W2FTaubcVWbUW1FaMO6zao3agIa0S1bdt+Z5Lzksnm3lnNv8n3MPfcc+56M1G3enXq1gZjwBZwCXwG/8lnrm2hpnbG1waz1mAn+M2wKPxmT+s0wdXAevCPpkn4R49qSfb6Hk18cA+0jhreB3z0Fk7o2ScsvK3PcGWItlp4DXA/0HAN7E041Ef2XrPXmVFDGmCTYDKUtXK8vV4EbrtjxL4tX1Bbjr1DBd9NwfB2yl60Ee6MliAn7ECOtWqB9TaKdztbtE8RtffwHGmveO8rFdQHfxTRCA8DjJC8mVnfCCYogsegpocBaoJHSsYEI9ipFEd7fJyPVjJ2muI15fBU8zhANeU0XzPFb0LhYcbzZjyFnG8Z5dDcLsIAd6QsbYBPRRjgk5SlFkBdj+F11R3FjwtKcbjHAYYrGRdMcaNSvAgKHsIL9JIyNhrBIKlIVnoYYKXDf5ARVAFfHaLdoH6C4AbsFX2ZWaVUvNoqLAE9wXFr7RfYBcaBdiCvHOrOYCLYx57/DlbbzU3Bd+tDcjooB84JjftAVhggCw5Q44RZTYMGiwKiTqCF8CLp5jjsPSIOsEi7Wk9aoiNcrw7GgHlgAMg7BqgTFs6MgmZQP/DInBzzwqvuCqd3/TCTZuC21XQCzAQjwRxQPskA9GwW5yPikGJUPcEAh2J/3PCqHgtepRjgNW/dbJonWWXelrfAG1DOoS1HjdHOAJUzJRvsAADCkEdhn2JIcgAAAABJRU5ErkJggg==\"","// Gets the position of an element relative to the whole page\nconst getAbsoluteElementPos = (element: HTMLElement) => {\n const bodyRect = document.body.getBoundingClientRect();\n const elemRect = element.getBoundingClientRect();\n const top = elemRect.top - bodyRect.top;\n const left = elemRect.left - bodyRect.left;\n return {\n top,\n left,\n };\n};\n\n// Hide it\nconst resetHover = () => {\n const globalPopover = document.getElementById(\n 'twoslash-mouse-hover-info',\n );\n if (globalPopover) globalPopover.style.display = 'none';\n};\n\n// Get it\nconst findOrCreateTooltip = () => {\n let globalPopover = document.getElementById(\n 'twoslash-mouse-hover-info',\n );\n if (!globalPopover) {\n globalPopover = document.createElement('div');\n globalPopover.style.position = 'absolute';\n globalPopover.id = 'twoslash-mouse-hover-info';\n document.body.appendChild(globalPopover);\n }\n return globalPopover;\n};\n\nconst getRootRect = (element: HTMLElement): DOMRect => {\n if (element.nodeName.toLowerCase() === 'pre')\n return element.getBoundingClientRect();\n const { parentElement } = element;\n if (!parentElement)\n throw new Error('No parentElement found for element');\n return getRootRect(parentElement);\n};\n\nconst setupTwoslashHovers = (): void => {\n // prettier-ignore\n const twoslashes = document.querySelectorAll('.shiki.twoslash')\n console.log(twoslashes);\n // Gets triggered on the spans inside the codeblocks\n const hover = (event: Event) => {\n const hovered = event.target as HTMLElement;\n if (hovered.nodeName !== 'DATA-LSP')\n return resetHover();\n const message = hovered.getAttribute('lsp');\n if (message === null) {\n throw new Error('no lsp attribute found');\n }\n const position = getAbsoluteElementPos(hovered);\n\n // Create or re-use the current hover div\n const tooltip = findOrCreateTooltip();\n\n // Use a textarea to un-htmlencode for presenting to the user\n const txt = document.createElement('textarea');\n txt.innerHTML = message;\n tooltip.innerHTML = txt.value;\n\n // Offset it a bit from the mouse and present it at an absolute position\n const yOffset = 20;\n tooltip.style.display = 'block';\n tooltip.style.fontSize = '18px';\n tooltip.style.top = `${position.top + yOffset}px`;\n tooltip.style.left = `${position.left}px`;\n\n // limit the width of the tooltip to the outer container (pre)\n const rootRect = getRootRect(hovered);\n const relativeLeft = position.left - rootRect.x;\n tooltip.style.maxWidth = `${\n rootRect.width - relativeLeft\n }px`;\n };\n\n twoslashes.forEach((codeblock) => {\n codeblock.addEventListener('mouseover', hover);\n codeblock.addEventListener('mouseout', resetHover);\n });\n};\n\nexport default setupTwoslashHovers;\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { Link, graphql } from 'gatsby';\n\nimport Bio from '../components/bio';\nimport Layout from '../components/layout';\nimport EditOnGitHubLink from '../components/EditOnGitHub';\nimport SEO from '../components/seo';\nimport { rhythm, scale } from '../utils/typography';\n\nimport { ICourse } from './course-page';\nimport setupTwoslashHovers from '../utils/setup-two-slash';\n\ninterface IPost {\n tableOfContents: string;\n excerpt: string;\n frontmatter: {\n title: string;\n date: string;\n description: string;\n course: string;\n };\n fields: { slug: string };\n html: string;\n}\ninterface IBlogPostTemplateProps {\n data: {\n markdownRemark: IPost;\n\n site: {\n siteMetadata: {\n title: string;\n courses: ICourse[];\n };\n };\n };\n pageContext: {\n previous: IPost;\n next: IPost;\n };\n location: {\n pathname: string;\n };\n}\n\nfunction makeHTMLAdjustments(raw: string): string {\n return (\n raw &&\n raw.replace(\n /\n
Table of Contents
\n\n \n \n ) : (\n ''\n );\n\n return (\n \n \n\n
\n
\n \n {course.title}\n \n \n

{post.frontmatter.title}

\n \n {post.frontmatter.date}\n

\n
\n \n {toc}\n \n\n \n \n\n \n
\n \n
\n
\n
\n );\n};\n\nexport default BlogPostTemplate;\n\nexport const pageQuery = graphql`\n query BlogPostBySlug($slug: String!) {\n site {\n siteMetadata {\n title\n courses {\n id\n title\n summary\n }\n }\n }\n markdownRemark(fields: { slug: { eq: $slug } }) {\n id\n excerpt(pruneLength: 160)\n html\n tableOfContents(maxDepth: 4)\n fields {\n slug\n }\n frontmatter {\n title\n course\n date(formatString: \"MMMM DD, YYYY\")\n description\n }\n }\n }\n`;\n"],"names":["header","location","title","children","pathname","style","scale","marginBottom","rhythm","marginTop","Link","boxShadow","color","to","marginLeft","marginRight","maxWidth","padding","Date","getFullYear","url","chapter","replace","substr","href","target","className","src","alt","resetHover","globalPopover","document","getElementById","display","getRootRect","element","nodeName","toLowerCase","getBoundingClientRect","parentElement","Error","twoslashes","querySelectorAll","console","log","hover","event","hovered","message","getAttribute","bodyRect","elemRect","position","body","top","left","tooltip","createElement","id","appendChild","txt","innerHTML","value","fontSize","rootRect","relativeLeft","x","width","forEach","codeblock","addEventListener","data","pageContext","post","markdownRemark","siteTitle","site","siteMetadata","previous","next","useEffect","setupTwoslashHovers","raw","postHtml","html","course","courses","find","c","frontmatter","toc","tableOfContents","trim","dangerouslySetInnerHTML","__html","description","excerpt","rel","EditOnGitHub","fields","slug","date","flexWrap","justifyContent","listStyle"],"sourceRoot":""} \ No newline at end of file diff --git a/component---src-templates-course-page-tsx-8600bb4260367ddb119b.js.map b/component---src-templates-course-page-tsx-8600bb4260367ddb119b.js.map index 6115f20b2..4d19e445c 100644 --- a/component---src-templates-course-page-tsx-8600bb4260367ddb119b.js.map +++ b/component---src-templates-course-page-tsx-8600bb4260367ddb119b.js.map @@ -1 +1 @@ -{"version":3,"file":"component---src-templates-course-page-tsx-8600bb4260367ddb119b.js","mappings":"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","sources":["webpack://website/./src/components/course-layout.tsx","webpack://website/./src/templates/course-page.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\nimport { ICourse } from '../templates/course-page';\n\nimport { rhythm } from '../utils/typography';\n\ninterface ICourseLayoutProps {\n courses: ICourse[];\n padTop: boolean;\n}\n\nconst CourseLayout: React.FunctionComponent = ({\n courses,\n children,\n padTop\n}) => {\n console.log({ courses })\n const header = (\n
    \n {courses.filter(c => !c.disabled).map((c) => (\n
  • \n \n {c.title}\n \n
  • \n ))}\n
\n );\n\n return (\n \n
{header}
\n
{children}
\n
© {new Date().getFullYear()} All Rights Reserved.
\n \n );\n};\n\nexport default CourseLayout;\n","import { Link, graphql } from 'gatsby';\nimport * as React from 'react';\nimport Bio from '../components/bio';\nimport CourseLayout from '../components/course-layout';\nimport SEO from '../components/seo';\nimport { rhythm } from '../utils/typography';\n\nexport interface ICourse {\n id: string;\n title: string;\n disabled: boolean;\n squareImage: string;\n facebookImage: string;\n twitterImage: string;\n femCourseUrl: string;\n femCoursePublished: boolean;\n summary: string;\n}\n\ninterface ICourseTemplateProps {\n pageContext: ICourse;\n data: {\n site: {\n siteMetadata: {\n title: string;\n courses: ICourse[];\n };\n };\n allMarkdownRemark: {\n edges: {\n node: {\n excerpt: string;\n frontmatter: {\n title: string;\n course: string;\n date: string;\n isExercise: boolean;\n order: number;\n description: string;\n };\n fields: { slug: string; course: string };\n };\n }[];\n };\n };\n}\n\nfunction formatOrder(n: number): string {\n if (n < 10) return `0${n}`;\n return `${n}`;\n}\n\nconst CoursePageTemplate: React.FunctionComponent<\n ICourseTemplateProps\n> = ({ pageContext: course, data }): JSX.Element => {\n if (!course) throw new Error('no course');\n const courses = data.site.siteMetadata.courses;\n const posts = data.allMarkdownRemark.edges;\n let urlBanner: JSX.Element | null = null;\n const { femCoursePublished, femCourseUrl } = course;\n console.log({ femCourseUrl });\n if (femCourseUrl) {\n if (femCoursePublished) {\n urlBanner = (\n

\n \n View the Frontend Masters video course for{' '}\n {course.title}{' '}\n \n here\n \n

\n );\n } else {\n urlBanner = (\n

\n \n View the Frontend Masters workshop for{' '}\n {course.title}{' '}\n \n here\n \n

\n );\n }\n }\n return (\n \n \n {urlBanner}\n
\n \n \n {course.title}\n \n
\n
\n {course.summary}\n
\n {posts\n .filter(\n (p) => p.node.frontmatter.course === course.id,\n )\n .sort(\n (a, b) =>\n a.node.frontmatter.order -\n b.node.frontmatter.order,\n )\n .map(({ node }, idx) => {\n const title =\n node.frontmatter.title || node.fields.slug;\n const { isExercise } = node.frontmatter;\n return (\n \n
\n \n \n \n {formatOrder(idx + 1)}\n \n \n {title}\n \n \n \n \n {node.frontmatter.date}\n \n
\n
\n \n
\n \n );\n })}\n\n
\n \n
\n
\n );\n};\n\nexport default CoursePageTemplate;\n\nexport const pageQuery = graphql`\n query {\n site {\n siteMetadata {\n title\n courses {\n id\n title\n summary\n squareImage\n facebookImage\n twitterImage\n femCourseUrl\n femCoursePublished\n disabled\n }\n }\n }\n allMarkdownRemark(\n sort: { fields: [frontmatter___date], order: ASC }\n ) {\n edges {\n node {\n excerpt\n fields {\n slug\n }\n frontmatter {\n date(formatString: \"MMMM DD, YYYY\")\n title\n order\n isExercise\n course\n description\n }\n }\n }\n }\n }\n`;\n"],"names":["courses","children","padTop","console","log","header","className","filter","c","disabled","map","key","id","Link","activeClassName","style","boxShadow","color","to","title","marginLeft","marginRight","maxWidth","rhythm","padding","Date","getFullYear","course","pageContext","data","Error","site","siteMetadata","posts","allMarkdownRemark","edges","urlBanner","femCoursePublished","femCourseUrl","src","href","target","description","summary","twitterImage","facebookImage","float","margin","width","squareImage","marginTop","marginBottom","p","node","frontmatter","sort","a","b","order","idx","n","fields","slug","isExercise","date","dangerouslySetInnerHTML","__html","excerpt"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"component---src-templates-course-page-tsx-8600bb4260367ddb119b.js","mappings":"+LAqDA,EA1CkE,SAAC,GAI5D,IAHLA,EAGI,EAHJA,QACAC,EAEI,EAFJA,SACAC,EACI,EADJA,OAEAC,QAAQC,IAAI,CAAEJ,QAAAA,IACd,IAAMK,EACJ,sBAAIC,UAAWJ,EAAS,sBAAwB,eAC7CF,EAAQO,QAAO,SAAAC,GAAC,OAAKA,EAAEC,QAAP,IAAiBC,KAAI,SAACF,GAAD,OACpC,sBAAIG,IAAKH,EAAEI,GAAIN,UAAU,cACvB,gBAAC,EAAAO,KAAD,CACEC,gBAAgB,SAChBC,MAAO,CACLC,UAAU,OACVC,MAAM,WAERC,GAAE,WAAaV,EAAEI,IAEhBJ,EAAEW,OAV6B,KAiB1C,OACE,uBACEb,UAAU,cACVS,MAAO,CACLK,WAAW,OACXC,YAAY,OACZC,UAAUC,EAAAA,EAAAA,IAAO,IACjBC,SAAYD,EAAAA,EAAAA,IAAO,KAAZ,KAAoBA,EAAAA,EAAAA,IAAO,EAAI,KAGxC,8BAASlB,GACT,4BAAOJ,GACP,oCAAW,IAAIwB,MAAOC,cAAtB,yBAGL,E,UCCD,IA6HA,EA3HI,SAAC,GAAgD,IAAjCC,EAAgC,EAA7CC,YAAqBC,EAAwB,EAAxBA,KAC1B,IAAKF,EAAQ,MAAM,IAAIG,MAAM,aAC7B,IAAM9B,EAAU6B,EAAKE,KAAKC,aAAahC,QACjCiC,EAAQJ,EAAKK,kBAAkBC,MACjCC,EAAgC,KAC5BC,EAAqCV,EAArCU,mBAAoBC,EAAiBX,EAAjBW,aA2B5B,OA1BAnC,QAAQC,IAAI,CAAEkC,aAAAA,IACVA,IAEAF,EADEC,EAEA,qBAAG/B,UAAU,qBACX,uBAAKA,UAAU,WAAWiC,IAAI,kBADhC,6CAE6C,IAC1CZ,EAAOR,MAAO,IACf,qBAAGqB,KAAMF,EAAcG,OAAO,UAA9B,SAOF,qBAAGnC,UAAU,qBACX,uBAAKA,UAAU,WAAWiC,IAAI,kBADhC,yCAEyC,IACtCZ,EAAOR,MAAO,IACf,qBAAGqB,KAAMF,EAAcG,OAAO,UAA9B,UAQN,gBAAC,EAAD,CAAczC,QAASA,EAASE,SAAUkC,GACxC,gBAAC,IAAD,CACEjB,MAAOQ,EAAOR,MACduB,YAAaf,EAAOgB,QACpBC,aAAcjB,EAAOiB,aACrBC,cAAelB,EAAOkB,gBAEvBT,EACD,8BACE,uBACErB,MAAO,CAAE+B,MAAO,QAASC,OAAQ,GACjCC,MAAO,IACPT,IAAKZ,EAAOsB,cAEd,sBACElC,MAAO,CACLmC,WAAW3B,EAAAA,EAAAA,IAAO,GAClB4B,aAAc,IAGfxB,EAAOR,QAGZ,2BAASJ,MAAO,CAAEmC,UAAW,SAC1BvB,EAAOgB,SAETV,EACE1B,QACC,SAAC6C,GAAD,OAAOA,EAAEC,KAAKC,YAAY3B,SAAWA,EAAOf,EAA5C,IAED2C,MACC,SAACC,EAAGC,GAAJ,OACED,EAAEH,KAAKC,YAAYI,MACnBD,EAAEJ,KAAKC,YAAYI,KAFrB,IAIDhD,KAAI,WAAWiD,GAAS,IA3EZC,EA2ELP,EAAgB,EAAhBA,KACAlC,EACJkC,EAAKC,YAAYnC,OAASkC,EAAKQ,OAAOC,KAChCC,EAAeV,EAAKC,YAApBS,WACR,OACE,2BACEzD,UACE,kBACCyD,EAAa,YAAc,IAE9BpD,IAAK0C,EAAKQ,OAAOC,MAEjB,8BACE,sBACE/C,MAAO,CACLoC,cAAc5B,EAAAA,EAAAA,IAAO,EAAI,KAG3B,gBAAC,EAAAV,KAAD,CACEE,MAAO,CAAEC,UAAU,QACnBE,GAAImC,EAAKQ,OAAOC,MAEhB,wBAAMxD,UAAU,0BAjGfsD,EAkGcD,EAAM,GAjG/B,GAAU,IAAKC,EACjB,GAAIA,GAkGQ,wBAAMtD,UAAU,yBACba,KAIP,yBAAOb,UAAU,wBACd+C,EAAKC,YAAYU,OAGtB,+BACE,qBACE1D,UAAU,8BACV2D,wBAAyB,CACvBC,OACEb,EAAKC,YAAYZ,aACjBW,EAAKc,YAMlB,IAEH,8BACE,gBAAC,IAAD,OAIP,C","sources":["webpack://website/./src/components/course-layout.tsx","webpack://website/./src/templates/course-page.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Link } from 'gatsby';\nimport { ICourse } from '../templates/course-page';\n\nimport { rhythm } from '../utils/typography';\n\ninterface ICourseLayoutProps {\n courses: ICourse[];\n padTop: boolean;\n}\n\nconst CourseLayout: React.FunctionComponent = ({\n courses,\n children,\n padTop\n}) => {\n console.log({ courses })\n const header = (\n
    \n {courses.filter(c => !c.disabled).map((c) => (\n
  • \n \n {c.title}\n \n
  • \n ))}\n
\n );\n\n return (\n \n
{header}
\n
{children}
\n
© {new Date().getFullYear()} All Rights Reserved.
\n \n );\n};\n\nexport default CourseLayout;\n","import { Link, graphql } from 'gatsby';\nimport * as React from 'react';\nimport Bio from '../components/bio';\nimport CourseLayout from '../components/course-layout';\nimport SEO from '../components/seo';\nimport { rhythm } from '../utils/typography';\n\nexport interface ICourse {\n id: string;\n title: string;\n disabled: boolean;\n squareImage: string;\n facebookImage: string;\n twitterImage: string;\n femCourseUrl: string;\n femCoursePublished: boolean;\n summary: string;\n}\n\ninterface ICourseTemplateProps {\n pageContext: ICourse;\n data: {\n site: {\n siteMetadata: {\n title: string;\n courses: ICourse[];\n };\n };\n allMarkdownRemark: {\n edges: {\n node: {\n excerpt: string;\n frontmatter: {\n title: string;\n course: string;\n date: string;\n isExercise: boolean;\n order: number;\n description: string;\n };\n fields: { slug: string; course: string };\n };\n }[];\n };\n };\n}\n\nfunction formatOrder(n: number): string {\n if (n < 10) return `0${n}`;\n return `${n}`;\n}\n\nconst CoursePageTemplate: React.FunctionComponent<\n ICourseTemplateProps\n> = ({ pageContext: course, data }): JSX.Element => {\n if (!course) throw new Error('no course');\n const courses = data.site.siteMetadata.courses;\n const posts = data.allMarkdownRemark.edges;\n let urlBanner: JSX.Element | null = null;\n const { femCoursePublished, femCourseUrl } = course;\n console.log({ femCourseUrl });\n if (femCourseUrl) {\n if (femCoursePublished) {\n urlBanner = (\n

\n \n View the Frontend Masters video course for{' '}\n {course.title}{' '}\n \n here\n \n

\n );\n } else {\n urlBanner = (\n

\n \n View the Frontend Masters workshop for{' '}\n {course.title}{' '}\n \n here\n \n

\n );\n }\n }\n return (\n \n \n {urlBanner}\n
\n \n \n {course.title}\n \n
\n
\n {course.summary}\n
\n {posts\n .filter(\n (p) => p.node.frontmatter.course === course.id,\n )\n .sort(\n (a, b) =>\n a.node.frontmatter.order -\n b.node.frontmatter.order,\n )\n .map(({ node }, idx) => {\n const title =\n node.frontmatter.title || node.fields.slug;\n const { isExercise } = node.frontmatter;\n return (\n \n
\n \n \n \n {formatOrder(idx + 1)}\n \n \n {title}\n \n \n \n \n {node.frontmatter.date}\n \n
\n
\n \n
\n \n );\n })}\n\n
\n \n
\n
\n );\n};\n\nexport default CoursePageTemplate;\n\nexport const pageQuery = graphql`\n query {\n site {\n siteMetadata {\n title\n courses {\n id\n title\n summary\n squareImage\n facebookImage\n twitterImage\n femCourseUrl\n femCoursePublished\n disabled\n }\n }\n }\n allMarkdownRemark(\n sort: { fields: [frontmatter___date], order: ASC }\n ) {\n edges {\n node {\n excerpt\n fields {\n slug\n }\n frontmatter {\n date(formatString: \"MMMM DD, YYYY\")\n title\n order\n isExercise\n course\n description\n }\n }\n }\n }\n }\n`;\n"],"names":["courses","children","padTop","console","log","header","className","filter","c","disabled","map","key","id","Link","activeClassName","style","boxShadow","color","to","title","marginLeft","marginRight","maxWidth","rhythm","padding","Date","getFullYear","course","pageContext","data","Error","site","siteMetadata","posts","allMarkdownRemark","edges","urlBanner","femCoursePublished","femCourseUrl","src","href","target","description","summary","twitterImage","facebookImage","float","margin","width","squareImage","marginTop","marginBottom","p","node","frontmatter","sort","a","b","order","idx","n","fields","slug","isExercise","date","dangerouslySetInnerHTML","__html","excerpt"],"sourceRoot":""} \ No newline at end of file diff --git a/course/full-stack-typescript/01-intro/index.html b/course/full-stack-typescript/01-intro/index.html index 3756a9a1f..d5a2b7619 100644 --- a/course/full-stack-typescript/01-intro/index.html +++ b/course/full-stack-typescript/01-intro/index.html @@ -54,7 +54,7 @@ running with the workshop project in 2 minutes or less. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/02-graphql-intro/index.html b/course/full-stack-typescript/02-graphql-intro/index.html index 1352bec97..cd0016b92 100644 --- a/course/full-stack-typescript/02-graphql-intro/index.html +++ b/course/full-stack-typescript/02-graphql-intro/index.html @@ -51,7 +51,7 @@ GraphQL Intro | Learn TypeScript w/ Mike North \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/03-project-tour/index.html b/course/full-stack-typescript/03-project-tour/index.html index 295bd9396..019888e24 100644 --- a/course/full-stack-typescript/03-project-tour/index.html +++ b/course/full-stack-typescript/03-project-tour/index.html @@ -51,7 +51,7 @@ Project Tour | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

Project Tour

March 24, 2022

Table of Contents
© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/04-hello-apollo/index.html b/course/full-stack-typescript/04-hello-apollo/index.html index c3faf1694..8f829f298 100644 --- a/course/full-stack-typescript/04-hello-apollo/index.html +++ b/course/full-stack-typescript/04-hello-apollo/index.html @@ -51,7 +51,7 @@ Hello Apollo | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

Hello Apollo

March 24, 2022

Create a new file server/src/apollo-server.ts with the following contents

+"/>

Learn TypeScript w/ Mike North

Hello Apollo

March 24, 2022

Create a new file server/src/apollo-server.ts with the following contents

ts
import { ApolloServerPluginDrainHttpServer } from "apollo-server-core"
import {
ApolloServer,
ExpressContext,
gql,
} from "apollo-server-express"
import * as express from "express"
import { Server } from "http"
import Db from "./db"
export async function createApolloServer(
_db: Db,
httpServer: Server,
app: express.Application
): Promise<ApolloServer<ExpressContext>> {
const typeDefs = gql`
type Query {
currentUser: User!
suggestions: [Suggestion!]!
}
type User {
id: String!
name: String!
handle: String!
coverUrl: String!
avatarUrl: String!
createdAt: String!
updatedAt: String!
}
type Suggestion {
name: String!
handle: String!
avatarUrl: String!
reason: String!
}
`
const server = new ApolloServer({
typeDefs,
plugins: [
ApolloServerPluginDrainHttpServer({ httpServer }),
],
})
await server.start()
server.applyMiddleware({ app })
return server
}

In server/src/index.ts add the following imports

ts
import { createApolloServer } from "./apollo-server"
import { createServer } from "http"
@@ -67,7 +67,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/05-first-resolver/index.html b/course/full-stack-typescript/05-first-resolver/index.html index ec1e50f26..afeac4bbb 100644 --- a/course/full-stack-typescript/05-first-resolver/index.html +++ b/course/full-stack-typescript/05-first-resolver/index.html @@ -51,7 +51,7 @@ First Resolver | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

First Resolver

March 24, 2022

Go back to the server/src/apollo-server.ts file, remove the underscore before _db here

+"/>

Learn TypeScript w/ Mike North

First Resolver

March 24, 2022

Go back to the server/src/apollo-server.ts file, remove the underscore before _db here

diff
export async function createApolloServer(
- _db: Db,
+ db: Db,
httpServe

and insert the following code immediately before you create an instance of ApolloServer.

ts
const resolvers = {
Query: {
currentUser: () => {
return {
id: "123",
name: "John Doe",
handle: "johndoe",
coverUrl: "",
avatarUrl: "",
createdAt: "",
updatedAt: "",
}
},
suggestions: () => {
return []
},
},
}
@@ -64,7 +64,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/06-imported-resolver/index.html b/course/full-stack-typescript/06-imported-resolver/index.html index fb88e2c13..050531244 100644 --- a/course/full-stack-typescript/06-imported-resolver/index.html +++ b/course/full-stack-typescript/06-imported-resolver/index.html @@ -54,7 +54,7 @@ sub-projects use, we need to break it out into a separate file. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/07-imported-resolver/index.html b/course/full-stack-typescript/07-imported-resolver/index.html index 991dba17b..21bbe8b0e 100644 --- a/course/full-stack-typescript/07-imported-resolver/index.html +++ b/course/full-stack-typescript/07-imported-resolver/index.html @@ -54,7 +54,7 @@ automatically generated types to our resolvers "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/08-ui-consumes-data/index.html b/course/full-stack-typescript/08-ui-consumes-data/index.html index d273c5b83..e18c6ef79 100644 --- a/course/full-stack-typescript/08-ui-consumes-data/index.html +++ b/course/full-stack-typescript/08-ui-consumes-data/index.html @@ -51,7 +51,7 @@ UI Consumes Real Data | Learn TypeScript w/ Mike North \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/09-ui-consumes-data/index.html b/course/full-stack-typescript/09-ui-consumes-data/index.html index 52e438fa7..ead784413 100644 --- a/course/full-stack-typescript/09-ui-consumes-data/index.html +++ b/course/full-stack-typescript/09-ui-consumes-data/index.html @@ -51,7 +51,7 @@ Data from the database | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

Data from the database

March 24, 2022

Open server/src/resolvers/Query.ts and replace the fixture array in suggestions() with a call +"/>

Learn TypeScript w/ Mike North

Data from the database

March 24, 2022

Open server/src/resolvers/Query.ts and replace the fixture array in suggestions() with a call to the db.

ts
suggestions: (_, __, { db }) => {
return db.getAllSuggestions();
},

And do something similar for currentUser, using the first user in the DB as the “current one”

@@ -91,7 +91,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/10-nested-data/index.html b/course/full-stack-typescript/10-nested-data/index.html index 977ae2e8d..3000ee761 100644 --- a/course/full-stack-typescript/10-nested-data/index.html +++ b/course/full-stack-typescript/10-nested-data/index.html @@ -51,7 +51,7 @@ Nested data | Learn TypeScript w/ Mike North \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/11-nested-data copy/index.html b/course/full-stack-typescript/11-nested-data copy/index.html index c45525ddd..2b2e30bc4 100644 --- a/course/full-stack-typescript/11-nested-data copy/index.html +++ b/course/full-stack-typescript/11-nested-data copy/index.html @@ -51,7 +51,7 @@ Mutations | Learn TypeScript w/ Mike North \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/12-favorites/index.html b/course/full-stack-typescript/12-favorites/index.html index 3549a5df3..8ab1bd1f3 100644 --- a/course/full-stack-typescript/12-favorites/index.html +++ b/course/full-stack-typescript/12-favorites/index.html @@ -51,7 +51,7 @@ Favorites | Learn TypeScript w/ Mike North \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/13-favorites/index.html b/course/full-stack-typescript/13-favorites/index.html index 216bea3b1..1c3304c7c 100644 --- a/course/full-stack-typescript/13-favorites/index.html +++ b/course/full-stack-typescript/13-favorites/index.html @@ -51,7 +51,7 @@ Favorites Interactivity | Learn TypeScript w/ Mike North \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/14-trends/index.html b/course/full-stack-typescript/14-trends/index.html index 6345b9609..3d6213b1d 100644 --- a/course/full-stack-typescript/14-trends/index.html +++ b/course/full-stack-typescript/14-trends/index.html @@ -51,7 +51,7 @@ Trends | Learn TypeScript w/ Mike North \ No newline at end of file + \ No newline at end of file diff --git a/course/full-stack-typescript/index.html b/course/full-stack-typescript/index.html index 9bc5ed95c..86e379b20 100644 --- a/course/full-stack-typescript/index.html +++ b/course/full-stack-typescript/index.html @@ -54,7 +54,7 @@ type-checked code bases that are shockingly easy to refactor and maintain. "/>

View the Frontend Masters workshop for Full Stack TypeScript here

Full Stack TypeScript

Combine TypeScript and GraphQL's type systems to create full-stack, fully +"/>

View the Frontend Masters workshop for Full Stack TypeScript here

Full Stack TypeScript

Combine TypeScript and GraphQL's type systems to create full-stack, fully type-checked code bases that are shockingly easy to refactor and maintain.

01Intro

We'll discuss the goals and agenda of this course, and how to get up and running with the workshop project in 2 minutes or less. @@ -77,7 +77,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved.
\ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/01-intro/index.html b/course/fundamentals-v3/01-intro/index.html index ade25311c..972b9c4ee 100644 --- a/course/fundamentals-v3/01-intro/index.html +++ b/course/fundamentals-v3/01-intro/index.html @@ -54,7 +54,7 @@ running with the workshop project in 2 minutes or less. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/02-hello-typescript/index.html b/course/fundamentals-v3/02-hello-typescript/index.html index 0c06daa21..6f57f8f85 100644 --- a/course/fundamentals-v3/02-hello-typescript/index.html +++ b/course/fundamentals-v3/02-hello-typescript/index.html @@ -54,7 +54,7 @@ compiler CLI command, and examine a simple program's compiled output "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/03-variables-and-values/index.html b/course/fundamentals-v3/03-variables-and-values/index.html index 0d9aa71df..3ca81238c 100644 --- a/course/fundamentals-v3/03-variables-and-values/index.html +++ b/course/fundamentals-v3/03-variables-and-values/index.html @@ -54,7 +54,7 @@ and functions. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/04-objects-arrays-and-tuples/index.html b/course/fundamentals-v3/04-objects-arrays-and-tuples/index.html index 61c792c22..a916312a3 100644 --- a/course/fundamentals-v3/04-objects-arrays-and-tuples/index.html +++ b/course/fundamentals-v3/04-objects-arrays-and-tuples/index.html @@ -54,7 +54,7 @@ a bit more interesting with collections: in JavaScript this includes Objects and Arrays. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/05-structural-vs-nominal-types/index.html b/course/fundamentals-v3/05-structural-vs-nominal-types/index.html index bb190e5ec..b00b5cdc3 100644 --- a/course/fundamentals-v3/05-structural-vs-nominal-types/index.html +++ b/course/fundamentals-v3/05-structural-vs-nominal-types/index.html @@ -54,7 +54,7 @@ nominal type systems, such as the ones found in Java and C++. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/06-union-and-intersection-types/index.html b/course/fundamentals-v3/06-union-and-intersection-types/index.html index 891158ce1..93ed0782f 100644 --- a/course/fundamentals-v3/06-union-and-intersection-types/index.html +++ b/course/fundamentals-v3/06-union-and-intersection-types/index.html @@ -54,7 +54,7 @@ which are effectively "AND" and "OR" boolean logic operators for types. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/07-interfaces-and-type-aliases/index.html b/course/fundamentals-v3/07-interfaces-and-type-aliases/index.html index 23f866b04..46523084a 100644 --- a/course/fundamentals-v3/07-interfaces-and-type-aliases/index.html +++ b/course/fundamentals-v3/07-interfaces-and-type-aliases/index.html @@ -57,7 +57,7 @@ "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/08-exercise-json-types/index.html b/course/fundamentals-v3/08-exercise-json-types/index.html index 871d334dc..cc7c311d7 100644 --- a/course/fundamentals-v3/08-exercise-json-types/index.html +++ b/course/fundamentals-v3/08-exercise-json-types/index.html @@ -54,7 +54,7 @@ that describe any valid JSON value "/>

Learn TypeScript w/ Mike North

JSON types

June 08, 2021

Let’s put our knowledge to the test, by defining a type +"/>

Learn TypeScript w/ Mike North

JSON types

June 08, 2021

Let’s put our knowledge to the test, by defining a type that describes any allowable JSON value.

Here’s the relevant section of the specification:

md
A JSON value MUST be an
- object
- array
- number
- string,
or one of the following three literal names:
- false
- true
- null
@@ -67,7 +67,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/09-functions/index.html b/course/fundamentals-v3/09-functions/index.html index deb6f8511..f40d2bd1b 100644 --- a/course/fundamentals-v3/09-functions/index.html +++ b/course/fundamentals-v3/09-functions/index.html @@ -57,7 +57,7 @@ "/>

Learn TypeScript w/ Mike North

Functions

June 08, 2021

Table of Contents
© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/10-classes/index.html b/course/fundamentals-v3/10-classes/index.html index 99012b5e3..86a487ddd 100644 --- a/course/fundamentals-v3/10-classes/index.html +++ b/course/fundamentals-v3/10-classes/index.html @@ -57,7 +57,7 @@ "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/11-top-and-bottom-types/index.html b/course/fundamentals-v3/11-top-and-bottom-types/index.html index 86991786f..7eb6c9cef 100644 --- a/course/fundamentals-v3/11-top-and-bottom-types/index.html +++ b/course/fundamentals-v3/11-top-and-bottom-types/index.html @@ -54,7 +54,7 @@ at three "extreme types" in TypeScript: any, unknown and never. "/>

Learn TypeScript w/ Mike North

Top and bottom types

June 08, 2021

Table of Contents
© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/12-type-guards/index.html b/course/fundamentals-v3/12-type-guards/index.html index 1732645e2..c40acec44 100644 --- a/course/fundamentals-v3/12-type-guards/index.html +++ b/course/fundamentals-v3/12-type-guards/index.html @@ -57,7 +57,7 @@ "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/13-nullish-values/index.html b/course/fundamentals-v3/13-nullish-values/index.html index 00e7bed64..762d3d1a9 100644 --- a/course/fundamentals-v3/13-nullish-values/index.html +++ b/course/fundamentals-v3/13-nullish-values/index.html @@ -60,7 +60,7 @@ the possibility that values are null or undefined. In this chapter, we will dive deep into null, undefined, definite assignment, and the non-null assertion operator. -"/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/14-generics/index.html b/course/fundamentals-v3/14-generics/index.html index cddf254f7..c1a3a430d 100644 --- a/course/fundamentals-v3/14-generics/index.html +++ b/course/fundamentals-v3/14-generics/index.html @@ -54,7 +54,7 @@ to reuse types broadly across a TypeScript project. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/15-dict-map-filter-reduce/index.html b/course/fundamentals-v3/15-dict-map-filter-reduce/index.html index a2c75ffe0..9474569d4 100644 --- a/course/fundamentals-v3/15-dict-map-filter-reduce/index.html +++ b/course/fundamentals-v3/15-dict-map-filter-reduce/index.html @@ -54,7 +54,7 @@ quite often. Let's build out similar utilities that operate on dictionaries! "/>

Learn TypeScript w/ Mike North

Dictionary map, filter and reduce

June 08, 2021

Let’s put our newfound knowledge around Generics to the test by building out +"/>

Learn TypeScript w/ Mike North

Dictionary map, filter and reduce

June 08, 2021

Let’s put our newfound knowledge around Generics to the test by building out some higher-order functions that operate on dictionaries:

ts
///// SAMPLE DATA FOR YOUR EXPERIMENTATION PLEASURE (do not modify)
const fruits = {
apple: { color: "red", mass: 100 },
grape: { color: "red", mass: 5 },
banana: { color: "yellow", mass: 183 },
lemon: { color: "yellow", mass: 80 },
pear: { color: "green", mass: 178 },
orange: { color: "orange", mass: 262 },
raspberry: { color: "red", mass: 4 },
cherry: { color: "red", mass: 5 },
}
 
interface Dict<T> {
[k: string]: T
}
 
// Array.prototype.map, but for Dict
function mapDict(...args: any[]): any {}
// Array.prototype.filter, but for Dict
function filterDict(...args: any[]): any {}
// Array.prototype.reduce, but for Dict
function reduceDict(...args: any[]): any {}
 
/////////////////////////////////////////
///////////// TEST SUITE ///////////////
//////// no need to modify these ////////
/////////////////////////////////////////
 
// MAP
const fruitsWithKgMass = mapDict(fruits, (fruit, name) => ({
Parameter 'fruit' implicitly has an 'any' type.
Parameter 'name' implicitly has an 'any' type.
7006
7006
Parameter 'fruit' implicitly has an 'any' type.
Parameter 'name' implicitly has an 'any' type.
...fruit,
kg: 0.001 * fruit.mass,
name,
}))
const lemonName: string = fruitsWithKgMass.lemon.name
// @ts-ignore-error
const failLemonName: number = fruitsWithKgMass.lemon.name
assertOk(
fruitsWithKgMass,
"[MAP] mapDict returns something truthy"
)
assertEquals(
fruitsWithKgMass.cherry.name,
"cherry",
'[MAP] .cherry has a "name" property with value "cherry"'
)
assertEquals(
fruitsWithKgMass.cherry.kg,
0.005,
'[MAP] .cherry has a "kg" property with value 0.005'
)
assertEquals(
fruitsWithKgMass.cherry.mass,
5,
'[MAP] .cherry has a "mass" property with value 5'
)
assertEquals(
Object.keys(fruitsWithKgMass).length,
8,
"[MAP] fruitsWithKgMass should have 8 keys"
)
 
// FILTER
// only red fruits
const redFruits = filterDict(
fruits,
(fruit) => fruit.color === "red"
Parameter 'fruit' implicitly has an 'any' type.7006Parameter 'fruit' implicitly has an 'any' type.
)
assertOk(
redFruits,
"[FILTER] filterDict returns something truthy"
)
assertEquals(
Object.keys(redFruits).length,
4,
"[FILTER] 4 fruits that satisfy the filter"
)
assertEquals(
Object.keys(redFruits).sort().join(", "),
"apple, cherry, grape, raspberry",
'[FILTER] Keys are "apple, cherry, grape, raspberry"'
)
 
// REDUCE
// If we had one of each fruit, how much would the total mass be?
const oneOfEachFruitMass = reduceDict(
fruits,
(currentMass, fruit) => currentMass + fruit.mass,
Parameter 'currentMass' implicitly has an 'any' type.
Parameter 'fruit' implicitly has an 'any' type.
7006
7006
Parameter 'currentMass' implicitly has an 'any' type.
Parameter 'fruit' implicitly has an 'any' type.
0
)
assertOk(
redFruits,
"[REDUCE] reduceDict returns something truthy"
)
assertEquals(
typeof oneOfEachFruitMass,
"number",
"[REDUCE] reduceDict returns a number"
)
assertEquals(
oneOfEachFruitMass,
817,
"[REDUCE] 817g mass if we had one of each fruit"
)
Try
@@ -64,7 +64,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/16-type-param-scopes-and-constraints/index.html b/course/fundamentals-v3/16-type-param-scopes-and-constraints/index.html index d93f8aa1e..d0c521673 100644 --- a/course/fundamentals-v3/16-type-param-scopes-and-constraints/index.html +++ b/course/fundamentals-v3/16-type-param-scopes-and-constraints/index.html @@ -57,7 +57,7 @@ "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/fundamentals-v3/index.html b/course/fundamentals-v3/index.html index 8fd8143bd..cf0fbc6d0 100644 --- a/course/fundamentals-v3/index.html +++ b/course/fundamentals-v3/index.html @@ -48,7 +48,7 @@ } } }) - TypeScript Fundamentals v3 | Learn TypeScript w/ Mike North

View the Frontend Masters video course for TypeScript Fundamentals v3 here

TypeScript Fundamentals v3

Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app.

01Intro

We'll discuss the goals and agenda of this course, and how to get up and + TypeScript Fundamentals v3 | Learn TypeScript w/ Mike North

View the Frontend Masters video course for TypeScript Fundamentals v3 here

TypeScript Fundamentals v3

Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app.

01Intro

We'll discuss the goals and agenda of this course, and how to get up and running with the workshop project in 2 minutes or less.

02Hello TypeScript

In this chapter, we'll get hands on with our first TypeScript program and the compiler CLI command, and examine a simple program's compiled output @@ -91,7 +91,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved.
\ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/01-project-setup/index.html b/course/intermediate-v1/01-project-setup/index.html index 5f38a0771..ed3972aef 100644 --- a/course/intermediate-v1/01-project-setup/index.html +++ b/course/intermediate-v1/01-project-setup/index.html @@ -54,7 +54,7 @@ running with the workshop project in 2 minutes or less. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/02-declaration-merging/index.html b/course/intermediate-v1/02-declaration-merging/index.html index cfa9ca255..a33aff3f9 100644 --- a/course/intermediate-v1/02-declaration-merging/index.html +++ b/course/intermediate-v1/02-declaration-merging/index.html @@ -60,7 +60,7 @@ each other, we'll first tackle the concept of declaration merging. Often when people grasp how TypeScript handles this, they never look at the language the same way again -"/> \ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/03-modules/index.html b/course/intermediate-v1/03-modules/index.html index 1b2650f75..7d35f0bee 100644 --- a/course/intermediate-v1/03-modules/index.html +++ b/course/intermediate-v1/03-modules/index.html @@ -63,7 +63,7 @@ CommonJS module format. In this chapter, we'll look at modules in depth so that you have all the tools you need in order to consume all the dependencies you care about, while keeping the TS compiler happy -"/> \ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/04-type-queries/index.html b/course/intermediate-v1/04-type-queries/index.html index bcc446310..babd36327 100644 --- a/course/intermediate-v1/04-type-queries/index.html +++ b/course/intermediate-v1/04-type-queries/index.html @@ -57,7 +57,7 @@ "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/05-conditional-types/index.html b/course/intermediate-v1/05-conditional-types/index.html index 41cd30327..a81bd93a7 100644 --- a/course/intermediate-v1/05-conditional-types/index.html +++ b/course/intermediate-v1/05-conditional-types/index.html @@ -60,7 +60,7 @@ While there is no "control flow" in a world where we're describing constraints with types (instead of procedural steps to execute "in a flow"), this tool does provide an important foundation for switching logic based on type information -"/> \ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/06-extract-exclude/index.html b/course/intermediate-v1/06-extract-exclude/index.html index 8b8282d6e..9bd7fc796 100644 --- a/course/intermediate-v1/06-extract-exclude/index.html +++ b/course/intermediate-v1/06-extract-exclude/index.html @@ -57,7 +57,7 @@ "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/07-infer/index.html b/course/intermediate-v1/07-infer/index.html index df6e31947..0384636ef 100644 --- a/course/intermediate-v1/07-infer/index.html +++ b/course/intermediate-v1/07-infer/index.html @@ -57,7 +57,7 @@ "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/08-indexed-access-types/index.html b/course/intermediate-v1/08-indexed-access-types/index.html index 01e8ae0bb..7689c109f 100644 --- a/course/intermediate-v1/08-indexed-access-types/index.html +++ b/course/intermediate-v1/08-indexed-access-types/index.html @@ -54,7 +54,7 @@ part(s) of an array or object type via indices. "/>

Learn TypeScript w/ Mike North

Indexed Access Types

June 10, 2021

Indexed Access types provide a mechanism for retrieving +"/>

Learn TypeScript w/ Mike North

Indexed Access Types

June 10, 2021

Indexed Access types provide a mechanism for retrieving part(s) of an array or object type via indices. We’ll look at how this kind of type works, and a couple of practical examples of where you might use them.

@@ -83,7 +83,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/09-mapped-types/index.html b/course/intermediate-v1/09-mapped-types/index.html index 8697915ac..bed39b8ae 100644 --- a/course/intermediate-v1/09-mapped-types/index.html +++ b/course/intermediate-v1/09-mapped-types/index.html @@ -63,7 +63,7 @@ study this type in detail, and demonstrate how it makes language features like indexed access types and conditional types even more powerful! -"/> \ No newline at end of file + \ No newline at end of file diff --git a/course/intermediate-v1/index.html b/course/intermediate-v1/index.html index b1c0935d8..3b86b14b4 100644 --- a/course/intermediate-v1/index.html +++ b/course/intermediate-v1/index.html @@ -54,7 +54,7 @@ complexity, while protecting your codebase and team from it's weaknesses. "/>

View the Frontend Masters video course for Intermediate TypeScript here

Intermediate TypeScript

Leverage TypeScript's strengths to provide clarity in the face of +"/>

View the Frontend Masters video course for Intermediate TypeScript here

Intermediate TypeScript

Leverage TypeScript's strengths to provide clarity in the face of complexity, while protecting your codebase and team from it's weaknesses.

01Intro

We'll discuss the goals and agenda of this course, and how to get up and running with the workshop project in 2 minutes or less. @@ -91,7 +91,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved.
\ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/01-intro/index.html b/course/making-typescript-stick/01-intro/index.html index 9408a6fb2..93ade0377 100644 --- a/course/making-typescript-stick/01-intro/index.html +++ b/course/making-typescript-stick/01-intro/index.html @@ -54,7 +54,7 @@ to best build your TypeScript understanding over time "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/02-warm-up/index.html b/course/making-typescript-stick/02-warm-up/index.html index 276ecb04f..ef6253fdf 100644 --- a/course/making-typescript-stick/02-warm-up/index.html +++ b/course/making-typescript-stick/02-warm-up/index.html @@ -57,7 +57,7 @@ "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/03-recent-updates-to-typescript/index.html b/course/making-typescript-stick/03-recent-updates-to-typescript/index.html index 57e79bb20..4743a9aaa 100644 --- a/course/making-typescript-stick/03-recent-updates-to-typescript/index.html +++ b/course/making-typescript-stick/03-recent-updates-to-typescript/index.html @@ -54,7 +54,7 @@ and compiler, starting with the 4.0 release. "/>

Learn TypeScript w/ Mike North

Recent updates to TypeScript

March 22, 2022

Table of Contents
© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/04-data-layer-challenge/index.html b/course/making-typescript-stick/04-data-layer-challenge/index.html index f5d8c10b4..b76564182 100644 --- a/course/making-typescript-stick/04-data-layer-challenge/index.html +++ b/course/making-typescript-stick/04-data-layer-challenge/index.html @@ -54,7 +54,7 @@ by building our typed data store. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/05-does-it-compile/index.html b/course/making-typescript-stick/05-does-it-compile/index.html index 7b9bbea4e..6c81cc935 100644 --- a/course/making-typescript-stick/05-does-it-compile/index.html +++ b/course/making-typescript-stick/05-does-it-compile/index.html @@ -54,7 +54,7 @@ can figure out if they will compile "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/06-jquery-challenge/index.html b/course/making-typescript-stick/06-jquery-challenge/index.html index 5cf674a61..45d823bde 100644 --- a/course/making-typescript-stick/06-jquery-challenge/index.html +++ b/course/making-typescript-stick/06-jquery-challenge/index.html @@ -54,7 +54,7 @@ top of the now standardized DOM APIs. "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/07-typepardy/index.html b/course/making-typescript-stick/07-typepardy/index.html index 0e0727318..4eeec1326 100644 --- a/course/making-typescript-stick/07-typepardy/index.html +++ b/course/making-typescript-stick/07-typepardy/index.html @@ -51,13 +51,13 @@ Game 2: Typepardy | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

Game 2: Typepardy

March 22, 2022

Download the game +"/>

Learn TypeScript w/ Mike North

© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/08-type-challenges/index.html b/course/making-typescript-stick/08-type-challenges/index.html index 477c7247b..be6c000ac 100644 --- a/course/making-typescript-stick/08-type-challenges/index.html +++ b/course/making-typescript-stick/08-type-challenges/index.html @@ -51,7 +51,7 @@ Challenge 3: Type Challenges | Learn TypeScript w/ Mike North \ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/09-guess-that-type/index.html b/course/making-typescript-stick/09-guess-that-type/index.html index 85eb2c26c..c1f5a6fcb 100644 --- a/course/making-typescript-stick/09-guess-that-type/index.html +++ b/course/making-typescript-stick/09-guess-that-type/index.html @@ -51,7 +51,7 @@ Game 3: Guess That Type | Learn TypeScript w/ Mike North

Learn TypeScript w/ Mike North

Game 3: Guess That Type

March 22, 2022

Table of Contents
© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/10-penpal-types/index.html b/course/making-typescript-stick/10-penpal-types/index.html index eff0c91bf..c86b409fd 100644 --- a/course/making-typescript-stick/10-penpal-types/index.html +++ b/course/making-typescript-stick/10-penpal-types/index.html @@ -54,7 +54,7 @@ on his path to becoming a typescript pro! "/> \ No newline at end of file + \ No newline at end of file diff --git a/course/making-typescript-stick/index.html b/course/making-typescript-stick/index.html index 0ffa7ecc6..bcd816b5f 100644 --- a/course/making-typescript-stick/index.html +++ b/course/making-typescript-stick/index.html @@ -54,7 +54,7 @@ the important concepts truly "stick" in your mind. "/>

View the Frontend Masters workshop for Making TypeScript Stick here

Making TypeScript Stick

Tackle a series of challenges designed to reinforce your knowledge and make +"/>

View the Frontend Masters workshop for Making TypeScript Stick here

Making TypeScript Stick

Tackle a series of challenges designed to reinforce your knowledge and make the important concepts truly "stick" in your mind.

01Intro

We'll discuss the inspiration and goals of this course, and how to best build your TypeScript understanding over time @@ -78,7 +78,7 @@ /static/c90a01c999166c1edc8c5f2b1018b3f5/1b59b/profile-pic.jpg 1.5x, /static/c90a01c999166c1edc8c5f2b1018b3f5/034c8/profile-pic.jpg 2x" />Mike North

Written by Mike North , Developer Experience Tech Lead at Stripe, and Frontend Masters Instructor. You should connect with him on LinkedIn or follow him on Twitter

© 2022 All Rights Reserved.
\ No newline at end of file + \ No newline at end of file diff --git a/framework-5e46e0a91ea54b0f77d9.js b/framework-5e46e0a91ea54b0f77d9.js new file mode 100644 index 000000000..dfc913d6e --- /dev/null +++ b/framework-5e46e0a91ea54b0f77d9.js @@ -0,0 +1,3 @@ +/*! For license information please see framework-5e46e0a91ea54b0f77d9.js.LICENSE.txt */ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[774],{8262:function(e,t,n){"use strict";var r=n(3586);function l(){}function a(){}a.resetWarningCache=l,e.exports=function(){function e(e,t,n,l,a,o){if(o!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:l};return n.PropTypes=n,n}},3980:function(e,t,n){e.exports=n(8262)()},3586:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2967:function(e,t,n){"use strict";var r=n(2784),l=n(308),a=n(4616);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n
© 2022 All Rights Reserved
\ No newline at end of file + \ No newline at end of file diff --git a/page-data/app-data.json b/page-data/app-data.json index 1a4f3e3f5..1d41b15aa 100644 --- a/page-data/app-data.json +++ b/page-data/app-data.json @@ -1 +1 @@ -{"webpackCompilationHash":"ed02e27285a4b088c4d8"} +{"webpackCompilationHash":"a792d56e5dd9b357fde2"} diff --git a/page-data/course/fundamentals-v3/09-functions/page-data.json b/page-data/course/fundamentals-v3/09-functions/page-data.json index b80bf205d..f1b3dfa1d 100644 --- a/page-data/course/fundamentals-v3/09-functions/page-data.json +++ b/page-data/course/fundamentals-v3/09-functions/page-data.json @@ -1,5 +1,5 @@ { "componentChunkName": "component---src-templates-blog-post-tsx", "path": "/course/fundamentals-v3/09-functions/", - "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"1f0f9925-6d38-59e1-a449-d99e9648469a","excerpt":"We have dealt with function argument and return types, but there\nare a few more in-depth features we need to cover. Callable types Both type aliases and…","html":"

We have dealt with function argument and return types, but there\nare a few more in-depth features we need to cover.

\n

Callable types

\n

Both type aliases and interfaces offer the capability to describe call signatures:

\n
ts
interface TwoNumberCalculation {
(x: number, y: number): number
}
 
type TwoNumberCalc = (x: number, y: number) => number
 
const add: TwoNumberCalculation = (a, b) => a + b
(parameter) a: number
const subtract: TwoNumberCalc = (x, y) => x - y
(parameter) x: number
Try
\n

Let’s pause for a minute to note:

\n
    \n
  • The return type for an interface is :number, and for the type alias it’s => number
  • \n
  • Because we provide types for the functions add and subtract, we don’t need to provide type annotations for each individual function’s argument list or return type
  • \n
\n

void1

\n

Sometimes functions don’t return anything, and we know from\nexperience with JavaScript, what actually happens in the situation below\nis that x will be undefined:

\n
ts
function printFormattedJSON(obj: string[]) {
console.log(JSON.stringify(obj, null, \" \"))
}
 
const x = printFormattedJSON([\"hello\", \"world\"])
const x: void
Try
\n

So why is it showing up as void?

\n

void is a special type, that’s specifically used to describe\nfunction return values. It has the following meaning:

\n
\n

The return value of a void function is intended to be ignored

\n
\n

We could type functions as returning undefined, but there are some interesting\ndifferences that highlight the reason for void’s existence:

\n
ts
function invokeInFourSeconds(callback: () => undefined) {
setTimeout(callback, 4000)
}
function invokeInFiveSeconds(callback: () => void) {
setTimeout(callback, 5000)
}
 
const values: number[] = []
invokeInFourSeconds(() => values.push(4))
Type 'number' is not assignable to type 'undefined'.2322Type 'number' is not assignable to type 'undefined'.
invokeInFiveSeconds(() => values.push(4))
Try
\n

It happens that Array.prototype.push returns a number,\nand our invokeInFourSeconds function above is unhappy about this being returned from the callback.

\n

Construct signatures

\n

Construct signatures are similar to call signatures, except they describe what should happen with the new keyword.

\n
ts
interface DateConstructor {
new (value: number): Date
}
 
let MyDateConstructor: DateConstructor = Date
const d = new MyDateConstructor()
const d: Date
Try
\n

These are rare, but if you ever happen to come across them - you now know what they are.

\n

Function overloads

\n

Imagine the following situation:

\n
html
<iframe src=\"https://example.com\" />
<!-- // -->
<form>
<input type=\"text\" name=\"name\" />
<input type=\"text\" name=\"email\" />
<input type=\"password\" name=\"password\" />
<input type=\"submit\" value=\"Login\" />
</form>
\n

What if we had to create a function that allowed us to register a “main event listener”?

\n
    \n
  • If we are passed a form element, we should allow registration of a “submit callback”
  • \n
  • If we are passed an iframe element, we should allow registration of a ”postMessage callback”
  • \n
\n

Let’s give it a shot:

\n
ts
type FormSubmitHandler = (data: FormData) => void
type MessageHandler = (evt: MessageEvent) => void
 
function handleMainEvent(
elem: HTMLFormElement | HTMLIFrameElement,
handler: FormSubmitHandler | MessageHandler
) {}
 
const myFrame = document.getElementsByTagName(\"iframe\")[0]
const myFrame: HTMLIFrameElement
handleMainEvent(myFrame, (val) => {
(parameter) val: any
})
Try
\n

This is not good — we are allowing too many possibilities here, including things we don’t aim to support (e.g., using a HTMLIFrameElement with FormSubmitHandler, which doesn’t make much sense).

\n

We can solve this using function overloads, where we define multiple function heads that serve as entry points to a single implementation:

\n
ts
type FormSubmitHandler = (data: FormData) => void
type MessageHandler = (evt: MessageEvent) => void
 
function handleMainEvent(
elem: HTMLFormElement,
handler: FormSubmitHandler
)
function handleMainEvent(
elem: HTMLIFrameElement,
handler: MessageHandler
)
function handleMainEvent(
elem: HTMLFormElement | HTMLIFrameElement,
handler: FormSubmitHandler | MessageHandler
) {}
 
const myFrame = document.getElementsByTagName(\"iframe\")[0]
const myFrame: HTMLIFrameElement
const myForm = document.getElementsByTagName(\"form\")[0]
const myForm: HTMLFormElement
handleMainEvent(myFrame, (val) => {
function handleMainEvent(elem: HTMLIFrameElement, handler: MessageHandler): any (+1 overload)
})
handleMainEvent(myForm, (val) => {
function handleMainEvent(elem: HTMLFormElement, handler: FormSubmitHandler): any (+1 overload)
})
Try
\n

Look at that! We have effectively created a linkage between\nthe first and second arguments, which allows our callback’s\nargument type to change, based on the type of handleMainEvent’s first argument.

\n

Let’s take a closer look at the function declaration:

\n
ts
function handleMainEvent(
elem: HTMLFormElement,
handler: FormSubmitHandler
)
function handleMainEvent(
elem: HTMLIFrameElement,
handler: MessageHandler
)
function handleMainEvent(
elem: HTMLFormElement | HTMLIFrameElement,
handler: FormSubmitHandler | MessageHandler
) {}
 
handleMainEvent
function handleMainEvent(elem: HTMLFormElement, handler: FormSubmitHandler): any (+1 overload)
Try
\n

This looks like three function declarations, but it’s really\ntwo “heads” that define an argument list and a return type,\nfollowed by our original implementation.

\n

If you take a close look at tooltips and autocomplete feedback you get from the TypeScript language server,\nit’s clear that you are only able to call into the two “heads”, leaving the underlying “third head + implementation” inaccessible from the outside world.

\n

One last thing that’s important to note: “implementation” function signature must be general enough to include everything that’s possible through the exposed first and second function heads. For example, this wouldn’t work

\n
ts
function handleMainEvent(
elem: HTMLFormElement,
handler: FormSubmitHandler
)
function handleMainEvent(
This overload signature is not compatible with its implementation signature.2394This overload signature is not compatible with its implementation signature.
elem: HTMLIFrameElement,
handler: MessageHandler
)
function handleMainEvent(elem: HTMLFormElement) {}
 
handleMainEvent
function handleMainEvent(elem: HTMLFormElement, handler: FormSubmitHandler): any (+1 overload)
Try
\n

this types

\n

Sometimes we have a free-standing function that has a strong opinion around\nwhat this will end up being, at the time it is invoked.

\n

For example, if we had a DOM event listener for a button:

\n
html
<button onClick=\"myClickHandler\">Click Me!</button>
\n

We could define myClickHandler as follows

\n
ts
function myClickHandler(event: Event) {
this.disabled = true
'this' implicitly has type 'any' because it does not have a type annotation.2683'this' implicitly has type 'any' because it does not have a type annotation.
}
 
myClickHandler(new Event(\"click\")) // seems ok
Try
\n

Oops! TypeScript isn’t happy with us. Despite the fact that we know that this will be element that fired the event, the compiler doesn’t seem to be happy with us using it in this way.

\n

To address the problem, we need to give this function a this type

\n
ts
function myClickHandler(
this: HTMLButtonElement,
event: Event
) {
this.disabled = true
(property) HTMLButtonElement.disabled: boolean
}
 
myClickHandler(new Event(\"click\")) // seems no longer ok
The 'this' context of type 'void' is not assignable to method's 'this' of type 'HTMLButtonElement'.2684The 'this' context of type 'void' is not assignable to method's 'this' of type 'HTMLButtonElement'.
Try
\n

Now when we try to directly invoke myClickHandler on the last line of the code snippet above\nwe get a new compiler error. Effectively, we have failed to provide the this that this function\nstates it wants.

\n
ts
function myClickHandler(
this: HTMLButtonElement,
event: Event
) {
this.disabled = true
(property) HTMLButtonElement.disabled: boolean
}
myClickHandler
function myClickHandler(this: HTMLButtonElement, event: Event): void
const myButton = document.getElementsByTagName(\"button\")[0]
const boundHandler =
const boundHandler: (event: Event) => void
myClickHandler.bind(myButton)
boundHandler(new Event(\"click\")) // bound version: ok
myClickHandler.call(myButton, new Event(\"click\")) // also ok
Try
\n

Note TypeScript understands that .bind, .call or .apply will result in the proper this being passed to the function as part of its invocation.

\n

Function type best practices

\n

Explicitly define return types

\n

TypeScript is capable of inferring function return types quite effectively,\nbut this accommodating behavior can lead to unintentional ripple effects where\ntypes change throughout your codebase

\n

consider the following example

\n
ts
export async function getData(url: string) {
const resp = await fetch(url)
const data = (await resp.json()) as {
properties: string[]
}
return data
}
 
function loadData() {
getData(\"https://example.com\").then((result) => {
console.log(result.properties.join(\", \"))
(parameter) result: {\n properties: string[];\n}
})
}
Try
\n

and what if we made a seemingly innocent change

\n
diff
export async function getData(url: string) {
const resp = await fetch(url)
+ if (resp.ok) {
const data = await resp.json()
return data
+ }
}
\n

We’ll see some type-checking errors pop up, but at the invocation site, not the declaration site.

\n

Imagine if we were passing this value through several other functions before reaching the point where\ntype checking alerted us to a problem!

\n
ts
async function getData(url: string) {
const resp = await fetch(url)
if (resp.ok) {
const data = (await resp.json()) as {
properties: string[]
}
return data
}
}
 
function loadData() {
getData(\"https://example.com\").then((result) => {
console.log(result.properties.join(\", \"))
Object is possibly 'undefined'.2532Object is possibly 'undefined'.
(parameter) result: {\n properties: string[];\n} | undefined
})
}
Try
\n

If we use the same example, but define a return type explicitly, the error message\nis surfaced at the declaration site

\n
ts
async function getData(
url: string
): Promise<{ properties: string[] }> {
Function lacks ending return statement and return type does not include 'undefined'.2366Function lacks ending return statement and return type does not include 'undefined'.
const resp = await fetch(url)
if (resp.ok) {
const data = (await resp.json()) as {
properties: string[]
}
return data
}
}
 
function loadData() {
getData(\"https://example.com\").then((result) => {
console.log(result.properties.join(\", \"))
})
}
Try
\n
\n
\n
    \n
  1. \n

    There is a native Javascript concept of a native void keyword, but it’s not related to the TypeScript concept of the same name.

    \n\n
  2. \n
\n
","tableOfContents":"","fields":{"slug":"/course/fundamentals-v3/09-functions/"},"frontmatter":{"title":"Functions","course":"fundamentals-v3","date":"June 08, 2021","description":"So far, we have dealt with function argument and return types. There\nare a few more in-depth features we need to cover, including\nmultiple function heads and callable types.\n"}}},"pageContext":{"slug":"/course/fundamentals-v3/09-functions/","title":"Functions","course":"fundamentals-v3","order":9,"previous":{"fields":{"slug":"/course/fundamentals-v3/08-exercise-json-types/"},"frontmatter":{"title":"JSON types","order":8,"course":"fundamentals-v3","isExercise":true}},"next":{"fields":{"slug":"/course/fundamentals-v3/10-classes/"},"frontmatter":{"title":"Classes","order":10,"course":"fundamentals-v3","isExercise":null}}}}, + "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"1f0f9925-6d38-59e1-a449-d99e9648469a","excerpt":"We have dealt with function argument and return types, but there\nare a few more in-depth features we need to cover. Callable types Both type aliases and…","html":"

We have dealt with function argument and return types, but there\nare a few more in-depth features we need to cover.

\n

Callable types

\n

Both type aliases and interfaces offer the capability to describe call signatures:

\n
ts
interface TwoNumberCalculation {
(x: number, y: number): number
}
 
type TwoNumberCalc = (x: number, y: number) => number
 
const add: TwoNumberCalculation = (a, b) => a + b
(parameter) a: number
const subtract: TwoNumberCalc = (x, y) => x - y
(parameter) x: number
Try
\n

Let’s pause for a minute to note:

\n
    \n
  • The return type for an interface is :number, and for the type alias it’s => number
  • \n
  • Because we provide types for the functions add and subtract, we don’t need to provide type annotations for each individual function’s argument list or return type
  • \n
\n

void1

\n

Sometimes functions don’t return anything, and we know from\nexperience with JavaScript, what actually happens in the situation below\nis that x will be undefined:

\n
ts
function printFormattedJSON(obj: string[]) {
console.log(JSON.stringify(obj, null, \" \"))
}
 
const x = printFormattedJSON([\"hello\", \"world\"])
const x: void
Try
\n

So why is it showing up as void?

\n

void is a special type, that’s specifically used to describe\nfunction return values. It has the following meaning:

\n
\n

The return value of a void function is intended to be ignored

\n
\n

We could type functions as returning undefined, but there are some interesting\ndifferences that highlight the reason for void’s existence:

\n
ts
function invokeInFourSeconds(callback: () => undefined) {
setTimeout(callback, 4000)
}
function invokeInFiveSeconds(callback: () => void) {
setTimeout(callback, 5000)
}
 
const values: number[] = []
invokeInFourSeconds(() => values.push(4))
Type 'number' is not assignable to type 'undefined'.2322Type 'number' is not assignable to type 'undefined'.
invokeInFiveSeconds(() => values.push(4))
Try
\n

It happens that Array.prototype.push returns a number,\nand our invokeInFourSeconds function above is unhappy about this being returned from the callback.

\n

Construct signatures

\n

Construct signatures are similar to call signatures, except they describe what should happen with the new keyword.

\n
ts
interface DateConstructor {
new (value: number): Date
}
 
let MyDateConstructor: DateConstructor = Date
const d = new MyDateConstructor()
const d: Date
Try
\n

These are rare, but if you ever happen to come across them - you now know what they are.

\n

Function overloads

\n

Imagine the following situation:

\n
html
<iframe src=\"https://example.com\" />
<!-- // -->
<form>
<input type=\"text\" name=\"name\" />
<input type=\"text\" name=\"email\" />
<input type=\"password\" name=\"password\" />
<input type=\"submit\" value=\"Login\" />
</form>
\n

What if we had to create a function that allowed us to register a “main event listener”?

\n
    \n
  • If we are passed a form element, we should allow registration of a “submit callback”
  • \n
  • If we are passed an iframe element, we should allow registration of a ”postMessage callback”
  • \n
\n

Let’s give it a shot:

\n
ts
type FormSubmitHandler = (data: FormData) => void
type MessageHandler = (evt: MessageEvent) => void
 
function handleMainEvent(
elem: HTMLFormElement | HTMLIFrameElement,
handler: FormSubmitHandler | MessageHandler
) {}
 
const myFrame = document.getElementsByTagName(\"iframe\")[0]
const myFrame: HTMLIFrameElement
handleMainEvent(myFrame, (val) => {
(parameter) val: any
})
Try
\n

This is not good — we are allowing too many possibilities here, including things we don’t aim to support (e.g., using a HTMLIFrameElement with FormSubmitHandler, which doesn’t make much sense).

\n

We can solve this using function overloads, where we define multiple function heads that serve as entry points to a single implementation:

\n
ts
type FormSubmitHandler = (data: FormData) => void
type MessageHandler = (evt: MessageEvent) => void
 
function handleMainEvent(
elem: HTMLFormElement,
handler: FormSubmitHandler
)
function handleMainEvent(
elem: HTMLIFrameElement,
handler: MessageHandler
)
function handleMainEvent(
elem: HTMLFormElement | HTMLIFrameElement,
handler: FormSubmitHandler | MessageHandler
) {}
 
const myFrame = document.getElementsByTagName(\"iframe\")[0]
const myFrame: HTMLIFrameElement
const myForm = document.getElementsByTagName(\"form\")[0]
const myForm: HTMLFormElement
handleMainEvent(myFrame, (val) => {
function handleMainEvent(elem: HTMLIFrameElement, handler: MessageHandler): any (+1 overload)
})
handleMainEvent(myForm, (val) => {
function handleMainEvent(elem: HTMLFormElement, handler: FormSubmitHandler): any (+1 overload)
})
Try
\n

Look at that! We have effectively created a linkage between\nthe first and second arguments, which allows our callback’s\nargument type to change, based on the type of handleMainEvent’s first argument.

\n

Let’s take a closer look at the function declaration:

\n
ts
function handleMainEvent(
elem: HTMLFormElement,
handler: FormSubmitHandler
)
function handleMainEvent(
elem: HTMLIFrameElement,
handler: MessageHandler
)
function handleMainEvent(
elem: HTMLFormElement | HTMLIFrameElement,
handler: FormSubmitHandler | MessageHandler
) {}
 
handleMainEvent
function handleMainEvent(elem: HTMLFormElement, handler: FormSubmitHandler): any (+1 overload)
Try
\n

This looks like three function declarations, but it’s really\ntwo “heads” that define an argument list and a return type,\nfollowed by our original implementation.

\n

If you take a close look at tooltips and autocomplete feedback you get from the TypeScript language server,\nit’s clear that you are only able to call into the two “heads”, leaving the underlying “third head + implementation” inaccessible from the outside world.

\n

One last thing that’s important to note: “implementation” function signature must be general enough to include everything that’s possible through the exposed first and second function heads. For example, this wouldn’t work

\n
ts
function handleMainEvent(
elem: HTMLFormElement,
handler: FormSubmitHandler
)
function handleMainEvent(
This overload signature is not compatible with its implementation signature.2394This overload signature is not compatible with its implementation signature.
elem: HTMLIFrameElement,
handler: MessageHandler
)
function handleMainEvent(elem: HTMLFormElement) {}
 
handleMainEvent
function handleMainEvent(elem: HTMLFormElement, handler: FormSubmitHandler): any (+1 overload)
Try
\n

this types

\n

Sometimes we have a free-standing function that has a strong opinion around\nwhat this will end up being, at the time it is invoked.

\n

For example, if we had a DOM event listener for a button:

\n
html
<button onClick=\"myClickHandler\">Click Me!</button>
\n

We could define myClickHandler as follows

\n
ts
function myClickHandler(event: Event) {
this.disabled = true
'this' implicitly has type 'any' because it does not have a type annotation.2683'this' implicitly has type 'any' because it does not have a type annotation.
}
 
myClickHandler(new Event(\"click\")) // seems ok
Try
\n

Oops! TypeScript isn’t happy with us. Despite the fact that we know that this will be element that fired the event, the compiler doesn’t seem to be happy with us using it in this way.

\n

To address the problem, we need to give this function a this type

\n
ts
function myClickHandler(
this: HTMLButtonElement,
event: Event
) {
this.disabled = true
(property) HTMLButtonElement.disabled: boolean
}
 
myClickHandler(new Event(\"click\")) // seems no longer ok
The 'this' context of type 'void' is not assignable to method's 'this' of type 'HTMLButtonElement'.2684The 'this' context of type 'void' is not assignable to method's 'this' of type 'HTMLButtonElement'.
Try
\n

Now when we try to directly invoke myClickHandler on the last line of the code snippet above\nwe get a new compiler error. Effectively, we have failed to provide the this that this function\nstates it wants.

\n
ts
function myClickHandler(
this: HTMLButtonElement,
event: Event
) {
this.disabled = true
(property) HTMLButtonElement.disabled: boolean
}
myClickHandler
function myClickHandler(this: HTMLButtonElement, event: Event): void
const myButton = document.getElementsByTagName(\"button\")[0]
const boundHandler =
const boundHandler: (event: Event) => void
myClickHandler.bind(myButton)
boundHandler(new Event(\"click\")) // bound version: ok
myClickHandler.call(myButton, new Event(\"click\")) // also ok
Try
\n

Note TypeScript understands that .bind, .call or .apply will result in the proper this being passed to the function as part of its invocation.

\n

Function type best practices

\n

Explicitly define return types

\n

TypeScript is capable of inferring function return types quite effectively,\nbut this accommodating behavior can lead to unintentional ripple effects where\ntypes change throughout your codebase

\n

consider the following example

\n
ts
export async function getData(url: string) {
const resp = await fetch(url)
const data = (await resp.json()) as {
properties: string[]
}
return data
}
 
function loadData() {
getData(\"https://example.com\").then((result) => {
console.log(result.properties.join(\", \"))
(parameter) result: {\n properties: string[];\n}
})
}
Try
\n

and what if we made a seemingly innocent change

\n
diff
export async function getData(url: string) {
const resp = await fetch(url)
+ if (resp.ok) {
const data = await resp.json()
return data
+ }
}
\n

We’ll see some type-checking errors pop up, but at the invocation site, not the declaration site.

\n

Imagine if we were passing this value through several other functions before reaching the point where\ntype checking alerted us to a problem!

\n
ts
async function getData(url: string) {
const resp = await fetch(url)
if (resp.ok) {
const data = (await resp.json()) as {
properties: string[]
}
return data
}
}
 
function loadData() {
getData(\"https://example.com\").then((result) => {
console.log(result.properties.join(\", \"))
Object is possibly 'undefined'.2532Object is possibly 'undefined'.
(parameter) result: {\n properties: string[];\n} | undefined
})
}
Try
\n

If we use the same example, but define a return type explicitly, the error message\nis surfaced at the declaration site

\n
ts
async function getData(
url: string
): Promise<{ properties: string[] }> {
Function lacks ending return statement and return type does not include 'undefined'.2366Function lacks ending return statement and return type does not include 'undefined'.
const resp = await fetch(url)
if (resp.ok) {
const data = (await resp.json()) as {
properties: string[]
}
return data
}
}
 
function loadData() {
getData(\"https://example.com\").then((result) => {
console.log(result.properties.join(\", \"))
})
}
Try
\n
\n
\n
    \n
  1. \n

    There is a native Javascript concept of a native void keyword, but it’s not related to the TypeScript concept of the same name.

    \n\n
  2. \n
\n
","tableOfContents":"","fields":{"slug":"/course/fundamentals-v3/09-functions/"},"frontmatter":{"title":"Functions","course":"fundamentals-v3","date":"June 08, 2021","description":"So far, we have dealt with function argument and return types. There\nare a few more in-depth features we need to cover, including\nmultiple function heads and callable types.\n"}}},"pageContext":{"slug":"/course/fundamentals-v3/09-functions/","title":"Functions","course":"fundamentals-v3","order":9,"previous":{"fields":{"slug":"/course/fundamentals-v3/08-exercise-json-types/"},"frontmatter":{"title":"JSON types","order":8,"course":"fundamentals-v3","isExercise":true}},"next":{"fields":{"slug":"/course/fundamentals-v3/10-classes/"},"frontmatter":{"title":"Classes","order":10,"course":"fundamentals-v3","isExercise":null}}}}, "staticQueryHashes": ["2785745750","2841359383"]} \ No newline at end of file diff --git a/page-data/course/fundamentals-v3/11-top-and-bottom-types/page-data.json b/page-data/course/fundamentals-v3/11-top-and-bottom-types/page-data.json index 4e2790d04..67d526907 100644 --- a/page-data/course/fundamentals-v3/11-top-and-bottom-types/page-data.json +++ b/page-data/course/fundamentals-v3/11-top-and-bottom-types/page-data.json @@ -1,5 +1,5 @@ { "componentChunkName": "component---src-templates-blog-post-tsx", "path": "/course/fundamentals-v3/11-top-and-bottom-types/", - "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"feb3140f-fe8d-5205-882c-f627c0d15373","excerpt":"Types describe sets of allowed values Let’s imagine that types describe a set of allowed values that a value might be. For example: x could be either item from…","html":"

Types describe sets of allowed values

\n

Let’s imagine that types describe a set of allowed values that a value might be.

\n

For example:

\n
ts
const x: boolean
\n

x could be either item from the following set {true, false}. Let’s look at another example:

\n
ts
const y: number
\n

y could be any number. If we wanted to get technical and express this in terms of set builder notation, this would be {y | y is a number}1

\n

Let’s look at a few more, just for completeness:

\n
ts
let a: 5 | 6 | 7 // anything in { 5, 6, 7 }
let b: null // anything in { null }
let c: {
favoriteFruit?: \"pineapple\" // { \"pineapple\", undefined }
(property) favoriteFruit?: \"pineapple\" | undefined
}
Try
\n

Hopefully this makes sense. Now we are ready to continue…

\n

Top types

\n

A top type (symbol: ) is a type that describes any possible value allowed by the system.\nTo use our set theory mental model, we could describe this as {x| x could be anything }

\n

TypeScript provides two of these types: any and unknown.

\n

any

\n

You can think of values with an any type as “playing by the usual JavaScript rules”.\nHere’s an illustrative example:

\n
ts
let flexible: any = 4
flexible = \"Download some more ram\"
flexible = window.document
flexible = setTimeout
Try
\n

any typed values provide none of the safety we typically expect from TypeScript.

\n
ts
let flexible: any = 14
flexible.it.is.possible.to.access.any.deep.property
any
Try
\n

It’s important to understand that any is not necessarily a problem — sometimes\nit’s exactly the right type to use for a particular situation.

\n

For example, console.log:

\n
ts
console.log(window, Promise, setTimeout, \"foo\")
(method) Console.log(...data: any[]): void
Try
\n

We can see here that any is not always a “bug” or a “problem” — it just indicates maximal flexibility and the absence of type checking validation.

\n

unknown

\n

Like any, unknown can accept any value:

\n
ts
let flexible: unknown = 4
flexible = \"Download some more ram\"
flexible = window.document
flexible = setTimeout
Try
\n

However, unknown is different from any in a very important way:

\n
\n

Values with an unknown type cannot be used without first\napplying a type guard

\n
\n
ts
let myUnknown: unknown = 14
myUnknown.it.is.possible.to.access.any.deep.property
Object is of type 'unknown'.2571Object is of type 'unknown'.
any
 
// This code runs for { myUnknown| anything }
if (typeof myUnknown === \"string\") {
// This code runs for { myUnknown| all strings }
console.log(myUnknown, \"is a string\")
let myUnknown: string
} else if (typeof myUnknown === \"number\") {
// This code runs for { myUnknown| all numbers }
console.log(myUnknown, \"is a number\")
let myUnknown: number
} else {
// this would run for \"the leftovers\"
// { myUnknown| anything except string or numbers }
}
Try
\n

Practical use of top types

\n

You will run into places where top types come in handy very often. In particular,\nif you ever convert a project from JavaScript to TypeScript, it’s very convenient\nto be able to incrementally add increasingly strong types. A lot of things will\nbe any until you get a chance to give them some attention.

\n

unknown is great for values received at runtime (e.g., your data layer). By\nobligating consumers of these values to perform some light validation before using them,\nerrors are caught earlier, and can often be surfaced with more context.

\n

Bottom type: never

\n

A bottom type (symbol: ) is a type that describes no possible value allowed by the system.\nTo use our set theory mental model, we could describe this as “any value from the following set: { } (intentionally empty)”

\n

TypeScript provides one bottom type: never.

\n

At first glance, this may appear to be an extremely abstract and pointless concept, but there’s\none use case that should convince you otherwise. Let’s take a look at this scenario below.

\n

Exhaustive conditionals

\n

Let’s consider the following scenario:

\n
ts
class Car {
drive() {
console.log(\"vroom\")
}
}
class Truck {
tow() {
console.log(\"dragging something\")
}
}
type Vehicle = Truck | Car
 
let myVehicle: Vehicle = obtainRandomVehicle()
 
// The exhaustive conditional
if (myVehicle instanceof Truck) {
myVehicle.tow() // Truck
} else if (myVehicle instanceof Car) {
myVehicle.drive() // Car
} else {
// NEITHER!
const neverValue: never = myVehicle
}
Try
\n

Now, leaving the conditional exactly as-is, let’s add Boat as a vehicle type:

\n
ts
class Car {
drive() {
console.log(\"vroom\")
}
}
class Truck {
tow() {
console.log(\"dragging something\")
}
}
class Boat {
isFloating() {
return true
}
}
type Vehicle = Truck | Car | Boat
 
let myVehicle: Vehicle = obtainRandomVehicle()
 
// The exhaustive conditional
if (myVehicle instanceof Truck) {
myVehicle.tow() // Truck
} else if (myVehicle instanceof Car) {
myVehicle.drive() // Car
} else {
// NEITHER!
const neverValue: never = myVehicle
Type 'Boat' is not assignable to type 'never'.2322Type 'Boat' is not assignable to type 'never'.
}
Try
\n

Effectively, what has happened here is that we have been alerted to the fact that\na new possibility for Vehicle has been introduced. As a result, we don’t\nend up with the type for myVehicle as a never in that final else clause.

\n

I recommend handling this a little more gracefully via an error subclass:

\n
ts
class UnreachableError extends Error {
constructor(_nvr: never, message: string) {
super(message)
}
}
 
// The exhaustive conditional
if (myVehicle instanceof Truck) {
myVehicle.tow() // Truck
} else if (myVehicle instanceof Car) {
myVehicle.drive() // Car
} else {
// NEITHER!
throw new UnreachableError(
myVehicle,
Argument of type 'Boat' is not assignable to parameter of type 'never'.2345Argument of type 'Boat' is not assignable to parameter of type 'never'.
`Unexpected vehicle type: ${myVehicle}`
)
}
Try
\n

Now, one of three things will happen in that final else block

\n
    \n
  • We will have handled every case before reaching it, and thus we will never enter the final else block
  • \n
  • We will catch upstream code changes that need to be handled in this conditional at compile time (e.g., adding the Boat case)
  • \n
  • If somehow an unexpected value “slip through” and is not caught until we actually run the code, we will get a meaningful error message
  • \n
\n

Note that this approach works nicely with a switch statement, when the UnreachableError is thrown from the default case clause.

\n
\n
\n
    \n
  1. \n

    Technically in JS or TS this would be { y| -Number.MAX_VALUE <= y <= Number.MAX_VALUE }, but if you know enough to ask, you probably don’t need this footnote…!

    \n\n
  2. \n
\n
","tableOfContents":"","fields":{"slug":"/course/fundamentals-v3/11-top-and-bottom-types/"},"frontmatter":{"title":"Top and bottom types","course":"fundamentals-v3","date":"June 08, 2021","description":"Top types can be anything, bottom types can't be anything. We will also look\nat three \"extreme types\" in TypeScript: any, unknown and never.\n"}}},"pageContext":{"slug":"/course/fundamentals-v3/11-top-and-bottom-types/","title":"Top and bottom types","course":"fundamentals-v3","order":11,"previous":{"fields":{"slug":"/course/fundamentals-v3/10-classes/"},"frontmatter":{"title":"Classes","order":10,"course":"fundamentals-v3","isExercise":null}},"next":{"fields":{"slug":"/course/fundamentals-v3/12-type-guards/"},"frontmatter":{"title":"Type guards and narrowing","order":12,"course":"fundamentals-v3","isExercise":null}}}}, + "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"feb3140f-fe8d-5205-882c-f627c0d15373","excerpt":"Types describe sets of allowed values Let’s imagine that types describe a set of allowed values that a value might be. For example: x could be either item from…","html":"

Types describe sets of allowed values

\n

Let’s imagine that types describe a set of allowed values that a value might be.

\n

For example:

\n
ts
const x: boolean
\n

x could be either item from the following set {true, false}. Let’s look at another example:

\n
ts
const y: number
\n

y could be any number. If we wanted to get technical and express this in terms of set builder notation, this would be {y | y is a number}1

\n

Let’s look at a few more, just for completeness:

\n
ts
let a: 5 | 6 | 7 // anything in { 5, 6, 7 }
let b: null // anything in { null }
let c: {
favoriteFruit?: \"pineapple\" // { \"pineapple\", undefined }
(property) favoriteFruit?: \"pineapple\" | undefined
}
Try
\n

Hopefully this makes sense. Now we are ready to continue…

\n

Top types

\n

A top type (symbol: ) is a type that describes any possible value allowed by the system.\nTo use our set theory mental model, we could describe this as {x| x could be anything }

\n

TypeScript provides two of these types: any and unknown.

\n

any

\n

You can think of values with an any type as “playing by the usual JavaScript rules”.\nHere’s an illustrative example:

\n
ts
let flexible: any = 4
flexible = \"Download some more ram\"
flexible = window.document
flexible = setTimeout
Try
\n

any typed values provide none of the safety we typically expect from TypeScript.

\n
ts
let flexible: any = 14
flexible.it.is.possible.to.access.any.deep.property
any
Try
\n

It’s important to understand that any is not necessarily a problem — sometimes\nit’s exactly the right type to use for a particular situation.

\n

For example, console.log:

\n
ts
console.log(window, Promise, setTimeout, \"foo\")
(method) Console.log(...data: any[]): void
Try
\n

We can see here that any is not always a “bug” or a “problem” — it just indicates maximal flexibility and the absence of type checking validation.

\n

unknown

\n

Like any, unknown can accept any value:

\n
ts
let flexible: unknown = 4
flexible = \"Download some more ram\"
flexible = window.document
flexible = setTimeout
Try
\n

However, unknown is different from any in a very important way:

\n
\n

Values with an unknown type cannot be used without first\napplying a type guard

\n
\n
ts
let myUnknown: unknown = 14
myUnknown.it.is.possible.to.access.any.deep.property
Object is of type 'unknown'.2571Object is of type 'unknown'.
any
 
// This code runs for { myUnknown| anything }
if (typeof myUnknown === \"string\") {
// This code runs for { myUnknown| all strings }
console.log(myUnknown, \"is a string\")
let myUnknown: string
} else if (typeof myUnknown === \"number\") {
// This code runs for { myUnknown| all numbers }
console.log(myUnknown, \"is a number\")
let myUnknown: number
} else {
// this would run for \"the leftovers\"
// { myUnknown| anything except string or numbers }
}
Try
\n

Practical use of top types

\n

You will run into places where top types come in handy very often. In particular,\nif you ever convert a project from JavaScript to TypeScript, it’s very convenient\nto be able to incrementally add increasingly strong types. A lot of things will\nbe any until you get a chance to give them some attention.

\n

unknown is great for values received at runtime (e.g., your data layer). By\nobligating consumers of these values to perform some light validation before using them,\nerrors are caught earlier, and can often be surfaced with more context.

\n

Bottom type: never

\n

A bottom type (symbol: ) is a type that describes no possible value allowed by the system.\nTo use our set theory mental model, we could describe this as “any value from the following set: { } (intentionally empty)”

\n

TypeScript provides one bottom type: never.

\n

At first glance, this may appear to be an extremely abstract and pointless concept, but there’s\none use case that should convince you otherwise. Let’s take a look at this scenario below.

\n

Exhaustive conditionals

\n

Let’s consider the following scenario:

\n
ts
class Car {
drive() {
console.log(\"vroom\")
}
}
class Truck {
tow() {
console.log(\"dragging something\")
}
}
type Vehicle = Truck | Car
 
let myVehicle: Vehicle = obtainRandomVehicle()
 
// The exhaustive conditional
if (myVehicle instanceof Truck) {
myVehicle.tow() // Truck
} else if (myVehicle instanceof Car) {
myVehicle.drive() // Car
} else {
// NEITHER!
const neverValue: never = myVehicle
}
Try
\n

Now, leaving the conditional exactly as-is, let’s add Boat as a vehicle type:

\n
ts
class Car {
drive() {
console.log(\"vroom\")
}
}
class Truck {
tow() {
console.log(\"dragging something\")
}
}
class Boat {
isFloating() {
return true
}
}
type Vehicle = Truck | Car | Boat
 
let myVehicle: Vehicle = obtainRandomVehicle()
 
// The exhaustive conditional
if (myVehicle instanceof Truck) {
myVehicle.tow() // Truck
} else if (myVehicle instanceof Car) {
myVehicle.drive() // Car
} else {
// NEITHER!
const neverValue: never = myVehicle
Type 'Boat' is not assignable to type 'never'.2322Type 'Boat' is not assignable to type 'never'.
}
Try
\n

Effectively, what has happened here is that we have been alerted to the fact that\na new possibility for Vehicle has been introduced. As a result, we don’t\nend up with the type for myVehicle as a never in that final else clause.

\n

I recommend handling this a little more gracefully via an error subclass:

\n
ts
class UnreachableError extends Error {
constructor(_nvr: never, message: string) {
super(message)
}
}
 
// The exhaustive conditional
if (myVehicle instanceof Truck) {
myVehicle.tow() // Truck
} else if (myVehicle instanceof Car) {
myVehicle.drive() // Car
} else {
// NEITHER!
throw new UnreachableError(
myVehicle,
Argument of type 'Boat' is not assignable to parameter of type 'never'.2345Argument of type 'Boat' is not assignable to parameter of type 'never'.
`Unexpected vehicle type: ${myVehicle}`
)
}
Try
\n

Now, one of three things will happen in that final else block

\n
    \n
  • We will have handled every case before reaching it, and thus we will never enter the final else block
  • \n
  • We will catch upstream code changes that need to be handled in this conditional at compile time (e.g., adding the Boat case)
  • \n
  • If somehow an unexpected value “slip through” and is not caught until we actually run the code, we will get a meaningful error message
  • \n
\n

Note that this approach works nicely with a switch statement, when the UnreachableError is thrown from the default case clause.

\n
\n
\n
    \n
  1. \n

    Technically in JS or TS this would be { y| -Number.MAX_VALUE <= y <= Number.MAX_VALUE }, but if you know enough to ask, you probably don’t need this footnote…!

    \n\n
  2. \n
\n
","tableOfContents":"","fields":{"slug":"/course/fundamentals-v3/11-top-and-bottom-types/"},"frontmatter":{"title":"Top and bottom types","course":"fundamentals-v3","date":"June 08, 2021","description":"Top types can be anything, bottom types can't be anything. We will also look\nat three \"extreme types\" in TypeScript: any, unknown and never.\n"}}},"pageContext":{"slug":"/course/fundamentals-v3/11-top-and-bottom-types/","title":"Top and bottom types","course":"fundamentals-v3","order":11,"previous":{"fields":{"slug":"/course/fundamentals-v3/10-classes/"},"frontmatter":{"title":"Classes","order":10,"course":"fundamentals-v3","isExercise":null}},"next":{"fields":{"slug":"/course/fundamentals-v3/12-type-guards/"},"frontmatter":{"title":"Type guards and narrowing","order":12,"course":"fundamentals-v3","isExercise":null}}}}, "staticQueryHashes": ["2785745750","2841359383"]} \ No newline at end of file diff --git a/page-data/course/fundamentals-v3/13-nullish-values/page-data.json b/page-data/course/fundamentals-v3/13-nullish-values/page-data.json index 655e96cf2..004c7901c 100644 --- a/page-data/course/fundamentals-v3/13-nullish-values/page-data.json +++ b/page-data/course/fundamentals-v3/13-nullish-values/page-data.json @@ -1,5 +1,5 @@ { "componentChunkName": "component---src-templates-blog-post-tsx", "path": "/course/fundamentals-v3/13-nullish-values/", - "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"4af5e094-4e8a-597c-a3aa-a641a1a948cd","excerpt":"There are situations where we have to plan for, and deal with\nthe possibility that values are null or undefined. In this chapter\nwe’ll dive deep into null…","html":"

There are situations where we have to plan for, and deal with\nthe possibility that values are null or undefined. In this chapter\nwe’ll dive deep into null, undefined, definite assignment, non-nullish\ncoalescing, optional chaining and the non-null assertion operator.

\n

Although null, void and undefined are all used to describe “nothing” or “empty”,\nthey are independent types in TypeScript. Learning to use them to your advantage, and they can be powerful tools for clearly expressing your intent as a code author.

\n

null

\n
\n

null means: there is a value, and that value is nothing.\nWhile some people believe that null is not an important part of the JS language, I find that it’s useful to express the concept of a “nothing” result (kind of like an empty array, but not an array).

\n
\n

This nothing is very much a defined value, and is certainly a presence — not an absence — of information.

\n
ts
const userInfo = {
name: \"Mike\",
email: \"mike@example.com\",
secondaryEmail: null, // user has no secondary email
}
\n

undefined

\n
\n

undefined means the value isn’t available (yet?)

\n
\n

In the example below, completedAt will be set at some point\nbut there’s a period of time when we haven’t yet set it. undefined\nis an unambiguous indication that there may be something different there in the future:

\n
ts
const formInProgress = {
createdAt: new Date(),
data: new FormData(),
completedAt: undefined, //
}
function submitForm() {
formInProgress.completedAt = new Date()
}
\n

void

\n

We have already covered this in the functions chapter, but as a reminder:

\n
\n

void should exclusively be used to describe that a function’s return value should be ignored

\n
\n
ts
console.log(`console.log returns nothing.`)
(method) Console.log(...data: any[]): void
Try
\n

Non-null assertion operator

\n

The non-null assertion operator (!.) is used to cast away the possibility\nthat a value might be null or undefined.

\n

Keep in mind that the value could still be null or undefined, this\noperator just tells TypeScript to ignore that possibility.

\n

If the value does turn out to be missing, you will get the familiar cannot call foo on undefined family of errors at runtime:

\n
ts
type GroceryCart = {
fruits?: { name: string; qty: number }[]
vegetables?: { name: string; qty: number }[]
}
 
const cart: GroceryCart = {}
 
cart.fruits.push({ name: \"kumkuat\", qty: 1 })
Object is possibly 'undefined'.2532Object is possibly 'undefined'.
(property) fruits?: {\n name: string;\n qty: number;\n}[] | undefined
cart.fruits!.push({ name: \"kumkuat\", qty: 1 })
Try
\n

I recommend against using this in your app or library code, but\nif your test infrastructure represents a throw as a test failure (most should)\nthis is a great type guard to use in your test suite.

\n

In the above situation, if fruits was expected to be present and it’s not,\nthat’s a very reasonable test failure \"emoji-tada\"

\n

Definite assignment operator

\n

The definite assignment !: operator is used to suppress TypeScript’s\nobjections about a class field being used, when it can’t be proven1\nthat it was initialized.

\n

Let’s look at the following example:

\n
ts
class ThingWithAsyncSetup {
setupPromise: Promise<any> // ignore the <any> for now
isSetup: boolean
Property 'isSetup' has no initializer and is not definitely assigned in the constructor.2564Property 'isSetup' has no initializer and is not definitely assigned in the constructor.
 
constructor() {
this.setupPromise = new Promise((resolve) => {
this.isSetup = false
return this.doSetup(resolve)
}).then(() => {
this.isSetup = true
})
}
 
private async doSetup(resolve: (value: unknown) => void) {
// some async stuff
}
}
Try
\n

TypeScript is warning me that someone could create an instance of this class\nand immediately attempt to access .isSetup before it gets a boolean value

\n
ts
let myThing = new ThingWithAsyncSetup()
myThing.isSetup // what if this isn't assigned yet?
(property) ThingWithAsyncSetup.isSetup: boolean
Try
\n

What I know (that the compiler doesn’t) is that the function passed into the\nPromise constructor is invoked synchronously, meaning by the time we\nreceive our instance of ThingWithAsyncSetup, the isSetup property will\nmost certainly have a value of false.

\n

This is a good example of a totally appropriate use of the definite assignment\noperator, where I as the code author have some extra context that the compiler does not.

\n
\n
\n
    \n
  1. \n

    Where “proven” means, “the compiler can’t convince itself.”

    \n\n
  2. \n
\n
","tableOfContents":"","fields":{"slug":"/course/fundamentals-v3/13-nullish-values/"},"frontmatter":{"title":"Nullish values","course":"fundamentals-v3","date":"June 08, 2021","description":"There are situations where we have to plan for, and deal with\nthe possibility that values are null or undefined. In this chapter,\nwe will dive deep into null, undefined, definite assignment,\nand the non-null assertion operator.\n"}}},"pageContext":{"slug":"/course/fundamentals-v3/13-nullish-values/","title":"Nullish values","course":"fundamentals-v3","order":13,"previous":{"fields":{"slug":"/course/fundamentals-v3/12-type-guards/"},"frontmatter":{"title":"Type guards and narrowing","order":12,"course":"fundamentals-v3","isExercise":null}},"next":{"fields":{"slug":"/course/fundamentals-v3/14-generics/"},"frontmatter":{"title":"Generics","order":14,"course":"fundamentals-v3","isExercise":null}}}}, + "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"4af5e094-4e8a-597c-a3aa-a641a1a948cd","excerpt":"There are situations where we have to plan for, and deal with\nthe possibility that values are null or undefined. In this chapter\nwe’ll dive deep into null…","html":"

There are situations where we have to plan for, and deal with\nthe possibility that values are null or undefined. In this chapter\nwe’ll dive deep into null, undefined, definite assignment, non-nullish\ncoalescing, optional chaining and the non-null assertion operator.

\n

Although null, void and undefined are all used to describe “nothing” or “empty”,\nthey are independent types in TypeScript. Learning to use them to your advantage, and they can be powerful tools for clearly expressing your intent as a code author.

\n

null

\n
\n

null means: there is a value, and that value is nothing.\nWhile some people believe that null is not an important part of the JS language, I find that it’s useful to express the concept of a “nothing” result (kind of like an empty array, but not an array).

\n
\n

This nothing is very much a defined value, and is certainly a presence — not an absence — of information.

\n
ts
const userInfo = {
name: \"Mike\",
email: \"mike@example.com\",
secondaryEmail: null, // user has no secondary email
}
\n

undefined

\n
\n

undefined means the value isn’t available (yet?)

\n
\n

In the example below, completedAt will be set at some point\nbut there’s a period of time when we haven’t yet set it. undefined\nis an unambiguous indication that there may be something different there in the future:

\n
ts
const formInProgress = {
createdAt: new Date(),
data: new FormData(),
completedAt: undefined, //
}
function submitForm() {
formInProgress.completedAt = new Date()
}
\n

void

\n

We have already covered this in the functions chapter, but as a reminder:

\n
\n

void should exclusively be used to describe that a function’s return value should be ignored

\n
\n
ts
console.log(`console.log returns nothing.`)
(method) Console.log(...data: any[]): void
Try
\n

Non-null assertion operator

\n

The non-null assertion operator (!.) is used to cast away the possibility\nthat a value might be null or undefined.

\n

Keep in mind that the value could still be null or undefined, this\noperator just tells TypeScript to ignore that possibility.

\n

If the value does turn out to be missing, you will get the familiar cannot call foo on undefined family of errors at runtime:

\n
ts
type GroceryCart = {
fruits?: { name: string; qty: number }[]
vegetables?: { name: string; qty: number }[]
}
 
const cart: GroceryCart = {}
 
cart.fruits.push({ name: \"kumkuat\", qty: 1 })
Object is possibly 'undefined'.2532Object is possibly 'undefined'.
(property) fruits?: {\n name: string;\n qty: number;\n}[] | undefined
cart.fruits!.push({ name: \"kumkuat\", qty: 1 })
Try
\n

I recommend against using this in your app or library code, but\nif your test infrastructure represents a throw as a test failure (most should)\nthis is a great type guard to use in your test suite.

\n

In the above situation, if fruits was expected to be present and it’s not,\nthat’s a very reasonable test failure \"emoji-tada\"

\n

Definite assignment operator

\n

The definite assignment !: operator is used to suppress TypeScript’s\nobjections about a class field being used, when it can’t be proven1\nthat it was initialized.

\n

Let’s look at the following example:

\n
ts
class ThingWithAsyncSetup {
setupPromise: Promise<any> // ignore the <any> for now
isSetup: boolean
Property 'isSetup' has no initializer and is not definitely assigned in the constructor.2564Property 'isSetup' has no initializer and is not definitely assigned in the constructor.
 
constructor() {
this.setupPromise = new Promise((resolve) => {
this.isSetup = false
return this.doSetup(resolve)
}).then(() => {
this.isSetup = true
})
}
 
private async doSetup(resolve: (value: unknown) => void) {
// some async stuff
}
}
Try
\n

TypeScript is warning me that someone could create an instance of this class\nand immediately attempt to access .isSetup before it gets a boolean value

\n
ts
let myThing = new ThingWithAsyncSetup()
myThing.isSetup // what if this isn't assigned yet?
(property) ThingWithAsyncSetup.isSetup: boolean
Try
\n

What I know (that the compiler doesn’t) is that the function passed into the\nPromise constructor is invoked synchronously, meaning by the time we\nreceive our instance of ThingWithAsyncSetup, the isSetup property will\nmost certainly have a value of false.

\n

This is a good example of a totally appropriate use of the definite assignment\noperator, where I as the code author have some extra context that the compiler does not.

\n
\n
\n
    \n
  1. \n

    Where “proven” means, “the compiler can’t convince itself.”

    \n\n
  2. \n
\n
","tableOfContents":"","fields":{"slug":"/course/fundamentals-v3/13-nullish-values/"},"frontmatter":{"title":"Nullish values","course":"fundamentals-v3","date":"June 08, 2021","description":"There are situations where we have to plan for, and deal with\nthe possibility that values are null or undefined. In this chapter,\nwe will dive deep into null, undefined, definite assignment,\nand the non-null assertion operator.\n"}}},"pageContext":{"slug":"/course/fundamentals-v3/13-nullish-values/","title":"Nullish values","course":"fundamentals-v3","order":13,"previous":{"fields":{"slug":"/course/fundamentals-v3/12-type-guards/"},"frontmatter":{"title":"Type guards and narrowing","order":12,"course":"fundamentals-v3","isExercise":null}},"next":{"fields":{"slug":"/course/fundamentals-v3/14-generics/"},"frontmatter":{"title":"Generics","order":14,"course":"fundamentals-v3","isExercise":null}}}}, "staticQueryHashes": ["2785745750","2841359383"]} \ No newline at end of file diff --git a/page-data/course/making-typescript-stick/03-recent-updates-to-typescript/page-data.json b/page-data/course/making-typescript-stick/03-recent-updates-to-typescript/page-data.json index 695fca177..8c2b81906 100644 --- a/page-data/course/making-typescript-stick/03-recent-updates-to-typescript/page-data.json +++ b/page-data/course/making-typescript-stick/03-recent-updates-to-typescript/page-data.json @@ -1,5 +1,5 @@ { "componentChunkName": "component---src-templates-blog-post-tsx", "path": "/course/making-typescript-stick/03-recent-updates-to-typescript/", - "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"dbe64c82-0b16-5309-a9e7-e50b6fc07c0c","excerpt":"Variadic Tuple Types We know that a tuple type is an ordered collection (often of known length),\nwith the type of each member known as well. For a while, it’s…","html":"

Variadic Tuple Types

\n

We know that a tuple type is an ordered collection (often of known length),\nwith the type of each member known as well.

\n
ts
type Color = [
number, // red (0-255)
number, // green (0-255)
number // blue (0-255)
]
Try
\n

For a while, it’s also been possible to use a ...spread[] as the last\nelement of the tuple

\n
ts
// Worked this way, even before TS 4.x
enum Sandwich {
Hamburger,
VeggieBurger,
GrilledCheese,
BLT
}
type SandwichOrder = [
number, // order total
Sandwich, // sandwich
...string[] // toppings
]
 
const order1: SandwichOrder = [12.99, Sandwich.Hamburger, \"lettuce\"]
const order2: SandwichOrder = [14.99, Sandwich.Hamburger, \"avocado\", \"cheese\"]
const order_with_error: SandwichOrder = [
10.99,
"lettuce"
Type 'string' is not assignable to type 'Sandwich'.2322Type 'string' is not assignable to type 'Sandwich'.
]
Try
\n

It has even been possible to use generics for that spread type\nat the end of the tuple

\n
ts
// Worked this way, even before TS 4.x
type MyTuple<T> = [number, ...T[]]
 
const x1: MyTuple<string> = [4, \"hello\"]
const x2: MyTuple<boolean> = [4, true]
Try
\n

It’s important to note that, before TS 4.0 we had to use ...T[], and could not\ndo something like this (example in TS playground)

\n

\n \n \n \n \n

\n

Why does this matter? Let’s look at this example

\n
ts
enum Sandwich {
Hamburger,
VeggieBurger,
GrilledCheese,
BLT
}
type SandwichOrder = [
number, // order total
Sandwich, // sandwich
...string[] // toppings
]
 
const order1: SandwichOrder = [12.99, Sandwich.Hamburger, \"lettuce\"]
 
/**
* return an array containing everything except the first element
*/
function tail<T>(arg: readonly [number, ...T[]]) {
const [_ignored, ...rest] = arg
return rest
}
 
const orderWithoutTotal = tail(order1)
const orderWithoutTotal: (string | Sandwich)[]
Try
\n

This is not ideal. A (string | Sandwich)[] is not the same thing as a [Sandwich, ...string[]].\nWhat we’re seeing here is what happens when TS tries to infer the following

\n
ts
T[] <-----> [Sandwich.Hamburger, \"lettuce\"]
\n

similar to what you’d see here

\n
ts
function returnArray<T>(arg: readonly T[]): readonly T[] {
return arg
}
const arr = [Sandwich.Hamburger, \"lettuce\"] as const
const arr: readonly [Sandwich.Hamburger, \"lettuce\"]
const result = returnArray(arr)
const result: readonly (Sandwich.Hamburger | \"lettuce\")[]
Try
\n

What we want instead for our tuple scenario, something like this

\n
ts
function returnArray<T extends any[]>(arg: T): T {
return arg
}
const arr: [Sandwich.Hamburger, \"lettuce\"] = [Sandwich.Hamburger, \"lettuce\"]
const arr: [Sandwich.Hamburger, \"lettuce\"]
const result = returnArray(arr)
const result: [Sandwich.Hamburger, \"lettuce\"]
Try
\n

Inference is doing a lot more for us here, and I would argue, we’re no longer\nlosing type information, once T = [Sandwich.Hamburger, \"lettuce\"]

\n

TS 4.0 introduces support for variadic tuples. This relaxes the limitation\nshown above, and allows us to use ...T in tuple types. Going back to our tail\nexample, let’s make a small change

\n
diff
-function tail<T>(arg: readonly [number, ...T[]]) {
+function tail<T extends any[]>(arg: readonly [number, ...T]) {
const [_ignored, ...rest] = arg;
return rest;
}
\n
ts
/**
* return an array containing everything except the first element
*/
function tail<T extends any[]>(
arg: readonly [number, ...T]
) {
const [_ignored, ...rest] = arg
return rest
}
const order1: SandwichOrder = [12.99, Sandwich.Hamburger, \"lettuce\"]
 
const result = tail(order1)
const result: [Sandwich, ...string[]]
Try
\n

There we go! This improved degree of inference now works for us inside the tuple!

\n

We can also now use more than one ...spread in a single tuple

\n
ts
type MyTuple = [
...[number, number],
...[string, string, string]
]
const x: MyTuple = [1, 2, \"a\", \"b\", \"c\"]
const x: [number, number, string, string, string]
Try
\n

It’s important to note that only one ...rest[] element is possible in a given\ntuple, but it doesn’t necessarily have to be the last element

\n
ts
type YEScompile1 = [...[number, number], ...string[]]
type NOcompile1 = [...number[], ...string[]]
A rest element cannot follow another rest element.1265A rest element cannot follow another rest element.
 
type YEScompile2 = [boolean, ...number[], string]
Try
\n

Check out how this feature has allowed the Rx.js project to simplify their types

\n

Class Property Inference from Constructors

\n

This major convenience feature reduces the need for class\nfield type annotations by inferring their types from\nassignments in the constructor. It’s important to remember\nthat this only works when noImplicitAny is set to true.

\n
ts
class Color {
red // :number no longer needed!
(property) Color.red: number
green // :number no longer needed!
blue // :number no longer needed!
constructor(c: [number, number, number]) {
this.red = c[0]
this.green = c[1]
this.blue = c[2]
}
}
Try
\n

Thrown values as unknown

\n

Before TS 4.0, thrown values were always considered to be of type\nany. Now, we can choose to regard it as of type unknown.\nIf you’ve ever found it risky to assume that a message, stacktrace,\nor name property is on every possible thrown value you encounter\nin a catch clause, this feature may make help you sleep a little more soundly.

\n

Thrown errors provide a nice stack trace\n\n \n

try {
somethingRisky()
} catch (err: unknown) {
if (err instanceof Error) throw err
else throw new Error(`${err}`)
}
Try\n

There’s also a useUnknownInCatchVariables compilerOption flag that\nwill make thrown values unknown across your entire project

\n

Template literal types

\n

You can think of these like template strings, but for types.

\n
ts
type Statistics = {
[K in `${\"median\" | \"mean\"}Value`]?: number
}
const stats: Statistics = {}
stats.meanValue
       
Try
\n

You can do some pretty interesting things with these

\n
ts
let winFns: Extract<keyof Window, `set${any}`> = \"\" as any
let winFns: \"setInterval\" | \"setTimeout\"
Try
\n

We even get some special utility types to assist with changing case

\n
ts
type T1 = `send${Capitalize<\"mouse\" | \"keyboard\">}Event`
type T1 = \"sendMouseEvent\" | \"sendKeyboardEvent\"
type T2 = `send${Uppercase<\"mouse\" | \"keyboard\">}Event`
type T2 = \"sendMOUSEEvent\" | \"sendKEYBOARDEvent\"
type T3 = `send${Lowercase<\"Mouse\" | \"keyBoard\">}Event`
type T3 = \"sendmouseEvent\" | \"sendkeyboardEvent\"
Try
\n

Key remapping in mapped types

\n

You may recall that mapped types are kind of like our “for loop”\nto build up an object type by key-value pairs. Before TS 4.1,\nour ability to transform keys was very limited (usually involving an\nexplicit “old key to new key mapping”)

\n

We now have some new syntax (note the as in the example below) that\nlets us transform keys in a more declarative way. This language\nfeature works quite nicely with template literal types

\n
ts
type Colors = \"red\" | \"green\" | \"blue\"
type ColorSelector = {
[K in Colors as `select${Capitalize<K>}`]: () => void
}
const cs: ColorSelector = {} as any
cs.selectRed()
       
Try
\n

Checked index access

\n

If you’ve ever heard me rant about typing Dictionaries, you may recall that\nmy advice to describe them as having a possibility of holding undefined under some keys

\n
ts
// Mike thinks this is way too optimistic
type Dict<T> = { [K: string]: T }
 
const d: Dict<string[]> = {}
d.rhubarb.join(\", \") // 💥
Try
\n

My advice was to explicitly type it as

\n
ts
type Dict<T> = { [K: string]: T | undefined }
const d: Dict<string[]> = {}
d.rhubarb.join(\", \") // 💥
Object is possibly 'undefined'.2532Object is possibly 'undefined'.
Try
\n

Great, now we see an error alerting us to the ~possibility~ certainty that\nthere is no string[] stored under the rhubarb key.

\n

However, it’s tough to be vigilant enough to remember to do this to every\nindex signature in your entire app.

\n

TypeScript now gives us a compiler flag that will do this for us: noUncheckedIndexAccess.

\n

Sadly we can’t demonstrate how this works using these docs yet, but here’s an example from the typescript playground

","tableOfContents":"","fields":{"slug":"/course/making-typescript-stick/03-recent-updates-to-typescript/"},"frontmatter":{"title":"Recent updates to TypeScript","course":"making-typescript-stick","date":"March 22, 2022","description":"We'll discuss a curated list of advancements in the TS language\nand compiler, starting with the 4.0 release.\n"}}},"pageContext":{"slug":"/course/making-typescript-stick/03-recent-updates-to-typescript/","title":"Recent updates to TypeScript","course":"making-typescript-stick","order":3,"previous":{"fields":{"slug":"/course/making-typescript-stick/02-warm-up/"},"frontmatter":{"title":"JS/TS Warm-up Quiz","order":2,"course":"making-typescript-stick","isExercise":null}},"next":{"fields":{"slug":"/course/making-typescript-stick/04-data-layer-challenge/"},"frontmatter":{"title":"Challenge 1: Building a typed data store","order":4,"course":"making-typescript-stick","isExercise":null}}}}, + "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"dbe64c82-0b16-5309-a9e7-e50b6fc07c0c","excerpt":"Variadic Tuple Types We know that a tuple type is an ordered collection (often of known length),\nwith the type of each member known as well. For a while, it’s…","html":"

Variadic Tuple Types

\n

We know that a tuple type is an ordered collection (often of known length),\nwith the type of each member known as well.

\n
ts
type Color = [
number, // red (0-255)
number, // green (0-255)
number // blue (0-255)
]
Try
\n

For a while, it’s also been possible to use a ...spread[] as the last\nelement of the tuple

\n
ts
// Worked this way, even before TS 4.x
enum Sandwich {
Hamburger,
VeggieBurger,
GrilledCheese,
BLT
}
type SandwichOrder = [
number, // order total
Sandwich, // sandwich
...string[] // toppings
]
 
const order1: SandwichOrder = [12.99, Sandwich.Hamburger, \"lettuce\"]
const order2: SandwichOrder = [14.99, Sandwich.Hamburger, \"avocado\", \"cheese\"]
const order_with_error: SandwichOrder = [
10.99,
"lettuce"
Type 'string' is not assignable to type 'Sandwich'.2322Type 'string' is not assignable to type 'Sandwich'.
]
Try
\n

It has even been possible to use generics for that spread type\nat the end of the tuple

\n
ts
// Worked this way, even before TS 4.x
type MyTuple<T> = [number, ...T[]]
 
const x1: MyTuple<string> = [4, \"hello\"]
const x2: MyTuple<boolean> = [4, true]
Try
\n

It’s important to note that, before TS 4.0 we had to use ...T[], and could not\ndo something like this (example in TS playground)

\n

\n \n \n \n \n

\n

Why does this matter? Let’s look at this example

\n
ts
enum Sandwich {
Hamburger,
VeggieBurger,
GrilledCheese,
BLT
}
type SandwichOrder = [
number, // order total
Sandwich, // sandwich
...string[] // toppings
]
 
const order1: SandwichOrder = [12.99, Sandwich.Hamburger, \"lettuce\"]
 
/**
* return an array containing everything except the first element
*/
function tail<T>(arg: readonly [number, ...T[]]) {
const [_ignored, ...rest] = arg
return rest
}
 
const orderWithoutTotal = tail(order1)
const orderWithoutTotal: (string | Sandwich)[]
Try
\n

This is not ideal. A (string | Sandwich)[] is not the same thing as a [Sandwich, ...string[]].\nWhat we’re seeing here is what happens when TS tries to infer the following

\n
ts
T[] <-----> [Sandwich.Hamburger, \"lettuce\"]
\n

similar to what you’d see here

\n
ts
function returnArray<T>(arg: readonly T[]): readonly T[] {
return arg
}
const arr = [Sandwich.Hamburger, \"lettuce\"] as const
const arr: readonly [Sandwich.Hamburger, \"lettuce\"]
const result = returnArray(arr)
const result: readonly (Sandwich.Hamburger | \"lettuce\")[]
Try
\n

What we want instead for our tuple scenario, something like this

\n
ts
function returnArray<T extends any[]>(arg: T): T {
return arg
}
const arr: [Sandwich.Hamburger, \"lettuce\"] = [Sandwich.Hamburger, \"lettuce\"]
const arr: [Sandwich.Hamburger, \"lettuce\"]
const result = returnArray(arr)
const result: [Sandwich.Hamburger, \"lettuce\"]
Try
\n

Inference is doing a lot more for us here, and I would argue, we’re no longer\nlosing type information, once T = [Sandwich.Hamburger, \"lettuce\"]

\n

TS 4.0 introduces support for variadic tuples. This relaxes the limitation\nshown above, and allows us to use ...T in tuple types. Going back to our tail\nexample, let’s make a small change

\n
diff
-function tail<T>(arg: readonly [number, ...T[]]) {
+function tail<T extends any[]>(arg: readonly [number, ...T]) {
const [_ignored, ...rest] = arg;
return rest;
}
\n
ts
/**
* return an array containing everything except the first element
*/
function tail<T extends any[]>(
arg: readonly [number, ...T]
) {
const [_ignored, ...rest] = arg
return rest
}
const order1: SandwichOrder = [12.99, Sandwich.Hamburger, \"lettuce\"]
 
const result = tail(order1)
const result: [Sandwich, ...string[]]
Try
\n

There we go! This improved degree of inference now works for us inside the tuple!

\n

We can also now use more than one ...spread in a single tuple

\n
ts
type MyTuple = [
...[number, number],
...[string, string, string]
]
const x: MyTuple = [1, 2, \"a\", \"b\", \"c\"]
const x: [number, number, string, string, string]
Try
\n

It’s important to note that only one ...rest[] element is possible in a given\ntuple, but it doesn’t necessarily have to be the last element

\n
ts
type YEScompile1 = [...[number, number], ...string[]]
type NOcompile1 = [...number[], ...string[]]
A rest element cannot follow another rest element.1265A rest element cannot follow another rest element.
 
type YEScompile2 = [boolean, ...number[], string]
Try
\n

Check out how this feature has allowed the Rx.js project to simplify their types

\n

Class Property Inference from Constructors

\n

This major convenience feature reduces the need for class\nfield type annotations by inferring their types from\nassignments in the constructor. It’s important to remember\nthat this only works when noImplicitAny is set to true.

\n
ts
class Color {
red // :number no longer needed!
(property) Color.red: number
green // :number no longer needed!
blue // :number no longer needed!
constructor(c: [number, number, number]) {
this.red = c[0]
this.green = c[1]
this.blue = c[2]
}
}
Try
\n

Thrown values as unknown

\n

Before TS 4.0, thrown values were always considered to be of type\nany. Now, we can choose to regard it as of type unknown.\nIf you’ve ever found it risky to assume that a message, stacktrace,\nor name property is on every possible thrown value you encounter\nin a catch clause, this feature may make help you sleep a little more soundly.

\n

Thrown errors provide a nice stack trace\n\n \n

try {
somethingRisky()
} catch (err: unknown) {
if (err instanceof Error) throw err
else throw new Error(`${err}`)
}
Try\n

There’s also a useUnknownInCatchVariables compilerOption flag that\nwill make thrown values unknown across your entire project

\n

Template literal types

\n

You can think of these like template strings, but for types.

\n
ts
type Statistics = {
[K in `${\"median\" | \"mean\"}Value`]?: number
}
const stats: Statistics = {}
stats.meanValue
       
Try
\n

You can do some pretty interesting things with these

\n
ts
let winFns: Extract<keyof Window, `set${any}`> = \"\" as any
let winFns: \"setInterval\" | \"setTimeout\"
Try
\n

We even get some special utility types to assist with changing case

\n
ts
type T1 = `send${Capitalize<\"mouse\" | \"keyboard\">}Event`
type T1 = \"sendMouseEvent\" | \"sendKeyboardEvent\"
type T2 = `send${Uppercase<\"mouse\" | \"keyboard\">}Event`
type T2 = \"sendMOUSEEvent\" | \"sendKEYBOARDEvent\"
type T3 = `send${Lowercase<\"Mouse\" | \"keyBoard\">}Event`
type T3 = \"sendmouseEvent\" | \"sendkeyboardEvent\"
Try
\n

Key remapping in mapped types

\n

You may recall that mapped types are kind of like our “for loop”\nto build up an object type by key-value pairs. Before TS 4.1,\nour ability to transform keys was very limited (usually involving an\nexplicit “old key to new key mapping”)

\n

We now have some new syntax (note the as in the example below) that\nlets us transform keys in a more declarative way. This language\nfeature works quite nicely with template literal types

\n
ts
type Colors = \"red\" | \"green\" | \"blue\"
type ColorSelector = {
[K in Colors as `select${Capitalize<K>}`]: () => void
}
const cs: ColorSelector = {} as any
cs.selectRed()
       
Try
\n

Checked index access

\n

If you’ve ever heard me rant about typing Dictionaries, you may recall that\nmy advice to describe them as having a possibility of holding undefined under some keys

\n
ts
// Mike thinks this is way too optimistic
type Dict<T> = { [K: string]: T }
 
const d: Dict<string[]> = {}
d.rhubarb.join(\", \") // 💥
Try
\n

My advice was to explicitly type it as

\n
ts
type Dict<T> = { [K: string]: T | undefined }
const d: Dict<string[]> = {}
d.rhubarb.join(\", \") // 💥
Object is possibly 'undefined'.2532Object is possibly 'undefined'.
Try
\n

Great, now we see an error alerting us to the ~possibility~ certainty that\nthere is no string[] stored under the rhubarb key.

\n

However, it’s tough to be vigilant enough to remember to do this to every\nindex signature in your entire app.

\n

TypeScript now gives us a compiler flag that will do this for us: noUncheckedIndexAccess.

\n

Sadly we can’t demonstrate how this works using these docs yet, but here’s an example from the typescript playground

","tableOfContents":"","fields":{"slug":"/course/making-typescript-stick/03-recent-updates-to-typescript/"},"frontmatter":{"title":"Recent updates to TypeScript","course":"making-typescript-stick","date":"March 22, 2022","description":"We'll discuss a curated list of advancements in the TS language\nand compiler, starting with the 4.0 release.\n"}}},"pageContext":{"slug":"/course/making-typescript-stick/03-recent-updates-to-typescript/","title":"Recent updates to TypeScript","course":"making-typescript-stick","order":3,"previous":{"fields":{"slug":"/course/making-typescript-stick/02-warm-up/"},"frontmatter":{"title":"JS/TS Warm-up Quiz","order":2,"course":"making-typescript-stick","isExercise":null}},"next":{"fields":{"slug":"/course/making-typescript-stick/04-data-layer-challenge/"},"frontmatter":{"title":"Challenge 1: Building a typed data store","order":4,"course":"making-typescript-stick","isExercise":null}}}}, "staticQueryHashes": ["2785745750","2841359383"]} \ No newline at end of file diff --git a/page-data/course/making-typescript-stick/09-guess-that-type/page-data.json b/page-data/course/making-typescript-stick/09-guess-that-type/page-data.json index d8703eab0..2e046c50a 100644 --- a/page-data/course/making-typescript-stick/09-guess-that-type/page-data.json +++ b/page-data/course/making-typescript-stick/09-guess-that-type/page-data.json @@ -1,5 +1,5 @@ { "componentChunkName": "component---src-templates-blog-post-tsx", "path": "/course/making-typescript-stick/09-guess-that-type/", - "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"668944a6-3ba2-5c72-a491-d13ab0d96a8f","excerpt":"1 2 3 4 5 6 7 8 9 10 11","html":"

1

\n
ts
const values = [3, \"14\", [21]]
for (let a in values) {
// ^?
}
for (let b of values) {
// ^?
}
\n
\nClick for answer\n
ts
const values = [3, \"14\", [21]]
 
for (let a in values) {
let a: string
}
for (let b of values) {
let b: string | number | number[]
}
Try
\n
\n
\n

2

\n
ts
class Person {
constructor(public name: string) {}
}
class Library {
librarians: Person[] = []
}
const localLibrary = Library
// ^?
const otherLibrary = new Library()
// ^?
\n
\nClick for answer\n
ts
class Person {
constructor(public name: string) {}
}
class Library {
librarians: Person[] = []
}
 
const localLibrary = Library
const localLibrary: typeof Library
const otherLibrary = new Library()
const otherLibrary: Library
Try
\n
\n
\n

3

\n
ts
class AsyncManager {
constructor(arg: 0 | 4 | string) {
if (arg > 0 || arg <= 0) {
new Promise((resolve, reject) => {
arg
//^?
})
}
}
}
\n
\nClick for answer\n
ts
class AsyncManager {
constructor(arg: 0 | 4 | string) {
if (arg > 0 || arg <= 0) {
new Promise((resolve, reject) => {
arg
(parameter) arg: string | 0 | 4
})
}
}
}
Try
\n
\n
\n

4

\n
ts
enum CoinResult {
heads,
tails,
}
function flipCoin(): CoinResult {
return Math.random() > 0.5
? CoinResult.heads
: CoinResult.tails
}
function main() {
const flipResult = flipCoin()
if (flipResult === CoinResult.heads) {
console.log(\"heads\")
} else if (flipResult === CoinResult.tails) {
console.log(\"tails\")
} else {
flipResult
// ^?
}
}
\n
\nClick for answer\n
ts
enum CoinResult {
heads,
tails,
}
function flipCoin(): CoinResult {
return Math.random() > 0.5
? CoinResult.heads
: CoinResult.tails
}
 
function main() {
const flipResult = flipCoin()
if (flipResult === CoinResult.heads) {
console.log(\"heads\")
} else if (flipResult === CoinResult.tails) {
console.log(\"tails\")
} else {
flipResult
const flipResult: never
}
}
Try
\n
\n
\n

5

\n
ts
function getValue(): [number] | Promise<number> {
if (Math.random() > 0.5) return [42]
else return Promise.resolve(42)
}
async function main() {
const resolved = await getValue()
// ^?
}
\n
\nClick for answer\n
ts
function getValue(): [number] | Promise<number> {
if (Math.random() > 0.5) return [42]
else return Promise.resolve(42)
}
 
async function main() {
const resolved = await getValue()
const resolved: number | [number]
}
Try
\n
\n
\n

6

\n
ts
let x: number | any = 41
const y = x
// ^?
\n
\nClick for answer\n
ts
let x: number | any = 41
const y = x
const y: any
Try
\n
\n
\n

7

\n
ts
const values = [4, 1, null, 21, 45, 32]
const filtered = values.filter((val) => val !== null)
// ^?
\n
\nClick for answer\n
ts
const values = [4, 1, null, 21, 45, 32]
 
const filtered = values.filter((val) => val !== null)
const filtered: (number | null)[]
Try
\n
\n
\n

8

\n
ts
class Person {
static species = \"Homo Sapien\"
constructor(public name: string) {}
}
const p = new Person(\"mike\")
let x: keyof typeof Person
// ^?
let y: keyof typeof p
// ^?
\n
\nClick for answer\n
ts
class Person {
static species = \"Homo Sapien\"
constructor(public name: string) {}
}
 
const p = new Person(\"mike\")
let x: keyof typeof Person
let x: \"prototype\" | \"species\"
let y: keyof typeof p
let y: \"name\"
Try
\n
\n
\n

9

\n
ts
enum Language {
JavaScript,
TypeScript = \"TS\",
}
let lang1: Language = Language.JavaScript
// ^?
let lang2: Language = Language.TypeScript
// ^?
Math.round(lang1)
Math.round(lang2)
\n
\nClick for answer\n
ts
enum Language {
JavaScript,
TypeScript = \"TS\",
}
 
let lang1: Language = Language.JavaScript
let lang1: Language
let lang2: Language = Language.TypeScript
let lang2: Language
 
Math.round(lang1)
Math.round(lang2)
Argument of type 'Language' is not assignable to parameter of type 'number'.2345Argument of type 'Language' is not assignable to parameter of type 'number'.
Try
\n
\n
\n

10

\n
ts
async function tryFetch(url: RequestInfo) {
try {
const val = await (await fetch(url)).json()
return val
} catch (err) {
console.error(err)
return undefined
}
}
async function main() {
const val = await tryFetch(\"https://example.com\")
// ^?
}
\n
\nClick for answer\n
ts
async function tryFetch(url: RequestInfo) {
try {
const val = await (await fetch(url)).json()
return val
} catch (err) {
console.error(err)
return undefined
}
}
 
async function main() {
const val = await tryFetch(\"https://example.com\")
const val: any
}
Try
\n
\n
\n

11

\n
ts
class Book {
title: string = \"\"
author: string = \"\"
}
const keys = Object.keys(new Book())
// ^?
\n
\nClick for answer\n
ts
class Book {
title: string = \"\"
author: string = \"\"
}
const keys = Object.keys(new Book())
const keys: string[]
Try
\n
\n
","tableOfContents":"","fields":{"slug":"/course/making-typescript-stick/09-guess-that-type/"},"frontmatter":{"title":"Game 3: Guess That Type","course":"making-typescript-stick","date":"March 22, 2022","description":"Turn your brain into a TypeScript compiler with this game\n"}}},"pageContext":{"slug":"/course/making-typescript-stick/09-guess-that-type/","title":"Game 3: Guess That Type","course":"making-typescript-stick","order":9,"previous":{"fields":{"slug":"/course/making-typescript-stick/08-type-challenges/"},"frontmatter":{"title":"Challenge 3: Type Challenges","order":8,"course":"making-typescript-stick","isExercise":null}},"next":{"fields":{"slug":"/course/making-typescript-stick/10-penpal-types/"},"frontmatter":{"title":"Challenge 4: Penpal types","order":10,"course":"making-typescript-stick","isExercise":null}}}}, + "result": {"data":{"site":{"siteMetadata":{"title":"Learn TypeScript w/ Mike North","courses":[{"id":"fundamentals-v3","title":"TypeScript Fundamentals v3","summary":"Learn everything you need to know in order to confidently and successfully use TypeScript to build a modern JavaScript app."},{"id":"intermediate-v1","title":"Intermediate TypeScript","summary":"Leverage TypeScript's strengths to provide clarity in the face of\ncomplexity, while protecting your codebase and team from it's weaknesses.\n"},{"id":"making-typescript-stick","title":"Making TypeScript Stick","summary":"Tackle a series of challenges designed to reinforce your knowledge and make\nthe important concepts truly \"stick\" in your mind.\n"},{"id":"full-stack-typescript","title":"Full Stack TypeScript","summary":"Combine TypeScript and GraphQL's type systems to create full-stack, fully\ntype-checked code bases that are shockingly easy to refactor and maintain.\n"}]}},"markdownRemark":{"id":"668944a6-3ba2-5c72-a491-d13ab0d96a8f","excerpt":"1 2 3 4 5 6 7 8 9 10 11","html":"

1

\n
ts
const values = [3, \"14\", [21]]
for (let a in values) {
// ^?
}
for (let b of values) {
// ^?
}
\n
\nClick for answer\n
ts
const values = [3, \"14\", [21]]
 
for (let a in values) {
let a: string
}
for (let b of values) {
let b: string | number | number[]
}
Try
\n
\n
\n

2

\n
ts
class Person {
constructor(public name: string) {}
}
class Library {
librarians: Person[] = []
}
const localLibrary = Library
// ^?
const otherLibrary = new Library()
// ^?
\n
\nClick for answer\n
ts
class Person {
constructor(public name: string) {}
}
class Library {
librarians: Person[] = []
}
 
const localLibrary = Library
const localLibrary: typeof Library
const otherLibrary = new Library()
const otherLibrary: Library
Try
\n
\n
\n

3

\n
ts
class AsyncManager {
constructor(arg: 0 | 4 | string) {
// @ts-ignore
if (arg > 0 || arg <= 0) {
new Promise((resolve, reject) => {
arg
//^?
})
}
}
}
\n
\nClick for answer\n
ts
class AsyncManager {
constructor(arg: 0 | 4 | string) {
if (arg > 0 || arg <= 0) {
new Promise((resolve, reject) => {
arg
(parameter) arg: string | 0 | 4
})
}
}
}
Try
\n
\n
\n

4

\n
ts
enum CoinResult {
heads,
tails,
}
function flipCoin(): CoinResult {
return Math.random() > 0.5
? CoinResult.heads
: CoinResult.tails
}
function main() {
const flipResult = flipCoin()
if (flipResult === CoinResult.heads) {
console.log(\"heads\")
} else if (flipResult === CoinResult.tails) {
console.log(\"tails\")
} else {
flipResult
// ^?
}
}
\n
\nClick for answer\n
ts
enum CoinResult {
heads,
tails,
}
function flipCoin(): CoinResult {
return Math.random() > 0.5
? CoinResult.heads
: CoinResult.tails
}
 
function main() {
const flipResult = flipCoin()
if (flipResult === CoinResult.heads) {
console.log(\"heads\")
} else if (flipResult === CoinResult.tails) {
console.log(\"tails\")
} else {
flipResult
const flipResult: never
}
}
Try
\n
\n
\n

5

\n
ts
function getValue(): [number] | Promise<number> {
if (Math.random() > 0.5) return [42]
else return Promise.resolve(42)
}
async function main() {
const resolved = await getValue()
// ^?
}
\n
\nClick for answer\n
ts
function getValue(): [number] | Promise<number> {
if (Math.random() > 0.5) return [42]
else return Promise.resolve(42)
}
 
async function main() {
const resolved = await getValue()
const resolved: number | [number]
}
Try
\n
\n
\n

6

\n
ts
let x: number | any = 41
const y = x
// ^?
\n
\nClick for answer\n
ts
let x: number | any = 41
const y = x
const y: any
Try
\n
\n
\n

7

\n
ts
const values = [4, 1, null, 21, 45, 32]
const filtered = values.filter((val) => val !== null)
// ^?
\n
\nClick for answer\n
ts
const values = [4, 1, null, 21, 45, 32]
 
const filtered = values.filter((val) => val !== null)
const filtered: (number | null)[]
Try
\n
\n
\n

8

\n
ts
class Person {
static species = \"Homo Sapien\"
constructor(public name: string) {}
}
const p = new Person(\"mike\")
let x: keyof typeof Person
// ^?
let y: keyof typeof p
// ^?
\n
\nClick for answer\n
ts
class Person {
static species = \"Homo Sapien\"
constructor(public name: string) {}
}
 
const p = new Person(\"mike\")
let x: keyof typeof Person
let x: \"prototype\" | \"species\"
let y: keyof typeof p
let y: \"name\"
Try
\n
\n
\n

9

\n
ts
enum Language {
JavaScript,
TypeScript = \"TS\",
}
let lang1: Language = Language.JavaScript
// ^?
let lang2: Language = Language.TypeScript
// ^?
Math.round(lang1)
Math.round(lang2)
\n
\nClick for answer\n
ts
enum Language {
JavaScript,
TypeScript = \"TS\",
}
 
let lang1: Language = Language.JavaScript
let lang1: Language
let lang2: Language = Language.TypeScript
let lang2: Language
 
Math.round(lang1)
Math.round(lang2)
Argument of type 'Language' is not assignable to parameter of type 'number'.2345Argument of type 'Language' is not assignable to parameter of type 'number'.
Try
\n
\n
\n

10

\n
ts
async function tryFetch(url: RequestInfo) {
try {
const val = await (await fetch(url)).json()
return val
} catch (err) {
console.error(err)
return undefined
}
}
async function main() {
const val = await tryFetch(\"https://example.com\")
// ^?
}
\n
\nClick for answer\n
ts
async function tryFetch(url: RequestInfo) {
try {
const val = await (await fetch(url)).json()
return val
} catch (err) {
console.error(err)
return undefined
}
}
 
async function main() {
const val = await tryFetch(\"https://example.com\")
const val: any
}
Try
\n
\n
\n

11

\n
ts
class Book {
title: string = \"\"
author: string = \"\"
}
const keys = Object.keys(new Book())
// ^?
\n
\nClick for answer\n
ts
class Book {
title: string = \"\"
author: string = \"\"
}
const keys = Object.keys(new Book())
const keys: string[]
Try
\n
\n
","tableOfContents":"","fields":{"slug":"/course/making-typescript-stick/09-guess-that-type/"},"frontmatter":{"title":"Game 3: Guess That Type","course":"making-typescript-stick","date":"March 22, 2022","description":"Turn your brain into a TypeScript compiler with this game\n"}}},"pageContext":{"slug":"/course/making-typescript-stick/09-guess-that-type/","title":"Game 3: Guess That Type","course":"making-typescript-stick","order":9,"previous":{"fields":{"slug":"/course/making-typescript-stick/08-type-challenges/"},"frontmatter":{"title":"Challenge 3: Type Challenges","order":8,"course":"making-typescript-stick","isExercise":null}},"next":{"fields":{"slug":"/course/making-typescript-stick/10-penpal-types/"},"frontmatter":{"title":"Challenge 4: Penpal types","order":10,"course":"making-typescript-stick","isExercise":null}}}}, "staticQueryHashes": ["2785745750","2841359383"]} \ No newline at end of file diff --git a/polyfill-4db1c98e783bd0dcb2bb.js b/polyfill-4db1c98e783bd0dcb2bb.js new file mode 100644 index 000000000..cc9ac6f5f --- /dev/null +++ b/polyfill-4db1c98e783bd0dcb2bb.js @@ -0,0 +1,2 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[920],{7661:function(t,e,r){!function(){var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==r.g?r.g:"undefined"!=typeof self?self:{};function e(t,e,r){return t(r={path:e,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}()}},r.exports),r.exports}var n=function(t){return t&&t.Math==Math&&t},o=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||function(){return this}()||Function("return this")(),i=function(t){try{return!!t()}catch(t){return!0}},a=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),u={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,s={f:c&&!u.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:u},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},l={}.toString,h=function(t){return l.call(t).slice(8,-1)},p="".split,d=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==h(t)?p.call(t,""):Object(t)}:Object,v=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},g=function(t){return d(v(t))},y=function(t){return"object"==typeof t?null!==t:"function"==typeof t},m=function(t,e){if(!y(t))return t;var r,n;if(e&&"function"==typeof(r=t.toString)&&!y(n=r.call(t)))return n;if("function"==typeof(r=t.valueOf)&&!y(n=r.call(t)))return n;if(!e&&"function"==typeof(r=t.toString)&&!y(n=r.call(t)))return n;throw TypeError("Can't convert object to primitive value")},b={}.hasOwnProperty,E=function(t,e){return b.call(t,e)},S=o.document,w=y(S)&&y(S.createElement),R=function(t){return w?S.createElement(t):{}},T=!a&&!i((function(){return 7!=Object.defineProperty(R("div"),"a",{get:function(){return 7}}).a})),O=Object.getOwnPropertyDescriptor,x={f:a?O:function(t,e){if(t=g(t),e=m(e,!0),T)try{return O(t,e)}catch(t){}if(E(t,e))return f(!s.f.call(t,e),t[e])}},A=function(t){if(!y(t))throw TypeError(String(t)+" is not an object");return t},I=Object.defineProperty,_={f:a?I:function(t,e,r){if(A(t),e=m(e,!0),A(r),T)try{return I(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},j=a?function(t,e,r){return _.f(t,e,f(1,r))}:function(t,e,r){return t[e]=r,t},P=function(t,e){try{j(o,t,e)}catch(n){o[t]=e}return e},M="__core-js_shared__",N=o[M]||P(M,{}),k=Function.toString;"function"!=typeof N.inspectSource&&(N.inspectSource=function(t){return k.call(t)});var U,L,D,C=N.inspectSource,F=o.WeakMap,B="function"==typeof F&&/native code/.test(C(F)),W=!1,z=e((function(t){(t.exports=function(t,e){return N[t]||(N[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.9.0",mode:"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})})),G=0,K=Math.random(),$=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++G+K).toString(36)},V=z("keys"),q=function(t){return V[t]||(V[t]=$(t))},H={};if(B){var X=N.state||(N.state=new(0,o.WeakMap)),Y=X.get,J=X.has,Q=X.set;U=function(t,e){return e.facade=t,Q.call(X,t,e),e},L=function(t){return Y.call(X,t)||{}},D=function(t){return J.call(X,t)}}else{var Z=q("state");H[Z]=!0,U=function(t,e){return e.facade=t,j(t,Z,e),e},L=function(t){return E(t,Z)?t[Z]:{}},D=function(t){return E(t,Z)}}var tt,et={set:U,get:L,has:D,enforce:function(t){return D(t)?L(t):U(t,{})},getterFor:function(t){return function(e){var r;if(!y(e)||(r=L(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}},rt=e((function(t){var e=et.get,r=et.enforce,n=String(String).split("String");(t.exports=function(t,e,i,a){var u,c=!!a&&!!a.unsafe,s=!!a&&!!a.enumerable,f=!!a&&!!a.noTargetGet;"function"==typeof i&&("string"!=typeof e||E(i,"name")||j(i,"name",e),(u=r(i)).source||(u.source=n.join("string"==typeof e?e:""))),t!==o?(c?!f&&t[e]&&(s=!0):delete t[e],s?t[e]=i:j(t,e,i)):s?t[e]=i:P(e,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&e(this).source||C(this)}))})),nt=o,ot=function(t){return"function"==typeof t?t:void 0},it=function(t,e){return arguments.length<2?ot(nt[t])||ot(o[t]):nt[t]&&nt[t][e]||o[t]&&o[t][e]},at=Math.ceil,ut=Math.floor,ct=function(t){return isNaN(t=+t)?0:(t>0?ut:at)(t)},st=Math.min,ft=function(t){return t>0?st(ct(t),9007199254740991):0},lt=Math.max,ht=Math.min,pt=function(t,e){var r=ct(t);return r<0?lt(r+e,0):ht(r,e)},dt=function(t){return function(e,r,n){var o,i=g(e),a=ft(i.length),u=pt(n,a);if(t&&r!=r){for(;a>u;)if((o=i[u++])!=o)return!0}else for(;a>u;u++)if((t||u in i)&&i[u]===r)return t||u||0;return!t&&-1}},vt={includes:dt(!0),indexOf:dt(!1)},gt=vt.indexOf,yt=function(t,e){var r,n=g(t),o=0,i=[];for(r in n)!E(H,r)&&E(n,r)&&i.push(r);for(;e.length>o;)E(n,r=e[o++])&&(~gt(i,r)||i.push(r));return i},mt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],bt=mt.concat("length","prototype"),Et={f:Object.getOwnPropertyNames||function(t){return yt(t,bt)}},St={f:Object.getOwnPropertySymbols},wt=it("Reflect","ownKeys")||function(t){var e=Et.f(A(t)),r=St.f;return r?e.concat(r(t)):e},Rt=function(t,e){for(var r=wt(e),n=_.f,o=x.f,i=0;i2?arguments[2]:void 0,u=kt((void 0===a?n:pt(a,n))-i,n-o),c=1;for(i0;)i in r?r[o]=r[i]:delete r[o],o+=c,i+=c;return r},Lt=!!Object.getOwnPropertySymbols&&!i((function(){return!String(Symbol())})),Dt=Lt&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,Ct=z("wks"),Ft=o.Symbol,Bt=Dt?Ft:Ft&&Ft.withoutSetter||$,Wt=function(t){return E(Ct,t)||(Ct[t]=Lt&&E(Ft,t)?Ft[t]:Bt("Symbol."+t)),Ct[t]},zt=Object.keys||function(t){return yt(t,mt)},Gt=a?Object.defineProperties:function(t,e){A(t);for(var r,n=zt(e),o=n.length,i=0;o>i;)_.f(t,r=n[i++],e[r]);return t},Kt=it("document","documentElement"),$t=q("IE_PROTO"),Vt=function(){},qt=function(t){return"