{"version":3,"file":"barba.mjs","sources":["../../../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/modules/Logger.ts","../src/defs/hooks.ts","../../../node_modules/path-to-regexp/index.js","../src/schemas/attribute.ts","../src/utils/dom.ts","../src/utils/history.ts","../src/utils/helpers.ts","../src/utils/url.ts","../src/utils/request.ts","../../../node_modules/is-promise/index.js","../src/utils/run-async.ts","../src/hooks.ts","../src/modules/Ignore.ts","../src/modules/Cache.ts","../src/modules/Prevent.ts","../src/modules/Store.ts","../src/modules/Transitions.ts","../src/modules/Views.ts","../src/polyfills/index.ts","../src/schemas/page.ts","../src/core.ts"],"sourcesContent":["// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && !check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, value);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\t_entry(_this).then(returnValue, function(error) {\n\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","/**\n * @barba/core/modules/Logger\n * <br><br>\n * ## Logger.\n *\n * - Display informations via the console\n *\n * @module core/modules/Logger\n * @preferred\n */\n\n/***/\n\n/**\n * Log levels, all lower level messages are printed\n *\n * 0. mute\n * 1. error = `console.error()`\n * 2. warning= `console.warn()`\n * 3. info = `console.info()`\n * 4. debug = `console.log()`\n */\nexport enum LogLevels {\n  off = 0,\n  error = 1,\n  warning = 2,\n  info = 3,\n  debug = 4,\n}\n\n/**\n * Global log level\n */\nlet _level: number = LogLevels.off;\n\nexport class Logger {\n  /**\n   * Get global log level.\n   */\n  public static getLevel(): number {\n    return _level;\n  }\n\n  /**\n   * Set global log level.\n   */\n  public static setLevel(name: keyof typeof LogLevels): number {\n    _level = LogLevels[name];\n\n    return _level;\n  }\n\n  /**\n   * Log \"prefix\".\n   */\n  private _source: string;\n\n  /**\n   * Creates an instance of Logger.\n   */\n  constructor(source: string) {\n    this._source = source;\n  }\n\n  /**\n   * Permanent, unremovable log.\n   */\n  // public print(...objects: any[]): void {\n  //   this._log(console.info, LogLevels.off, objects);\n  // }\n\n  /**\n   * Error log.\n   */\n  public error(...objects: any[]): void {\n    this._log(console.error, LogLevels.error, objects);\n  }\n\n  /**\n   * Warn log.\n   */\n  public warn(...objects: any[]): void {\n    this._log(console.warn, LogLevels.warning, objects);\n  }\n\n  /**\n   * Info log.\n   */\n  public info(...objects: any[]): void {\n    this._log(console.info, LogLevels.info, objects);\n  }\n\n  /**\n   * Debug log.\n   */\n  public debug(...objects: any[]): void {\n    this._log(console.log, LogLevels.debug, objects);\n  }\n\n  /**\n   * Internal logger.\n   */\n  private _log(fn: () => void, level: number, objects: any[]): void {\n    if (level <= Logger.getLevel()) {\n      fn.apply(console, ([`[${this._source}] `].concat(objects) as unknown) as [\n\n      ]);\n    }\n  }\n}\n","/**\n * @module typings/core\n */\nimport { ITransitionData, ITransitionPage, IViewData } from '.';\n\nexport type HooksBarba =\n  | 'ready'\n  | 'page'\n  | 'reset'\n  | 'currentAdded'\n  | 'currentRemoved'\n  | 'nextAdded'\n  | 'nextRemoved';\n\nexport type HooksOnce = 'beforeOnce' | 'once' | 'afterOnce';\n\nexport type HooksPage =\n  | 'before'\n  | 'beforeLeave'\n  | 'leave'\n  | 'afterLeave'\n  | 'beforeEnter'\n  | 'enter'\n  | 'afterEnter'\n  | 'after';\n\nexport type HooksBefore = 'beforeOnce' | 'beforeLeave' | 'beforeEnter';\nexport type HooksAfter = 'afterOnce' | 'afterLeave' | 'afterEnter';\n\nexport type HooksTransition = HooksOnce | HooksPage;\nexport type HooksView = HooksBefore | HooksAfter;\nexport type HooksAll = HooksBarba | HooksTransition;\n\n// Allow optional \"dynamically created\" hooks\nexport type HooksTransitionMap = { [key in HooksTransition]?: any };\n\nexport type HookFunction = (\n  data?: ITransitionData | IViewData,\n  t?: ITransitionPage\n) => Promise<void> | void;\n\nexport class HookMethods {\n  public before?: (fn: HookFunction, ctx?: any) => void;\n  public beforeLeave?: (fn: HookFunction, ctx?: any) => void;\n  public leave?: (fn: HookFunction, ctx?: any) => void;\n  public afterLeave?: (fn: HookFunction, ctx?: any) => void;\n  public beforeEnter?: (fn: HookFunction, ctx?: any) => void;\n  public enter?: (fn: HookFunction, ctx?: any) => void;\n  public afterEnter?: (fn: HookFunction, ctx?: any) => void;\n  public after?: (fn: HookFunction, ctx?: any) => void;\n}\n","/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * Default configs.\n */\nvar DEFAULT_DELIMITER = '/'\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \":test(\\\\d+)?\" => [\"test\", \"\\d+\", undefined, \"?\"]\n  // \"(\\\\d+)\"  => [undefined, undefined, \"\\d+\", undefined]\n  '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\n  var whitelist = (options && options.whitelist) || undefined\n  var pathEscaped = false\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) !== null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      pathEscaped = true\n      continue\n    }\n\n    var prev = ''\n    var name = res[2]\n    var capture = res[3]\n    var group = res[4]\n    var modifier = res[5]\n\n    if (!pathEscaped && path.length) {\n      var k = path.length - 1\n      var c = path[k]\n      var matches = whitelist ? whitelist.indexOf(c) > -1 : true\n\n      if (matches) {\n        prev = c\n        path = path.slice(0, k)\n      }\n    }\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n      pathEscaped = false\n    }\n\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var pattern = capture || group\n    var delimiter = prev || defaultDelimiter\n\n    tokens.push({\n      name: name || key++,\n      prefix: prev,\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      pattern: pattern\n        ? escapeGroup(pattern)\n        : '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']+?'\n    })\n  }\n\n  // Push any remaining characters.\n  if (path || index < str.length) {\n    tokens.push(path + str.substr(index))\n  }\n\n  return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options))\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\n    }\n  }\n\n  return function (data, options) {\n    var path = ''\n    var encode = (options && options.encode) || encodeURIComponent\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n        continue\n      }\n\n      var value = data ? data[token.name] : undefined\n      var segment\n\n      if (Array.isArray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) continue\n\n          throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j], token)\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n        segment = encode(String(value), token)\n\n        if (!matches[i].test(segment)) {\n          throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\n        }\n\n        path += token.prefix + segment\n        continue\n      }\n\n      if (token.optional) continue\n\n      throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$/()])/g, '\\\\$1')\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {Array=}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  if (!keys) return path\n\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        pattern: null\n      })\n    }\n  }\n\n  return path\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  return new RegExp('(?:' + parts.join('|') + ')', flags(options))\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}  tokens\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  options = options || {}\n\n  var strict = options.strict\n  var start = options.start !== false\n  var end = options.end !== false\n  var delimiter = options.delimiter || DEFAULT_DELIMITER\n  var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\n  var route = start ? '^' : ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var capture = token.repeat\n        ? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'\n        : token.pattern\n\n      if (keys) keys.push(token)\n\n      if (token.optional) {\n        if (!token.prefix) {\n          route += '(' + capture + ')?'\n        } else {\n          route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'\n        }\n      } else {\n        route += escapeString(token.prefix) + '(' + capture + ')'\n      }\n    }\n  }\n\n  if (end) {\n    if (!strict) route += '(?:' + escapeString(delimiter) + ')?'\n\n    route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\n  } else {\n    var endToken = tokens[tokens.length - 1]\n    var isEndDelimited = typeof endToken === 'string'\n      ? endToken[endToken.length - 1] === delimiter\n      : endToken === undefined\n\n    if (!strict) route += '(?:' + escapeString(delimiter) + '(?=' + endsWith + '))?'\n    if (!isEndDelimited) route += '(?=' + escapeString(delimiter) + '|' + endsWith + ')'\n  }\n\n  return new RegExp(route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {Array=}                keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, keys)\n  }\n\n  if (Array.isArray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), keys, options)\n}\n","/**\n * @barba/core/schemas\n * <br><br>\n * ## Schemas description.\n *\n * @module core/schemas\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { ISchemaAttribute } from '../defs';\n\n/**\n * See [[ISchemaAttribute]]\n */\nexport const schemaAttribute: ISchemaAttribute = {\n  container: 'container',\n  namespace: 'namespace',\n  prefix: 'data-barba',\n  prevent: 'prevent',\n  wrapper: 'wrapper',\n};\n","/**\n * @barba/core/utils/dom\n * <br><br>\n * ## Dom utils\n *\n * - Access DOM contents\n * - DOM vs string conversions\n *\n * @module core/utils/dom\n * @preferred\n */\n\n/***/\n\nimport path from 'path';\n\n// Definitions\nimport { ISchemaAttribute, Link, Scope, Wrapper } from '../defs';\n// Schemas\nimport { schemaAttribute } from '../schemas/attribute';\n\nexport class Dom {\n  private _attr: ISchemaAttribute = schemaAttribute;\n  private _parser: DOMParser = new DOMParser();\n\n  /**\n   * Convert HTMLDocument to string.\n   */\n  public toString(el: HTMLElement): string {\n    return el.outerHTML;\n  }\n\n  /**\n   * Parse HTML string to HTMLDocument.\n   */\n  // see https://github.com/barbajs/barba/issues/362\n  // Seems that using DOMParser.parseFromString causes this issue.\n  public toDocument(htmlString: string): HTMLDocument {\n    return this._parser.parseFromString(htmlString, 'text/html');\n  }\n\n  /**\n   * Parse HTML string to DIVElement.\n   *\n   * DOMParser.parseFromString fails with img[srcset] on iOS.\n   * see https://github.com/barbajs/barba/issues/362\n   */\n  public toElement(htmlString: string): HTMLDivElement {\n    const div = document.createElement('div');\n\n    div.innerHTML = htmlString;\n    return div;\n  }\n\n  /**\n   * Get HTML content.\n   */\n  public getHtml(doc: HTMLDocument = document): string {\n    return this.toString(doc.documentElement);\n  }\n\n  /**\n   * Get full document content.\n   */\n  // getDocument(el = document.documentElement) {\n  //   return this.toStr(el);\n  // },\n\n  /**\n   * Get `[data-barba=\"wrapper\"]`.\n   */\n  public getWrapper(scope: Scope = document): Wrapper {\n    return scope.querySelector(\n      `[${this._attr.prefix}=\"${this._attr.wrapper}\"]`\n    );\n  }\n\n  /**\n   * Get `[data-barba=\"container\"]`.\n   */\n  public getContainer(scope: Scope = document): HTMLElement | null {\n    return scope.querySelector(\n      `[${this._attr.prefix}=\"${this._attr.container}\"]`\n    );\n  }\n\n  /**\n   * Remove container and store next sibling (if applicable).\n   */\n  public removeContainer(container: HTMLElement) {\n    if (document.body.contains(container)) {\n      container.parentNode.removeChild(container);\n    }\n  }\n\n  /**\n   * Add container before next sibling or at the end of the wrapper.\n   */\n  public addContainer(container: HTMLElement, wrapper: HTMLElement) {\n    const existingContainer = this.getContainer();\n\n    if (existingContainer) {\n      this._insertAfter(container, existingContainer);\n    } else {\n      wrapper.appendChild(container);\n    }\n  }\n\n  /**\n   * Get `[data-barba-namespace]`.\n   */\n  public getNamespace(scope: Scope = document): string | null {\n    const ns = scope.querySelector(\n      `[${this._attr.prefix}-${this._attr.namespace}]`\n    );\n\n    return ns\n      ? ns.getAttribute(`${this._attr.prefix}-${this._attr.namespace}`)\n      : null;\n  }\n\n  /**\n   * Get URL from `href` value.\n   */\n  public getHref(el: Link): string | null {\n    // HTML tagName is UPPERCASE, xhtml tagName keeps existing case.\n    if (el.tagName && el.tagName.toLowerCase() === 'a') {\n      // HTMLAnchorElement, full URL available\n      if (typeof el.href === 'string') {\n        return el.href;\n      }\n\n      // Probably a SVGAElement…\n      const href = el.getAttribute('href') || el.getAttribute('xlink:href');\n\n      /* istanbul ignore else */\n      if (href) {\n        // When link comes from SVG, `href` returns an object, not a string.\n        const attr: string =\n          ((href as unknown) as SVGAnimatedString).baseVal || href;\n\n        return this.resolveUrl(attr);\n      }\n    }\n    return null;\n  }\n\n  // Copyright 2014 Simon Lydell\n  // X11 (“MIT”) Licensed. (See LICENSE\n  // https://github.com/lydell/resolve-url/blob/master/resolve-url.js\n  /* istanbul ignore next */\n  public resolveUrl(...urls: string[]) {\n    const numUrls = urls.length;\n\n    if (numUrls === 0) {\n      throw new Error('resolveUrl requires at least one argument; got none.');\n    }\n\n    const base = document.createElement('base');\n    base.href = arguments[0];\n\n    if (numUrls === 1) {\n      return base.href;\n    }\n\n    const head = document.getElementsByTagName('head')[0];\n    head.insertBefore(base, head.firstChild);\n\n    const a = document.createElement('a');\n    let resolved;\n\n    for (let index = 1; index < numUrls; index++) {\n      a.href = arguments[index];\n      resolved = a.href;\n      base.href = resolved;\n    }\n\n    head.removeChild(base);\n\n    return resolved;\n  }\n\n  /**\n   * Insert node after another node.\n   */\n  private _insertAfter(newNode: Node, referenceNode: Node) {\n    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n  }\n}\n\nconst dom = new Dom();\n\nexport { dom };\n","import { Trigger } from '../defs';\n\n/**\n * @barba/core/utils/history\n * <br><br>\n * ## History manager.\n *\n * - Keep track of the navigation history\n *\n * @module core/utils/history\n * @preferred\n */\n\n/***/\n\ninterface ICoords {\n  x: number;\n  y: number;\n}\n\n/**\n * History item.\n *\n * @property index\n * @property namespace\n * @property scroll\n * @property URL\n */\ninterface IHistoryItem {\n  /** index */\n  index: number;\n  /** namespace */\n  ns: string | undefined;\n  /** Scroll position */\n  scroll: ICoords;\n  /** URL */\n  url: string;\n}\n\nexport class History {\n  private _state: IHistoryItem[] = [];\n\n  /**\n   * Init with first state.\n   */\n  public init(url: string, ns: string): void {\n    const state: IHistoryItem = {\n      index: 0,\n      ns,\n      scroll: {\n        x: window.scrollX,\n        y: window.scrollY,\n      },\n      url,\n    };\n\n    this._state.push(state);\n    window.history && window.history.replaceState(state, '', state.url);\n  }\n\n  /**\n   * Add a new state.\n   */\n  public add(\n    url: string,\n    ns: string,\n    i: number = null,\n    push: boolean = true\n  ): void {\n    const index = i || this.size;\n    const state: IHistoryItem = {\n      index,\n      ns,\n      scroll: {\n        x: window.scrollX,\n        y: window.scrollY,\n      },\n      url,\n    };\n\n    this._state.push(state);\n\n    if (push) {\n      window.history && window.history.pushState(state, '', state.url);\n    }\n  }\n\n  /**\n   * Remove last state.\n   */\n  public remove(): void {\n    this._state.pop();\n  }\n\n  /**\n   * Delete all states.\n   */\n  public clear(): void {\n    this._state = [];\n  }\n\n  /**\n   * Update current state.\n   */\n  public update(data: any): void {\n    const state: IHistoryItem = {\n      ...this.current,\n      ...data,\n    };\n\n    this.current = state;\n    window.history && window.history.replaceState(state, '', state.url);\n  }\n\n  /**\n   * Remove last state then go back.\n   */\n  public cancel(): void {\n    this.remove();\n\n    window.history && window.history.back();\n  }\n\n  /**\n   * Get state by index.\n   */\n  public get(index: number) {\n    return this._state[index];\n  }\n\n  public getDirection(index: number): Trigger {\n    let direction: Trigger = 'popstate';\n\n    if (index < this.current.index) {\n      direction = 'back';\n    } else if (index > this.current.index) {\n      direction = 'forward';\n    }\n\n    return direction;\n  }\n\n  /**\n   * Get/set the current state.\n   */\n  get current(): IHistoryItem {\n    return this._state[this._state.length - 1];\n  }\n\n  set current(state: IHistoryItem) {\n    this._state[this._state.length - 1] = state;\n  }\n\n  /**\n   * Get the previous state.\n   */\n  get previous(): IHistoryItem | null {\n    return this._state.length < 2 ? null : this._state[this._state.length - 2];\n  }\n\n  /**\n   * Get the state size.\n   */\n  get size(): number {\n    return this._state.length;\n  }\n}\n\nconst history = new History();\n\nexport { history };\n","/**\n * @barba/core/utils/helpers\n * <br><br>\n * ## Helpers\n *\n * - Update next page data\n *\n * @module core/utils/helpers\n * @preferred\n */\n\n/***/\n\n// Third-party\nimport ptr from 'path-to-regexp';\n// Definitions\nimport { ITransitionData } from '../defs';\n// Utils\nimport { dom } from './dom';\nimport { history } from './history';\n\n/**\n * Update `data.next`, the title and the history\n */\nexport const update = async (\n  page: Promise<string | void>,\n  data: ITransitionData\n): Promise<void> => {\n  // If not already updated\n  if (!data.next.html) {\n    const html = await page;\n    const { next } = data;\n\n    if (html) {\n      // see: https://github.com/barbajs/barba/issues/362\n      // const nextDocument = dom.toDocument(html);\n      const nextDocument = dom.toElement(html);\n\n      next.namespace = dom.getNamespace(nextDocument);\n      next.container = dom.getContainer(nextDocument);\n      // see https://github.com/barbajs/barba/issues/362\n      // next.html = dom.getHtml(nextDocument);\n      // next.html = nextDocument.innerHTML;\n      next.html = html;\n\n      // Update history namespace (not available when initially set)\n      history.update({ ns: next.namespace });\n\n      // Update title.\n      const { title } = dom.toDocument(html);\n\n      document.title = title;\n    }\n  }\n};\n\n/**\n * Next tick\n */\nexport const nextTick = () =>\n  new Promise(resolve => {\n    window.requestAnimationFrame(resolve);\n    // DEV: same result?\n    // setTimeout(resolve, 0);\n  });\n\n/**\n * Turn a route string such as `/user/:name` into a regular expression.\n *\n * Used for:\n *\n * - routes to ignore\n * - route transition resolution\n *\n * @see https://www.npmjs.com/package/path-to-regexp\n */\nconst pathToRegexp = ptr;\n\nexport { pathToRegexp };\n","/**\n * @barba/core/utils/url\n * <br><br>\n * ## URL utils.\n *\n * - Collect and structure informations from URLs\n *\n * @module core/utils/url\n */\n\n/***/\n\n// Definitions\nimport { IGenericObject, IUrlBase } from '../defs';\n\n/**\n * Get location href.\n */\nexport const getHref = (): string => window.location.href;\n\n/**\n * Get location origin.\n */\nexport const getOrigin = (): string => window.location.origin;\n\n/**\n * Get port based on location.\n */\nexport const getPort = (p?: string) => {\n  const port = p || window.location.port;\n  const { protocol } = window.location;\n\n  if (port !== '') {\n    return parseInt(port, 10);\n  }\n\n  if (protocol === 'https:') {\n    return 443;\n  }\n\n  return 80;\n};\n\n/**\n * Get path from URL.\n */\nexport const getPath = (url: string): string => parse(url).path;\n\n/**\n * Get query object from URL.\n */\n// export const getQuery = (url: string): IGenericObject => parse(url).query;\n\n/**\n * Get hash from URL.\n */\n// export const getHash = (url: string): string => parse(url).hash;\n\n/**\n * Parse URL for path, query and hash.\n */\nexport const parse = (url: string): IUrlBase => {\n  // let path = clean(url);\n  let path = url.replace(getOrigin(), '');\n  let hash;\n  let query = {};\n\n  const hashIndex = path.indexOf('#');\n\n  if (hashIndex >= 0) {\n    hash = path.slice(hashIndex + 1);\n    path = path.slice(0, hashIndex);\n  }\n\n  const queryIndex = path.indexOf('?');\n\n  if (queryIndex >= 0) {\n    query = parseQuery(path.slice(queryIndex + 1));\n    path = path.slice(0, queryIndex);\n  }\n\n  return {\n    hash,\n    path,\n    query,\n  };\n};\n\n/**\n * Parse a query string to object.\n */\nexport const parseQuery = (str: string) =>\n  str.split('&').reduce((acc: IGenericObject, el: string) => {\n    const [key, value] = el.split('=');\n\n    acc[key] = value;\n\n    return acc;\n  }, {});\n\n/**\n * Clean URL, remove \"hash\" and/or \"trailing slash\".\n */\nexport const clean = (url: string) => url.replace(/(\\/#.*|\\/|#.*)$/, '');\n","/**\n * @barba/core/utils/request\n * <br><br>\n * ## Fetch pages for transitions.\n *\n * - Includes timeout\n * - Uses Fetch API\n * - Handles errors\n *\n * @module core/utils/request\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { RequestError } from '../defs';\n\n/**\n * Init a page request.\n * Fetch the page and returns a promise with the text content.\n */\nfunction request(\n  url: string,\n  ttl: number = 2e3,\n  requestError: RequestError\n): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const xhr = new XMLHttpRequest();\n\n    xhr.onreadystatechange = () => {\n      if (xhr.readyState === XMLHttpRequest.DONE) {\n        if (xhr.status === 200) {\n          resolve(xhr.responseText);\n        } else if (xhr.status) {\n          // HTTP code is not 200, reject with response.\n          const res = {\n            status: xhr.status,\n            statusText: xhr.statusText,\n          };\n          requestError(url, res);\n          reject(res);\n        }\n      }\n    };\n    xhr.ontimeout = () => {\n      const err = new Error(`Timeout error [${ttl}]`);\n      requestError(url, err);\n      reject(err);\n    };\n    xhr.onerror = () => {\n      const err = new Error(`Fetch error`);\n      requestError(url, err);\n      reject(err);\n    };\n\n    xhr.open('GET', url);\n    xhr.timeout = ttl;\n    xhr.setRequestHeader(\n      'Accept',\n      'text/html,application/xhtml+xml,application/xml'\n    );\n    xhr.setRequestHeader('x-barba', 'yes');\n    xhr.send();\n  });\n}\n\nexport { request };\n","module.exports = isPromise;\n\nfunction isPromise(obj) {\n  return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n","import isPromise from 'is-promise';\n\n// https://github.com/SBoudrias/run-async\n/* istanbul ignore next */\nexport function runAsync(\n  func: (...args: any[]) => void | Promise<any>,\n  ctx: any = {}\n): (...args: any[]) => Promise<any> {\n  return (...args: any[]) => {\n    let async = false;\n\n    const promise = new Promise((resolve, reject) => {\n      // Add async to context\n      ctx.async = () => {\n        async = true;\n        return (err: any, value: any) => {\n          if (err) {\n            reject(err);\n          } else {\n            resolve(value);\n          }\n        };\n      };\n\n      const answer = func.apply(ctx, args as []);\n\n      if (!async) {\n        if (isPromise(answer)) {\n          (answer as Promise<any>).then(resolve, reject);\n        } else {\n          resolve(answer);\n        }\n      }\n    });\n\n    return promise;\n  };\n}\n","/**\n * @barba/core/modules/hooks\n * <br><br>\n * ## Hooks manager.\n *\n * - Register and trigger hooks\n *\n * Hooks can be easily registered:\n *\n * ```js\n * hooks.leave(callback, context);\n * ```\n *\n * @module core/modules/hooks\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { HookFunction, HookMethods, HooksAll } from './defs';\n// Modules\nimport { Logger } from './modules/Logger';\n// Utils\nimport { runAsync } from './utils';\n// Types\ninterface IHookInfos {\n  ctx: any;\n  fn: HookFunction;\n}\n\nexport class Hooks extends HookMethods {\n  /**\n   * Allow the use of `hooks[name](cb, ctx)`.\n   */\n  [key: string]: any;\n  // [key in HooksAll]?: any;\n  public logger: Logger = new Logger('@barba/core');\n  /**\n   * All available hooks.\n   *\n   * See [[HooksAll]]\n   */\n  // TODO: get hooks from defs (DRY)?\n  public all: HooksAll[] = [\n    'ready',\n    'page',\n    'reset',\n    'currentAdded',\n    'currentRemoved',\n    'nextAdded',\n    'nextRemoved',\n    'beforeOnce',\n    'once',\n    'afterOnce',\n    'before',\n    'beforeLeave',\n    'leave',\n    'afterLeave',\n    'beforeEnter',\n    'enter',\n    'afterEnter',\n    'after',\n  ];\n  /**\n   * Registered hooks.\n   *\n   * - Unique hook name\n   * - Associated data set(s) (callback + context)\n   */\n  public registered: Map<HooksAll, Set<IHookInfos>> = new Map();\n\n  constructor() {\n    super();\n    this.init();\n  }\n\n  public init() {\n    this.registered.clear();\n    this.all.forEach(hook => {\n      if (!this[hook]) {\n        this[hook] = (fn: HookFunction, ctx: any = {}) => {\n          if (!this.registered.has(hook)) {\n            this.registered.set(hook, new Set());\n          }\n          const set = this.registered.get(hook);\n\n          set.add({\n            ctx,\n            fn,\n          });\n        };\n      }\n    });\n  }\n\n  /**\n   * Do hook.\n   *\n   * Trigger registered hooks.\n   */\n  public do(name: HooksAll, ...args: any): Promise<any> {\n    if (this.registered.has(name)) {\n      // Let's start a chain of promises\n      let chain = Promise.resolve();\n\n      this.registered.get(name).forEach(hook => {\n        // If needed, bind the right context\n        // const fn = hook.ctx ? hook.fn.bind(hook.ctx) : hook.fn;\n        // Chain async hooks promisified\n        chain = chain.then(() => runAsync(hook.fn, hook.ctx)(...args));\n      });\n\n      return chain;\n    }\n\n    return Promise.resolve();\n  }\n\n  public clear(): void {\n    this.all.forEach(hook => {\n      delete this[hook];\n    });\n\n    this.init();\n  }\n\n  /**\n   * Help, print available and registered hooks.\n   */\n  public help(): void {\n    this.logger.info(`Available hooks: ${this.all.join(',')}`);\n    const registered: string[] = [];\n    this.registered.forEach((value, key) => registered.push(key));\n    this.logger.info(`Registered hooks: ${registered.join(',')}`);\n  }\n}\n\nconst hooks = new Hooks();\n\nexport { hooks };\n","/**\n * @barba/core/modules/ignore\n * <br><br>\n * ## Manage ignore options.\n *\n * - cache\n * - prefetch\n *\n * @module core/modules/ignore\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { IgnoreOption } from '../defs';\n// Utils\nimport { pathToRegexp } from '../utils/helpers';\nimport { parse } from '../utils/url';\n\nexport class Ignore {\n  private _ignoreAll: boolean;\n  private _ignoreRegexes: RegExp[] = [];\n\n  constructor(ignore: IgnoreOption) {\n    if (typeof ignore === 'boolean') {\n      this._ignoreAll = ignore;\n    } else {\n      const paths = Array.isArray(ignore) ? ignore : [ignore];\n\n      this._ignoreRegexes = paths.map(p => pathToRegexp(p));\n    }\n  }\n\n  public checkHref(href: string): boolean {\n    if (typeof this._ignoreAll === 'boolean') {\n      return this._ignoreAll;\n    }\n\n    const { path } = parse(href);\n\n    return this._ignoreRegexes.some(regex => regex.exec(path) !== null);\n  }\n}\n","/**\n * @barba/core/modules/cache\n * <br><br>\n * ## Cache for storing URL / HTML.\n *\n * @module core/modules/cache\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { CacheAction, CacheRequest, ICacheData, IgnoreOption } from '../defs';\n// Modules\nimport { Ignore } from './Ignore';\n\nexport class Cache extends Ignore {\n  private _state: Map<string, ICacheData> = new Map();\n\n  constructor(ignore: IgnoreOption) {\n    super(ignore);\n  }\n\n  /**\n   * Set value to cache\n   */\n  public set(\n    href: string,\n    request: CacheRequest,\n    action: CacheAction\n  ): ICacheData {\n    /* istanbul ignore else */\n    if (!this.checkHref(href)) {\n      this._state.set(href, {\n        action,\n        request,\n      });\n    }\n\n    return {\n      action,\n      request,\n    };\n  }\n\n  /**\n   * Get data from cache\n   */\n  public get(href: string): ICacheData {\n    return this._state.get(href);\n  }\n\n  /**\n   * Get request from cache\n   */\n  public getRequest(href: string): CacheRequest {\n    return this._state.get(href).request;\n  }\n\n  /**\n   * Get action from cache\n   */\n  public getAction(href: string): CacheAction {\n    return this._state.get(href).action;\n  }\n\n  /**\n   * Check if value exists into cache\n   */\n  public has(href: string): boolean {\n    return this._state.has(href);\n  }\n\n  /**\n   * Delete value from cache\n   */\n  public delete(href: string): boolean {\n    return this._state.delete(href);\n  }\n\n  /**\n   * Update cache value\n   */\n  public update(href: string, data: ICacheData): ICacheData {\n    const state = {\n      ...this._state.get(href),\n      ...data,\n    };\n    this._state.set(href, state);\n\n    return state;\n  }\n}\n","/**\n * @barba/core/modules/prevent\n * <br><br>\n * ## Prevent checks.\n *\n * - Gathers all the tests that allow Barba to work and play transitions\n *\n * @module core/modules/prevent\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { IgnoreOption, Link, PreventCheck } from '../defs';\n// Schemas\nimport { schemaAttribute } from '../schemas/attribute';\n// Utils\nimport { url } from '../utils';\n// Modules\nimport { Ignore } from './Ignore';\n\n/**\n * Make sure the browser supports `history.pushState`.\n */\nconst pushState: PreventCheck = () => !window.history.pushState;\n\n/**\n * Make sure there is an `el` and `href`.\n */\nconst exists: PreventCheck = ({ el, href }) => !el || !href;\n\n/**\n * If the user is pressing ctrl + click, the browser will open a new tab.\n */\nconst newTab: PreventCheck = ({ event }) =>\n  (event as KeyboardEvent).which > 1 ||\n  (event as KeyboardEvent).metaKey ||\n  (event as KeyboardEvent).ctrlKey ||\n  (event as KeyboardEvent).shiftKey ||\n  (event as KeyboardEvent).altKey;\n\n/**\n * If the link has `_blank` target.\n */\nconst blank: PreventCheck = ({ el }) =>\n  el.hasAttribute('target') && (el as Link).target === '_blank';\n\n/**\n * If the domain is the same (in order to avoid pushState cross origin security problem).\n * Note: SVGAElement do not have `protocol` neither `hostname` properties.\n */\nconst corsDomain: PreventCheck = ({ el }) =>\n  ((el as HTMLAnchorElement).protocol !== undefined &&\n    window.location.protocol !== (el as HTMLAnchorElement).protocol) ||\n  ((el as HTMLAnchorElement).hostname !== undefined &&\n    window.location.hostname !== (el as HTMLAnchorElement).hostname);\n\n/**\n * If the port is the same.\n * Note: SVGAElement do not have `port` property.\n */\nconst corsPort: PreventCheck = ({ el }) =>\n  (el as HTMLAnchorElement).port !== undefined &&\n  url.getPort() !== url.getPort((el as HTMLAnchorElement).port);\n\n/**\n * If the link has download attribute.\n */\nconst download: PreventCheck = ({ el }) =>\n  el.getAttribute && typeof el.getAttribute('download') === 'string';\n\n/**\n * If the links contains [data-barba-prevent] or [data-barba-prevent=\"self\"].\n */\nconst preventSelf: PreventCheck = ({ el }) =>\n  el.hasAttribute(`${schemaAttribute.prefix}-${schemaAttribute.prevent}`);\n\n/**\n * If some link ancestor contains [data-barba-prevent=\"all\"].\n */\nconst preventAll: PreventCheck = ({ el }) =>\n  Boolean(\n    el.closest(`[${schemaAttribute.prefix}-${schemaAttribute.prevent}=\"all\"]`)\n  );\n\n/**\n * If the link is the current URL.\n *\n * > Not in the test suite.\n */\nconst sameUrl: PreventCheck = ({ href }) =>\n  url.clean(href) === url.clean(window.location.href);\n\nexport class Prevent extends Ignore {\n  public suite: string[] = [];\n  public tests: Map<string, PreventCheck> = new Map();\n\n  constructor(ignore: IgnoreOption) {\n    super(ignore);\n    this.init();\n  }\n\n  public init(): void {\n    // Add defaults\n    this.add('pushState', pushState);\n    this.add('exists', exists);\n    this.add('newTab', newTab);\n    this.add('blank', blank);\n    this.add('corsDomain', corsDomain);\n    this.add('corsPort', corsPort);\n    this.add('download', download);\n    this.add('preventSelf', preventSelf);\n    this.add('preventAll', preventAll);\n\n    // Outside of the test suite\n    this.add('sameUrl', sameUrl, false);\n  }\n\n  public add(name: string, check: PreventCheck, suite: boolean = true): void {\n    this.tests.set(name, check);\n    suite && this.suite.push(name);\n  }\n\n  /**\n   * Run individual test\n   */\n  public run(name: string, el: Link, event: Event, href: string): boolean {\n    return this.tests.get(name)({\n      el,\n      event,\n      href,\n    });\n  }\n\n  /**\n   * Run test suite\n   */\n  public checkLink(el: Link, event: Event, href: string): boolean {\n    return this.suite.some(name => this.run(name, el, event, href));\n  }\n}\n","/**\n * @barba/core/modules/store\n * <br><br>\n * ## Transitions store.\n *\n * - Resolve transition\n * - Manage rules\n *\n * @module core/modules/store\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport {\n  IRule,\n  IRules,\n  ITransitionData,\n  ITransitionFilters,\n  ITransitionOnce,\n  ITransitionPage,\n  RuleName,\n} from '../defs';\n\n// Modules\nimport { Logger } from './Logger';\n\nexport class Store {\n  public logger: Logger = new Logger('@barba/core');\n  /**\n   * All registered transitions.\n   */\n  public all: ITransitionPage[] = [];\n  /**\n   * \"Once only\" registered transitions.\n   */\n  public once: ITransitionOnce[] = [];\n  /**\n   * Rules for transition resolution.\n   *\n   * Defaults:\n   *\n   * - namespace\n   * - custom\n   */\n  private _rules: IRule[] = [\n    {\n      name: 'namespace',\n      type: 'strings',\n    },\n    {\n      name: 'custom',\n      type: 'function',\n    },\n  ];\n\n  /**\n   * Init store.\n   */\n  constructor(transitions: ITransitionPage[] = []) {\n    /* istanbul ignore else */\n    if (transitions) {\n      // TODO: add check for valid transitions? criteria? (once || enter && leave)\n      this.all = this.all.concat(transitions);\n    }\n    this.update();\n  }\n\n  /**\n   * Add rule or transition.\n   */\n  public add(type: 'rule' | 'transition', data: any): void {\n    switch (type) {\n      case 'rule':\n        // TODO: check for valid rule\n        this._rules.splice(data.position || 0, 0, data.value);\n        break;\n      case 'transition':\n      default:\n        // TODO: check for valid transition\n        this.all.push(data);\n        break;\n    }\n\n    this.update();\n  }\n\n  /**\n   * Resolve transition.\n   */\n  public resolve(\n    data: ITransitionData,\n    filters: ITransitionFilters = {}\n  ): ITransitionOnce | ITransitionPage {\n    // Filter on \"once\"\n    let transitions = filters.once ? this.once : this.all;\n\n    // Filter on \"self\"\n    if (filters.self) {\n      transitions = transitions.filter(t => t.name && t.name === 'self');\n    } else {\n      transitions = transitions.filter(t => !t.name || t.name !== 'self');\n    }\n\n    // All matching transition infos\n    const matching = new Map();\n\n    // Active = first of valid transitions\n    // sorted by directions (from/to, from || to, …)\n    const active = transitions.find(t => {\n      let valid = true;\n      const match = {};\n\n      if (filters.self && t.name === 'self') {\n        return true;\n      }\n\n      // Check rules\n      this._rules.reverse().forEach(rule => {\n        if (valid) {\n          valid = this._check(t, rule, data, match);\n          // From/to check, only for page transitions\n          if (!filters.once) {\n            if (t.from && t.to) {\n              valid =\n                this._check(t, rule, data, match, 'from') &&\n                this._check(t, rule, data, match, 'to');\n            }\n            if (t.from && !t.to) {\n              valid = this._check(t, rule, data, match, 'from');\n            }\n            if (!t.from && t.to) {\n              valid = this._check(t, rule, data, match, 'to');\n            }\n          }\n        }\n      });\n\n      matching.set(t, match);\n\n      return valid;\n    });\n\n    const activeMatch = matching.get(active);\n    const transitionType = [];\n    if (filters.once) {\n      transitionType.push('once');\n    } else {\n      transitionType.push('page');\n    }\n    if (filters.self) {\n      transitionType.push('self');\n    }\n\n    if (activeMatch) {\n      // Log resolved transition\n      const infos: any[] = [active];\n      // Log if matching criteria\n      Object.keys(activeMatch).length > 0 && infos.push(activeMatch);\n\n      this.logger.info(\n        `Transition found [${transitionType.join(',')}]`,\n        ...infos\n      );\n    } else {\n      this.logger.info(`No transition found [${transitionType.join(',')}]`);\n    }\n\n    return active;\n  }\n\n  /**\n   * ### Update store.\n   *\n   * - Reorder transition by priorities\n   * - Get wait indicator\n   * - Get once transitions\n   */\n  public update(): void {\n    // Reorder by priorities\n    this.all = this.all\n      .map(t => this._addPriority(t))\n      .sort((a, b) => a.priority - b.priority)\n      .reverse()\n      .map(t => {\n        delete t.priority;\n\n        return t;\n      });\n    this.once = this.all.filter(t => t.once !== undefined) as ITransitionOnce[];\n  }\n\n  /**\n   * ### Check if transition apply.\n   *\n   * Based on rule, page data and optional direction:\n   *\n   * 1. transition has no rule \"property\":\n   *    - always returns true\n   * 2. transition has rule \"property\":\n   *     - \"strings\" should be present on both side (transition + page) and match\n   *     - \"function\" should return true\n   */\n  private _check(\n    transition: ITransitionPage,\n    rule: IRule,\n    data: ITransitionData,\n    match: any,\n    direction?: 'from' | 'to'\n  ): boolean {\n    let isValid = true;\n    let hasMatch = false;\n    const t = transition;\n    const { name, type } = rule;\n    const strRule = name as IRules['strings'];\n    const objRule = name as IRules['object'];\n    const fnName = name as IRules['function'];\n    const base = direction ? t[direction] : t; // = t || t.from || t.to\n    const page = direction === 'to' ? data.next : data.current; // = current || next\n    const exist = direction ? base && base[name] : base[name];\n\n    // If transition rule exists\n    if (exist) {\n      switch (type) {\n        case 'strings':\n        default: {\n          // Array support\n          const names: string[] = Array.isArray(base[strRule])\n            ? (base[strRule] as string[])\n            : [base[strRule] as string];\n\n          // For matching, prop should be present on both sides and match\n          if (page[strRule] && names.indexOf(page[strRule]) !== -1) {\n            hasMatch = true;\n          }\n          // If transition prop is different from current, not valid\n          if (names.indexOf(page[strRule]) === -1) {\n            isValid = false;\n          }\n          break;\n        }\n\n        case 'object': {\n          // Array support\n          const names: string[] = Array.isArray(base[objRule])\n            ? (base[objRule] as string[])\n            : [base[objRule] as string];\n\n          // For matching, prop should be present on both sides and match\n          if (page[objRule]) {\n            if (\n              page[objRule].name &&\n              names.indexOf(page[objRule].name) !== -1\n            ) {\n              hasMatch = true;\n            }\n            // If transition prop is different from current, not valid\n            if (names.indexOf(page[objRule].name) === -1) {\n              isValid = false;\n            }\n          }\n          break;\n        }\n\n        case 'function':\n          if (base[fnName](data)) {\n            hasMatch = true;\n          } else {\n            isValid = false;\n          }\n          break;\n      }\n\n      if (hasMatch) {\n        if (direction) {\n          match[direction] = match[direction] || {};\n          match[direction][name] = t[direction][name];\n        } else {\n          match[name] = t[name];\n        }\n      }\n    }\n\n    return isValid;\n  }\n\n  /**\n   * ### Calculate transition priority.\n   *\n   * Based on:\n   *\n   * - rule \"position\" (index) give tens, hundreds, thousands, …\n   * - from/to properties give units (0, 1 or 2)\n   */\n  private _calculatePriority(\n    t: ITransitionPage,\n    ruleName: RuleName,\n    ruleIndex: number\n  ): number {\n    let priority = 0;\n\n    if (\n      t[ruleName] ||\n      (t.from && t.from[ruleName]) ||\n      (t.to && t.to[ruleName])\n    ) {\n      priority += Math.pow(10, ruleIndex);\n\n      if (t.from && t.from[ruleName]) {\n        priority += 1;\n      }\n      if (t.to && t.to[ruleName]) {\n        priority += 2;\n      }\n    }\n\n    return priority;\n  }\n\n  private _addPriority(t: ITransitionPage): ITransitionPage {\n    t.priority = 0;\n    let priority = 0;\n\n    this._rules.forEach((rule, i) => {\n      const { name } = rule;\n      const index = i + 1;\n\n      priority += this._calculatePriority(t, name, index);\n    });\n\n    t.priority = priority;\n\n    return t;\n  }\n}\n","/**\n * @barba/core/modules/transitions\n * <br><br>\n * ## Transitions manager.\n *\n * - Handle hooks and transition lifecycle\n *\n * @module core/modules/transitions\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport {\n  HooksTransition,\n  HooksTransitionMap,\n  ITransitionData,\n  ITransitionFilters,\n  ITransitionOnce,\n  ITransitionPage,\n  Wrapper,\n} from '../defs';\n// Hooks\nimport { hooks } from '../hooks';\n// Utils\nimport { dom, helpers, runAsync } from '../utils';\n// Modules\nimport { Logger } from './Logger';\nimport { Store } from './Store';\n\nexport class Transitions {\n  public logger: Logger = new Logger('@barba/core');\n  public store: Store;\n  private _running: boolean = false;\n\n  constructor(transitions: ITransitionPage[] = []) {\n    this.store = new Store(transitions);\n  }\n\n  /**\n   * Get resolved transition\n   *\n   * - based on data\n   */\n  public get(\n    data: ITransitionData,\n    filters?: ITransitionFilters\n  ): ITransitionOnce | ITransitionPage {\n    return this.store.resolve(data, filters);\n  }\n\n  /**\n   * Animation running status.\n   */\n  get isRunning(): boolean {\n    return this._running;\n  }\n  set isRunning(status: boolean) {\n    this._running = status;\n  }\n\n  /**\n   * Check for registered once transition(s).\n   */\n  get hasOnce(): boolean {\n    return this.store.once.length > 0;\n  }\n\n  /**\n   * Check for registered self transition.\n   */\n  get hasSelf(): boolean {\n    return this.store.all.some(t => t.name === 'self');\n  }\n\n  /**\n   * ### Wait indicator.\n   *\n   * Tells Barba to get next page data<br>\n   * before starting the resolution<br>\n   * because some registered transitions need<br>\n   * next page data to be resolved (eg: `sync: true`, `to: { namespace }`, …)\n   */\n  get shouldWait(): boolean {\n    return this.store.all.some(t => (t.to && !t.to.route) || t.sync);\n  }\n\n  /**\n   * ### Do \"once\" transition.\n   *\n   * Hooks: see [[HooksOnce]].\n   */\n  public async doOnce({\n    data,\n    transition,\n  }: {\n    data: ITransitionData;\n    transition: ITransitionOnce;\n  }) {\n    const t = transition || {};\n    this._running = true;\n\n    try {\n      await this._doAsyncHook('beforeOnce', data, t);\n      await this.once(data, t);\n      await this._doAsyncHook('afterOnce', data, t);\n    } catch (error) {\n      this._running = false;\n      this.logger.error(error);\n      // TODO: should I throw or should I log…\n      throw new Error('Transition error [once]');\n    }\n\n    this._running = false;\n  }\n\n  /**\n   * ### Do \"page\" transition.\n   *\n   * Hooks: see [[HooksPage]].\n   *\n   * `sync: false` (default) order:\n   *\n   * 1. before\n   * 2. beforeLeave\n   * 3. leave\n   * 4. afterLeave\n   * 5. beforeEnter\n   * 6. enter\n   * 7. afterEnter\n   * 8. after\n   *\n   * `sync: true` order:\n   *\n   * 1. before\n   * 2. beforeLeave\n   * 3. beforeEnter\n   * 4. leave & enter\n   * 5. afterLeave\n   * 6. afterEnter\n   * 7. after\n   */\n  public async doPage({\n    data,\n    transition,\n    page,\n    wrapper,\n  }: {\n    data: ITransitionData;\n    transition: ITransitionPage;\n    page: Promise<string | void>;\n    wrapper: Wrapper;\n  }) {\n    const t = transition || {};\n    const sync = t.sync === true || false;\n\n    this._running = true;\n\n    try {\n      // Check sync mode, wait for next content\n      if (sync) {\n        await helpers.update(page, data);\n      }\n\n      await this._doAsyncHook('before', data, t);\n\n      if (sync) {\n        try {\n          await this.add(data, wrapper);\n          // Before actions\n          await this._doAsyncHook('beforeLeave', data, t);\n          await this._doAsyncHook('beforeEnter', data, t);\n\n          // Actions\n          await Promise.all([this.leave(data, t), this.enter(data, t)]);\n\n          // After actions\n          await this._doAsyncHook('afterLeave', data, t);\n          await this._doAsyncHook('afterEnter', data, t);\n        } catch (error) {\n          throw new Error('Transition error [page][sync]');\n        }\n      } else {\n        let leaveResult: any = false;\n        try {\n          // Leave\n          await this._doAsyncHook('beforeLeave', data, t);\n\n          leaveResult = await Promise.all([\n            this.leave(data, t),\n            helpers.update(page, data),\n          ]).then(values => values[0]);\n\n          await this._doAsyncHook('afterLeave', data, t);\n\n          // TODO: check here \"valid\" page result\n          // before going further\n        } catch (error) {\n          throw new Error('Transition error [page][leave]');\n        }\n\n        try {\n          // Enter\n          /* istanbul ignore else */\n          if (leaveResult !== false) {\n            await this.add(data, wrapper);\n\n            await this._doAsyncHook('beforeEnter', data, t);\n            await this.enter(data, t, leaveResult);\n            await this._doAsyncHook('afterEnter', data, t);\n          }\n        } catch (error) {\n          throw new Error('Transition error [page][enter]');\n        }\n      }\n\n      // Remove current contaienr\n      await this.remove(data);\n\n      await this._doAsyncHook('after', data, t);\n    } catch (error) {\n      this._running = false;\n      // TODO: use cases for cancellation\n      this.logger.error(error);\n\n      // TODO: should I throw or should I log…\n      throw new Error('Transition error');\n    }\n\n    this._running = false;\n  }\n\n  /**\n   * Once hook + async \"once\" transition.\n   */\n  public async once(data: ITransitionData, t: ITransitionOnce): Promise<void> {\n    await hooks.do('once', data, t);\n\n    return t.once ? runAsync(t.once, t)(data) : Promise.resolve();\n  }\n\n  /**\n   * Leave hook + async \"leave\" transition.\n   */\n  public async leave(data: ITransitionData, t: ITransitionPage): Promise<any> {\n    await hooks.do('leave', data, t);\n\n    return t.leave ? runAsync(t.leave, t)(data) : Promise.resolve();\n  }\n\n  /**\n   * Enter hook + async \"enter\" transition.\n   */\n  public async enter(\n    data: ITransitionData,\n    t: ITransitionPage,\n    leaveResult?: any\n  ): Promise<void> {\n    await hooks.do('enter', data, t);\n\n    return t.enter\n      ? runAsync(t.enter, t)(data, leaveResult)\n      : Promise.resolve();\n  }\n\n  /**\n   * Add next container.\n   */\n  public async add(data: ITransitionData, wrapper: Wrapper): Promise<void> {\n    dom.addContainer(data.next.container, wrapper);\n    hooks.do('nextAdded', data);\n  }\n\n  /**\n   * Remove current container.\n   */\n  public async remove(data: ITransitionData): Promise<void> {\n    dom.removeContainer(data.current.container);\n    hooks.do('currentRemoved', data);\n  }\n\n  /**\n   * Do hooks + async transition methods.\n   */\n  private async _doAsyncHook(\n    hook: HooksTransition,\n    data: ITransitionData,\n    t: HooksTransitionMap\n  ): Promise<void> {\n    await hooks.do(hook, data, t);\n\n    return t[hook] ? runAsync(t[hook], t)(data) : Promise.resolve();\n  }\n}\n","/**\n * @barba/core/modules/views\n * <br><br>\n * ## Views manager.\n *\n * @module core/modules/views\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { HooksView, IView, IViewData } from '../defs';\n// Hooks\nimport { hooks } from '../hooks';\n// Utils\nimport { runAsync } from '../utils';\n// Types\ntype Hook = (data: IViewData) => Promise<void>;\n\nexport class Views {\n  /**\n   * Available hook names for views.\n   */\n  public names: HooksView[] = [\n    'beforeLeave',\n    'afterLeave',\n    'beforeEnter',\n    'afterEnter',\n  ];\n  /**\n   * Registered views by namespace.\n   */\n  public byNamespace: Map<string, IView> = new Map();\n\n  /**\n   * Init views.\n   */\n  constructor(views: IView[]) {\n    if (views.length === 0) {\n      return;\n    }\n\n    // TODO: add check\n    // for valid views? criteria? (namespace property, string ?)\n    // or duplicate\n    views.forEach(view => {\n      this.byNamespace.set(view.namespace, view);\n    });\n\n    this.names.forEach(name => {\n      hooks[name](this._createHook(name));\n    });\n  }\n\n  /**\n   * Create the hook method.\n   *\n   * - get view based on namespace\n   * - execute callback with transition data\n   */\n  private _createHook(name: HooksView): Hook {\n    return data => {\n      const { namespace } = name.match(/enter/i) ? data.next : data.current;\n      const view = this.byNamespace.get(namespace);\n\n      // TODO: manage self…\n      // if (view && data.trigger !== 'self') {\n      if (view && view[name]) {\n        return runAsync(view[name], view)(data);\n      }\n\n      return Promise.resolve();\n    };\n  }\n}\n","// Element.prototype.matches polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\nif (!Element.prototype.matches) {\n  Element.prototype.matches =\n    (Element as any).prototype.msMatchesSelector ||\n    Element.prototype.webkitMatchesSelector;\n}\n\n// Element.prototype.closest polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\nif (!Element.prototype.closest) {\n  Element.prototype.closest = function closest(s: string) {\n    let el = this;\n\n    do {\n      if (el.matches(s)) {\n        return el;\n      }\n\n      el = (el.parentElement || el.parentNode) as Element;\n    } while (el !== null && el.nodeType === 1);\n\n    return null;\n  };\n}\n","/**\n * @module core/schemas\n */\n\n// Definitions\nimport { ISchemaPage } from '../defs';\n\n/**\n * See [[ISchemaPage]]\n */\nexport const schemaPage: ISchemaPage = {\n  container: undefined,\n  html: undefined,\n  namespace: undefined,\n  url: {\n    hash: undefined,\n    href: undefined,\n    path: undefined,\n    query: {},\n  },\n};\n","/**\n * @barba/core\n * <br><br>\n * ## Barba core object\n *\n * Main methods:\n *\n * - `.init()` for initialization with options\n * - `.use()` for plugins\n *\n * @module core\n */\n\n/***/\n\nimport { version } from '../package.json';\n// Definitions\nimport {\n  IBarbaOptions,\n  IBarbaPlugin,\n  IgnoreOption,\n  ISchemaPage,\n  ITransitionData,\n  ITransitionOnce,\n  ITransitionPage,\n  Link,\n  LinkEvent,\n  RequestCustomError,\n  RequestErrorOrResponse,\n  SchemaAttributeValues,\n  Trigger,\n  Wrapper,\n} from './defs';\n// Hooks\nimport { hooks } from './hooks';\n// Modules\nimport { Cache } from './modules/Cache';\nimport { Logger } from './modules/Logger';\nimport { Prevent } from './modules/Prevent';\nimport { Transitions } from './modules/Transitions';\nimport { Views } from './modules/Views';\n// Polyfills\nimport './polyfills';\n// Schemas\nimport { schemaAttribute } from './schemas/attribute';\nimport { schemaPage } from './schemas/page';\n// Utils\nimport { dom, helpers, history, request, url } from './utils';\n\nexport class Core {\n  /**\n   * Version.\n   */\n  public version: string = version;\n  /**\n   * Schemas.\n   */\n  public schemaPage: ISchemaPage = schemaPage;\n  /**\n   * Logger class, allows plugins to create Logger.\n   */\n  public Logger: typeof Logger = Logger;\n  /**\n   * Barba logger.\n   */\n  public logger: Logger = new Logger('@barba/core');\n  /**\n   * Plugins.\n   */\n  public plugins: Array<IBarbaPlugin<any>> = [];\n  /**\n   * Options\n   */\n  public timeout: number;\n  public cacheIgnore: IgnoreOption;\n  public prefetchIgnore: IgnoreOption;\n  public preventRunning: boolean;\n  /**\n   * Hooks\n   */\n  public hooks = hooks;\n  /**\n   * Modules.\n   */\n  // public history: History;\n  public cache: Cache;\n  public prevent: Prevent;\n  public transitions: Transitions;\n  public views: Views;\n  /**\n   * Utils.\n   */\n  public dom = dom;\n  public helpers = helpers;\n  public history = history;\n  public request = request;\n  public url = url;\n\n  private _data: ITransitionData;\n  private _requestCustomError: RequestCustomError;\n  private _wrapper: Wrapper;\n\n  /**\n   * ### Init plugin with options.\n   *\n   * See [[IBarbaPlugin]] for more details.\n   */\n  public use<T>(plugin: IBarbaPlugin<T>, options?: T): void {\n    const installedPlugins = this.plugins;\n\n    // Plugin installation\n    if (installedPlugins.indexOf(plugin) > -1) {\n      this.logger.warn(`Plugin [${plugin.name}] already installed.`);\n\n      return;\n    }\n\n    if (typeof plugin.install !== 'function') {\n      this.logger.warn(`Plugin [${plugin.name}] has no \"install\" method.`);\n\n      return;\n    }\n\n    plugin.install(this, options);\n    installedPlugins.push(plugin);\n  }\n\n  /**\n   * ### Init barba with options.\n   *\n   * See [[IBarbaOptions]] for more details.\n   *\n   * Default values are:\n   *\n   * - transitions: `[]`\n   * - views: `[]`\n   * - schema: [[SchemaAttribute]]\n   * - timeout: `2e3`\n   * - cacheIgnore: `false`\n   * - prefetchIgnore: `false`\n   * - preventRunning: `false`\n   * - prevent: `null`,\n   * - debug: `false`\n   * - logLevel: `'debug'`\n   */\n  public init(\n    /** @ignore */ {\n      transitions = [],\n      views = [],\n      schema = schemaAttribute,\n      requestError,\n      timeout = 2e3,\n      cacheIgnore = false,\n      prefetchIgnore = false,\n      /* istanbul ignore next */\n      preventRunning = false,\n      prevent: preventCustom = null,\n      debug = false,\n      logLevel = 'off',\n    }: IBarbaOptions = {}\n  ) {\n    // 0. Set logger level and print version\n    Logger.setLevel(debug === true ? 'debug' : logLevel);\n    this.logger.info(this.version);\n\n    // 1. Manage options\n    Object.keys(schema).forEach(k => {\n      const attr = k as SchemaAttributeValues;\n\n      /* istanbul ignore else */\n      if (schemaAttribute[attr]) {\n        schemaAttribute[attr] = schema[attr];\n      }\n    });\n    this._requestCustomError = requestError;\n    this.timeout = timeout;\n    this.cacheIgnore = cacheIgnore;\n    this.prefetchIgnore = prefetchIgnore;\n    this.preventRunning = preventRunning;\n\n    // 2. Get and check wrapper\n    this._wrapper = this.dom.getWrapper();\n    if (!this._wrapper) {\n      throw new Error('[@barba/core] No Barba wrapper found');\n    }\n    this._wrapper.setAttribute('aria-live', 'polite'); // A11y\n\n    // 3. Init pages (get \"current\" data)\n    this._resetData();\n\n    const { current } = this.data;\n\n    if (!current.container) {\n      throw new Error('[@barba/core] No Barba container found');\n    }\n\n    // 4. Init other modules\n    this.cache = new Cache(cacheIgnore);\n    this.prevent = new Prevent(prefetchIgnore);\n    this.transitions = new Transitions(transitions);\n    this.views = new Views(views);\n\n    // Add prevent custom\n    if (preventCustom !== null) {\n      if (typeof preventCustom !== 'function') {\n        throw new Error('[@barba/core] Prevent should be a function');\n      }\n\n      this.prevent.add('preventCustom', preventCustom);\n    }\n\n    // 5. Use \"current\" data\n    // Init history\n    this.history.init(current.url.href, current.namespace);\n    // Add to cache\n    // TODO: do not cache renderer HTML, only request results…\n    // this.cache.set(current.url.href, Promise.resolve(current.html), 'init');\n\n    // 6. Bind context\n    this._onLinkEnter = this._onLinkEnter.bind(this);\n    this._onLinkClick = this._onLinkClick.bind(this);\n    this._onStateChange = this._onStateChange.bind(this);\n    this._bind();\n\n    // 7. Init plugins\n    this.plugins.forEach(plugin => plugin.init());\n\n    // 8. Barba ready\n    // Set next + trigger for once and `beforeEnter`/`afterEnter` view on page load.\n    const readyData = this.data;\n\n    readyData.trigger = 'barba';\n    readyData.next = readyData.current;\n    this.hooks.do('ready', readyData);\n\n    // 9. Finally, do once…\n    this.once(readyData);\n    // Clean data for first barba transition…\n    this._resetData();\n  }\n\n  public destroy(): void {\n    this._resetData();\n    this._unbind();\n    this.history.clear();\n    this.hooks.clear();\n    this.plugins = [];\n  }\n\n  get data(): ITransitionData {\n    return this._data;\n  }\n\n  get wrapper(): HTMLElement {\n    return this._wrapper;\n  }\n\n  /**\n   * ### Force a page change without Barba transition.\n   */\n  public force(href: string): void {\n    // DEV\n    // Can be used waiting animation cancellation management…\n    window.location.assign(href);\n  }\n\n  /**\n   * ### Go for a Barba transition.\n   *\n   * Manage \"self page\" href:\n   *\n   * - if same url and no self transition, keep default behavior\n   *   - link: reload the page\n   *   - anchor: scroll to\n   * - if same url with self transition, use it\n   * - then start a page transition.\n   */\n  public go(\n    href: string,\n    trigger: Trigger = 'barba',\n    e?: LinkEvent | PopStateEvent\n  ): Promise<void> {\n    // If animation running, force reload\n    if (this.transitions.isRunning) {\n      this.force(href);\n\n      return;\n    }\n\n    let self = false;\n\n    // Check prevent sameURL against current history\n    if (trigger === 'popstate') {\n      self =\n        this.history.current &&\n        this.url.getPath(this.history.current.url) === this.url.getPath(href);\n    } else {\n      self = this.prevent.run('sameUrl', null, null, href);\n    }\n\n    if (self && !this.transitions.hasSelf) {\n      return;\n    }\n\n    // Manage history / popstate direction\n    if (trigger === 'popstate') {\n      const { state } = e as PopStateEvent;\n      // Get direction\n      trigger = this.history.getDirection(state.index as number);\n      this.history.add(href, state.ns, state.index, false);\n    } else {\n      this.history.add(href, 'tmp');\n    }\n\n    if (e) {\n      e.stopPropagation();\n      e.preventDefault();\n    }\n\n    return this.page(href, trigger, self);\n  }\n\n  /**\n   * ### Start an \"once\" transition.\n   *\n   * If some registered \"once\" transition,\n   * get the \"resolved\" transition from the store and start it.\n   */\n  public async once(readyData: ITransitionData): Promise<void> {\n    await this.hooks.do('beforeEnter', readyData);\n\n    // Check if once transition\n    if (this.transitions.hasOnce) {\n      try {\n        const transition = this.transitions.get(readyData, {\n          once: true,\n        }) as ITransitionOnce;\n\n        await this.transitions.doOnce({ transition, data: readyData });\n      } catch (error) {\n        this.logger.error(error);\n      }\n    }\n\n    await this.hooks.do('afterEnter', readyData);\n  }\n\n  /**\n   * ### Start a \"page\" transition.\n   *\n   * 1. If no running transition, updates data with full URL properties and trigger.\n   * 2. Get page from cache or init request.\n   * 3. Wait if some transitions need \"next\" data (`sync: true`, `to: …`).\n   * 4. Manage the history, depending on trigger.\n   * 5. Get \"data\" and trigger \"go\" hook.\n   * 6. Get the \"resolved\" transition from the store and start it.\n   * 7. Update title and reset data (current, next = undefined).\n   *\n   * > If \"self\", use the \"self\" transition\n   */\n  public async page(\n    href: string,\n    trigger: Trigger,\n    self: boolean\n  ): Promise<void> {\n    this.data.next.url = {\n      href,\n      ...this.url.parse(href),\n    };\n    this.data.trigger = trigger;\n\n    const page = this.cache.has(href)\n      ? this.cache.update(href, { action: 'click' }).request\n      : this.cache.set(\n          href,\n          this.request(\n            href,\n            this.timeout,\n            this.onRequestError.bind(this, trigger)\n          ),\n          'click'\n        ).request;\n\n    // Need to wait before getting the right transition\n    if (this.transitions.shouldWait) {\n      await helpers.update(page, this.data);\n    }\n\n    const data = this.data;\n\n    // Hook: between trigger and transition\n    // Can be used to resolve \"route\"…\n    await this.hooks.do('page', data);\n\n    try {\n      const transition = this.transitions.get(data, {\n        once: false,\n        self,\n      }) as ITransitionPage;\n\n      await this.transitions.doPage({\n        data,\n        page,\n        transition,\n        wrapper: this._wrapper,\n      });\n\n      this._resetData();\n    } catch (error) {\n      // Something went wrong (rejected promise, error, 404, 505, other…)\n      this.logger.error(error);\n    }\n  }\n\n  /**\n   * When a request error occurs.\n   *\n   * Allow the user to manage request error. (E.g: 404)\n   */\n  public onRequestError(trigger: Trigger, ...args: any): boolean {\n    // Cancel transition status\n    this.transitions.isRunning = false;\n\n    const [href, response]: [string, RequestErrorOrResponse] = args;\n    const action = this.cache.getAction(href);\n    this.cache.delete(href);\n\n    // Custom requestError returning false will return here.\n    if (\n      this._requestCustomError &&\n      this._requestCustomError(trigger, action, href, response) === false\n    ) {\n      return false;\n    }\n\n    // Force page change\n    if (action === 'click') {\n      this.force(href);\n    }\n    return false;\n  }\n\n  /**\n   * Programmatically prefetch\n   */\n  public prefetch(href: string) {\n    // Already in cache\n    /* istanbul ignore next */\n    if (this.cache.has(href)) {\n      return;\n    }\n\n    this.cache.set(\n      href,\n      this.request(\n        href,\n        this.timeout,\n        this.onRequestError.bind(this, 'barba')\n      ).catch((error: RequestErrorOrResponse) => {\n        this.logger.error(error);\n      }),\n      'prefetch'\n    );\n  }\n\n  /**\n   * Bind event listeners.\n   */\n  private _bind(): void {\n    /* istanbul ignore else */\n    if (this.prefetchIgnore !== true) {\n      document.addEventListener('mouseover', this._onLinkEnter);\n      document.addEventListener('touchstart', this._onLinkEnter);\n    }\n    document.addEventListener('click', this._onLinkClick);\n    window.addEventListener('popstate', this._onStateChange);\n  }\n\n  /**\n   * Bind event listeners.\n   */\n  private _unbind(): void {\n    /* istanbul ignore else */\n    if (this.prefetchIgnore !== true) {\n      document.removeEventListener('mouseover', this._onLinkEnter);\n      document.removeEventListener('touchstart', this._onLinkEnter);\n    }\n    document.removeEventListener('click', this._onLinkClick);\n    window.removeEventListener('popstate', this._onStateChange);\n  }\n\n  /**\n   * When a element is entered.\n   *\n   * Get valid link element.\n   * Cache URL if needed.\n   */\n  private _onLinkEnter(e: LinkEvent): void {\n    const link = this._getLinkElement(e);\n\n    if (!link) {\n      return;\n    }\n\n    const href = this.dom.getHref(link);\n\n    if (this.prevent.checkHref(href)) {\n      return;\n    }\n\n    // Already in cache\n    if (this.cache.has(href)) {\n      return;\n    }\n\n    this.cache.set(\n      href,\n      this.request(\n        href,\n        this.timeout,\n        this.onRequestError.bind(this, link)\n      ).catch((error: RequestErrorOrResponse) => {\n        this.logger.error(error);\n      }),\n      'enter'\n    );\n  }\n\n  /**\n   * When an element is clicked.\n   *\n   * Get valid link element.\n   * Prevent same URL.\n   * Go for a Barba transition.\n   */\n  private _onLinkClick(e: LinkEvent): void {\n    // This use `prevent.checkLink` under the hood to get eligible link.\n    const link = this._getLinkElement(e);\n\n    if (!link) {\n      return;\n    }\n\n    if (this.transitions.isRunning && this.preventRunning) {\n      e.preventDefault();\n      e.stopPropagation();\n\n      return;\n    }\n\n    this.go(this.dom.getHref(link), link, e);\n  }\n\n  /**\n   * When History state changes.\n   *\n   * Get \"href\" from URL\n   * Go for a Barba transition.\n   */\n  private _onStateChange(e: PopStateEvent): void {\n    this.go(this.url.getHref(), 'popstate', e);\n  }\n\n  /**\n   * Get a valid link ancestor.\n   *\n   * Check for a \"href\" attribute.\n   * Then check if eligible for Barba.\n   */\n  private _getLinkElement(e: LinkEvent): Link {\n    let el = e.target as Link;\n\n    while (el && !this.dom.getHref(el)) {\n      el = (el as HTMLElement).parentNode as Link;\n    }\n\n    // Check prevent\n    if (!el || this.prevent.checkLink(el, e, this.dom.getHref(el))) {\n      return;\n    }\n\n    return el;\n  }\n\n  /**\n   * Reset pages data.\n   *\n   * Set \"current\" and unset \"next\".\n   */\n  private _resetData() {\n    const href = this.url.getHref();\n    const current = {\n      container: this.dom.getContainer(),\n      html: this.dom.getHtml(),\n      namespace: this.dom.getNamespace(),\n      url: {\n        href,\n        ...this.url.parse(href),\n      },\n    };\n\n    this._data = {\n      current,\n      next: { ...this.schemaPage },\n      trigger: undefined,\n    };\n\n    this.hooks.do('reset', this.data);\n  }\n}\n\nconst core = new Core();\n\nexport default core;\n"],"names":["_catch","body","recover","result","e","then","Symbol","iterator","asyncIterator","LogLevels","HookMethods","_level","off","Logger","source","this","_source","getLevel","setLevel","name","error","objects","_log","console","warn","warning","info","debug","log","fn","level","apply","concat","pathToRegexp","path","keys","options","RegExp","groups","match","i","length","push","prefix","delimiter","optional","repeat","pattern","regexpToRegexp","Array","isArray","parts","join","flags","arrayToRegexp","tokensToRegExp","parse","stringToRegexp","tokensToFunction","DEFAULT_DELIMITER","PATH_REGEXP","str","res","tokens","key","index","defaultDelimiter","whitelist","undefined","pathEscaped","exec","m","escaped","offset","slice","prev","capture","group","modifier","k","c","indexOf","escapeGroup","escapeString","substr","matches","data","encode","encodeURIComponent","token","segment","value","TypeError","j","test","String","replace","sensitive","strict","start","end","endsWith","map","route","endToken","isEndDelimited","schemaAttribute","container","namespace","prevent","wrapper","dom","DOMParser","toString","el","outerHTML","toDocument","htmlString","_parser","parseFromString","toElement","div","document","createElement","innerHTML","getHtml","doc","documentElement","getWrapper","scope","querySelector","_attr","getContainer","removeContainer","contains","parentNode","removeChild","addContainer","existingContainer","_insertAfter","appendChild","getNamespace","ns","getAttribute","getHref","tagName","toLowerCase","href","resolveUrl","baseVal","urls","numUrls","Error","base","arguments","head","getElementsByTagName","insertBefore","firstChild","resolved","a","newNode","referenceNode","nextSibling","history","init","url","state","scroll","x","window","scrollX","y","scrollY","_state","replaceState","add","size","pushState","remove","pop","clear","update","current","cancel","back","get","getDirection","direction","page","next","html","nextDocument","title","ptr","Promise","resolve","requestAnimationFrame","getOrigin","location","origin","getPort","p","port","protocol","parseInt","hash","query","hashIndex","queryIndex","parseQuery","split","reduce","acc","clean","request","ttl","requestError","reject","xhr","XMLHttpRequest","onreadystatechange","readyState","DONE","status","responseText","statusText","ontimeout","err","onerror","open","timeout","setRequestHeader","send","obj","runAsync","func","ctx","args","async","promise","answer","isPromise","hooks","_this","Map","registered","all","forEach","hook","_this2","has","set","Set","chain","_this3","help","logger","Ignore","ignore","_ignoreAll","paths","_ignoreRegexes","checkHref","some","regex","Cache","action","getRequest","getAction","exists","newTab","event","which","metaKey","ctrlKey","shiftKey","altKey","blank","hasAttribute","target","corsDomain","hostname","corsPort","download","preventSelf","preventAll","Boolean","closest","sameUrl","Prevent","check","suite","tests","run","checkLink","Store","transitions","type","_rules","splice","position","filters","once","filter","self","t","matching","active","find","valid","reverse","rule","_check","from","to","activeMatch","transitionType","infos","Object","_addPriority","sort","b","priority","transition","isValid","hasMatch","strRule","objRule","fnName","names","_calculatePriority","ruleName","ruleIndex","Math","pow","Transitions","store","doOnce","_running","_doAsyncHook","doPage","_this4","sync","leave","enter","leaveResult","helpers","values","Views","views","view","byNamespace","_createHook","Element","prototype","msMatchesSelector","webkitMatchesSelector","s","parentElement","nodeType","schemaPage","core","version","use","plugin","installedPlugins","plugins","install","schema","cacheIgnore","prefetchIgnore","preventRunning","preventCustom","logLevel","_requestCustomError","_wrapper","setAttribute","_resetData","cache","_onLinkEnter","bind","_onLinkClick","_onStateChange","_bind","readyData","trigger","destroy","_unbind","force","assign","go","isRunning","getPath","hasSelf","stopPropagation","preventDefault","hasOnce","onRequestError","shouldWait","response","prefetch","_this5","addEventListener","removeEventListener","link","_getLinkElement","_this6","_data"],"mappings":"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"}