{"version":3,"sources":["jsdelivr-header.js","/npm/sirv@3.0.1/build.js"],"names":[],"mappings":"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","file":"/npm/sirv@3.0.1/build.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/sirv@3.0.1/build.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const fs = require('node:fs');\nconst { join, normalize, resolve } = require('node:path');\nconst { totalist } = require('totalist/sync');\nconst { parse } = require('@polka/url');\nconst { lookup } = require('mrmime');\n\nconst noop = () => {};\n\nfunction isMatch(uri, arr) {\n\tfor (let i=0; i < arr.length; i++) {\n\t\tif (arr[i].test(uri)) return true;\n\t}\n}\n\nfunction toAssume(uri, extns) {\n\tlet i=0, x, len=uri.length - 1;\n\tif (uri.charCodeAt(len) === 47) {\n\t\turi = uri.substring(0, len);\n\t}\n\n\tlet arr=[], tmp=`${uri}/index`;\n\tfor (; i < extns.length; i++) {\n\t\tx = extns[i] ? `.${extns[i]}` : '';\n\t\tif (uri) arr.push(uri + x);\n\t\tarr.push(tmp + x);\n\t}\n\n\treturn arr;\n}\n\nfunction viaCache(cache, uri, extns) {\n\tlet i=0, data, arr=toAssume(uri, extns);\n\tfor (; i < arr.length; i++) {\n\t\tif (data = cache[arr[i]]) return data;\n\t}\n}\n\nfunction viaLocal(dir, isEtag, uri, extns) {\n\tlet i=0, arr=toAssume(uri, extns);\n\tlet abs, stats, name, headers;\n\tfor (; i < arr.length; i++) {\n\t\tabs = normalize(join(dir, name=arr[i]));\n\t\tif (abs.startsWith(dir) && fs.existsSync(abs)) {\n\t\t\tstats = fs.statSync(abs);\n\t\t\tif (stats.isDirectory()) continue;\n\t\t\theaders = toHeaders(name, stats, isEtag);\n\t\t\theaders['Cache-Control'] = isEtag ? 'no-cache' : 'no-store';\n\t\t\treturn { abs, stats, headers };\n\t\t}\n\t}\n}\n\nfunction is404(req, res) {\n\treturn (res.statusCode=404,res.end());\n}\n\nfunction send(req, res, file, stats, headers) {\n\tlet code=200, tmp, opts={};\n\theaders = { ...headers };\n\n\tfor (let key in headers) {\n\t\ttmp = res.getHeader(key);\n\t\tif (tmp) headers[key] = tmp;\n\t}\n\n\tif (tmp = res.getHeader('content-type')) {\n\t\theaders['Content-Type'] = tmp;\n\t}\n\n\tif (req.headers.range) {\n\t\tcode = 206;\n\t\tlet [x, y] = req.headers.range.replace('bytes=', '').split('-');\n\t\tlet end = opts.end = parseInt(y, 10) || stats.size - 1;\n\t\tlet start = opts.start = parseInt(x, 10) || 0;\n\n\t\tif (end >= stats.size) {\n\t\t\tend = stats.size - 1;\n\t\t}\n\n\t\tif (start >= stats.size) {\n\t\t\tres.setHeader('Content-Range', `bytes */${stats.size}`);\n\t\t\tres.statusCode = 416;\n\t\t\treturn res.end();\n\t\t}\n\n\t\theaders['Content-Range'] = `bytes ${start}-${end}/${stats.size}`;\n\t\theaders['Content-Length'] = (end - start + 1);\n\t\theaders['Accept-Ranges'] = 'bytes';\n\t}\n\n\tres.writeHead(code, headers);\n\tfs.createReadStream(file, opts).pipe(res);\n}\n\nconst ENCODING = {\n\t'.br': 'br',\n\t'.gz': 'gzip',\n};\n\nfunction toHeaders(name, stats, isEtag) {\n\tlet enc = ENCODING[name.slice(-3)];\n\n\tlet ctype = lookup(name.slice(0, enc && -3)) || '';\n\tif (ctype === 'text/html') ctype += ';charset=utf-8';\n\n\tlet headers = {\n\t\t'Content-Length': stats.size,\n\t\t'Content-Type': ctype,\n\t\t'Last-Modified': stats.mtime.toUTCString(),\n\t};\n\n\tif (enc) headers['Content-Encoding'] = enc;\n\tif (isEtag) headers['ETag'] = `W/\"${stats.size}-${stats.mtime.getTime()}\"`;\n\n\treturn headers;\n}\n\nmodule.exports = function (dir, opts={}) {\n\tdir = resolve(dir || '.');\n\n\tlet isNotFound = opts.onNoMatch || is404;\n\tlet setHeaders = opts.setHeaders || noop;\n\n\tlet extensions = opts.extensions || ['html', 'htm'];\n\tlet gzips = opts.gzip && extensions.map(x => `${x}.gz`).concat('gz');\n\tlet brots = opts.brotli && extensions.map(x => `${x}.br`).concat('br');\n\n\tconst FILES = {};\n\n\tlet fallback = '/';\n\tlet isEtag = !!opts.etag;\n\tlet isSPA = !!opts.single;\n\tif (typeof opts.single === 'string') {\n\t\tlet idx = opts.single.lastIndexOf('.');\n\t\tfallback += !!~idx ? opts.single.substring(0, idx) : opts.single;\n\t}\n\n\tlet ignores = [];\n\tif (opts.ignores !== false) {\n\t\tignores.push(/[/]([A-Za-z\\s\\d~$._-]+\\.\\w+){1,}$/); // any extn\n\t\tif (opts.dotfiles) ignores.push(/\\/\\.\\w/);\n\t\telse ignores.push(/\\/\\.well-known/);\n\t\t[].concat(opts.ignores || []).forEach(x => {\n\t\t\tignores.push(new RegExp(x, 'i'));\n\t\t});\n\t}\n\n\tlet cc = opts.maxAge != null && `public,max-age=${opts.maxAge}`;\n\tif (cc && opts.immutable) cc += ',immutable';\n\telse if (cc && opts.maxAge === 0) cc += ',must-revalidate';\n\n\tif (!opts.dev) {\n\t\ttotalist(dir, (name, abs, stats) => {\n\t\t\tif (/\\.well-known[\\\\+\\/]/.test(name)) {} // keep\n\t\t\telse if (!opts.dotfiles && /(^\\.|[\\\\+|\\/+]\\.)/.test(name)) return;\n\n\t\t\tlet headers = toHeaders(name, stats, isEtag);\n\t\t\tif (cc) headers['Cache-Control'] = cc;\n\n\t\t\tFILES['/' + name.normalize().replace(/\\\\+/g, '/')] = { abs, stats, headers };\n\t\t});\n\t}\n\n\tlet lookup = opts.dev ? viaLocal.bind(0, dir, isEtag) : viaCache.bind(0, FILES);\n\n\treturn function (req, res, next) {\n\t\tlet extns = [''];\n\t\tlet pathname = parse(req).pathname;\n\t\tlet val = req.headers['accept-encoding'] || '';\n\t\tif (gzips && val.includes('gzip')) extns.unshift(...gzips);\n\t\tif (brots && /(br|brotli)/i.test(val)) extns.unshift(...brots);\n\t\textns.push(...extensions); // [...br, ...gz, orig, ...exts]\n\n\t\tif (pathname.indexOf('%') !== -1) {\n\t\t\ttry { pathname = decodeURI(pathname) }\n\t\t\tcatch (err) { /* malform uri */ }\n\t\t}\n\n\t\tlet data = lookup(pathname, extns) || isSPA && !isMatch(pathname, ignores) && lookup(fallback, extns);\n\t\tif (!data) return next ? next() : isNotFound(req, res);\n\n\t\tif (isEtag && req.headers['if-none-match'] === data.headers['ETag']) {\n\t\t\tres.writeHead(304);\n\t\t\treturn res.end();\n\t\t}\n\n\t\tif (gzips || brots) {\n\t\t\tres.setHeader('Vary', 'Accept-Encoding');\n\t\t}\n\n\t\tsetHeaders(res, pathname, data.stats);\n\t\tsend(req, res, data.abs, data.stats, data.headers);\n\t};\n}\n"]}