{"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/Error.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, result);\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\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\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 './index';\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.match = match\nmodule.exports.regexpToFunction = regexpToFunction\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), options)\n}\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nfunction match (str, options) {\n  var keys = []\n  var re = pathToRegexp(str, keys, options)\n  return regexpToFunction(re, keys)\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nfunction regexpToFunction (re, keys) {\n  return function (pathname, options) {\n    var m = re.exec(pathname)\n    if (!m) return false\n\n    var path = m[0]\n    var index = m.index\n    var params = {}\n    var decode = (options && options.decode) || decodeURIComponent\n\n    for (var i = 1; i < m.length; i++) {\n      if (m[i] === undefined) continue\n\n      var key = keys[i - 1]\n\n      if (key.repeat) {\n        params[key.name] = m[i].split(key.delimiter).map(function (value) {\n          return decode(value, key)\n        })\n      } else {\n        params[key.name] = decode(m[i], key)\n      }\n    }\n\n    return { path: path, index: index, params: params }\n  }\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\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 + ')$', flags(options))\n    }\n  }\n\n  return function (data, options) {\n    var path = ''\n    var encode = (options && options.encode) || encodeURIComponent\n    var validate = options ? options.validate !== false : true\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 (validate && !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 (validate && !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  history: 'history',\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 { HistoryAction, LinkEvent, Trigger } from '../defs';\n// Schemas\nimport { schemaAttribute } from '../schemas/attribute';\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 * State item.\n *\n * @property from\n * @property index\n */\ninterface IHistoryItem {\n  /** origin */\n  from: string;\n  /** index */\n  index: number;\n  /** states */\n  states: IStateItem[];\n}\n\n/***/\ninterface ICoords {\n  x: number;\n  y: number;\n}\n\n/**\n * History item.\n *\n * @property namespace\n * @property scroll\n * @property URL\n */\ninterface IStateItem {\n  /** namespace */\n  ns: string | undefined;\n  /** Scroll position */\n  scroll: ICoords;\n  /** URL */\n  url: string;\n}\n\nexport class History {\n  private _session: string;\n  private _states: IStateItem[] = [];\n  private _pointer = -1;\n\n  /**\n   * Init with first state.\n   */\n  public init(url: string, ns: string): void {\n    this._session = 'barba';\n    const index = 0;\n\n    const state: IStateItem = {\n      ns,\n      scroll: {\n        x: window.scrollX,\n        y: window.scrollY,\n      },\n      url,\n    };\n\n    this._states.push(state);\n    this._pointer = index;\n\n    const item: IHistoryItem = {\n      from: this._session,\n      index,\n      states: [...this._states],\n    };\n\n    window.history && window.history.replaceState(item, '', url);\n  }\n\n  public change(\n    url: string,\n    trigger: Trigger,\n    e?: LinkEvent | PopStateEvent\n  ): Trigger {\n    if (e && (e as PopStateEvent).state) {\n      // If popstate, move to existing state\n      // and get back/forward direction.\n      const { state }: { state: IHistoryItem } = e as PopStateEvent;\n      const { index } = state;\n      const diff = this._pointer - index;\n\n      trigger = this._getDirection(diff);\n\n      // Work with previous states\n      this.replace(state.states);\n      this._pointer = index;\n    } else {\n      // Add new state\n      this.add(url, trigger);\n    }\n\n    return trigger;\n  }\n\n  /**\n   * Add a new state.\n   */\n  public add(url: string, trigger: Trigger): void {\n    // If no state, it will be updated later.\n    const ns = 'tmp';\n    const index = this.size;\n    const action = this._getAction(trigger);\n    const state: IStateItem = {\n      ns,\n      scroll: {\n        x: window.scrollX,\n        y: window.scrollY,\n      },\n      url,\n    };\n\n    this._states.push(state);\n    this._pointer = index;\n\n    const item: IHistoryItem = {\n      from: this._session,\n      index,\n      states: [...this._states],\n    };\n\n    switch (action) {\n      case 'push':\n        window.history && window.history.pushState(item, '', url);\n        break;\n      case 'replace':\n        window.history && window.history.replaceState(item, '', url);\n        break;\n      /* istanbul ignore next */\n      default:\n    }\n  }\n\n  /**\n   * Update state.\n   */\n  public update(data: any, i?: number): void {\n    const index = i || this._pointer;\n    const existing = this.get(index);\n    const state: IStateItem = {\n      ...existing,\n      ...data,\n    };\n\n    this.set(index, state);\n  }\n\n  /**\n   * Remove last state.\n   */\n  public remove(i?: number): void {\n    if (i) {\n      this._states.splice(i, 1);\n    } else {\n      this._states.pop();\n    }\n\n    this._pointer--;\n  }\n\n  /**\n   * Delete all states.\n   */\n  public clear(): void {\n    this._states = [];\n    this._pointer = -1;\n  }\n\n  /**\n   * Replace all states.\n   */\n  public replace(newStates: IStateItem[]): void {\n    this._states = newStates;\n  }\n\n  /**\n   * Get state by index.\n   */\n  public get(index: number) {\n    return this._states[index];\n  }\n\n  /**\n   * Set state by index.\n   */\n  public set(i: number, state: IStateItem) {\n    return (this._states[i] = state);\n  }\n\n  /**\n   * Get the current state.\n   */\n  get current(): IStateItem {\n    return this._states[this._pointer];\n  }\n\n  /**\n   * Get the last state (top of the history stack).\n   */\n  get state(): IStateItem {\n    return this._states[this._states.length - 1];\n  }\n\n  /**\n   * Get the previous state.\n   */\n  get previous(): IStateItem | null {\n    return this._pointer < 1 ? null : this._states[this._pointer - 1];\n  }\n\n  /**\n   * Get the state size.\n   */\n  get size(): number {\n    return this._states.length;\n  }\n\n  /**\n   * Get the history action: push vs replace\n   */\n  private _getAction(trigger: Trigger): HistoryAction {\n    let action: HistoryAction = 'push';\n\n    // Manage `data-barba-history` attribute\n    // to get the right action (push vs replace).\n    const el = trigger as HTMLAnchorElement;\n    const attr = `${schemaAttribute.prefix}-${schemaAttribute.history}`;\n\n    if (el.hasAttribute && el.hasAttribute(attr)) {\n      action = el.getAttribute(attr) as HistoryAction;\n    }\n\n    return action;\n  }\n\n  /**\n   * Get the direction of popstate change\n   */\n  private _getDirection(diff: number): Trigger {\n    // Check if \"session switch\"\n    if (Math.abs(diff) > 1) {\n      // Ex 6-0 > 0 -> forward, 0-6 < 0 -> back\n      return diff > 0 ? 'forward' : 'back';\n    } else {\n      if (diff === 0) {\n        return 'popstate';\n      } else {\n        // Ex 6-5 > 0 -> back, 5-6 < 0 -> forward\n        return diff > 0 ? 'back' : 'forward';\n      }\n    }\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 = () => window.location.href;\n\n/**\n * Get location origin.\n */\nexport const getOrigin = () => window.location.origin;\n\n/**\n * Get port based on URL or location.\n */\nexport const getPort = (url: string = window.location.href) => parse(url).port;\n\n/**\n * Get path from URL.\n */\nexport const getPath = (url: string = window.location.href) => 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 and more.\n */\nexport const parse = (url: string): IUrlBase => {\n  // Port\n  let port;\n  const matches = url.match(/:\\d+/);\n\n  if (matches === null) {\n    if (/^http/.test(url)) {\n      port = 80;\n    }\n\n    if (/^https/.test(url)) {\n      port = 443;\n    }\n  } else {\n    const portString = matches[0].substring(1);\n\n    port = parseInt(portString, 10);\n  }\n\n  // Path\n  let path = url.replace(getOrigin(), '');\n  let hash;\n  let query = {};\n\n  // Hash\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  // Query\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    port,\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 = window.location.href) =>\n  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\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: 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        // Chain async hooks promisified\n        chain = chain.then(() => runAsync(hook.fn, hook.ctx)(...args));\n      });\n\n      return chain.catch(error => {\n        this.logger.debug(`Hook error [${name}]`);\n        this.logger.error(error);\n      });\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    this._state.set(href, {\n      action,\n      request,\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    /* istanbul ignore else */\n    if (this.checkHref(href)) {\n      return false;\n    }\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).href);\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() && url.getPort(href) === url.getPort();\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","// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\nexport class BarbaError extends Error {\n  /* istanbul ignore next */\n  constructor(\n    public error: Error,\n    public label = 'Barba error',\n    ...params: any[]\n  ) {\n    // Pass remaining arguments (including vendor specific ones) to parent constructor\n    super(...params);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    /* istanbul ignore else */\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, BarbaError);\n    }\n\n    this.name = 'BarbaError';\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   * \"Page only\" registered transitions.\n   */\n  public page: 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.page;\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\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      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.page = this.all.filter(\n      t => t.leave !== undefined || t.enter !== undefined\n    ) as ITransitionPage[];\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          } else {\n            isValid = false;\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 { BarbaError } from './Error';\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\n      this.logger.debug('Transition error [before/after/once]');\n      this.logger.error(error);\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          // this.logger.debug('Transition error [sync]');\n          // this.logger.error(error);\n          if (this._isTransitionError(error)) {\n            throw new BarbaError(error, 'Transition error [sync]');\n          }\n        }\n      } else {\n        let leaveResult: any = false;\n\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          // this.logger.debug('Transition error [before/after/leave]');\n          // this.logger.error(error);\n          if (this._isTransitionError(error)) {\n            throw new BarbaError(\n              error,\n              'Transition error [before/after/leave]'\n            );\n          }\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          // this.logger.debug('Transition error [before/after/enter]');\n          // this.logger.error(error);\n          if (this._isTransitionError(error)) {\n            throw new BarbaError(\n              error,\n              'Transition error [before/after/enter]'\n            );\n          }\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\n      // If \"custom/specific\" barba error.\n      /* istanbul ignore else */\n      if (error.name && error.name === 'BarbaError') {\n        this.logger.debug(error.label);\n        this.logger.error(error.error);\n\n        throw error;\n      }\n\n      this.logger.debug('Transition error [page]');\n      this.logger.error(error);\n\n      throw 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  private _isTransitionError(error: any) {\n    if (error.message) {\n      // Errors from request\n      return !/Timeout error|Fetch error/.test(error.message);\n    }\n\n    if (error.status) {\n      // Errors from request\n      return false;\n    }\n\n    return true;\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: null,\n  html: '',\n  namespace: '',\n  url: {\n    hash: '',\n    href: '',\n    path: '',\n    port: null,\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 onceData = this.data;\n\n    onceData.trigger = 'barba';\n    onceData.next = onceData.current;\n    onceData.current = { ...this.schemaPage };\n    this.hooks.do('ready', onceData);\n\n    // 9. Finally, do once…\n    this.once(onceData);\n\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    // + state check\n    // + update trigger with direction\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    trigger = this.history.change(href, trigger, e);\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      const transition = this.transitions.get(readyData, {\n        once: true,\n      }) as ITransitionOnce;\n\n      await this.transitions.doOnce({ transition, data: readyData });\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      // TODO: manage / use cases for cancellation\n      // this.logger.debug('Transition cancelled');\n\n      // If transition error and no debug mode, force reload page.\n      /* istanbul ignore else */\n      if (Logger.getLevel() === 0) {\n        this.force(data.current.url.href);\n      }\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","regexpToFunction","parse","tokensToFunction","tokensToRegExp","DEFAULT_DELIMITER","PATH_REGEXP","RegExp","join","str","options","res","tokens","key","index","path","defaultDelimiter","delimiter","whitelist","undefined","pathEscaped","exec","m","escaped","offset","slice","length","prev","capture","group","modifier","k","c","indexOf","push","pattern","prefix","optional","repeat","escapeGroup","escapeString","substr","re","keys","pathname","params","decode","decodeURIComponent","i","split","map","value","matches","Array","flags","data","encode","encodeURIComponent","validate","token","segment","isArray","TypeError","j","test","String","replace","sensitive","strict","start","end","endsWith","route","endToken","isEndDelimited","groups","match","regexpToRegexp","parts","arrayToRegexp","stringToRegexp","schemaAttribute","container","history","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","init","url","_session","state","scroll","x","window","scrollX","y","scrollY","_states","_pointer","item","from","states","replaceState","change","trigger","_getDirection","add","size","action","_getAction","pushState","update","get","set","remove","splice","pop","clear","newStates","attr","hasAttribute","diff","Math","abs","page","next","html","nextDocument","title","ptr","Promise","resolve","requestAnimationFrame","getOrigin","location","origin","getPort","port","portString","substring","parseInt","hash","query","hashIndex","queryIndex","parseQuery","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","chain","_this3","logger","_this4","help","Ignore","ignore","_ignoreAll","paths","_ignoreRegexes","p","checkHref","some","regex","Cache","_state","getRequest","getAction","exists","newTab","event","which","metaKey","ctrlKey","shiftKey","altKey","blank","target","corsDomain","protocol","hostname","corsPort","download","preventSelf","preventAll","Boolean","closest","sameUrl","Prevent","check","suite","tests","run","checkLink","BarbaError","label","captureStackTrace","Store","transitions","type","_rules","position","filters","once","filter","self","t","matching","active","find","valid","reverse","rule","_check","to","activeMatch","transitionType","infos","Object","_addPriority","sort","b","priority","leave","enter","transition","direction","isValid","hasMatch","strRule","objRule","fnName","current","names","_calculatePriority","ruleName","ruleIndex","pow","Transitions","store","doOnce","_running","_doAsyncHook","doPage","sync","_isTransitionError","leaveResult","helpers","values","message","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","onceData","destroy","_unbind","force","assign","go","isRunning","getPath","hasSelf","stopPropagation","preventDefault","readyData","hasOnce","onRequestError","shouldWait","response","prefetch","_this5","addEventListener","removeEventListener","link","_getLinkElement","_this6","_data"],"mappings":"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"}