{"version":3,"file":"single-page-express.mjs","mappings":"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","sources":["webpack://single-page-express/./node_modules/path-to-regexp-express4/index.js","webpack://single-page-express/./node_modules/path-to-regexp/dist/index.js","webpack://single-page-express/./node_modules/topbar/topbar.min.js","webpack://single-page-express/./single-page-express.js","webpack://single-page-express/webpack/bootstrap","webpack://single-page-express/webpack/startup"],"sourcesContent":["/**\n * Expose `pathToRegexp`.\n */\n\nmodule.exports = pathToRegexp;\n\n/**\n * Match matching groups in a regular expression.\n */\nvar MATCHING_GROUP_REGEXP = /\\\\.|\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n/**\n * Normalize the given path string,\n * returning a regular expression.\n *\n * An empty array should be passed,\n * which will contain the placeholder\n * key names. For example \"/user/:id\" will\n * then contain [\"id\"].\n *\n * @param  {String|RegExp|Array} path\n * @param  {Array} keys\n * @param  {Object} options\n * @return {RegExp}\n * @api private\n */\n\nfunction pathToRegexp(path, keys, options) {\n  options = options || {};\n  keys = keys || [];\n  var strict = options.strict;\n  var end = options.end !== false;\n  var flags = options.sensitive ? '' : 'i';\n  var lookahead = options.lookahead !== false;\n  var extraOffset = 0;\n  var keysOffset = keys.length;\n  var i = 0;\n  var name = 0;\n  var pos = 0;\n  var backtrack = '';\n  var m;\n\n  if (path instanceof RegExp) {\n    while (m = MATCHING_GROUP_REGEXP.exec(path.source)) {\n      if (m[0][0] === '\\\\') continue;\n\n      keys.push({\n        name: m[1] || name++,\n        optional: false,\n        offset: m.index\n      });\n    }\n\n    return path;\n  }\n\n  if (Array.isArray(path)) {\n    // Map array parts into regexps and return their source. We also pass\n    // the same keys and options instance into every generation to get\n    // consistent matching groups before we join the sources together.\n    path = path.map(function (value) {\n      return pathToRegexp(value, keys, options).source;\n    });\n\n    return new RegExp(path.join('|'), flags);\n  }\n\n  if (typeof path !== 'string') {\n    throw new TypeError('path must be a string, array of strings, or regular expression');\n  }\n\n  path = path.replace(\n    /\\\\.|(\\/)?(\\.)?:(\\w+)(\\(.*?\\))?(\\*)?(\\?)?|[.*]|\\/\\(/g,\n    function (match, slash, format, key, capture, star, optional, offset) {\n      if (match[0] === '\\\\') {\n        backtrack += match;\n        pos += 2;\n        return match;\n      }\n\n      if (match === '.') {\n        backtrack += '\\\\.';\n        extraOffset += 1;\n        pos += 1;\n        return '\\\\.';\n      }\n\n      if (slash || format) {\n        backtrack = '';\n      } else {\n        backtrack += path.slice(pos, offset);\n      }\n\n      pos = offset + match.length;\n\n      if (match === '*') {\n        extraOffset += 3;\n        return '(.*)';\n      }\n\n      if (match === '/(') {\n        backtrack += '/';\n        extraOffset += 2;\n        return '/(?:';\n      }\n\n      slash = slash || '';\n      format = format ? '\\\\.' : '';\n      optional = optional || '';\n      capture = capture ?\n        capture.replace(/\\\\.|\\*/, function (m) { return m === '*' ? '(.*)' : m; }) :\n        (backtrack ? '((?:(?!/|' + backtrack + ').)+?)' : '([^/' + format + ']+?)');\n\n      keys.push({\n        name: key,\n        optional: !!optional,\n        offset: offset + extraOffset\n      });\n\n      var result = '(?:'\n        + format + slash + capture\n        + (star ? '((?:[/' + format + '].+?)?)' : '')\n        + ')'\n        + optional;\n\n      extraOffset += result.length - match.length;\n\n      return result;\n    });\n\n  // This is a workaround for handling unnamed matching groups.\n  while (m = MATCHING_GROUP_REGEXP.exec(path)) {\n    if (m[0][0] === '\\\\') continue;\n\n    if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) {\n      keys.splice(keysOffset + i, 0, {\n        name: name++, // Unnamed matching groups must be consistently linear.\n        optional: false,\n        offset: m.index\n      });\n    }\n\n    i++;\n  }\n\n  path += strict ? '' : path[path.length - 1] === '/' ? '?' : '/?';\n\n  // If the path is non-ending, match until the end or a slash.\n  if (end) {\n    path += '$';\n  } else if (path[path.length - 1] !== '/') {\n    path += lookahead ? '(?=/|$)' : '(?:/|$)';\n  }\n\n  return new RegExp('^' + path, flags);\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TokenData = void 0;\nexports.parse = parse;\nexports.compile = compile;\nexports.match = match;\nexports.pathToRegexp = pathToRegexp;\nexports.stringify = stringify;\nconst DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value) => value;\nconst ID_START = /^[$_\\p{ID_Start}]$/u;\nconst ID_CONTINUE = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\nconst DEBUG_URL = \"https://git.new/pathToRegexpError\";\nconst SIMPLE_TOKENS = {\n    // Groups.\n    \"{\": \"{\",\n    \"}\": \"}\",\n    // Reserved.\n    \"(\": \"(\",\n    \")\": \")\",\n    \"[\": \"[\",\n    \"]\": \"]\",\n    \"+\": \"+\",\n    \"?\": \"?\",\n    \"!\": \"!\",\n};\n/**\n * Escape text for stringify to path.\n */\nfunction escapeText(str) {\n    return str.replace(/[{}()\\[\\]+?!:*]/g, \"\\\\$&\");\n}\n/**\n * Escape a regular expression string.\n */\nfunction escape(str) {\n    return str.replace(/[.+*?^${}()[\\]|/\\\\]/g, \"\\\\$&\");\n}\n/**\n * Tokenize input string.\n */\nfunction* lexer(str) {\n    const chars = [...str];\n    let i = 0;\n    function name() {\n        let value = \"\";\n        if (ID_START.test(chars[++i])) {\n            value += chars[i];\n            while (ID_CONTINUE.test(chars[++i])) {\n                value += chars[i];\n            }\n        }\n        else if (chars[i] === '\"') {\n            let pos = i;\n            while (i < chars.length) {\n                if (chars[++i] === '\"') {\n                    i++;\n                    pos = 0;\n                    break;\n                }\n                if (chars[i] === \"\\\\\") {\n                    value += chars[++i];\n                }\n                else {\n                    value += chars[i];\n                }\n            }\n            if (pos) {\n                throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`);\n            }\n        }\n        if (!value) {\n            throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`);\n        }\n        return value;\n    }\n    while (i < chars.length) {\n        const value = chars[i];\n        const type = SIMPLE_TOKENS[value];\n        if (type) {\n            yield { type, index: i++, value };\n        }\n        else if (value === \"\\\\\") {\n            yield { type: \"ESCAPED\", index: i++, value: chars[i++] };\n        }\n        else if (value === \":\") {\n            const value = name();\n            yield { type: \"PARAM\", index: i, value };\n        }\n        else if (value === \"*\") {\n            const value = name();\n            yield { type: \"WILDCARD\", index: i, value };\n        }\n        else {\n            yield { type: \"CHAR\", index: i, value: chars[i++] };\n        }\n    }\n    return { type: \"END\", index: i, value: \"\" };\n}\nclass Iter {\n    constructor(tokens) {\n        this.tokens = tokens;\n    }\n    peek() {\n        if (!this._peek) {\n            const next = this.tokens.next();\n            this._peek = next.value;\n        }\n        return this._peek;\n    }\n    tryConsume(type) {\n        const token = this.peek();\n        if (token.type !== type)\n            return;\n        this._peek = undefined; // Reset after consumed.\n        return token.value;\n    }\n    consume(type) {\n        const value = this.tryConsume(type);\n        if (value !== undefined)\n            return value;\n        const { type: nextType, index } = this.peek();\n        throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: ${DEBUG_URL}`);\n    }\n    text() {\n        let result = \"\";\n        let value;\n        while ((value = this.tryConsume(\"CHAR\") || this.tryConsume(\"ESCAPED\"))) {\n            result += value;\n        }\n        return result;\n    }\n}\n/**\n * Tokenized path instance.\n */\nclass TokenData {\n    constructor(tokens) {\n        this.tokens = tokens;\n    }\n}\nexports.TokenData = TokenData;\n/**\n * Parse a string for the raw tokens.\n */\nfunction parse(str, options = {}) {\n    const { encodePath = NOOP_VALUE } = options;\n    const it = new Iter(lexer(str));\n    function consume(endType) {\n        const tokens = [];\n        while (true) {\n            const path = it.text();\n            if (path)\n                tokens.push({ type: \"text\", value: encodePath(path) });\n            const param = it.tryConsume(\"PARAM\");\n            if (param) {\n                tokens.push({\n                    type: \"param\",\n                    name: param,\n                });\n                continue;\n            }\n            const wildcard = it.tryConsume(\"WILDCARD\");\n            if (wildcard) {\n                tokens.push({\n                    type: \"wildcard\",\n                    name: wildcard,\n                });\n                continue;\n            }\n            const open = it.tryConsume(\"{\");\n            if (open) {\n                tokens.push({\n                    type: \"group\",\n                    tokens: consume(\"}\"),\n                });\n                continue;\n            }\n            it.consume(endType);\n            return tokens;\n        }\n    }\n    const tokens = consume(\"END\");\n    return new TokenData(tokens);\n}\n/**\n * Compile a string to a template function for the path.\n */\nfunction compile(path, options = {}) {\n    const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n    const data = path instanceof TokenData ? path : parse(path, options);\n    const fn = tokensToFunction(data.tokens, delimiter, encode);\n    return function path(data = {}) {\n        const [path, ...missing] = fn(data);\n        if (missing.length) {\n            throw new TypeError(`Missing parameters: ${missing.join(\", \")}`);\n        }\n        return path;\n    };\n}\nfunction tokensToFunction(tokens, delimiter, encode) {\n    const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode));\n    return (data) => {\n        const result = [\"\"];\n        for (const encoder of encoders) {\n            const [value, ...extras] = encoder(data);\n            result[0] += value;\n            result.push(...extras);\n        }\n        return result;\n    };\n}\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(token, delimiter, encode) {\n    if (token.type === \"text\")\n        return () => [token.value];\n    if (token.type === \"group\") {\n        const fn = tokensToFunction(token.tokens, delimiter, encode);\n        return (data) => {\n            const [value, ...missing] = fn(data);\n            if (!missing.length)\n                return [value];\n            return [\"\"];\n        };\n    }\n    const encodeValue = encode || NOOP_VALUE;\n    if (token.type === \"wildcard\" && encode !== false) {\n        return (data) => {\n            const value = data[token.name];\n            if (value == null)\n                return [\"\", token.name];\n            if (!Array.isArray(value) || value.length === 0) {\n                throw new TypeError(`Expected \"${token.name}\" to be a non-empty array`);\n            }\n            return [\n                value\n                    .map((value, index) => {\n                    if (typeof value !== \"string\") {\n                        throw new TypeError(`Expected \"${token.name}/${index}\" to be a string`);\n                    }\n                    return encodeValue(value);\n                })\n                    .join(delimiter),\n            ];\n        };\n    }\n    return (data) => {\n        const value = data[token.name];\n        if (value == null)\n            return [\"\", token.name];\n        if (typeof value !== \"string\") {\n            throw new TypeError(`Expected \"${token.name}\" to be a string`);\n        }\n        return [encodeValue(value)];\n    };\n}\n/**\n * Transform a path into a match function.\n */\nfunction match(path, options = {}) {\n    const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n    const { regexp, keys } = pathToRegexp(path, options);\n    const decoders = keys.map((key) => {\n        if (decode === false)\n            return NOOP_VALUE;\n        if (key.type === \"param\")\n            return decode;\n        return (value) => value.split(delimiter).map(decode);\n    });\n    return function match(input) {\n        const m = regexp.exec(input);\n        if (!m)\n            return false;\n        const path = m[0];\n        const params = Object.create(null);\n        for (let i = 1; i < m.length; i++) {\n            if (m[i] === undefined)\n                continue;\n            const key = keys[i - 1];\n            const decoder = decoders[i - 1];\n            params[key.name] = decoder(m[i]);\n        }\n        return { path, params };\n    };\n}\nfunction pathToRegexp(path, options = {}) {\n    const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true, } = options;\n    const keys = [];\n    const sources = [];\n    const flags = sensitive ? \"\" : \"i\";\n    const paths = Array.isArray(path) ? path : [path];\n    const items = paths.map((path) => path instanceof TokenData ? path : parse(path, options));\n    for (const { tokens } of items) {\n        for (const seq of flatten(tokens, 0, [])) {\n            const regexp = sequenceToRegExp(seq, delimiter, keys);\n            sources.push(regexp);\n        }\n    }\n    let pattern = `^(?:${sources.join(\"|\")})`;\n    if (trailing)\n        pattern += `(?:${escape(delimiter)}$)?`;\n    pattern += end ? \"$\" : `(?=${escape(delimiter)}|$)`;\n    const regexp = new RegExp(pattern, flags);\n    return { regexp, keys };\n}\n/**\n * Generate a flat list of sequence tokens from the given tokens.\n */\nfunction* flatten(tokens, index, init) {\n    if (index === tokens.length) {\n        return yield init;\n    }\n    const token = tokens[index];\n    if (token.type === \"group\") {\n        const fork = init.slice();\n        for (const seq of flatten(token.tokens, 0, fork)) {\n            yield* flatten(tokens, index + 1, seq);\n        }\n    }\n    else {\n        init.push(token);\n    }\n    yield* flatten(tokens, index + 1, init);\n}\n/**\n * Transform a flat sequence of tokens into a regular expression.\n */\nfunction sequenceToRegExp(tokens, delimiter, keys) {\n    let result = \"\";\n    let backtrack = \"\";\n    let isSafeSegmentParam = true;\n    for (let i = 0; i < tokens.length; i++) {\n        const token = tokens[i];\n        if (token.type === \"text\") {\n            result += escape(token.value);\n            backtrack += token.value;\n            isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter));\n            continue;\n        }\n        if (token.type === \"param\" || token.type === \"wildcard\") {\n            if (!isSafeSegmentParam && !backtrack) {\n                throw new TypeError(`Missing text after \"${token.name}\": ${DEBUG_URL}`);\n            }\n            if (token.type === \"param\") {\n                result += `(${negate(delimiter, isSafeSegmentParam ? \"\" : backtrack)}+)`;\n            }\n            else {\n                result += `([\\\\s\\\\S]+)`;\n            }\n            keys.push(token);\n            backtrack = \"\";\n            isSafeSegmentParam = false;\n            continue;\n        }\n    }\n    return result;\n}\nfunction negate(delimiter, backtrack) {\n    if (backtrack.length < 2) {\n        if (delimiter.length < 2)\n            return `[^${escape(delimiter + backtrack)}]`;\n        return `(?:(?!${escape(delimiter)})[^${escape(backtrack)}])`;\n    }\n    if (delimiter.length < 2) {\n        return `(?:(?!${escape(backtrack)})[^${escape(delimiter)}])`;\n    }\n    return `(?:(?!${escape(backtrack)}|${escape(delimiter)})[\\\\s\\\\S])`;\n}\n/**\n * Stringify token data into a path string.\n */\nfunction stringify(data) {\n    return data.tokens\n        .map(function stringifyToken(token, index, tokens) {\n        if (token.type === \"text\")\n            return escapeText(token.value);\n        if (token.type === \"group\") {\n            return `{${token.tokens.map(stringifyToken).join(\"\")}}`;\n        }\n        const isSafe = isNameSafe(token.name) && isNextNameSafe(tokens[index + 1]);\n        const key = isSafe ? token.name : JSON.stringify(token.name);\n        if (token.type === \"param\")\n            return `:${key}`;\n        if (token.type === \"wildcard\")\n            return `*${key}`;\n        throw new TypeError(`Unexpected token: ${token}`);\n    })\n        .join(\"\");\n}\nfunction isNameSafe(name) {\n    const [first, ...rest] = name;\n    if (!ID_START.test(first))\n        return false;\n    return rest.every((char) => ID_CONTINUE.test(char));\n}\nfunction isNextNameSafe(token) {\n    if ((token === null || token === void 0 ? void 0 : token.type) !== \"text\")\n        return true;\n    return !ID_CONTINUE.test(token.value[0]);\n}\n//# sourceMappingURL=index.js.map","/**\n * @license MIT\n * topbar 3.0.0\n * http://buunguyen.github.io/topbar\n * Copyright (c) 2024 Buu Nguyen\n */\n(function(window,document){\"use strict\";function repaint(){canvas.width=window.innerWidth,canvas.height=5*options.barThickness;var ctx=canvas.getContext(\"2d\");ctx.shadowBlur=options.shadowBlur,ctx.shadowColor=options.shadowColor;var stop,lineGradient=ctx.createLinearGradient(0,0,canvas.width,0);for(stop in options.barColors)lineGradient.addColorStop(stop,options.barColors[stop]);ctx.lineWidth=options.barThickness,ctx.beginPath(),ctx.moveTo(0,options.barThickness/2),ctx.lineTo(Math.ceil(currentProgress*canvas.width),options.barThickness/2),ctx.strokeStyle=lineGradient,ctx.stroke()}var canvas,currentProgress,showing,progressTimerId=null,fadeTimerId=null,delayTimerId=null,options={autoRun:!0,barThickness:3,barColors:{0:\"rgba(26,  188, 156, .9)\",\".25\":\"rgba(52,  152, 219, .9)\",\".50\":\"rgba(241, 196, 15,  .9)\",\".75\":\"rgba(230, 126, 34,  .9)\",\"1.0\":\"rgba(211, 84,  0,   .9)\"},shadowBlur:10,shadowColor:\"rgba(0,   0,   0,   .6)\",className:null},topbar={config:function(opts){for(var key in opts)options.hasOwnProperty(key)&&(options[key]=opts[key])},show:function(handler){var type,elem;showing||(handler?delayTimerId=delayTimerId||setTimeout(()=>topbar.show(),handler):(showing=!0,null!==fadeTimerId&&window.cancelAnimationFrame(fadeTimerId),canvas||((elem=(canvas=document.createElement(\"canvas\")).style).position=\"fixed\",elem.top=elem.left=elem.right=elem.margin=elem.padding=0,elem.zIndex=100001,elem.display=\"none\",options.className&&canvas.classList.add(options.className),type=\"resize\",handler=repaint,(elem=window).addEventListener?elem.addEventListener(type,handler,!1):elem.attachEvent?elem.attachEvent(\"on\"+type,handler):elem[\"on\"+type]=handler),canvas.parentElement||document.body.appendChild(canvas),canvas.style.opacity=1,canvas.style.display=\"block\",topbar.progress(0),options.autoRun&&function loop(){progressTimerId=window.requestAnimationFrame(loop),topbar.progress(\"+\"+.05*Math.pow(1-Math.sqrt(currentProgress),2))}()))},progress:function(to){return void 0===to||(\"string\"==typeof to&&(to=(0<=to.indexOf(\"+\")||0<=to.indexOf(\"-\")?currentProgress:0)+parseFloat(to)),currentProgress=1<to?1:to,repaint()),currentProgress},hide:function(){clearTimeout(delayTimerId),delayTimerId=null,showing&&(showing=!1,null!=progressTimerId&&(window.cancelAnimationFrame(progressTimerId),progressTimerId=null),function loop(){return 1<=topbar.progress(\"+.1\")&&(canvas.style.opacity-=.05,canvas.style.opacity<=.05)?(canvas.style.display=\"none\",void(fadeTimerId=null)):void(fadeTimerId=window.requestAnimationFrame(loop))}())}};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=topbar:\"function\"==typeof define&&define.amd?define(function(){return topbar}):this.topbar=topbar}).call(this,window,document);","const pathToRegexpMatch = require('path-to-regexp').match // route parser for express 5+\nconst pathToRegexpMatchExpress4 = require('path-to-regexp-express4') // route parser for express 4; express 3 and below are not supported\nconst parser = new window.DOMParser() // used by the default render method\n\nfunction singlePageExpress (options) {\n  // #region constructor params and top-level variable declarations\n  const app = {} // instance of the router app\n  app.expressVersion = options.expressVersion // which version of the express api to target\n  if (app.expressVersion !== 5 && (parseInt(app.expressVersion) <= 4)) app.expressVersion = 4 // permit express 4 and 5+\n  if (!app.expressVersion) app.expressVersion = 5 // default to express 5\n  app.appVars = {} // for app.set() / app.get()\n  app.templatingEngine = options.templatingEngine // which templating engine to use\n  app.templates = options.templates // templates to render\n  if (!app.templates) console.warn('single-page-express: no templates are loaded; as such the default render method will just print the template name and model to the console.')\n  app.routes = {} // list of functions to execute when trying to see if this route matches one of the known patterns indexed by original route method#string\n  app.routeCallbacks = {} // list of functions to execute when the route is invoked\n  app.defaultTarget = options.defaultTarget // which element to replace by default\n  app.defaultTargets = app.defaultTarget ? [app.defaultTarget].concat(options.defaultTargets || []) : options.defaultTargets || [] // which elements to replace by default\n  if (!app.defaultTargets.length) app.defaultTargets = ['body'] // body tag is the default target if none is set\n  app.beforeEveryRender = options.beforeEveryRender // function to execute before every DOM update if using the default render method\n  app.updateDelay = options.updateDelay // how long to delay after executing app.beforeEveryRender or this.beforeRender before performing the DOM update\n  app.afterEveryRender = options.afterEveryRender // function to execute after every DOM update if using the default render method\n  app.postRenderCallbacks = options.postRenderCallbacks || {} // list of callback functions to execute after a render event occurs\n  app.topbarEnabled = !options.disableTopbar // whether to use topbar https://buunguyen.github.io/topbar/\n  app.topBarRoutes = options.topBarRoutes // which routes to use the topbar on; defaults to all if this option is not supplied\n  if (app.topbarEnabled || app.topBarRoutes) {\n    app.topbar = require('topbar')\n    app.topbar.config(options.topbarConfig || {\n      // default options\n      barColors: {\n        0: 'rgba(0,  0, 0, .7)',\n        '1.0': 'rgba(0, 0,  0,  .7)'\n      }\n    })\n  }\n  app.alwaysScrollTop = options.alwaysScrollTop // always scroll to the top of the page after every render\n  app.urls = {} // list of URLs that have been visited and metadata about them\n  let currentViewTransition // a global reference to the current view transition so we can know when it has ended\n\n  // taken from https://expressjs.com/en/api.html#routing-methods\n  const httpVerbs = [\n    'checkout',\n    'copy',\n    'delete',\n    'get',\n    'head',\n    'lock',\n    'merge',\n    'mkactivity',\n    'mkcol',\n    'move',\n    'm-search',\n    'notify',\n    'options',\n    'patch',\n    'post',\n    'purge',\n    'put',\n    'report',\n    'search',\n    'subscribe',\n    'trace',\n    'unlock',\n    'unsubscribe'\n  ]\n\n  // #endregion\n\n  // #region express app\n\n  // express app object settings\n  app.appVars['case sensitive routing'] = false\n  app.appVars.env = 'production'\n  app.appVars['query parser'] = true\n  app.appVars['strict routing'] = false\n  app.appVars['subdomain offset'] = 2\n  // the other settings are not supported\n\n  // express app object properties\n  app.locals = {} // stubbed out\n  app.mountpath = '' // stubbed out\n\n  // express app object events\n  app.mount = () => {} // stubbed out\n\n  // registers a route and handles middleware\n  function routeHandler (method, middleware, route, callback) {\n    let callbackWithMiddlewareExecutingFirst = middleware\n    if (callback) callbackWithMiddlewareExecutingFirst = (req, res) => middleware(req, res, () => callback(req, res))\n    registerRoute(method, route, callbackWithMiddlewareExecutingFirst)\n  }\n\n  // express app object methods\n  app.all = (middleware, route, callback) => { routeHandler('all', middleware, route, callback) }\n  app.delete = (middleware, route, callback) => { routeHandler('delete', middleware, route, callback) }\n  app.disable = (name) => { app.appVars[name] = false }\n  app.disabled = (name) => { return !app.appVars[name] }\n  app.enable = (name) => { app.appVars[name] = true }\n  app.enabled = (name) => { return !!app.appVars[name] }\n  app.engine = () => {} // stubbed out\n  app.get = (middleware, name, callback) => { // in the express docs, this method is overloaded and can be used for more than one thing based on the number of arguments\n    if (!callback) return app.appVars[name]\n    else return routeHandler('get', middleware, name, callback)\n  }\n  app.listen = () => {} // stubbed out\n  httpVerbs.forEach(method => { // app.METHOD\n    // some method names are overloaded and can be used for more than one thing based on the number of arguments\n    if (!app[method]) app[method] = (middleware, route, callback) => routeHandler(method, middleware, route, callback)\n  })\n  app.param = () => {} // stubbed out\n  app.path = () => {} // stubbed out\n  app.post = (middleware, route, callback) => { routeHandler('post', middleware, route, callback) }\n  app.put = (middleware, route, callback) => { routeHandler('put', middleware, route, callback) }\n  // app.render will be defined below\n  app.route = (route) => {\n    const ret = { route }\n    httpVerbs.forEach(method => { ret[method] = (middleware, callback) => { routeHandler(method, middleware, route, callback) } })\n    return ret\n  }\n  app.set = (name, val) => { app.appVars[name] = val }\n  app.use = () => {} // stubbed out\n  app.triggerRoute = handleRoute // single-page-express-exclusive method\n\n  // #endregion\n\n  // #region request object\n\n  const defaultReq = {} // this is later extended during a \"request\" cycle\n\n  // request object properties\n  defaultReq.app = app\n  defaultReq.baseUrl = '' // stubbed out\n  // req.body is defined at runtime below\n  // req.cookies is defined at runtime below\n  defaultReq.fresh = true // stubbed out\n  defaultReq.hostname = window.location.hostname\n  defaultReq.ip = '127.0.0.1' // stubbed out\n  defaultReq.ips = [] // stubbed out\n  // req.method is defined at runtime below\n  // req.originalUrl is defined at runtime below\n  // req.params is defined at runtime below\n  // req.path is defined at runtime below\n  // req.protocol is defined at runtime below\n  // req.query is defined at runtime below\n  // req.res is defined below because res is not initialized yet\n  // req.route is defined at runtime below\n  // req.secure is defined at runtime below\n  defaultReq.signedCookies = {} // stubbed out\n  defaultReq.stale = false // stubbed out\n  // req.subdomains is defined at runtime below\n  defaultReq.xhr = true // stubbed out\n\n  // request object methods\n  defaultReq.accepts = () => {} // stubbed out\n  defaultReq.acceptsCharsets = () => {} // stubbed out\n  defaultReq.acceptsEncodings = () => {} // stubbed out\n  defaultReq.acceptsLanguages = () => {} // stubbed out\n  defaultReq.get = () => {} // stubbed out\n  defaultReq.is = () => {} // stubbed out\n  defaultReq.param = () => {} // stubbed out\n  defaultReq.range = () => {} // stubbed out\n\n  // new properties\n  defaultReq.singlePageExpress = true\n\n  // #endregion\n\n  // #region response object\n\n  const res = {}\n\n  // response object properties\n  res.app = app\n  res.headersSent = false // stubbed out\n  res.locals = {} // stubbed out\n  // res.req defined at runtime below\n\n  // response object methods\n  res.append = () => { return res } // stubbed out\n  res.attachment = () => { return res } // stubbed out\n  res.cookie = (name, value, options = {}) => {\n    const {\n      domain,\n      encode = encodeURIComponent,\n      expires,\n      httpOnly,\n      maxAge,\n      path = '/',\n      partitioned,\n      priority,\n      secure,\n      signed,\n      sameSite\n    } = options\n    let cookieString = `${encode(name)}=${encode(value)}`\n    if (expires instanceof Date) cookieString += `; expires=${expires.toUTCString()}`\n    if (maxAge) cookieString += `; max-age=${maxAge}`\n    if (domain) cookieString += `; domain=${domain}`\n    if (path) cookieString += `; path=${path}`\n    if (secure) cookieString += '; secure'\n    if (httpOnly) cookieString += '; HttpOnly'\n    if (sameSite) cookieString += `; SameSite=${sameSite}`\n    if (partitioned) cookieString += '; Partitioned'\n    if (priority) cookieString += `; Priority=${priority}`\n    if (signed) {\n      if (app.appVars.env === 'development') console.warn('Signed cookies are not supported in the browser context.')\n    }\n    document.cookie = cookieString\n  }\n  res.clearCookie = (name, options = {}) => {\n    const {\n      domain,\n      encode = encodeURIComponent,\n      httpOnly,\n      path = '/',\n      partitioned,\n      priority,\n      secure,\n      signed,\n      sameSite\n    } = options\n    const pastDate = new Date(0).toUTCString() // set the cookie's expiration date to a past date\n    let cookieString = `${encode(name)}=; expires=${pastDate}`\n    if (domain) cookieString += `; domain=${domain}`\n    if (path) cookieString += `; path=${path}`\n    if (secure) cookieString += '; secure'\n    if (httpOnly) cookieString += '; HttpOnly'\n    if (sameSite) cookieString += `; SameSite=${sameSite}`\n    if (partitioned) cookieString += '; Partitioned'\n    if (priority) cookieString += `; Priority=${priority}`\n    if (signed) console.warn('Signed cookies are not supported in the frontend.')\n    document.cookie = cookieString\n  }\n  res.download = () => { return res } // stubbed out\n  res.end = () => { return res } // stubbed out\n  res.format = () => { return res } // stubbed out\n  res.get = () => { return res } // stubbed out\n  res.json = (json) => {\n    console.log(json)\n    return res\n  }\n  res.jsonp = () => { return res } // stubbed out\n  res.links = () => { return res } // stubbed out\n  res.location = () => { return res } // stubbed out\n  res.redirect = (status, route) => {\n    if (!route) route = status\n    handleRoute({ route })\n    return res\n  }\n  // res.render is defined below\n  res.send = () => { return res } // stubbed out\n  res.sendFile = () => { return res } // stubbed out\n  res.sendStatus = () => { return res } // stubbed out\n  res.set = () => { return res } // stubbed out\n  res.status = () => { return res } // stubbed out\n  res.type = () => { return res } // stubbed out\n  res.vary = () => { return res } // stubbed out\n  defaultReq.res = res // apply the response object to the default request object\n\n  // #endregion\n\n  // #region single-page-express methods\n\n  // add a route to the route list\n  function registerRoute (method, route, callback) {\n    // if the method is 'all' then we need to call this function for every method\n    if (method === 'all') {\n      httpVerbs.forEach((middleware, method) => { routeHandler(method, middleware, route, callback) })\n      return\n    }\n\n    // if the function receives one argument, then route is the callback, and the actual route needs to be defined from `this`\n    if (typeof route !== 'string' && typeof route === 'function') {\n      callback = route\n      route = this.route\n    }\n\n    // flatten if case insensitivity is enabled\n    if (app.appVars['case sensitive routing']) route = route.toLowerCase()\n\n    // remove trailing `/` if it exists if strict routing is disabled\n    if (!app.appVars['strict routing'] && route.endsWith('/') && route !== '/') route = route.slice(0, -1)\n\n    // check if route is already registered\n    if (!(route in app.routes)) {\n      // determine which route matching method to use\n      let matcher\n      if (app.expressVersion === 5) {\n        try {\n          matcher = pathToRegexpMatch(route) // the newer version of path-to-regexp returns a matching function\n        } catch (error) {\n          console.error(`single-page-express: failed to register the route '${route}' because it could not be parsed.`)\n          if (route.includes('*')) console.error('single-page-express: routes with \\'*\\' in them should be written like \\'*all\\' instead in Express 5+ syntax.')\n          console.error(error)\n        }\n      } else matcher = pathToRegexpMatchExpress4(route) // the older version of path-to-regexp returns a matching regular expression\n\n      // register the route\n      app.routes[`${method}#${route}`] = {\n        method,\n        route,\n        matcher\n      }\n      app.routeCallbacks[`${method}#${route}`] = callback\n    }\n  }\n\n  // if it's a registered route, fire its event; if it's not, let the browser handle it natively\n  async function handleRoute (params) {\n    let route = params.route\n    const method = params.method ? ('' + params.method).toLowerCase() : 'get' // http method from the request\n\n    // check if it's a registered route\n    let match\n    let routeWithoutQuery = route.split('?')[0] // TODO: handle links without href attributes\n\n    // flatten if case insensitivity is enabled\n    if (app.appVars['case sensitive routing']) routeWithoutQuery = routeWithoutQuery.toLowerCase()\n\n    // remove trailing `/` if it exists and if strict routing is disabled\n    if (!app.appVars['strict routing'] && routeWithoutQuery.length > 1 && routeWithoutQuery.endsWith('/')) routeWithoutQuery = routeWithoutQuery.slice(0, -1)\n\n    // loop through route matcher functions to see if any of them match this url pattern\n    for (const registeredRoute in app.routes) {\n      const potentialMatch = app.routes[registeredRoute]\n      if (potentialMatch.method !== method) continue // the registered route's declared method must match the request method\n      if (app.expressVersion === 5) potentialMatch.data = potentialMatch.matcher(routeWithoutQuery) // the newer version of path-to-regexp returns a matching function\n      else potentialMatch.data = potentialMatch.matcher.exec(routeWithoutQuery) // the older version of path-to-regexp returns a matching regular expression\n      if (potentialMatch.data) {\n        match = potentialMatch\n        break\n      }\n    }\n\n    if (match) {\n      // it's a registered route, so hijack the event\n      params.event?.preventDefault()\n\n      // show top bar\n      if ((app.topbarEnabled && !app.topBarRoutes) || app.topBarRoutes?.includes?.(match.route)) app.topbar.show()\n\n      // save scroll position of current page before moving to the next page\n      app.urls[window.location.pathname] = {\n        scrollX: window.scrollX,\n        scrollY: window.scrollY,\n        scrollingChildContainers: {}\n      }\n\n      // save scroll position of child containers that scroll too, so long as they have ids\n      for (const scrollingChildContainer of document.querySelectorAll('[id]')) {\n        if (scrollingChildContainer.scrollHeight > scrollingChildContainer.clientHeight || scrollingChildContainer.scrollWidth > scrollingChildContainer.clientWidth) {\n          app.urls[window.location.pathname].scrollingChildContainers[scrollingChildContainer.id] = {\n            scrollX: scrollingChildContainer.scrollLeft,\n            scrollY: scrollingChildContainer.scrollTop\n          }\n        }\n      }\n\n      // alter browser history state\n      if (method === 'get' && !params.skipHistory) {\n        const state = { index: historyStack.length }\n        historyStack.push(state)\n        currentIndex = historyStack.length - 1\n        window.history.pushState(state, '', route)\n      }\n\n      // build request object\n      const req = { ...defaultReq }\n\n      // req.body\n      if (params.parseBody || params.body) {\n        if (params.event?.target) { // it's possible to submit the form using app.triggerRoute, in which case there won't be form data\n          req.body = Object.fromEntries(new FormData(params.event.target).entries()) // convert the form entries into key/value pairs\n          if (params.event.submitter) req.body[params.event.submitter.name] = params.event.submitter.value // add which button was clicked to req.body\n        } else if (params.body) req.body = params.body // use manually submitted request body if it is provided instead\n        else req.body = {} // otherwise set req.body to an empty object\n        if (app.expressVersion > 4 && req.body && Object.keys(req.body).length === 0) req.body = undefined // if req.body is an empty object and the express version is 5+ then set req.body to undefined to match the express api\n      }\n\n      // req.cookies\n      const cookies = document.cookie.split('; ')\n      req.cookies = {}\n      cookies.forEach(cookie => {\n        const [name, value] = cookie.split('=')\n        req.cookies[decodeURIComponent(name)] = decodeURIComponent(value)\n      })\n\n      req.method = method\n      req.originalUrl = route\n\n      // req.params\n      if (app.expressVersion === 5) req.params = match.data.params // the newer version of path-to-regexp just gives us the params\n      else {\n        // the older version of path-to-regexp does not map the params to key/value pairs, so we have to do it ourselves\n        req.params = {}\n        const keys = match.route.match(/:([^/]+)/g)?.map(key => key.substring(1)) // extract the keys from the route pattern, if any exist\n        if (keys) {\n          const vals = match.matcher.exec(match.data[0]) // use the matcher to extract values from the data\n          if (vals) for (const [index, key] of keys.entries()) req.params[key] = vals[index + 1] // make an object with key/value pairs, if any params exist\n        }\n      }\n\n      // req.path and req.protocol\n      const parsedUrl = new URL(window.location.href)\n      req.path = parsedUrl.pathname\n      req.protocol = parsedUrl.protocol\n\n      // req.query\n      if (app.appVars['query parser']) {\n        const parts = route.split('?') // split the route by question marks\n        route = parts[0] // the first part is the route\n        const queryString = parts.slice(1).join(', ') // all the remaining parts are the query params\n        req.query = Object.fromEntries(new URLSearchParams(queryString).entries()) // convert the query string into key/value pairs\n      }\n\n      req.route = match.data\n      req.secure = req.protocol === 'https' || req.protocol === 'https:'\n\n      // req.subdomains\n      const parts = req.hostname.split('.')\n      const subdomains = parts.slice(0, -parseInt(app.appVars['subdomain offset']))\n      req.subdomains = subdomains.reverse()\n\n      // attach req object to res\n      res.req = req\n\n      // pass along whether the back button or forward button was pressed\n      req.backButtonPressed = params.backButtonPressed\n      req.forwardButtonPressed = params.forwardButtonPressed\n\n      // add back/forward button classes to the html element\n      const htmlEl = document.querySelector('html')\n      if (params.backButtonPressed) {\n        htmlEl.classList.add('backButtonPressed')\n        htmlEl.classList.remove('forwardButtonPressed')\n      } else if (params.forwardButtonPressed) {\n        htmlEl.classList.remove('backButtonPressed')\n        htmlEl.classList.add('forwardButtonPressed')\n      } else {\n        htmlEl.classList.remove('backButtonPressed')\n        htmlEl.classList.remove('forwardButtonPressed')\n      }\n\n      // fire the event\n      await app.routeCallbacks[`${method}#${match.route}`](req, res)\n\n      // scroll the page appropriately\n      const scrollPage = () => {\n        // if this page has never been visited before or res.resetScroll or app.alwaysScrollTop is present\n        if (!app.urls[route] || res.resetScroll || app.alwaysScrollTop) {\n          window.scrollTo(0, 0) // scroll to the top\n          if (res.resetScroll) {\n            delete app.urls[route].scrollX\n            delete app.urls[route].scrollY\n            delete app.urls[route].scrollingChildContainers\n          }\n        } else if (app.urls[route]) { // if this page has been visited before\n          window.scrollTo(app.urls[route].scrollX || 0, app.urls[route].scrollY || 0) // restore the previous scroll position\n          // restore the position of scrollable containers\n          for (const scrollingChildContainer in app.urls[route].scrollingChildContainers) {\n            if (document.getElementById(scrollingChildContainer)) {\n              document.getElementById(scrollingChildContainer).scrollTo(app.urls[route].scrollingChildContainers[scrollingChildContainer].scrollX || 0, app.urls[route].scrollingChildContainers[scrollingChildContainer].scrollY || 0)\n            }\n          }\n        }\n        res.resetScroll = null // clear this var so it does not persist on the next request; allow routes to opt-in\n\n        // hide top bar (loading completed)\n        if ((app.topbarEnabled && !app.topBarRoutes) || app.topBarRoutes?.includes?.(match.route)) app.topbar.hide()\n      }\n      if (currentViewTransition) document.addEventListener('animationend', scrollPage) // scroll the page after view transitions or css animations are done\n      else window.setTimeout(scrollPage, parseInt(res.updateDelay) || parseInt(app.updateDelay) || 0) // scroll page after user-defined animation finishes; delay the scroll until after the render by using the same delay mechanism as the default render method\n    }\n  }\n\n  // app.render implements the express api on the surface, then prescribes some default behavior specific to this module, provides a default method for dom manipulation, and allows for a user to override the default dom manipulation behaviors\n  app.render = function (template, model, callback) {\n    model = model || {}\n\n    // clear all `this` variables so they do not persist but store local copies for this method invocation's use\n    const thisTitle = this.title\n    const thisBeforeRender = this.beforeRender\n    const thisTarget = this.target\n    const thisAppendTargets = this.appendTargets\n    const thisFocus = this.focus\n    const thisRemoveMetaTags = this.removeMetaTags\n    const thisRemoveStyleTags = this.removeStyleTags\n    const thisRemoveLinkTags = this.removeLinkTags\n    const thisRemoveScriptTags = this.removeScriptTags\n    const thisRemoveBaseTags = this.removeBaseTags\n    const thisRemoveTemplateTags = this.removeTemplateTags\n    const thisRemoveHeadTags = this.removeHeadTags\n    const thisUpdateDelay = this.updateDelay\n    const thisAfterRender = this.afterRender\n    this.title = null\n    this.beforeRender = null\n    this.target = null\n    this.focus = null\n    this.removeMetaTags = null\n    this.removeStyleTags = null\n    this.removeLinkTags = null\n    this.removeScriptTags = null\n    this.removeBaseTags = null\n    this.removeTemplateTags = null\n    this.removeHeadTags = null\n    this.updateDelay = null\n    this.afterRender = null\n\n    const postRenderCallbacks = () => {\n      // fire post-render callback for this template if it exists\n      if (app.postRenderCallbacks[template]) {\n        if (typeof app.postRenderCallbacks[template] === 'function') {\n          app.postRenderCallbacks[template](model)\n        } else console.error(`single-page-express: post-render callback for ${template} is not a function.`)\n      }\n\n      // fire a post-render callback registered for all templates if it exists\n      for (const key in app.postRenderCallbacks) {\n        if (key.startsWith('*')) { // this allows both * and *all syntax for both express 4 and 5 compatibility\n          if (typeof app.postRenderCallbacks[key] === 'function') app.postRenderCallbacks[key](model)\n          else console.error(`single-page-express: post-render callback for ${key} is not a function.`)\n          break\n        }\n      }\n    }\n\n    if (options.renderMethod) {\n      // execute user-supplied render method if it is provided\n      options.renderMethod(template, model, callback)\n      postRenderCallbacks()\n    } else {\n      // execute default render method if the user does not supply one\n      let err\n\n      // if no templates exist at all, log the render method arguments to the console and display a warning that no templates are loaded\n      if (!err && !app.templates) {\n        err = 'single-page-express: no templates are loaded.'\n        console.log('template:', template)\n        console.log('model:', model)\n      }\n\n      if (!err && (!app?.templatingEngine.render || typeof app?.templatingEngine?.render !== 'function')) {\n        err = 'single-page-express: no template engine is loaded or the engine supplied does not have a `render` method; please use a templating engine that is compatible with Express'\n        console.error(err)\n      }\n\n      if (!err && !app.templates[template]) {\n        err = `single-page-express: attempted to render template which does not exist: ${template}`\n        console.error(err)\n      }\n\n      let markup = ''\n      if (!err) {\n        // render the template with the chosen templating system\n        try {\n          markup = app.templatingEngine.render(template, model)\n          // TODO: leverage https://html-validate.org/ — will need to be a peer dep\n          // add html-validate to devDependencies\n          // const htmlValidate = require('./node_modules/html-validate/dist/cjs/browser.js')\n          // console.log(htmlValidate)\n          // this seems to crash webpack for some reason\n        } catch (error) {\n          const msg = `single-page-express: error parsing post-rendered template: ${template}`\n          console.error(msg)\n          console.error(error.message)\n          err = msg + '\\n' + error.message\n        }\n\n        if (!err) {\n          // build a dom from the rendered markup\n          let doc\n          try {\n            doc = parser.parseFromString(markup, 'text/html')\n          } catch (error) {\n            const msg = `single-page-express: error parsing post-rendered template: ${template}`\n            console.error(msg)\n            console.error(error.message)\n            err = msg + '\\n' + error.message\n          }\n\n          if (!err) {\n            // replace title tag with the new one\n            if (thisTitle) { // check if res.title is set\n              if (document.querySelector('title')) { // check if the title element exists\n                document.querySelector('title').innerHTML = thisTitle // replace the page title with the new title from res.title\n              }\n            } else if (doc.querySelector('title') && document.querySelector('title')) { // otherwise check if a <title> tag exists in the template\n              document.querySelector('title').innerHTML = doc.querySelector('title').innerHTML // if so, replace the page title with the new title from the <title> tag\n            }\n\n            // determine the targets\n            let targets\n            if (thisTarget) {\n              if (Array.isArray(thisTarget)) targets = thisAppendTargets ? app.defaultTargets.concat(thisTarget) : thisTarget\n              else targets = thisAppendTargets ? app.defaultTargets.concat([thisTarget]) : [thisTarget]\n            } else targets = app.defaultTargets\n\n            // call beforeRender methods if they exist\n            const beforeAfterRenderArg = {\n              model,\n              markup,\n              doc,\n              targets\n            }\n            if (app.beforeEveryRender && typeof app.beforeEveryRender === 'function') app.beforeEveryRender(beforeAfterRenderArg) // call app.beforeEveryRender function if it exists\n            if (thisBeforeRender && typeof thisBeforeRender === 'function') thisBeforeRender(beforeAfterRenderArg) // call res.beforeRender function if it exists\n\n            // remove tags from the head tag if any res.remove* properties are set\n            if (thisRemoveMetaTags) for (const tag of document.querySelectorAll('head meta')) tag.remove() // res.removeMetaTags\n            if (thisRemoveStyleTags) for (const tag of document.querySelectorAll('head style')) tag.remove() // res.removeStyleTags\n            if (thisRemoveLinkTags) for (const tag of document.querySelectorAll('head link')) tag.remove() // res.removeLinkTags\n            if (thisRemoveScriptTags) for (const tag of document.querySelectorAll('head script')) tag.remove() // res.removeScriptTags\n            if (thisRemoveBaseTags) for (const tag of document.querySelectorAll('head base')) tag.remove() // res.removeBaseTags\n            if (thisRemoveTemplateTags) for (const tag of document.querySelectorAll('head template')) tag.remove() // res.removeTemplateTags\n            if (thisRemoveHeadTags) for (const tag of document.querySelectorAll('head > :not(title)')) tag.remove() // res.removeHeadTags\n\n            // update the attributes of the html tag and head tag; preexisting attributes will not be removed; only new ones added or old ones updated\n            for (const attrib of doc.documentElement.attributes) document.documentElement.setAttribute(attrib.name, attrib.value)\n            for (const attrib of doc.head.attributes) document.head.setAttribute(attrib.name, attrib.value)\n\n            // add any new tags to the head tag from the new page that aren't present in the previous page\n            const oldHeadElements = Array.from(document.head.children)\n            const newHeadElements = Array.from(doc.head.children)\n            const oldHeadElementsStrings = oldHeadElements.map(el => el.outerHTML) // for comparison\n            const diffElements = newHeadElements.filter(el => !oldHeadElementsStrings.includes(el.outerHTML)) // figure out which head elements are new\n\n            // wait until link tags finish loading before updating the DOM to prevent a FOUC https://en.wikipedia.org/wiki/Flash_of_unstyled_content\n            const linkTagsInDiff = diffElements.filter(el => el.tagName.toLowerCase() === 'link')\n            const loadPromises = []\n            for (const linkTag of linkTagsInDiff) loadPromises.push(new Promise((resolve) => { linkTag.addEventListener('load', () => resolve()) }))\n\n            // wait until script tags finish loading before updating the DOM to prevent a FOUC https://en.wikipedia.org/wiki/Flash_of_unstyled_content\n            for (const tag of diffElements) {\n              // if the script tag is for a new script, don't update the DOM until it finishes loading\n              if (tag.nodeName === 'SCRIPT' && !document.querySelector(`script[src=\"${tag.src}\"]`) && !document.querySelector(`script[src=\"${tag.src.replace(window.location.origin, '')}\"]`)) {\n                const script = document.createElement('script')\n                script.src = tag.src\n                script.type = 'text/javascript'\n                script.async = true\n                loadPromises.push(new Promise((resolve) => { script.onload = () => resolve() }))\n                document.head.appendChild(script)\n              } else document.head.appendChild(tag) // if it's a script we've already seen before, we don't need to wait for it\n            }\n\n            // update DOM after all link tags and script tags have finished loading\n            Promise.all(loadPromises).then(() => {\n              window.setTimeout(() => {\n                const domUpdate = () => {\n                  for (const target of targets) {\n                    let targetEl\n                    if (document.querySelector(target)) { // check if the target is a valid DOM element\n                      targetEl = document.querySelector(target)\n                      const propertyToUpdate = targetEl.nodeName === 'BODY' ? 'innerHTML' : 'outerHTML' // if targetEl is a body tag, update innerHTML, otherwise outerHTML; this prevents duplicate head tags from being inserted into the DOM\n                      if (doc.querySelector(target)) { // if the new template has an element with the same id as the target container, then that's the container we're writing to\n                        targetEl[propertyToUpdate] = doc.querySelector(target).outerHTML // replace the target with the contents of the template's target id\n                      } else if (doc.body) {\n                        targetEl[propertyToUpdate] = doc.body.innerHTML // replace the target with the contents of body from the template\n                      } else {\n                        targetEl[propertyToUpdate] = doc.innerHTML // replace the target with the contents of the entire template\n                      }\n\n                      // announce the page change to screen readers\n                      const announcementContentElement = document.querySelector('[data-page-title]') || document.querySelector('h1[aria-label]') || document.querySelector('h1') || document.querySelector('title')\n                      if (!document.getElementById('singlePageExpressDefaultRenderMethodAriaLiveRegion')) {\n                        const liveRegion = document.createElement('p')\n                        liveRegion.id = 'singlePageExpressDefaultRenderMethodAriaLiveRegion'\n                        liveRegion.setAttribute('aria-live', 'assertive')\n                        liveRegion.setAttribute('aria-atomic', 'true')\n                        liveRegion.style.position = 'absolute'\n                        liveRegion.style.top = '-9999px'\n                        liveRegion.style.left = '-9999px'\n                        liveRegion.style.width = '1px'\n                        liveRegion.style.height = '1px'\n                        liveRegion.style.overflow = 'hidden'\n                        liveRegion.style.border = '0'\n                        liveRegion.style.margin = '-1px'\n                        liveRegion.style.padding = '0'\n                        liveRegion.style.clipPath = 'inset(50%)'\n                        liveRegion.style.whiteSpace = 'nowrap'\n                        document.body.appendChild(liveRegion)\n                      }\n                      document.getElementById('singlePageExpressDefaultRenderMethodAriaLiveRegion').textContent = '' // clear before announcing\n                      document.getElementById('singlePageExpressDefaultRenderMethodAriaLiveRegion').textContent = announcementContentElement.textContent\n\n                      // set browser focus\n                      const validElementsForOutline = ['A', 'INPUT', 'TEXTAREA', 'SELECT', 'BUTTON', 'FIELDSET'] // list of outlines that are okay to have a visible outline (mostly a problem in just safari; other browsers' default styles don't apply outlines to literally everything that is `focus()`ed)\n                      let focusEl = document.querySelector(thisFocus) || document.body.querySelector('[autofocus]') // see if there's a declared focus element\n                      if (focusEl && !focusEl.closest('[inert], [aria-disabled], [aria-hidden=\"true\"]')) focusEl = null // don't focus elements that have been declared inert\n                      if (focusEl && focusEl !== document.activeElement) {\n                        focusEl.focus() // only focus if not already focused\n                        if (!validElementsForOutline.includes(focusEl.tagName)) focusEl.style.outline = 'none'\n                      } else { // focus the target element instead (defined as the first element that appears in the targets array)\n                        // apply a tabindex attribute to allow focusing non-focusable elements\n                        const targetEl = document.querySelector(targets[0])\n                        const originalTabindex = targetEl.getAttribute('tabindex')\n                        targetEl.setAttribute('tabindex', '-1')\n                        targetEl.focus({ preventScroll: true })\n                        if (!validElementsForOutline.includes(targetEl.tagName)) targetEl.style.outline = 'none'\n                        if (originalTabindex !== null) targetEl.setAttribute('tabindex', originalTabindex)\n                      }\n\n                      // call afterRender methods if they exist\n                      if (app.afterEveryRender && typeof app.afterEveryRender === 'function') app.afterEveryRender(beforeAfterRenderArg) // call app.afterEveryRender function if it exists\n                      if (thisAfterRender && typeof thisAfterRender === 'function') thisAfterRender(beforeAfterRenderArg) // call res.afterRender function if it exists\n                    } else {\n                      const msg = `single-page-express: invalid target supplied: ${target}`\n                      console.error(msg)\n                      err = msg\n                    }\n                  }\n\n                  // call user-defined callback supplied to the render method if it exists\n                  if (callback && typeof callback === 'function') callback(err, markup)\n\n                  postRenderCallbacks()\n                }\n                if (document.startViewTransition) currentViewTransition = document.startViewTransition(domUpdate)\n                else domUpdate()\n              }, parseInt(thisUpdateDelay) || parseInt(app.updateDelay) || 0)\n            })\n          }\n        }\n      }\n    }\n  }\n  res.render = app.render // they are slightly different methods in express but there is no reason to differentiate between them here\n\n  // #endregion\n\n  // #region start the router\n\n  if (!document.singlePageExpressEventListenerAdded) {\n    // listen for link navigation events\n    document.addEventListener('click', (event) => {\n      if (event.target.tagName === 'A' && event.target.href) handleRoute({ route: event.target.getAttribute('href'), event })\n    })\n\n    // listen for form submits\n    document.addEventListener('submit', (event) => {\n      if (event.target.getAttribute('action')) handleRoute({ route: event.target.getAttribute('action'), event, parseBody: true, method: event.target.getAttribute('method') })\n    })\n  }\n  document.singlePageExpressEventListenerAdded = true // prevent attaching the event to the DOM twice\n\n  // listen for back/forward button properly\n  const historyStack = []\n  let currentIndex = -1\n  if (!window.singlePageExpressGlobalsInitialized) {\n    window.singlePageExpressGlobalsInitialized = true // this check prevents the event listener from being loaded multiple times if this constructor gets executed more than once\n    window.addEventListener('popstate', (event) => {\n      const state = event.state\n      if (!state) return\n      let backButtonPressed = false\n      let forwardButtonPressed = false\n      const newIndex = state.index\n      if (newIndex < currentIndex) backButtonPressed = true\n      else if (newIndex > currentIndex) forwardButtonPressed = true\n      currentIndex = newIndex\n      handleRoute({\n        route: window.location.pathname,\n        method: 'get',\n        skipHistory: true, // skipHistory prevents adding a new entry to history when responding to a back/forward button request\n        backButtonPressed,\n        forwardButtonPressed\n      })\n    })\n  }\n\n  // #endregion\n\n  return app\n}\n\nmodule.exports = singlePageExpress\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./single-page-express.js\");\n"],"names":["module","exports","pathToRegexp","MATCHING_GROUP_REGEXP","path","keys","options","strict","end","flags","sensitive","lookahead","extraOffset","keysOffset","length","i","name","pos","backtrack","m","RegExp","exec","source","push","optional","offset","index","Array","isArray","map","value","join","TypeError","replace","match","slash","format","key","capture","star","slice","result","splice","Object","defineProperty","TokenData","parse","compile","stringify","DEFAULT_DELIMITER","NOOP_VALUE","ID_START","ID_CONTINUE","DEBUG_URL","SIMPLE_TOKENS","escapeText","str","escape","lexer","chars","test","type","Iter","constructor","tokens","this","peek","_peek","next","tryConsume","token","undefined","consume","nextType","text","it","endType","encodePath","param","wildcard","open","encodeURIComponent","data","fn","tokensToFunction","delimiter","encode","missing","encoders","tokenToFunction","encoder","extras","encodeValue","decodeURIComponent","decoders","decode","split","input","regexp","params","create","decoder","sources","paths","items","seq","flatten","sequenceToRegExp","pattern","trailing","init","fork","isSafeSegmentParam","includes","negate","stringifyToken","isSafe","isNameSafe","isNextNameSafe","JSON","first","rest","every","char","window","document","repaint","canvas","width","innerWidth","height","barThickness","ctx","getContext","shadowBlur","shadowColor","stop","lineGradient","createLinearGradient","barColors","addColorStop","lineWidth","beginPath","moveTo","lineTo","Math","ceil","currentProgress","strokeStyle","stroke","showing","progressTimerId","fadeTimerId","delayTimerId","autoRun","className","topbar","config","opts","hasOwnProperty","show","handler","elem","setTimeout","cancelAnimationFrame","createElement","style","position","top","left","right","margin","padding","zIndex","display","classList","add","addEventListener","attachEvent","parentElement","body","appendChild","opacity","progress","loop","requestAnimationFrame","pow","sqrt","to","indexOf","parseFloat","hide","clearTimeout","call","pathToRegexpMatch","pathToRegexpMatchExpress4","parser","DOMParser","singlePageExpress","app","expressVersion","parseInt","appVars","templatingEngine","templates","console","warn","routes","routeCallbacks","defaultTarget","defaultTargets","concat","beforeEveryRender","updateDelay","afterEveryRender","postRenderCallbacks","topbarEnabled","disableTopbar","topBarRoutes","topbarConfig","alwaysScrollTop","urls","currentViewTransition","httpVerbs","env","locals","mountpath","mount","routeHandler","method","middleware","route","callback","callbackWithMiddlewareExecutingFirst","req","res","registerRoute","all","delete","disable","disabled","enable","enabled","engine","get","listen","forEach","post","put","ret","set","val","use","triggerRoute","handleRoute","defaultReq","baseUrl","fresh","hostname","location","ip","ips","signedCookies","stale","xhr","accepts","acceptsCharsets","acceptsEncodings","acceptsLanguages","is","range","headersSent","append","attachment","cookie","cookieString","expires","Date","toUTCString","maxAge","domain","secure","httpOnly","sameSite","partitioned","priority","signed","clearCookie","pastDate","download","json","log","jsonp","links","redirect","status","send","sendFile","sendStatus","vary","toLowerCase","endsWith","matcher","error","async","routeWithoutQuery","registeredRoute","potentialMatch","event","preventDefault","pathname","scrollX","scrollY","scrollingChildContainers","scrollingChildContainer","querySelectorAll","scrollHeight","clientHeight","scrollWidth","clientWidth","id","scrollLeft","scrollTop","skipHistory","state","historyStack","currentIndex","history","pushState","parseBody","target","fromEntries","FormData","entries","submitter","cookies","originalUrl","substring","vals","parsedUrl","URL","href","protocol","parts","queryString","query","URLSearchParams","subdomains","reverse","backButtonPressed","forwardButtonPressed","htmlEl","querySelector","remove","scrollPage","resetScroll","scrollTo","getElementById","render","template","model","thisTitle","title","thisBeforeRender","beforeRender","thisTarget","thisAppendTargets","appendTargets","thisFocus","focus","thisRemoveMetaTags","removeMetaTags","thisRemoveStyleTags","removeStyleTags","thisRemoveLinkTags","removeLinkTags","thisRemoveScriptTags","removeScriptTags","thisRemoveBaseTags","removeBaseTags","thisRemoveTemplateTags","removeTemplateTags","thisRemoveHeadTags","removeHeadTags","thisUpdateDelay","thisAfterRender","afterRender","startsWith","renderMethod","err","markup","msg","message","doc","parseFromString","innerHTML","targets","beforeAfterRenderArg","tag","attrib","documentElement","attributes","setAttribute","head","oldHeadElements","from","children","newHeadElements","oldHeadElementsStrings","el","outerHTML","diffElements","filter","linkTagsInDiff","tagName","loadPromises","linkTag","Promise","resolve","nodeName","src","origin","script","onload","then","domUpdate","targetEl","propertyToUpdate","announcementContentElement","liveRegion","overflow","border","clipPath","whiteSpace","textContent","validElementsForOutline","focusEl","closest","activeElement","outline","originalTabindex","getAttribute","preventScroll","startViewTransition","singlePageExpressEventListenerAdded","singlePageExpressGlobalsInitialized","newIndex","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}