@quake2ts/test-utils 0.0.799 → 0.0.802
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +35 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +35 -14
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/src/engine/helpers/webgl-playwright.ts +49 -22
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/glob-slash.js","../../../node_modules/.pnpm/concat-map@0.0.1/node_modules/concat-map/index.js","../../../node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js","../../../node_modules/.pnpm/brace-expansion@1.1.12/node_modules/brace-expansion/index.js","../../../node_modules/.pnpm/minimatch@3.1.2/node_modules/minimatch/minimatch.js","../../../node_modules/.pnpm/path-to-regexp@3.3.0/node_modules/path-to-regexp/index.js","../../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/db.json","../../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/index.js","../../../node_modules/.pnpm/mime-types@2.1.18/node_modules/mime-types/index.js","../../../node_modules/.pnpm/bytes@3.0.0/node_modules/bytes/index.js","../../../node_modules/.pnpm/content-disposition@0.5.2/node_modules/content-disposition/index.js","../../../node_modules/.pnpm/path-is-inside@1.0.2/node_modules/path-is-inside/lib/path-is-inside.js","../../../node_modules/.pnpm/range-parser@1.2.0/node_modules/range-parser/index.js","../../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/directory.js","../../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/error.js","../../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/index.js","../src/index.ts","../src/shared/mocks.ts","../src/vitest-compat.ts","../src/shared/bsp.ts","../src/shared/pak-loader.ts","../src/shared/math.ts","../src/shared/collision.ts","../src/shared/factories.ts","../src/game/factories.ts","../src/game/helpers.ts","../src/game/helpers/physics.ts","../src/game/helpers/save.ts","../src/game/mocks/ai.ts","../src/game/mocks/combat.ts","../src/game/mocks/items.ts","../src/server/mocks/transport.ts","../src/server/mockTransport.ts","../src/server/mockNetDriver.ts","../src/server/mocks/state.ts","../src/server/mocks/connection.ts","../src/server/mocks/commands.ts","../src/server/mocks/master.ts","../src/server/mocks/physics.ts","../src/server/helpers/multiplayer.ts","../src/server/helpers/snapshot.ts","../src/server/helpers/bandwidth.ts","../src/setup/browser.ts","../src/client/mocks/input.ts","../src/engine/mocks/webgl.ts","../src/setup/canvas.ts","../src/setup/webgpu.ts","../src/setup/headless-webgl.ts","../src/engine/mocks/webgpu.ts","../src/setup/timing.ts","../src/setup/node.ts","../src/engine/mocks/audio.ts","../src/engine/mocks/renderer.ts","../src/engine/mocks/assets.ts","../src/engine/mocks/buffers.ts","../src/engine/mocks/lighting.ts","../src/engine/mocks/particles.ts","../src/engine/rendering.ts","../src/setup/storage.ts","../src/setup/audio.ts","../src/engine/helpers/webgpu-rendering.ts","../src/engine/helpers/webgl-rendering.ts","../src/engine/helpers/webgl-playwright.ts","../src/visual/snapshots.ts","../src/engine/helpers/pipeline-test-template.ts","../src/engine/helpers/textures.ts","../src/client/helpers/view.ts","../src/client/helpers/hud.ts","../src/client/mocks/network.ts","../src/client/mocks/download.ts","../src/client/mocks/state.ts","../src/client/mocks/console.ts","../src/client/helpers/prediction.ts","../src/visual/animation-snapshots.ts","../src/e2e/playwright.ts","../src/e2e/network.ts","../src/e2e/visual.ts"],"sourcesContent":["/* ! The MIT License (MIT) Copyright (c) 2014 Scott Corgan */\n\n// This is adopted from https://github.com/scottcorgan/glob-slash/\n\nconst path = require('path');\nconst normalize = value => path.posix.normalize(path.posix.join('/', value));\n\nmodule.exports = value => (value.charAt(0) === '!' ? `!${normalize(value.substr(1))}` : normalize(value));\nmodule.exports.normalize = normalize;\n","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = (function () { try { return require('path') } catch (e) {}}()) || {\n sep: '/'\n}\nminimatch.sep = path.sep\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n b = b || {}\n var t = {}\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch\n }\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n m.Minimatch.defaults = function defaults (options) {\n return orig.defaults(ext(def, options)).Minimatch\n }\n\n m.filter = function filter (pattern, options) {\n return orig.filter(pattern, ext(def, options))\n }\n\n m.defaults = function defaults (options) {\n return orig.defaults(ext(def, options))\n }\n\n m.makeRe = function makeRe (pattern, options) {\n return orig.makeRe(pattern, ext(def, options))\n }\n\n m.braceExpand = function braceExpand (pattern, options) {\n return orig.braceExpand(pattern, ext(def, options))\n }\n\n m.match = function (list, pattern, options) {\n return orig.match(list, pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (!options.allowWindowsEscape && path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n this.partial = !!options.partial\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n assertValidPattern(pattern)\n\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\nvar MAX_PATTERN_LENGTH = 1024 * 64\nvar assertValidPattern = function (pattern) {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern')\n }\n\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long')\n }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n assertValidPattern(pattern)\n\n var options = this.options\n\n // shortcuts\n if (pattern === '**') {\n if (!options.noglobstar)\n return GLOBSTAR\n else\n pattern = '*'\n }\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n /* istanbul ignore next */\n case '/': {\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n }\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '[': case '.': case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) /* istanbul ignore next - should be impossible */ {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) /* istanbul ignore next - should be impossible */ {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = function match (f, partial) {\n if (typeof partial === 'undefined') partial = this.partial\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* istanbul ignore if */\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n /* istanbul ignore if */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n hit = f === p\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else /* istanbul ignore else */ if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return (fi === fl - 1) && (file[fi] === '')\n }\n\n // should be unreachable.\n /* istanbul ignore next */\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\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 var prevText = prev || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\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 : restrictBacktrack(delimiter, defaultDelimiter, prevText)\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\nfunction restrictBacktrack (delimiter, defaultDelimiter, prevText) {\n var charGroup = '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']'\n\n if (!prevText || prevText.indexOf(delimiter) > -1 || prevText.indexOf(defaultDelimiter) > -1) {\n return charGroup + '+?'\n }\n\n return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')' + charGroup + ')+?'\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 \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\"\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\"\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\"\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\"\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\"\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\"\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\"\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\"\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\"\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\"\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\"\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\"\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\"\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpd\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\"\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dbk\"]\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\"\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\"\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\"\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\"\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\"\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"woff\"]\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\"\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\"\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\"\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\"\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\"\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\"\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\"\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\"\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\"\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\"\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\"\n },\n \"application/n-triples\": {\n \"source\": \"iana\"\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\"\n },\n \"application/node\": {\n \"source\": \"iana\"\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\"\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\"\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\"\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\"\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\"\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pskcxml\"]\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\"\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\"\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\"\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/sep+xml\": {\n \"source\": \"iana\"\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\"\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\"\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"srx\"]\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\"\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssml\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\"\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\"\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\"\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume-movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"apache\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"apache\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\"\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\"\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\"\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\"\n },\n \"image/emf\": {\n \"source\": \"iana\"\n },\n \"image/fits\": {\n \"source\": \"iana\"\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\"\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\"\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\"\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tiff\",\"tif\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\"\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\"\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\"\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\"\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\"\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\"\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\"\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\"\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shex\": {\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\"\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n b: 1,\n kb: 1 << 10,\n mb: 1 << 20,\n gb: 1 << 30,\n tb: ((1 << 30) * 1024)\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n * case: [string],\n * decimalPlaces: [number]\n * fixedDecimals: [boolean]\n * thousandsSeparator: [string]\n * unitSeparator: [string]\n * }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n if (typeof value === 'string') {\n return parse(value);\n }\n\n if (typeof value === 'number') {\n return format(value, options);\n }\n\n return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n var mag = Math.abs(value);\n var thousandsSeparator = (options && options.thousandsSeparator) || '';\n var unitSeparator = (options && options.unitSeparator) || '';\n var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n var fixedDecimals = Boolean(options && options.fixedDecimals);\n var unit = (options && options.unit) || '';\n\n if (!unit || !map[unit.toLowerCase()]) {\n if (mag >= map.tb) {\n unit = 'TB';\n } else if (mag >= map.gb) {\n unit = 'GB';\n } else if (mag >= map.mb) {\n unit = 'MB';\n } else if (mag >= map.kb) {\n unit = 'KB';\n } else {\n unit = 'B';\n }\n }\n\n var val = value / map[unit.toLowerCase()];\n var str = val.toFixed(decimalPlaces);\n\n if (!fixedDecimals) {\n str = str.replace(formatDecimalsRegExp, '$1');\n }\n\n if (thousandsSeparator) {\n str = str.replace(formatThousandsRegExp, thousandsSeparator);\n }\n\n return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n\n if (typeof val !== 'string') {\n return null;\n }\n\n // Test if the string passed is valid\n var results = parseRegExp.exec(val);\n var floatValue;\n var unit = 'b';\n\n if (!results) {\n // Nothing could be extracted from the given string\n floatValue = parseInt(val, 10);\n unit = 'b'\n } else {\n // Retrieve the value and the unit\n floatValue = parseFloat(results[1]);\n unit = results[4].toLowerCase();\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n","/*!\n * content-disposition\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n */\n\nvar basename = require('path').basename\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*<any CHAR except CTLs or separators>\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = <any TEXT except <\">>\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n * TEXT = <any OCTET except CTLs, but including LWS>\n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = <US-ASCII CR, carriage return (13)>\n * LF = <US-ASCII LF, linefeed (10)>\n * SP = <US-ASCII SP, space (32)>\n * HT = <US-ASCII HT, horizontal-tab (9)>\n * CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET = <any 8-bit sequence of data>\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value = charset \"'\" [ language ] \"'\" value-chars\n * charset = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n * / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n * / \"{\" / \"}\" / \"~\"\n * language = ( 2*3ALPHA [ extlang ] )\n * / 4ALPHA\n * / 5*8ALPHA\n * extlang = *3( \"-\" 3ALPHA )\n * value-chars = *( pct-encoded / attr-char )\n * pct-encoded = \"%\" HEXDIG HEXDIG\n * attr-char = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n * / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm = \"filename\" \"=\" value\n * | \"filename*\" \"=\" ext-value\n * disp-ext-parm = token \"=\" value\n * | ext-token \"=\" ext-value\n * ext-token = <the characters in token, followed by \"*\">\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @api public\n */\n\nfunction contentDisposition (filename, options) {\n var opts = options || {}\n\n // get type\n var type = opts.type || 'attachment'\n\n // get parameters\n var params = createparams(filename, opts.fallback)\n\n // format into string\n return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @api private\n */\n\nfunction createparams (filename, fallback) {\n if (filename === undefined) {\n return\n }\n\n var params = {}\n\n if (typeof filename !== 'string') {\n throw new TypeError('filename must be a string')\n }\n\n // fallback defaults to true\n if (fallback === undefined) {\n fallback = true\n }\n\n if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n throw new TypeError('fallback must be a string or boolean')\n }\n\n if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n throw new TypeError('fallback must be ISO-8859-1 string')\n }\n\n // restrict to file base name\n var name = basename(filename)\n\n // determine if name is suitable for quoted string\n var isQuotedString = TEXT_REGEXP.test(name)\n\n // generate fallback name\n var fallbackName = typeof fallback !== 'string'\n ? fallback && getlatin1(name)\n : basename(fallback)\n var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n // set extended filename parameter\n if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n params['filename*'] = name\n }\n\n // set filename parameter\n if (isQuotedString || hasFallback) {\n params.filename = hasFallback\n ? fallbackName\n : name\n }\n\n return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @api private\n */\n\nfunction format (obj) {\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n // start with normalized type\n var string = String(type).toLowerCase()\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n var val = param.substr(-1) === '*'\n ? ustring(parameters[param])\n : qstring(parameters[param])\n\n string += '; ' + param + '=' + val\n }\n }\n\n return string\n}\n\n/**\n * Decode a RFC 6987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction decodefield (str) {\n var match = EXT_VALUE_REGEXP.exec(str)\n\n if (!match) {\n throw new TypeError('invalid extended field value')\n }\n\n var charset = match[1].toLowerCase()\n var encoded = match[2]\n var value\n\n // to binary string\n var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n switch (charset) {\n case 'iso-8859-1':\n value = getlatin1(binary)\n break\n case 'utf-8':\n value = new Buffer(binary, 'binary').toString('utf8')\n break\n default:\n throw new TypeError('unsupported charset in extended field')\n }\n\n return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction getlatin1 (val) {\n // simple Unicode -> ISO-8859-1 transformation\n return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @api private\n */\n\nfunction parse (string) {\n if (!string || typeof string !== 'string') {\n throw new TypeError('argument string is required')\n }\n\n var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n if (!match) {\n throw new TypeError('invalid type format')\n }\n\n // normalize type\n var index = match[0].length\n var type = match[1].toLowerCase()\n\n var key\n var names = []\n var params = {}\n var value\n\n // calculate index to start at\n index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n ? index - 1\n : index\n\n // match parameters\n while ((match = PARAM_REGEXP.exec(string))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (names.indexOf(key) !== -1) {\n throw new TypeError('invalid duplicate parameter')\n }\n\n names.push(key)\n\n if (key.indexOf('*') + 1 === key.length) {\n // decode extended value\n key = key.slice(0, -1)\n value = decodefield(value)\n\n // overwrite existing value\n params[key] = value\n continue\n }\n\n if (typeof params[key] === 'string') {\n continue\n }\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(QESC_REGEXP, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @api private\n */\n\nfunction pdecode (str, hex) {\n return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @api private\n */\n\nfunction pencode (char) {\n var hex = String(char)\n .charCodeAt(0)\n .toString(16)\n .toUpperCase()\n return hex.length === 1\n ? '%0' + hex\n : '%' + hex\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction ustring (val) {\n var str = String(val)\n\n // percent encode as UTF-8\n var encoded = encodeURIComponent(str)\n .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n */\n\nfunction ContentDisposition (type, parameters) {\n this.type = type\n this.parameters = parameters\n}\n","\"use strict\";\n\nvar path = require(\"path\");\n\nmodule.exports = function (thePath, potentialParent) {\n // For inside-directory checking, we want to allow trailing slashes, so normalize.\n thePath = stripTrailingSep(thePath);\n potentialParent = stripTrailingSep(potentialParent);\n\n // Node treats only Windows as case-insensitive in its path module; we follow those conventions.\n if (process.platform === \"win32\") {\n thePath = thePath.toLowerCase();\n potentialParent = potentialParent.toLowerCase();\n }\n\n return thePath.lastIndexOf(potentialParent, 0) === 0 &&\n\t\t(\n\t\t\tthePath[potentialParent.length] === path.sep ||\n\t\t\tthePath[potentialParent.length] === undefined\n\t\t);\n};\n\nfunction stripTrailingSep(thePath) {\n if (thePath[thePath.length - 1] === path.sep) {\n return thePath.slice(0, -1);\n }\n return thePath;\n}\n","/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n var index = str.indexOf('=')\n\n if (index === -1) {\n return -2\n }\n\n // split the range string\n var arr = str.slice(index + 1).split(',')\n var ranges = []\n\n // add ranges type\n ranges.type = str.slice(0, index)\n\n // parse all ranges\n for (var i = 0; i < arr.length; i++) {\n var range = arr[i].split('-')\n var start = parseInt(range[0], 10)\n var end = parseInt(range[1], 10)\n\n // -nnn\n if (isNaN(start)) {\n start = size - end\n end = size - 1\n // nnn-\n } else if (isNaN(end)) {\n end = size - 1\n }\n\n // limit last-byte-pos to current length\n if (end > size - 1) {\n end = size - 1\n }\n\n // invalid or unsatisifiable\n if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n continue\n }\n\n // add range\n ranges.push({\n start: start,\n end: end\n })\n }\n\n if (ranges.length < 1) {\n // unsatisifiable\n return -1\n }\n\n return options && options.combine\n ? combineRanges(ranges)\n : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n for (var j = 0, i = 1; i < ordered.length; i++) {\n var range = ordered[i]\n var current = ordered[j]\n\n if (range.start > current.end + 1) {\n // next range\n ordered[++j] = range\n } else if (range.end > current.end) {\n // extend range\n current.end = range.end\n current.index = Math.min(current.index, range.index)\n }\n }\n\n // trim ordered array\n ordered.length = j + 1\n\n // generate combined range\n var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n // copy ranges type\n combined.type = ranges.type\n\n return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n return {\n start: range.start,\n end: range.end,\n index: index\n }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n return {\n start: range.start,\n end: range.end\n }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n return a.start - b.start\n}\n","(function(){function directory(it\n) {\nvar encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : (function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());var out='<!DOCTYPE html><html lang=\"en\"> <head> <meta charset=\"utf-8\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <title>Files within '+encodeHTML(it.directory)+'</title> <style>body { margin: 0; padding: 30px; background: #fff; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; -webkit-font-smoothing: antialiased;}main { max-width: 920px;}header { display: flex; justify-content: space-between; flex-wrap: wrap;}h1 { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}header h1 a { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}h1 i { font-style: normal;}ul { margin: 0 0 0 -2px; padding: 20px 0 0 0;}ul li { list-style: none; font-size: 14px; display: flex; justify-content: space-between;}a { text-decoration: none;}ul a { color: #000; padding: 10px 5px; margin: 0 -5px; white-space: nowrap; overflow: hidden; display: block; width: 100%; text-overflow: ellipsis;}header a { color: #0076FF; font-size: 11px; font-weight: 400; display: inline-block; line-height: 20px;}svg { height: 13px; vertical-align: text-bottom;}ul a::before { display: inline-block; vertical-align: middle; margin-right: 10px; width: 24px; text-align: center; line-height: 12px;}ul a.file::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M10 8C8.34 8 7 6.66 7 5V1H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h9c1.1 0 2-.9 2-2V8h-4zM8 5c0 1.1.9 2 2 2h3.59L8 1.41V5zM3 0h5l7 7v9c0 1.66-1.34 3-3 3H3c-1.66 0-3-1.34-3-3V3c0-1.66 1.34-3 3-3z\\' fill=\\'black\\'/></svg>\");}ul a:hover { text-decoration: underline;}ul a.folder::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'20\\' height=\\'16\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M18.784 3.87a1.565 1.565 0 0 0-.565-.356V2.426c0-.648-.523-1.171-1.15-1.171H8.996L7.908.25A.89.89 0 0 0 7.302 0H2.094C1.445 0 .944.523.944 1.171v2.3c-.21.085-.398.21-.565.356a1.348 1.348 0 0 0-.377 1.004l.398 9.83C.42 15.393 1.048 16 1.8 16h15.583c.753 0 1.36-.586 1.4-1.339l.398-9.83c.021-.313-.125-.69-.397-.962zM1.843 3.41V1.191c0-.146.104-.272.25-.272H7.26l1.234 1.088c.083.042.167.104.293.104h8.282c.125 0 .25.126.25.272V3.41H1.844zm15.54 11.712H1.78a.47.47 0 0 1-.481-.46l-.397-9.83c0-.147.041-.252.125-.356a.504.504 0 0 1 .377-.147H17.78c.125 0 .272.063.377.147.083.083.125.209.125.334l-.418 9.83c-.021.272-.23.482-.481.482z\\' fill=\\'black\\'/></svg>\");}ul a.lambda::before { content: url(\"data:image/svg+xml; utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M3.5 14.4354H5.31622L7.30541 9.81311H7.43514L8.65315 13.0797C9.05676 14.1643 9.55405 14.5 10.7 14.5C11.0171 14.5 11.291 14.4677 11.5 14.4032V13.1572C11.3847 13.1766 11.2622 13.2024 11.1541 13.2024C10.6351 13.2024 10.3829 13.0281 10.1595 12.4664L8.02613 7.07586C7.21171 5.01646 6.54865 4.5 5.11441 4.5C4.83333 4.5 4.62432 4.53228 4.37207 4.59038V5.83635C4.56667 5.81052 4.66036 5.79761 4.77568 5.79761C5.64775 5.79761 5.9 6.0042 6.4045 7.19852L6.64234 7.77954L3.5 14.4354Z\\' fill=\\'black\\'/><rect x=\\'0.5\\' y=\\'0.5\\' width=\\'14\\' height=\\'18\\' rx=\\'2.5\\' stroke=\\'black\\'/></svg>\");}ul a.file.gif::before,ul a.file.jpg::before,ul a.file.png::before,ul a.file.svg::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'16\\' height=\\'16\\' viewBox=\\'0 0 80 80\\' xmlns=\\'http://www.w3.org/2000/svg\\' fill=\\'none\\' stroke=\\'black\\' stroke-width=\\'5\\' stroke-linecap=\\'round\\' stroke-linejoin=\\'round\\'><rect x=\\'6\\' y=\\'6\\' width=\\'68\\' height=\\'68\\' rx=\\'5\\' ry=\\'5\\'/><circle cx=\\'24\\' cy=\\'24\\' r=\\'8\\'/><path d=\\'M73 49L59 34 37 52m16 20L27 42 7 58\\'/></svg>\");}::selection { background-color: #79FFE1; color: #000;}::-moz-selection { background-color: #79FFE1; color: #000;}@media (min-width: 768px) { ul {display: flex;flex-wrap: wrap; } ul li {width: 230px;padding-right: 20px; }}@media (min-width: 992px) { body {padding: 45px; } h1, header h1 a {font-size: 15px; } ul li {font-size: 13px;box-sizing: border-box;justify-content: flex-start; }}</style> </head> <body> <main> <header> <h1> <i>Index of </i> ';var arr1=it.paths;if(arr1){var value,index=-1,l1=arr1.length-1;while(index<l1){value=arr1[index+=1];out+=' <a href=\"/'+encodeHTML(value.url)+'\">'+encodeHTML(value.name)+'</a> ';} } out+=' </h1> </header> <ul id=\"files\"> ';var arr2=it.files;if(arr2){var value,index=-1,l2=arr2.length-1;while(index<l2){value=arr2[index+=1];out+=' <li> <a href=\"'+encodeHTML(value.relative)+'\" title=\"'+encodeHTML(value.title)+'\" class=\"'+encodeHTML(value.type)+' '+encodeHTML(value.ext)+'\">'+encodeHTML(value.base)+'</a> </li> ';} } out+=' </ul></main> </body></html>';return out;\n}var itself=directory, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['directory']=itself;}}());","(function(){function error(it\n) {\nvar out='<!DOCTYPE html><head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/> <style> body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; cursor: default; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; } main, aside, section { display: flex; justify-content: center; align-items: center; flex-direction: column; } main { height: 100%; } aside { background: #000; flex-shrink: 1; padding: 30px 20px; } aside p { margin: 0; color: #999999; font-size: 14px; line-height: 24px; } aside a { color: #fff; text-decoration: none; } section span { font-size: 24px; font-weight: 500; display: block; border-bottom: 1px solid #EAEAEA; text-align: center; padding-bottom: 20px; width: 100px; } section p { font-size: 14px; font-weight: 400; } section span + p { margin: 20px 0 0 0; } @media (min-width: 768px) { section { height: 40px; flex-direction: row; } section span, section p { height: 100%; line-height: 40px; } section span { border-bottom: 0; border-right: 1px solid #EAEAEA; padding: 0 20px 0 0; width: auto; } section span + p { margin: 0; padding-left: 20px; } aside { padding: 50px 0; } aside p { max-width: 520px; text-align: center; } } </style></head><body> <main> <section> <span>'+(it.statusCode)+'</span> <p>'+(it.message)+'</p> </section> </main></body>';return out;\n}var itself=error, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['error']=itself;}}());","// Native\nconst {promisify} = require('util');\nconst path = require('path');\nconst {createHash} = require('crypto');\nconst {realpath, lstat, createReadStream, readdir} = require('fs');\n\n// Packages\nconst url = require('url');\nconst slasher = require('./glob-slash');\nconst minimatch = require('minimatch');\nconst pathToRegExp = require('path-to-regexp');\nconst mime = require('mime-types');\nconst bytes = require('bytes');\nconst contentDisposition = require('content-disposition');\nconst isPathInside = require('path-is-inside');\nconst parseRange = require('range-parser');\n\n// Other\nconst directoryTemplate = require('./directory');\nconst errorTemplate = require('./error');\n\nconst etags = new Map();\n\nconst calculateSha = (handlers, absolutePath) =>\n\tnew Promise((resolve, reject) => {\n\t\tconst hash = createHash('sha1');\n\t\thash.update(path.extname(absolutePath));\n\t\thash.update('-');\n\t\tconst rs = handlers.createReadStream(absolutePath);\n\t\trs.on('error', reject);\n\t\trs.on('data', buf => hash.update(buf));\n\t\trs.on('end', () => {\n\t\t\tconst sha = hash.digest('hex');\n\t\t\tresolve(sha);\n\t\t});\n\t});\n\nconst sourceMatches = (source, requestPath, allowSegments) => {\n\tconst keys = [];\n\tconst slashed = slasher(source);\n\tconst resolvedPath = path.posix.resolve(requestPath);\n\n\tlet results = null;\n\n\tif (allowSegments) {\n\t\tconst normalized = slashed.replace('*', '(.*)');\n\t\tconst expression = pathToRegExp(normalized, keys);\n\n\t\tresults = expression.exec(resolvedPath);\n\n\t\tif (!results) {\n\t\t\t// clear keys so that they are not used\n\t\t\t// later with empty results. this may\n\t\t\t// happen if minimatch returns true\n\t\t\tkeys.length = 0;\n\t\t}\n\t}\n\n\tif (results || minimatch(resolvedPath, slashed)) {\n\t\treturn {\n\t\t\tkeys,\n\t\t\tresults\n\t\t};\n\t}\n\n\treturn null;\n};\n\nconst toTarget = (source, destination, previousPath) => {\n\tconst matches = sourceMatches(source, previousPath, true);\n\n\tif (!matches) {\n\t\treturn null;\n\t}\n\n\tconst {keys, results} = matches;\n\n\tconst props = {};\n\tconst {protocol} = url.parse(destination);\n\tconst normalizedDest = protocol ? destination : slasher(destination);\n\tconst toPath = pathToRegExp.compile(normalizedDest);\n\n\tfor (let index = 0; index < keys.length; index++) {\n\t\tconst {name} = keys[index];\n\t\tprops[name] = results[index + 1];\n\t}\n\n\treturn toPath(props);\n};\n\nconst applyRewrites = (requestPath, rewrites = [], repetitive) => {\n\t// We need to copy the array, since we're going to modify it.\n\tconst rewritesCopy = rewrites.slice();\n\n\t// If the method was called again, the path was already rewritten\n\t// so we need to make sure to return it.\n\tconst fallback = repetitive ? requestPath : null;\n\n\tif (rewritesCopy.length === 0) {\n\t\treturn fallback;\n\t}\n\n\tfor (let index = 0; index < rewritesCopy.length; index++) {\n\t\tconst {source, destination} = rewrites[index];\n\t\tconst target = toTarget(source, destination, requestPath);\n\n\t\tif (target) {\n\t\t\t// Remove rules that were already applied\n\t\t\trewritesCopy.splice(index, 1);\n\n\t\t\t// Check if there are remaining ones to be applied\n\t\t\treturn applyRewrites(slasher(target), rewritesCopy, true);\n\t\t}\n\t}\n\n\treturn fallback;\n};\n\nconst ensureSlashStart = target => (target.startsWith('/') ? target : `/${target}`);\n\nconst shouldRedirect = (decodedPath, {redirects = [], trailingSlash}, cleanUrl) => {\n\tconst slashing = typeof trailingSlash === 'boolean';\n\tconst defaultType = 301;\n\tconst matchHTML = /(\\.html|\\/index)$/g;\n\n\tif (redirects.length === 0 && !slashing && !cleanUrl) {\n\t\treturn null;\n\t}\n\n\t// By stripping the HTML parts from the decoded\n\t// path *before* handling the trailing slash, we make\n\t// sure that only *one* redirect occurs if both\n\t// config options are used.\n\tif (cleanUrl && matchHTML.test(decodedPath)) {\n\t\tdecodedPath = decodedPath.replace(matchHTML, '');\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\tdecodedPath = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\t\treturn {\n\t\t\ttarget: ensureSlashStart(decodedPath),\n\t\t\tstatusCode: defaultType\n\t\t};\n\t}\n\n\tif (slashing) {\n\t\tconst {ext, name} = path.parse(decodedPath);\n\t\tconst isTrailed = decodedPath.endsWith('/');\n\t\tconst isDotfile = name.startsWith('.');\n\n\t\tlet target = null;\n\n\t\tif (!trailingSlash && isTrailed) {\n\t\t\ttarget = decodedPath.slice(0, -1);\n\t\t} else if (trailingSlash && !isTrailed && !ext && !isDotfile) {\n\t\t\ttarget = `${decodedPath}/`;\n\t\t}\n\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\ttarget = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget: ensureSlashStart(target),\n\t\t\t\tstatusCode: defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\t// This is currently the fastest way to\n\t// iterate over an array\n\tfor (let index = 0; index < redirects.length; index++) {\n\t\tconst {source, destination, type} = redirects[index];\n\t\tconst target = toTarget(source, destination, decodedPath);\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget,\n\t\t\t\tstatusCode: type || defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst appendHeaders = (target, source) => {\n\tfor (let index = 0; index < source.length; index++) {\n\t\tconst {key, value} = source[index];\n\t\ttarget[key] = value;\n\t}\n};\n\nconst getHeaders = async (handlers, config, current, absolutePath, stats) => {\n\tconst {headers: customHeaders = [], etag = false} = config;\n\tconst related = {};\n\tconst {base} = path.parse(absolutePath);\n\tconst relativePath = path.relative(current, absolutePath);\n\n\tif (customHeaders.length > 0) {\n\t\t// By iterating over all headers and never stopping, developers\n\t\t// can specify multiple header sources in the config that\n\t\t// might match a single path.\n\t\tfor (let index = 0; index < customHeaders.length; index++) {\n\t\t\tconst {source, headers} = customHeaders[index];\n\n\t\t\tif (sourceMatches(source, slasher(relativePath))) {\n\t\t\t\tappendHeaders(related, headers);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet defaultHeaders = {};\n\n\tif (stats) {\n\t\tdefaultHeaders = {\n\t\t\t'Content-Length': stats.size,\n\t\t\t// Default to \"inline\", which always tries to render in the browser,\n\t\t\t// if that's not working, it will save the file. But to be clear: This\n\t\t\t// only happens if it cannot find a appropiate value.\n\t\t\t'Content-Disposition': contentDisposition(base, {\n\t\t\t\ttype: 'inline'\n\t\t\t}),\n\t\t\t'Accept-Ranges': 'bytes'\n\t\t};\n\n\t\tif (etag) {\n\t\t\tlet [mtime, sha] = etags.get(absolutePath) || [];\n\t\t\tif (Number(mtime) !== Number(stats.mtime)) {\n\t\t\t\tsha = await calculateSha(handlers, absolutePath);\n\t\t\t\tetags.set(absolutePath, [stats.mtime, sha]);\n\t\t\t}\n\t\t\tdefaultHeaders['ETag'] = `\"${sha}\"`;\n\t\t} else {\n\t\t\tdefaultHeaders['Last-Modified'] = stats.mtime.toUTCString();\n\t\t}\n\n\t\tconst contentType = mime.contentType(base);\n\n\t\tif (contentType) {\n\t\t\tdefaultHeaders['Content-Type'] = contentType;\n\t\t}\n\t}\n\n\tconst headers = Object.assign(defaultHeaders, related);\n\n\tfor (const key in headers) {\n\t\tif (headers.hasOwnProperty(key) && headers[key] === null) {\n\t\t\tdelete headers[key];\n\t\t}\n\t}\n\n\treturn headers;\n};\n\nconst applicable = (decodedPath, configEntry) => {\n\tif (typeof configEntry === 'boolean') {\n\t\treturn configEntry;\n\t}\n\n\tif (Array.isArray(configEntry)) {\n\t\tfor (let index = 0; index < configEntry.length; index++) {\n\t\t\tconst source = configEntry[index];\n\n\t\t\tif (sourceMatches(source, decodedPath)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nconst getPossiblePaths = (relativePath, extension) => [\n\tpath.join(relativePath, `index${extension}`),\n\trelativePath.endsWith('/') ? relativePath.replace(/\\/$/g, extension) : (relativePath + extension)\n].filter(item => path.basename(item) !== extension);\n\nconst findRelated = async (current, relativePath, rewrittenPath, originalStat) => {\n\tconst possible = rewrittenPath ? [rewrittenPath] : getPossiblePaths(relativePath, '.html');\n\n\tlet stats = null;\n\n\tfor (let index = 0; index < possible.length; index++) {\n\t\tconst related = possible[index];\n\t\tconst absolutePath = path.join(current, related);\n\n\t\ttry {\n\t\t\tstats = await originalStat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\tif (stats) {\n\t\t\treturn {\n\t\t\t\tstats,\n\t\t\t\tabsolutePath\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst canBeListed = (excluded, file) => {\n\tconst slashed = slasher(file);\n\tlet whether = true;\n\n\tfor (let mark = 0; mark < excluded.length; mark++) {\n\t\tconst source = excluded[mark];\n\n\t\tif (sourceMatches(source, slashed)) {\n\t\t\twhether = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn whether;\n};\n\nconst renderDirectory = async (current, acceptsJSON, handlers, methods, config, paths) => {\n\tconst {directoryListing, trailingSlash, unlisted = [], renderSingle} = config;\n\tconst slashSuffix = typeof trailingSlash === 'boolean' ? (trailingSlash ? '/' : '') : '/';\n\tconst {relativePath, absolutePath} = paths;\n\n\tconst excluded = [\n\t\t'.DS_Store',\n\t\t'.git',\n\t\t...unlisted\n\t];\n\n\tif (!applicable(relativePath, directoryListing) && !renderSingle) {\n\t\treturn {};\n\t}\n\n\tlet files = await handlers.readdir(absolutePath);\n\n\tconst canRenderSingle = renderSingle && (files.length === 1);\n\n\tfor (let index = 0; index < files.length; index++) {\n\t\tconst file = files[index];\n\n\t\tconst filePath = path.resolve(absolutePath, file);\n\t\tconst details = path.parse(filePath);\n\n\t\t// It's important to indicate that the `stat` call was\n\t\t// spawned by the directory listing, as Now is\n\t\t// simulating those calls and needs to special-case this.\n\t\tlet stats = null;\n\n\t\tif (methods.lstat) {\n\t\t\tstats = await handlers.lstat(filePath, true);\n\t\t} else {\n\t\t\tstats = await handlers.lstat(filePath);\n\t\t}\n\n\t\tdetails.relative = path.join(relativePath, details.base);\n\n\t\tif (stats.isDirectory()) {\n\t\t\tdetails.base += slashSuffix;\n\t\t\tdetails.relative += slashSuffix;\n\t\t\tdetails.type = 'folder';\n\t\t} else {\n\t\t\tif (canRenderSingle) {\n\t\t\t\treturn {\n\t\t\t\t\tsingleFile: true,\n\t\t\t\t\tabsolutePath: filePath,\n\t\t\t\t\tstats\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdetails.ext = details.ext.split('.')[1] || 'txt';\n\t\t\tdetails.type = 'file';\n\n\t\t\tdetails.size = bytes(stats.size, {\n\t\t\t\tunitSeparator: ' ',\n\t\t\t\tdecimalPlaces: 0\n\t\t\t});\n\t\t}\n\n\t\tdetails.title = details.base;\n\n\t\tif (canBeListed(excluded, file)) {\n\t\t\tfiles[index] = details;\n\t\t} else {\n\t\t\tdelete files[index];\n\t\t}\n\t}\n\n\tconst toRoot = path.relative(current, absolutePath);\n\tconst directory = path.join(path.basename(current), toRoot, slashSuffix);\n\tconst pathParts = directory.split(path.sep).filter(Boolean);\n\n\t// Sort to list directories first, then sort alphabetically\n\tfiles = files.sort((a, b) => {\n\t\tconst aIsDir = a.type === 'directory';\n\t\tconst bIsDir = b.type === 'directory';\n\n\t\t/* istanbul ignore next */\n\t\tif (aIsDir && !bIsDir) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif ((bIsDir && !aIsDir) || (a.base > b.base)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\tif (a.base < b.base) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\treturn 0;\n\t}).filter(Boolean);\n\n\t// Add parent directory to the head of the sorted files array\n\tif (toRoot.length > 0) {\n\t\tconst directoryPath = [...pathParts].slice(1);\n\t\tconst relative = path.join('/', ...directoryPath, '..', slashSuffix);\n\n\t\tfiles.unshift({\n\t\t\ttype: 'directory',\n\t\t\tbase: '..',\n\t\t\trelative,\n\t\t\ttitle: relative,\n\t\t\text: ''\n\t\t});\n\t}\n\n\tconst subPaths = [];\n\n\tfor (let index = 0; index < pathParts.length; index++) {\n\t\tconst parents = [];\n\t\tconst isLast = index === (pathParts.length - 1);\n\n\t\tlet before = 0;\n\n\t\twhile (before <= index) {\n\t\t\tparents.push(pathParts[before]);\n\t\t\tbefore++;\n\t\t}\n\n\t\tparents.shift();\n\n\t\tsubPaths.push({\n\t\t\tname: pathParts[index] + (isLast ? slashSuffix : '/'),\n\t\t\turl: index === 0 ? '' : parents.join('/') + slashSuffix\n\t\t});\n\t}\n\n\tconst spec = {\n\t\tfiles,\n\t\tdirectory,\n\t\tpaths: subPaths\n\t};\n\n\tconst output = acceptsJSON ? JSON.stringify(spec) : directoryTemplate(spec);\n\n\treturn {directory: output};\n};\n\nconst sendError = async (absolutePath, response, acceptsJSON, current, handlers, config, spec) => {\n\tconst {err: original, message, code, statusCode} = spec;\n\n\t/* istanbul ignore next */\n\tif (original && process.env.NODE_ENV !== 'test') {\n\t\tconsole.error(original);\n\t}\n\n\tresponse.statusCode = statusCode;\n\n\tif (acceptsJSON) {\n\t\tresponse.setHeader('Content-Type', 'application/json; charset=utf-8');\n\n\t\tresponse.end(JSON.stringify({\n\t\t\terror: {\n\t\t\t\tcode,\n\t\t\t\tmessage\n\t\t\t}\n\t\t}));\n\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\tconst errorPage = path.join(current, `${statusCode}.html`);\n\n\ttry {\n\t\tstats = await handlers.lstat(errorPage);\n\t} catch (err) {\n\t\tif (err.code !== 'ENOENT') {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tif (stats) {\n\t\tlet stream = null;\n\n\t\ttry {\n\t\t\tstream = await handlers.createReadStream(errorPage);\n\n\t\t\tconst headers = await getHeaders(handlers, config, current, errorPage, stats);\n\n\t\t\tresponse.writeHead(statusCode, headers);\n\t\t\tstream.pipe(response);\n\n\t\t\treturn;\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, null);\n\theaders['Content-Type'] = 'text/html; charset=utf-8';\n\n\tresponse.writeHead(statusCode, headers);\n\tresponse.end(errorTemplate({statusCode, message}));\n};\n\nconst internalError = async (...args) => {\n\tconst lastIndex = args.length - 1;\n\tconst err = args[lastIndex];\n\n\targs[lastIndex] = {\n\t\tstatusCode: 500,\n\t\tcode: 'internal_server_error',\n\t\tmessage: 'A server error has occurred',\n\t\terr\n\t};\n\n\treturn sendError(...args);\n};\n\nconst getHandlers = methods => Object.assign({\n\tlstat: promisify(lstat),\n\trealpath: promisify(realpath),\n\tcreateReadStream,\n\treaddir: promisify(readdir),\n\tsendError\n}, methods);\n\nmodule.exports = async (request, response, config = {}, methods = {}) => {\n\tconst cwd = process.cwd();\n\tconst current = config.public ? path.resolve(cwd, config.public) : cwd;\n\tconst handlers = getHandlers(methods);\n\n\tlet relativePath = null;\n\tlet acceptsJSON = null;\n\n\tif (request.headers.accept) {\n\t\tacceptsJSON = request.headers.accept.includes('application/json');\n\t}\n\n\ttry {\n\t\trelativePath = decodeURIComponent(url.parse(request.url).pathname);\n\t} catch (err) {\n\t\treturn sendError('/', response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tlet absolutePath = path.join(current, relativePath);\n\n\t// Prevent path traversal vulnerabilities. We could do this\n\t// by ourselves, but using the package covers all the edge cases.\n\tif (!isPathInside(absolutePath, current)) {\n\t\treturn sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tconst cleanUrl = applicable(relativePath, config.cleanUrls);\n\tconst redirect = shouldRedirect(relativePath, config, cleanUrl);\n\n\tif (redirect) {\n\t\tresponse.writeHead(redirect.statusCode, {\n\t\t\tLocation: encodeURI(redirect.target)\n\t\t});\n\n\t\tresponse.end();\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\t// It's extremely important that we're doing multiple stat calls. This one\n\t// right here could technically be removed, but then the program\n\t// would be slower. Because for directories, we always want to see if a related file\n\t// exists and then (after that), fetch the directory itself if no\n\t// related file was found. However (for files, of which most have extensions), we should\n\t// always stat right away.\n\t//\n\t// When simulating a file system without directory indexes, calculating whether a\n\t// directory exists requires loading all the file paths and then checking if\n\t// one of them includes the path of the directory. As that's a very\n\t// performance-expensive thing to do, we need to ensure it's not happening if not really necessary.\n\n\tif (path.extname(relativePath) !== '') {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rewrittenPath = applyRewrites(relativePath, config.rewrites);\n\n\tif (!stats && (cleanUrl || rewrittenPath)) {\n\t\ttry {\n\t\t\tconst related = await findRelated(current, relativePath, rewrittenPath, handlers.lstat);\n\n\t\t\tif (related) {\n\t\t\t\t({stats, absolutePath} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!stats) {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (stats && stats.isDirectory()) {\n\t\tlet directory = null;\n\t\tlet singleFile = null;\n\n\t\ttry {\n\t\t\tconst related = await renderDirectory(current, acceptsJSON, handlers, methods, config, {\n\t\t\t\trelativePath,\n\t\t\t\tabsolutePath\n\t\t\t});\n\n\t\t\tif (related.singleFile) {\n\t\t\t\t({stats, absolutePath, singleFile} = related);\n\t\t\t} else {\n\t\t\t\t({directory} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\n\t\tif (directory) {\n\t\t\tconst contentType = acceptsJSON ? 'application/json; charset=utf-8' : 'text/html; charset=utf-8';\n\n\t\t\tresponse.statusCode = 200;\n\t\t\tresponse.setHeader('Content-Type', contentType);\n\t\t\tresponse.end(directory);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!singleFile) {\n\t\t\t// The directory listing is disabled, so we want to\n\t\t\t// render a 404 error.\n\t\t\tstats = null;\n\t\t}\n\t}\n\n\tconst isSymLink = stats && stats.isSymbolicLink();\n\n\t// There are two scenarios in which we want to reply with\n\t// a 404 error: Either the path does not exist, or it is a\n\t// symlink while the `symlinks` option is disabled (which it is by default).\n\tif (!stats || (!config.symlinks && isSymLink)) {\n\t\t// allow for custom 404 handling\n\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 404,\n\t\t\tcode: 'not_found',\n\t\t\tmessage: 'The requested path could not be found'\n\t\t});\n\t}\n\n\t// If we figured out that the target is a symlink, we need to\n\t// resolve the symlink and run a new `stat` call just for the\n\t// target of that symlink.\n\tif (isSymLink) {\n\t\ttry {\n\t\t\tabsolutePath = await handlers.realpath(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\t// The requested symlink is invalid\n\t\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\t\tstatusCode: 404,\n\t\t\t\tcode: 'not_found',\n\t\t\t\tmessage: 'The requested path could not be found'\n\t\t\t});\n\t\t}\n\t\tstats = await handlers.lstat(absolutePath);\n\t}\n\n\tconst streamOpts = {};\n\n\t// TODO ? if-range\n\tif (request.headers.range && stats.size) {\n\t\tconst range = parseRange(stats.size, request.headers.range);\n\n\t\tif (typeof range === 'object' && range.type === 'bytes') {\n\t\t\tconst {start, end} = range[0];\n\n\t\t\tstreamOpts.start = start;\n\t\t\tstreamOpts.end = end;\n\n\t\t\tresponse.statusCode = 206;\n\t\t} else {\n\t\t\tresponse.statusCode = 416;\n\t\t\tresponse.setHeader('Content-Range', `bytes */${stats.size}`);\n\t\t}\n\t}\n\n\t// TODO ? multiple ranges\n\n\tlet stream = null;\n\n\ttry {\n\t\tstream = await handlers.createReadStream(absolutePath, streamOpts);\n\t} catch (err) {\n\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, stats);\n\n\t// eslint-disable-next-line no-undefined\n\tif (streamOpts.start !== undefined && streamOpts.end !== undefined) {\n\t\theaders['Content-Range'] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`;\n\t\theaders['Content-Length'] = streamOpts.end - streamOpts.start + 1;\n\t}\n\n\t// We need to check for `headers.ETag` being truthy first, otherwise it will\n\t// match `undefined` being equal to `undefined`, which is true.\n\t//\n\t// Checking for `undefined` and `null` is also important, because `Range` can be `0`.\n\t//\n\t// eslint-disable-next-line no-eq-null\n\tif (request.headers.range == null && headers.ETag && headers.ETag === request.headers['if-none-match']) {\n\t\tresponse.statusCode = 304;\n\t\tresponse.end();\n\n\t\treturn;\n\t}\n\n\tresponse.writeHead(response.statusCode || 200, headers);\n\tstream.pipe(response);\n};\n","// Export all test utilities\nexport * from './shared/mocks.js';\nexport * from './shared/bsp.js';\nexport * from './shared/pak-loader.js';\nexport * from './shared/math.js';\nexport * from './shared/collision.js';\nexport * from './shared/factories.js';\nexport * from './game/factories.js';\nexport * from './game/helpers.js';\nexport * from './game/helpers/physics.js';\nexport * from './game/helpers/save.js';\nexport * from './game/mocks/ai.js';\nexport * from './game/mocks/combat.js';\nexport * from './game/mocks/items.js';\n// Removed export * from './game/mocks.js';\nexport * from './server/mocks/transport.js';\nexport * from './server/mockTransport.js';\nexport * from './server/mockNetDriver.js';\nexport * from './server/mocks/state.js';\nexport * from './server/mocks/connection.js';\nexport * from './server/mocks/commands.js';\nexport * from './server/mocks/master.js';\nexport * from './server/mocks/physics.js';\nexport * from './server/helpers/multiplayer.js';\nexport * from './server/helpers/snapshot.js';\nexport * from './server/helpers/bandwidth.js';\n\n// Setup\nexport * from './setup/browser.js';\nexport * from './setup/canvas.js';\nexport * from './setup/webgpu.js';\n// Safe to export now as gl is lazy loaded\nexport * from './setup/headless-webgl.js';\nexport * from './engine/mocks/webgpu.js';\nexport * from './setup/timing.js';\nexport * from './setup/node.js';\nexport * from './engine/mocks/webgl.js';\nexport * from './engine/mocks/audio.js';\nexport * from './engine/mocks/renderer.js';\nexport * from './engine/mocks/assets.js';\nexport * from './engine/mocks/buffers.js';\nexport * from './engine/mocks/lighting.js';\nexport * from './engine/mocks/particles.js';\nexport * from './engine/rendering.js';\nexport * from './setup/storage.js';\nexport * from './setup/audio.js';\nexport * from './engine/helpers/webgpu-rendering.js';\nexport * from './engine/helpers/webgl-rendering.js';\nexport * from './engine/helpers/webgl-playwright.js';\nexport * from './engine/helpers/pipeline-test-template.js';\nexport * from './engine/helpers/textures.js';\n\n// Client Mocks\nexport * from './client/mocks/input.js';\nexport * from './client/helpers/view.js';\nexport * from './client/helpers/hud.js';\nexport * from './client/mocks/network.js';\nexport * from './client/mocks/download.js';\nexport * from './client/mocks/state.js';\nexport * from './client/mocks/console.js';\nexport * from './client/helpers/prediction.js';\n\n// Visual Testing\nexport * from './visual/snapshots.js';\nexport * from './visual/animation-snapshots.js';\n\n// E2E\nexport * from './e2e/playwright.js';\nexport * from './e2e/network.js';\nexport * from './e2e/visual.js';\n\n// Export types\nexport type { BrowserSetupOptions } from './setup/browser.js';\nexport type { NodeSetupOptions } from './setup/node.js';\nexport type { MockRAF } from './setup/timing.js';\nexport type { StorageScenario } from './setup/storage.js';\nexport type { NetworkSimulator, NetworkCondition } from './e2e/network.js';\nexport type { VisualScenario, VisualDiff } from './e2e/visual.js';\nexport type { HeadlessWebGPUSetup, WebGPUContextState } from './setup/webgpu.js';\nexport type { HeadlessWebGLContext, HeadlessWebGLOptions } from './setup/headless-webgl.js';\nexport type { RenderTestSetup, ComputeTestSetup } from './engine/helpers/webgpu-rendering.js';\nexport type { WebGLRenderTestSetup } from './engine/helpers/webgl-rendering.js';\nexport type { WebGLPlaywrightSetup, WebGLPlaywrightOptions } from './engine/helpers/webgl-playwright.js';\nexport type { GeometryBuffers } from './engine/helpers/pipeline-test-template.js';\n\n// Shared Types\nexport type {\n BinaryWriterMock,\n BinaryStreamMock,\n MessageWriterMock,\n MessageReaderMock,\n PacketMock\n} from './shared/mocks.js';\nexport type { TraceMock, SurfaceMock } from './shared/collision.js';\nexport type { Transform } from './shared/math.js';\nexport type {\n CaptureOptions,\n ComparisonResult,\n ComparisonOptions,\n SnapshotTestOptions\n} from './visual/snapshots.js';\nexport type {\n AnimationSnapshotOptions,\n AnimationSnapshotResult\n} from './visual/animation-snapshots.js';\nexport type { MockCollisionEntityIndex } from './server/mocks/physics.js';\n","import { vi } from 'vitest';\nimport { LegacyMock, legacyFn } from '../vitest-compat.js';\n\n/**\n * Interface for the BinaryWriter mock.\n */\nexport interface BinaryWriterMock {\n writeByte: LegacyMock<[number], void>;\n writeShort: LegacyMock<[number], void>;\n writeLong: LegacyMock<[number], void>;\n writeString: LegacyMock<[string], void>;\n writeBytes: LegacyMock<[Uint8Array], void>;\n getBuffer: LegacyMock<[], Uint8Array>;\n reset: LegacyMock<[], void>;\n writeInt8: LegacyMock<[number], void>;\n writeUint8: LegacyMock<[number], void>;\n writeInt16: LegacyMock<[number], void>;\n writeUint16: LegacyMock<[number], void>;\n writeInt32: LegacyMock<[number], void>;\n writeUint32: LegacyMock<[number], void>;\n writeFloat: LegacyMock<[number], void>;\n getData: LegacyMock<[], Uint8Array>;\n writePos: LegacyMock<[any], void>;\n writeDir: LegacyMock<[any], void>;\n}\n\n/**\n * Creates a mock BinaryWriter for testing binary data writing.\n *\n * @returns A BinaryWriterMock object with all methods mocked using vi.fn().\n */\nexport const createBinaryWriterMock = (): BinaryWriterMock => ({\n writeByte: vi.fn(),\n writeShort: vi.fn(),\n writeLong: vi.fn(),\n writeString: vi.fn(),\n writeBytes: vi.fn(),\n getBuffer: legacyFn<[], Uint8Array>(() => new Uint8Array(0)),\n reset: vi.fn(),\n // Legacy methods (if any)\n writeInt8: vi.fn(),\n writeUint8: vi.fn(),\n writeInt16: vi.fn(),\n writeUint16: vi.fn(),\n writeInt32: vi.fn(),\n writeUint32: vi.fn(),\n writeFloat: vi.fn(),\n getData: legacyFn<[], Uint8Array>(() => new Uint8Array(0)),\n writePos: vi.fn(),\n writeDir: vi.fn(),\n});\n\nexport interface NetChanMock {\n qport: number;\n incomingSequence: number;\n outgoingSequence: number;\n incomingAcknowledged: number;\n incomingReliableAcknowledged: boolean;\n incomingReliableSequence: number;\n outgoingReliableSequence: number;\n reliableMessage: BinaryWriterMock;\n reliableLength: number;\n fragmentSendOffset: number;\n fragmentBuffer: any;\n fragmentLength: number;\n fragmentReceived: number;\n lastReceived: number;\n lastSent: number;\n remoteAddress: { type: string, port: number };\n setup: LegacyMock;\n reset: LegacyMock;\n transmit: LegacyMock;\n process: LegacyMock;\n canSendReliable: LegacyMock<[], boolean>;\n writeReliableByte: LegacyMock;\n writeReliableShort: LegacyMock;\n writeReliableLong: LegacyMock;\n writeReliableString: LegacyMock;\n getReliableData: LegacyMock<[], Uint8Array>;\n needsKeepalive: LegacyMock<[], boolean>;\n isTimedOut: LegacyMock<[], boolean>;\n}\n\n/**\n * Creates a mock NetChan (Network Channel) for testing network communication.\n * Includes mocks for sequencing, reliable messaging, and fragmentation.\n *\n * @returns A mocked NetChan object.\n */\nexport const createNetChanMock = (): NetChanMock => ({\n qport: 1234,\n\n // Sequencing\n incomingSequence: 0,\n outgoingSequence: 0,\n incomingAcknowledged: 0,\n\n // Reliable messaging\n incomingReliableAcknowledged: false,\n incomingReliableSequence: 0,\n outgoingReliableSequence: 0,\n reliableMessage: createBinaryWriterMock(),\n reliableLength: 0,\n\n // Fragmentation\n fragmentSendOffset: 0,\n fragmentBuffer: null,\n fragmentLength: 0,\n fragmentReceived: 0,\n\n // Timing\n lastReceived: 0,\n lastSent: 0,\n\n remoteAddress: { type: 'IP', port: 1234 },\n\n // Methods\n setup: vi.fn(),\n reset: vi.fn(),\n transmit: vi.fn(),\n process: vi.fn(),\n canSendReliable: vi.fn(() => true),\n writeReliableByte: vi.fn(),\n writeReliableShort: vi.fn(),\n writeReliableLong: vi.fn(),\n writeReliableString: vi.fn(),\n getReliableData: legacyFn<[], Uint8Array>(() => new Uint8Array(0)),\n needsKeepalive: vi.fn(() => false),\n isTimedOut: vi.fn(() => false),\n});\n\n/**\n * Interface for the BinaryStream mock.\n */\nexport interface BinaryStreamMock {\n getPosition: LegacyMock<[], number>;\n getReadPosition: LegacyMock<[], number>;\n getLength: LegacyMock<[], number>;\n getRemaining: LegacyMock<[], number>;\n seek: LegacyMock<[number], void>;\n setReadPosition: LegacyMock<[number], void>;\n hasMore: LegacyMock<[], boolean>;\n hasBytes: LegacyMock<[number], boolean>;\n\n readChar: LegacyMock<[], number>;\n readByte: LegacyMock<[], number>;\n readShort: LegacyMock<[], number>;\n readUShort: LegacyMock<[], number>;\n readLong: LegacyMock<[], number>;\n readULong: LegacyMock<[], number>;\n readFloat: LegacyMock<[], number>;\n\n readString: LegacyMock<[], string>;\n readStringLine: LegacyMock<[], string>;\n\n readCoord: LegacyMock<[], number>;\n readAngle: LegacyMock<[], number>;\n readAngle16: LegacyMock<[], number>;\n\n readData: LegacyMock<[number], Uint8Array>;\n\n readPos: LegacyMock<[], any>; // Use proper type if available, e.g., Vec3\n readDir: LegacyMock<[], any>;\n}\n\n/**\n * Creates a mock BinaryStream for testing binary data reading.\n *\n * @returns A BinaryStreamMock object with all methods mocked.\n */\nexport const createBinaryStreamMock = (): BinaryStreamMock => ({\n getPosition: vi.fn(() => 0),\n getReadPosition: vi.fn(() => 0),\n getLength: vi.fn(() => 0),\n getRemaining: vi.fn(() => 0),\n seek: vi.fn(),\n setReadPosition: vi.fn(),\n hasMore: vi.fn(() => true),\n hasBytes: vi.fn((amount: number) => true),\n\n readChar: vi.fn(() => 0),\n readByte: vi.fn(() => 0),\n readShort: vi.fn(() => 0),\n readUShort: vi.fn(() => 0),\n readLong: vi.fn(() => 0),\n readULong: vi.fn(() => 0),\n readFloat: vi.fn(() => 0),\n\n readString: vi.fn(() => ''),\n readStringLine: vi.fn(() => ''),\n\n readCoord: vi.fn(() => 0),\n readAngle: vi.fn(() => 0),\n readAngle16: vi.fn(() => 0),\n\n readData: legacyFn<[number], Uint8Array>((length: number) => new Uint8Array(length)),\n\n readPos: vi.fn(),\n readDir: vi.fn(),\n});\n\n/**\n * Interface for MessageWriter mock, extending BinaryWriterMock with additional message-specific methods.\n */\nexport interface MessageWriterMock extends BinaryWriterMock {\n writeInt: LegacyMock<[number], void>;\n writeVector: LegacyMock<[any], void>;\n}\n\n/**\n * Creates a mock MessageWriter, aliasing writeInt to writeInt32 and writeVector to writePos.\n *\n * @param overrides - Optional overrides for the mock.\n * @returns A MessageWriterMock object.\n */\nexport const createMessageWriterMock = (overrides?: Partial<MessageWriterMock>): MessageWriterMock => {\n const mock = createBinaryWriterMock();\n const writer: MessageWriterMock = {\n ...mock,\n writeInt: mock.writeInt32, // Alias writeInt to writeInt32\n writeVector: mock.writePos, // Alias writeVector to writePos\n ...overrides\n };\n return writer;\n};\n\n/**\n * Interface for MessageReader mock, extending BinaryStreamMock with additional message-specific methods.\n */\nexport interface MessageReaderMock extends BinaryStreamMock {\n readInt: LegacyMock<[], number>;\n readVector: LegacyMock<[], any>;\n}\n\n/**\n * Creates a mock MessageReader, aliasing readInt to readLong and readVector to readPos.\n *\n * @param data - Optional initial data for the reader.\n * @returns A MessageReaderMock object.\n */\nexport const createMessageReaderMock = (data?: Uint8Array): MessageReaderMock => {\n const mock = createBinaryStreamMock();\n const reader: MessageReaderMock = {\n ...mock,\n readInt: mock.readLong, // Alias readInt to readLong (int32)\n readVector: mock.readPos, // Alias readVector to readPos\n };\n return reader;\n};\n\n/**\n * Interface for a generic network packet mock.\n */\nexport interface PacketMock {\n type: 'connection' | 'data' | 'ack' | 'disconnect';\n sequence: number;\n ack: number;\n qport: number;\n data: Uint8Array;\n}\n\n/**\n * Creates a mock network packet.\n *\n * @param overrides - Optional overrides for packet properties.\n * @returns A PacketMock object.\n */\nexport const createPacketMock = (overrides?: Partial<PacketMock>): PacketMock => ({\n type: 'data',\n sequence: 0,\n ack: 0,\n qport: 0,\n data: new Uint8Array(0),\n ...overrides\n});\n","import { vi, type Mock } from 'vitest';\n\n/**\n * Polyfill for the legacy Vitest Mock type which took [Args] and Return as generic arguments.\n * usage: LegacyMock<[Arg1, Arg2], ReturnType>\n */\nexport type LegacyMock<Args extends any[] = any[], Return = any> = Mock<(...args: Args) => Return>;\n\n/**\n * Polyfill for vi.fn with legacy generic signature.\n * usage: legacyFn<[Arg1, Arg2], ReturnType>(impl)\n */\nexport function legacyFn<Args extends any[] = any[], Return = any>(\n implementation?: (...args: Args) => Return\n): LegacyMock<Args, Return> {\n return vi.fn(implementation) as unknown as LegacyMock<Args, Return>;\n}\n","import {\n computePlaneSignBits,\n type CollisionBrush,\n type CollisionModel,\n type CollisionPlane,\n type CollisionNode,\n type CollisionLeaf,\n CONTENTS_SOLID,\n type Vec3\n} from '@quake2ts/shared';\n\n/**\n * Creates a collision plane with the specified normal and distance.\n * Automatically calculates the plane type and signbits.\n *\n * @param normal - The normal vector of the plane.\n * @param dist - The distance from the origin.\n * @returns A CollisionPlane object.\n */\nexport function makePlane(normal: Vec3, dist: number): CollisionPlane {\n return {\n normal,\n dist,\n type: Math.abs(normal.x) === 1 ? 0 : Math.abs(normal.y) === 1 ? 1 : Math.abs(normal.z) === 1 ? 2 : 3,\n signbits: computePlaneSignBits(normal),\n };\n}\n\n/**\n * Creates a simple axis-aligned cubic brush for testing.\n *\n * @param size - The size of the cube (width, height, depth).\n * @param contents - The content flags for the brush (default: CONTENTS_SOLID).\n * @returns A CollisionBrush object.\n */\nexport function makeAxisBrush(size: number, contents = CONTENTS_SOLID): CollisionBrush {\n const half = size / 2;\n const planes = [\n makePlane({ x: 1, y: 0, z: 0 }, half),\n makePlane({ x: -1, y: 0, z: 0 }, half),\n makePlane({ x: 0, y: 1, z: 0 }, half),\n makePlane({ x: 0, y: -1, z: 0 }, half),\n makePlane({ x: 0, y: 0, z: 1 }, half),\n makePlane({ x: 0, y: 0, z: -1 }, half),\n ];\n\n return {\n contents,\n sides: planes.map((plane) => ({ plane, surfaceFlags: 0 })),\n };\n}\n\n/**\n * Creates a BSP node.\n *\n * @param plane - The splitting plane for this node.\n * @param children - Indices of the children (positive for nodes, negative for leaves).\n * @returns A CollisionNode object.\n */\nexport function makeNode(plane: CollisionPlane, children: [number, number]): CollisionNode {\n return { plane, children };\n}\n\n/**\n * Constructs a full CollisionModel from components.\n *\n * @param planes - Array of planes.\n * @param nodes - Array of nodes.\n * @param leaves - Array of leaves.\n * @param brushes - Array of brushes.\n * @param leafBrushes - Array of leaf brush indices.\n * @returns A CollisionModel object.\n */\nexport function makeBspModel(\n planes: CollisionPlane[],\n nodes: CollisionNode[],\n leaves: CollisionLeaf[],\n brushes: CollisionBrush[],\n leafBrushes: number[]\n): CollisionModel {\n return {\n planes,\n nodes,\n leaves,\n brushes,\n leafBrushes,\n bmodels: [],\n };\n}\n\n/**\n * Creates a BSP leaf.\n *\n * @param contents - The content flags for this leaf.\n * @param firstLeafBrush - Index into the leafBrushes array.\n * @param numLeafBrushes - Number of brushes in this leaf.\n * @returns A CollisionLeaf object.\n */\nexport function makeLeaf(contents: number, firstLeafBrush: number, numLeafBrushes: number): CollisionLeaf {\n return { contents, cluster: 0, area: 0, firstLeafBrush, numLeafBrushes };\n}\n\n/**\n * Creates a simplified CollisionModel consisting of a single leaf containing the provided brushes.\n * Useful for testing collision against a set of brushes without full BSP tree traversal.\n *\n * @param brushes - Array of CollisionBrushes to include.\n * @returns A CollisionModel object.\n */\nexport function makeLeafModel(brushes: CollisionBrush[]): CollisionModel {\n const planes = brushes.flatMap((brush) => brush.sides.map((side) => side.plane));\n\n return {\n planes,\n nodes: [],\n leaves: [makeLeaf(0, 0, brushes.length)],\n brushes,\n leafBrushes: brushes.map((_, i) => i),\n bmodels: [],\n };\n}\n\n/**\n * Creates a brush defined by min and max bounds.\n *\n * @param mins - Minimum coordinates (x, y, z).\n * @param maxs - Maximum coordinates (x, y, z).\n * @param contents - Content flags (default: CONTENTS_SOLID).\n * @returns A CollisionBrush object.\n */\nexport function makeBrushFromMinsMaxs(mins: Vec3, maxs: Vec3, contents = CONTENTS_SOLID): CollisionBrush {\n const planes = [\n makePlane({ x: 1, y: 0, z: 0 }, maxs.x),\n makePlane({ x: -1, y: 0, z: 0 }, -mins.x),\n makePlane({ x: 0, y: 1, z: 0 }, maxs.y),\n makePlane({ x: 0, y: -1, z: 0 }, -mins.y),\n makePlane({ x: 0, y: 0, z: 1 }, maxs.z),\n makePlane({ x: 0, y: 0, z: -1 }, -mins.z),\n ];\n\n return {\n contents,\n sides: planes.map((plane) => ({ plane, surfaceFlags: 0 })),\n };\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { PakArchive } from '@quake2ts/engine';\n\nexport function findPakFile(): string | null {\n const possiblePaths = [\n path.resolve(process.cwd(), 'pak.pak'),\n path.resolve(process.cwd(), '../pak.pak'),\n path.resolve(process.cwd(), '../../pak.pak'),\n path.resolve(process.cwd(), '../../../pak.pak'),\n path.resolve(process.cwd(), 'baseq2/pak.pak'),\n path.resolve('/app/quake2ts/pak.pak'), // Common docker/env path\n // Fallback for when running deeply nested tests\n path.resolve(process.cwd(), 'quake2ts/pak.pak'),\n ];\n\n return possiblePaths.find(p => fs.existsSync(p)) || null;\n}\n\nexport function loadMapFromPak(mapName: string): ArrayBuffer | null {\n const pakPath = findPakFile();\n if (!pakPath) {\n console.warn('pak.pak not found');\n return null;\n }\n\n try {\n const pakBuffer = fs.readFileSync(pakPath);\n // Cast to ArrayBuffer because node Buffer is compatible but types might mismatch\n const arrayBuffer = pakBuffer.buffer.slice(pakBuffer.byteOffset, pakBuffer.byteOffset + pakBuffer.byteLength) as ArrayBuffer;\n\n const pak = PakArchive.fromArrayBuffer('pak.pak', arrayBuffer);\n const entry = pak.getEntry(mapName);\n\n if (entry) {\n // PakArchive.readFile returns Uint8Array, we might want ArrayBuffer\n const data = pak.readFile(mapName);\n return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer;\n }\n return null;\n } catch (e) {\n console.error(`Failed to load map ${mapName} from pak:`, e);\n return null;\n }\n}\n","import type { Vec3, Bounds3 } from '@quake2ts/shared/math/vec3';\n\n/**\n * Creates a Vector3 object.\n *\n * @param x - The X coordinate (default: 0).\n * @param y - The Y coordinate (default: 0).\n * @param z - The Z coordinate (default: 0).\n * @returns A Vec3 object.\n */\nexport const createVector3 = (x: number = 0, y: number = 0, z: number = 0): Vec3 => ({\n x,\n y,\n z,\n});\n\n/**\n * Creates a bounds object (min/max vectors).\n *\n * @param mins - The minimum bounds vector (default: 0,0,0).\n * @param maxs - The maximum bounds vector (default: 1,1,1).\n * @returns A Bounds3 object.\n */\nexport const createBounds = (\n mins: Vec3 = createVector3(0, 0, 0),\n maxs: Vec3 = createVector3(1, 1, 1)\n): Bounds3 => ({\n mins,\n maxs,\n});\n\n/**\n * Interface representing a transformation (position, rotation, scale).\n */\nexport interface Transform {\n position: Vec3;\n rotation: Vec3; // Euler angles\n scale: Vec3;\n}\n\n/**\n * Creates a Transform object.\n *\n * @param overrides - Optional overrides for transform properties.\n * @returns A Transform object.\n */\nexport const createTransform = (overrides?: Partial<Transform>): Transform => ({\n position: createVector3(),\n rotation: createVector3(),\n scale: createVector3(1, 1, 1),\n ...overrides\n});\n\n/**\n * Generates a random Vector3 within the specified range.\n *\n * @param min - Minimum value for each component (default: -100).\n * @param max - Maximum value for each component (default: 100).\n * @returns A random Vec3 object.\n */\nexport const randomVector3 = (min: number = -100, max: number = 100): Vec3 => ({\n x: Math.random() * (max - min) + min,\n y: Math.random() * (max - min) + min,\n z: Math.random() * (max - min) + min,\n});\n\nexport { ZERO_VEC3 } from '@quake2ts/shared';\n","import type { Vec3 } from '@quake2ts/shared/math/vec3';\nimport type { TraceResult, CollisionPlane } from '@quake2ts/shared/bsp/collision';\n\n// Re-export trace helpers from shared if they exist there now, or redefine them here if needed\n// The plan says \"Move trace helpers from game/helpers.ts to shared/collision.ts\"\n// But currently `game/helpers.ts` re-exports them from `@quake2ts/shared`.\n// `intersects`, `stairTrace`, `ladderTrace` are in `packages/shared/src/testing.ts`.\n// I will re-export them here for test-utils consumers.\n\nexport { intersects, stairTrace, ladderTrace } from '@quake2ts/shared';\n\n/**\n * Interface for a TraceResult mock, including all standard properties.\n */\nexport interface TraceMock extends Partial<TraceResult> {\n fraction: number;\n endpos: Vec3;\n plane: CollisionPlane;\n surface: { flags: number, name?: string, value?: number };\n contents: number;\n ent: any; // Using any to avoid circular dependency with Entity\n allsolid: boolean;\n startsolid: boolean;\n}\n\n/**\n * Creates a mock TraceResult.\n *\n * @param overrides - Optional overrides for trace properties.\n * @returns A TraceMock object.\n */\nexport const createTraceMock = (overrides?: Partial<TraceMock>): TraceMock => ({\n fraction: 1.0,\n endpos: { x: 0, y: 0, z: 0 },\n plane: { normal: { x: 0, y: 0, z: 0 }, dist: 0, type: 0, signbits: 0 },\n surface: { flags: 0 },\n contents: 0,\n ent: null,\n allsolid: false,\n startsolid: false,\n ...overrides\n});\n\n/**\n * Interface for a Surface mock.\n */\nexport interface SurfaceMock {\n flags: number;\n name: string;\n value: number;\n}\n\n/**\n * Creates a mock Surface.\n *\n * @param overrides - Optional overrides for surface properties.\n * @returns A SurfaceMock object.\n */\nexport const createSurfaceMock = (overrides?: Partial<SurfaceMock>): SurfaceMock => ({\n flags: 0,\n name: 'default',\n value: 0,\n ...overrides\n});\n","import { Cvar, type ConfigStringEntry } from '@quake2ts/engine';\nimport { CvarFlags, PlayerState } from '@quake2ts/shared';\n\n// Re-export Cvar for convenience if needed, but the factory returns Cvar instance\nexport { Cvar } from '@quake2ts/engine';\nexport type { ConfigStringEntry } from '@quake2ts/engine';\n\n/**\n * Creates a mock ConfigStringEntry.\n *\n * @param index - The config string index.\n * @param value - The config string value.\n * @returns A ConfigStringEntry object.\n */\nexport function createConfigStringMock(index: number, value: string): ConfigStringEntry {\n return { index, value };\n}\n\n/**\n * Creates an array of ConfigStringEntry objects from a record.\n *\n * @param entries - A record of index-value pairs (optional).\n * @returns An array of ConfigStringEntry objects.\n */\nexport function createConfigStringArrayMock(entries?: Record<number, string>): ConfigStringEntry[] {\n const result: ConfigStringEntry[] = [];\n if (entries) {\n for (const [key, value] of Object.entries(entries)) {\n result.push({ index: Number(key), value });\n }\n }\n return result;\n}\n\n/**\n * Creates a mock Cvar.\n *\n * @param name - The name of the cvar.\n * @param value - The initial value of the cvar.\n * @param flags - Cvar flags (default: CvarFlags.None).\n * @returns A Cvar instance.\n */\nexport function createCvarMock(name: string, value: string, flags: number = CvarFlags.None): Cvar {\n // We instantiate a real Cvar because it encapsulates logic (latched, default value, etc.)\n // effectively acting as its own mock/implementation for testing purposes.\n return new Cvar({\n name,\n defaultValue: value,\n flags,\n });\n}\n\n/**\n * Creates a mock PlayerState with sensible defaults.\n * Corresponds to player_state_t in q_shared.h.\n *\n * @param overrides - Partial PlayerState to override defaults.\n * @returns A complete PlayerState object.\n */\nexport function createMockPlayerState(overrides?: Partial<PlayerState>): PlayerState {\n return {\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n viewAngles: { x: 0, y: 0, z: 0 },\n onGround: false,\n waterLevel: 0,\n watertype: 0,\n mins: { x: -16, y: -16, z: -24 },\n maxs: { x: 16, y: 16, z: 32 },\n damageAlpha: 0,\n damageIndicators: [],\n blend: [0, 0, 0, 0],\n stats: new Array(32).fill(0),\n kick_angles: { x: 0, y: 0, z: 0 },\n kick_origin: { x: 0, y: 0, z: 0 },\n gunoffset: { x: 0, y: 0, z: 0 },\n gunangles: { x: 0, y: 0, z: 0 },\n gunindex: 0,\n pm_type: 0,\n pm_time: 0,\n pm_flags: 0,\n gun_frame: 0,\n rdflags: 0,\n fov: 90,\n renderfx: 0,\n ...overrides\n };\n}\n","import {\n Entity,\n MoveType,\n Solid,\n ServerFlags,\n DeadFlag,\n EntityFlags\n} from '@quake2ts/game';\nimport type { PlayerState, EntityState } from '@quake2ts/shared';\nimport type { GameStateSnapshot } from '@quake2ts/game';\n\n// -- Shared / Game State Factories --\n\nexport const createPlayerStateFactory = (overrides?: Partial<PlayerState>): PlayerState => ({\n pm_type: 0,\n pm_time: 0,\n pm_flags: 0,\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n viewAngles: { x: 0, y: 0, z: 0 },\n onGround: false,\n waterLevel: 0,\n watertype: 0,\n mins: { x: 0, y: 0, z: 0 },\n maxs: { x: 0, y: 0, z: 0 },\n damageAlpha: 0,\n damageIndicators: [],\n blend: [0, 0, 0, 0],\n stats: [],\n kick_angles: { x: 0, y: 0, z: 0 },\n kick_origin: { x: 0, y: 0, z: 0 },\n gunoffset: { x: 0, y: 0, z: 0 },\n gunangles: { x: 0, y: 0, z: 0 },\n gunindex: 0,\n gun_frame: 0,\n rdflags: 0,\n fov: 90,\n renderfx: 0,\n ...overrides,\n});\n\nexport const createEntityStateFactory = (overrides?: Partial<EntityState>): EntityState => ({\n number: 0,\n origin: { x: 0, y: 0, z: 0 },\n angles: { x: 0, y: 0, z: 0 },\n oldOrigin: { x: 0, y: 0, z: 0 },\n modelIndex: 0,\n modelIndex2: 0,\n modelIndex3: 0,\n modelIndex4: 0,\n frame: 0,\n skinNum: 0,\n effects: 0,\n renderfx: 0,\n solid: 0,\n sound: 0,\n event: 0,\n ...overrides,\n});\n\nexport const createGameStateSnapshotFactory = (overrides?: Partial<GameStateSnapshot>): GameStateSnapshot => ({\n gravity: { x: 0, y: 0, z: -800 },\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n viewangles: { x: 0, y: 0, z: 0 },\n level: { timeSeconds: 0, frameNumber: 0, previousTimeSeconds: 0, deltaSeconds: 0.1 },\n entities: {\n activeCount: 0,\n worldClassname: 'worldspawn',\n },\n packetEntities: [],\n pmFlags: 0,\n pmType: 0,\n waterlevel: 0,\n watertype: 0,\n deltaAngles: { x: 0, y: 0, z: 0 },\n health: 100,\n armor: 0,\n ammo: 0,\n blend: [0, 0, 0, 0],\n damageAlpha: 0,\n damageIndicators: [],\n stats: [],\n kick_angles: { x: 0, y: 0, z: 0 },\n kick_origin: { x: 0, y: 0, z: 0 },\n gunoffset: { x: 0, y: 0, z: 0 },\n gunangles: { x: 0, y: 0, z: 0 },\n gunindex: 0,\n pm_time: 0,\n gun_frame: 0,\n rdflags: 0,\n fov: 90,\n renderfx: 0,\n pm_flags: 0,\n pm_type: 0,\n ...overrides,\n});\n\n// -- Entity Factories --\n\n// Helper to remove internal fields that shouldn't be copied via Object.assign,\n// but PRESERVE the Entity prototype so getters/setters/methods work.\nfunction sanitizeEntity(ent: Entity): Partial<Entity> {\n // We modify the instance in place (it's a factory-created one, so safe to mutate).\n // We want to delete properties that would conflict with EntitySystem internals\n // if this object is merged into another Entity via Object.assign.\n\n // Actually, Object.assign(target, source) only copies enumerable own properties.\n // If we delete them from 'ent', they won't be copied.\n // BUT 'ent' must still be a valid Entity for tests that use the factory result directly.\n\n // The issue in `dm-spawn.test.ts` was:\n // Object.assign(player, createPlayerEntityFactory(...))\n // 'player' is a REAL entity from the system.\n // 'createPlayerEntityFactory' returns an Entity.\n // 'Entity' class defines 'linkNext = null' etc as instance properties.\n // So Object.assign copies 'linkNext: null'.\n\n // We need to remove these properties from the returned object so Object.assign doesn't copy them.\n // But we want to keep the prototype.\n\n const safe = ent as any;\n delete safe.index;\n delete safe.inUse;\n delete safe.freePending;\n delete safe.linkPrevious;\n delete safe.linkNext;\n delete safe.linkcount;\n\n return ent;\n}\n\nexport function createEntityFactory(overrides: Partial<Entity> = {}): Partial<Entity> {\n const ent = new Entity(1);\n Object.assign(ent, {\n classname: 'info_null',\n health: 0,\n max_health: 0,\n takedamage: false,\n deadflag: DeadFlag.Alive,\n solid: Solid.Not,\n movetype: MoveType.None,\n flags: 0,\n svflags: 0,\n ...overrides\n });\n return sanitizeEntity(ent);\n}\n\nexport function createPlayerEntityFactory(overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname: 'player',\n health: 100,\n max_health: 100,\n takedamage: true,\n solid: Solid.BoundingBox,\n movetype: MoveType.Walk,\n svflags: ServerFlags.Player,\n viewheight: 22,\n client: {\n inventory: {\n ammo: { counts: [], caps: [] },\n ownedWeapons: new Set(),\n powerups: new Map(),\n keys: new Set(),\n items: new Set()\n },\n weaponStates: {\n currentWeapon: null,\n lastFireTime: 0,\n weaponFrame: 0,\n weaponIdleTime: 0,\n states: new Map(), // Initialize states map correctly\n activeWeaponId: null\n },\n gun_frame: 0 // Initialize gun_frame\n } as any,\n ...overrides\n });\n}\n\nexport function createMonsterEntityFactory(classname: string, overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname,\n health: 100,\n max_health: 100,\n takedamage: true,\n solid: Solid.BoundingBox,\n movetype: MoveType.Step,\n svflags: ServerFlags.Monster,\n deadflag: DeadFlag.Alive,\n ...overrides\n });\n}\n\nexport function createItemEntityFactory(classname: string, overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname,\n solid: Solid.Trigger,\n movetype: MoveType.Toss,\n ...overrides\n });\n}\n\nexport function createProjectileEntityFactory(classname: string, overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname,\n solid: Solid.Bsp,\n movetype: MoveType.FlyMissile,\n svflags: ServerFlags.Projectile,\n ...overrides\n });\n}\n\nexport function createTriggerEntityFactory(classname: string, overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname,\n solid: Solid.Trigger,\n movetype: MoveType.None,\n ...overrides\n });\n}\n","import { vi, type Mock } from 'vitest';\nimport { Entity, SpawnRegistry, ScriptHookRegistry, type SpawnContext, type EntitySystem } from '@quake2ts/game';\nimport { createRandomGenerator, type Vec3 } from '@quake2ts/shared';\nimport { type BspModel } from '@quake2ts/engine';\nimport { createTraceMock } from '../shared/collision.js';\nimport { LegacyMock } from '../vitest-compat.js';\n\n// Re-export collision helpers from shared collision utility\nexport { intersects, stairTrace, ladderTrace, createTraceMock, createSurfaceMock } from '../shared/collision.js';\n\n// -- Types --\n\nexport interface MockEngine {\n sound: LegacyMock<[Entity, number, string, number, number, number], void>;\n soundIndex: LegacyMock<[string], number>;\n modelIndex: LegacyMock<[string], number>;\n centerprintf: LegacyMock<[Entity, string], void>;\n}\n\nexport interface MockGame {\n random: ReturnType<typeof createRandomGenerator>;\n registerEntitySpawn: LegacyMock<[string, (entity: Entity) => void], void>;\n unregisterEntitySpawn: LegacyMock<[string], void>;\n getCustomEntities: LegacyMock<[], string[]>;\n hooks: ScriptHookRegistry;\n registerHooks: LegacyMock<[any], any>;\n spawnWorld: LegacyMock<[], void>;\n clientBegin: LegacyMock<[any], void>;\n damage: LegacyMock<[number], void>;\n}\n\nexport interface TestContext extends SpawnContext {\n entities: EntitySystem;\n game: MockGame;\n engine: MockEngine;\n}\n\n// -- Factories --\n\nexport const createMockEngine = (): MockEngine => ({\n sound: vi.fn(),\n soundIndex: vi.fn((sound: string) => 0),\n modelIndex: vi.fn((model: string) => 0),\n centerprintf: vi.fn(),\n});\n\nexport const createMockGame = (seed: number = 12345): { game: MockGame, spawnRegistry: SpawnRegistry } => {\n const spawnRegistry = new SpawnRegistry();\n const hooks = new ScriptHookRegistry();\n\n const game: MockGame = {\n random: createRandomGenerator({ seed }),\n registerEntitySpawn: vi.fn((classname: string, spawnFunc: (entity: Entity) => void) => {\n spawnRegistry.register(classname, (entity) => spawnFunc(entity));\n }),\n unregisterEntitySpawn: vi.fn((classname: string) => {\n spawnRegistry.unregister(classname);\n }),\n getCustomEntities: vi.fn(() => Array.from(spawnRegistry.keys())),\n hooks,\n registerHooks: vi.fn((newHooks) => hooks.register(newHooks)),\n spawnWorld: vi.fn(() => {\n hooks.onMapLoad('q2dm1');\n }),\n clientBegin: vi.fn((client) => {\n hooks.onPlayerSpawn({} as any);\n }),\n damage: vi.fn((amount: number) => {\n hooks.onDamage({} as any, null, null, amount, 0, 0);\n })\n };\n\n return { game, spawnRegistry };\n};\n\nexport function createTestContext(options?: { seed?: number, initialEntities?: Entity[] }): TestContext {\n const engine = createMockEngine();\n const seed = options?.seed ?? 12345;\n const { game, spawnRegistry } = createMockGame(seed);\n\n const traceFn = vi.fn((start: Vec3, end: Vec3, mins?: Vec3, maxs?: Vec3) =>\n createTraceMock({\n endpos: end,\n plane: { normal: { x: 0, y: 0, z: 1 }, dist: 0, type: 0, signbits: 0 }\n })\n );\n\n const entityList: Entity[] = options?.initialEntities ? [...options.initialEntities] : [];\n\n // Create hooks helper that interacts with the entity list\n const hooks = game.hooks;\n\n // We need to store the registry reference to implement registerEntityClass/getSpawnFunction\n let currentSpawnRegistry: SpawnRegistry | undefined;\n\n const entities = {\n spawn: vi.fn(() => {\n const ent = new Entity(entityList.length + 1);\n ent.inUse = true;\n entityList.push(ent);\n hooks.onEntitySpawn(ent);\n return ent;\n }),\n free: vi.fn((ent: Entity) => {\n const idx = entityList.indexOf(ent);\n if (idx !== -1) {\n entityList.splice(idx, 1);\n }\n ent.inUse = false;\n hooks.onEntityRemove(ent);\n }),\n finalizeSpawn: vi.fn(),\n freeImmediate: vi.fn((ent: Entity) => {\n const idx = entityList.indexOf(ent);\n if (idx !== -1) {\n entityList.splice(idx, 1);\n }\n ent.inUse = false;\n }),\n setSpawnRegistry: vi.fn((registry: SpawnRegistry) => {\n currentSpawnRegistry = registry;\n }),\n registerEntityClass: vi.fn((classname: string, factory: any) => {\n if (currentSpawnRegistry) {\n currentSpawnRegistry.register(classname, factory);\n }\n }),\n getSpawnFunction: vi.fn((classname: string) => {\n return currentSpawnRegistry?.get(classname);\n }),\n timeSeconds: 10,\n deltaSeconds: 0.1,\n modelIndex: vi.fn(() => 0),\n scheduleThink: vi.fn((entity: Entity, time: number) => {\n entity.nextthink = time;\n }),\n linkentity: vi.fn(),\n trace: traceFn,\n pointcontents: vi.fn(() => 0),\n multicast: vi.fn(),\n unicast: vi.fn(),\n engine,\n scriptHooks: hooks,\n game,\n sound: vi.fn((ent: Entity, chan: number, sound: string, vol: number, attn: number, timeofs: number) => {\n engine.sound(ent, chan, sound, vol, attn, timeofs);\n }),\n soundIndex: vi.fn((sound: string) => engine.soundIndex(sound)),\n useTargets: vi.fn((entity: Entity, activator: Entity | null) => {\n }),\n findByTargetName: vi.fn(() => []),\n pickTarget: vi.fn(() => null),\n killBox: vi.fn(),\n rng: createRandomGenerator({ seed }),\n imports: {\n configstring: vi.fn(),\n trace: traceFn,\n pointcontents: vi.fn(() => 0),\n },\n level: {\n intermission_angle: { x: 0, y: 0, z: 0 },\n intermission_origin: { x: 0, y: 0, z: 0 },\n next_auto_save: 0,\n health_bar_entities: null\n },\n targetNameIndex: new Map(),\n forEachEntity: vi.fn((callback: (ent: Entity) => void) => {\n entityList.forEach(callback);\n }),\n find: vi.fn((predicate: (ent: Entity) => boolean) => {\n return entityList.find(predicate);\n }),\n findByClassname: vi.fn((classname: string) => {\n return entityList.find(e => e.classname === classname);\n }),\n beginFrame: vi.fn((timeSeconds: number) => {\n (entities as any).timeSeconds = timeSeconds;\n }),\n targetAwareness: {\n timeSeconds: 10,\n frameNumber: 1,\n sightEntity: null,\n soundEntity: null,\n activePlayers: [],\n monsterAlertedByPlayers: vi.fn().mockReturnValue(null),\n soundClient: vi.fn().mockReturnValue(null),\n },\n warn: vi.fn(),\n skill: 1,\n deathmatch: false,\n coop: false,\n activeCount: entityList.length,\n world: entityList.find(e => e.classname === 'worldspawn') || new Entity(0),\n } as unknown as EntitySystem;\n\n return {\n keyValues: {},\n entities,\n game,\n engine,\n health_multiplier: 1,\n warn: vi.fn(),\n free: vi.fn(),\n precacheModel: vi.fn(),\n precacheSound: vi.fn(),\n precacheImage: vi.fn(),\n } as unknown as TestContext;\n}\n\nexport function createSpawnTestContext(mapName?: string): TestContext {\n const ctx = createTestContext();\n if (mapName) {\n ctx.game.spawnWorld();\n }\n return ctx;\n}\n\nexport function createCombatTestContext(): TestContext {\n return createTestContext();\n}\n\nexport function createPhysicsTestContext(bspModel?: BspModel): TestContext {\n const context = createTestContext();\n if (bspModel) {\n // If a BSP model is provided, we can set up the trace mock to be more realistic.\n // For now, we'll just store the model on the context if we extended TestContext,\n // but the task specifically asks to \"Include collision world, traces\".\n\n // In a real scenario, we might want to hook up a real BSP physics engine mock here\n // or a mock that uses the BSP data.\n }\n return context;\n}\n\nexport function createEntity(): Entity {\n return new Entity(1);\n}\n\n/**\n * Spawns an entity into the system and applies the properties from the provided data object.\n * This is useful for testing when you want to spawn an entity with specific properties\n * generated by a factory.\n *\n * @param system - The EntitySystem to spawn into.\n * @param data - The partial entity data to apply (e.g. from createPlayerEntityFactory).\n * @returns The spawned and populated Entity.\n */\nexport function spawnEntity(system: EntitySystem, data: Partial<Entity>): Entity {\n const ent = system.spawn();\n Object.assign(ent, data);\n return ent;\n}\n\nexport interface MockImportsAndEngine {\n imports: {\n trace: Mock;\n pointcontents: Mock;\n linkentity: Mock;\n multicast: Mock;\n unicast: Mock;\n };\n engine: {\n trace: Mock;\n sound: Mock;\n centerprintf: Mock;\n modelIndex: Mock;\n soundIndex: Mock;\n };\n}\n\n/**\n * Creates mock imports and engine for use with createGame() from @quake2ts/game.\n * This is a convenience helper that provides all the commonly mocked functions\n * needed to instantiate a real Game instance in tests.\n *\n * @param overrides Optional overrides for specific mock functions\n * @returns An object containing both imports and engine mocks\n *\n * @example\n * ```typescript\n * import { createGame } from '@quake2ts/game';\n * import { createGameImportsAndEngine } from '@quake2ts/test-utils';\n *\n * const { imports, engine } = createGameImportsAndEngine();\n * const game = createGame(imports, engine, { gravity: { x: 0, y: 0, z: -800 } });\n * ```\n */\nexport function createGameImportsAndEngine(overrides?: {\n imports?: Partial<{\n trace: Mock;\n pointcontents: Mock;\n linkentity: Mock;\n multicast: Mock;\n unicast: Mock;\n }>;\n engine?: Partial<{\n trace: Mock;\n sound: Mock;\n centerprintf: Mock;\n modelIndex: Mock;\n soundIndex: Mock;\n }>;\n}): MockImportsAndEngine {\n const defaultTraceResult = {\n fraction: 1.0,\n endpos: { x: 0, y: 0, z: 0 },\n allsolid: false,\n startsolid: false,\n plane: { normal: { x: 0, y: 0, z: 1 }, dist: 0, type: 0, signbits: 0 },\n ent: null,\n };\n\n const defaultTrace = vi.fn().mockReturnValue(defaultTraceResult);\n\n const imports = {\n trace: defaultTrace,\n pointcontents: vi.fn().mockReturnValue(0),\n linkentity: vi.fn(),\n multicast: vi.fn(),\n unicast: vi.fn(),\n ...overrides?.imports,\n };\n\n const engine = {\n trace: vi.fn().mockReturnValue(defaultTraceResult),\n sound: vi.fn(),\n centerprintf: vi.fn(),\n modelIndex: vi.fn().mockReturnValue(1),\n soundIndex: vi.fn().mockReturnValue(1),\n ...overrides?.engine,\n };\n\n return { imports, engine };\n}\n\n/**\n * Creates a mock GameExports object with mocked properties.\n * This is useful for testing game logic that consumes the game object.\n *\n * @param overrides Optional overrides for the game object properties\n */\nexport function createMockGameExports(overrides: Partial<any> = {}): any {\n return {\n init: vi.fn(),\n shutdown: vi.fn(),\n frame: vi.fn().mockReturnValue({ state: {} }),\n clientThink: vi.fn(),\n time: 0,\n spawnWorld: vi.fn(),\n deathmatch: false,\n coop: false,\n skill: 1,\n gameImports: {},\n gameEngine: {},\n entities: {\n spawn: vi.fn(),\n free: vi.fn(),\n find: vi.fn(),\n findByClassname: vi.fn(),\n findByRadius: vi.fn(() => []),\n forEachEntity: vi.fn(),\n timeSeconds: 0,\n ...overrides.entities,\n },\n multicast: vi.fn(),\n unicast: vi.fn(),\n trace: vi.fn().mockReturnValue(createTraceMock()),\n pointcontents: vi.fn().mockReturnValue(0),\n sound: vi.fn(),\n centerprintf: vi.fn(),\n random: createRandomGenerator({ seed: 12345 }),\n ...overrides\n };\n}\n","import { Entity, MoveType, Solid, EntitySystem } from '@quake2ts/game';\nimport { Vec3, copyVec3, TraceResult, addVec3, subtractVec3, scaleVec3, lengthVec3, normalizeVec3, dotVec3 } from '@quake2ts/shared';\nimport { TestContext } from '../helpers.js';\nimport { intersects, createTraceMock } from '../../shared/collision.js';\n\n/**\n * Creates a physics test scenario with pre-configured geometry.\n * NOTE: Since real BSP loading is complex, this often uses block entities\n * or mocked trace functions unless a real BSP is loaded in the context.\n */\nexport interface PhysicsScenario {\n ground: Entity;\n walls: Entity[];\n setup: (context: TestContext) => void;\n}\n\nexport function createPhysicsTestScenario(\n scenarioType: 'stairs' | 'ladder' | 'platform' | 'slope' | 'room',\n context: TestContext\n): PhysicsScenario {\n const walls: Entity[] = [];\n const ground = context.entities.spawn();\n ground.classname = 'func_wall';\n ground.solid = Solid.Bsp;\n ground.movetype = MoveType.Push;\n ground.origin = { x: 0, y: 0, z: -10 };\n ground.mins = { x: -1000, y: -1000, z: -10 };\n ground.maxs = { x: 1000, y: 1000, z: 0 };\n context.entities.linkentity(ground);\n\n const setupStairs = () => {\n // Create steps\n for (let i = 0; i < 5; i++) {\n const step = context.entities.spawn();\n step.classname = 'func_wall';\n step.solid = Solid.Bsp;\n step.origin = { x: 100 + i * 32, y: 0, z: i * 16 };\n step.mins = { x: 0, y: -64, z: 0 };\n step.maxs = { x: 32, y: 64, z: 16 };\n context.entities.linkentity(step);\n walls.push(step);\n }\n };\n\n const setupLadder = () => {\n const ladder = context.entities.spawn();\n ladder.classname = 'func_wall'; // Or func_ladder if available\n ladder.solid = Solid.Bsp;\n ladder.origin = { x: 100, y: 0, z: 0 };\n ladder.mins = { x: 0, y: -32, z: 0 };\n ladder.maxs = { x: 10, y: 32, z: 200 };\n // surfaceFlags is a numeric property if we cast to any or define it, usually on entity state/brush\n // But Entity class might not expose it directly unless it has collision fields\n // Assuming Entity has it or we just ignore for mock tests\n (ladder as any).surfaceFlags = 1; // SURF_LADDER\n context.entities.linkentity(ladder);\n walls.push(ladder);\n };\n\n const setupPlatform = () => {\n const plat = context.entities.spawn();\n plat.classname = 'func_plat';\n plat.solid = Solid.Bsp;\n plat.movetype = MoveType.Push;\n plat.origin = { x: 0, y: 0, z: 0 }; // Starts low\n plat.mins = { x: -64, y: -64, z: 0 };\n plat.maxs = { x: 64, y: 64, z: 10 };\n // Platform logic handles movement, but for physics collision it's just a solid box moving\n context.entities.linkentity(plat);\n walls.push(plat);\n };\n\n if (scenarioType === 'stairs') setupStairs();\n else if (scenarioType === 'ladder') setupLadder();\n else if (scenarioType === 'platform') setupPlatform();\n\n return {\n ground,\n walls,\n setup: (ctx) => {\n // Additional setup if needed\n }\n };\n}\n\n\n/**\n * Simulates a single physics step for an entity.\n * Uses the game's runPmove logic or manually invokes similar steps.\n * This is useful for testing specific movement mechanics in isolation.\n */\nexport function simulateMovement(entity: Entity, destination: Vec3, context: TestContext): TraceResult {\n // Calculate velocity needed to reach destination in one frame (assuming 0.1s tick)\n const dt = 0.1;\n const delta = subtractVec3(destination, entity.origin);\n const dist = lengthVec3(delta);\n\n if (dist < 0.001) {\n return createTraceMock({ fraction: 1.0, endpos: destination }) as unknown as TraceResult;\n }\n\n const dir = normalizeVec3(delta);\n entity.velocity = scaleVec3(dir, dist / dt);\n\n // Perform trace to check if movement is possible\n const start = { ...entity.origin };\n const end = destination;\n\n // Check if context.entities.trace is a mocked function we can control or real one\n // We assume the interface matches\n const tr = context.entities.trace(start, entity.mins, entity.maxs, end, entity, (entity as any).clipmask || 0);\n\n // Update origin if not stuck\n if (!tr.startsolid && !tr.allsolid) {\n // Trace result returns endpos which is where we stopped\n if (tr.endpos) {\n entity.origin = { ...tr.endpos };\n } else {\n // Fallback if trace result is simple\n // In real engine trace always has endpos\n entity.origin = { ...end }; // Should be tr.endpos really\n }\n context.entities.linkentity(entity);\n }\n\n // Return TraceResult, cast if needed as we don't import CollisionTraceResult specifically\n return tr as unknown as TraceResult;\n}\n\n/**\n * Simulates gravity application on an entity.\n */\nexport function simulateGravity(entity: Entity, deltaTime: number, context: TestContext): void {\n const gravity = (context.game as any).cvars?.gravity?.value ?? 800; // MockGame might not have cvars yet\n if (entity.groundentity || !entity.movetype) return;\n\n // Simple Euler integration for gravity\n entity.velocity = {\n x: entity.velocity.x,\n y: entity.velocity.y,\n z: entity.velocity.z - gravity * deltaTime\n };\n\n // Check ground after applying gravity velocity\n // Simple check: trace down\n const start = { ...entity.origin };\n const end = { x: start.x, y: start.y, z: start.z - 0.25 };\n\n const tr = context.entities.trace(start, entity.mins, entity.maxs, end, entity, (entity as any).clipmask || 0);\n\n if (tr.fraction < 1.0) {\n entity.groundentity = tr.ent || context.entities.world;\n entity.velocity = { ...entity.velocity, z: 0 };\n // Snap to ground\n if (tr.endpos) {\n entity.origin = { ...entity.origin, z: tr.endpos.z };\n }\n } else {\n entity.groundentity = null; // Assigning null instead of undefined\n }\n}\n\n/**\n * Simulates a jump action.\n */\nexport function simulateJump(entity: Entity, context: TestContext): void {\n if (!entity.groundentity) return;\n\n entity.groundentity = null;\n entity.velocity = { ...entity.velocity, z: 270 }; // Standard jump velocity\n}\n","import { Entity, LevelState } from '@quake2ts/game';\nimport type { GameSaveFile } from '@quake2ts/game';\nimport { TestContext } from '../helpers.js';\nimport { Vec3 } from '@quake2ts/shared';\n\n// If LevelFrameState is not exported from @quake2ts/game, we define a compatible interface here\nexport interface LevelFrameState {\n readonly frameNumber: number;\n readonly timeSeconds: number;\n readonly previousTimeSeconds: number;\n readonly deltaSeconds: number;\n}\n\n/**\n * Interface for a mock save game object.\n */\nexport interface MockSaveGame {\n game: GameSaveFile;\n entities: any[]; // Serialized entities\n client: any; // Serialized client\n level: LevelState;\n timestamp: number;\n}\n\n/**\n * Creates a mock SaveGame object.\n *\n * @param overrides - Optional overrides for save game properties.\n * @returns A MockSaveGame object.\n */\nexport function createMockSaveGame(overrides?: Partial<MockSaveGame>): MockSaveGame {\n const defaultLevelState: LevelFrameState = {\n frameNumber: 100,\n timeSeconds: 10.0,\n previousTimeSeconds: 9.9,\n deltaSeconds: 0.1\n };\n\n const defaultLevel: LevelState = {\n next_auto_save: 0,\n health_bar_entities: [null, null, null, null],\n intermission_angle: { x: 0, y: 0, z: 0 },\n intermission_origin: { x: 0, y: 0, z: 0 },\n helpmessage1: \"\",\n helpmessage2: \"\",\n help1changed: 0,\n help2changed: 0,\n mapname: 'test_map'\n };\n\n const defaultGame: GameSaveFile = {\n version: 2,\n timestamp: Date.now(),\n map: 'test_map',\n difficulty: 1,\n playtimeSeconds: 100,\n level: defaultLevelState,\n entities: {\n timeSeconds: 10.0,\n pool: { capacity: 1024, activeOrder: [], freeList: [], pendingFree: [] },\n entities: [],\n thinks: [],\n awareness: {\n frameNumber: 0,\n sightEntityIndex: null,\n sightEntityFrame: 0,\n soundEntityIndex: null,\n soundEntityFrame: 0,\n sound2EntityIndex: null,\n sound2EntityFrame: 0,\n sightClientIndex: null\n },\n crossLevelFlags: 0,\n crossUnitFlags: 0,\n level: defaultLevel\n },\n rng: { mt: { index: 0, state: [] } },\n gameState: {},\n cvars: [],\n configstrings: []\n };\n\n return {\n game: overrides?.game ?? defaultGame,\n entities: overrides?.entities ?? [],\n client: overrides?.client ?? {},\n level: overrides?.level ?? defaultLevel,\n timestamp: overrides?.timestamp ?? Date.now()\n };\n}\n\n/**\n * Captures the current test context state as a save game snapshot.\n * Note: This is a simplified snapshot for testing, not a full serialization.\n *\n * @param context - The test context to snapshot.\n * @returns A MockSaveGame representing the current state.\n */\nexport function createSaveGameSnapshot(context: TestContext): MockSaveGame {\n const entities: any[] = [];\n context.entities.forEachEntity((ent: Entity) => {\n if (!ent.inUse) return;\n // Simple serialization of essential fields\n entities.push({\n classname: ent.classname,\n origin: { ...ent.origin },\n angles: { ...ent.angles },\n health: ent.health,\n spawnflags: ent.spawnflags,\n targetname: ent.targetname\n });\n });\n\n // We need to construct a LevelFrameState for the save file\n const levelFrameState: LevelFrameState = {\n frameNumber: (context.game as any).level?.frameNumber ?? 0,\n timeSeconds: (context.game as any).level?.timeSeconds ?? (context.game as any).time ?? 0,\n previousTimeSeconds: 0,\n deltaSeconds: 0.1\n };\n\n const currentLevel = (context.entities as any).level || {};\n\n return {\n game: {\n version: 2,\n timestamp: Date.now(),\n map: 'snapshot_map',\n difficulty: 0,\n playtimeSeconds: (context.game as any).time ?? 0,\n level: levelFrameState,\n entities: context.entities.createSnapshot(),\n rng: { mt: { index: 0, state: [] } },\n gameState: {},\n cvars: [],\n configstrings: []\n },\n entities,\n client: {},\n level: currentLevel as LevelState,\n timestamp: Date.now()\n };\n}\n\n/**\n * Restores a test context from a save game snapshot.\n *\n * @param saveGame - The save game to restore.\n * @param context - The test context to update.\n */\nexport function restoreSaveGameSnapshot(saveGame: MockSaveGame, context: TestContext): void {\n // Clear existing entities (except world/clients if needed, but for test usually clear all)\n // Assuming context.entities has a way to reset or we just free all\n // context.entities.reset() // if available\n\n // Re-spawn entities\n saveGame.entities.forEach(entData => {\n const ent = context.entities.spawn();\n ent.classname = entData.classname;\n ent.origin = { ...entData.origin };\n ent.angles = { ...entData.angles };\n ent.health = entData.health;\n ent.spawnflags = entData.spawnflags;\n ent.targetname = entData.targetname;\n context.entities.linkentity(ent);\n });\n\n // Restore level state\n if ((context.entities as any).level) {\n Object.assign((context.entities as any).level, saveGame.level);\n }\n}\n\n/**\n * Result of comparing two save games.\n */\nexport interface SaveGameDiff {\n entityCountDiff: number;\n differentEntities: { index: number, field: string, expected: any, actual: any }[];\n gameStateDiffs: string[];\n}\n\n/**\n * Compares two save games and returns the differences.\n * Useful for testing save/load determinism.\n *\n * @param a - First save game.\n * @param b - Second save game.\n * @returns A SaveGameDiff object.\n */\nexport function compareSaveGames(a: MockSaveGame, b: MockSaveGame): SaveGameDiff {\n const diffs: SaveGameDiff = {\n entityCountDiff: a.entities.length - b.entities.length,\n differentEntities: [],\n gameStateDiffs: []\n };\n\n // Compare game state\n const aTime = a.game.level.timeSeconds;\n const bTime = b.game.level.timeSeconds;\n if (aTime !== bTime) diffs.gameStateDiffs.push(`time: ${aTime} vs ${bTime}`);\n\n const aFrame = a.game.level.frameNumber;\n const bFrame = b.game.level.frameNumber;\n if (aFrame !== bFrame) diffs.gameStateDiffs.push(`framenum: ${aFrame} vs ${bFrame}`);\n\n // Compare entities (naive index matching)\n const count = Math.min(a.entities.length, b.entities.length);\n for (let i = 0; i < count; i++) {\n const entA = a.entities[i];\n const entB = b.entities[i];\n\n if (entA.classname !== entB.classname) {\n diffs.differentEntities.push({ index: i, field: 'classname', expected: entA.classname, actual: entB.classname });\n }\n if (entA.health !== entB.health) {\n diffs.differentEntities.push({ index: i, field: 'health', expected: entA.health, actual: entB.health });\n }\n // Vector checks\n if (!vec3Equals(entA.origin, entB.origin)) {\n diffs.differentEntities.push({ index: i, field: 'origin', expected: entA.origin, actual: entB.origin });\n }\n }\n\n return diffs;\n}\n\nfunction vec3Equals(a: Vec3, b: Vec3, epsilon = 0.001): boolean {\n return Math.abs(a.x - b.x) < epsilon &&\n Math.abs(a.y - b.y) < epsilon &&\n Math.abs(a.z - b.z) < epsilon;\n}\n","import { vi, type Mock } from 'vitest';\nimport { Entity, EntitySystem, MonsterMove, MonsterAction, AIAction } from '@quake2ts/game';\n\nexport interface MockAI {\n checkAttack: Mock;\n findTarget: Mock;\n visible: Mock;\n infront: Mock;\n}\n\nexport interface MockMonsterAI {\n stand: Mock;\n walk: Mock;\n run: Mock;\n dodge: Mock;\n attack: Mock;\n melee: Mock;\n sight: Mock;\n idle: Mock;\n}\n\nexport function createMockAI(overrides: Partial<MockAI> = {}): MockAI {\n return {\n checkAttack: vi.fn(() => false),\n findTarget: vi.fn(() => null),\n visible: vi.fn(() => true),\n infront: vi.fn(() => true),\n ...overrides\n };\n}\n\nexport function createMockMonsterAI(overrides: Partial<MockMonsterAI> = {}): MockMonsterAI {\n return {\n stand: vi.fn(),\n walk: vi.fn(),\n run: vi.fn(),\n dodge: vi.fn(),\n attack: vi.fn(),\n melee: vi.fn(),\n sight: vi.fn(),\n idle: vi.fn(),\n ...overrides\n };\n}\n\nexport function createMockMonsterMove(\n first: number,\n last: number,\n think: (self: Entity, context: EntitySystem) => void,\n action: (self: Entity, dist: number, context: EntitySystem) => void\n): MonsterMove {\n const frames = [];\n for (let i = first; i <= last; i++) {\n frames.push({\n ai: action,\n dist: 0,\n think: think\n });\n }\n\n return {\n firstframe: first,\n lastframe: last,\n frames,\n endfunc: null\n };\n}\n","import { vi, type Mock } from 'vitest';\nimport { DamageMod, Entity, ArmorType, type RegularArmorState, type PowerArmorState } from '@quake2ts/game';\n\nexport interface MockDamageInfo {\n damage: number;\n mod: DamageMod;\n knockback: number;\n attacker: Entity | null;\n inflictor: Entity | null;\n dir: { x: number, y: number, z: number } | null;\n point: { x: number, y: number, z: number } | null;\n}\n\nexport function createMockDamageInfo(overrides: Partial<MockDamageInfo> = {}): MockDamageInfo {\n return {\n damage: 10,\n mod: DamageMod.UNKNOWN,\n knockback: 0,\n attacker: null,\n inflictor: null,\n dir: null,\n point: null,\n ...overrides\n };\n}\n\nconst WEAPON_NAMES: Record<string, string> = {\n 'weapon_blaster': 'Blaster',\n 'weapon_shotgun': 'Shotgun',\n 'weapon_supershotgun': 'Super Shotgun',\n 'weapon_machinegun': 'Machinegun',\n 'weapon_chaingun': 'Chaingun',\n 'weapon_grenadelauncher': 'Grenade Launcher',\n 'weapon_rocketlauncher': 'Rocket Launcher',\n 'weapon_hyperblaster': 'HyperBlaster',\n 'weapon_railgun': 'Railgun',\n 'weapon_bfg': 'BFG10K',\n};\n\nexport interface MockWeapon {\n name: string;\n ammoType: string;\n ammoUse: number;\n selection: Mock;\n think: Mock;\n command: Mock;\n}\n\nexport function createMockWeapon(name: string = 'Mock Weapon'): MockWeapon {\n const displayName = WEAPON_NAMES[name] || name;\n return {\n name: displayName,\n ammoType: 'bullets',\n ammoUse: 1,\n selection: vi.fn(),\n think: vi.fn(),\n command: vi.fn(),\n };\n}\n\nexport const mockMonsterAttacks: {\n fireBlaster: Mock;\n fireRocket: Mock;\n fireGrenade: Mock;\n fireHeat: Mock;\n fireBullet: Mock;\n fireShotgun: Mock;\n fireRailgun: Mock;\n fireBFG: Mock;\n} = {\n fireBlaster: vi.fn(),\n fireRocket: vi.fn(),\n fireGrenade: vi.fn(),\n fireHeat: vi.fn(),\n fireBullet: vi.fn(),\n fireShotgun: vi.fn(),\n fireRailgun: vi.fn(),\n fireBFG: vi.fn(),\n};\n\nconst FORWARD_ANGLES = { x: 0, y: 0, z: 0 } as const;\nconst ORIGIN = { x: 0, y: 0, z: 0 } as const;\n\nexport function createRegularArmorState(armorType: ArmorType | null, armorCount: number): RegularArmorState {\n return { armorType, armorCount };\n}\n\nexport function createPowerArmorState(partial: Partial<PowerArmorState> = {}): PowerArmorState {\n return {\n type: null,\n cellCount: 0,\n angles: FORWARD_ANGLES,\n origin: ORIGIN,\n health: 100,\n ...partial,\n };\n}\n","import {\n type PlayerInventory,\n createPlayerInventory,\n WeaponId,\n PowerupId,\n KeyId,\n createAmmoInventory\n} from '@quake2ts/game';\nimport {\n type BaseItem,\n type WeaponItem,\n type HealthItem,\n type ArmorItem,\n type PowerupItem,\n type PowerArmorItem,\n type KeyItem,\n type FlagItem,\n WEAPON_ITEMS,\n HEALTH_ITEMS,\n ARMOR_ITEMS,\n POWERUP_ITEMS,\n POWER_ARMOR_ITEMS,\n KEY_ITEMS,\n FLAG_ITEMS,\n getAmmoItemDefinition,\n AmmoItemId\n} from '@quake2ts/game';\n// import { getAmmoItemDefinition, AmmoItemId } from '@quake2ts/game/src/inventory/ammo.js';\n\n/**\n * Creates a mock player inventory with default values suitable for testing.\n * Can be customized with overrides.\n */\nexport function createMockInventory(overrides: Partial<PlayerInventory> = {}): PlayerInventory {\n const defaultInventory = createPlayerInventory();\n\n // Merge simple properties\n const inventory: PlayerInventory = {\n ...defaultInventory,\n ...overrides\n };\n\n // If overrides.ammo is provided (as a full object), it replaces the default.\n // We don't merge deeper here because the caller usually provides a complete mock\n // or is happy with the default structure.\n\n return inventory;\n}\n\n/**\n * Generic factory for any item type.\n * Attempts to find a predefined item by ID first, then applies overrides.\n */\nexport function createMockItem(id: string, overrides: Partial<BaseItem> = {}): BaseItem {\n let base: BaseItem | undefined;\n\n // Search in all registries\n base = WEAPON_ITEMS[id] ||\n HEALTH_ITEMS[id] ||\n ARMOR_ITEMS[id] ||\n POWERUP_ITEMS[id] ||\n POWER_ARMOR_ITEMS[id] ||\n KEY_ITEMS[id] ||\n FLAG_ITEMS[id];\n\n if (!base) {\n // If not found, create a generic minimal item\n base = {\n id,\n name: `Mock Item ${id}`\n };\n }\n\n return {\n ...base,\n ...overrides\n };\n}\n\n/**\n * Creates a mock WeaponItem\n */\nexport function createMockWeaponItem(weaponId: WeaponId, overrides: Partial<WeaponItem> = {}): WeaponItem {\n // Find the item definition for this weaponId\n const found = Object.values(WEAPON_ITEMS).find(w => w.weaponId === weaponId);\n\n const base: WeaponItem = found ? { ...found } : {\n type: 'weapon',\n id: `weapon_${weaponId}`,\n name: `Mock Weapon ${weaponId}`,\n weaponId,\n ammoType: null,\n initialAmmo: 0,\n pickupAmmo: 0,\n fireRate: 1\n };\n\n return { ...base, ...overrides };\n}\n\n/**\n * Creates a mock HealthItem\n */\nexport function createMockHealthItem(amount: number, overrides: Partial<HealthItem> = {}): HealthItem {\n return {\n type: 'health',\n id: 'item_health_mock',\n name: 'Mock Health',\n amount,\n max: 100,\n ...overrides\n };\n}\n\n/**\n * Creates a mock ArmorItem\n */\nexport function createMockArmorItem(amount: number, overrides: Partial<ArmorItem> = {}): ArmorItem {\n return {\n type: 'armor',\n id: 'item_armor_mock',\n name: 'Mock Armor',\n amount,\n ...overrides\n };\n}\n\n/**\n * Creates a mock AmmoItem\n */\nexport function createMockAmmoItem(ammoItemId: AmmoItemId, overrides: Partial<BaseItem> = {}): BaseItem {\n const def = getAmmoItemDefinition(ammoItemId);\n if (!def) {\n throw new Error(`Unknown ammo item id: ${ammoItemId}`);\n }\n\n const base: BaseItem = {\n id: def.id,\n name: `Mock Ammo ${def.id}`\n };\n\n return {\n ...base,\n ...overrides\n };\n}\n\n\n/**\n * Creates a mock PowerupItem\n */\nexport function createMockPowerupItem(id: string, duration: number, overrides: Partial<PowerupItem> = {}): PowerupItem {\n const found = POWERUP_ITEMS[id];\n const base: PowerupItem = found ? { ...found } : {\n type: 'powerup',\n id,\n name: `Mock Powerup ${id}`,\n timer: duration\n };\n\n if (duration !== undefined && !found) {\n base.timer = duration;\n }\n\n return { ...base, ...overrides };\n}\n","import { NetworkTransport } from '@quake2ts/server';\nimport { NetDriver } from '@quake2ts/shared';\nimport { vi, type Mock } from 'vitest';\nimport { LegacyMock, legacyFn } from '../../vitest-compat.js';\n\n/**\n * Mock implementation of the NetworkTransport interface for server testing.\n * Allows simulating connections and errors.\n */\nexport class MockTransport implements NetworkTransport {\n public onConnectionCallback?: (driver: NetDriver, info?: any) => void;\n public onErrorCallback?: (error: Error) => void;\n public address: string = '127.0.0.1';\n public port: number = 27910;\n public sentMessages: Uint8Array[] = [];\n public receivedMessages: Uint8Array[] = [];\n public listening: boolean = false;\n\n public listenSpy: LegacyMock<[number], Promise<void>> = legacyFn(async (port: number) => {\n this.port = port;\n this.listening = true;\n });\n public closeSpy: LegacyMock<[], void> = legacyFn(() => {\n this.listening = false;\n });\n\n /**\n * Start listening on the specified port.\n */\n async listen(port: number): Promise<void> {\n return this.listenSpy(port);\n }\n\n /**\n * Close the transport.\n */\n close() {\n this.closeSpy();\n }\n\n /**\n * Register a callback for new connections.\n */\n onConnection(callback: (driver: NetDriver, info?: any) => void) {\n this.onConnectionCallback = callback;\n }\n\n /**\n * Register a callback for errors.\n */\n onError(callback: (error: Error) => void) {\n this.onErrorCallback = callback;\n }\n\n /**\n * Check if the transport is currently listening.\n */\n public isListening(): boolean {\n return this.listening;\n }\n\n /**\n * Helper to simulate a new connection.\n * @param driver The network driver for the connection.\n * @param info Optional connection info.\n */\n public simulateConnection(driver: NetDriver, info?: any) {\n if (this.onConnectionCallback) {\n this.onConnectionCallback(driver, info);\n }\n }\n\n /**\n * Helper to simulate an error.\n * @param error The error to simulate.\n */\n public simulateError(error: Error) {\n if (this.onErrorCallback) {\n this.onErrorCallback(error);\n }\n }\n}\n\n/**\n * Interface for mock UDP socket.\n * This is a partial mock of Node.js dgram.Socket or similar.\n */\nexport interface MockUDPSocket {\n send: (msg: Uint8Array, offset: number, length: number, port: number, address: string, callback?: (error: Error | null, bytes: number) => void) => void;\n on: (event: string, callback: (...args: any[]) => void) => void;\n close: () => void;\n bind: (port: number, address?: string) => void;\n address: () => { address: string; family: string; port: number };\n}\n\n/**\n * Creates a mock UDP socket.\n * @param overrides Optional overrides for the socket methods.\n */\nexport function createMockUDPSocket(overrides?: Partial<MockUDPSocket>): MockUDPSocket {\n const socket: MockUDPSocket = {\n send: vi.fn(),\n on: vi.fn(),\n close: vi.fn(),\n bind: vi.fn(),\n address: vi.fn().mockReturnValue({ address: '127.0.0.1', family: 'IPv4', port: 0 }),\n ...overrides,\n };\n return socket;\n}\n\n/**\n * Interface for network address.\n */\nexport interface NetworkAddress {\n ip: string;\n port: number;\n}\n\n/**\n * Creates a mock network address.\n * @param ip IP address (default: '127.0.0.1')\n * @param port Port number (default: 27910)\n */\nexport function createMockNetworkAddress(ip: string = '127.0.0.1', port: number = 27910): NetworkAddress {\n return { ip, port };\n}\n\n/**\n * Creates a configured MockTransport instance.\n * @param address Address to bind to (default: '127.0.0.1')\n * @param port Port to listen on (default: 27910)\n * @param overrides Optional overrides for the transport properties.\n */\nexport function createMockTransport(\n address: string = '127.0.0.1',\n port: number = 27910,\n overrides?: Partial<MockTransport>\n): MockTransport {\n const transport = new MockTransport();\n transport.address = address;\n transport.port = port;\n Object.assign(transport, overrides);\n return transport;\n}\n\n/**\n * Creates a mock NetDriver instance.\n * @param overrides Optional overrides for the NetDriver methods.\n */\nexport function createMockNetDriver(overrides?: Partial<NetDriver>): NetDriver {\n return {\n connect: vi.fn().mockResolvedValue(undefined),\n disconnect: vi.fn(),\n send: vi.fn(),\n onMessage: vi.fn(),\n onClose: vi.fn(),\n onError: vi.fn(),\n isConnected: vi.fn().mockReturnValue(true),\n ...overrides\n };\n}\n","import { NetChan } from '@quake2ts/shared';\n\nexport interface RecordedPacket {\n type: 'sent' | 'received';\n timestamp: number;\n data: Uint8Array;\n}\n\nexport class MockNetworkTransport {\n public netchan: NetChan;\n public recordedPackets: RecordedPacket[] = [];\n public sentPackets: Uint8Array[] = [];\n\n constructor() {\n this.netchan = new NetChan();\n this.netchan.setup(1234, { type: 'loopback', port: 0 });\n }\n\n reset() {\n this.recordedPackets = [];\n this.sentPackets = [];\n this.netchan.reset();\n }\n\n // Simulate receiving data from the \"server\"\n receive(data: Uint8Array) {\n this.recordedPackets.push({\n type: 'received',\n timestamp: Date.now(),\n data: new Uint8Array(data)\n });\n return this.netchan.process(data);\n }\n\n // Simulate sending data (called by the client using this transport)\n transmit(unreliableData?: Uint8Array) {\n const packet = this.netchan.transmit(unreliableData);\n this.recordedPackets.push({\n type: 'sent',\n timestamp: Date.now(),\n data: new Uint8Array(packet)\n });\n this.sentPackets.push(new Uint8Array(packet));\n return packet;\n }\n\n get lastSentPacket() {\n return this.sentPackets.length > 0 ? this.sentPackets[this.sentPackets.length - 1] : undefined;\n }\n}\n","import { NetDriver } from '@quake2ts/shared';\nimport { vi, type Mock } from 'vitest';\nimport { LegacyMock, legacyFn } from '../vitest-compat.js';\n\nexport interface MockNetDriverState {\n connected: boolean;\n messagesSent: Uint8Array[];\n messageHandlers: ((data: Uint8Array) => void)[];\n closeHandlers: (() => void)[];\n errorHandlers: ((err: Error) => void)[];\n}\n\n/**\n * A mock implementation of NetDriver that provides testing hooks.\n * Unlike the simple createMockNetDriver factory, this class maintains state\n * and allows for stimulating events (receiving messages, triggering errors).\n */\nexport class MockNetDriver implements NetDriver {\n public state: MockNetDriverState = {\n connected: false,\n messagesSent: [],\n messageHandlers: [],\n closeHandlers: [],\n errorHandlers: []\n };\n\n public connectSpy: LegacyMock<[string], Promise<void>> = legacyFn(async (url: string) => {\n this.state.connected = true;\n });\n\n public disconnectSpy: LegacyMock<[], void> = legacyFn(() => {\n this.state.connected = false;\n this.state.closeHandlers.forEach(h => h());\n });\n\n public sendSpy: LegacyMock<[Uint8Array], void> = legacyFn((data: Uint8Array) => {\n this.state.messagesSent.push(new Uint8Array(data));\n });\n\n public connect(url: string): Promise<void> {\n return this.connectSpy(url);\n }\n\n public disconnect(): void {\n this.disconnectSpy();\n }\n\n public send(data: Uint8Array): void {\n this.sendSpy(data);\n }\n\n public onMessage(cb: (data: Uint8Array) => void): void {\n this.state.messageHandlers.push(cb);\n }\n\n public onClose(cb: () => void): void {\n this.state.closeHandlers.push(cb);\n }\n\n public onError(cb: (err: Error) => void): void {\n this.state.errorHandlers.push(cb);\n }\n\n public isConnected(): boolean {\n return this.state.connected;\n }\n\n // --- Test Helpers ---\n\n /**\n * Simulate receiving a message from the network.\n */\n public receiveMessage(data: Uint8Array): void {\n this.state.messageHandlers.forEach(h => h(data));\n }\n\n /**\n * Simulate a connection close event from the remote side.\n */\n public simulateClose(): void {\n this.state.connected = false;\n this.state.closeHandlers.forEach(h => h());\n }\n\n /**\n * Simulate a connection error.\n */\n public simulateError(err: Error): void {\n this.state.errorHandlers.forEach(h => h(err));\n }\n\n /**\n * Get the last sent message.\n */\n public getLastSentMessage(): Uint8Array | undefined {\n return this.state.messagesSent.length > 0\n ? this.state.messagesSent[this.state.messagesSent.length - 1]\n : undefined;\n }\n\n /**\n * Clear recorded sent messages.\n */\n public clearSentMessages(): void {\n this.state.messagesSent = [];\n }\n}\n","import { Server, ServerState, ServerStatic, Client, ClientState } from '@quake2ts/server';\nimport { NetDriver, MAX_CONFIGSTRINGS, MAX_EDICTS, EntityState } from '@quake2ts/shared';\nimport { Entity } from '@quake2ts/game';\nimport { vi } from 'vitest';\nimport { createMockNetDriver } from './transport.js';\n\n// Define GameState interface locally as we removed game/mocks.ts\nexport interface GameState {\n levelName: string;\n time: number;\n entities: Entity[];\n clients: any[]; // Mock client objects\n}\n\n/**\n * Creates a mock game state object.\n * @param overrides Optional overrides for the game state.\n */\nexport function createMockGameState(overrides?: Partial<GameState>): GameState {\n return {\n levelName: 'test_level',\n time: 0,\n entities: [],\n clients: [],\n ...overrides\n };\n}\n\n/**\n * Creates a mock server state object.\n * @param overrides Optional overrides for the server state.\n */\nexport function createMockServerState(overrides?: Partial<Server>): Server {\n return {\n state: ServerState.Game,\n attractLoop: false,\n loadGame: false,\n startTime: Date.now(),\n time: 0,\n frame: 0,\n name: 'test_map',\n collisionModel: null,\n configStrings: new Array(MAX_CONFIGSTRINGS).fill(''),\n baselines: new Array(MAX_EDICTS).fill(null),\n multicastBuf: new Uint8Array(0),\n ...overrides\n };\n}\n\n/**\n * Creates a mock server static object.\n * @param maxClients Maximum number of clients.\n * @param overrides Optional overrides for the server static state.\n */\nexport function createMockServerStatic(maxClients: number = 16, overrides?: Partial<ServerStatic>): ServerStatic {\n return {\n initialized: true,\n realTime: Date.now(),\n mapCmd: '',\n spawnCount: 1,\n clients: new Array(maxClients).fill(null),\n lastHeartbeat: 0,\n challenges: [],\n ...overrides\n };\n}\n\n/**\n * Creates a mock server client.\n * @param clientNum The client index.\n * @param overrides Optional overrides for the client.\n */\nexport function createMockServerClient(clientNum: number, overrides?: Partial<Client>): Client {\n // Create a minimal mock net driver\n const mockNet: NetDriver = createMockNetDriver();\n\n return {\n index: clientNum,\n state: ClientState.Connected,\n edict: { index: clientNum + 1 } as Entity,\n net: mockNet,\n netchan: {\n qport: 0,\n remoteAddress: '127.0.0.1',\n incomingSequence: 0,\n outgoingSequence: 0,\n lastReceived: 0,\n process: vi.fn(),\n transmit: vi.fn(),\n writeReliableByte: vi.fn(),\n writeReliableShort: vi.fn(),\n writeReliableLong: vi.fn(),\n writeReliableString: vi.fn(),\n writeReliableData: vi.fn(),\n } as any, // Cast as any because NetChan might be complex to fully mock here\n userInfo: '',\n lastMessage: 0,\n lastCommandTime: 0,\n commandCount: 0,\n messageQueue: [],\n frames: [],\n lastFrame: 0,\n lastPacketEntities: [],\n challenge: 0,\n lastConnect: 0,\n ping: 0,\n rate: 0,\n name: `Client${clientNum}`,\n messageLevel: 0,\n datagram: new Uint8Array(0),\n downloadSize: 0,\n downloadCount: 0,\n commandMsec: 0,\n frameLatency: [],\n messageSize: [],\n suppressCount: 0,\n commandQueue: [],\n lastCmd: {\n msec: 0,\n buttons: 0,\n angles: { x: 0, y: 0, z: 0 },\n forwardmove: 0,\n sidemove: 0,\n upmove: 0,\n sequence: 0,\n lightlevel: 0,\n impulse: 0,\n serverFrame: 0\n },\n ...overrides\n };\n}\n\n/**\n * Mock interface for the Server class (DedicatedServer).\n * This allows mocking the server instance itself.\n */\nexport interface MockServer {\n start(mapName: string): Promise<void>;\n stop(): void;\n // tick(): void; // runFrame is private in DedicatedServer, usually we simulate via game.frame\n multicast(origin: any, type: any, event: any, ...args: any[]): void;\n unicast(ent: Entity, reliable: boolean, event: any, ...args: any[]): void;\n configstring(index: number, value: string): void;\n kickPlayer(clientId: number): void;\n changeMap(mapName: string): Promise<void>;\n getClient(clientNum: number): Client | null;\n broadcast(message: string): void;\n tick(): void;\n}\n\n/**\n * Creates a mock server instance.\n * @param overrides Optional overrides for server methods.\n */\nexport function createMockServer(overrides?: Partial<MockServer>): MockServer {\n return {\n start: vi.fn().mockResolvedValue(undefined),\n stop: vi.fn(),\n multicast: vi.fn(),\n unicast: vi.fn(),\n configstring: vi.fn(),\n kickPlayer: vi.fn(),\n changeMap: vi.fn().mockResolvedValue(undefined),\n getClient: vi.fn().mockReturnValue(null),\n broadcast: vi.fn(),\n tick: vi.fn(),\n ...overrides\n };\n}\n","import { Client, ClientState } from '@quake2ts/server';\nimport { createMockServerClient } from './state.js';\n\n/**\n * Interface representing connection state for testing.\n */\nexport interface Connection {\n state: ClientState;\n address: string;\n challenge: number;\n userInfo: UserInfo;\n}\n\n/**\n * Stages of the client connection handshake.\n */\nexport enum HandshakeStage {\n None = 0,\n Challenge = 1,\n Connect = 2,\n Info = 3,\n Active = 4\n}\n\n/**\n * Interface representing a handshake state.\n */\nexport interface Handshake {\n stage: HandshakeStage;\n clientNum: number;\n challenge: number;\n qport: number;\n}\n\n/**\n * Interface for UserInfo structure.\n */\nexport interface UserInfo {\n name: string;\n skin: string;\n model: string;\n fov: number;\n hand: number;\n rate: number;\n msg: number;\n spectator?: number;\n [key: string]: string | number | undefined;\n}\n\n/**\n * Helper to serialize UserInfo to Quake 2 info string format.\n * Format: \\key\\value\\key2\\value2\n */\nexport function serializeUserInfo(info: UserInfo): string {\n return Object.entries(info).reduce((acc, [key, value]) => {\n if (value !== undefined) {\n return `${acc}\\\\${key}\\\\${value}`;\n }\n return acc;\n }, '');\n}\n\n/**\n * Creates a mock UserInfo object.\n * @param overrides Optional overrides for the user info.\n */\nexport function createMockUserInfo(overrides?: Partial<UserInfo>): UserInfo {\n return {\n name: 'Player',\n skin: 'male/grunt',\n model: 'male/grunt',\n fov: 90,\n hand: 0,\n rate: 25000,\n msg: 1,\n ...overrides\n };\n}\n\n/**\n * Creates a mock connection object (Client) with specific state.\n * @param state The client state (default: Connected).\n * @param overrides Optional overrides for the client.\n */\nexport function createMockConnection(state: ClientState = ClientState.Connected, overrides?: Partial<Client>): Client {\n return createMockServerClient(0, {\n state,\n userInfo: serializeUserInfo(createMockUserInfo()),\n challenge: Math.floor(Math.random() * 100000),\n ...overrides\n });\n}\n\n/**\n * Creates a mock handshake object.\n * @param stage The stage of the handshake (default: None).\n */\nexport function createMockHandshake(stage: HandshakeStage = HandshakeStage.None): Handshake {\n return {\n stage,\n clientNum: -1,\n challenge: 0,\n qport: Math.floor(Math.random() * 65536)\n };\n}\n\n/**\n * Simulates a handshake between a mock client and server.\n * Note: This is a high-level simulation helper.\n * @param client The mock client connection.\n * @param server The mock server instance.\n * @returns Promise that resolves to true if handshake succeeded.\n */\nexport async function simulateHandshake(client: Client, server: any): Promise<boolean> {\n // 1. Get Challenge\n // In a real scenario, client sends getchallenge, server responds with challenge\n const challenge = Math.floor(Math.random() * 100000);\n client.challenge = challenge;\n\n // 2. Connect\n // Client sends connect command with qport, challenge, userinfo\n // Server assigns client slot\n if (server && server.clients) {\n // rudimentary check if server has space\n }\n\n // 3. Update state to Connected\n client.state = ClientState.Connected;\n\n // 4. Send configstrings (usually handled by server)\n\n // 5. Client enters game (prespawn)\n // Server sends stuff\n\n // 6. Client ready\n client.state = ClientState.Active;\n\n return true;\n}\n","import { vi } from 'vitest';\nimport { ServerCommand } from '@quake2ts/shared';\n\n/**\n * Interface for a mocked server console that can execute commands.\n * Reference: quake2/server/sv_main.c (SV_ExecuteUserCommand)\n */\nexport interface MockServerConsole {\n exec(cmd: string): string;\n print(text: string): void;\n broadcast(text: string): void;\n commandBuffer: string[];\n outputBuffer: string[];\n}\n\n/**\n * Creates a mock server console.\n * @param overrides Optional overrides for the mock console.\n */\nexport function createMockServerConsole(overrides?: Partial<MockServerConsole>): MockServerConsole {\n const outputBuffer: string[] = [];\n const commandBuffer: string[] = [];\n\n return {\n exec: vi.fn((cmd: string) => {\n commandBuffer.push(cmd);\n return `Executed: ${cmd}`;\n }),\n print: vi.fn((text: string) => {\n outputBuffer.push(text);\n }),\n broadcast: vi.fn((text: string) => {\n outputBuffer.push(`Broadcast: ${text}`);\n }),\n commandBuffer,\n outputBuffer,\n ...overrides\n };\n}\n\n/**\n * Interface for a mocked RCON client.\n * Reference: quake2/server/sv_user.c (SV_ExecuteUserCommand for RCON handling)\n */\nexport interface MockRConClient {\n connect(address: string, port: number, password?: string): Promise<boolean>;\n sendCommand(cmd: string): Promise<string>;\n disconnect(): void;\n connected: boolean;\n lastCommand: string;\n lastResponse: string;\n}\n\n/**\n * Creates a mock RCON client.\n * @param password Optional password for the client to use.\n */\nexport function createMockRConClient(password: string = ''): MockRConClient {\n return {\n connected: false,\n lastCommand: '',\n lastResponse: '',\n connect: vi.fn(async (address, port, pwd) => {\n return pwd === password; // Simple mock: connect succeeds if password matches constructor password\n }),\n sendCommand: vi.fn(async (cmd) => {\n return `RCON Response for: ${cmd}`;\n }),\n disconnect: vi.fn(),\n };\n}\n\n/**\n * Simulates a command execution on the server.\n * @param server The mock server instance (assumed to have some command handling capability).\n * @param command The command string to execute.\n * @returns The output of the command.\n */\nexport function simulateServerCommand(server: any, command: string): string {\n // This assumes the server has a method to execute commands, or we simulate the effect.\n // In a real integration, this might interact with the server's command buffer.\n if (server.executeBuffer) {\n server.executeBuffer(command);\n return \"Executed\";\n }\n\n // Fallback for mocked servers\n if (server.exec) {\n return server.exec(command);\n }\n\n return \"Unknown command handler\";\n}\n","import { Client } from '@quake2ts/server';\n\nexport interface MasterServer {\n registerServer(info: ServerInfo): Promise<boolean>;\n heartbeat(serverAddress: string): Promise<boolean>;\n getServerList(filter?: ServerListFilter): Promise<ServerInfo[]>;\n}\n\nexport interface ServerInfo {\n address: string;\n name: string;\n map: string;\n players: number;\n maxPlayers: number;\n gametype: string;\n version: string;\n password?: boolean;\n}\n\nexport interface ServerListFilter {\n gametype?: string;\n map?: string;\n notEmpty?: boolean;\n notFull?: boolean;\n}\n\n/**\n * Creates a mock master server for testing server registration and browsing\n * @param overrides - Optional overrides for the master server behavior\n */\nexport function createMockMasterServer(overrides: Partial<MasterServer> = {}): MasterServer {\n const servers = new Map<string, ServerInfo>();\n\n return {\n registerServer: async (info: ServerInfo): Promise<boolean> => {\n servers.set(info.address, info);\n return true;\n },\n heartbeat: async (serverAddress: string): Promise<boolean> => {\n return servers.has(serverAddress);\n },\n getServerList: async (filter?: ServerListFilter): Promise<ServerInfo[]> => {\n let list = Array.from(servers.values());\n\n if (filter) {\n if (filter.gametype) {\n list = list.filter(s => s.gametype === filter.gametype);\n }\n if (filter.map) {\n list = list.filter(s => s.map === filter.map);\n }\n if (filter.notEmpty) {\n list = list.filter(s => s.players > 0);\n }\n if (filter.notFull) {\n list = list.filter(s => s.players < s.maxPlayers);\n }\n }\n\n return list;\n },\n ...overrides\n };\n}\n\n/**\n * Creates a mock server info object\n * @param overrides - Optional overrides\n */\nexport function createMockServerInfo(overrides: Partial<ServerInfo> = {}): ServerInfo {\n return {\n address: '127.0.0.1:27910',\n name: 'Quake 2 Test Server',\n map: 'q2dm1',\n players: 0,\n maxPlayers: 16,\n gametype: 'deathmatch',\n version: '1.0',\n ...overrides\n };\n}\n\n/**\n * Simulates the process of a game server registering with the master server\n * @param server - The mock game server instance (typed as any to accept mock)\n * @param master - The mock master server\n */\nexport async function simulateServerRegistration(server: any, master: MasterServer): Promise<boolean> {\n const info = createMockServerInfo({\n name: server.name || 'Test Server',\n map: server.mapName || 'q2dm1',\n players: server.clients ? server.clients.filter((c: Client | null) => c && c.state >= 2).length : 0,\n maxPlayers: server.maxClients || 16\n });\n\n return master.registerServer(info);\n}\n","import { vi } from 'vitest';\nimport { TraceResult } from '@quake2ts/shared';\n\n/**\n * Mock interface for CollisionEntityIndex.\n */\nexport interface MockCollisionEntityIndex {\n trace: (start: any, mins: any, maxs: any, end: any, passEntity: any, contentMask: number) => TraceResult;\n link: (entity: any) => void;\n unlink: (entity: any) => void;\n gatherTriggerTouches: (entity: any) => any[];\n}\n\n/**\n * Creates a mock CollisionEntityIndex.\n * @param overrides Optional overrides for the mock methods.\n */\nexport function createMockCollisionEntityIndex(overrides?: Partial<MockCollisionEntityIndex>): MockCollisionEntityIndex {\n return {\n trace: vi.fn().mockReturnValue({\n fraction: 1.0,\n allsolid: false,\n startsolid: false,\n endpos: { x: 0, y: 0, z: 0 },\n entityId: null\n }),\n link: vi.fn(),\n unlink: vi.fn(),\n gatherTriggerTouches: vi.fn().mockReturnValue([]),\n ...overrides\n };\n}\n","import { Server, Client, ClientState, ServerState, ServerStatic } from '@quake2ts/server';\nimport { Entity } from '@quake2ts/game';\nimport { UserCommand } from '@quake2ts/shared';\nimport { createMockServerState } from '../mocks/state.js';\nimport { createMockServerClient } from '../mocks/state.js';\nimport { createMockUserInfo, serializeUserInfo, UserInfo } from '../mocks/connection.js';\n\n// Define a type that combines Server and ServerStatic for convenience in tests\n// since the real server implementation splits these but tests often need both.\nexport type MockServerContext = Server & {\n clients: (Client | null)[];\n entities?: Entity[];\n};\n\nexport interface MultiplayerScenario {\n server: MockServerContext;\n clients: Client[];\n entities: Entity[];\n}\n\n/**\n * Creates a multiplayer test scenario with a mock server and a number of clients.\n * @param numPlayers Number of players to simulate.\n */\nexport function createMultiplayerTestScenario(numPlayers: number = 2): MultiplayerScenario {\n const baseServer = createMockServerState();\n const clients: Client[] = [];\n const entities: Entity[] = [];\n\n const server: MockServerContext = {\n ...baseServer,\n clients: new Array(numPlayers).fill(null),\n entities: []\n };\n\n for (let i = 0; i < numPlayers; i++) {\n // Create client\n const client = createMockServerClient(i, {\n state: ClientState.Active,\n userInfo: serializeUserInfo(createMockUserInfo({ name: `Player${i}` }))\n });\n\n // Create player entity\n const entity = {\n classname: 'player',\n s: { origin: { x: 0, y: 0, z: 0 }, number: i + 1 },\n client: client\n } as unknown as Entity;\n\n client.edict = entity;\n server.clients[i] = client;\n clients.push(client);\n entities.push(entity);\n }\n\n // Assign entities to server\n server.entities = entities;\n\n return {\n server,\n clients,\n entities\n };\n}\n\n/**\n * Simulates a player joining the server.\n * @param server The mock server instance.\n * @param userInfo Optional user info overrides.\n */\nexport async function simulatePlayerJoin(server: MockServerContext, userInfo?: Partial<UserInfo>): Promise<Client> {\n // Find free client slot\n const index = server.clients.findIndex((c) => !c || c.state === ClientState.Free);\n if (index === -1) {\n throw new Error('Server full');\n }\n\n const client = createMockServerClient(index, {\n state: ClientState.Connected,\n userInfo: serializeUserInfo(createMockUserInfo(userInfo))\n });\n\n server.clients[index] = client;\n\n // Simulate connection process\n client.state = ClientState.Active;\n\n // Create entity\n const entity = {\n classname: 'player',\n s: { origin: { x: 0, y: 0, z: 0 }, number: index + 1 },\n client: client\n } as unknown as Entity;\n client.edict = entity;\n\n // Add to entities list if possible (mock behavior)\n if (server.entities && Array.isArray(server.entities)) {\n // This is a simplified view, normally entities are in a fixed array\n (server.entities as Entity[])[index + 1] = entity;\n }\n\n return client;\n}\n\n/**\n * Simulates a player leaving the server.\n * @param server The mock server instance.\n * @param clientNum The client number to disconnect.\n */\nexport function simulatePlayerLeave(server: MockServerContext, clientNum: number): void {\n const client = server.clients[clientNum];\n if (client) {\n client.state = ClientState.Free;\n client.edict = null;\n }\n}\n\n/**\n * Simulates a single server frame update.\n * @param server The mock server instance.\n * @param deltaTime Time step in seconds (default: 0.1).\n */\nexport function simulateServerTick(server: MockServerContext, deltaTime: number = 0.1): void {\n server.time += deltaTime;\n server.frame++;\n // In a real server, we would call RunFrame, Physics, etc.\n // For mocks, we might just update client lastCmd times\n\n server.clients.forEach((client: Client | null) => {\n if (client && client.state === ClientState.Active) {\n // Update client logic if needed\n }\n });\n}\n\n/**\n * Simulates player input for a specific client.\n * @param client The server client.\n * @param input The input command.\n */\nexport function simulatePlayerInput(client: Client, input: Partial<UserCommand>): void {\n const cmd: UserCommand = {\n msec: 100,\n buttons: 0,\n angles: { x: 0, y: 0, z: 0 },\n forwardmove: 0,\n sidemove: 0,\n upmove: 0,\n sequence: client.lastCmd.sequence + 1,\n lightlevel: 0,\n impulse: 0,\n ...input\n };\n\n client.lastCmd = cmd;\n client.commandQueue.push(cmd);\n client.commandCount++;\n}\n","import { Server } from '@quake2ts/server';\nimport { EntityState, BinaryStream, ProtocolPlayerState } from '@quake2ts/shared';\n\nexport interface Snapshot {\n serverTime: number;\n playerState: any; // Simplified PlayerState\n entities: EntityState[];\n}\n\nexport interface DeltaSnapshot {\n snapshot: Snapshot;\n deltaEntities: EntityState[];\n removedEntities: number[];\n}\n\nexport interface ConsistencyReport {\n valid: boolean;\n errors: string[];\n}\n\n/**\n * Creates a client-specific snapshot from the server state.\n * @param serverState The current server state.\n * @param clientNum The client number to generate snapshot for.\n */\nexport function createServerSnapshot(serverState: Server, clientNum: number): Snapshot {\n // Collect visible entities\n const visibleEntities: EntityState[] = [];\n\n // In a real implementation, this would use PVS/PHS\n // For mock, we just take all entities that have a model or are solid\n if (serverState.baselines) {\n serverState.baselines.forEach((ent: EntityState | null, index: number) => {\n if (ent && index !== clientNum + 1) { // Skip self in packet entities usually\n visibleEntities.push({ ...ent });\n }\n });\n }\n\n return {\n serverTime: serverState.time,\n playerState: {\n origin: { x: 0, y: 0, z: 0 },\n viewangles: { x: 0, y: 0, z: 0 },\n pm_type: 0\n },\n entities: visibleEntities\n };\n}\n\n/**\n * Calculates the delta between two snapshots.\n * @param oldSnapshot The baseline snapshot.\n * @param newSnapshot The current snapshot.\n */\nexport function createDeltaSnapshot(oldSnapshot: Snapshot, newSnapshot: Snapshot): DeltaSnapshot {\n const deltaEntities: EntityState[] = [];\n const removedEntities: number[] = [];\n\n const oldMap = new Map(oldSnapshot.entities.map(e => [e.number, e]));\n const newMap = new Map(newSnapshot.entities.map(e => [e.number, e]));\n\n // Find changed or new entities\n newSnapshot.entities.forEach(newEnt => {\n const oldEnt = oldMap.get(newEnt.number);\n if (!oldEnt) {\n // New entity\n deltaEntities.push(newEnt);\n } else if (JSON.stringify(newEnt) !== JSON.stringify(oldEnt)) {\n // Changed entity (simplified check)\n deltaEntities.push(newEnt);\n }\n });\n\n // Find removed entities\n oldSnapshot.entities.forEach(oldEnt => {\n if (!newMap.has(oldEnt.number)) {\n removedEntities.push(oldEnt.number);\n }\n });\n\n return {\n snapshot: newSnapshot,\n deltaEntities,\n removedEntities\n };\n}\n\n/**\n * Verifies the consistency of a sequence of snapshots.\n * @param snapshots Array of snapshots ordered by time.\n */\nexport function verifySnapshotConsistency(snapshots: Snapshot[]): ConsistencyReport {\n const report: ConsistencyReport = { valid: true, errors: [] };\n\n if (snapshots.length < 2) return report;\n\n for (let i = 1; i < snapshots.length; i++) {\n const prev = snapshots[i-1];\n const curr = snapshots[i];\n\n if (curr.serverTime <= prev.serverTime) {\n report.valid = false;\n report.errors.push(`Snapshot ${i} has time ${curr.serverTime} <= prev ${prev.serverTime}`);\n }\n }\n\n return report;\n}\n\n/**\n * Simulates network delivery of a snapshot with potential packet loss.\n * @param snapshot The snapshot to deliver.\n * @param reliability Probability of successful delivery (0.0 to 1.0).\n */\nexport async function simulateSnapshotDelivery(snapshot: Snapshot, reliability: number = 1.0): Promise<Snapshot | null> {\n if (Math.random() > reliability) {\n return null;\n }\n return snapshot;\n}\n\n/**\n * Parses a ProtocolPlayerState from a binary buffer.\n * Useful for testing player state serialization.\n * logic adapted from packages/engine/src/demo/parser.ts\n * @param data The binary data to parse.\n */\nexport function parseProtocolPlayerState(data: Uint8Array): ProtocolPlayerState {\n const stream = new BinaryStream(data.buffer as ArrayBuffer);\n const ps: ProtocolPlayerState = {\n pm_type: 0,\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n pm_time: 0,\n pm_flags: 0,\n gravity: 0,\n delta_angles: { x: 0, y: 0, z: 0 },\n viewoffset: { x: 0, y: 0, z: 0 },\n viewangles: { x: 0, y: 0, z: 0 },\n kick_angles: { x: 0, y: 0, z: 0 },\n gun_index: 0,\n gun_frame: 0,\n gun_offset: { x: 0, y: 0, z: 0 },\n gun_angles: { x: 0, y: 0, z: 0 },\n blend: [0, 0, 0, 0],\n fov: 0,\n rdflags: 0,\n stats: new Array(32).fill(0),\n watertype: 0\n };\n\n const flags = stream.readShort();\n\n if (flags & 1) ps.pm_type = stream.readByte();\n\n if (flags & 2) {\n const x = stream.readShort() * 0.125;\n const y = stream.readShort() * 0.125;\n const z = stream.readShort() * 0.125;\n ps.origin = { x, y, z };\n }\n\n if (flags & 4) {\n const x = stream.readShort() * 0.125;\n const y = stream.readShort() * 0.125;\n const z = stream.readShort() * 0.125;\n ps.velocity = { x, y, z };\n }\n\n if (flags & 8) ps.pm_time = stream.readByte();\n if (flags & 16) ps.pm_flags = stream.readByte();\n if (flags & 32) ps.gravity = stream.readShort();\n\n if (flags & 64) {\n const x = stream.readShort() * (180 / 32768);\n const y = stream.readShort() * (180 / 32768);\n const z = stream.readShort() * (180 / 32768);\n ps.delta_angles = { x, y, z };\n }\n\n if (flags & 128) {\n const x = stream.readChar() * 0.25;\n const y = stream.readChar() * 0.25;\n const z = stream.readChar() * 0.25;\n ps.viewoffset = { x, y, z };\n }\n\n if (flags & 256) {\n const x = stream.readAngle16();\n const y = stream.readAngle16();\n const z = stream.readAngle16();\n ps.viewangles = { x, y, z };\n }\n\n if (flags & 512) {\n const x = stream.readChar() * 0.25;\n const y = stream.readChar() * 0.25;\n const z = stream.readChar() * 0.25;\n ps.kick_angles = { x, y, z };\n }\n\n if (flags & 4096) ps.gun_index = stream.readByte();\n\n if (flags & 8192) {\n ps.gun_frame = stream.readByte();\n const ox = stream.readChar() * 0.25;\n const oy = stream.readChar() * 0.25;\n const oz = stream.readChar() * 0.25;\n ps.gun_offset = { x: ox, y: oy, z: oz };\n\n const ax = stream.readChar() * 0.25;\n const ay = stream.readChar() * 0.25;\n const az = stream.readChar() * 0.25;\n ps.gun_angles = { x: ax, y: ay, z: az };\n }\n\n if (flags & 1024) {\n ps.blend = [\n stream.readByte(),\n stream.readByte(),\n stream.readByte(),\n stream.readByte()\n ];\n }\n\n if (flags & 2048) ps.fov = stream.readByte();\n if (flags & 16384) ps.rdflags = stream.readByte();\n\n // New: watertype (bit 15)\n if (flags & 32768) ps.watertype = stream.readByte();\n\n const statbits = stream.readLong();\n for (let i = 0; i < 32; i++) {\n if (statbits & (1 << i)) {\n ps.stats[i] = stream.readShort();\n }\n }\n\n return ps;\n}\n","import { Client, ClientFrame } from '@quake2ts/server';\n\nexport interface RateLimiter {\n bytesPerSecond: number;\n allow(bytes: number): boolean;\n update(deltaSeconds: number): void;\n reset(): void;\n getUsage(): number;\n}\n\nexport interface Message {\n data: Uint8Array;\n size: number;\n timestamp: number;\n}\n\nexport interface BandwidthScenario {\n bandwidth: number;\n clients: Client[];\n duration: number;\n totalBytesSent: number;\n totalBytesReceived: number;\n droppedPackets: number;\n}\n\n/**\n * Creates a mock rate limiter for bandwidth testing\n * @param bytesPerSecond - Maximum bytes per second allowed\n */\nexport function createMockRateLimiter(bytesPerSecond: number): RateLimiter {\n let bucket = bytesPerSecond;\n const maxBucket = bytesPerSecond; // Max burst size equal to 1 second of bandwidth\n let usage = 0;\n\n return {\n bytesPerSecond,\n allow(bytes: number): boolean {\n if (bucket >= bytes) {\n bucket -= bytes;\n usage += bytes;\n return true;\n }\n return false;\n },\n update(deltaSeconds: number): void {\n bucket += bytesPerSecond * deltaSeconds;\n if (bucket > maxBucket) {\n bucket = maxBucket;\n }\n },\n reset(): void {\n bucket = maxBucket;\n usage = 0;\n },\n getUsage(): number {\n return usage;\n }\n };\n}\n\n/**\n * Simulates bandwidth limiting on a stream of messages\n * @param messages - Array of messages to process\n * @param bandwidth - Bandwidth limit in bytes per second\n * @returns Filtered array of messages that passed the bandwidth check\n */\nexport function simulateBandwidthLimit(messages: Message[], bandwidth: number): Message[] {\n const limiter = createMockRateLimiter(bandwidth);\n const result: Message[] = [];\n let lastTime = messages.length > 0 ? messages[0].timestamp : 0;\n\n for (const msg of messages) {\n const delta = (msg.timestamp - lastTime) / 1000;\n if (delta > 0) {\n limiter.update(delta);\n }\n lastTime = msg.timestamp;\n\n if (limiter.allow(msg.size)) {\n result.push(msg);\n }\n }\n\n return result;\n}\n\n/**\n * Calculates the size of a client snapshot in bytes\n * @param snapshot - The client frame snapshot\n */\nexport function measureSnapshotSize(snapshot: ClientFrame): number {\n let size = 0;\n\n // Area bits\n size += snapshot.areaBytes;\n\n // Player state (approximate based on struct size or serialization)\n // This is an estimation, as actual network serialization compresses this\n size += 200; // Baseline size for PlayerState\n\n // Entities\n // Each EntityState is approx 20-30 bytes compressed\n size += snapshot.entities.length * 20;\n\n return size;\n}\n\n/**\n * Creates a scenario for testing bandwidth limits with multiple clients\n * @param bandwidth - Bandwidth limit per client or total\n * @param numClients - Number of clients to simulate\n */\nexport function createBandwidthTestScenario(bandwidth: number, numClients: number): BandwidthScenario {\n const clients: Client[] = [];\n // Populate with mock clients if needed (currently creating dummy objects to satisfy type)\n // In a real scenario we might use createClient factory but that requires net driver\n // For now we assume caller will populate fully or we return empty array if 0\n\n return {\n bandwidth,\n clients,\n duration: 0,\n totalBytesSent: 0,\n totalBytesReceived: 0,\n droppedPackets: 0\n };\n}\n","import { JSDOM } from 'jsdom';\nimport { Canvas, Image, ImageData } from '@napi-rs/canvas';\nimport 'fake-indexeddb/auto';\nimport { MockPointerLock } from '../client/mocks/input.js';\nimport { createMockWebGL2Context } from './webgl.js';\n\nexport interface BrowserSetupOptions {\n url?: string;\n pretendToBeVisual?: boolean;\n resources?: \"usable\";\n enableWebGL2?: boolean;\n enablePointerLock?: boolean;\n}\n\n/**\n * Sets up a browser environment for testing using JSDOM and napi-rs/canvas.\n * This should be called in your vitest.setup.ts file.\n */\nexport function setupBrowserEnvironment(options: BrowserSetupOptions = {}) {\n const {\n url = 'http://localhost',\n pretendToBeVisual = true,\n resources = undefined,\n enableWebGL2 = false,\n enablePointerLock = false\n } = options;\n\n // Create a JSDOM instance\n const dom = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>', {\n url,\n pretendToBeVisual,\n resources: resources as any\n });\n\n // Set up global variables\n global.window = dom.window as any;\n global.document = dom.window.document;\n\n // Polyfill global DOM Constructors\n global.Document = dom.window.Document;\n global.Element = dom.window.Element;\n global.Node = dom.window.Node;\n\n // Handle navigator assignment safely\n try {\n // @ts-ignore\n global.navigator = dom.window.navigator;\n } catch (e) {\n try {\n Object.defineProperty(global, 'navigator', {\n value: dom.window.navigator,\n writable: true,\n configurable: true\n });\n } catch (e2) {\n console.warn('Could not assign global.navigator, skipping.');\n }\n }\n\n global.location = dom.window.location;\n global.HTMLElement = dom.window.HTMLElement;\n global.HTMLCanvasElement = dom.window.HTMLCanvasElement;\n\n // Polyfill global Event constructors\n global.Event = dom.window.Event;\n global.CustomEvent = dom.window.CustomEvent;\n global.DragEvent = dom.window.DragEvent as any;\n global.MouseEvent = dom.window.MouseEvent;\n global.KeyboardEvent = dom.window.KeyboardEvent;\n global.FocusEvent = dom.window.FocusEvent;\n global.WheelEvent = dom.window.WheelEvent;\n global.InputEvent = dom.window.InputEvent;\n global.UIEvent = dom.window.UIEvent;\n\n // Setup Storage mocks\n try {\n global.localStorage = dom.window.localStorage;\n } catch (e) {\n // Ignore if it fails\n }\n\n if (!global.localStorage) {\n const storage = new Map<string, string>();\n global.localStorage = {\n getItem: (key: string) => storage.get(key) || null,\n setItem: (key: string, value: string) => storage.set(key, value),\n removeItem: (key: string) => storage.delete(key),\n clear: () => storage.clear(),\n key: (index: number) => Array.from(storage.keys())[index] || null,\n get length() { return storage.size; }\n } as Storage;\n }\n\n // Override document.createElement for canvas elements\n const originalCreateElement = document.createElement.bind(document);\n document.createElement = function (tagName: string, options?: any) {\n if (tagName.toLowerCase() === 'canvas') {\n const napiCanvas = new Canvas(300, 150);\n const domCanvas = originalCreateElement('canvas', options);\n\n Object.defineProperty(domCanvas, 'width', {\n get: () => napiCanvas.width,\n set: (value) => { napiCanvas.width = value; },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(domCanvas, 'height', {\n get: () => napiCanvas.height,\n set: (value) => { napiCanvas.height = value; },\n enumerable: true,\n configurable: true\n });\n\n const originalGetContext = domCanvas.getContext.bind(domCanvas);\n domCanvas.getContext = function(contextId: string, options?: any) {\n if (contextId === '2d') {\n return napiCanvas.getContext('2d', options);\n }\n\n if (enableWebGL2 && contextId === 'webgl2') {\n return createMockWebGL2Context(domCanvas as HTMLCanvasElement);\n }\n\n if (contextId === 'webgl' || contextId === 'webgl2') {\n return originalGetContext(contextId, options);\n }\n return napiCanvas.getContext(contextId as any, options);\n } as any;\n\n (domCanvas as any).__napiCanvas = napiCanvas;\n\n return domCanvas;\n }\n return originalCreateElement(tagName, options);\n } as any;\n\n if (enableWebGL2) {\n const originalProtoGetContext = global.HTMLCanvasElement.prototype.getContext;\n global.HTMLCanvasElement.prototype.getContext = function (\n contextId: string,\n options?: any\n ): any {\n if (contextId === 'webgl2') {\n return createMockWebGL2Context(this);\n }\n // @ts-ignore\n return originalProtoGetContext.call(this, contextId as any, options);\n };\n }\n\n global.Image = Image as any;\n global.ImageData = ImageData as any;\n\n if (typeof global.createImageBitmap === 'undefined') {\n global.createImageBitmap = async function (\n image: any,\n _options?: ImageBitmapOptions\n ): Promise<any> {\n if (image && typeof image.width === 'number' && typeof image.height === 'number') {\n const canvas = new Canvas(image.width, image.height);\n const ctx = canvas.getContext('2d');\n if (image.data) {\n ctx.putImageData(image as any, 0, 0);\n }\n return canvas;\n }\n const canvas = new Canvas(100, 100);\n return canvas;\n } as unknown as any;\n }\n\n if (typeof global.btoa === 'undefined') {\n global.btoa = function (str: string): string {\n return Buffer.from(str, 'binary').toString('base64');\n };\n }\n\n if (typeof global.atob === 'undefined') {\n global.atob = function (str: string): string {\n return Buffer.from(str, 'base64').toString('binary');\n };\n }\n\n if (enablePointerLock) {\n new MockPointerLock(global.document);\n }\n\n if (typeof global.requestAnimationFrame === 'undefined') {\n let lastTime = 0;\n global.requestAnimationFrame = (callback: FrameRequestCallback) => {\n const currTime = Date.now();\n const timeToCall = Math.max(0, 16 - (currTime - lastTime));\n const id = setTimeout(() => {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id as unknown as number;\n };\n\n global.cancelAnimationFrame = (id: number) => {\n clearTimeout(id);\n };\n }\n}\n\n/**\n * Cleans up the browser environment.\n */\nexport function teardownBrowserEnvironment() {\n // @ts-ignore\n delete global.window;\n // @ts-ignore\n delete global.document;\n // @ts-ignore\n delete global.navigator;\n // @ts-ignore\n delete global.localStorage;\n // @ts-ignore\n delete global.location;\n // @ts-ignore\n delete global.HTMLElement;\n // @ts-ignore\n delete global.HTMLCanvasElement;\n // @ts-ignore\n delete global.Image;\n // @ts-ignore\n delete global.ImageData;\n // @ts-ignore\n delete global.createImageBitmap;\n // @ts-ignore\n delete global.Event;\n // @ts-ignore\n delete global.CustomEvent;\n // @ts-ignore\n delete global.DragEvent;\n // @ts-ignore\n delete global.MouseEvent;\n // @ts-ignore\n delete global.KeyboardEvent;\n // @ts-ignore\n delete global.FocusEvent;\n // @ts-ignore\n delete global.WheelEvent;\n // @ts-ignore\n delete global.InputEvent;\n // @ts-ignore\n delete global.UIEvent;\n}\n","\n/**\n * Client Input System Mocks\n *\n * Provides utilities for simulating user input (keyboard, mouse, pointer lock)\n * in a test environment (JSDOM/Browser).\n */\n\nexport interface KeyModifiers {\n ctrl?: boolean;\n alt?: boolean;\n shift?: boolean;\n meta?: boolean;\n}\n\n/**\n * Factory for creating a mock KeyboardEvent.\n */\nexport function createMockKeyboardEvent(key: string, type: 'keydown' | 'keyup' = 'keydown', modifiers: KeyModifiers = {}): KeyboardEvent {\n return new KeyboardEvent(type, {\n key,\n code: key, // Default code to key if not specified (caller can override property if needed)\n ctrlKey: modifiers.ctrl,\n altKey: modifiers.alt,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n bubbles: true,\n cancelable: true,\n view: window\n });\n}\n\n/**\n * Factory for creating a mock MouseEvent with support for movementX/Y.\n */\nexport function createMockMouseEvent(type: string, options: MouseEventInit = {}): MouseEvent {\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window,\n ...options\n });\n\n // Patch movementX/Y if needed as JSDOM MouseEvent might not initialize them from options\n if (options.movementX !== undefined) {\n Object.defineProperty(event, 'movementX', { value: options.movementX });\n }\n if (options.movementY !== undefined) {\n Object.defineProperty(event, 'movementY', { value: options.movementY });\n }\n\n return event;\n}\n\n/**\n * Factory for creating a mock WheelEvent.\n */\nexport function createMockWheelEvent(deltaX: number = 0, deltaY: number = 0): WheelEvent {\n return new WheelEvent('wheel', {\n deltaX,\n deltaY,\n bubbles: true,\n cancelable: true,\n view: window\n });\n}\n\n/**\n * Class implementing a mock for the Pointer Lock API.\n * Handles patching the document and element prototypes to simulate pointer lock.\n */\nexport class MockPointerLock {\n private _doc: Document;\n\n constructor(doc: Document = document) {\n this._doc = doc;\n this.setup();\n }\n\n private setup() {\n // Check if already patched to avoid conflicts\n if ((this._doc as any).__mockPointerLockInstalled) return;\n\n let _pointerLockElement: Element | null = null;\n const doc = this._doc;\n\n // Patch document.pointerLockElement\n Object.defineProperty(doc, 'pointerLockElement', {\n get: () => _pointerLockElement,\n configurable: true\n });\n\n // Patch document.exitPointerLock\n doc.exitPointerLock = () => {\n if (_pointerLockElement) {\n _pointerLockElement = null;\n doc.dispatchEvent(new Event('pointerlockchange'));\n }\n };\n\n // Patch HTMLElement.prototype.requestPointerLock\n // Save original if needed, but in JSDOM it might not exist or do nothing\n if (!(global.HTMLElement.prototype as any).__originalRequestPointerLock) {\n (global.HTMLElement.prototype as any).__originalRequestPointerLock = (global.HTMLElement.prototype as any).requestPointerLock;\n }\n\n (global.HTMLElement.prototype as any).requestPointerLock = function() {\n _pointerLockElement = this;\n doc.dispatchEvent(new Event('pointerlockchange'));\n };\n\n (doc as any).__mockPointerLockInstalled = true;\n }\n\n get element(): Element | null {\n return this._doc.pointerLockElement;\n }\n\n get locked(): boolean {\n return !!this.element;\n }\n\n request(element: HTMLElement) {\n element.requestPointerLock();\n }\n\n exit() {\n this._doc.exitPointerLock();\n }\n\n isLocked(): boolean {\n return this.locked;\n }\n}\n\n/**\n * Class for simulating input events.\n */\nexport class InputInjector {\n constructor(private doc: Document = document, private win: Window = window) {}\n\n keyDown(key: string, code?: string, modifiers?: KeyModifiers) {\n const event = createMockKeyboardEvent(key, 'keydown', modifiers);\n if (code) {\n Object.defineProperty(event, 'code', { value: code });\n }\n this.doc.dispatchEvent(event);\n }\n\n keyUp(key: string, code?: string, modifiers?: KeyModifiers) {\n const event = createMockKeyboardEvent(key, 'keyup', modifiers);\n if (code) {\n Object.defineProperty(event, 'code', { value: code });\n }\n this.doc.dispatchEvent(event);\n }\n\n mouseMove(movementX: number, movementY: number, clientX = 0, clientY = 0) {\n const event = createMockMouseEvent('mousemove', {\n clientX,\n clientY,\n movementX,\n movementY\n });\n this.dispatchToTarget(event);\n }\n\n mouseButton(button: number, state: 'down' | 'up' = 'down') {\n if (state === 'down') {\n this.mouseDown(button);\n } else {\n this.mouseUp(button);\n }\n }\n\n mouseDown(button: number = 0) {\n const event = createMockMouseEvent('mousedown', { button });\n this.dispatchToTarget(event);\n }\n\n mouseUp(button: number = 0) {\n const event = createMockMouseEvent('mouseup', { button });\n this.dispatchToTarget(event);\n }\n\n mouseWheel(deltaY: number) {\n const event = createMockWheelEvent(0, deltaY);\n this.dispatchToTarget(event);\n }\n\n // Alias for backward compatibility/ease of use\n wheel(deltaY: number) {\n this.mouseWheel(deltaY);\n }\n\n private dispatchToTarget(event: Event) {\n const target = this.doc.pointerLockElement || this.doc;\n target.dispatchEvent(event);\n }\n}\n\n/**\n * An implementation of InputSource that listens to DOM events.\n * Useful for tests that want to verify interaction with real/mocked DOM events.\n */\nexport class BrowserInputSource {\n constructor(private target: EventTarget = document) {}\n\n on(event: string, handler: Function): void {\n if (event === 'keydown' || event === 'keyup') {\n this.target.addEventListener(event, (e: any) => {\n handler(e.code);\n });\n } else if (event === 'mousedown' || event === 'mouseup') {\n this.target.addEventListener(event, (e: any) => {\n handler(e.button);\n });\n } else if (event === 'mousemove') {\n this.target.addEventListener(event, (e: any) => {\n handler(e.movementX, e.movementY);\n });\n }\n }\n}\n\n/**\n * Factory for creating a MockPointerLock instance.\n */\nexport function createMockPointerLock(element?: HTMLElement): MockPointerLock {\n const mock = new MockPointerLock();\n if (element) {\n mock.request(element);\n }\n return mock;\n}\n\n/**\n * Factory for creating an InputInjector.\n */\nexport function createInputInjector(target?: EventTarget): InputInjector {\n // If target is provided and is a Document, use it.\n // Otherwise default to global document.\n const isDocument = typeof Document !== 'undefined' && target instanceof Document;\n const doc = isDocument ? target : (typeof document !== 'undefined' ? document : {} as Document);\n const win = (doc.defaultView) ? doc.defaultView : (typeof window !== 'undefined' ? window : {} as Window);\n return new InputInjector(doc, win);\n}\n","import { vi } from 'vitest';\nimport { legacyFn } from '../../vitest-compat.js';\n\ninterface ShaderRecord {\n readonly id: number;\n readonly type: GLenum;\n}\n\ninterface ProgramRecord {\n readonly id: number;\n}\n\nexport class MockWebGL2RenderingContext {\n readonly ARRAY_BUFFER = 0x8892;\n readonly ELEMENT_ARRAY_BUFFER = 0x8893;\n readonly STATIC_DRAW = 0x88e4;\n readonly DYNAMIC_DRAW = 0x88e8;\n readonly FLOAT = 0x1406;\n readonly UNSIGNED_SHORT = 0x1403;\n readonly TEXTURE_2D = 0x0de1;\n readonly TEXTURE_CUBE_MAP = 0x8513;\n readonly TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;\n readonly TEXTURE0 = 0x84c0;\n readonly TEXTURE_WRAP_S = 0x2802;\n readonly TEXTURE_WRAP_T = 0x2803;\n readonly TEXTURE_MIN_FILTER = 0x2801;\n readonly TEXTURE_MAG_FILTER = 0x2800;\n readonly LINEAR = 0x2601;\n readonly NEAREST = 0x2600;\n readonly CLAMP_TO_EDGE = 0x812f;\n readonly RGBA = 0x1908;\n readonly UNSIGNED_BYTE = 0x1401;\n readonly FRAMEBUFFER = 0x8d40;\n readonly COLOR_ATTACHMENT0 = 0x8ce0;\n readonly DEPTH_ATTACHMENT = 0x8d00;\n readonly RENDERBUFFER = 0x8d41;\n readonly DEPTH_COMPONENT24 = 0x81a6;\n readonly FRAMEBUFFER_COMPLETE = 0x8cd5;\n readonly TRIANGLES = 0x0004;\n readonly DEPTH_TEST = 0x0b71;\n readonly CULL_FACE = 0x0b44;\n readonly BLEND = 0x0be2;\n readonly SRC_ALPHA = 0x0302;\n readonly ONE_MINUS_SRC_ALPHA = 0x0303;\n readonly ONE = 1;\n readonly BACK = 0x0405;\n readonly LEQUAL = 0x0203;\n readonly VERTEX_SHADER = 0x8b31;\n readonly FRAGMENT_SHADER = 0x8b30;\n readonly COMPILE_STATUS = 0x8b81;\n readonly LINK_STATUS = 0x8b82;\n readonly ONE_MINUS_SRC_COLOR = 0x0301;\n readonly TRIANGLE_STRIP = 0x0005;\n readonly QUERY_RESULT_AVAILABLE = 0x8867;\n readonly QUERY_RESULT = 0x8866;\n\n // Constants commonly used in setup/webgl.ts\n readonly TRIANGLE_FAN = 0x0006;\n readonly COLOR_BUFFER_BIT = 0x4000;\n readonly DEPTH_BUFFER_BIT = 0x0100;\n\n readonly canvas: HTMLCanvasElement | { width: number; height: number };\n readonly drawingBufferWidth: number;\n readonly drawingBufferHeight: number;\n\n private shaderCounter = 0;\n private programCounter = 0;\n\n compileSucceeds = true;\n linkSucceeds = true;\n shaderInfoLog = 'shader failed';\n programInfoLog = 'program failed';\n\n readonly extensions = new Map<string, unknown>();\n readonly calls: string[] = [];\n readonly uniformLocations = new Map<string, WebGLUniformLocation | null>();\n readonly attributeLocations = new Map<string, number>();\n\n constructor(canvas?: HTMLCanvasElement) {\n if (canvas) {\n this.canvas = canvas;\n this.drawingBufferWidth = canvas.width;\n this.drawingBufferHeight = canvas.height;\n } else {\n this.canvas = { width: 800, height: 600 };\n this.drawingBufferWidth = 800;\n this.drawingBufferHeight = 600;\n }\n }\n\n enable = vi.fn((cap: GLenum) => this.calls.push(`enable:${cap}`));\n disable = vi.fn((cap: GLenum) => this.calls.push(`disable:${cap}`));\n depthFunc = vi.fn((func: GLenum) => this.calls.push(`depthFunc:${func}`));\n cullFace = vi.fn((mode: GLenum) => this.calls.push(`cullFace:${mode}`));\n depthMask = vi.fn((flag: GLboolean) => this.calls.push(`depthMask:${flag}`));\n blendFuncSeparate = vi.fn((srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum) =>\n this.calls.push(`blendFuncSeparate:${srcRGB}:${dstRGB}:${srcAlpha}:${dstAlpha}`)\n );\n blendFunc = vi.fn((sfactor: GLenum, dfactor: GLenum) => this.calls.push(`blendFunc:${sfactor}:${dfactor}`));\n getExtension = vi.fn((name: string) => this.extensions.get(name) ?? null);\n viewport = vi.fn((x: number, y: number, w: number, h: number) => this.calls.push(`viewport:${x}:${y}:${w}:${h}`));\n clear = vi.fn((mask: number) => this.calls.push(`clear:${mask}`));\n clearColor = vi.fn((r: number, g: number, b: number, a: number) => this.calls.push(`clearColor:${r}:${g}:${b}:${a}`));\n\n createShader = vi.fn((type: GLenum) => ({ id: ++this.shaderCounter, type } as unknown as WebGLShader));\n shaderSource = vi.fn((shader: ShaderRecord, source: string) => this.calls.push(`shaderSource:${shader.id}:${source}`));\n compileShader = vi.fn((shader: ShaderRecord) => this.calls.push(`compileShader:${shader.id}`));\n getShaderParameter = vi.fn((shader: ShaderRecord, pname: GLenum) =>\n pname === this.COMPILE_STATUS ? this.compileSucceeds : null\n );\n getShaderInfoLog = vi.fn(() => (this.compileSucceeds ? '' : this.shaderInfoLog));\n deleteShader = vi.fn((shader: ShaderRecord) => this.calls.push(`deleteShader:${shader.id}`));\n\n createProgram = vi.fn(() => ({ id: ++this.programCounter } as unknown as WebGLProgram));\n attachShader = vi.fn((program: ProgramRecord, shader: ShaderRecord) =>\n this.calls.push(`attach:${program.id}:${shader.id}`)\n );\n bindAttribLocation = vi.fn((program: ProgramRecord, index: number, name: string) =>\n this.calls.push(`bindAttribLocation:${program.id}:${index}:${name}`)\n );\n linkProgram = vi.fn((program: ProgramRecord) => this.calls.push(`link:${program.id}`));\n getProgramParameter = vi.fn((program: ProgramRecord, pname: GLenum) =>\n pname === this.LINK_STATUS ? this.linkSucceeds : null\n );\n getProgramInfoLog = vi.fn(() => (this.linkSucceeds ? '' : this.programInfoLog));\n deleteProgram = vi.fn((program: ProgramRecord) => this.calls.push(`deleteProgram:${program.id}`));\n useProgram = vi.fn((program: ProgramRecord | null) => this.calls.push(`useProgram:${program?.id ?? 'null'}`));\n getUniformLocation = vi.fn((program: ProgramRecord, name: string) => {\n this.calls.push(`getUniformLocation:${program.id}:${name}`);\n return this.uniformLocations.get(name) ?? null;\n });\n getAttribLocation = vi.fn((program: ProgramRecord, name: string) => {\n this.calls.push(`getAttribLocation:${program.id}:${name}`);\n return this.attributeLocations.get(name) ?? -1;\n });\n\n createBuffer = vi.fn(() => ({ buffer: {} } as unknown as WebGLBuffer));\n bindBuffer = vi.fn((target: GLenum, buffer: WebGLBuffer | null) => this.calls.push(`bindBuffer:${target}:${!!buffer}`));\n bufferData = vi.fn((target: GLenum, data: number | BufferSource, usage: GLenum) =>\n this.calls.push(`bufferData:${target}:${usage}:${typeof data === 'number' ? data : 'data'}`)\n );\n bufferSubData = vi.fn((target: GLenum, offset: number, data: BufferSource) =>\n this.calls.push(`bufferSubData:${target}:${offset}:${data.byteLength ?? 'len'}`)\n );\n deleteBuffer = vi.fn((buffer: WebGLBuffer) => this.calls.push(`deleteBuffer:${!!buffer}`));\n\n createVertexArray = vi.fn(() => ({ vao: {} } as unknown as WebGLVertexArrayObject));\n bindVertexArray = vi.fn((vao: WebGLVertexArrayObject | null) => this.calls.push(`bindVertexArray:${!!vao}`));\n enableVertexAttribArray = vi.fn((index: number) => this.calls.push(`enableAttrib:${index}`));\n vertexAttribPointer = vi.fn(\n (index: number, size: number, type: GLenum, normalized: boolean, stride: number, offset: number) =>\n this.calls.push(`vertexAttribPointer:${index}:${size}:${type}:${normalized}:${stride}:${offset}`)\n );\n vertexAttribDivisor = vi.fn((index: number, divisor: number) => this.calls.push(`divisor:${index}:${divisor}`));\n deleteVertexArray = vi.fn((vao: WebGLVertexArrayObject) => this.calls.push(`deleteVertexArray:${!!vao}`));\n\n createTexture = vi.fn(() => ({ texture: {} } as unknown as WebGLTexture));\n activeTexture = vi.fn((unit: GLenum) => this.calls.push(`activeTexture:${unit}`));\n bindTexture = vi.fn((target: GLenum, texture: WebGLTexture | null) => this.calls.push(`bindTexture:${target}:${!!texture}`));\n texParameteri = vi.fn((target: GLenum, pname: GLenum, param: GLint) =>\n this.calls.push(`texParameteri:${target}:${pname}:${param}`)\n );\n texImage2D = vi.fn(\n (\n target: GLenum,\n level: GLint,\n internalFormat: GLenum,\n width: GLsizei,\n height: GLsizei,\n border: GLint,\n format: GLenum,\n type: GLenum,\n pixels: ArrayBufferView | null\n ) =>\n this.calls.push(\n `texImage2D:${target}:${level}:${internalFormat}:${width}:${height}:${border}:${format}:${type}:${pixels ? 'data' : 'null'}`\n )\n );\n\n // Explicitly typing this one with legacyFn or manually typing it to avoid inference errors\n texImage3D = legacyFn<[GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, ArrayBufferView | null], void>();\n\n deleteTexture = vi.fn((texture: WebGLTexture) => this.calls.push(`deleteTexture:${!!texture}`));\n\n createFramebuffer = vi.fn(() => ({ fb: {} } as unknown as WebGLFramebuffer));\n bindFramebuffer = vi.fn((target: GLenum, framebuffer: WebGLFramebuffer | null) =>\n this.calls.push(`bindFramebuffer:${target}:${!!framebuffer}`)\n );\n framebufferTexture2D = vi.fn(\n (target: GLenum, attachment: GLenum, textarget: GLenum, texture: WebGLTexture | null, level: GLint) =>\n this.calls.push(`framebufferTexture2D:${target}:${attachment}:${textarget}:${!!texture}:${level}`)\n );\n deleteFramebuffer = vi.fn((fb: WebGLFramebuffer) => this.calls.push(`deleteFramebuffer:${!!fb}`));\n checkFramebufferStatus = vi.fn((target: GLenum) => this.FRAMEBUFFER_COMPLETE);\n\n createRenderbuffer = vi.fn(() => ({ rb: {} } as unknown as WebGLRenderbuffer));\n bindRenderbuffer = vi.fn((target: GLenum, renderbuffer: WebGLRenderbuffer | null) =>\n this.calls.push(`bindRenderbuffer:${target}:${!!renderbuffer}`)\n );\n renderbufferStorage = vi.fn((target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei) =>\n this.calls.push(`renderbufferStorage:${target}:${internalformat}:${width}:${height}`)\n );\n framebufferRenderbuffer = vi.fn((target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: WebGLRenderbuffer | null) =>\n this.calls.push(`framebufferRenderbuffer:${target}:${attachment}:${renderbuffertarget}:${!!renderbuffer}`)\n );\n deleteRenderbuffer = vi.fn((rb: WebGLRenderbuffer) => this.calls.push(`deleteRenderbuffer:${!!rb}`));\n\n drawArrays = vi.fn((mode: GLenum, first: GLint, count: GLsizei) =>\n this.calls.push(`drawArrays:${mode}:${first}:${count}`)\n );\n\n drawElements = vi.fn((mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr) =>\n this.calls.push(`drawElements:${mode}:${count}:${type}:${offset}`)\n );\n\n // Queries\n createQuery = vi.fn(() => ({}) as WebGLQuery);\n beginQuery = legacyFn<[GLenum], void>();\n endQuery = legacyFn<[GLenum], void>();\n deleteQuery = legacyFn<[WebGLQuery | null], void>();\n getQueryParameter = legacyFn<[WebGLQuery, GLenum], any>();\n getParameter = legacyFn<[GLenum], any>();\n\n uniform1f = vi.fn((location: WebGLUniformLocation | null, x: GLfloat) =>\n this.calls.push(`uniform1f:${location ? 'set' : 'null'}:${x}`)\n );\n uniform1i = vi.fn((location: WebGLUniformLocation | null, x: GLint) =>\n this.calls.push(`uniform1i:${location ? 'set' : 'null'}:${x}`)\n );\n uniform4f = vi.fn((location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat) =>\n this.calls.push(`uniform4f:${location ? 'set' : 'null'}:${x}:${y}:${z}:${w}`)\n );\n uniform3fv = vi.fn((location: WebGLUniformLocation | null, data: Float32List | number[]) =>\n this.calls.push(`uniform3fv:${location ? 'set' : 'null'}:${Array.from(data as Iterable<number>).join(',')}`)\n );\n uniform3f = vi.fn((location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat) =>\n this.calls.push(`uniform3f:${location ? 'set' : 'null'}:${x}:${y}:${z}`)\n );\n uniform2f = vi.fn((location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat) =>\n this.calls.push(`uniform2f:${location ? 'set' : 'null'}:${x}:${y}`)\n );\n uniform4fv = vi.fn((location: WebGLUniformLocation | null, data: Float32List) =>\n this.calls.push(`uniform4fv:${location ? 'set' : 'null'}:${Array.from(data as Iterable<number>).join(',')}`)\n );\n uniformMatrix4fv = vi.fn(\n (location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List | Iterable<number>) =>\n this.calls.push(`uniformMatrix4fv:${location ? 'set' : 'null'}:${transpose}:${Array.from(data as Iterable<number>).join(',')}`)\n );\n\n uniformBlockBinding = legacyFn<[WebGLProgram, number, number], void>();\n\n isContextLost = vi.fn(() => false);\n}\n\nexport function createMockWebGL2Context(\n overridesOrCanvas?: Partial<WebGL2RenderingContext> | HTMLCanvasElement\n): MockWebGL2RenderingContext {\n let context: MockWebGL2RenderingContext;\n\n if (overridesOrCanvas instanceof Object && 'width' in overridesOrCanvas && 'height' in overridesOrCanvas && 'getContext' in overridesOrCanvas) {\n // It's likely a canvas element (or mock of it)\n context = new MockWebGL2RenderingContext(overridesOrCanvas as HTMLCanvasElement);\n } else {\n context = new MockWebGL2RenderingContext();\n if (overridesOrCanvas) {\n Object.assign(context, overridesOrCanvas);\n }\n }\n\n return context;\n}\n","import { Canvas, ImageData } from '@napi-rs/canvas';\nimport { createMockWebGL2Context } from '../engine/mocks/webgl.js';\n\n/**\n * Creates a mock HTMLCanvasElement backed by napi-rs/canvas,\n * with support for both 2D and WebGL2 contexts.\n */\nexport function createMockCanvas(width: number = 300, height: number = 150): HTMLCanvasElement {\n // Use a real JSDOM canvas if available in the environment (setupBrowserEnvironment)\n if (typeof document !== 'undefined' && document.createElement) {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n // Fallback for non-JSDOM environments or specialized testing\n const napiCanvas = new Canvas(width, height);\n const canvas = {\n width,\n height,\n getContext: (contextId: string, options?: any) => {\n if (contextId === '2d') {\n return napiCanvas.getContext('2d', options);\n }\n if (contextId === 'webgl2') {\n return createMockWebGL2Context(canvas as any);\n }\n return null;\n },\n toDataURL: () => napiCanvas.toDataURL(),\n toBuffer: (mime: any) => napiCanvas.toBuffer(mime),\n // Add other properties as needed\n } as unknown as HTMLCanvasElement;\n\n return canvas;\n}\n\n/**\n * Creates a mock CanvasRenderingContext2D.\n */\nexport function createMockCanvasContext2D(canvas?: HTMLCanvasElement): CanvasRenderingContext2D {\n const c = canvas || createMockCanvas();\n const ctx = c.getContext('2d');\n if (!ctx) {\n throw new Error('Failed to create 2D context');\n }\n return ctx as CanvasRenderingContext2D;\n}\n\n/**\n * Information about a captured draw call.\n */\nexport interface DrawCall {\n method: string;\n args: any[];\n}\n\n/**\n * Wraps a CanvasRenderingContext2D to capture all method calls.\n */\nexport function captureCanvasDrawCalls(context: CanvasRenderingContext2D): DrawCall[] {\n const calls: DrawCall[] = [];\n const proto = Object.getPrototypeOf(context);\n\n // Iterate over all properties of the context prototype\n for (const key of Object.getOwnPropertyNames(proto)) {\n const value = (context as any)[key];\n if (typeof value === 'function') {\n // Override function\n (context as any)[key] = function(...args: any[]) {\n calls.push({ method: key, args });\n return value.apply(context, args);\n };\n }\n }\n\n return calls;\n}\n\n/**\n * Creates a mock ImageData object.\n */\nexport function createMockImageData(width: number, height: number, fillColor?: [number, number, number, number]): ImageData {\n // Check if global ImageData is available (polyfilled by setupBrowserEnvironment)\n if (typeof global.ImageData !== 'undefined') {\n const data = new Uint8ClampedArray(width * height * 4);\n if (fillColor) {\n for (let i = 0; i < data.length; i += 4) {\n data[i] = fillColor[0];\n data[i + 1] = fillColor[1];\n data[i + 2] = fillColor[2];\n data[i + 3] = fillColor[3];\n }\n }\n return new global.ImageData(data, width, height) as unknown as ImageData;\n }\n\n // Fallback if not globally available, though it should be with @napi-rs/canvas\n const data = new Uint8ClampedArray(width * height * 4);\n if (fillColor) {\n for (let i = 0; i < data.length; i += 4) {\n data[i] = fillColor[0];\n data[i + 1] = fillColor[1];\n data[i + 2] = fillColor[2];\n data[i + 3] = fillColor[3];\n }\n }\n return new ImageData(data, width, height);\n}\n\n/**\n * Creates a mock HTMLImageElement.\n */\nexport function createMockImage(width: number = 100, height: number = 100, src: string = ''): HTMLImageElement {\n if (typeof document !== 'undefined' && document.createElement) {\n const img = document.createElement('img');\n img.width = width;\n img.height = height;\n if (src) img.src = src;\n return img;\n }\n\n // Fallback\n const img = {\n width,\n height,\n src,\n complete: true,\n onload: null,\n onerror: null,\n } as unknown as HTMLImageElement;\n\n // Simulate async load if src is provided\n if (src) {\n setTimeout(() => {\n if (img.onload) (img.onload as any)();\n }, 0);\n }\n\n return img;\n}\n","\n// Types for our setup\nexport interface HeadlessWebGPUSetup {\n adapter: GPUAdapter;\n device: GPUDevice;\n cleanup: () => Promise<void>;\n}\n\nexport interface WebGPUContextState {\n adapter: GPUAdapter;\n device: GPUDevice;\n queue: GPUQueue;\n format: GPUTextureFormat;\n}\n\n/**\n * Initialize WebGPU in a headless Node.js environment using @webgpu/dawn (via webgpu package)\n */\nexport async function initHeadlessWebGPU(\n options?: {\n powerPreference?: 'low-power' | 'high-performance';\n requiredFeatures?: GPUFeatureName[];\n }\n): Promise<HeadlessWebGPUSetup> {\n // Check if we are in Node.js environment\n if (typeof process === 'undefined' || process.release?.name !== 'node') {\n throw new Error('initHeadlessWebGPU should only be called in a Node.js environment');\n }\n\n // Dynamic import to avoid hard dependency\n let create, globals;\n try {\n const webgpu = await import('webgpu');\n create = webgpu.create;\n globals = webgpu.globals;\n } catch (e) {\n throw new Error(`Failed to load \"webgpu\" package. Please ensure it is installed. Original error: ${e}`);\n }\n\n // Inject WebGPU globals into globalThis if not already present\n // Note: we need to handle navigator specifically as it might be read-only in some envs (like jsdom)\n // or simply missing.\n if (!globalThis.navigator) {\n // @ts-ignore\n globalThis.navigator = {};\n }\n\n if (!globalThis.navigator.gpu) {\n // Create the GPU instance using the 'webgpu' package's create function\n // This is more robust than relying on 'globals' if 'globals' expects a clean environment\n const gpu = create([]);\n\n try {\n Object.defineProperty(globalThis.navigator, 'gpu', {\n value: gpu,\n writable: true,\n configurable: true\n });\n } catch (e) {\n // Fallback if defineProperty fails (e.g. read-only navigator in strict mode)\n // But usually in tests we can modify it.\n // If we are in JSDOM, navigator might be tricky.\n console.warn('Could not define navigator.gpu, trying direct assignment');\n // @ts-ignore\n globalThis.navigator.gpu = gpu;\n }\n\n // Also inject other globals like GPUAdapter, GPUDevice etc.\n Object.assign(globalThis, globals);\n }\n\n // Request Adapter\n const adapter = await navigator.gpu.requestAdapter({\n powerPreference: options?.powerPreference || 'high-performance',\n });\n\n if (!adapter) {\n throw new Error('Failed to create WebGPU adapter');\n }\n\n // Request Device\n const device = await adapter.requestDevice({\n requiredFeatures: options?.requiredFeatures || [],\n });\n\n if (!device) {\n throw new Error('Failed to create WebGPU device');\n }\n\n return {\n adapter,\n device,\n cleanup: async () => {\n device.destroy();\n // 'webgpu' package doesn't expose a way to explicitly destroy the adapter or the global instance\n // cleanly other than letting it be garbage collected or process exit.\n // However, destroying the device is usually sufficient for tests.\n }\n };\n}\n\n/**\n * Creates a complete context state for testing\n */\nexport async function createHeadlessTestContext(): Promise<WebGPUContextState> {\n const { adapter, device } = await initHeadlessWebGPU();\n return {\n adapter,\n device,\n queue: device.queue,\n format: 'rgba8unorm'\n };\n}\n","// Remove top-level import to avoid runtime crash when gl is missing\n// import createGL from 'gl';\nimport type { WebGLContextState } from '@quake2ts/engine';\n\nexport interface HeadlessWebGLOptions {\n width?: number;\n height?: number;\n antialias?: boolean;\n preserveDrawingBuffer?: boolean;\n}\n\nexport interface HeadlessWebGLContext {\n gl: WebGL2RenderingContext;\n width: number;\n height: number;\n cleanup: () => void;\n}\n\n/**\n * Creates a headless WebGL2 context using the 'gl' package.\n * This is used for running WebGL tests in a Node.js environment without a browser.\n */\nexport function createHeadlessWebGL(\n options: HeadlessWebGLOptions = {}\n): HeadlessWebGLContext {\n const width = options.width ?? 256;\n const height = options.height ?? 256;\n\n let createGL;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n createGL = require('gl');\n } catch (e) {\n throw new Error('gl package not found or failed to load. Install it to run WebGL tests.');\n }\n\n // Create WebGL context using 'gl' package\n const glContext = createGL(width, height, {\n antialias: options.antialias ?? false, // Default to false for deterministic testing\n preserveDrawingBuffer: options.preserveDrawingBuffer ?? true, // Needed for readback\n stencil: true,\n depth: true,\n alpha: true,\n webgl2: true // Request WebGL 2.0 context for GLSL 3.00 ES support\n });\n\n if (!glContext) {\n throw new Error('Failed to create headless WebGL context');\n }\n\n // Cast to WebGL2RenderingContext as 'gl' returns a compatible interface\n // but TypeScript types might not align perfectly without casting\n const gl = glContext as unknown as WebGL2RenderingContext;\n\n // Verify context creation\n const version = gl.getParameter(gl.VERSION);\n // console.log(`Created headless WebGL context: ${version}`);\n\n // Create cleanup function\n const cleanup = () => {\n const ext = gl.getExtension('STACKGL_destroy_context');\n if (ext) {\n ext.destroy();\n }\n };\n\n return {\n gl,\n width,\n height,\n cleanup\n };\n}\n\n/**\n * Captures the current framebuffer content as a pixel array.\n * Performs a vertical flip to match standard image coordinates (top-left origin).\n */\nexport function captureWebGLFramebuffer(\n gl: WebGL2RenderingContext,\n width: number,\n height: number\n): Uint8ClampedArray {\n const pixels = new Uint8ClampedArray(width * height * 4);\n\n // Read pixels from framebuffer (bottom-left origin)\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n // Flip vertically to match image coordinates (top-left origin)\n return flipPixelsVertically(pixels, width, height);\n}\n\n/**\n * Flips a pixel array vertically in-place or returns a new array.\n * WebGL reads pixels bottom-up, but images are typically stored top-down.\n */\nexport function flipPixelsVertically(\n pixels: Uint8ClampedArray,\n width: number,\n height: number\n): Uint8ClampedArray {\n const flipped = new Uint8ClampedArray(pixels.length);\n const rowSize = width * 4;\n\n for (let y = 0; y < height; y++) {\n const srcRowStart = y * rowSize;\n const destRowStart = (height - 1 - y) * rowSize;\n\n // Copy row\n for (let i = 0; i < rowSize; i++) {\n flipped[destRowStart + i] = pixels[srcRowStart + i];\n }\n }\n\n return flipped;\n}\n","import { vi } from 'vitest';\nimport { globals } from 'webgpu';\nimport { LegacyMock } from '../../vitest-compat.js';\n\nexport interface MockWebGPUContext {\n adapter: GPUAdapter;\n device: GPUDevice;\n queue: GPUQueue;\n}\n\nexport interface WebGPUMocks {\n mockGpu: {\n requestAdapter: LegacyMock<[GPURequestAdapterOptions?], Promise<GPUAdapter | null>>;\n getPreferredCanvasFormat: LegacyMock<[], GPUTextureFormat>;\n };\n mockAdapter: GPUAdapter;\n mockDevice: GPUDevice;\n}\n\n/**\n * Patches globalThis with WebGPU globals (GPUBufferUsage, etc.)\n * and optionally patches navigator.gpu.\n */\nexport function setupWebGPUMocks(): WebGPUMocks {\n // 1. Inject globals like GPUBufferUsage, GPUTextureUsage\n Object.assign(globalThis, globals);\n\n // Create mocks for Adapter and Device first so we can use them in the GPU mock\n const mockAdapter = createMockGPUAdapter();\n const mockDevice = createMockGPUDevice();\n\n // 2. Setup Navigator mock\n const mockGpu = {\n requestAdapter: vi.fn().mockResolvedValue(mockAdapter) as unknown as LegacyMock<[GPURequestAdapterOptions?], Promise<GPUAdapter | null>>,\n getPreferredCanvasFormat: vi.fn().mockReturnValue('bgra8unorm') as unknown as LegacyMock<[], GPUTextureFormat>,\n };\n\n // Wire them up\n // @ts-ignore - vitest mock manipulation\n mockAdapter.requestDevice.mockResolvedValue(mockDevice);\n\n if (!globalThis.navigator) {\n // @ts-ignore\n globalThis.navigator = {};\n }\n\n // Safely redefine navigator.gpu\n try {\n // If it exists and is configurable, define it.\n // If it doesn't exist, define it.\n // If it exists and is NOT configurable, we can't do much (but that shouldn't happen in our test env if we control it)\n Object.defineProperty(globalThis.navigator, 'gpu', {\n value: mockGpu,\n writable: true,\n configurable: true\n });\n } catch (e) {\n // Fallback: simple assignment if defineProperty fails (e.g. some JSDOM quirks)\n // @ts-ignore\n globalThis.navigator.gpu = mockGpu;\n }\n\n return {\n mockGpu,\n mockAdapter,\n mockDevice\n };\n}\n\nexport function createMockGPUAdapter(options: Partial<GPUAdapter> = {}): GPUAdapter {\n return {\n features: new Set(),\n limits: {},\n isFallbackAdapter: false,\n requestDevice: vi.fn().mockResolvedValue(createMockGPUDevice()),\n requestAdapterInfo: vi.fn().mockResolvedValue({}),\n ...options,\n } as unknown as GPUAdapter;\n}\n\nexport function createMockGPUDevice(features: Set<GPUFeatureName> = new Set()): GPUDevice {\n const queue = createMockQueue();\n\n return {\n features,\n limits: {},\n queue,\n destroy: vi.fn(),\n createBuffer: vi.fn((descriptor: GPUBufferDescriptor) => createMockGPUBuffer(descriptor)),\n createTexture: vi.fn((descriptor: GPUTextureDescriptor) => createMockGPUTexture(descriptor)),\n createSampler: vi.fn(() => createMockSampler()),\n createBindGroupLayout: vi.fn(() => ({ label: 'mock-bind-group-layout' })),\n createPipelineLayout: vi.fn(() => ({ label: 'mock-pipeline-layout' })),\n createBindGroup: vi.fn(() => ({ label: 'mock-bind-group' })),\n createShaderModule: vi.fn((descriptor: GPUShaderModuleDescriptor) => createMockShaderModule(descriptor)),\n createComputePipeline: vi.fn(() => createMockComputePipeline()),\n createRenderPipeline: vi.fn(() => createMockRenderPipeline()),\n createComputePipelineAsync: vi.fn().mockResolvedValue(createMockComputePipeline()),\n createRenderPipelineAsync: vi.fn().mockResolvedValue(createMockRenderPipeline()),\n createCommandEncoder: vi.fn(() => createMockCommandEncoder()),\n createQuerySet: vi.fn(() => ({ label: 'mock-query-set' })),\n pushErrorScope: vi.fn(),\n popErrorScope: vi.fn().mockResolvedValue(null),\n addEventListener: vi.fn(),\n removeEventListener: vi.fn(),\n dispatchEvent: vi.fn(),\n onuncapturederror: null,\n label: '',\n lost: Promise.resolve({ reason: 'destroyed', message: 'Device lost' }),\n } as unknown as GPUDevice;\n}\n\nexport function createMockQueue(): GPUQueue {\n return {\n submit: vi.fn(),\n onSubmittedWorkDone: vi.fn().mockResolvedValue(undefined),\n writeBuffer: vi.fn(),\n writeTexture: vi.fn(),\n copyExternalImageToTexture: vi.fn(),\n label: '',\n } as unknown as GPUQueue;\n}\n\nexport function createMockGPUBuffer(descriptor: GPUBufferDescriptor): GPUBuffer {\n return {\n size: descriptor.size,\n usage: descriptor.usage,\n mapState: 'unmapped',\n mapAsync: vi.fn().mockResolvedValue(undefined),\n getMappedRange: vi.fn(() => new ArrayBuffer(descriptor.size)),\n unmap: vi.fn(),\n destroy: vi.fn(),\n label: descriptor.label || '',\n } as unknown as GPUBuffer;\n}\n\nexport function createMockGPUTexture(descriptor: GPUTextureDescriptor): GPUTexture {\n const size = descriptor.size;\n let width = 0;\n let height = 0;\n let depthOrArrayLayers = 1;\n\n if (Array.isArray(size) || size instanceof Float32Array || size instanceof Uint32Array) {\n // Iterable<number>\n const arr = Array.from(size as Iterable<number>);\n width = arr[0] || 0;\n height = arr[1] || 1;\n depthOrArrayLayers = arr[2] || 1;\n } else if (typeof size === 'object') {\n // GPUExtent3DDict\n const dict = size as GPUExtent3DDict;\n width = dict.width;\n height = dict.height || 1;\n depthOrArrayLayers = dict.depthOrArrayLayers || 1;\n }\n\n return {\n width,\n height,\n depthOrArrayLayers,\n mipLevelCount: descriptor.mipLevelCount || 1,\n sampleCount: descriptor.sampleCount || 1,\n dimension: descriptor.dimension || '2d',\n format: descriptor.format,\n usage: descriptor.usage,\n createView: vi.fn(() => createMockTextureView()),\n destroy: vi.fn(),\n label: descriptor.label || '',\n } as unknown as GPUTexture;\n}\n\nexport function createMockTextureView(): GPUTextureView {\n return {\n label: '',\n } as unknown as GPUTextureView;\n}\n\nexport function createMockSampler(): GPUSampler {\n return {\n label: '',\n } as unknown as GPUSampler;\n}\n\nexport function createMockShaderModule(descriptor: GPUShaderModuleDescriptor): GPUShaderModule {\n return {\n getCompilationInfo: vi.fn().mockResolvedValue({ messages: [] }),\n label: descriptor.label || '',\n } as unknown as GPUShaderModule;\n}\n\nexport function createMockComputePipeline(): GPUComputePipeline {\n return {\n getBindGroupLayout: vi.fn(() => ({ label: 'mock-bind-group-layout' })),\n label: '',\n } as unknown as GPUComputePipeline;\n}\n\nexport function createMockRenderPipeline(): GPURenderPipeline {\n return {\n getBindGroupLayout: vi.fn(() => ({ label: 'mock-bind-group-layout' })),\n label: '',\n } as unknown as GPURenderPipeline;\n}\n\nexport function createMockCommandEncoder(): GPUCommandEncoder {\n return {\n beginRenderPass: vi.fn(() => createMockRenderPassEncoder()),\n beginComputePass: vi.fn(() => createMockComputePassEncoder()),\n copyBufferToBuffer: vi.fn(),\n copyBufferToTexture: vi.fn(),\n copyTextureToBuffer: vi.fn(),\n copyTextureToTexture: vi.fn(),\n clearBuffer: vi.fn(),\n writeTimestamp: vi.fn(),\n resolveQuerySet: vi.fn(),\n finish: vi.fn(() => ({ label: 'mock-command-buffer' })),\n pushDebugGroup: vi.fn(),\n popDebugGroup: vi.fn(),\n insertDebugMarker: vi.fn(),\n label: '',\n } as unknown as GPUCommandEncoder;\n}\n\nexport function createMockRenderPassEncoder(): GPURenderPassEncoder {\n return {\n setPipeline: vi.fn(),\n setIndexBuffer: vi.fn(),\n setVertexBuffer: vi.fn(),\n setBindGroup: vi.fn(),\n setViewport: vi.fn(),\n setScissorRect: vi.fn(),\n setBlendConstant: vi.fn(),\n setStencilReference: vi.fn(),\n beginOcclusionQuery: vi.fn(),\n endOcclusionQuery: vi.fn(),\n executeBundles: vi.fn(),\n draw: vi.fn(),\n drawIndexed: vi.fn(),\n drawIndirect: vi.fn(),\n drawIndexedIndirect: vi.fn(),\n end: vi.fn(),\n pushDebugGroup: vi.fn(),\n popDebugGroup: vi.fn(),\n insertDebugMarker: vi.fn(),\n label: '',\n } as unknown as GPURenderPassEncoder;\n}\n\nexport function createMockComputePassEncoder(): GPUComputePassEncoder {\n return {\n setPipeline: vi.fn(),\n setBindGroup: vi.fn(),\n dispatchWorkgroups: vi.fn(),\n dispatchWorkgroupsIndirect: vi.fn(),\n end: vi.fn(),\n pushDebugGroup: vi.fn(),\n popDebugGroup: vi.fn(),\n insertDebugMarker: vi.fn(),\n label: '',\n } as unknown as GPUComputePassEncoder;\n}\n\nexport function createMockWebGPUContext(): MockWebGPUContext {\n const adapter = createMockGPUAdapter();\n const device = createMockGPUDevice();\n return {\n adapter,\n device,\n queue: device.queue,\n };\n}\n","/**\n * Interface for the mock RequestAnimationFrame implementation.\n */\nexport interface MockRAF {\n /**\n * Advances time by one tick (simulating one frame).\n * @param time Timestamp to pass to callbacks (default: calls Date.now())\n */\n tick(time?: number): void;\n /**\n * Advances time by a specific amount, triggering multiple frames if necessary.\n * Not fully implemented in simple version, acts as alias to tick() with specific time.\n */\n advance(ms: number): void;\n /**\n * Returns current pending callbacks.\n */\n getCallbacks(): Array<{id: number, callback: FrameRequestCallback}>;\n}\n\n/**\n * Creates a mock RequestAnimationFrame implementation.\n * Replaces global.requestAnimationFrame and cancelAnimationFrame.\n */\nexport function createMockRAF(): MockRAF {\n let callbacks: Array<{id: number, callback: FrameRequestCallback}> = [];\n let lastId = 0;\n let currentTime = 0;\n\n const originalRAF = global.requestAnimationFrame;\n const originalCancelRAF = global.cancelAnimationFrame;\n\n global.requestAnimationFrame = (callback: FrameRequestCallback): number => {\n lastId++;\n callbacks.push({ id: lastId, callback });\n return lastId;\n };\n\n global.cancelAnimationFrame = (id: number): void => {\n callbacks = callbacks.filter(cb => cb.id !== id);\n };\n\n return {\n tick(time?: number) {\n if (time) currentTime = time;\n else currentTime += 16.66; // ~60fps\n\n const currentCallbacks = [...callbacks];\n callbacks = []; // Clear before execution to allow re-scheduling\n\n currentCallbacks.forEach(cb => cb.callback(currentTime));\n },\n advance(ms: number) {\n // Simple implementation: just advance time and process one batch\n // For more complex simulation, we might loop\n currentTime += ms;\n this.tick(currentTime);\n },\n getCallbacks() {\n return callbacks;\n }\n };\n}\n\n/**\n * Creates a mock Performance object.\n */\nexport function createMockPerformance(startTime: number = 0): Performance {\n let now = startTime;\n\n const mockPerformance = {\n now: () => now,\n timeOrigin: startTime,\n timing: {\n navigationStart: startTime,\n },\n mark: (_name: string) => {},\n measure: (_name: string, _start: string, _end: string) => {},\n getEntries: () => [],\n getEntriesByName: (_name: string) => [],\n getEntriesByType: (_type: string) => [],\n clearMarks: (_name?: string) => {},\n clearMeasures: (_name?: string) => {},\n clearResourceTimings: () => {},\n setResourceTimingBufferSize: (_maxSize: number) => {},\n onresourcetimingbufferfull: null,\n toJSON: () => ({})\n } as unknown as Performance;\n\n // Polyfill global if needed, or return for injection\n if (typeof global.performance === 'undefined') {\n global.performance = mockPerformance;\n }\n\n return mockPerformance;\n}\n\nexport interface ControlledTimer {\n /**\n * Advances virtual time by ms.\n */\n advanceBy(ms: number): void;\n /**\n * Runs all pending timers.\n */\n runAll(): void;\n /**\n * Restores original timer functions.\n */\n clear(): void;\n}\n\n/**\n * Creates controlled timers (setTimeout/setInterval).\n * Note: Use verify's useFakeTimers() for better integration with test runner.\n * This is a lightweight alternative or specific helper.\n */\nexport function createControlledTimer(): ControlledTimer {\n // This functionality is best provided by vitest/jest directly via vi.useFakeTimers()\n // Wrapping it here for convenience if needed, but for now we'll recommend `vi`.\n console.warn('createControlledTimer: Recommend using vi.useFakeTimers() instead.');\n\n return {\n advanceBy: (ms: number) => { /* delegate to vi.advanceTimersByTime(ms) in consumer */ },\n runAll: () => { /* delegate to vi.runAllTimers() */ },\n clear: () => { /* delegate to vi.useRealTimers() */ }\n };\n}\n\n/**\n * Simulates multiple RAF frames.\n */\nexport function simulateFrames(count: number, frameTime: number = 16, callback?: (frameIndex: number) => void): void {\n for (let i = 0; i < count; i++) {\n // If using the global mock RAF from createMockRAF, we just rely on callbacks being scheduled.\n // However, if we need to manually trigger them, we assume existing RAF loop.\n // This helper assumes a synchronous execution where we can just wait or tick.\n // With `vi.useFakeTimers()`, we would `vi.advanceTimersByTime(frameTime)`.\n\n if (callback) callback(i);\n }\n}\n","/**\n * Setup helpers for Node.js environments.\n */\nexport interface NodeSetupOptions {\n // Add options as needed, e.g. mocking fs, process.env, etc.\n}\n\n/**\n * Sets up a Node.js environment for testing.\n * Currently a placeholder for future Node-specific setup.\n */\nexport function setupNodeEnvironment(options: NodeSetupOptions = {}) {\n // No-op for now, but provides a hook for future setup\n}\n\n/**\n * Teardown for Node.js environment.\n */\nexport function teardownNodeEnvironment() {\n // No-op for now\n}\n","import type {\n AudioContextLike,\n AudioDestinationNodeLike,\n AudioNodeLike,\n AudioParamLike,\n AudioBufferSourceNodeLike,\n AudioBufferLike,\n GainNodeLike,\n DynamicsCompressorNodeLike,\n PannerNodeLike,\n BiquadFilterNodeLike,\n} from '@quake2ts/engine';\n\nexport class FakeAudioParam implements AudioParamLike {\n constructor(public value: number) {}\n}\n\nexport class FakeAudioNode implements AudioNodeLike {\n readonly connections: AudioNodeLike[] = [];\n connect(destination: AudioNodeLike): void {\n this.connections.push(destination);\n }\n}\n\nexport class FakeGainNode extends FakeAudioNode implements GainNodeLike, DynamicsCompressorNodeLike {\n gain = new FakeAudioParam(1);\n}\n\nexport class FakePannerNode extends FakeAudioNode implements PannerNodeLike {\n positionX = new FakeAudioParam(0);\n positionY = new FakeAudioParam(0);\n positionZ = new FakeAudioParam(0);\n refDistance?: number;\n maxDistance?: number;\n rolloffFactor?: number;\n distanceModel?: string;\n}\n\nexport class FakeBiquadFilterNode extends FakeAudioNode implements BiquadFilterNodeLike {\n frequency = new FakeAudioParam(0);\n Q = new FakeAudioParam(0);\n type = 'lowpass';\n}\n\nexport class FakeBufferSource extends FakeAudioNode implements AudioBufferSourceNodeLike {\n buffer: AudioBufferLike | null = null;\n loop = false;\n playbackRate = new FakeAudioParam(1);\n onended: (() => void) | null = null;\n startedAt?: number;\n stoppedAt?: number;\n start(when = 0, offset?: number, duration?: number): void {\n this.startedAt = when;\n this.offset = offset;\n this.duration = duration;\n }\n stop(when = 0): void {\n this.stoppedAt = when;\n this.onended?.();\n }\n offset?: number;\n duration?: number;\n}\n\nexport class FakeDestination extends FakeAudioNode implements AudioDestinationNodeLike {}\n\nexport class FakeAudioContext implements AudioContextLike {\n readonly destination = new FakeDestination();\n state: AudioContextLike['state'] = 'suspended';\n currentTime = 0;\n resumeCalls = 0;\n readonly gains: GainNodeLike[] = [];\n readonly sources: FakeBufferSource[] = [];\n readonly panners: PannerNodeLike[] = [];\n readonly filters: BiquadFilterNodeLike[] = [];\n lastDecoded?: ArrayBuffer;\n createPanner?: () => PannerNodeLike;\n\n constructor(enablePanner = true) {\n if (enablePanner) {\n this.createPanner = () => {\n const node = new FakePannerNode();\n this.panners.push(node);\n return node;\n };\n }\n }\n\n async resume(): Promise<void> {\n this.state = 'running';\n this.resumeCalls += 1;\n }\n\n async suspend(): Promise<void> {\n this.state = 'suspended';\n }\n\n createGain(): GainNodeLike {\n const node = new FakeGainNode();\n this.gains.push(node);\n return node;\n }\n\n createDynamicsCompressor(): DynamicsCompressorNodeLike {\n const node = new FakeGainNode();\n this.gains.push(node);\n return node;\n }\n\n createBufferSource(): AudioBufferSourceNodeLike {\n const node = new FakeBufferSource();\n this.sources.push(node);\n return node;\n }\n\n createBiquadFilter(): BiquadFilterNodeLike {\n const node = new FakeBiquadFilterNode();\n this.filters.push(node);\n return node;\n }\n\n async decodeAudioData(data: ArrayBuffer): Promise<AudioBufferLike> {\n this.lastDecoded = data;\n return { duration: data.byteLength / 1000 };\n }\n\n advanceTime(seconds: number): void {\n this.currentTime += seconds;\n }\n}\n\nexport const createMockAudioBuffer = (duration = 1, channels = 2, sampleRate = 44100): AudioBufferLike => ({ duration });\n\nexport const createMockAudioContext = (overrides?: Partial<AudioContext>): FakeAudioContext => new FakeAudioContext();\n\nexport const createMockPannerNode = (overrides?: Partial<PannerNode>): FakePannerNode => {\n const node = new FakePannerNode();\n if (overrides) {\n Object.assign(node, overrides);\n }\n return node;\n}\n\nexport const createMockBufferSource = (buffer?: AudioBuffer): FakeBufferSource => {\n const node = new FakeBufferSource();\n if (buffer) {\n node.buffer = buffer;\n }\n return node;\n}\n\nexport { FakeBufferSource as MockAudioBufferSourceNode };\n","import { vi } from 'vitest';\nimport {\n Renderer,\n FrameRenderer,\n BspSurfacePipeline,\n Md2Pipeline,\n Md3Pipeline,\n SpriteRenderer,\n SkyboxPipeline,\n RenderableEntity,\n FrameRenderOptions,\n RenderOptions,\n FrameRenderStats,\n SurfaceRenderState,\n Md2MeshBuffers,\n Md3SurfaceMesh,\n Md3SurfaceMaterial,\n SkyboxBindOptions,\n BspSurfaceBindOptions,\n Md2BindOptions,\n RenderModeConfig,\n Texture2D,\n IndexBuffer\n} from '@quake2ts/engine';\nimport { createMockWebGL2Context } from './webgl.js';\n\nexport function createMockRenderer(overrides?: Partial<Renderer>): Renderer {\n return {\n width: 800,\n height: 600,\n collisionVis: {\n render: vi.fn(),\n clear: vi.fn(),\n shaderSize: 0,\n dispose: vi.fn(),\n } as any,\n debug: {\n render: vi.fn(),\n clear: vi.fn(),\n drawLine: vi.fn(),\n drawBoundingBox: vi.fn(),\n drawAxes: vi.fn(),\n getLabels: vi.fn().mockReturnValue([]),\n shaderSize: 0,\n dispose: vi.fn(),\n } as any,\n particleSystem: {\n update: vi.fn(),\n emit: vi.fn(),\n clear: vi.fn(),\n count: 0\n } as any,\n getPerformanceReport: vi.fn().mockReturnValue({}),\n getMemoryUsage: vi.fn().mockReturnValue({}),\n renderFrame: vi.fn(),\n registerPic: vi.fn().mockResolvedValue({} as any),\n registerTexture: vi.fn().mockReturnValue({} as any),\n begin2D: vi.fn(),\n end2D: vi.fn(),\n drawPic: vi.fn(),\n drawString: vi.fn(),\n drawCenterString: vi.fn(),\n drawfillRect: vi.fn(),\n setEntityHighlight: vi.fn(),\n clearEntityHighlight: vi.fn(),\n highlightSurface: vi.fn(),\n removeSurfaceHighlight: vi.fn(),\n setDebugMode: vi.fn(),\n setBrightness: vi.fn(),\n setGamma: vi.fn(),\n setFullbright: vi.fn(),\n setAmbient: vi.fn(),\n setLightStyle: vi.fn(),\n setUnderwaterWarp: vi.fn(),\n setBloom: vi.fn(),\n setBloomIntensity: vi.fn(),\n setLodBias: vi.fn(),\n setAreaPortalState: vi.fn(),\n renderInstanced: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n };\n}\n\nexport function createMockFrameRenderer(overrides?: Partial<FrameRenderer>): FrameRenderer {\n return {\n renderFrame: vi.fn().mockReturnValue({\n batches: 0,\n facesDrawn: 0,\n drawCalls: 0,\n skyDrawn: false,\n viewModelDrawn: false,\n fps: 60,\n vertexCount: 0,\n } as FrameRenderStats),\n ...overrides,\n };\n}\n\nexport function createMockBspPipeline(overrides?: Partial<BspSurfacePipeline>): BspSurfacePipeline {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n shaderSize: 0,\n bind: vi.fn().mockReturnValue({} as SurfaceRenderState),\n draw: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n } as unknown as BspSurfacePipeline;\n}\n\nexport function createMockMd2Pipeline(overrides?: Partial<Md2Pipeline>): Md2Pipeline {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n shaderSize: 0,\n bind: vi.fn(),\n draw: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n } as unknown as Md2Pipeline;\n}\n\nexport function createMockMd3Pipeline(overrides?: Partial<Md3Pipeline>): Md3Pipeline {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n shaderSize: 0,\n bind: vi.fn(),\n drawSurface: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n } as unknown as Md3Pipeline;\n}\n\nexport function createMockSpritePipeline(overrides?: Partial<SpriteRenderer>): SpriteRenderer {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n shaderSize: 0,\n vao: {\n bind: vi.fn(),\n dispose: vi.fn(),\n configureAttributes: vi.fn()\n } as any,\n vbo: {\n bind: vi.fn(),\n dispose: vi.fn(),\n upload: vi.fn()\n } as any,\n whiteTexture: {\n bind: vi.fn(),\n upload: vi.fn()\n } as unknown as Texture2D,\n begin: vi.fn(),\n draw: vi.fn(),\n drawRect: vi.fn(),\n ...overrides,\n } as unknown as SpriteRenderer;\n}\n\nexport function createMockSkyboxPipeline(overrides?: Partial<SkyboxPipeline>): SkyboxPipeline {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n vao: {\n bind: vi.fn(),\n dispose: vi.fn(),\n configureAttributes: vi.fn()\n } as any,\n vbo: {\n bind: vi.fn(),\n dispose: vi.fn(),\n upload: vi.fn()\n } as any,\n cubemap: {\n bind: vi.fn(),\n dispose: vi.fn(),\n setParameters: vi.fn(),\n upload: vi.fn()\n } as any,\n shaderSize: 0,\n bind: vi.fn(),\n draw: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n } as unknown as SkyboxPipeline;\n}\n","import { vi } from 'vitest';\nimport {\n AssetManager,\n Md2Model,\n Md3Model,\n BspMap,\n PreparedTexture\n} from '@quake2ts/engine';\n\nexport function createMockAssetManager(overrides?: Partial<AssetManager>): AssetManager {\n return {\n textures: {\n get: vi.fn(),\n set: vi.fn(),\n has: vi.fn(),\n clear: vi.fn(),\n memoryUsage: 0\n } as any,\n audio: {\n load: vi.fn(),\n get: vi.fn(),\n clearAll: vi.fn()\n } as any,\n loadTexture: vi.fn().mockResolvedValue({} as PreparedTexture),\n registerTexture: vi.fn(),\n loadSound: vi.fn().mockResolvedValue({} as any),\n loadMd2Model: vi.fn().mockResolvedValue({} as Md2Model),\n getMd2Model: vi.fn(),\n loadMd3Model: vi.fn().mockResolvedValue({} as Md3Model),\n getMd3Model: vi.fn(),\n loadSprite: vi.fn().mockResolvedValue({} as any),\n loadMap: vi.fn().mockResolvedValue({} as BspMap),\n getMap: vi.fn(),\n loadPalette: vi.fn().mockResolvedValue(undefined),\n isAssetLoaded: vi.fn().mockReturnValue(true),\n listFiles: vi.fn().mockReturnValue([]),\n resetForLevelChange: vi.fn(),\n getMemoryUsage: vi.fn().mockReturnValue({ textures: 0, audio: 0 }),\n clearCache: vi.fn(),\n preloadAssets: vi.fn().mockResolvedValue(undefined),\n queueLoad: vi.fn().mockImplementation((path) => Promise.resolve({} as any)),\n ...overrides\n } as unknown as AssetManager;\n}\n\nexport function createMockTexture(width: number = 1, height: number = 1, data?: Uint8Array): PreparedTexture {\n return {\n width,\n height,\n data: data || new Uint8Array(width * height * 4).fill(255),\n format: 0, // RGBA\n name: 'mock_texture',\n uploaded: false\n } as unknown as PreparedTexture;\n}\n\nexport function createMockMd2Model(overrides?: Partial<Md2Model>): Md2Model {\n return {\n header: {\n skinWidth: 0,\n skinHeight: 0,\n frameSize: 0,\n numSkins: 0,\n numVertices: 0,\n numSt: 0,\n numTriangles: 0,\n numGlCmds: 0,\n numFrames: 0,\n offsetSkins: 0,\n offsetSt: 0,\n offsetTriangles: 0,\n offsetFrames: 0,\n offsetGlCmds: 0,\n offsetEnd: 0\n },\n skins: [],\n texCoords: [],\n triangles: [],\n frames: [],\n glCommands: new Int32Array(0),\n ...overrides\n } as Md2Model;\n}\n\nexport function createMockMd3Model(overrides?: Partial<Md3Model>): Md3Model {\n return {\n header: {\n ident: 0,\n version: 0,\n name: '',\n flags: 0,\n numFrames: 0,\n numTags: 0,\n numSurfaces: 0,\n numSkins: 0,\n offsetFrames: 0,\n offsetTags: 0,\n offsetSurfaces: 0,\n offsetEnd: 0\n },\n frames: [],\n tags: [],\n surfaces: [],\n ...overrides\n } as Md3Model;\n}\n\nexport function createMockBspMap(overrides?: Partial<BspMap>): BspMap {\n return {\n version: 38,\n entities: [],\n planes: [],\n vertices: [],\n visibility: new Uint8Array(0),\n nodes: [],\n texInfo: [],\n faces: [],\n lightmaps: [],\n leafs: [],\n leafFaces: [],\n leafBrushes: [],\n edges: [],\n faceEdges: [],\n models: [],\n brushes: [],\n brushSides: [],\n ...overrides\n } as BspMap;\n}\n","import { vi } from 'vitest';\nimport { VertexBuffer, IndexBuffer, BufferUsage } from '@quake2ts/engine';\nimport { ShaderProgram, ShaderSources } from '@quake2ts/engine';\nimport { createMockWebGL2Context } from './webgl.js';\n\n// Export these for use in other mocks\nexport { VertexBuffer, IndexBuffer, ShaderProgram };\n\n/**\n * Creates a mock VertexBuffer with an optional data array.\n */\nexport function createMockVertexBuffer(data?: Float32Array, usage?: BufferUsage): VertexBuffer {\n const gl = createMockWebGL2Context() as unknown as WebGL2RenderingContext;\n const vb = new VertexBuffer(gl, usage ?? gl.STATIC_DRAW);\n\n // Spy on methods to track calls\n vi.spyOn(vb, 'bind');\n vi.spyOn(vb, 'upload');\n vi.spyOn(vb, 'update');\n vi.spyOn(vb, 'dispose');\n\n if (data) {\n vb.upload(data as unknown as BufferSource, usage ?? gl.STATIC_DRAW);\n }\n\n return vb;\n}\n\n/**\n * Creates a mock IndexBuffer with an optional data array.\n */\nexport function createMockIndexBuffer(data?: Uint16Array, usage?: BufferUsage): IndexBuffer {\n const gl = createMockWebGL2Context() as unknown as WebGL2RenderingContext;\n const ib = new IndexBuffer(gl, usage ?? gl.STATIC_DRAW);\n\n // Spy on methods\n vi.spyOn(ib, 'bind');\n vi.spyOn(ib, 'upload');\n vi.spyOn(ib, 'update');\n vi.spyOn(ib, 'dispose');\n\n if (data) {\n ib.upload(data as unknown as BufferSource, usage ?? gl.STATIC_DRAW);\n }\n\n return ib;\n}\n\n/**\n * Creates a mock ShaderProgram with optional overrides.\n */\nexport function createMockShaderProgram(overrides?: Partial<ShaderProgram>): ShaderProgram {\n const gl = createMockWebGL2Context() as unknown as WebGL2RenderingContext;\n\n // Create a minimal valid program using the static create method\n const dummySources: ShaderSources = {\n vertex: '#version 300 es\\nvoid main() {}',\n fragment: '#version 300 es\\nvoid main() {}'\n };\n\n const program = ShaderProgram.create(gl, dummySources);\n\n // Spy on methods\n vi.spyOn(program, 'use');\n vi.spyOn(program, 'getUniformLocation');\n vi.spyOn(program, 'getAttributeLocation');\n vi.spyOn(program, 'dispose');\n\n // Apply overrides if provided\n if (overrides) {\n Object.assign(program, overrides);\n }\n\n return program;\n}\n\n/**\n * Helper to create a mock ShaderProgram with custom source code.\n */\nexport function createMockShader(vertSource?: string, fragSource?: string): ShaderProgram {\n const gl = createMockWebGL2Context() as unknown as WebGL2RenderingContext;\n const sources: ShaderSources = {\n vertex: vertSource ?? '#version 300 es\\nvoid main() {}',\n fragment: fragSource ?? '#version 300 es\\nvoid main() {}'\n };\n\n return ShaderProgram.create(gl, sources);\n}\n","import { vi } from 'vitest';\nimport { Vec3 } from '@quake2ts/shared';\nimport { DynamicLightManager } from '@quake2ts/engine';\nimport type { DLight } from '@quake2ts/engine';\n\n// Export types\nexport { DynamicLightManager };\nexport type { DLight };\n\n// Mock Lightmap type since it's typically just a raw buffer or texture in the engine\n// But based on the task \"Add createMockLightmap() factory\", we'll create a simple structure.\nexport interface Lightmap {\n width: number;\n height: number;\n data: Uint8Array;\n}\n\n/**\n * Creates a mock DLight with default values.\n */\nexport function createMockDLight(\n position: Vec3 = { x: 0, y: 0, z: 0 },\n color: Vec3 = { x: 1, y: 1, z: 1 },\n intensity: number = 300\n): DLight {\n return {\n origin: { ...position },\n color: { ...color },\n intensity,\n die: Number.MAX_SAFE_INTEGER,\n };\n}\n\n/**\n * Creates a mock DynamicLightManager with spy methods.\n */\nexport function createMockDLightManager(overrides?: Partial<DynamicLightManager>): DynamicLightManager {\n // We can't easily spy on methods of a real instance if we just return an object literal\n // that mimics the interface, unless we use the real class or a full mock.\n // Since DynamicLightManager is a class with logic, let's create a real instance and spy on it,\n // or return a complete mock object if we want to avoid logic.\n // The task says \"Add createMockDLightManager factory... Methods: addLight, removeLight, clear, getLights\".\n\n // Let's create a mock object that satisfies the public interface (structural typing).\n\n const mockManager = {\n addLight: vi.fn(),\n clear: vi.fn(),\n update: vi.fn(),\n getActiveLights: vi.fn().mockReturnValue([]),\n ...overrides\n };\n\n return mockManager as unknown as DynamicLightManager;\n}\n\n/**\n * Creates a mock lightmap data structure.\n */\nexport function createMockLightmap(width: number = 128, height: number = 128): Lightmap {\n return {\n width,\n height,\n data: new Uint8Array(width * height * 3) // RGB\n };\n}\n","import { vi } from 'vitest';\nimport { Vec3 } from '@quake2ts/shared';\nimport { ParticleSystem } from '@quake2ts/engine';\n\n// Mock types since Particle/ParticleEmitter are not exported\nexport interface MockParticle {\n position: Vec3;\n velocity: Vec3;\n color: [number, number, number, number];\n size: number;\n lifetime: number;\n gravity: number;\n damping: number;\n bounce: number;\n blendMode: 'alpha' | 'additive';\n fade: boolean;\n}\n\nexport interface MockParticleEmitter {\n update: (dt: number) => void;\n emit: () => void;\n}\n\n// Export types\nexport { ParticleSystem };\n\n/**\n * Creates a mock Particle with default values.\n */\nexport function createMockParticle(overrides?: Partial<MockParticle>): MockParticle {\n return {\n position: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n color: [1, 1, 1, 1],\n size: 1,\n lifetime: 1,\n gravity: 0,\n damping: 0,\n bounce: 0,\n blendMode: 'alpha',\n fade: false,\n ...overrides,\n };\n}\n\n/**\n * Creates a mock ParticleEmitter.\n */\nexport function createMockParticleEmitter(overrides?: Partial<MockParticleEmitter>): MockParticleEmitter {\n return {\n update: vi.fn(),\n emit: vi.fn(),\n ...overrides,\n };\n}\n\n/**\n * Creates a mock ParticleSystem.\n */\nexport function createMockParticleSystem(overrides?: Partial<ParticleSystem>): ParticleSystem {\n return {\n maxParticles: 1000,\n rng: {\n frandom: vi.fn().mockReturnValue(0.5), // Deterministic default\n random: vi.fn().mockReturnValue(0.5),\n seed: vi.fn(),\n },\n update: vi.fn(),\n spawn: vi.fn(),\n killAll: vi.fn(),\n aliveCount: vi.fn().mockReturnValue(0),\n getState: vi.fn(),\n buildMesh: vi.fn(),\n ...overrides,\n } as unknown as ParticleSystem;\n}\n","import { vi } from 'vitest';\nimport { createMockWebGL2Context, MockWebGL2RenderingContext } from './mocks/webgl.js';\n\n// Define minimal mock interfaces for internal engine components not publicly exported.\ninterface MockPipeline {\n render: ReturnType<typeof vi.fn>;\n init: ReturnType<typeof vi.fn>;\n resize: ReturnType<typeof vi.fn>;\n}\n\ninterface MockCamera {\n update: ReturnType<typeof vi.fn>;\n getViewMatrix: ReturnType<typeof vi.fn>;\n getProjectionMatrix: ReturnType<typeof vi.fn>;\n getViewProjectionMatrix: ReturnType<typeof vi.fn>;\n getPosition: ReturnType<typeof vi.fn>;\n getForward: ReturnType<typeof vi.fn>;\n getRight: ReturnType<typeof vi.fn>;\n getUp: ReturnType<typeof vi.fn>;\n extractFrustumPlanes: ReturnType<typeof vi.fn>;\n transform: {\n origin: number[];\n angles: number[];\n fov: number;\n };\n}\n\nexport interface MockRenderingContext {\n gl: MockWebGL2RenderingContext;\n camera: MockCamera;\n pipelines: {\n md2: MockPipeline;\n bsp: MockPipeline;\n sprite: MockPipeline;\n poly: MockPipeline;\n particle: MockPipeline;\n };\n}\n\nexport function createMockRenderingContext(): MockRenderingContext {\n const gl = createMockWebGL2Context();\n\n // Mock Camera\n const camera: MockCamera = {\n update: vi.fn(),\n getViewMatrix: vi.fn().mockReturnValue(new Float32Array(16)),\n getProjectionMatrix: vi.fn().mockReturnValue(new Float32Array(16)),\n getViewProjectionMatrix: vi.fn().mockReturnValue(new Float32Array(16)),\n getPosition: vi.fn().mockReturnValue([0, 0, 0]),\n getForward: vi.fn().mockReturnValue([0, 0, -1]),\n getRight: vi.fn().mockReturnValue([1, 0, 0]),\n getUp: vi.fn().mockReturnValue([0, 1, 0]),\n extractFrustumPlanes: vi.fn(),\n transform: {\n origin: [0, 0, 0],\n angles: [0, 0, 0],\n fov: 90\n }\n };\n\n // Mock Pipelines\n const md2: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n const bsp: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n const sprite: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n const poly: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n const particle: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n return {\n gl,\n camera,\n pipelines: {\n md2,\n bsp,\n sprite,\n poly,\n particle\n }\n };\n}\n","/**\n * Helper to create a storage-like object (localStorage/sessionStorage).\n */\nfunction createStorageMock(initialData: Record<string, string> = {}): Storage {\n const store = new Map<string, string>(Object.entries(initialData));\n\n return {\n getItem: (key: string) => store.get(key) || null,\n setItem: (key: string, value: string) => store.set(key, value.toString()),\n removeItem: (key: string) => store.delete(key),\n clear: () => store.clear(),\n key: (index: number) => Array.from(store.keys())[index] || null,\n get length() { return store.size; }\n } as Storage;\n}\n\n/**\n * Creates a mock LocalStorage instance.\n */\nexport function createMockLocalStorage(initialData: Record<string, string> = {}): Storage {\n return createStorageMock(initialData);\n}\n\n/**\n * Creates a mock SessionStorage instance.\n */\nexport function createMockSessionStorage(initialData: Record<string, string> = {}): Storage {\n return createStorageMock(initialData);\n}\n\n/**\n * Creates a mock IndexedDB factory.\n * Wraps fake-indexeddb.\n */\nexport function createMockIndexedDB(databases?: IDBDatabase[]): IDBFactory {\n // fake-indexeddb/auto already sets global.indexedDB\n // If we need to return a specific instance or customized one, we can do it here.\n // For now, return the global one or a fresh 'fake-indexeddb' instance if we were to import it directly.\n\n // Since we imported 'fake-indexeddb/auto' in setup/browser.ts, global.indexedDB is already mocked.\n // We can return that.\n return global.indexedDB;\n}\n\nexport interface StorageScenario {\n localStorage: Storage;\n sessionStorage: Storage;\n indexedDB: IDBFactory;\n}\n\n/**\n * Creates a complete storage test scenario.\n */\nexport function createStorageTestScenario(storageType: 'local' | 'session' | 'indexed' = 'local'): StorageScenario {\n return {\n localStorage: createMockLocalStorage(),\n sessionStorage: createMockSessionStorage(),\n indexedDB: createMockIndexedDB()\n };\n}\n","/**\n * Mocks for Web Audio API.\n */\n\n/**\n * Sets up a mock AudioContext globally.\n */\nexport function setupMockAudioContext(): void {\n class MockAudioContext {\n state = 'suspended';\n destination = {};\n currentTime = 0;\n listener = {\n positionX: { value: 0 },\n positionY: { value: 0 },\n positionZ: { value: 0 },\n forwardX: { value: 0 },\n forwardY: { value: 0 },\n forwardZ: { value: 0 },\n upX: { value: 0 },\n upY: { value: 0 },\n upZ: { value: 0 },\n setOrientation: () => {},\n setPosition: () => {}\n };\n\n createGain() {\n return {\n gain: { value: 1, linearRampToValueAtTime: () => {} },\n connect: () => {},\n disconnect: () => {}\n };\n }\n\n createBufferSource() {\n return {\n buffer: null,\n loop: false,\n playbackRate: { value: 1 },\n connect: () => {},\n start: () => {},\n stop: () => {},\n disconnect: () => {},\n onended: null\n };\n }\n\n createPanner() {\n return {\n panningModel: 'equalpower',\n distanceModel: 'inverse',\n positionX: { value: 0 },\n positionY: { value: 0 },\n positionZ: { value: 0 },\n orientationX: { value: 0 },\n orientationY: { value: 0 },\n orientationZ: { value: 0 },\n coneInnerAngle: 360,\n coneOuterAngle: 360,\n coneOuterGain: 0,\n connect: () => {},\n disconnect: () => {},\n setPosition: () => {},\n setOrientation: () => {}\n }\n }\n\n createBuffer(numOfChannels: number, length: number, sampleRate: number) {\n return {\n duration: length / sampleRate,\n length,\n sampleRate,\n numberOfChannels: numOfChannels,\n getChannelData: () => new Float32Array(length)\n }\n }\n\n decodeAudioData(data: ArrayBuffer, success?: (buffer: any) => void) {\n const buffer = this.createBuffer(2, 100, 44100);\n if (success) success(buffer);\n return Promise.resolve(buffer);\n }\n\n resume() { return Promise.resolve(); }\n suspend() { return Promise.resolve(); }\n close() { return Promise.resolve(); }\n }\n\n global.AudioContext = MockAudioContext as any;\n // @ts-ignore\n global.webkitAudioContext = MockAudioContext as any;\n}\n\n/**\n * Restores original AudioContext.\n */\nexport function teardownMockAudioContext(): void {\n // @ts-ignore\n delete global.AudioContext;\n // @ts-ignore\n delete global.webkitAudioContext;\n}\n\nexport interface AudioEvent {\n type: string;\n data?: any;\n}\n\n/**\n * Captures audio events from a context.\n * Requires the context to be instrumented or mocked to emit events.\n * This helper currently works with the `setupMockAudioContext` mock if extended.\n */\nexport function captureAudioEvents(context: AudioContext): AudioEvent[] {\n // Placeholder for capturing events.\n // Real implementation would attach spies to context methods.\n return [];\n}\n","import { initHeadlessWebGPU, WebGPUContextState } from '../../setup/webgpu.js';\n\n/**\n * Interface for render test setup\n */\nexport interface RenderTestSetup {\n context: WebGPUContextState;\n renderTarget: GPUTexture;\n renderTargetView: GPUTextureView;\n depthTarget?: GPUTexture;\n depthTargetView?: GPUTextureView;\n commandEncoder: GPUCommandEncoder;\n cleanup: () => Promise<void>;\n width: number;\n height: number;\n}\n\n/**\n * Creates a setup for testing rendering pipelines.\n * Initializes a headless WebGPU context, a render target texture, and a command encoder.\n */\nexport async function createRenderTestSetup(\n width: number = 256,\n height: number = 256,\n options: { depth?: boolean } = {}\n): Promise<RenderTestSetup> {\n const setup = await initHeadlessWebGPU();\n const { device } = setup;\n\n // Create a render target texture\n // We use RGBA8Unorm for easy readback and standard rendering\n const renderTarget = device.createTexture({\n size: { width, height, depthOrArrayLayers: 1 },\n format: 'rgba8unorm',\n usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,\n });\n\n const renderTargetView = renderTarget.createView();\n\n let depthTarget: GPUTexture | undefined;\n let depthTargetView: GPUTextureView | undefined;\n\n if (options.depth) {\n depthTarget = device.createTexture({\n size: { width, height, depthOrArrayLayers: 1 },\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n });\n depthTargetView = depthTarget.createView();\n }\n\n const commandEncoder = device.createCommandEncoder();\n\n // We need to create a context state object compatible with our engine expectations\n const context: WebGPUContextState = {\n adapter: setup.adapter,\n device: setup.device,\n queue: setup.device.queue,\n format: 'rgba8unorm',\n };\n\n return {\n context,\n renderTarget,\n renderTargetView,\n depthTarget,\n depthTargetView,\n commandEncoder,\n width,\n height,\n cleanup: async () => {\n renderTarget.destroy();\n depthTarget?.destroy();\n await setup.cleanup();\n }\n };\n}\n\n/**\n * Captures texture content to Uint8ClampedArray (RGBA).\n * Creates its own CommandEncoder and submits immediately.\n */\nexport async function captureTexture(\n device: GPUDevice,\n texture: GPUTexture,\n width: number,\n height: number\n): Promise<Uint8ClampedArray> {\n const commandEncoder = device.createCommandEncoder();\n\n // Create a buffer to read back the texture data\n // Bytes per row must be a multiple of 256 for copyTextureToBuffer\n const bytesPerPixel = 4;\n const unpaddedBytesPerRow = width * bytesPerPixel;\n const align = 256;\n const paddedBytesPerRow = Math.max(\n bytesPerPixel * width,\n Math.ceil((bytesPerPixel * width) / align) * align\n );\n\n const bufferSize = paddedBytesPerRow * height;\n\n const readbackBuffer = device.createBuffer({\n size: bufferSize,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n // Copy texture to buffer\n commandEncoder.copyTextureToBuffer(\n {\n texture: texture,\n },\n {\n buffer: readbackBuffer,\n bytesPerRow: paddedBytesPerRow,\n },\n {\n width,\n height,\n depthOrArrayLayers: 1,\n }\n );\n\n device.queue.submit([commandEncoder.finish()]);\n\n await readbackBuffer.mapAsync(GPUMapMode.READ);\n\n const arrayBuffer = readbackBuffer.getMappedRange();\n\n // Create a new buffer to hold the tightly packed data\n const output = new Uint8ClampedArray(width * height * 4);\n\n // Copy row by row to remove padding\n const srcBytes = new Uint8Array(arrayBuffer);\n for (let y = 0; y < height; y++) {\n const srcOffset = y * paddedBytesPerRow;\n const dstOffset = y * unpaddedBytesPerRow;\n output.set(srcBytes.subarray(srcOffset, srcOffset + unpaddedBytesPerRow), dstOffset);\n }\n\n readbackBuffer.unmap();\n readbackBuffer.destroy();\n\n return output;\n}\n\n/**\n * Helper to render and capture the output as pixel data.\n * It manages the render pass, submission, and buffer readback.\n */\nexport async function renderAndCapture(\n setup: RenderTestSetup,\n renderFn: (pass: GPURenderPassEncoder) => void\n): Promise<Uint8ClampedArray> {\n const { device, queue } = setup.context;\n const { renderTargetView, commandEncoder, width, height, depthTargetView } = setup;\n\n const colorAttachment: GPURenderPassColorAttachment = {\n view: renderTargetView,\n clearValue: { r: 0, g: 0, b: 0, a: 0 },\n loadOp: 'clear',\n storeOp: 'store',\n };\n\n const descriptor: GPURenderPassDescriptor = {\n colorAttachments: [colorAttachment],\n };\n\n if (depthTargetView) {\n descriptor.depthStencilAttachment = {\n view: depthTargetView,\n depthClearValue: 1.0,\n depthLoadOp: 'clear',\n depthStoreOp: 'discard',\n };\n }\n\n device.pushErrorScope('validation');\n\n // Begin render pass\n const passEncoder = commandEncoder.beginRenderPass(descriptor);\n\n // Invoke user render function\n renderFn(passEncoder);\n\n // End pass\n passEncoder.end();\n\n // Submit the render commands\n queue.submit([commandEncoder.finish()]);\n\n const error = await device.popErrorScope();\n if (error) {\n throw new Error(`WebGPU validation error: ${error.message}`);\n }\n\n // Capture the texture (using a new encoder)\n return captureTexture(device, setup.renderTarget, width, height);\n}\n\n/**\n * Interface for compute test setup\n */\nexport interface ComputeTestSetup {\n context: WebGPUContextState;\n outputBuffer: GPUBuffer;\n commandEncoder: GPUCommandEncoder;\n cleanup: () => Promise<void>;\n outputSize: number;\n}\n\n/**\n * Creates a setup for testing compute shaders.\n */\nexport async function createComputeTestSetup(\n outputSize: number\n): Promise<ComputeTestSetup> {\n const setup = await initHeadlessWebGPU();\n const { device } = setup;\n\n // Create output buffer (storage and copy source)\n const outputBuffer = device.createBuffer({\n size: outputSize,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n });\n\n const commandEncoder = device.createCommandEncoder();\n\n const context: WebGPUContextState = {\n adapter: setup.adapter,\n device: setup.device,\n queue: setup.device.queue,\n format: 'rgba8unorm',\n };\n\n return {\n context,\n outputBuffer,\n commandEncoder,\n outputSize,\n cleanup: async () => {\n outputBuffer.destroy();\n await setup.cleanup();\n }\n };\n}\n\n/**\n * Helper to run a compute pass and read back the output buffer.\n */\nexport async function runComputeAndReadback(\n setup: ComputeTestSetup,\n computeFn: (pass: GPUComputePassEncoder) => void\n): Promise<ArrayBuffer> {\n const { device, queue } = setup.context;\n const { outputBuffer, commandEncoder, outputSize } = setup;\n\n const passEncoder = commandEncoder.beginComputePass();\n computeFn(passEncoder);\n passEncoder.end();\n\n // Create staging buffer for readback\n const stagingBuffer = device.createBuffer({\n size: outputSize,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n commandEncoder.copyBufferToBuffer(\n outputBuffer,\n 0,\n stagingBuffer,\n 0,\n outputSize\n );\n\n queue.submit([commandEncoder.finish()]);\n\n await stagingBuffer.mapAsync(GPUMapMode.READ);\n\n const mappedRange = stagingBuffer.getMappedRange();\n const result = mappedRange.slice(0); // Copy data\n\n stagingBuffer.unmap();\n stagingBuffer.destroy();\n\n return result;\n}\n","import { createHeadlessWebGL, captureWebGLFramebuffer, HeadlessWebGLContext } from '../../setup/headless-webgl.js';\n// Removed invalid import\n\nexport interface WebGLRenderTestSetup {\n gl: WebGL2RenderingContext;\n width: number;\n height: number;\n cleanup: () => void;\n}\n\n/**\n * Creates a setup for testing WebGL rendering.\n * Initializes a headless WebGL context.\n */\nexport async function createWebGLRenderTestSetup(\n width: number = 256,\n height: number = 256\n): Promise<WebGLRenderTestSetup> {\n const context = createHeadlessWebGL({ width, height });\n\n return {\n gl: context.gl,\n width: context.width,\n height: context.height,\n cleanup: context.cleanup\n };\n}\n\n/**\n * Helper to render and capture the output as pixel data.\n * Executes the render function, ensures completion, and captures the framebuffer.\n */\nexport async function renderAndCaptureWebGL(\n setup: WebGLRenderTestSetup,\n renderFn: (gl: WebGL2RenderingContext) => void\n): Promise<Uint8ClampedArray> {\n const { gl, width, height } = setup;\n\n // Execute the user's render function\n renderFn(gl);\n\n // Ensure all commands are finished before reading pixels\n gl.finish();\n\n // Capture the framebuffer content\n return captureWebGLFramebuffer(gl, width, height);\n}\n","/**\n * Playwright-based WebGL testing utilities for quake2ts renderer\n *\n * Provides helpers for running WebGL visual tests in a real browser using Playwright.\n * Loads the actual built renderer code via a static server, similar to e2e-tests.\n */\n\nimport { chromium, Browser, Page, BrowserContext } from 'playwright';\nimport { expectSnapshot, SnapshotTestOptions } from '../../visual/snapshots.js';\nimport { createServer, IncomingMessage, ServerResponse } from 'http';\nimport handler from 'serve-handler';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport interface WebGLPlaywrightSetup {\n browser: Browser;\n context: BrowserContext;\n page: Page;\n width: number;\n height: number;\n server?: any;\n cleanup: () => Promise<void>;\n}\n\nexport interface WebGLPlaywrightOptions {\n width?: number;\n height?: number;\n headless?: boolean;\n}\n\n/**\n * Creates a Playwright-based WebGL test setup with the actual quake2ts renderer.\n * Starts a static server, loads the built renderer bundle, and provides a clean testing environment.\n */\nexport async function createWebGLPlaywrightSetup(\n options: WebGLPlaywrightOptions = {}\n): Promise<WebGLPlaywrightSetup> {\n const width = options.width ?? 256;\n const height = options.height ?? 256;\n const headless = options.headless ?? true;\n\n // Start static server to serve built files\n // Serve from repo root so we can access packages/engine/dist\n const repoRoot = path.resolve(__dirname, '../../../../..');\n\n const staticServer = createServer((request: IncomingMessage, response: ServerResponse) => {\n return handler(request, response, {\n public: repoRoot,\n cleanUrls: false,\n headers: [\n {\n source: '**/*',\n headers: [\n { key: 'Cache-Control', value: 'no-cache' },\n { key: 'Access-Control-Allow-Origin', value: '*' },\n { key: 'Cross-Origin-Opener-Policy', value: 'same-origin' },\n { key: 'Cross-Origin-Embedder-Policy', value: 'require-corp' }\n ]\n }\n ]\n });\n });\n\n const serverUrl = await new Promise<string>((resolve) => {\n staticServer.listen(0, () => {\n const addr = staticServer.address();\n const port = typeof addr === 'object' ? addr?.port : 0;\n const url = `http://localhost:${port}/packages/engine/tests/webgl/fixtures/renderer-test.html`;\n console.log(`WebGL test server serving from ${repoRoot} at ${url}`);\n resolve(url);\n });\n });\n\n // Launch browser\n const browser = await chromium.launch({\n headless,\n args: [\n '--use-gl=swiftshader',\n '--disable-gpu-sandbox',\n '--ignore-gpu-blocklist'\n ]\n });\n\n const context = await browser.newContext({\n viewport: { width, height },\n deviceScaleFactor: 1,\n });\n\n const page = await context.newPage();\n\n // Log browser console for debugging\n page.on('console', msg => {\n if (msg.type() === 'error') console.error(`[Browser Error] ${msg.text()}`);\n else console.log(`[Browser] ${msg.text()}`);\n });\n\n page.on('pageerror', err => {\n console.error(`[Browser Page Error] ${err.message}`);\n });\n\n // Navigate to the test harness\n await page.goto(serverUrl, { waitUntil: 'domcontentloaded' });\n\n // Initialize renderer\n await page.evaluate(`window.createRendererTest()`);\n\n // Wait for renderer to be ready\n await page.waitForFunction(() => (window as any).testRenderer !== undefined, { timeout: 5000 });\n\n const cleanup = async () => {\n await browser.close();\n staticServer.close();\n };\n\n return {\n browser,\n context,\n page,\n width,\n height,\n server: staticServer,\n cleanup\n };\n}\n\n/**\n * Executes a rendering function using the actual quake2ts renderer and captures the result.\n * This must happen in a single page.evaluate() call to preserve WebGL state.\n *\n * @param page - Playwright page\n * @param renderFn - Function code as string that uses window.testRenderer\n * @returns Captured pixel data\n */\nexport async function renderAndCaptureWebGLPlaywright(\n page: Page,\n renderFn: string\n): Promise<Uint8ClampedArray> {\n const pixelData = await page.evaluate((code) => {\n const renderer = (window as any).testRenderer;\n const gl = (window as any).testGl;\n\n if (!renderer || !gl) {\n throw new Error('Renderer not initialized');\n }\n\n // Execute the render function\n const fn = new Function('renderer', 'gl', code);\n fn(renderer, gl);\n\n // Ensure rendering is complete\n gl.finish();\n\n // Capture pixels\n return (window as any).captureCanvas();\n }, renderFn);\n\n return new Uint8ClampedArray(pixelData);\n}\n\n/**\n * Runs a WebGL visual test with the actual quake2ts renderer.\n *\n * Usage:\n * ```ts\n * await testWebGLRenderer(`\n * // Clear background\n * gl.clearColor(0, 0, 0, 1);\n * gl.clear(gl.COLOR_BUFFER_BIT);\n *\n * // Use renderer API\n * renderer.begin2D();\n * renderer.drawfillRect(64, 64, 128, 128, [0, 0, 1, 1]);\n * renderer.end2D();\n * `, {\n * name: 'blue-rect',\n * description: 'Blue rectangle test',\n * width: 256,\n * height: 256,\n * snapshotDir: __dirname\n * });\n * ```\n */\nexport async function testWebGLRenderer(\n renderCode: string,\n options: SnapshotTestOptions & WebGLPlaywrightOptions\n): Promise<void> {\n const setup = await createWebGLPlaywrightSetup(options);\n\n try {\n const pixels = await renderAndCaptureWebGLPlaywright(setup.page, renderCode);\n\n await expectSnapshot(pixels, {\n name: options.name,\n description: options.description,\n width: setup.width,\n height: setup.height,\n updateBaseline: options.updateBaseline,\n snapshotDir: options.snapshotDir\n });\n } finally {\n await setup.cleanup();\n }\n}\n","import { PNG } from 'pngjs';\nimport pixelmatch from 'pixelmatch';\nimport fs from 'fs/promises';\nimport { createReadStream, createWriteStream, existsSync } from 'fs';\nimport path from 'path';\nimport { RenderTestSetup, renderAndCapture } from '../engine/helpers/webgpu-rendering.js';\n\nexport interface CaptureOptions {\n width: number;\n height: number;\n format?: GPUTextureFormat;\n}\n\n// Helper to pad bytes to 256 byte alignment (WebGPU requirement)\nfunction getBytesPerRow(width: number): number {\n const bytesPerPixel = 4;\n const unpaddedBytesPerRow = width * bytesPerPixel;\n const align = 256;\n const paddedBytesPerRow = Math.max(\n unpaddedBytesPerRow,\n Math.ceil(unpaddedBytesPerRow / align) * align\n );\n return paddedBytesPerRow;\n}\n\nexport async function captureFramebufferAsPNG(\n device: GPUDevice,\n texture: GPUTexture,\n options: CaptureOptions\n): Promise<Buffer> {\n const { width, height, format = 'rgba8unorm' } = options;\n\n const bytesPerRow = getBytesPerRow(width);\n const bufferSize = bytesPerRow * height;\n\n const outputBuffer = device.createBuffer({\n size: bufferSize,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n label: 'captureFramebufferAsPNG output buffer'\n });\n\n const commandEncoder = device.createCommandEncoder({ label: 'captureFramebufferAsPNG encoder' });\n commandEncoder.copyTextureToBuffer(\n { texture },\n { buffer: outputBuffer, bytesPerRow, rowsPerImage: height },\n { width, height, depthOrArrayLayers: 1 }\n );\n device.queue.submit([commandEncoder.finish()]);\n\n await outputBuffer.mapAsync(GPUMapMode.READ);\n const mappedRange = outputBuffer.getMappedRange();\n const rawData = new Uint8Array(mappedRange);\n\n // Remove padding to get tight packed RGBA\n const bytesPerPixel = 4;\n const tightData = new Uint8ClampedArray(width * height * bytesPerPixel);\n\n for (let y = 0; y < height; y++) {\n const srcOffset = y * bytesPerRow;\n const dstOffset = y * width * bytesPerPixel;\n const rowSize = width * bytesPerPixel;\n // Copy row\n for (let i = 0; i < rowSize; i++) {\n tightData[dstOffset + i] = rawData[srcOffset + i];\n }\n }\n\n outputBuffer.unmap();\n\n // Handle BGRA to RGBA conversion if needed\n // Note: WebGPU usually prefers bgra8unorm for swapchains, but pngjs expects rgba\n if (format === 'bgra8unorm' || format === 'bgra8unorm-srgb') {\n for (let i = 0; i < tightData.length; i += 4) {\n const b = tightData[i];\n const r = tightData[i + 2];\n tightData[i] = r;\n tightData[i + 2] = b;\n }\n }\n\n // Create PNG\n const png = new PNG({ width, height });\n png.data = Buffer.from(tightData);\n\n return PNG.sync.write(png);\n}\n\nexport async function savePNG(\n pixels: Uint8ClampedArray,\n width: number,\n height: number,\n filepath: string\n): Promise<void> {\n const png = new PNG({ width, height });\n png.data = Buffer.from(pixels);\n\n await fs.mkdir(path.dirname(filepath), { recursive: true });\n\n return new Promise((resolve, reject) => {\n const stream = createWriteStream(filepath);\n stream.on('error', reject);\n stream.on('finish', resolve);\n png.pack().pipe(stream);\n });\n}\n\nexport async function loadPNG(\n filepath: string\n): Promise<{ data: Uint8ClampedArray; width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const stream = createReadStream(filepath);\n stream.on('error', reject);\n\n const png = new PNG();\n png.on('error', reject);\n png.on('parsed', (data) => {\n resolve({\n data: new Uint8ClampedArray(data),\n width: png.width,\n height: png.height\n });\n });\n\n stream.pipe(png);\n });\n}\n\nexport interface ComparisonResult {\n pixelsDifferent: number;\n totalPixels: number;\n percentDifferent: number;\n passed: boolean;\n diffImage?: Uint8ClampedArray;\n}\n\nexport interface ComparisonOptions {\n threshold?: number; // Pixel difference threshold (0-1), default 0.1\n includeAA?: boolean; // Include anti-aliasing detection\n diffColor?: [number, number, number]; // Color for diff pixels\n maxDifferencePercent?: number; // Max % difference to pass, default 0.1%\n}\n\nexport async function compareSnapshots(\n actual: Uint8ClampedArray,\n expected: Uint8ClampedArray,\n width: number,\n height: number,\n options?: ComparisonOptions\n): Promise<ComparisonResult> {\n const {\n threshold = 0.1,\n includeAA = false,\n diffColor = [255, 0, 0],\n maxDifferencePercent = 0.1\n } = options || {};\n\n if (actual.length !== expected.length) {\n throw new Error(`Size mismatch: actual length ${actual.length} vs expected length ${expected.length}`);\n }\n\n const diff = new Uint8ClampedArray(width * height * 4);\n const numDiffPixels = pixelmatch(\n actual,\n expected,\n diff,\n width,\n height,\n {\n threshold,\n includeAA,\n diffColor: diffColor as [number, number, number],\n alpha: 1 // Default alpha\n }\n );\n\n const totalPixels = width * height;\n const percentDifferent = (numDiffPixels / totalPixels) * 100;\n const passed = percentDifferent <= (maxDifferencePercent || 0);\n\n return {\n pixelsDifferent: numDiffPixels,\n totalPixels,\n percentDifferent,\n passed,\n diffImage: diff\n };\n}\n\nexport interface SnapshotTestOptions extends ComparisonOptions {\n name: string;\n description?: string;\n width?: number;\n height?: number;\n updateBaseline?: boolean;\n snapshotDir?: string; // Root snapshot directory\n}\n\nexport function getSnapshotPath(name: string, type: 'baseline' | 'actual' | 'diff', snapshotDir: string = '__snapshots__'): string {\n const dirMap = {\n baseline: 'baselines',\n actual: 'actual',\n diff: 'diff'\n };\n return path.join(snapshotDir, dirMap[type], `${name}.png`);\n}\n\nexport async function expectSnapshot(\n pixels: Uint8ClampedArray,\n options: SnapshotTestOptions\n): Promise<void> {\n const {\n name,\n width,\n height,\n updateBaseline = false,\n snapshotDir = path.join(process.cwd(), 'tests', '__snapshots__') // Default to current working dir/tests/__snapshots__\n } = options;\n\n if (!width || !height) {\n throw new Error('Width and height are required for expectSnapshot');\n }\n\n const baselinePath = getSnapshotPath(name, 'baseline', snapshotDir);\n const actualPath = getSnapshotPath(name, 'actual', snapshotDir);\n const diffPath = getSnapshotPath(name, 'diff', snapshotDir);\n\n const alwaysSave = process.env.ALWAYS_SAVE_SNAPSHOTS === '1';\n\n // If update baseline is requested or baseline doesn't exist, save as baseline and return\n if (updateBaseline || !existsSync(baselinePath)) {\n console.log(`Creating/Updating baseline for ${name} at ${baselinePath}`);\n await savePNG(pixels, width, height, baselinePath);\n return;\n }\n\n // Load baseline\n let baseline: { data: Uint8ClampedArray; width: number; height: number };\n try {\n baseline = await loadPNG(baselinePath);\n } catch (e) {\n console.warn(`Failed to load baseline for ${name} at ${baselinePath}: ${e}. Creating new baseline.`);\n await savePNG(pixels, width, height, baselinePath);\n return;\n }\n\n if (baseline.width !== width || baseline.height !== height) {\n console.warn(`Snapshot dimension mismatch for ${name}: expected ${baseline.width}x${baseline.height}, got ${width}x${height}. Updating baseline.`);\n await savePNG(pixels, width, height, baselinePath);\n return;\n }\n\n // Compare\n const result = await compareSnapshots(pixels, baseline.data, width, height, options);\n\n // Save stats\n const statsPath = path.join(snapshotDir, 'stats', `${name}.json`);\n await fs.mkdir(path.dirname(statsPath), { recursive: true });\n await fs.writeFile(statsPath, JSON.stringify({\n passed: result.passed,\n percentDifferent: result.percentDifferent,\n pixelsDifferent: result.pixelsDifferent,\n totalPixels: result.totalPixels,\n threshold: options.threshold ?? 0.1,\n maxDifferencePercent: options.maxDifferencePercent ?? 0.1\n }, null, 2));\n\n if (!result.passed || alwaysSave) {\n // Save actual and diff\n await savePNG(pixels, width, height, actualPath);\n if (result.diffImage) {\n await savePNG(result.diffImage, width, height, diffPath);\n }\n }\n\n if (!result.passed) {\n const failThreshold = 10.0;\n const errorMessage = `Snapshot comparison failed for ${name}: ${result.percentDifferent.toFixed(2)}% different ` +\n `(${result.pixelsDifferent} pixels). ` +\n `See ${diffPath} for details.`;\n\n if (result.percentDifferent <= failThreshold) {\n console.warn(`[WARNING] ${errorMessage} (Marked as failed in report but passing test execution due to <${failThreshold}% difference)`);\n } else {\n throw new Error(errorMessage);\n }\n }\n}\n\nexport async function renderAndExpectSnapshot(\n setup: RenderTestSetup,\n renderFn: (pass: GPURenderPassEncoder) => void,\n options: Omit<SnapshotTestOptions, 'width' | 'height'>\n): Promise<void> {\n const pixels = await renderAndCapture(setup, renderFn);\n await expectSnapshot(pixels, {\n ...options,\n width: setup.width,\n height: setup.height\n });\n}\n","import { expect } from 'vitest';\nimport {\n createRenderTestSetup,\n renderAndCapture,\n createComputeTestSetup,\n runComputeAndReadback,\n RenderTestSetup,\n ComputeTestSetup\n} from './webgpu-rendering.js';\n\nexport interface GeometryBuffers {\n vertexBuffer: GPUBuffer;\n indexBuffer?: GPUBuffer;\n vertexCount: number;\n indexCount?: number;\n}\n\n/**\n * Template for testing a rendering pipeline\n */\nexport async function testPipelineRendering(\n name: string,\n createPipeline: (device: GPUDevice) => GPURenderPipeline,\n setupGeometry: (device: GPUDevice) => GeometryBuffers,\n expectedOutput?: Uint8ClampedArray\n) {\n const setup = await createRenderTestSetup(256, 256);\n\n try {\n const pipeline = createPipeline(setup.context.device);\n const geometry = setupGeometry(setup.context.device);\n\n const pixels = await renderAndCapture(setup, (pass) => {\n pass.setPipeline(pipeline);\n pass.setVertexBuffer(0, geometry.vertexBuffer);\n if (geometry.indexBuffer) {\n pass.setIndexBuffer(geometry.indexBuffer, 'uint16'); // Assuming uint16 for simplicity\n pass.drawIndexed(geometry.indexCount || 0);\n } else {\n pass.draw(geometry.vertexCount);\n }\n });\n\n if (expectedOutput) {\n expect(pixels).toEqual(expectedOutput);\n } else {\n // At least verify we got pixels\n expect(pixels.length).toBe(256 * 256 * 4);\n }\n } finally {\n await setup.cleanup();\n }\n}\n\n/**\n * Template for testing compute shaders\n */\nexport async function testComputeShader(\n name: string,\n createComputePipeline: (device: GPUDevice) => GPUComputePipeline,\n inputData: Float32Array,\n expectedOutput?: Float32Array\n) {\n const setup = await createComputeTestSetup(inputData.byteLength);\n const { device } = setup.context;\n\n try {\n const pipeline = createComputePipeline(device);\n\n // Initialize input data\n const stagingBuffer = device.createBuffer({\n size: inputData.byteLength,\n usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE,\n mappedAtCreation: true\n });\n new Float32Array(stagingBuffer.getMappedRange()).set(inputData);\n stagingBuffer.unmap();\n\n // Copy input to output buffer for processing\n const encoder = device.createCommandEncoder();\n encoder.copyBufferToBuffer(stagingBuffer, 0, setup.outputBuffer, 0, inputData.byteLength);\n device.queue.submit([encoder.finish()]);\n\n // Create a bind group for the storage buffer\n const bindGroup = device.createBindGroup({\n layout: pipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: setup.outputBuffer\n }\n }\n ]\n });\n\n const resultBuffer = await runComputeAndReadback(setup, (pass) => {\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, bindGroup);\n pass.dispatchWorkgroups(Math.ceil(inputData.length / 64));\n });\n\n if (expectedOutput) {\n const floatResult = new Float32Array(resultBuffer);\n expect(floatResult).toEqual(expectedOutput);\n }\n\n stagingBuffer.destroy();\n\n } finally {\n await setup.cleanup();\n }\n}\n","/**\n * Creates a checkerboard texture for testing sampling and filtering.\n */\nexport function createCheckerboardTexture(\n width: number,\n height: number,\n checkSize: number = 32,\n color1: [number, number, number, number] = [1, 1, 1, 1],\n color2: [number, number, number, number] = [0, 0, 0, 1]\n): Uint8ClampedArray {\n const data = new Uint8ClampedArray(width * height * 4);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const isCheck =\n (Math.floor(x / checkSize) + Math.floor(y / checkSize)) % 2 === 0;\n const color = isCheck ? color1 : color2;\n\n const idx = (y * width + x) * 4;\n data[idx] = Math.round(color[0] * 255);\n data[idx + 1] = Math.round(color[1] * 255);\n data[idx + 2] = Math.round(color[2] * 255);\n data[idx + 3] = Math.round(color[3] * 255);\n }\n }\n\n return data;\n}\n\n/**\n * Creates a solid color texture.\n */\nexport function createSolidTexture(\n width: number,\n height: number,\n color: [number, number, number, number]\n): Uint8ClampedArray {\n const data = new Uint8ClampedArray(width * height * 4);\n const r = Math.round(color[0] * 255);\n const g = Math.round(color[1] * 255);\n const b = Math.round(color[2] * 255);\n const a = Math.round(color[3] * 255);\n\n for (let i = 0; i < data.length; i += 4) {\n data[i] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = a;\n }\n\n return data;\n}\n","\nimport { vec3 } from 'gl-matrix';\nimport { Camera } from '@quake2ts/engine';\nimport { Vec3 } from '@quake2ts/shared';\n\n// Define RefDef interface locally if it's not exported from shared/engine,\n// or import it if we find it.\n// Based on grep, RefDef seems elusive or I missed it.\n// Standard Quake 2 RefDef:\nexport interface RefDef {\n x: number;\n y: number;\n width: number;\n height: number;\n fov_x: number;\n fov_y: number;\n vieworg: vec3;\n viewangles: vec3;\n time: number;\n rdflags: number;\n // ... other fields\n}\n\nexport interface ViewState {\n camera: Camera;\n viewport: { x: number; y: number; width: number; height: number };\n refdef: RefDef;\n}\n\nexport interface ViewScenario {\n viewState: ViewState;\n cleanup: () => void;\n}\n\nexport interface CameraInput {\n forward?: number;\n right?: number;\n up?: number;\n pitchDelta?: number;\n yawDelta?: number;\n rollDelta?: number;\n}\n\nexport interface DemoCameraResult {\n origin: Vec3;\n angles: Vec3;\n fov: number;\n}\n\nfunction toVec3(v: Vec3 | vec3 | { x: number, y: number, z: number } | number[]): vec3 {\n if (v instanceof Float32Array && v.length === 3) {\n return v as vec3;\n }\n if (Array.isArray(v) && v.length === 3) {\n return vec3.fromValues(v[0], v[1], v[2]);\n }\n if (typeof v === 'object' && 'x' in v && 'y' in v && 'z' in v) {\n return vec3.fromValues(v.x, v.y, v.z);\n }\n // Fallback or error? defaulting to 0,0,0\n return vec3.create();\n}\n\n/**\n * Creates a mock Camera instance with optional overrides.\n * Accepts partial Camera properties, where position/angles can be Vec3 objects or arrays.\n */\nexport function createMockCamera(overrides: Partial<Omit<Camera, 'position' | 'angles'> & { position: any, angles: any }> = {}): Camera {\n const camera = new Camera();\n\n if (overrides.position) {\n camera.position = toVec3(overrides.position);\n }\n if (overrides.angles) {\n camera.angles = toVec3(overrides.angles);\n }\n if (overrides.fov !== undefined) {\n camera.fov = overrides.fov;\n }\n // Apply other properties if exposed by Camera class setters\n\n return camera;\n}\n\n/**\n * Creates a mock Demo Camera state result (for getDemoCamera mock).\n * This returns a structure using Vec3 interface compatible with angleVectors, unlike Camera class.\n */\nexport function createMockDemoCameraResult(overrides: Partial<DemoCameraResult> = {}): DemoCameraResult {\n return {\n origin: overrides.origin || { x: 0, y: 0, z: 0 },\n angles: overrides.angles || { x: 0, y: 0, z: 0 },\n fov: overrides.fov ?? 90\n };\n}\n\n/**\n * Creates a mock RefDef object.\n */\nexport function createMockRefDef(overrides: Partial<RefDef> = {}): RefDef {\n return {\n x: 0,\n y: 0,\n width: 320,\n height: 240,\n fov_x: 90,\n fov_y: 90,\n vieworg: vec3.create(),\n viewangles: vec3.create(),\n time: 0,\n rdflags: 0,\n ...overrides\n };\n}\n\n/**\n * Creates a mock ViewState object.\n */\nexport function createMockViewState(overrides: Partial<ViewState> = {}): ViewState {\n return {\n camera: overrides.camera || createMockCamera(),\n viewport: overrides.viewport || { x: 0, y: 0, width: 800, height: 600 },\n refdef: overrides.refdef || createMockRefDef(),\n ...overrides\n };\n}\n\n/**\n * Creates a pre-configured view test scenario.\n */\nexport function createViewTestScenario(scenarioType: 'firstPerson' | 'thirdPerson' | 'spectator'): ViewScenario {\n const camera = createMockCamera();\n const refdef = createMockRefDef();\n\n switch (scenarioType) {\n case 'firstPerson':\n camera.position = vec3.fromValues(100, 100, 50);\n camera.angles = vec3.fromValues(0, 45, 0);\n vec3.copy(refdef.vieworg, camera.position);\n vec3.copy(refdef.viewangles, camera.angles);\n break;\n case 'thirdPerson':\n camera.position = vec3.fromValues(100, 100, 100); // Higher/back\n camera.angles = vec3.fromValues(30, 45, 0); // Looking down\n // Refdef might differ from camera in 3rd person (refdef usually is player eye, camera is offset)\n vec3.set(refdef.vieworg, 100, 100, 50); // Player origin\n break;\n case 'spectator':\n camera.position = vec3.fromValues(0, 0, 100);\n camera.angles = vec3.fromValues(90, 0, 0); // Top down\n break;\n }\n\n return {\n viewState: {\n camera,\n viewport: { x: 0, y: 0, width: 800, height: 600 },\n refdef\n },\n cleanup: () => {\n // Any cleanup if needed\n }\n };\n}\n\n/**\n * Simulates camera movement based on input delta.\n * This is a helper to verify camera logic, not a replacement for full physics.\n */\nexport function simulateCameraMovement(camera: Camera, input: CameraInput, deltaTime: number): Camera {\n // Simple movement simulation\n const speed = 100; // units per second\n\n // Update angles\n if (input.pitchDelta) camera.angles[0] += input.pitchDelta;\n if (input.yawDelta) camera.angles[1] += input.yawDelta;\n if (input.rollDelta) camera.angles[2] += input.rollDelta;\n\n // Force update dirty flag in Camera\n camera.angles = camera.angles;\n\n // Calculate forward/right/up vectors based on new angles\n // For simplicity, we can use simple trig or just assume standard axis aligned for basic tests\n // But proper way is AngleVectors.\n // Since we don't have AngleVectors imported here (it's in shared), we might skip complex relative movement\n // or import it.\n\n // Ideally: import { angleVectors } from '@quake2ts/shared/math/angles';\n // But we want to avoid deep deps if possible.\n\n // For now, let's just apply absolute movement if provided, or simplistic axis logic\n if (input.forward || input.right || input.up) {\n // simplistic impl\n camera.position[0] += (input.forward || 0) * deltaTime;\n camera.position[1] += (input.right || 0) * deltaTime;\n camera.position[2] += (input.up || 0) * deltaTime;\n camera.position = camera.position;\n }\n\n return camera;\n}\n","import { vi } from 'vitest';\nimport { PlayerState } from '@quake2ts/shared';\nimport { PlayerClient, PowerupId, KeyId } from '@quake2ts/game';\nimport { FrameRenderStats } from '@quake2ts/engine';\n\n// Since test-utils cannot import from client, we need to mock MessageSystem here or define an interface\n// The Draw_Hud function expects a MessageSystem which has drawCenterPrint and drawNotifications.\n// However, the signature in `hud.ts` uses the class.\n// For testing purposes, we might need a mock MessageSystem interface in test-utils or import it if possible.\n// But we can't import from client. So we will return a mock object that satisfies the interface.\n\nexport interface HudState {\n ps: PlayerState;\n client: PlayerClient;\n health: number;\n armor: number;\n ammo: number;\n stats: number[]; // Game stats (health, armor, ammo indices)\n pickupIcon?: string;\n damageIndicators?: any[];\n renderStats?: FrameRenderStats; // Optional render stats for verification\n timeMs: number;\n messages: any; // Using any for now to avoid circular dependency\n}\n\nexport function createMockHudState(overrides?: Partial<HudState>): HudState {\n const defaultPs = {\n damageAlpha: 0,\n damageIndicators: [],\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n viewAngles: { x: 0, y: 0, z: 0 },\n onGround: true,\n waterLevel: 0,\n mins: { x: 0, y: 0, z: 0 },\n maxs: { x: 0, y: 0, z: 0 },\n centerPrint: null,\n notify: null\n } as unknown as PlayerState;\n\n const defaultClient = {\n inventory: {\n armor: { armorCount: 50, armorType: 'jacket' },\n currentWeapon: 1, // Blaster usually\n ammo: { counts: [] },\n keys: new Set<KeyId>(),\n powerups: new Map<PowerupId, number>()\n }\n } as unknown as PlayerClient;\n\n // Use a numeric array for game stats (EntityState.stats)\n // Indexes: 1=Health, 2=Ammo, 4=Armor (based on client/src/index.ts usage)\n const defaultStats = new Array(32).fill(0);\n defaultStats[1] = 100; // Health\n defaultStats[2] = 25; // Ammo\n defaultStats[4] = 50; // Armor\n\n const defaultMessages = {\n drawCenterPrint: vi.fn(),\n drawNotifications: vi.fn(),\n addCenterPrint: vi.fn(),\n addNotification: vi.fn(),\n clear: vi.fn()\n };\n\n return {\n ps: overrides?.ps ?? defaultPs,\n client: overrides?.client ?? defaultClient,\n health: overrides?.health ?? 100,\n armor: overrides?.armor ?? 50,\n ammo: overrides?.ammo ?? 25,\n stats: overrides?.stats ?? defaultStats,\n pickupIcon: overrides?.pickupIcon,\n damageIndicators: overrides?.damageIndicators,\n renderStats: overrides?.renderStats,\n timeMs: overrides?.timeMs ?? 1000,\n messages: overrides?.messages ?? defaultMessages\n };\n}\n\nexport function createMockScoreboard(players: any[] = []): any {\n return {\n players: players,\n draw: vi.fn()\n };\n}\n\nexport interface MockChatMessage {\n text: string;\n sender?: string;\n timestamp?: number;\n}\n\nexport function createMockChatMessage(text: string, sender?: string, timestamp: number = Date.now()): MockChatMessage {\n return {\n text,\n sender,\n timestamp\n };\n}\n\nexport interface MockNotification {\n type: string;\n message: string;\n duration?: number;\n}\n\nexport function createMockNotification(type: string, message: string, duration: number = 3000): MockNotification {\n return {\n type,\n message,\n duration\n };\n}\n","\nimport {\n ServerCommand,\n ClientCommand,\n Vec3\n} from '@quake2ts/shared';\nimport {\n EntityState,\n FrameData,\n ProtocolPlayerState,\n createEmptyEntityState,\n createEmptyProtocolPlayerState,\n DamageIndicator,\n FogData\n} from '@quake2ts/engine';\n\n/**\n * Mocks a server message by just providing the type and data buffer.\n * In a real scenario, this would be constructing a binary packet.\n */\nexport interface MockServerMessage {\n type: number;\n data: Uint8Array;\n}\n\nexport function createMockServerMessage(type: number, data: Uint8Array = new Uint8Array()): MockServerMessage {\n return { type, data };\n}\n\n/**\n * Creates a mock Snapshot (FrameData) for testing.\n */\nexport function createMockSnapshot(\n serverFrame: number,\n entities: EntityState[] = [],\n playerState?: Partial<ProtocolPlayerState>,\n deltaFrame: number = 0\n): FrameData {\n return {\n serverFrame,\n deltaFrame,\n surpressCount: 0,\n areaBytes: 0,\n areaBits: new Uint8Array(),\n playerState: {\n ...createEmptyProtocolPlayerState(),\n ...playerState\n },\n packetEntities: {\n delta: false,\n entities\n }\n };\n}\n\n/**\n * Creates a mock Delta Frame (FrameData with delta flag).\n */\nexport function createMockDeltaFrame(\n serverFrame: number,\n deltaFrame: number,\n entities: EntityState[] = [],\n playerState?: Partial<ProtocolPlayerState>\n): FrameData {\n return {\n serverFrame,\n deltaFrame,\n surpressCount: 0,\n areaBytes: 0,\n areaBits: new Uint8Array(),\n playerState: {\n ...createEmptyProtocolPlayerState(),\n ...playerState\n },\n packetEntities: {\n delta: true,\n entities\n }\n };\n}\n\n/**\n * Simulates network delay for a sequence of messages.\n */\nexport function simulateNetworkDelay<T>(messages: T[], delayMs: number): Promise<T[]> {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(messages);\n }, delayMs);\n });\n}\n\n/**\n * Simulates packet loss by randomly filtering messages.\n * @param messages The messages to process\n * @param lossPercent Percentage of packet loss (0-100)\n */\nexport function simulatePacketLoss<T>(messages: T[], lossPercent: number): T[] {\n return messages.filter(() => Math.random() * 100 >= lossPercent);\n}\n\n/**\n * Factory for creating a mock EntityState.\n */\nexport function createMockEntityState(\n number: number,\n modelIndex: number = 0,\n origin: Partial<Vec3> = { x: 0, y: 0, z: 0 },\n overrides?: Partial<EntityState>\n): EntityState {\n const state = createEmptyEntityState();\n state.number = number;\n state.modelindex = modelIndex;\n state.origin.x = origin.x ?? 0;\n state.origin.y = origin.y ?? 0;\n state.origin.z = origin.z ?? 0;\n\n if (overrides) {\n Object.assign(state, overrides);\n }\n return state;\n}\n\nexport function createMockDamageIndicator(\n damage: number,\n dir: Vec3 = { x: 0, y: 0, z: 0 },\n health = true,\n armor = false,\n power = false\n): DamageIndicator {\n return {\n damage,\n dir,\n health,\n armor,\n power\n };\n}\n\nexport function createMockFogData(overrides: Partial<FogData> = {}): FogData {\n return {\n density: 0.1,\n red: 100,\n green: 100,\n blue: 100,\n ...overrides\n };\n}\n","import { vi } from 'vitest';\n\nexport interface DownloadManager {\n download(url: string): Promise<ArrayBuffer>;\n cancel(url: string): void;\n getProgress(url: string): number;\n}\n\nexport function createMockDownloadManager(overrides?: Partial<DownloadManager>): DownloadManager {\n return {\n download: vi.fn().mockResolvedValue(new ArrayBuffer(0)),\n cancel: vi.fn(),\n getProgress: vi.fn().mockReturnValue(0),\n ...overrides\n };\n}\n\nexport interface PrecacheList {\n models: string[];\n sounds: string[];\n images: string[];\n}\n\nexport function createMockPrecacheList(\n models: string[] = [],\n sounds: string[] = [],\n images: string[] = []\n): PrecacheList {\n return {\n models,\n sounds,\n images\n };\n}\n\nexport async function simulateDownload(\n url: string,\n progressCallback?: (percent: number) => void\n): Promise<ArrayBuffer> {\n const steps = 10;\n for (let i = 0; i <= steps; i++) {\n if (progressCallback) {\n progressCallback(i / steps);\n }\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n return new ArrayBuffer(1024);\n}\n","import { EntityState, PmoveTraceResult, Vec3 } from '@quake2ts/shared';\n\n// Mock ConfigStringIndex to match shared\nenum ConfigStringIndex {\n Models = 32,\n Sounds = 288,\n Images = 544,\n Players = 544 + 256, // Base for players, usually logic handles offset\n}\n\nconst MAX_MODELS = 256;\nconst MAX_SOUNDS = 256;\nconst MAX_IMAGES = 256;\n\n// Minimal ClientConfigStrings implementation for testing\nexport class MockClientConfigStrings {\n private readonly strings: Map<number, string> = new Map();\n private readonly models: string[] = [];\n private readonly sounds: string[] = [];\n private readonly images: string[] = [];\n\n constructor() {}\n\n public set(index: number, value: string): void {\n this.strings.set(index, value);\n\n if (index >= ConfigStringIndex.Models && index < ConfigStringIndex.Models + MAX_MODELS) {\n this.models[index - ConfigStringIndex.Models] = value;\n } else if (index >= ConfigStringIndex.Sounds && index < ConfigStringIndex.Sounds + MAX_SOUNDS) {\n this.sounds[index - ConfigStringIndex.Sounds] = value;\n } else if (index >= ConfigStringIndex.Images && index < ConfigStringIndex.Images + MAX_IMAGES) {\n this.images[index - ConfigStringIndex.Images] = value;\n }\n }\n\n public get(index: number): string | undefined {\n return this.strings.get(index);\n }\n\n public getModelName(index: number): string | undefined {\n return this.models[index];\n }\n\n public getSoundName(index: number): string | undefined {\n return this.sounds[index];\n }\n\n public getImageName(index: number): string | undefined {\n return this.images[index];\n }\n\n public getPlayerName(playernum: number): string | undefined {\n // Stub logic\n const info = this.strings.get(ConfigStringIndex.Players + playernum);\n if (!info) return undefined;\n const parts = info.split('\\\\');\n for (let i = 1; i < parts.length; i += 2) {\n if (parts[i] === 'name') {\n return parts[i + 1];\n }\n }\n return undefined;\n }\n\n public clear(): void {\n this.strings.clear();\n this.models.length = 0;\n this.sounds.length = 0;\n this.images.length = 0;\n }\n}\n\n// Define ClientState interface locally as it's not exported from client\nexport interface ClientStateProvider {\n tickRate: number;\n frameTimeMs: number;\n serverFrame: number;\n serverProtocol: number;\n configStrings: MockClientConfigStrings;\n getClientName(num: number): string;\n getKeyBinding(key: string): string;\n inAutoDemo: boolean;\n}\n\nexport interface ClientInfo {\n name: string;\n skin: string;\n model: string;\n icon: string;\n}\n\nexport interface ClientState extends ClientStateProvider {\n playerNum: number;\n serverTime: number;\n parseEntities: number;\n}\n\nexport interface Frame {\n serverFrame: number;\n deltaFrame: number;\n valid: boolean;\n entities: EntityState[];\n}\n\nexport interface ConnectionState {\n state: 'disconnected' | 'connecting' | 'connected' | 'active';\n}\n\n// -- Factories --\n\nexport const createMockClientState = (overrides?: Partial<ClientState>): ClientState => {\n const configStrings = new MockClientConfigStrings();\n\n return {\n tickRate: 10,\n frameTimeMs: 100,\n serverFrame: 0,\n serverProtocol: 34,\n configStrings,\n playerNum: 0,\n serverTime: 0,\n parseEntities: 0,\n inAutoDemo: false,\n getClientName: (num: number) => `Player${num}`,\n getKeyBinding: (key: string) => '',\n ...overrides\n };\n};\n\nexport const createMockFrame = (overrides?: Partial<Frame>): Frame => ({\n serverFrame: 0,\n deltaFrame: -1,\n valid: true,\n entities: [],\n ...overrides\n});\n\nexport const createMockClientInfo = (overrides?: Partial<ClientInfo>): ClientInfo => ({\n name: 'Player',\n skin: 'male/grunt',\n model: 'male',\n icon: 'pics/icon.pcx',\n ...overrides\n});\n\nexport const createMockConnectionState = (state: ConnectionState['state'] = 'connected'): ConnectionState => ({\n state\n});\n","import { vi } from 'vitest';\n\nexport interface MockConsole {\n // Add Console interface methods here as needed, based on usage in engine/client\n // Currently the Console interface is not strictly defined in shared types for test-utils\n // but we mimic what is commonly used.\n print: (text: string) => void;\n error: (text: string) => void;\n execute: (text: string) => void;\n addCommand: (name: string, handler: (args: string[]) => void) => void;\n getCvar: (name: string) => string | undefined;\n setCvar: (name: string, value: string) => void;\n\n // Test helpers\n getHistory: () => string[];\n clearHistory: () => void;\n getErrors: () => string[];\n}\n\nexport interface MockCommand {\n name: string;\n handler: (args: string[]) => void;\n}\n\nexport interface CvarRegistry {\n [key: string]: string;\n}\n\nexport function createMockConsole(overrides?: Partial<MockConsole>): MockConsole {\n const history: string[] = [];\n const errors: string[] = [];\n const commands: Record<string, (args: string[]) => void> = {};\n const cvars: Record<string, string> = {};\n\n return {\n print: vi.fn((text: string) => {\n history.push(text);\n }),\n error: vi.fn((text: string) => {\n errors.push(text);\n }),\n execute: vi.fn((text: string) => {\n const parts = text.trim().split(/\\s+/);\n const cmd = parts[0];\n const args = parts.slice(1);\n if (commands[cmd]) {\n commands[cmd](args);\n } else {\n history.push(`Unknown command \"${cmd}\"`);\n }\n }),\n addCommand: vi.fn((name: string, handler: (args: string[]) => void) => {\n commands[name] = handler;\n }),\n getCvar: vi.fn((name: string) => cvars[name]),\n setCvar: vi.fn((name: string, value: string) => {\n cvars[name] = value;\n }),\n getHistory: () => history,\n clearHistory: () => {\n history.length = 0;\n errors.length = 0;\n },\n getErrors: () => errors,\n ...overrides\n };\n}\n\nexport function createMockCommand(name: string, handler: (args: string[]) => void): MockCommand {\n return { name, handler };\n}\n\nexport function createMockCvarRegistry(initialCvars?: Record<string, string>): CvarRegistry {\n return { ...initialCvars };\n}\n","import { EntityState } from '@quake2ts/shared';\nimport { ClientState, createMockClientState } from '../mocks/state.js';\nimport { UserCommand } from '@quake2ts/shared';\n\n// -- Interfaces --\n\nexport interface PredictionScenario {\n clientState: ClientState;\n snapshots: EntityState[][];\n lagMs: number;\n}\n\nexport interface SmoothingAnalysis {\n smooth: boolean;\n maxError: number;\n averageError: number;\n jumps: number[];\n}\n\n// -- Helpers --\n\nexport const createPredictionTestScenario = (lagMs: number = 100): PredictionScenario => {\n // Create a base client state using the factory\n const clientState = createMockClientState({\n playerNum: 0,\n serverTime: 1000,\n getClientName: (num: number) => 'TestPlayer'\n });\n\n // Create some snapshot history\n const snapshots: EntityState[][] = [];\n for (let i = 0; i < 5; i++) {\n const frameEntities: EntityState[] = [\n {\n number: 1,\n origin: { x: i * 10, y: 0, z: 0 },\n angles: { x: 0, y: 0, z: 0 },\n oldOrigin: { x: (i - 1) * 10, y: 0, z: 0 },\n modelIndex: 0,\n modelIndex2: 0,\n modelIndex3: 0,\n modelIndex4: 0,\n frame: 0,\n skinNum: 0,\n effects: 0,\n renderfx: 0,\n solid: 0,\n sound: 0,\n event: 0\n }\n ];\n snapshots.push(frameEntities);\n }\n\n return {\n clientState,\n snapshots,\n lagMs\n };\n};\n\nexport const simulateClientPrediction = (\n state: ClientState,\n input: UserCommand,\n deltaTime: number\n): ClientState => {\n // This is a stub for simulating prediction\n // Real implementation would invoke PMove logic\n // For testing helpers, we might just update time\n return {\n ...state,\n serverTime: state.serverTime + deltaTime * 1000\n };\n};\n\nexport const createInterpolationTestData = (\n startState: EntityState,\n endState: EntityState,\n steps: number = 10\n): EntityState[] => {\n const result: EntityState[] = [];\n\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const lerp = (a: number, b: number) => a + (b - a) * t;\n\n result.push({\n ...startState,\n origin: {\n x: lerp(startState.origin.x, endState.origin.x),\n y: lerp(startState.origin.y, endState.origin.y),\n z: lerp(startState.origin.z, endState.origin.z),\n },\n angles: {\n x: lerp(startState.angles.x, endState.angles.x),\n y: lerp(startState.angles.y, endState.angles.y),\n z: lerp(startState.angles.z, endState.angles.z),\n }\n });\n }\n\n return result;\n};\n\nexport const verifySmoothing = (states: EntityState[]): SmoothingAnalysis => {\n let maxError = 0;\n let totalError = 0;\n const jumps: number[] = [];\n\n for (let i = 1; i < states.length; i++) {\n const prev = states[i-1].origin;\n const curr = states[i].origin;\n\n const dx = curr.x - prev.x;\n const dy = curr.y - prev.y;\n const dz = curr.z - prev.z;\n const dist = Math.sqrt(dx*dx + dy*dy + dz*dz);\n\n // Assume constant velocity, check for large deviations\n // Ideally we'd compare against expected position\n // Here we just track distance changes\n\n if (dist > 50) { // arbitrary jump threshold\n jumps.push(i);\n }\n\n totalError += dist; // This isn't really error without a reference, but serves as a metric\n }\n\n return {\n smooth: jumps.length === 0,\n maxError,\n averageError: totalError / (states.length - 1 || 1),\n jumps\n };\n};\n","import { compareSnapshots, getSnapshotPath, SnapshotTestOptions, ComparisonResult, savePNG } from './snapshots.js';\nimport UPNG from 'upng-js';\nimport fs from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\n\nexport interface AnimationSnapshotOptions extends SnapshotTestOptions {\n frameCount: number;\n fps?: number;\n}\n\nexport interface AnimationSnapshotResult {\n passed: boolean;\n totalPixels: number;\n totalDiffPixels: number;\n percentDifferent: number;\n frameStats: ComparisonResult[];\n}\n\nasync function loadAPNG(filepath: string): Promise<{ width: number, height: number, frames: Uint8ClampedArray[] }> {\n const buffer = await fs.readFile(filepath);\n // Cast buffer (Uint8Array) to ArrayBuffer for UPNG.decode\n // We must use buffer.buffer, but sliced if it's a subarray.\n const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);\n const img = UPNG.decode(arrayBuffer);\n const framesRGBA = UPNG.toRGBA8(img);\n\n // Convert ArrayBuffers to Uint8ClampedArrays\n const frames = framesRGBA.map(buffer => new Uint8ClampedArray(buffer));\n\n return {\n width: img.width,\n height: img.height,\n frames\n };\n}\n\nasync function saveAPNG(\n filepath: string,\n frames: Uint8ClampedArray[],\n width: number,\n height: number,\n delayMs: number\n): Promise<void> {\n // UPNG expects ArrayBuffers. Uint8ClampedArray.buffer might include offset/length.\n const buffers: ArrayBuffer[] = frames.map(f => {\n // Force copy to plain ArrayBuffer to avoid SharedArrayBuffer issues\n const dst = new ArrayBuffer(f.byteLength);\n new Uint8ClampedArray(dst).set(f);\n return dst;\n });\n\n // UPNG.encode(imgs, w, h, cnum, dels)\n const delays = new Array(frames.length).fill(delayMs);\n\n // cnum 0 = lossless\n const pngBuffer = UPNG.encode(buffers, width, height, 0, delays);\n\n await fs.mkdir(path.dirname(filepath), { recursive: true });\n await fs.writeFile(filepath, Buffer.from(pngBuffer));\n}\n\nexport async function expectAnimationSnapshot(\n renderAndCaptureFrame: (frameIndex: number) => Promise<Uint8ClampedArray>,\n options: AnimationSnapshotOptions\n): Promise<void> {\n const {\n name,\n width,\n height,\n frameCount,\n fps = 10,\n updateBaseline = false,\n snapshotDir = path.join(process.cwd(), 'tests', '__snapshots__'),\n threshold = 0.1,\n maxDifferencePercent = 0.1\n } = options;\n\n if (!width || !height) {\n throw new Error('Width and height are required for expectAnimationSnapshot');\n }\n\n const baselinePath = getSnapshotPath(name, 'baseline', snapshotDir);\n const actualPath = getSnapshotPath(name, 'actual', snapshotDir);\n const diffPath = getSnapshotPath(name, 'diff', snapshotDir);\n const alwaysSave = process.env.ALWAYS_SAVE_SNAPSHOTS === '1';\n\n // 1. Capture all frames\n const actualFrames: Uint8ClampedArray[] = [];\n for (let i = 0; i < frameCount; i++) {\n const frameData = await renderAndCaptureFrame(i);\n if (frameData.length !== width * height * 4) {\n throw new Error(`Frame ${i} dimension mismatch: expected length ${width * height * 4}, got ${frameData.length}`);\n }\n actualFrames.push(frameData);\n }\n\n const delayMs = 1000 / fps;\n\n // 2. Load Baseline if needed\n let baselineFrames: Uint8ClampedArray[] | null = null;\n let shouldUpdateBaseline = updateBaseline || !existsSync(baselinePath);\n\n if (!shouldUpdateBaseline) {\n try {\n const baseline = await loadAPNG(baselinePath);\n if (baseline.width !== width || baseline.height !== height) {\n console.warn(`Baseline dimensions mismatch (${baseline.width}x${baseline.height} vs ${width}x${height}). Forcing update.`);\n shouldUpdateBaseline = true;\n } else if (baseline.frames.length !== frameCount) {\n console.warn(`Baseline frame count mismatch (${baseline.frames.length} vs ${frameCount}). Forcing update.`);\n shouldUpdateBaseline = true;\n } else {\n baselineFrames = baseline.frames;\n }\n } catch (e) {\n console.warn(`Failed to load baseline APNG: ${e}. Forcing update.`);\n shouldUpdateBaseline = true;\n }\n }\n\n // 3. Save Baseline if needed\n if (shouldUpdateBaseline) {\n console.log(`Creating/Updating baseline for ${name} at ${baselinePath}`);\n await saveAPNG(baselinePath, actualFrames, width, height, delayMs);\n return;\n }\n\n // 4. Compare\n if (!baselineFrames) {\n throw new Error(\"Baseline frames missing despite checks.\");\n }\n\n const frameStats: ComparisonResult[] = [];\n const diffFrames: Uint8ClampedArray[] = [];\n let totalDiffPixels = 0;\n let totalPixels = 0;\n\n for (let i = 0; i < frameCount; i++) {\n const result = await compareSnapshots(actualFrames[i], baselineFrames[i], width, height, options);\n frameStats.push(result);\n\n if (result.diffImage) {\n diffFrames.push(result.diffImage);\n } else {\n // Provide a blank frame (transparent or black) if no diff\n diffFrames.push(new Uint8ClampedArray(width * height * 4));\n }\n\n totalDiffPixels += result.pixelsDifferent;\n totalPixels += width * height;\n }\n\n const avgPercentDifferent = (totalDiffPixels / totalPixels) * 100;\n const passed = avgPercentDifferent <= (maxDifferencePercent || 0);\n\n const result: AnimationSnapshotResult = {\n passed,\n totalPixels,\n totalDiffPixels,\n percentDifferent: avgPercentDifferent,\n frameStats\n };\n\n // 5. Save Stats\n const statsPath = path.join(snapshotDir, 'stats', `${name}.json`);\n await fs.mkdir(path.dirname(statsPath), { recursive: true });\n await fs.writeFile(statsPath, JSON.stringify({\n passed: result.passed,\n percentDifferent: result.percentDifferent,\n pixelsDifferent: result.totalDiffPixels,\n totalPixels: result.totalPixels,\n threshold: options.threshold ?? 0.1,\n maxDifferencePercent: options.maxDifferencePercent ?? 0.1,\n frameCount: frameCount\n }, null, 2));\n\n // 6. Save Actual and Diff if failed or always save\n if (!passed || alwaysSave) {\n await saveAPNG(actualPath, actualFrames, width, height, delayMs);\n await saveAPNG(diffPath, diffFrames, width, height, delayMs);\n }\n\n if (!passed) {\n const failThreshold = 10.0;\n const errorMessage = `Animation snapshot comparison failed for ${name}: ${result.percentDifferent.toFixed(2)}% different ` +\n `(${result.totalDiffPixels} pixels total). ` +\n `See ${diffPath} for details.`;\n\n if (result.percentDifferent <= failThreshold) {\n console.warn(`[WARNING] ${errorMessage} (Marked as failed in report but passing test execution due to <${failThreshold}% difference)`);\n } else {\n throw new Error(errorMessage);\n }\n }\n}\n","export interface PlaywrightOptions {\n headless?: boolean;\n viewport?: { width: number; height: number };\n}\n\nexport interface PlaywrightTestClient {\n page: any; // Type as 'Page' from playwright in real usage, but keeping it generic here to avoid hard dependency on playwright types in this util file if not needed\n browser: any;\n navigate(url: string): Promise<void>;\n waitForGame(): Promise<void>;\n injectInput(type: string, data: any): Promise<void>;\n screenshot(name: string): Promise<Buffer>;\n close(): Promise<void>;\n}\n\n/**\n * Creates a Playwright test client.\n * Note: Requires playwright to be installed in the project.\n */\nexport async function createPlaywrightTestClient(options: PlaywrightOptions = {}): Promise<PlaywrightTestClient> {\n // Dynamic import to avoid hard dependency if not used\n let playwright;\n try {\n playwright = await import('playwright');\n } catch (e) {\n throw new Error('Playwright is not installed. Please install it to use this utility.');\n }\n\n const browser = await playwright.chromium.launch({\n headless: options.headless ?? true,\n });\n const context = await browser.newContext({\n viewport: options.viewport || { width: 1280, height: 720 },\n });\n const page = await context.newPage();\n\n return {\n page,\n browser,\n async navigate(url: string) {\n await page.goto(url);\n },\n async waitForGame() {\n await waitForGameReady(page);\n },\n async injectInput(type: string, data: any) {\n // Simulate input injection via evaluate\n await page.evaluate(({ type, data }: any) => {\n // Assumes a global function or event listener exists to receive injected input\n console.log('Injecting input', type, data);\n // (window as any).game.injectInput(type, data);\n }, { type, data });\n },\n async screenshot(name: string) {\n return await page.screenshot({ path: `${name}.png` });\n },\n async close() {\n await browser.close();\n }\n };\n}\n\n/**\n * Waits for the game to be ready.\n */\nexport async function waitForGameReady(page: any, timeout: number = 10000): Promise<void> {\n await page.waitForFunction(() => {\n // Check for some global game state or canvas presence\n return (window as any).game && (window as any).game.isRunning;\n }, { timeout });\n}\n\nexport interface GameStateCapture {\n time: number;\n entities: number;\n // Add other state properties\n}\n\n/**\n * Captures current game state from the browser.\n */\nexport async function captureGameState(page: any): Promise<GameStateCapture> {\n return await page.evaluate(() => {\n const game = (window as any).game;\n return {\n time: game ? game.time : 0,\n entities: game && game.entities ? game.entities.length : 0\n };\n });\n}\n","export type NetworkCondition = 'good' | 'slow' | 'unstable' | 'offline' | 'custom';\n\nexport interface NetworkSimulator {\n latency: number; // ms\n jitter: number; // ms\n packetLoss: number; // percentage 0-1\n bandwidth: number; // bytes per second\n}\n\n/**\n * Simulates network conditions.\n */\nexport function simulateNetworkCondition(condition: NetworkCondition): NetworkSimulator {\n switch (condition) {\n case 'good':\n return { latency: 20, jitter: 5, packetLoss: 0, bandwidth: 10 * 1024 * 1024 };\n case 'slow':\n return { latency: 150, jitter: 20, packetLoss: 0.01, bandwidth: 1 * 1024 * 1024 };\n case 'unstable':\n return { latency: 100, jitter: 100, packetLoss: 0.05, bandwidth: 512 * 1024 };\n case 'offline':\n return { latency: 0, jitter: 0, packetLoss: 1, bandwidth: 0 };\n case 'custom':\n default:\n return { latency: 0, jitter: 0, packetLoss: 0, bandwidth: Infinity };\n }\n}\n\n/**\n * Creates a custom network condition.\n */\nexport function createCustomNetworkCondition(latency: number, jitter: number, packetLoss: number): NetworkSimulator {\n return {\n latency,\n jitter,\n packetLoss,\n bandwidth: Infinity // Default to unlimited unless specified\n };\n}\n\n/**\n * Helper to throttle bandwidth (e.g. for Playwright).\n */\nexport function throttleBandwidth(bytesPerSecond: number): void {\n // This function would interface with Playwright's CDPSession in an E2E test.\n // It returns void here as a placeholder for the logic to be used within a test context.\n}\n","import { Page } from 'playwright';\nimport { PNG } from 'pngjs';\nimport pixelmatch from 'pixelmatch';\nimport { Canvas } from '@napi-rs/canvas';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nexport interface VisualDiff {\n diffPixels: number;\n diffPercentage: number;\n isMatch: boolean;\n diffImage?: Buffer;\n}\n\nexport interface VisualScenario {\n sceneName: string;\n setup?: (page: Page) => Promise<void>;\n}\n\n/**\n * Captures a screenshot of the game canvas.\n */\nexport async function captureGameScreenshot(page: Page, name: string): Promise<Buffer> {\n const canvasElement = page.locator('canvas');\n if (await canvasElement.count() > 0) {\n return await canvasElement.screenshot({ path: `${name}.png` });\n }\n return await page.screenshot({ path: `${name}.png` });\n}\n\n/**\n * Saves a canvas to a PNG file.\n */\nexport async function takeScreenshot(canvas: Canvas | HTMLCanvasElement, filepath: string): Promise<void> {\n let buffer: Buffer;\n\n // Handle @napi-rs/canvas Canvas object\n if ('toBuffer' in canvas && typeof canvas.toBuffer === 'function') {\n buffer = canvas.toBuffer('image/png');\n }\n // Handle JSDOM HTMLCanvasElement\n else if ('toDataURL' in canvas) {\n const dataUrl = canvas.toDataURL('image/png');\n const base64 = dataUrl.replace(/^data:image\\/png;base64,/, '');\n buffer = Buffer.from(base64, 'base64');\n } else {\n throw new Error('Unsupported canvas type for screenshot');\n }\n\n await fs.mkdir(path.dirname(filepath), { recursive: true });\n await fs.writeFile(filepath, buffer);\n}\n\n/**\n * Compares two image buffers using pixelmatch.\n */\nexport function compareScreenshots(baseline: Buffer, current: Buffer, threshold: number = 0.01): VisualDiff {\n try {\n const img1 = PNG.sync.read(baseline);\n const img2 = PNG.sync.read(current);\n\n if (img1.width !== img2.width || img1.height !== img2.height) {\n throw new Error(`Image dimensions do not match: ${img1.width}x${img1.height} vs ${img2.width}x${img2.height}`);\n }\n\n const { width, height } = img1;\n const diff = new PNG({ width, height });\n\n const diffPixels = pixelmatch(\n img1.data,\n img2.data,\n diff.data,\n width,\n height,\n { threshold }\n );\n\n const diffPercentage = diffPixels / (width * height);\n const isMatch = diffPixels === 0;\n\n return {\n diffPixels,\n diffPercentage,\n isMatch,\n diffImage: PNG.sync.write(diff)\n };\n } catch (error) {\n // Fallback or error handling\n console.error('Error comparing screenshots:', error);\n return {\n diffPixels: -1,\n diffPercentage: 1.0,\n isMatch: false\n };\n }\n}\n\n/**\n * Creates a visual test scenario.\n */\nexport function createVisualTestScenario(sceneName: string): VisualScenario {\n return {\n sceneName\n };\n}\n"],"mappings":"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","names":["exports","module","path","exports","module","exports","module","exports","module","exports","module","path","minimatch","Minimatch","filter","makeRe","braceExpand","set","exports","module","path","options","i","exports","module","exports","module","exports","charset","path","extension","exports","module","exports","module","exports","module","path","exports","module","exports","module","exports","module","exports","module","path","createReadStream","resolve","headers","import_vitest","import_shared","import_shared","import_engine","import_shared","import_vitest","import_game","import_shared","import_game","import_shared","import_vitest","import_vitest","import_game","import_game","import_vitest","import_shared","import_shared","import_vitest","import_server","HandshakeStage","import_vitest","import_vitest","import_server","import_shared","handler","import_vitest","options","canvas","import_canvas","canvas","data","img","globals","import_vitest","import_vitest","import_vitest","path","import_vitest","import_engine","import_vitest","import_engine","import_vitest","import_engine","import_vitest","fs","path","resolve","pixelmatch","import_path","path","handler","resolve","import_vitest","import_engine","import_vitest","import_engine","resolve","import_vitest","resolve","import_vitest","handler","import_promises","import_fs","import_path","fs","UPNG","buffer","path","result","type","data","import_pngjs","import_pixelmatch","import_promises","import_path","fs","path","pixelmatch"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/glob-slash.js","../../../node_modules/.pnpm/concat-map@0.0.1/node_modules/concat-map/index.js","../../../node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js","../../../node_modules/.pnpm/brace-expansion@1.1.12/node_modules/brace-expansion/index.js","../../../node_modules/.pnpm/minimatch@3.1.2/node_modules/minimatch/minimatch.js","../../../node_modules/.pnpm/path-to-regexp@3.3.0/node_modules/path-to-regexp/index.js","../../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/db.json","../../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/index.js","../../../node_modules/.pnpm/mime-types@2.1.18/node_modules/mime-types/index.js","../../../node_modules/.pnpm/bytes@3.0.0/node_modules/bytes/index.js","../../../node_modules/.pnpm/content-disposition@0.5.2/node_modules/content-disposition/index.js","../../../node_modules/.pnpm/path-is-inside@1.0.2/node_modules/path-is-inside/lib/path-is-inside.js","../../../node_modules/.pnpm/range-parser@1.2.0/node_modules/range-parser/index.js","../../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/directory.js","../../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/error.js","../../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/index.js","../src/index.ts","../src/shared/mocks.ts","../src/vitest-compat.ts","../src/shared/bsp.ts","../src/shared/pak-loader.ts","../src/shared/math.ts","../src/shared/collision.ts","../src/shared/factories.ts","../src/game/factories.ts","../src/game/helpers.ts","../src/game/helpers/physics.ts","../src/game/helpers/save.ts","../src/game/mocks/ai.ts","../src/game/mocks/combat.ts","../src/game/mocks/items.ts","../src/server/mocks/transport.ts","../src/server/mockTransport.ts","../src/server/mockNetDriver.ts","../src/server/mocks/state.ts","../src/server/mocks/connection.ts","../src/server/mocks/commands.ts","../src/server/mocks/master.ts","../src/server/mocks/physics.ts","../src/server/helpers/multiplayer.ts","../src/server/helpers/snapshot.ts","../src/server/helpers/bandwidth.ts","../src/setup/browser.ts","../src/client/mocks/input.ts","../src/engine/mocks/webgl.ts","../src/setup/canvas.ts","../src/setup/webgpu.ts","../src/setup/headless-webgl.ts","../src/engine/mocks/webgpu.ts","../src/setup/timing.ts","../src/setup/node.ts","../src/engine/mocks/audio.ts","../src/engine/mocks/renderer.ts","../src/engine/mocks/assets.ts","../src/engine/mocks/buffers.ts","../src/engine/mocks/lighting.ts","../src/engine/mocks/particles.ts","../src/engine/rendering.ts","../src/setup/storage.ts","../src/setup/audio.ts","../src/engine/helpers/webgpu-rendering.ts","../src/engine/helpers/webgl-rendering.ts","../src/engine/helpers/webgl-playwright.ts","../src/visual/snapshots.ts","../src/engine/helpers/pipeline-test-template.ts","../src/engine/helpers/textures.ts","../src/client/helpers/view.ts","../src/client/helpers/hud.ts","../src/client/mocks/network.ts","../src/client/mocks/download.ts","../src/client/mocks/state.ts","../src/client/mocks/console.ts","../src/client/helpers/prediction.ts","../src/visual/animation-snapshots.ts","../src/e2e/playwright.ts","../src/e2e/network.ts","../src/e2e/visual.ts"],"sourcesContent":["/* ! The MIT License (MIT) Copyright (c) 2014 Scott Corgan */\n\n// This is adopted from https://github.com/scottcorgan/glob-slash/\n\nconst path = require('path');\nconst normalize = value => path.posix.normalize(path.posix.join('/', value));\n\nmodule.exports = value => (value.charAt(0) === '!' ? `!${normalize(value.substr(1))}` : normalize(value));\nmodule.exports.normalize = normalize;\n","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = (function () { try { return require('path') } catch (e) {}}()) || {\n sep: '/'\n}\nminimatch.sep = path.sep\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n b = b || {}\n var t = {}\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch\n }\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n m.Minimatch.defaults = function defaults (options) {\n return orig.defaults(ext(def, options)).Minimatch\n }\n\n m.filter = function filter (pattern, options) {\n return orig.filter(pattern, ext(def, options))\n }\n\n m.defaults = function defaults (options) {\n return orig.defaults(ext(def, options))\n }\n\n m.makeRe = function makeRe (pattern, options) {\n return orig.makeRe(pattern, ext(def, options))\n }\n\n m.braceExpand = function braceExpand (pattern, options) {\n return orig.braceExpand(pattern, ext(def, options))\n }\n\n m.match = function (list, pattern, options) {\n return orig.match(list, pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (!options.allowWindowsEscape && path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n this.partial = !!options.partial\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n assertValidPattern(pattern)\n\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\nvar MAX_PATTERN_LENGTH = 1024 * 64\nvar assertValidPattern = function (pattern) {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern')\n }\n\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long')\n }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n assertValidPattern(pattern)\n\n var options = this.options\n\n // shortcuts\n if (pattern === '**') {\n if (!options.noglobstar)\n return GLOBSTAR\n else\n pattern = '*'\n }\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n /* istanbul ignore next */\n case '/': {\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n }\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '[': case '.': case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) /* istanbul ignore next - should be impossible */ {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) /* istanbul ignore next - should be impossible */ {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = function match (f, partial) {\n if (typeof partial === 'undefined') partial = this.partial\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* istanbul ignore if */\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n /* istanbul ignore if */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n hit = f === p\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else /* istanbul ignore else */ if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return (fi === fl - 1) && (file[fi] === '')\n }\n\n // should be unreachable.\n /* istanbul ignore next */\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\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 var prevText = prev || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\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 : restrictBacktrack(delimiter, defaultDelimiter, prevText)\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\nfunction restrictBacktrack (delimiter, defaultDelimiter, prevText) {\n var charGroup = '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']'\n\n if (!prevText || prevText.indexOf(delimiter) > -1 || prevText.indexOf(defaultDelimiter) > -1) {\n return charGroup + '+?'\n }\n\n return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')' + charGroup + ')+?'\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 \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\"\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\"\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\"\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\"\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\"\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\"\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\"\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\"\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\"\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\"\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\"\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\"\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\"\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpd\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\"\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dbk\"]\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\"\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\"\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\"\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\"\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\"\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"woff\"]\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\"\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\"\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\"\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\"\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\"\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\"\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\"\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\"\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\"\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\"\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\"\n },\n \"application/n-triples\": {\n \"source\": \"iana\"\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\"\n },\n \"application/node\": {\n \"source\": \"iana\"\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\"\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\"\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\"\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\"\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\"\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pskcxml\"]\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\"\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\"\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\"\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/sep+xml\": {\n \"source\": \"iana\"\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\"\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\"\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"srx\"]\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\"\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssml\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\"\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\"\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\"\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume-movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"apache\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"apache\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\"\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\"\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\"\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\"\n },\n \"image/emf\": {\n \"source\": \"iana\"\n },\n \"image/fits\": {\n \"source\": \"iana\"\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\"\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\"\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\"\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tiff\",\"tif\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\"\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\"\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\"\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\"\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\"\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\"\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\"\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\"\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shex\": {\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\"\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n b: 1,\n kb: 1 << 10,\n mb: 1 << 20,\n gb: 1 << 30,\n tb: ((1 << 30) * 1024)\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n * case: [string],\n * decimalPlaces: [number]\n * fixedDecimals: [boolean]\n * thousandsSeparator: [string]\n * unitSeparator: [string]\n * }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n if (typeof value === 'string') {\n return parse(value);\n }\n\n if (typeof value === 'number') {\n return format(value, options);\n }\n\n return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n var mag = Math.abs(value);\n var thousandsSeparator = (options && options.thousandsSeparator) || '';\n var unitSeparator = (options && options.unitSeparator) || '';\n var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n var fixedDecimals = Boolean(options && options.fixedDecimals);\n var unit = (options && options.unit) || '';\n\n if (!unit || !map[unit.toLowerCase()]) {\n if (mag >= map.tb) {\n unit = 'TB';\n } else if (mag >= map.gb) {\n unit = 'GB';\n } else if (mag >= map.mb) {\n unit = 'MB';\n } else if (mag >= map.kb) {\n unit = 'KB';\n } else {\n unit = 'B';\n }\n }\n\n var val = value / map[unit.toLowerCase()];\n var str = val.toFixed(decimalPlaces);\n\n if (!fixedDecimals) {\n str = str.replace(formatDecimalsRegExp, '$1');\n }\n\n if (thousandsSeparator) {\n str = str.replace(formatThousandsRegExp, thousandsSeparator);\n }\n\n return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n\n if (typeof val !== 'string') {\n return null;\n }\n\n // Test if the string passed is valid\n var results = parseRegExp.exec(val);\n var floatValue;\n var unit = 'b';\n\n if (!results) {\n // Nothing could be extracted from the given string\n floatValue = parseInt(val, 10);\n unit = 'b'\n } else {\n // Retrieve the value and the unit\n floatValue = parseFloat(results[1]);\n unit = results[4].toLowerCase();\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n","/*!\n * content-disposition\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n */\n\nvar basename = require('path').basename\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*<any CHAR except CTLs or separators>\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = <any TEXT except <\">>\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n * TEXT = <any OCTET except CTLs, but including LWS>\n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = <US-ASCII CR, carriage return (13)>\n * LF = <US-ASCII LF, linefeed (10)>\n * SP = <US-ASCII SP, space (32)>\n * HT = <US-ASCII HT, horizontal-tab (9)>\n * CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET = <any 8-bit sequence of data>\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value = charset \"'\" [ language ] \"'\" value-chars\n * charset = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n * / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n * / \"{\" / \"}\" / \"~\"\n * language = ( 2*3ALPHA [ extlang ] )\n * / 4ALPHA\n * / 5*8ALPHA\n * extlang = *3( \"-\" 3ALPHA )\n * value-chars = *( pct-encoded / attr-char )\n * pct-encoded = \"%\" HEXDIG HEXDIG\n * attr-char = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n * / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm = \"filename\" \"=\" value\n * | \"filename*\" \"=\" ext-value\n * disp-ext-parm = token \"=\" value\n * | ext-token \"=\" ext-value\n * ext-token = <the characters in token, followed by \"*\">\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @api public\n */\n\nfunction contentDisposition (filename, options) {\n var opts = options || {}\n\n // get type\n var type = opts.type || 'attachment'\n\n // get parameters\n var params = createparams(filename, opts.fallback)\n\n // format into string\n return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @api private\n */\n\nfunction createparams (filename, fallback) {\n if (filename === undefined) {\n return\n }\n\n var params = {}\n\n if (typeof filename !== 'string') {\n throw new TypeError('filename must be a string')\n }\n\n // fallback defaults to true\n if (fallback === undefined) {\n fallback = true\n }\n\n if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n throw new TypeError('fallback must be a string or boolean')\n }\n\n if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n throw new TypeError('fallback must be ISO-8859-1 string')\n }\n\n // restrict to file base name\n var name = basename(filename)\n\n // determine if name is suitable for quoted string\n var isQuotedString = TEXT_REGEXP.test(name)\n\n // generate fallback name\n var fallbackName = typeof fallback !== 'string'\n ? fallback && getlatin1(name)\n : basename(fallback)\n var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n // set extended filename parameter\n if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n params['filename*'] = name\n }\n\n // set filename parameter\n if (isQuotedString || hasFallback) {\n params.filename = hasFallback\n ? fallbackName\n : name\n }\n\n return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @api private\n */\n\nfunction format (obj) {\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n // start with normalized type\n var string = String(type).toLowerCase()\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n var val = param.substr(-1) === '*'\n ? ustring(parameters[param])\n : qstring(parameters[param])\n\n string += '; ' + param + '=' + val\n }\n }\n\n return string\n}\n\n/**\n * Decode a RFC 6987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction decodefield (str) {\n var match = EXT_VALUE_REGEXP.exec(str)\n\n if (!match) {\n throw new TypeError('invalid extended field value')\n }\n\n var charset = match[1].toLowerCase()\n var encoded = match[2]\n var value\n\n // to binary string\n var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n switch (charset) {\n case 'iso-8859-1':\n value = getlatin1(binary)\n break\n case 'utf-8':\n value = new Buffer(binary, 'binary').toString('utf8')\n break\n default:\n throw new TypeError('unsupported charset in extended field')\n }\n\n return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction getlatin1 (val) {\n // simple Unicode -> ISO-8859-1 transformation\n return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @api private\n */\n\nfunction parse (string) {\n if (!string || typeof string !== 'string') {\n throw new TypeError('argument string is required')\n }\n\n var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n if (!match) {\n throw new TypeError('invalid type format')\n }\n\n // normalize type\n var index = match[0].length\n var type = match[1].toLowerCase()\n\n var key\n var names = []\n var params = {}\n var value\n\n // calculate index to start at\n index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n ? index - 1\n : index\n\n // match parameters\n while ((match = PARAM_REGEXP.exec(string))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (names.indexOf(key) !== -1) {\n throw new TypeError('invalid duplicate parameter')\n }\n\n names.push(key)\n\n if (key.indexOf('*') + 1 === key.length) {\n // decode extended value\n key = key.slice(0, -1)\n value = decodefield(value)\n\n // overwrite existing value\n params[key] = value\n continue\n }\n\n if (typeof params[key] === 'string') {\n continue\n }\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(QESC_REGEXP, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @api private\n */\n\nfunction pdecode (str, hex) {\n return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @api private\n */\n\nfunction pencode (char) {\n var hex = String(char)\n .charCodeAt(0)\n .toString(16)\n .toUpperCase()\n return hex.length === 1\n ? '%0' + hex\n : '%' + hex\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction ustring (val) {\n var str = String(val)\n\n // percent encode as UTF-8\n var encoded = encodeURIComponent(str)\n .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n */\n\nfunction ContentDisposition (type, parameters) {\n this.type = type\n this.parameters = parameters\n}\n","\"use strict\";\n\nvar path = require(\"path\");\n\nmodule.exports = function (thePath, potentialParent) {\n // For inside-directory checking, we want to allow trailing slashes, so normalize.\n thePath = stripTrailingSep(thePath);\n potentialParent = stripTrailingSep(potentialParent);\n\n // Node treats only Windows as case-insensitive in its path module; we follow those conventions.\n if (process.platform === \"win32\") {\n thePath = thePath.toLowerCase();\n potentialParent = potentialParent.toLowerCase();\n }\n\n return thePath.lastIndexOf(potentialParent, 0) === 0 &&\n\t\t(\n\t\t\tthePath[potentialParent.length] === path.sep ||\n\t\t\tthePath[potentialParent.length] === undefined\n\t\t);\n};\n\nfunction stripTrailingSep(thePath) {\n if (thePath[thePath.length - 1] === path.sep) {\n return thePath.slice(0, -1);\n }\n return thePath;\n}\n","/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n var index = str.indexOf('=')\n\n if (index === -1) {\n return -2\n }\n\n // split the range string\n var arr = str.slice(index + 1).split(',')\n var ranges = []\n\n // add ranges type\n ranges.type = str.slice(0, index)\n\n // parse all ranges\n for (var i = 0; i < arr.length; i++) {\n var range = arr[i].split('-')\n var start = parseInt(range[0], 10)\n var end = parseInt(range[1], 10)\n\n // -nnn\n if (isNaN(start)) {\n start = size - end\n end = size - 1\n // nnn-\n } else if (isNaN(end)) {\n end = size - 1\n }\n\n // limit last-byte-pos to current length\n if (end > size - 1) {\n end = size - 1\n }\n\n // invalid or unsatisifiable\n if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n continue\n }\n\n // add range\n ranges.push({\n start: start,\n end: end\n })\n }\n\n if (ranges.length < 1) {\n // unsatisifiable\n return -1\n }\n\n return options && options.combine\n ? combineRanges(ranges)\n : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n for (var j = 0, i = 1; i < ordered.length; i++) {\n var range = ordered[i]\n var current = ordered[j]\n\n if (range.start > current.end + 1) {\n // next range\n ordered[++j] = range\n } else if (range.end > current.end) {\n // extend range\n current.end = range.end\n current.index = Math.min(current.index, range.index)\n }\n }\n\n // trim ordered array\n ordered.length = j + 1\n\n // generate combined range\n var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n // copy ranges type\n combined.type = ranges.type\n\n return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n return {\n start: range.start,\n end: range.end,\n index: index\n }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n return {\n start: range.start,\n end: range.end\n }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n return a.start - b.start\n}\n","(function(){function directory(it\n) {\nvar encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : (function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());var out='<!DOCTYPE html><html lang=\"en\"> <head> <meta charset=\"utf-8\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <title>Files within '+encodeHTML(it.directory)+'</title> <style>body { margin: 0; padding: 30px; background: #fff; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; -webkit-font-smoothing: antialiased;}main { max-width: 920px;}header { display: flex; justify-content: space-between; flex-wrap: wrap;}h1 { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}header h1 a { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}h1 i { font-style: normal;}ul { margin: 0 0 0 -2px; padding: 20px 0 0 0;}ul li { list-style: none; font-size: 14px; display: flex; justify-content: space-between;}a { text-decoration: none;}ul a { color: #000; padding: 10px 5px; margin: 0 -5px; white-space: nowrap; overflow: hidden; display: block; width: 100%; text-overflow: ellipsis;}header a { color: #0076FF; font-size: 11px; font-weight: 400; display: inline-block; line-height: 20px;}svg { height: 13px; vertical-align: text-bottom;}ul a::before { display: inline-block; vertical-align: middle; margin-right: 10px; width: 24px; text-align: center; line-height: 12px;}ul a.file::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M10 8C8.34 8 7 6.66 7 5V1H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h9c1.1 0 2-.9 2-2V8h-4zM8 5c0 1.1.9 2 2 2h3.59L8 1.41V5zM3 0h5l7 7v9c0 1.66-1.34 3-3 3H3c-1.66 0-3-1.34-3-3V3c0-1.66 1.34-3 3-3z\\' fill=\\'black\\'/></svg>\");}ul a:hover { text-decoration: underline;}ul a.folder::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'20\\' height=\\'16\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M18.784 3.87a1.565 1.565 0 0 0-.565-.356V2.426c0-.648-.523-1.171-1.15-1.171H8.996L7.908.25A.89.89 0 0 0 7.302 0H2.094C1.445 0 .944.523.944 1.171v2.3c-.21.085-.398.21-.565.356a1.348 1.348 0 0 0-.377 1.004l.398 9.83C.42 15.393 1.048 16 1.8 16h15.583c.753 0 1.36-.586 1.4-1.339l.398-9.83c.021-.313-.125-.69-.397-.962zM1.843 3.41V1.191c0-.146.104-.272.25-.272H7.26l1.234 1.088c.083.042.167.104.293.104h8.282c.125 0 .25.126.25.272V3.41H1.844zm15.54 11.712H1.78a.47.47 0 0 1-.481-.46l-.397-9.83c0-.147.041-.252.125-.356a.504.504 0 0 1 .377-.147H17.78c.125 0 .272.063.377.147.083.083.125.209.125.334l-.418 9.83c-.021.272-.23.482-.481.482z\\' fill=\\'black\\'/></svg>\");}ul a.lambda::before { content: url(\"data:image/svg+xml; utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M3.5 14.4354H5.31622L7.30541 9.81311H7.43514L8.65315 13.0797C9.05676 14.1643 9.55405 14.5 10.7 14.5C11.0171 14.5 11.291 14.4677 11.5 14.4032V13.1572C11.3847 13.1766 11.2622 13.2024 11.1541 13.2024C10.6351 13.2024 10.3829 13.0281 10.1595 12.4664L8.02613 7.07586C7.21171 5.01646 6.54865 4.5 5.11441 4.5C4.83333 4.5 4.62432 4.53228 4.37207 4.59038V5.83635C4.56667 5.81052 4.66036 5.79761 4.77568 5.79761C5.64775 5.79761 5.9 6.0042 6.4045 7.19852L6.64234 7.77954L3.5 14.4354Z\\' fill=\\'black\\'/><rect x=\\'0.5\\' y=\\'0.5\\' width=\\'14\\' height=\\'18\\' rx=\\'2.5\\' stroke=\\'black\\'/></svg>\");}ul a.file.gif::before,ul a.file.jpg::before,ul a.file.png::before,ul a.file.svg::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'16\\' height=\\'16\\' viewBox=\\'0 0 80 80\\' xmlns=\\'http://www.w3.org/2000/svg\\' fill=\\'none\\' stroke=\\'black\\' stroke-width=\\'5\\' stroke-linecap=\\'round\\' stroke-linejoin=\\'round\\'><rect x=\\'6\\' y=\\'6\\' width=\\'68\\' height=\\'68\\' rx=\\'5\\' ry=\\'5\\'/><circle cx=\\'24\\' cy=\\'24\\' r=\\'8\\'/><path d=\\'M73 49L59 34 37 52m16 20L27 42 7 58\\'/></svg>\");}::selection { background-color: #79FFE1; color: #000;}::-moz-selection { background-color: #79FFE1; color: #000;}@media (min-width: 768px) { ul {display: flex;flex-wrap: wrap; } ul li {width: 230px;padding-right: 20px; }}@media (min-width: 992px) { body {padding: 45px; } h1, header h1 a {font-size: 15px; } ul li {font-size: 13px;box-sizing: border-box;justify-content: flex-start; }}</style> </head> <body> <main> <header> <h1> <i>Index of </i> ';var arr1=it.paths;if(arr1){var value,index=-1,l1=arr1.length-1;while(index<l1){value=arr1[index+=1];out+=' <a href=\"/'+encodeHTML(value.url)+'\">'+encodeHTML(value.name)+'</a> ';} } out+=' </h1> </header> <ul id=\"files\"> ';var arr2=it.files;if(arr2){var value,index=-1,l2=arr2.length-1;while(index<l2){value=arr2[index+=1];out+=' <li> <a href=\"'+encodeHTML(value.relative)+'\" title=\"'+encodeHTML(value.title)+'\" class=\"'+encodeHTML(value.type)+' '+encodeHTML(value.ext)+'\">'+encodeHTML(value.base)+'</a> </li> ';} } out+=' </ul></main> </body></html>';return out;\n}var itself=directory, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['directory']=itself;}}());","(function(){function error(it\n) {\nvar out='<!DOCTYPE html><head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/> <style> body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; cursor: default; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; } main, aside, section { display: flex; justify-content: center; align-items: center; flex-direction: column; } main { height: 100%; } aside { background: #000; flex-shrink: 1; padding: 30px 20px; } aside p { margin: 0; color: #999999; font-size: 14px; line-height: 24px; } aside a { color: #fff; text-decoration: none; } section span { font-size: 24px; font-weight: 500; display: block; border-bottom: 1px solid #EAEAEA; text-align: center; padding-bottom: 20px; width: 100px; } section p { font-size: 14px; font-weight: 400; } section span + p { margin: 20px 0 0 0; } @media (min-width: 768px) { section { height: 40px; flex-direction: row; } section span, section p { height: 100%; line-height: 40px; } section span { border-bottom: 0; border-right: 1px solid #EAEAEA; padding: 0 20px 0 0; width: auto; } section span + p { margin: 0; padding-left: 20px; } aside { padding: 50px 0; } aside p { max-width: 520px; text-align: center; } } </style></head><body> <main> <section> <span>'+(it.statusCode)+'</span> <p>'+(it.message)+'</p> </section> </main></body>';return out;\n}var itself=error, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['error']=itself;}}());","// Native\nconst {promisify} = require('util');\nconst path = require('path');\nconst {createHash} = require('crypto');\nconst {realpath, lstat, createReadStream, readdir} = require('fs');\n\n// Packages\nconst url = require('url');\nconst slasher = require('./glob-slash');\nconst minimatch = require('minimatch');\nconst pathToRegExp = require('path-to-regexp');\nconst mime = require('mime-types');\nconst bytes = require('bytes');\nconst contentDisposition = require('content-disposition');\nconst isPathInside = require('path-is-inside');\nconst parseRange = require('range-parser');\n\n// Other\nconst directoryTemplate = require('./directory');\nconst errorTemplate = require('./error');\n\nconst etags = new Map();\n\nconst calculateSha = (handlers, absolutePath) =>\n\tnew Promise((resolve, reject) => {\n\t\tconst hash = createHash('sha1');\n\t\thash.update(path.extname(absolutePath));\n\t\thash.update('-');\n\t\tconst rs = handlers.createReadStream(absolutePath);\n\t\trs.on('error', reject);\n\t\trs.on('data', buf => hash.update(buf));\n\t\trs.on('end', () => {\n\t\t\tconst sha = hash.digest('hex');\n\t\t\tresolve(sha);\n\t\t});\n\t});\n\nconst sourceMatches = (source, requestPath, allowSegments) => {\n\tconst keys = [];\n\tconst slashed = slasher(source);\n\tconst resolvedPath = path.posix.resolve(requestPath);\n\n\tlet results = null;\n\n\tif (allowSegments) {\n\t\tconst normalized = slashed.replace('*', '(.*)');\n\t\tconst expression = pathToRegExp(normalized, keys);\n\n\t\tresults = expression.exec(resolvedPath);\n\n\t\tif (!results) {\n\t\t\t// clear keys so that they are not used\n\t\t\t// later with empty results. this may\n\t\t\t// happen if minimatch returns true\n\t\t\tkeys.length = 0;\n\t\t}\n\t}\n\n\tif (results || minimatch(resolvedPath, slashed)) {\n\t\treturn {\n\t\t\tkeys,\n\t\t\tresults\n\t\t};\n\t}\n\n\treturn null;\n};\n\nconst toTarget = (source, destination, previousPath) => {\n\tconst matches = sourceMatches(source, previousPath, true);\n\n\tif (!matches) {\n\t\treturn null;\n\t}\n\n\tconst {keys, results} = matches;\n\n\tconst props = {};\n\tconst {protocol} = url.parse(destination);\n\tconst normalizedDest = protocol ? destination : slasher(destination);\n\tconst toPath = pathToRegExp.compile(normalizedDest);\n\n\tfor (let index = 0; index < keys.length; index++) {\n\t\tconst {name} = keys[index];\n\t\tprops[name] = results[index + 1];\n\t}\n\n\treturn toPath(props);\n};\n\nconst applyRewrites = (requestPath, rewrites = [], repetitive) => {\n\t// We need to copy the array, since we're going to modify it.\n\tconst rewritesCopy = rewrites.slice();\n\n\t// If the method was called again, the path was already rewritten\n\t// so we need to make sure to return it.\n\tconst fallback = repetitive ? requestPath : null;\n\n\tif (rewritesCopy.length === 0) {\n\t\treturn fallback;\n\t}\n\n\tfor (let index = 0; index < rewritesCopy.length; index++) {\n\t\tconst {source, destination} = rewrites[index];\n\t\tconst target = toTarget(source, destination, requestPath);\n\n\t\tif (target) {\n\t\t\t// Remove rules that were already applied\n\t\t\trewritesCopy.splice(index, 1);\n\n\t\t\t// Check if there are remaining ones to be applied\n\t\t\treturn applyRewrites(slasher(target), rewritesCopy, true);\n\t\t}\n\t}\n\n\treturn fallback;\n};\n\nconst ensureSlashStart = target => (target.startsWith('/') ? target : `/${target}`);\n\nconst shouldRedirect = (decodedPath, {redirects = [], trailingSlash}, cleanUrl) => {\n\tconst slashing = typeof trailingSlash === 'boolean';\n\tconst defaultType = 301;\n\tconst matchHTML = /(\\.html|\\/index)$/g;\n\n\tif (redirects.length === 0 && !slashing && !cleanUrl) {\n\t\treturn null;\n\t}\n\n\t// By stripping the HTML parts from the decoded\n\t// path *before* handling the trailing slash, we make\n\t// sure that only *one* redirect occurs if both\n\t// config options are used.\n\tif (cleanUrl && matchHTML.test(decodedPath)) {\n\t\tdecodedPath = decodedPath.replace(matchHTML, '');\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\tdecodedPath = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\t\treturn {\n\t\t\ttarget: ensureSlashStart(decodedPath),\n\t\t\tstatusCode: defaultType\n\t\t};\n\t}\n\n\tif (slashing) {\n\t\tconst {ext, name} = path.parse(decodedPath);\n\t\tconst isTrailed = decodedPath.endsWith('/');\n\t\tconst isDotfile = name.startsWith('.');\n\n\t\tlet target = null;\n\n\t\tif (!trailingSlash && isTrailed) {\n\t\t\ttarget = decodedPath.slice(0, -1);\n\t\t} else if (trailingSlash && !isTrailed && !ext && !isDotfile) {\n\t\t\ttarget = `${decodedPath}/`;\n\t\t}\n\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\ttarget = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget: ensureSlashStart(target),\n\t\t\t\tstatusCode: defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\t// This is currently the fastest way to\n\t// iterate over an array\n\tfor (let index = 0; index < redirects.length; index++) {\n\t\tconst {source, destination, type} = redirects[index];\n\t\tconst target = toTarget(source, destination, decodedPath);\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget,\n\t\t\t\tstatusCode: type || defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst appendHeaders = (target, source) => {\n\tfor (let index = 0; index < source.length; index++) {\n\t\tconst {key, value} = source[index];\n\t\ttarget[key] = value;\n\t}\n};\n\nconst getHeaders = async (handlers, config, current, absolutePath, stats) => {\n\tconst {headers: customHeaders = [], etag = false} = config;\n\tconst related = {};\n\tconst {base} = path.parse(absolutePath);\n\tconst relativePath = path.relative(current, absolutePath);\n\n\tif (customHeaders.length > 0) {\n\t\t// By iterating over all headers and never stopping, developers\n\t\t// can specify multiple header sources in the config that\n\t\t// might match a single path.\n\t\tfor (let index = 0; index < customHeaders.length; index++) {\n\t\t\tconst {source, headers} = customHeaders[index];\n\n\t\t\tif (sourceMatches(source, slasher(relativePath))) {\n\t\t\t\tappendHeaders(related, headers);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet defaultHeaders = {};\n\n\tif (stats) {\n\t\tdefaultHeaders = {\n\t\t\t'Content-Length': stats.size,\n\t\t\t// Default to \"inline\", which always tries to render in the browser,\n\t\t\t// if that's not working, it will save the file. But to be clear: This\n\t\t\t// only happens if it cannot find a appropiate value.\n\t\t\t'Content-Disposition': contentDisposition(base, {\n\t\t\t\ttype: 'inline'\n\t\t\t}),\n\t\t\t'Accept-Ranges': 'bytes'\n\t\t};\n\n\t\tif (etag) {\n\t\t\tlet [mtime, sha] = etags.get(absolutePath) || [];\n\t\t\tif (Number(mtime) !== Number(stats.mtime)) {\n\t\t\t\tsha = await calculateSha(handlers, absolutePath);\n\t\t\t\tetags.set(absolutePath, [stats.mtime, sha]);\n\t\t\t}\n\t\t\tdefaultHeaders['ETag'] = `\"${sha}\"`;\n\t\t} else {\n\t\t\tdefaultHeaders['Last-Modified'] = stats.mtime.toUTCString();\n\t\t}\n\n\t\tconst contentType = mime.contentType(base);\n\n\t\tif (contentType) {\n\t\t\tdefaultHeaders['Content-Type'] = contentType;\n\t\t}\n\t}\n\n\tconst headers = Object.assign(defaultHeaders, related);\n\n\tfor (const key in headers) {\n\t\tif (headers.hasOwnProperty(key) && headers[key] === null) {\n\t\t\tdelete headers[key];\n\t\t}\n\t}\n\n\treturn headers;\n};\n\nconst applicable = (decodedPath, configEntry) => {\n\tif (typeof configEntry === 'boolean') {\n\t\treturn configEntry;\n\t}\n\n\tif (Array.isArray(configEntry)) {\n\t\tfor (let index = 0; index < configEntry.length; index++) {\n\t\t\tconst source = configEntry[index];\n\n\t\t\tif (sourceMatches(source, decodedPath)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nconst getPossiblePaths = (relativePath, extension) => [\n\tpath.join(relativePath, `index${extension}`),\n\trelativePath.endsWith('/') ? relativePath.replace(/\\/$/g, extension) : (relativePath + extension)\n].filter(item => path.basename(item) !== extension);\n\nconst findRelated = async (current, relativePath, rewrittenPath, originalStat) => {\n\tconst possible = rewrittenPath ? [rewrittenPath] : getPossiblePaths(relativePath, '.html');\n\n\tlet stats = null;\n\n\tfor (let index = 0; index < possible.length; index++) {\n\t\tconst related = possible[index];\n\t\tconst absolutePath = path.join(current, related);\n\n\t\ttry {\n\t\t\tstats = await originalStat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\tif (stats) {\n\t\t\treturn {\n\t\t\t\tstats,\n\t\t\t\tabsolutePath\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst canBeListed = (excluded, file) => {\n\tconst slashed = slasher(file);\n\tlet whether = true;\n\n\tfor (let mark = 0; mark < excluded.length; mark++) {\n\t\tconst source = excluded[mark];\n\n\t\tif (sourceMatches(source, slashed)) {\n\t\t\twhether = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn whether;\n};\n\nconst renderDirectory = async (current, acceptsJSON, handlers, methods, config, paths) => {\n\tconst {directoryListing, trailingSlash, unlisted = [], renderSingle} = config;\n\tconst slashSuffix = typeof trailingSlash === 'boolean' ? (trailingSlash ? '/' : '') : '/';\n\tconst {relativePath, absolutePath} = paths;\n\n\tconst excluded = [\n\t\t'.DS_Store',\n\t\t'.git',\n\t\t...unlisted\n\t];\n\n\tif (!applicable(relativePath, directoryListing) && !renderSingle) {\n\t\treturn {};\n\t}\n\n\tlet files = await handlers.readdir(absolutePath);\n\n\tconst canRenderSingle = renderSingle && (files.length === 1);\n\n\tfor (let index = 0; index < files.length; index++) {\n\t\tconst file = files[index];\n\n\t\tconst filePath = path.resolve(absolutePath, file);\n\t\tconst details = path.parse(filePath);\n\n\t\t// It's important to indicate that the `stat` call was\n\t\t// spawned by the directory listing, as Now is\n\t\t// simulating those calls and needs to special-case this.\n\t\tlet stats = null;\n\n\t\tif (methods.lstat) {\n\t\t\tstats = await handlers.lstat(filePath, true);\n\t\t} else {\n\t\t\tstats = await handlers.lstat(filePath);\n\t\t}\n\n\t\tdetails.relative = path.join(relativePath, details.base);\n\n\t\tif (stats.isDirectory()) {\n\t\t\tdetails.base += slashSuffix;\n\t\t\tdetails.relative += slashSuffix;\n\t\t\tdetails.type = 'folder';\n\t\t} else {\n\t\t\tif (canRenderSingle) {\n\t\t\t\treturn {\n\t\t\t\t\tsingleFile: true,\n\t\t\t\t\tabsolutePath: filePath,\n\t\t\t\t\tstats\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdetails.ext = details.ext.split('.')[1] || 'txt';\n\t\t\tdetails.type = 'file';\n\n\t\t\tdetails.size = bytes(stats.size, {\n\t\t\t\tunitSeparator: ' ',\n\t\t\t\tdecimalPlaces: 0\n\t\t\t});\n\t\t}\n\n\t\tdetails.title = details.base;\n\n\t\tif (canBeListed(excluded, file)) {\n\t\t\tfiles[index] = details;\n\t\t} else {\n\t\t\tdelete files[index];\n\t\t}\n\t}\n\n\tconst toRoot = path.relative(current, absolutePath);\n\tconst directory = path.join(path.basename(current), toRoot, slashSuffix);\n\tconst pathParts = directory.split(path.sep).filter(Boolean);\n\n\t// Sort to list directories first, then sort alphabetically\n\tfiles = files.sort((a, b) => {\n\t\tconst aIsDir = a.type === 'directory';\n\t\tconst bIsDir = b.type === 'directory';\n\n\t\t/* istanbul ignore next */\n\t\tif (aIsDir && !bIsDir) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif ((bIsDir && !aIsDir) || (a.base > b.base)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\tif (a.base < b.base) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\treturn 0;\n\t}).filter(Boolean);\n\n\t// Add parent directory to the head of the sorted files array\n\tif (toRoot.length > 0) {\n\t\tconst directoryPath = [...pathParts].slice(1);\n\t\tconst relative = path.join('/', ...directoryPath, '..', slashSuffix);\n\n\t\tfiles.unshift({\n\t\t\ttype: 'directory',\n\t\t\tbase: '..',\n\t\t\trelative,\n\t\t\ttitle: relative,\n\t\t\text: ''\n\t\t});\n\t}\n\n\tconst subPaths = [];\n\n\tfor (let index = 0; index < pathParts.length; index++) {\n\t\tconst parents = [];\n\t\tconst isLast = index === (pathParts.length - 1);\n\n\t\tlet before = 0;\n\n\t\twhile (before <= index) {\n\t\t\tparents.push(pathParts[before]);\n\t\t\tbefore++;\n\t\t}\n\n\t\tparents.shift();\n\n\t\tsubPaths.push({\n\t\t\tname: pathParts[index] + (isLast ? slashSuffix : '/'),\n\t\t\turl: index === 0 ? '' : parents.join('/') + slashSuffix\n\t\t});\n\t}\n\n\tconst spec = {\n\t\tfiles,\n\t\tdirectory,\n\t\tpaths: subPaths\n\t};\n\n\tconst output = acceptsJSON ? JSON.stringify(spec) : directoryTemplate(spec);\n\n\treturn {directory: output};\n};\n\nconst sendError = async (absolutePath, response, acceptsJSON, current, handlers, config, spec) => {\n\tconst {err: original, message, code, statusCode} = spec;\n\n\t/* istanbul ignore next */\n\tif (original && process.env.NODE_ENV !== 'test') {\n\t\tconsole.error(original);\n\t}\n\n\tresponse.statusCode = statusCode;\n\n\tif (acceptsJSON) {\n\t\tresponse.setHeader('Content-Type', 'application/json; charset=utf-8');\n\n\t\tresponse.end(JSON.stringify({\n\t\t\terror: {\n\t\t\t\tcode,\n\t\t\t\tmessage\n\t\t\t}\n\t\t}));\n\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\tconst errorPage = path.join(current, `${statusCode}.html`);\n\n\ttry {\n\t\tstats = await handlers.lstat(errorPage);\n\t} catch (err) {\n\t\tif (err.code !== 'ENOENT') {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tif (stats) {\n\t\tlet stream = null;\n\n\t\ttry {\n\t\t\tstream = await handlers.createReadStream(errorPage);\n\n\t\t\tconst headers = await getHeaders(handlers, config, current, errorPage, stats);\n\n\t\t\tresponse.writeHead(statusCode, headers);\n\t\t\tstream.pipe(response);\n\n\t\t\treturn;\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, null);\n\theaders['Content-Type'] = 'text/html; charset=utf-8';\n\n\tresponse.writeHead(statusCode, headers);\n\tresponse.end(errorTemplate({statusCode, message}));\n};\n\nconst internalError = async (...args) => {\n\tconst lastIndex = args.length - 1;\n\tconst err = args[lastIndex];\n\n\targs[lastIndex] = {\n\t\tstatusCode: 500,\n\t\tcode: 'internal_server_error',\n\t\tmessage: 'A server error has occurred',\n\t\terr\n\t};\n\n\treturn sendError(...args);\n};\n\nconst getHandlers = methods => Object.assign({\n\tlstat: promisify(lstat),\n\trealpath: promisify(realpath),\n\tcreateReadStream,\n\treaddir: promisify(readdir),\n\tsendError\n}, methods);\n\nmodule.exports = async (request, response, config = {}, methods = {}) => {\n\tconst cwd = process.cwd();\n\tconst current = config.public ? path.resolve(cwd, config.public) : cwd;\n\tconst handlers = getHandlers(methods);\n\n\tlet relativePath = null;\n\tlet acceptsJSON = null;\n\n\tif (request.headers.accept) {\n\t\tacceptsJSON = request.headers.accept.includes('application/json');\n\t}\n\n\ttry {\n\t\trelativePath = decodeURIComponent(url.parse(request.url).pathname);\n\t} catch (err) {\n\t\treturn sendError('/', response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tlet absolutePath = path.join(current, relativePath);\n\n\t// Prevent path traversal vulnerabilities. We could do this\n\t// by ourselves, but using the package covers all the edge cases.\n\tif (!isPathInside(absolutePath, current)) {\n\t\treturn sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tconst cleanUrl = applicable(relativePath, config.cleanUrls);\n\tconst redirect = shouldRedirect(relativePath, config, cleanUrl);\n\n\tif (redirect) {\n\t\tresponse.writeHead(redirect.statusCode, {\n\t\t\tLocation: encodeURI(redirect.target)\n\t\t});\n\n\t\tresponse.end();\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\t// It's extremely important that we're doing multiple stat calls. This one\n\t// right here could technically be removed, but then the program\n\t// would be slower. Because for directories, we always want to see if a related file\n\t// exists and then (after that), fetch the directory itself if no\n\t// related file was found. However (for files, of which most have extensions), we should\n\t// always stat right away.\n\t//\n\t// When simulating a file system without directory indexes, calculating whether a\n\t// directory exists requires loading all the file paths and then checking if\n\t// one of them includes the path of the directory. As that's a very\n\t// performance-expensive thing to do, we need to ensure it's not happening if not really necessary.\n\n\tif (path.extname(relativePath) !== '') {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rewrittenPath = applyRewrites(relativePath, config.rewrites);\n\n\tif (!stats && (cleanUrl || rewrittenPath)) {\n\t\ttry {\n\t\t\tconst related = await findRelated(current, relativePath, rewrittenPath, handlers.lstat);\n\n\t\t\tif (related) {\n\t\t\t\t({stats, absolutePath} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!stats) {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (stats && stats.isDirectory()) {\n\t\tlet directory = null;\n\t\tlet singleFile = null;\n\n\t\ttry {\n\t\t\tconst related = await renderDirectory(current, acceptsJSON, handlers, methods, config, {\n\t\t\t\trelativePath,\n\t\t\t\tabsolutePath\n\t\t\t});\n\n\t\t\tif (related.singleFile) {\n\t\t\t\t({stats, absolutePath, singleFile} = related);\n\t\t\t} else {\n\t\t\t\t({directory} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\n\t\tif (directory) {\n\t\t\tconst contentType = acceptsJSON ? 'application/json; charset=utf-8' : 'text/html; charset=utf-8';\n\n\t\t\tresponse.statusCode = 200;\n\t\t\tresponse.setHeader('Content-Type', contentType);\n\t\t\tresponse.end(directory);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!singleFile) {\n\t\t\t// The directory listing is disabled, so we want to\n\t\t\t// render a 404 error.\n\t\t\tstats = null;\n\t\t}\n\t}\n\n\tconst isSymLink = stats && stats.isSymbolicLink();\n\n\t// There are two scenarios in which we want to reply with\n\t// a 404 error: Either the path does not exist, or it is a\n\t// symlink while the `symlinks` option is disabled (which it is by default).\n\tif (!stats || (!config.symlinks && isSymLink)) {\n\t\t// allow for custom 404 handling\n\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 404,\n\t\t\tcode: 'not_found',\n\t\t\tmessage: 'The requested path could not be found'\n\t\t});\n\t}\n\n\t// If we figured out that the target is a symlink, we need to\n\t// resolve the symlink and run a new `stat` call just for the\n\t// target of that symlink.\n\tif (isSymLink) {\n\t\ttry {\n\t\t\tabsolutePath = await handlers.realpath(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\t// The requested symlink is invalid\n\t\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\t\tstatusCode: 404,\n\t\t\t\tcode: 'not_found',\n\t\t\t\tmessage: 'The requested path could not be found'\n\t\t\t});\n\t\t}\n\t\tstats = await handlers.lstat(absolutePath);\n\t}\n\n\tconst streamOpts = {};\n\n\t// TODO ? if-range\n\tif (request.headers.range && stats.size) {\n\t\tconst range = parseRange(stats.size, request.headers.range);\n\n\t\tif (typeof range === 'object' && range.type === 'bytes') {\n\t\t\tconst {start, end} = range[0];\n\n\t\t\tstreamOpts.start = start;\n\t\t\tstreamOpts.end = end;\n\n\t\t\tresponse.statusCode = 206;\n\t\t} else {\n\t\t\tresponse.statusCode = 416;\n\t\t\tresponse.setHeader('Content-Range', `bytes */${stats.size}`);\n\t\t}\n\t}\n\n\t// TODO ? multiple ranges\n\n\tlet stream = null;\n\n\ttry {\n\t\tstream = await handlers.createReadStream(absolutePath, streamOpts);\n\t} catch (err) {\n\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, stats);\n\n\t// eslint-disable-next-line no-undefined\n\tif (streamOpts.start !== undefined && streamOpts.end !== undefined) {\n\t\theaders['Content-Range'] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`;\n\t\theaders['Content-Length'] = streamOpts.end - streamOpts.start + 1;\n\t}\n\n\t// We need to check for `headers.ETag` being truthy first, otherwise it will\n\t// match `undefined` being equal to `undefined`, which is true.\n\t//\n\t// Checking for `undefined` and `null` is also important, because `Range` can be `0`.\n\t//\n\t// eslint-disable-next-line no-eq-null\n\tif (request.headers.range == null && headers.ETag && headers.ETag === request.headers['if-none-match']) {\n\t\tresponse.statusCode = 304;\n\t\tresponse.end();\n\n\t\treturn;\n\t}\n\n\tresponse.writeHead(response.statusCode || 200, headers);\n\tstream.pipe(response);\n};\n","// Export all test utilities\nexport * from './shared/mocks.js';\nexport * from './shared/bsp.js';\nexport * from './shared/pak-loader.js';\nexport * from './shared/math.js';\nexport * from './shared/collision.js';\nexport * from './shared/factories.js';\nexport * from './game/factories.js';\nexport * from './game/helpers.js';\nexport * from './game/helpers/physics.js';\nexport * from './game/helpers/save.js';\nexport * from './game/mocks/ai.js';\nexport * from './game/mocks/combat.js';\nexport * from './game/mocks/items.js';\n// Removed export * from './game/mocks.js';\nexport * from './server/mocks/transport.js';\nexport * from './server/mockTransport.js';\nexport * from './server/mockNetDriver.js';\nexport * from './server/mocks/state.js';\nexport * from './server/mocks/connection.js';\nexport * from './server/mocks/commands.js';\nexport * from './server/mocks/master.js';\nexport * from './server/mocks/physics.js';\nexport * from './server/helpers/multiplayer.js';\nexport * from './server/helpers/snapshot.js';\nexport * from './server/helpers/bandwidth.js';\n\n// Setup\nexport * from './setup/browser.js';\nexport * from './setup/canvas.js';\nexport * from './setup/webgpu.js';\n// Safe to export now as gl is lazy loaded\nexport * from './setup/headless-webgl.js';\nexport * from './engine/mocks/webgpu.js';\nexport * from './setup/timing.js';\nexport * from './setup/node.js';\nexport * from './engine/mocks/webgl.js';\nexport * from './engine/mocks/audio.js';\nexport * from './engine/mocks/renderer.js';\nexport * from './engine/mocks/assets.js';\nexport * from './engine/mocks/buffers.js';\nexport * from './engine/mocks/lighting.js';\nexport * from './engine/mocks/particles.js';\nexport * from './engine/rendering.js';\nexport * from './setup/storage.js';\nexport * from './setup/audio.js';\nexport * from './engine/helpers/webgpu-rendering.js';\nexport * from './engine/helpers/webgl-rendering.js';\nexport * from './engine/helpers/webgl-playwright.js';\nexport * from './engine/helpers/pipeline-test-template.js';\nexport * from './engine/helpers/textures.js';\n\n// Client Mocks\nexport * from './client/mocks/input.js';\nexport * from './client/helpers/view.js';\nexport * from './client/helpers/hud.js';\nexport * from './client/mocks/network.js';\nexport * from './client/mocks/download.js';\nexport * from './client/mocks/state.js';\nexport * from './client/mocks/console.js';\nexport * from './client/helpers/prediction.js';\n\n// Visual Testing\nexport * from './visual/snapshots.js';\nexport * from './visual/animation-snapshots.js';\n\n// E2E\nexport * from './e2e/playwright.js';\nexport * from './e2e/network.js';\nexport * from './e2e/visual.js';\n\n// Export types\nexport type { BrowserSetupOptions } from './setup/browser.js';\nexport type { NodeSetupOptions } from './setup/node.js';\nexport type { MockRAF } from './setup/timing.js';\nexport type { StorageScenario } from './setup/storage.js';\nexport type { NetworkSimulator, NetworkCondition } from './e2e/network.js';\nexport type { VisualScenario, VisualDiff } from './e2e/visual.js';\nexport type { HeadlessWebGPUSetup, WebGPUContextState } from './setup/webgpu.js';\nexport type { HeadlessWebGLContext, HeadlessWebGLOptions } from './setup/headless-webgl.js';\nexport type { RenderTestSetup, ComputeTestSetup } from './engine/helpers/webgpu-rendering.js';\nexport type { WebGLRenderTestSetup } from './engine/helpers/webgl-rendering.js';\nexport type { WebGLPlaywrightSetup, WebGLPlaywrightOptions } from './engine/helpers/webgl-playwright.js';\nexport type { GeometryBuffers } from './engine/helpers/pipeline-test-template.js';\n\n// Shared Types\nexport type {\n BinaryWriterMock,\n BinaryStreamMock,\n MessageWriterMock,\n MessageReaderMock,\n PacketMock\n} from './shared/mocks.js';\nexport type { TraceMock, SurfaceMock } from './shared/collision.js';\nexport type { Transform } from './shared/math.js';\nexport type {\n CaptureOptions,\n ComparisonResult,\n ComparisonOptions,\n SnapshotTestOptions\n} from './visual/snapshots.js';\nexport type {\n AnimationSnapshotOptions,\n AnimationSnapshotResult\n} from './visual/animation-snapshots.js';\nexport type { MockCollisionEntityIndex } from './server/mocks/physics.js';\n","import { vi } from 'vitest';\nimport { LegacyMock, legacyFn } from '../vitest-compat.js';\n\n/**\n * Interface for the BinaryWriter mock.\n */\nexport interface BinaryWriterMock {\n writeByte: LegacyMock<[number], void>;\n writeShort: LegacyMock<[number], void>;\n writeLong: LegacyMock<[number], void>;\n writeString: LegacyMock<[string], void>;\n writeBytes: LegacyMock<[Uint8Array], void>;\n getBuffer: LegacyMock<[], Uint8Array>;\n reset: LegacyMock<[], void>;\n writeInt8: LegacyMock<[number], void>;\n writeUint8: LegacyMock<[number], void>;\n writeInt16: LegacyMock<[number], void>;\n writeUint16: LegacyMock<[number], void>;\n writeInt32: LegacyMock<[number], void>;\n writeUint32: LegacyMock<[number], void>;\n writeFloat: LegacyMock<[number], void>;\n getData: LegacyMock<[], Uint8Array>;\n writePos: LegacyMock<[any], void>;\n writeDir: LegacyMock<[any], void>;\n}\n\n/**\n * Creates a mock BinaryWriter for testing binary data writing.\n *\n * @returns A BinaryWriterMock object with all methods mocked using vi.fn().\n */\nexport const createBinaryWriterMock = (): BinaryWriterMock => ({\n writeByte: vi.fn(),\n writeShort: vi.fn(),\n writeLong: vi.fn(),\n writeString: vi.fn(),\n writeBytes: vi.fn(),\n getBuffer: legacyFn<[], Uint8Array>(() => new Uint8Array(0)),\n reset: vi.fn(),\n // Legacy methods (if any)\n writeInt8: vi.fn(),\n writeUint8: vi.fn(),\n writeInt16: vi.fn(),\n writeUint16: vi.fn(),\n writeInt32: vi.fn(),\n writeUint32: vi.fn(),\n writeFloat: vi.fn(),\n getData: legacyFn<[], Uint8Array>(() => new Uint8Array(0)),\n writePos: vi.fn(),\n writeDir: vi.fn(),\n});\n\nexport interface NetChanMock {\n qport: number;\n incomingSequence: number;\n outgoingSequence: number;\n incomingAcknowledged: number;\n incomingReliableAcknowledged: boolean;\n incomingReliableSequence: number;\n outgoingReliableSequence: number;\n reliableMessage: BinaryWriterMock;\n reliableLength: number;\n fragmentSendOffset: number;\n fragmentBuffer: any;\n fragmentLength: number;\n fragmentReceived: number;\n lastReceived: number;\n lastSent: number;\n remoteAddress: { type: string, port: number };\n setup: LegacyMock;\n reset: LegacyMock;\n transmit: LegacyMock;\n process: LegacyMock;\n canSendReliable: LegacyMock<[], boolean>;\n writeReliableByte: LegacyMock;\n writeReliableShort: LegacyMock;\n writeReliableLong: LegacyMock;\n writeReliableString: LegacyMock;\n getReliableData: LegacyMock<[], Uint8Array>;\n needsKeepalive: LegacyMock<[], boolean>;\n isTimedOut: LegacyMock<[], boolean>;\n}\n\n/**\n * Creates a mock NetChan (Network Channel) for testing network communication.\n * Includes mocks for sequencing, reliable messaging, and fragmentation.\n *\n * @returns A mocked NetChan object.\n */\nexport const createNetChanMock = (): NetChanMock => ({\n qport: 1234,\n\n // Sequencing\n incomingSequence: 0,\n outgoingSequence: 0,\n incomingAcknowledged: 0,\n\n // Reliable messaging\n incomingReliableAcknowledged: false,\n incomingReliableSequence: 0,\n outgoingReliableSequence: 0,\n reliableMessage: createBinaryWriterMock(),\n reliableLength: 0,\n\n // Fragmentation\n fragmentSendOffset: 0,\n fragmentBuffer: null,\n fragmentLength: 0,\n fragmentReceived: 0,\n\n // Timing\n lastReceived: 0,\n lastSent: 0,\n\n remoteAddress: { type: 'IP', port: 1234 },\n\n // Methods\n setup: vi.fn(),\n reset: vi.fn(),\n transmit: vi.fn(),\n process: vi.fn(),\n canSendReliable: vi.fn(() => true),\n writeReliableByte: vi.fn(),\n writeReliableShort: vi.fn(),\n writeReliableLong: vi.fn(),\n writeReliableString: vi.fn(),\n getReliableData: legacyFn<[], Uint8Array>(() => new Uint8Array(0)),\n needsKeepalive: vi.fn(() => false),\n isTimedOut: vi.fn(() => false),\n});\n\n/**\n * Interface for the BinaryStream mock.\n */\nexport interface BinaryStreamMock {\n getPosition: LegacyMock<[], number>;\n getReadPosition: LegacyMock<[], number>;\n getLength: LegacyMock<[], number>;\n getRemaining: LegacyMock<[], number>;\n seek: LegacyMock<[number], void>;\n setReadPosition: LegacyMock<[number], void>;\n hasMore: LegacyMock<[], boolean>;\n hasBytes: LegacyMock<[number], boolean>;\n\n readChar: LegacyMock<[], number>;\n readByte: LegacyMock<[], number>;\n readShort: LegacyMock<[], number>;\n readUShort: LegacyMock<[], number>;\n readLong: LegacyMock<[], number>;\n readULong: LegacyMock<[], number>;\n readFloat: LegacyMock<[], number>;\n\n readString: LegacyMock<[], string>;\n readStringLine: LegacyMock<[], string>;\n\n readCoord: LegacyMock<[], number>;\n readAngle: LegacyMock<[], number>;\n readAngle16: LegacyMock<[], number>;\n\n readData: LegacyMock<[number], Uint8Array>;\n\n readPos: LegacyMock<[], any>; // Use proper type if available, e.g., Vec3\n readDir: LegacyMock<[], any>;\n}\n\n/**\n * Creates a mock BinaryStream for testing binary data reading.\n *\n * @returns A BinaryStreamMock object with all methods mocked.\n */\nexport const createBinaryStreamMock = (): BinaryStreamMock => ({\n getPosition: vi.fn(() => 0),\n getReadPosition: vi.fn(() => 0),\n getLength: vi.fn(() => 0),\n getRemaining: vi.fn(() => 0),\n seek: vi.fn(),\n setReadPosition: vi.fn(),\n hasMore: vi.fn(() => true),\n hasBytes: vi.fn((amount: number) => true),\n\n readChar: vi.fn(() => 0),\n readByte: vi.fn(() => 0),\n readShort: vi.fn(() => 0),\n readUShort: vi.fn(() => 0),\n readLong: vi.fn(() => 0),\n readULong: vi.fn(() => 0),\n readFloat: vi.fn(() => 0),\n\n readString: vi.fn(() => ''),\n readStringLine: vi.fn(() => ''),\n\n readCoord: vi.fn(() => 0),\n readAngle: vi.fn(() => 0),\n readAngle16: vi.fn(() => 0),\n\n readData: legacyFn<[number], Uint8Array>((length: number) => new Uint8Array(length)),\n\n readPos: vi.fn(),\n readDir: vi.fn(),\n});\n\n/**\n * Interface for MessageWriter mock, extending BinaryWriterMock with additional message-specific methods.\n */\nexport interface MessageWriterMock extends BinaryWriterMock {\n writeInt: LegacyMock<[number], void>;\n writeVector: LegacyMock<[any], void>;\n}\n\n/**\n * Creates a mock MessageWriter, aliasing writeInt to writeInt32 and writeVector to writePos.\n *\n * @param overrides - Optional overrides for the mock.\n * @returns A MessageWriterMock object.\n */\nexport const createMessageWriterMock = (overrides?: Partial<MessageWriterMock>): MessageWriterMock => {\n const mock = createBinaryWriterMock();\n const writer: MessageWriterMock = {\n ...mock,\n writeInt: mock.writeInt32, // Alias writeInt to writeInt32\n writeVector: mock.writePos, // Alias writeVector to writePos\n ...overrides\n };\n return writer;\n};\n\n/**\n * Interface for MessageReader mock, extending BinaryStreamMock with additional message-specific methods.\n */\nexport interface MessageReaderMock extends BinaryStreamMock {\n readInt: LegacyMock<[], number>;\n readVector: LegacyMock<[], any>;\n}\n\n/**\n * Creates a mock MessageReader, aliasing readInt to readLong and readVector to readPos.\n *\n * @param data - Optional initial data for the reader.\n * @returns A MessageReaderMock object.\n */\nexport const createMessageReaderMock = (data?: Uint8Array): MessageReaderMock => {\n const mock = createBinaryStreamMock();\n const reader: MessageReaderMock = {\n ...mock,\n readInt: mock.readLong, // Alias readInt to readLong (int32)\n readVector: mock.readPos, // Alias readVector to readPos\n };\n return reader;\n};\n\n/**\n * Interface for a generic network packet mock.\n */\nexport interface PacketMock {\n type: 'connection' | 'data' | 'ack' | 'disconnect';\n sequence: number;\n ack: number;\n qport: number;\n data: Uint8Array;\n}\n\n/**\n * Creates a mock network packet.\n *\n * @param overrides - Optional overrides for packet properties.\n * @returns A PacketMock object.\n */\nexport const createPacketMock = (overrides?: Partial<PacketMock>): PacketMock => ({\n type: 'data',\n sequence: 0,\n ack: 0,\n qport: 0,\n data: new Uint8Array(0),\n ...overrides\n});\n","import { vi, type Mock } from 'vitest';\n\n/**\n * Polyfill for the legacy Vitest Mock type which took [Args] and Return as generic arguments.\n * usage: LegacyMock<[Arg1, Arg2], ReturnType>\n */\nexport type LegacyMock<Args extends any[] = any[], Return = any> = Mock<(...args: Args) => Return>;\n\n/**\n * Polyfill for vi.fn with legacy generic signature.\n * usage: legacyFn<[Arg1, Arg2], ReturnType>(impl)\n */\nexport function legacyFn<Args extends any[] = any[], Return = any>(\n implementation?: (...args: Args) => Return\n): LegacyMock<Args, Return> {\n return vi.fn(implementation) as unknown as LegacyMock<Args, Return>;\n}\n","import {\n computePlaneSignBits,\n type CollisionBrush,\n type CollisionModel,\n type CollisionPlane,\n type CollisionNode,\n type CollisionLeaf,\n CONTENTS_SOLID,\n type Vec3\n} from '@quake2ts/shared';\n\n/**\n * Creates a collision plane with the specified normal and distance.\n * Automatically calculates the plane type and signbits.\n *\n * @param normal - The normal vector of the plane.\n * @param dist - The distance from the origin.\n * @returns A CollisionPlane object.\n */\nexport function makePlane(normal: Vec3, dist: number): CollisionPlane {\n return {\n normal,\n dist,\n type: Math.abs(normal.x) === 1 ? 0 : Math.abs(normal.y) === 1 ? 1 : Math.abs(normal.z) === 1 ? 2 : 3,\n signbits: computePlaneSignBits(normal),\n };\n}\n\n/**\n * Creates a simple axis-aligned cubic brush for testing.\n *\n * @param size - The size of the cube (width, height, depth).\n * @param contents - The content flags for the brush (default: CONTENTS_SOLID).\n * @returns A CollisionBrush object.\n */\nexport function makeAxisBrush(size: number, contents = CONTENTS_SOLID): CollisionBrush {\n const half = size / 2;\n const planes = [\n makePlane({ x: 1, y: 0, z: 0 }, half),\n makePlane({ x: -1, y: 0, z: 0 }, half),\n makePlane({ x: 0, y: 1, z: 0 }, half),\n makePlane({ x: 0, y: -1, z: 0 }, half),\n makePlane({ x: 0, y: 0, z: 1 }, half),\n makePlane({ x: 0, y: 0, z: -1 }, half),\n ];\n\n return {\n contents,\n sides: planes.map((plane) => ({ plane, surfaceFlags: 0 })),\n };\n}\n\n/**\n * Creates a BSP node.\n *\n * @param plane - The splitting plane for this node.\n * @param children - Indices of the children (positive for nodes, negative for leaves).\n * @returns A CollisionNode object.\n */\nexport function makeNode(plane: CollisionPlane, children: [number, number]): CollisionNode {\n return { plane, children };\n}\n\n/**\n * Constructs a full CollisionModel from components.\n *\n * @param planes - Array of planes.\n * @param nodes - Array of nodes.\n * @param leaves - Array of leaves.\n * @param brushes - Array of brushes.\n * @param leafBrushes - Array of leaf brush indices.\n * @returns A CollisionModel object.\n */\nexport function makeBspModel(\n planes: CollisionPlane[],\n nodes: CollisionNode[],\n leaves: CollisionLeaf[],\n brushes: CollisionBrush[],\n leafBrushes: number[]\n): CollisionModel {\n return {\n planes,\n nodes,\n leaves,\n brushes,\n leafBrushes,\n bmodels: [],\n };\n}\n\n/**\n * Creates a BSP leaf.\n *\n * @param contents - The content flags for this leaf.\n * @param firstLeafBrush - Index into the leafBrushes array.\n * @param numLeafBrushes - Number of brushes in this leaf.\n * @returns A CollisionLeaf object.\n */\nexport function makeLeaf(contents: number, firstLeafBrush: number, numLeafBrushes: number): CollisionLeaf {\n return { contents, cluster: 0, area: 0, firstLeafBrush, numLeafBrushes };\n}\n\n/**\n * Creates a simplified CollisionModel consisting of a single leaf containing the provided brushes.\n * Useful for testing collision against a set of brushes without full BSP tree traversal.\n *\n * @param brushes - Array of CollisionBrushes to include.\n * @returns A CollisionModel object.\n */\nexport function makeLeafModel(brushes: CollisionBrush[]): CollisionModel {\n const planes = brushes.flatMap((brush) => brush.sides.map((side) => side.plane));\n\n return {\n planes,\n nodes: [],\n leaves: [makeLeaf(0, 0, brushes.length)],\n brushes,\n leafBrushes: brushes.map((_, i) => i),\n bmodels: [],\n };\n}\n\n/**\n * Creates a brush defined by min and max bounds.\n *\n * @param mins - Minimum coordinates (x, y, z).\n * @param maxs - Maximum coordinates (x, y, z).\n * @param contents - Content flags (default: CONTENTS_SOLID).\n * @returns A CollisionBrush object.\n */\nexport function makeBrushFromMinsMaxs(mins: Vec3, maxs: Vec3, contents = CONTENTS_SOLID): CollisionBrush {\n const planes = [\n makePlane({ x: 1, y: 0, z: 0 }, maxs.x),\n makePlane({ x: -1, y: 0, z: 0 }, -mins.x),\n makePlane({ x: 0, y: 1, z: 0 }, maxs.y),\n makePlane({ x: 0, y: -1, z: 0 }, -mins.y),\n makePlane({ x: 0, y: 0, z: 1 }, maxs.z),\n makePlane({ x: 0, y: 0, z: -1 }, -mins.z),\n ];\n\n return {\n contents,\n sides: planes.map((plane) => ({ plane, surfaceFlags: 0 })),\n };\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { PakArchive } from '@quake2ts/engine';\n\nexport function findPakFile(): string | null {\n const possiblePaths = [\n path.resolve(process.cwd(), 'pak.pak'),\n path.resolve(process.cwd(), '../pak.pak'),\n path.resolve(process.cwd(), '../../pak.pak'),\n path.resolve(process.cwd(), '../../../pak.pak'),\n path.resolve(process.cwd(), 'baseq2/pak.pak'),\n path.resolve('/app/quake2ts/pak.pak'), // Common docker/env path\n // Fallback for when running deeply nested tests\n path.resolve(process.cwd(), 'quake2ts/pak.pak'),\n ];\n\n return possiblePaths.find(p => fs.existsSync(p)) || null;\n}\n\nexport function loadMapFromPak(mapName: string): ArrayBuffer | null {\n const pakPath = findPakFile();\n if (!pakPath) {\n console.warn('pak.pak not found');\n return null;\n }\n\n try {\n const pakBuffer = fs.readFileSync(pakPath);\n // Cast to ArrayBuffer because node Buffer is compatible but types might mismatch\n const arrayBuffer = pakBuffer.buffer.slice(pakBuffer.byteOffset, pakBuffer.byteOffset + pakBuffer.byteLength) as ArrayBuffer;\n\n const pak = PakArchive.fromArrayBuffer('pak.pak', arrayBuffer);\n const entry = pak.getEntry(mapName);\n\n if (entry) {\n // PakArchive.readFile returns Uint8Array, we might want ArrayBuffer\n const data = pak.readFile(mapName);\n return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer;\n }\n return null;\n } catch (e) {\n console.error(`Failed to load map ${mapName} from pak:`, e);\n return null;\n }\n}\n","import type { Vec3, Bounds3 } from '@quake2ts/shared/math/vec3';\n\n/**\n * Creates a Vector3 object.\n *\n * @param x - The X coordinate (default: 0).\n * @param y - The Y coordinate (default: 0).\n * @param z - The Z coordinate (default: 0).\n * @returns A Vec3 object.\n */\nexport const createVector3 = (x: number = 0, y: number = 0, z: number = 0): Vec3 => ({\n x,\n y,\n z,\n});\n\n/**\n * Creates a bounds object (min/max vectors).\n *\n * @param mins - The minimum bounds vector (default: 0,0,0).\n * @param maxs - The maximum bounds vector (default: 1,1,1).\n * @returns A Bounds3 object.\n */\nexport const createBounds = (\n mins: Vec3 = createVector3(0, 0, 0),\n maxs: Vec3 = createVector3(1, 1, 1)\n): Bounds3 => ({\n mins,\n maxs,\n});\n\n/**\n * Interface representing a transformation (position, rotation, scale).\n */\nexport interface Transform {\n position: Vec3;\n rotation: Vec3; // Euler angles\n scale: Vec3;\n}\n\n/**\n * Creates a Transform object.\n *\n * @param overrides - Optional overrides for transform properties.\n * @returns A Transform object.\n */\nexport const createTransform = (overrides?: Partial<Transform>): Transform => ({\n position: createVector3(),\n rotation: createVector3(),\n scale: createVector3(1, 1, 1),\n ...overrides\n});\n\n/**\n * Generates a random Vector3 within the specified range.\n *\n * @param min - Minimum value for each component (default: -100).\n * @param max - Maximum value for each component (default: 100).\n * @returns A random Vec3 object.\n */\nexport const randomVector3 = (min: number = -100, max: number = 100): Vec3 => ({\n x: Math.random() * (max - min) + min,\n y: Math.random() * (max - min) + min,\n z: Math.random() * (max - min) + min,\n});\n\nexport { ZERO_VEC3 } from '@quake2ts/shared';\n","import type { Vec3 } from '@quake2ts/shared/math/vec3';\nimport type { TraceResult, CollisionPlane } from '@quake2ts/shared/bsp/collision';\n\n// Re-export trace helpers from shared if they exist there now, or redefine them here if needed\n// The plan says \"Move trace helpers from game/helpers.ts to shared/collision.ts\"\n// But currently `game/helpers.ts` re-exports them from `@quake2ts/shared`.\n// `intersects`, `stairTrace`, `ladderTrace` are in `packages/shared/src/testing.ts`.\n// I will re-export them here for test-utils consumers.\n\nexport { intersects, stairTrace, ladderTrace } from '@quake2ts/shared';\n\n/**\n * Interface for a TraceResult mock, including all standard properties.\n */\nexport interface TraceMock extends Partial<TraceResult> {\n fraction: number;\n endpos: Vec3;\n plane: CollisionPlane;\n surface: { flags: number, name?: string, value?: number };\n contents: number;\n ent: any; // Using any to avoid circular dependency with Entity\n allsolid: boolean;\n startsolid: boolean;\n}\n\n/**\n * Creates a mock TraceResult.\n *\n * @param overrides - Optional overrides for trace properties.\n * @returns A TraceMock object.\n */\nexport const createTraceMock = (overrides?: Partial<TraceMock>): TraceMock => ({\n fraction: 1.0,\n endpos: { x: 0, y: 0, z: 0 },\n plane: { normal: { x: 0, y: 0, z: 0 }, dist: 0, type: 0, signbits: 0 },\n surface: { flags: 0 },\n contents: 0,\n ent: null,\n allsolid: false,\n startsolid: false,\n ...overrides\n});\n\n/**\n * Interface for a Surface mock.\n */\nexport interface SurfaceMock {\n flags: number;\n name: string;\n value: number;\n}\n\n/**\n * Creates a mock Surface.\n *\n * @param overrides - Optional overrides for surface properties.\n * @returns A SurfaceMock object.\n */\nexport const createSurfaceMock = (overrides?: Partial<SurfaceMock>): SurfaceMock => ({\n flags: 0,\n name: 'default',\n value: 0,\n ...overrides\n});\n","import { Cvar, type ConfigStringEntry } from '@quake2ts/engine';\nimport { CvarFlags, PlayerState } from '@quake2ts/shared';\n\n// Re-export Cvar for convenience if needed, but the factory returns Cvar instance\nexport { Cvar } from '@quake2ts/engine';\nexport type { ConfigStringEntry } from '@quake2ts/engine';\n\n/**\n * Creates a mock ConfigStringEntry.\n *\n * @param index - The config string index.\n * @param value - The config string value.\n * @returns A ConfigStringEntry object.\n */\nexport function createConfigStringMock(index: number, value: string): ConfigStringEntry {\n return { index, value };\n}\n\n/**\n * Creates an array of ConfigStringEntry objects from a record.\n *\n * @param entries - A record of index-value pairs (optional).\n * @returns An array of ConfigStringEntry objects.\n */\nexport function createConfigStringArrayMock(entries?: Record<number, string>): ConfigStringEntry[] {\n const result: ConfigStringEntry[] = [];\n if (entries) {\n for (const [key, value] of Object.entries(entries)) {\n result.push({ index: Number(key), value });\n }\n }\n return result;\n}\n\n/**\n * Creates a mock Cvar.\n *\n * @param name - The name of the cvar.\n * @param value - The initial value of the cvar.\n * @param flags - Cvar flags (default: CvarFlags.None).\n * @returns A Cvar instance.\n */\nexport function createCvarMock(name: string, value: string, flags: number = CvarFlags.None): Cvar {\n // We instantiate a real Cvar because it encapsulates logic (latched, default value, etc.)\n // effectively acting as its own mock/implementation for testing purposes.\n return new Cvar({\n name,\n defaultValue: value,\n flags,\n });\n}\n\n/**\n * Creates a mock PlayerState with sensible defaults.\n * Corresponds to player_state_t in q_shared.h.\n *\n * @param overrides - Partial PlayerState to override defaults.\n * @returns A complete PlayerState object.\n */\nexport function createMockPlayerState(overrides?: Partial<PlayerState>): PlayerState {\n return {\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n viewAngles: { x: 0, y: 0, z: 0 },\n onGround: false,\n waterLevel: 0,\n watertype: 0,\n mins: { x: -16, y: -16, z: -24 },\n maxs: { x: 16, y: 16, z: 32 },\n damageAlpha: 0,\n damageIndicators: [],\n blend: [0, 0, 0, 0],\n stats: new Array(32).fill(0),\n kick_angles: { x: 0, y: 0, z: 0 },\n kick_origin: { x: 0, y: 0, z: 0 },\n gunoffset: { x: 0, y: 0, z: 0 },\n gunangles: { x: 0, y: 0, z: 0 },\n gunindex: 0,\n pm_type: 0,\n pm_time: 0,\n pm_flags: 0,\n gun_frame: 0,\n rdflags: 0,\n fov: 90,\n renderfx: 0,\n ...overrides\n };\n}\n","import {\n Entity,\n MoveType,\n Solid,\n ServerFlags,\n DeadFlag,\n EntityFlags\n} from '@quake2ts/game';\nimport type { PlayerState, EntityState } from '@quake2ts/shared';\nimport type { GameStateSnapshot } from '@quake2ts/game';\n\n// -- Shared / Game State Factories --\n\nexport const createPlayerStateFactory = (overrides?: Partial<PlayerState>): PlayerState => ({\n pm_type: 0,\n pm_time: 0,\n pm_flags: 0,\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n viewAngles: { x: 0, y: 0, z: 0 },\n onGround: false,\n waterLevel: 0,\n watertype: 0,\n mins: { x: 0, y: 0, z: 0 },\n maxs: { x: 0, y: 0, z: 0 },\n damageAlpha: 0,\n damageIndicators: [],\n blend: [0, 0, 0, 0],\n stats: [],\n kick_angles: { x: 0, y: 0, z: 0 },\n kick_origin: { x: 0, y: 0, z: 0 },\n gunoffset: { x: 0, y: 0, z: 0 },\n gunangles: { x: 0, y: 0, z: 0 },\n gunindex: 0,\n gun_frame: 0,\n rdflags: 0,\n fov: 90,\n renderfx: 0,\n ...overrides,\n});\n\nexport const createEntityStateFactory = (overrides?: Partial<EntityState>): EntityState => ({\n number: 0,\n origin: { x: 0, y: 0, z: 0 },\n angles: { x: 0, y: 0, z: 0 },\n oldOrigin: { x: 0, y: 0, z: 0 },\n modelIndex: 0,\n modelIndex2: 0,\n modelIndex3: 0,\n modelIndex4: 0,\n frame: 0,\n skinNum: 0,\n effects: 0,\n renderfx: 0,\n solid: 0,\n sound: 0,\n event: 0,\n ...overrides,\n});\n\nexport const createGameStateSnapshotFactory = (overrides?: Partial<GameStateSnapshot>): GameStateSnapshot => ({\n gravity: { x: 0, y: 0, z: -800 },\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n viewangles: { x: 0, y: 0, z: 0 },\n level: { timeSeconds: 0, frameNumber: 0, previousTimeSeconds: 0, deltaSeconds: 0.1 },\n entities: {\n activeCount: 0,\n worldClassname: 'worldspawn',\n },\n packetEntities: [],\n pmFlags: 0,\n pmType: 0,\n waterlevel: 0,\n watertype: 0,\n deltaAngles: { x: 0, y: 0, z: 0 },\n health: 100,\n armor: 0,\n ammo: 0,\n blend: [0, 0, 0, 0],\n damageAlpha: 0,\n damageIndicators: [],\n stats: [],\n kick_angles: { x: 0, y: 0, z: 0 },\n kick_origin: { x: 0, y: 0, z: 0 },\n gunoffset: { x: 0, y: 0, z: 0 },\n gunangles: { x: 0, y: 0, z: 0 },\n gunindex: 0,\n pm_time: 0,\n gun_frame: 0,\n rdflags: 0,\n fov: 90,\n renderfx: 0,\n pm_flags: 0,\n pm_type: 0,\n ...overrides,\n});\n\n// -- Entity Factories --\n\n// Helper to remove internal fields that shouldn't be copied via Object.assign,\n// but PRESERVE the Entity prototype so getters/setters/methods work.\nfunction sanitizeEntity(ent: Entity): Partial<Entity> {\n // We modify the instance in place (it's a factory-created one, so safe to mutate).\n // We want to delete properties that would conflict with EntitySystem internals\n // if this object is merged into another Entity via Object.assign.\n\n // Actually, Object.assign(target, source) only copies enumerable own properties.\n // If we delete them from 'ent', they won't be copied.\n // BUT 'ent' must still be a valid Entity for tests that use the factory result directly.\n\n // The issue in `dm-spawn.test.ts` was:\n // Object.assign(player, createPlayerEntityFactory(...))\n // 'player' is a REAL entity from the system.\n // 'createPlayerEntityFactory' returns an Entity.\n // 'Entity' class defines 'linkNext = null' etc as instance properties.\n // So Object.assign copies 'linkNext: null'.\n\n // We need to remove these properties from the returned object so Object.assign doesn't copy them.\n // But we want to keep the prototype.\n\n const safe = ent as any;\n delete safe.index;\n delete safe.inUse;\n delete safe.freePending;\n delete safe.linkPrevious;\n delete safe.linkNext;\n delete safe.linkcount;\n\n return ent;\n}\n\nexport function createEntityFactory(overrides: Partial<Entity> = {}): Partial<Entity> {\n const ent = new Entity(1);\n Object.assign(ent, {\n classname: 'info_null',\n health: 0,\n max_health: 0,\n takedamage: false,\n deadflag: DeadFlag.Alive,\n solid: Solid.Not,\n movetype: MoveType.None,\n flags: 0,\n svflags: 0,\n ...overrides\n });\n return sanitizeEntity(ent);\n}\n\nexport function createPlayerEntityFactory(overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname: 'player',\n health: 100,\n max_health: 100,\n takedamage: true,\n solid: Solid.BoundingBox,\n movetype: MoveType.Walk,\n svflags: ServerFlags.Player,\n viewheight: 22,\n client: {\n inventory: {\n ammo: { counts: [], caps: [] },\n ownedWeapons: new Set(),\n powerups: new Map(),\n keys: new Set(),\n items: new Set()\n },\n weaponStates: {\n currentWeapon: null,\n lastFireTime: 0,\n weaponFrame: 0,\n weaponIdleTime: 0,\n states: new Map(), // Initialize states map correctly\n activeWeaponId: null\n },\n gun_frame: 0 // Initialize gun_frame\n } as any,\n ...overrides\n });\n}\n\nexport function createMonsterEntityFactory(classname: string, overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname,\n health: 100,\n max_health: 100,\n takedamage: true,\n solid: Solid.BoundingBox,\n movetype: MoveType.Step,\n svflags: ServerFlags.Monster,\n deadflag: DeadFlag.Alive,\n ...overrides\n });\n}\n\nexport function createItemEntityFactory(classname: string, overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname,\n solid: Solid.Trigger,\n movetype: MoveType.Toss,\n ...overrides\n });\n}\n\nexport function createProjectileEntityFactory(classname: string, overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname,\n solid: Solid.Bsp,\n movetype: MoveType.FlyMissile,\n svflags: ServerFlags.Projectile,\n ...overrides\n });\n}\n\nexport function createTriggerEntityFactory(classname: string, overrides: Partial<Entity> = {}): Partial<Entity> {\n return createEntityFactory({\n classname,\n solid: Solid.Trigger,\n movetype: MoveType.None,\n ...overrides\n });\n}\n","import { vi, type Mock } from 'vitest';\nimport { Entity, SpawnRegistry, ScriptHookRegistry, type SpawnContext, type EntitySystem } from '@quake2ts/game';\nimport { createRandomGenerator, type Vec3 } from '@quake2ts/shared';\nimport { type BspModel } from '@quake2ts/engine';\nimport { createTraceMock } from '../shared/collision.js';\nimport { LegacyMock } from '../vitest-compat.js';\n\n// Re-export collision helpers from shared collision utility\nexport { intersects, stairTrace, ladderTrace, createTraceMock, createSurfaceMock } from '../shared/collision.js';\n\n// -- Types --\n\nexport interface MockEngine {\n sound: LegacyMock<[Entity, number, string, number, number, number], void>;\n soundIndex: LegacyMock<[string], number>;\n modelIndex: LegacyMock<[string], number>;\n centerprintf: LegacyMock<[Entity, string], void>;\n}\n\nexport interface MockGame {\n random: ReturnType<typeof createRandomGenerator>;\n registerEntitySpawn: LegacyMock<[string, (entity: Entity) => void], void>;\n unregisterEntitySpawn: LegacyMock<[string], void>;\n getCustomEntities: LegacyMock<[], string[]>;\n hooks: ScriptHookRegistry;\n registerHooks: LegacyMock<[any], any>;\n spawnWorld: LegacyMock<[], void>;\n clientBegin: LegacyMock<[any], void>;\n damage: LegacyMock<[number], void>;\n}\n\nexport interface TestContext extends SpawnContext {\n entities: EntitySystem;\n game: MockGame;\n engine: MockEngine;\n}\n\n// -- Factories --\n\nexport const createMockEngine = (): MockEngine => ({\n sound: vi.fn(),\n soundIndex: vi.fn((sound: string) => 0),\n modelIndex: vi.fn((model: string) => 0),\n centerprintf: vi.fn(),\n});\n\nexport const createMockGame = (seed: number = 12345): { game: MockGame, spawnRegistry: SpawnRegistry } => {\n const spawnRegistry = new SpawnRegistry();\n const hooks = new ScriptHookRegistry();\n\n const game: MockGame = {\n random: createRandomGenerator({ seed }),\n registerEntitySpawn: vi.fn((classname: string, spawnFunc: (entity: Entity) => void) => {\n spawnRegistry.register(classname, (entity) => spawnFunc(entity));\n }),\n unregisterEntitySpawn: vi.fn((classname: string) => {\n spawnRegistry.unregister(classname);\n }),\n getCustomEntities: vi.fn(() => Array.from(spawnRegistry.keys())),\n hooks,\n registerHooks: vi.fn((newHooks) => hooks.register(newHooks)),\n spawnWorld: vi.fn(() => {\n hooks.onMapLoad('q2dm1');\n }),\n clientBegin: vi.fn((client) => {\n hooks.onPlayerSpawn({} as any);\n }),\n damage: vi.fn((amount: number) => {\n hooks.onDamage({} as any, null, null, amount, 0, 0);\n })\n };\n\n return { game, spawnRegistry };\n};\n\nexport function createTestContext(options?: { seed?: number, initialEntities?: Entity[] }): TestContext {\n const engine = createMockEngine();\n const seed = options?.seed ?? 12345;\n const { game, spawnRegistry } = createMockGame(seed);\n\n const traceFn = vi.fn((start: Vec3, end: Vec3, mins?: Vec3, maxs?: Vec3) =>\n createTraceMock({\n endpos: end,\n plane: { normal: { x: 0, y: 0, z: 1 }, dist: 0, type: 0, signbits: 0 }\n })\n );\n\n const entityList: Entity[] = options?.initialEntities ? [...options.initialEntities] : [];\n\n // Create hooks helper that interacts with the entity list\n const hooks = game.hooks;\n\n // We need to store the registry reference to implement registerEntityClass/getSpawnFunction\n let currentSpawnRegistry: SpawnRegistry | undefined;\n\n const entities = {\n spawn: vi.fn(() => {\n const ent = new Entity(entityList.length + 1);\n ent.inUse = true;\n entityList.push(ent);\n hooks.onEntitySpawn(ent);\n return ent;\n }),\n free: vi.fn((ent: Entity) => {\n const idx = entityList.indexOf(ent);\n if (idx !== -1) {\n entityList.splice(idx, 1);\n }\n ent.inUse = false;\n hooks.onEntityRemove(ent);\n }),\n finalizeSpawn: vi.fn(),\n freeImmediate: vi.fn((ent: Entity) => {\n const idx = entityList.indexOf(ent);\n if (idx !== -1) {\n entityList.splice(idx, 1);\n }\n ent.inUse = false;\n }),\n setSpawnRegistry: vi.fn((registry: SpawnRegistry) => {\n currentSpawnRegistry = registry;\n }),\n registerEntityClass: vi.fn((classname: string, factory: any) => {\n if (currentSpawnRegistry) {\n currentSpawnRegistry.register(classname, factory);\n }\n }),\n getSpawnFunction: vi.fn((classname: string) => {\n return currentSpawnRegistry?.get(classname);\n }),\n timeSeconds: 10,\n deltaSeconds: 0.1,\n modelIndex: vi.fn(() => 0),\n scheduleThink: vi.fn((entity: Entity, time: number) => {\n entity.nextthink = time;\n }),\n linkentity: vi.fn(),\n trace: traceFn,\n pointcontents: vi.fn(() => 0),\n multicast: vi.fn(),\n unicast: vi.fn(),\n engine,\n scriptHooks: hooks,\n game,\n sound: vi.fn((ent: Entity, chan: number, sound: string, vol: number, attn: number, timeofs: number) => {\n engine.sound(ent, chan, sound, vol, attn, timeofs);\n }),\n soundIndex: vi.fn((sound: string) => engine.soundIndex(sound)),\n useTargets: vi.fn((entity: Entity, activator: Entity | null) => {\n }),\n findByTargetName: vi.fn(() => []),\n pickTarget: vi.fn(() => null),\n killBox: vi.fn(),\n rng: createRandomGenerator({ seed }),\n imports: {\n configstring: vi.fn(),\n trace: traceFn,\n pointcontents: vi.fn(() => 0),\n },\n level: {\n intermission_angle: { x: 0, y: 0, z: 0 },\n intermission_origin: { x: 0, y: 0, z: 0 },\n next_auto_save: 0,\n health_bar_entities: null\n },\n targetNameIndex: new Map(),\n forEachEntity: vi.fn((callback: (ent: Entity) => void) => {\n entityList.forEach(callback);\n }),\n find: vi.fn((predicate: (ent: Entity) => boolean) => {\n return entityList.find(predicate);\n }),\n findByClassname: vi.fn((classname: string) => {\n return entityList.find(e => e.classname === classname);\n }),\n beginFrame: vi.fn((timeSeconds: number) => {\n (entities as any).timeSeconds = timeSeconds;\n }),\n targetAwareness: {\n timeSeconds: 10,\n frameNumber: 1,\n sightEntity: null,\n soundEntity: null,\n activePlayers: [],\n monsterAlertedByPlayers: vi.fn().mockReturnValue(null),\n soundClient: vi.fn().mockReturnValue(null),\n },\n warn: vi.fn(),\n skill: 1,\n deathmatch: false,\n coop: false,\n activeCount: entityList.length,\n world: entityList.find(e => e.classname === 'worldspawn') || new Entity(0),\n } as unknown as EntitySystem;\n\n return {\n keyValues: {},\n entities,\n game,\n engine,\n health_multiplier: 1,\n warn: vi.fn(),\n free: vi.fn(),\n precacheModel: vi.fn(),\n precacheSound: vi.fn(),\n precacheImage: vi.fn(),\n } as unknown as TestContext;\n}\n\nexport function createSpawnTestContext(mapName?: string): TestContext {\n const ctx = createTestContext();\n if (mapName) {\n ctx.game.spawnWorld();\n }\n return ctx;\n}\n\nexport function createCombatTestContext(): TestContext {\n return createTestContext();\n}\n\nexport function createPhysicsTestContext(bspModel?: BspModel): TestContext {\n const context = createTestContext();\n if (bspModel) {\n // If a BSP model is provided, we can set up the trace mock to be more realistic.\n // For now, we'll just store the model on the context if we extended TestContext,\n // but the task specifically asks to \"Include collision world, traces\".\n\n // In a real scenario, we might want to hook up a real BSP physics engine mock here\n // or a mock that uses the BSP data.\n }\n return context;\n}\n\nexport function createEntity(): Entity {\n return new Entity(1);\n}\n\n/**\n * Spawns an entity into the system and applies the properties from the provided data object.\n * This is useful for testing when you want to spawn an entity with specific properties\n * generated by a factory.\n *\n * @param system - The EntitySystem to spawn into.\n * @param data - The partial entity data to apply (e.g. from createPlayerEntityFactory).\n * @returns The spawned and populated Entity.\n */\nexport function spawnEntity(system: EntitySystem, data: Partial<Entity>): Entity {\n const ent = system.spawn();\n Object.assign(ent, data);\n return ent;\n}\n\nexport interface MockImportsAndEngine {\n imports: {\n trace: Mock;\n pointcontents: Mock;\n linkentity: Mock;\n multicast: Mock;\n unicast: Mock;\n };\n engine: {\n trace: Mock;\n sound: Mock;\n centerprintf: Mock;\n modelIndex: Mock;\n soundIndex: Mock;\n };\n}\n\n/**\n * Creates mock imports and engine for use with createGame() from @quake2ts/game.\n * This is a convenience helper that provides all the commonly mocked functions\n * needed to instantiate a real Game instance in tests.\n *\n * @param overrides Optional overrides for specific mock functions\n * @returns An object containing both imports and engine mocks\n *\n * @example\n * ```typescript\n * import { createGame } from '@quake2ts/game';\n * import { createGameImportsAndEngine } from '@quake2ts/test-utils';\n *\n * const { imports, engine } = createGameImportsAndEngine();\n * const game = createGame(imports, engine, { gravity: { x: 0, y: 0, z: -800 } });\n * ```\n */\nexport function createGameImportsAndEngine(overrides?: {\n imports?: Partial<{\n trace: Mock;\n pointcontents: Mock;\n linkentity: Mock;\n multicast: Mock;\n unicast: Mock;\n }>;\n engine?: Partial<{\n trace: Mock;\n sound: Mock;\n centerprintf: Mock;\n modelIndex: Mock;\n soundIndex: Mock;\n }>;\n}): MockImportsAndEngine {\n const defaultTraceResult = {\n fraction: 1.0,\n endpos: { x: 0, y: 0, z: 0 },\n allsolid: false,\n startsolid: false,\n plane: { normal: { x: 0, y: 0, z: 1 }, dist: 0, type: 0, signbits: 0 },\n ent: null,\n };\n\n const defaultTrace = vi.fn().mockReturnValue(defaultTraceResult);\n\n const imports = {\n trace: defaultTrace,\n pointcontents: vi.fn().mockReturnValue(0),\n linkentity: vi.fn(),\n multicast: vi.fn(),\n unicast: vi.fn(),\n ...overrides?.imports,\n };\n\n const engine = {\n trace: vi.fn().mockReturnValue(defaultTraceResult),\n sound: vi.fn(),\n centerprintf: vi.fn(),\n modelIndex: vi.fn().mockReturnValue(1),\n soundIndex: vi.fn().mockReturnValue(1),\n ...overrides?.engine,\n };\n\n return { imports, engine };\n}\n\n/**\n * Creates a mock GameExports object with mocked properties.\n * This is useful for testing game logic that consumes the game object.\n *\n * @param overrides Optional overrides for the game object properties\n */\nexport function createMockGameExports(overrides: Partial<any> = {}): any {\n return {\n init: vi.fn(),\n shutdown: vi.fn(),\n frame: vi.fn().mockReturnValue({ state: {} }),\n clientThink: vi.fn(),\n time: 0,\n spawnWorld: vi.fn(),\n deathmatch: false,\n coop: false,\n skill: 1,\n gameImports: {},\n gameEngine: {},\n entities: {\n spawn: vi.fn(),\n free: vi.fn(),\n find: vi.fn(),\n findByClassname: vi.fn(),\n findByRadius: vi.fn(() => []),\n forEachEntity: vi.fn(),\n timeSeconds: 0,\n ...overrides.entities,\n },\n multicast: vi.fn(),\n unicast: vi.fn(),\n trace: vi.fn().mockReturnValue(createTraceMock()),\n pointcontents: vi.fn().mockReturnValue(0),\n sound: vi.fn(),\n centerprintf: vi.fn(),\n random: createRandomGenerator({ seed: 12345 }),\n ...overrides\n };\n}\n","import { Entity, MoveType, Solid, EntitySystem } from '@quake2ts/game';\nimport { Vec3, copyVec3, TraceResult, addVec3, subtractVec3, scaleVec3, lengthVec3, normalizeVec3, dotVec3 } from '@quake2ts/shared';\nimport { TestContext } from '../helpers.js';\nimport { intersects, createTraceMock } from '../../shared/collision.js';\n\n/**\n * Creates a physics test scenario with pre-configured geometry.\n * NOTE: Since real BSP loading is complex, this often uses block entities\n * or mocked trace functions unless a real BSP is loaded in the context.\n */\nexport interface PhysicsScenario {\n ground: Entity;\n walls: Entity[];\n setup: (context: TestContext) => void;\n}\n\nexport function createPhysicsTestScenario(\n scenarioType: 'stairs' | 'ladder' | 'platform' | 'slope' | 'room',\n context: TestContext\n): PhysicsScenario {\n const walls: Entity[] = [];\n const ground = context.entities.spawn();\n ground.classname = 'func_wall';\n ground.solid = Solid.Bsp;\n ground.movetype = MoveType.Push;\n ground.origin = { x: 0, y: 0, z: -10 };\n ground.mins = { x: -1000, y: -1000, z: -10 };\n ground.maxs = { x: 1000, y: 1000, z: 0 };\n context.entities.linkentity(ground);\n\n const setupStairs = () => {\n // Create steps\n for (let i = 0; i < 5; i++) {\n const step = context.entities.spawn();\n step.classname = 'func_wall';\n step.solid = Solid.Bsp;\n step.origin = { x: 100 + i * 32, y: 0, z: i * 16 };\n step.mins = { x: 0, y: -64, z: 0 };\n step.maxs = { x: 32, y: 64, z: 16 };\n context.entities.linkentity(step);\n walls.push(step);\n }\n };\n\n const setupLadder = () => {\n const ladder = context.entities.spawn();\n ladder.classname = 'func_wall'; // Or func_ladder if available\n ladder.solid = Solid.Bsp;\n ladder.origin = { x: 100, y: 0, z: 0 };\n ladder.mins = { x: 0, y: -32, z: 0 };\n ladder.maxs = { x: 10, y: 32, z: 200 };\n // surfaceFlags is a numeric property if we cast to any or define it, usually on entity state/brush\n // But Entity class might not expose it directly unless it has collision fields\n // Assuming Entity has it or we just ignore for mock tests\n (ladder as any).surfaceFlags = 1; // SURF_LADDER\n context.entities.linkentity(ladder);\n walls.push(ladder);\n };\n\n const setupPlatform = () => {\n const plat = context.entities.spawn();\n plat.classname = 'func_plat';\n plat.solid = Solid.Bsp;\n plat.movetype = MoveType.Push;\n plat.origin = { x: 0, y: 0, z: 0 }; // Starts low\n plat.mins = { x: -64, y: -64, z: 0 };\n plat.maxs = { x: 64, y: 64, z: 10 };\n // Platform logic handles movement, but for physics collision it's just a solid box moving\n context.entities.linkentity(plat);\n walls.push(plat);\n };\n\n if (scenarioType === 'stairs') setupStairs();\n else if (scenarioType === 'ladder') setupLadder();\n else if (scenarioType === 'platform') setupPlatform();\n\n return {\n ground,\n walls,\n setup: (ctx) => {\n // Additional setup if needed\n }\n };\n}\n\n\n/**\n * Simulates a single physics step for an entity.\n * Uses the game's runPmove logic or manually invokes similar steps.\n * This is useful for testing specific movement mechanics in isolation.\n */\nexport function simulateMovement(entity: Entity, destination: Vec3, context: TestContext): TraceResult {\n // Calculate velocity needed to reach destination in one frame (assuming 0.1s tick)\n const dt = 0.1;\n const delta = subtractVec3(destination, entity.origin);\n const dist = lengthVec3(delta);\n\n if (dist < 0.001) {\n return createTraceMock({ fraction: 1.0, endpos: destination }) as unknown as TraceResult;\n }\n\n const dir = normalizeVec3(delta);\n entity.velocity = scaleVec3(dir, dist / dt);\n\n // Perform trace to check if movement is possible\n const start = { ...entity.origin };\n const end = destination;\n\n // Check if context.entities.trace is a mocked function we can control or real one\n // We assume the interface matches\n const tr = context.entities.trace(start, entity.mins, entity.maxs, end, entity, (entity as any).clipmask || 0);\n\n // Update origin if not stuck\n if (!tr.startsolid && !tr.allsolid) {\n // Trace result returns endpos which is where we stopped\n if (tr.endpos) {\n entity.origin = { ...tr.endpos };\n } else {\n // Fallback if trace result is simple\n // In real engine trace always has endpos\n entity.origin = { ...end }; // Should be tr.endpos really\n }\n context.entities.linkentity(entity);\n }\n\n // Return TraceResult, cast if needed as we don't import CollisionTraceResult specifically\n return tr as unknown as TraceResult;\n}\n\n/**\n * Simulates gravity application on an entity.\n */\nexport function simulateGravity(entity: Entity, deltaTime: number, context: TestContext): void {\n const gravity = (context.game as any).cvars?.gravity?.value ?? 800; // MockGame might not have cvars yet\n if (entity.groundentity || !entity.movetype) return;\n\n // Simple Euler integration for gravity\n entity.velocity = {\n x: entity.velocity.x,\n y: entity.velocity.y,\n z: entity.velocity.z - gravity * deltaTime\n };\n\n // Check ground after applying gravity velocity\n // Simple check: trace down\n const start = { ...entity.origin };\n const end = { x: start.x, y: start.y, z: start.z - 0.25 };\n\n const tr = context.entities.trace(start, entity.mins, entity.maxs, end, entity, (entity as any).clipmask || 0);\n\n if (tr.fraction < 1.0) {\n entity.groundentity = tr.ent || context.entities.world;\n entity.velocity = { ...entity.velocity, z: 0 };\n // Snap to ground\n if (tr.endpos) {\n entity.origin = { ...entity.origin, z: tr.endpos.z };\n }\n } else {\n entity.groundentity = null; // Assigning null instead of undefined\n }\n}\n\n/**\n * Simulates a jump action.\n */\nexport function simulateJump(entity: Entity, context: TestContext): void {\n if (!entity.groundentity) return;\n\n entity.groundentity = null;\n entity.velocity = { ...entity.velocity, z: 270 }; // Standard jump velocity\n}\n","import { Entity, LevelState } from '@quake2ts/game';\nimport type { GameSaveFile } from '@quake2ts/game';\nimport { TestContext } from '../helpers.js';\nimport { Vec3 } from '@quake2ts/shared';\n\n// If LevelFrameState is not exported from @quake2ts/game, we define a compatible interface here\nexport interface LevelFrameState {\n readonly frameNumber: number;\n readonly timeSeconds: number;\n readonly previousTimeSeconds: number;\n readonly deltaSeconds: number;\n}\n\n/**\n * Interface for a mock save game object.\n */\nexport interface MockSaveGame {\n game: GameSaveFile;\n entities: any[]; // Serialized entities\n client: any; // Serialized client\n level: LevelState;\n timestamp: number;\n}\n\n/**\n * Creates a mock SaveGame object.\n *\n * @param overrides - Optional overrides for save game properties.\n * @returns A MockSaveGame object.\n */\nexport function createMockSaveGame(overrides?: Partial<MockSaveGame>): MockSaveGame {\n const defaultLevelState: LevelFrameState = {\n frameNumber: 100,\n timeSeconds: 10.0,\n previousTimeSeconds: 9.9,\n deltaSeconds: 0.1\n };\n\n const defaultLevel: LevelState = {\n next_auto_save: 0,\n health_bar_entities: [null, null, null, null],\n intermission_angle: { x: 0, y: 0, z: 0 },\n intermission_origin: { x: 0, y: 0, z: 0 },\n helpmessage1: \"\",\n helpmessage2: \"\",\n help1changed: 0,\n help2changed: 0,\n mapname: 'test_map'\n };\n\n const defaultGame: GameSaveFile = {\n version: 2,\n timestamp: Date.now(),\n map: 'test_map',\n difficulty: 1,\n playtimeSeconds: 100,\n level: defaultLevelState,\n entities: {\n timeSeconds: 10.0,\n pool: { capacity: 1024, activeOrder: [], freeList: [], pendingFree: [] },\n entities: [],\n thinks: [],\n awareness: {\n frameNumber: 0,\n sightEntityIndex: null,\n sightEntityFrame: 0,\n soundEntityIndex: null,\n soundEntityFrame: 0,\n sound2EntityIndex: null,\n sound2EntityFrame: 0,\n sightClientIndex: null\n },\n crossLevelFlags: 0,\n crossUnitFlags: 0,\n level: defaultLevel\n },\n rng: { mt: { index: 0, state: [] } },\n gameState: {},\n cvars: [],\n configstrings: []\n };\n\n return {\n game: overrides?.game ?? defaultGame,\n entities: overrides?.entities ?? [],\n client: overrides?.client ?? {},\n level: overrides?.level ?? defaultLevel,\n timestamp: overrides?.timestamp ?? Date.now()\n };\n}\n\n/**\n * Captures the current test context state as a save game snapshot.\n * Note: This is a simplified snapshot for testing, not a full serialization.\n *\n * @param context - The test context to snapshot.\n * @returns A MockSaveGame representing the current state.\n */\nexport function createSaveGameSnapshot(context: TestContext): MockSaveGame {\n const entities: any[] = [];\n context.entities.forEachEntity((ent: Entity) => {\n if (!ent.inUse) return;\n // Simple serialization of essential fields\n entities.push({\n classname: ent.classname,\n origin: { ...ent.origin },\n angles: { ...ent.angles },\n health: ent.health,\n spawnflags: ent.spawnflags,\n targetname: ent.targetname\n });\n });\n\n // We need to construct a LevelFrameState for the save file\n const levelFrameState: LevelFrameState = {\n frameNumber: (context.game as any).level?.frameNumber ?? 0,\n timeSeconds: (context.game as any).level?.timeSeconds ?? (context.game as any).time ?? 0,\n previousTimeSeconds: 0,\n deltaSeconds: 0.1\n };\n\n const currentLevel = (context.entities as any).level || {};\n\n return {\n game: {\n version: 2,\n timestamp: Date.now(),\n map: 'snapshot_map',\n difficulty: 0,\n playtimeSeconds: (context.game as any).time ?? 0,\n level: levelFrameState,\n entities: context.entities.createSnapshot(),\n rng: { mt: { index: 0, state: [] } },\n gameState: {},\n cvars: [],\n configstrings: []\n },\n entities,\n client: {},\n level: currentLevel as LevelState,\n timestamp: Date.now()\n };\n}\n\n/**\n * Restores a test context from a save game snapshot.\n *\n * @param saveGame - The save game to restore.\n * @param context - The test context to update.\n */\nexport function restoreSaveGameSnapshot(saveGame: MockSaveGame, context: TestContext): void {\n // Clear existing entities (except world/clients if needed, but for test usually clear all)\n // Assuming context.entities has a way to reset or we just free all\n // context.entities.reset() // if available\n\n // Re-spawn entities\n saveGame.entities.forEach(entData => {\n const ent = context.entities.spawn();\n ent.classname = entData.classname;\n ent.origin = { ...entData.origin };\n ent.angles = { ...entData.angles };\n ent.health = entData.health;\n ent.spawnflags = entData.spawnflags;\n ent.targetname = entData.targetname;\n context.entities.linkentity(ent);\n });\n\n // Restore level state\n if ((context.entities as any).level) {\n Object.assign((context.entities as any).level, saveGame.level);\n }\n}\n\n/**\n * Result of comparing two save games.\n */\nexport interface SaveGameDiff {\n entityCountDiff: number;\n differentEntities: { index: number, field: string, expected: any, actual: any }[];\n gameStateDiffs: string[];\n}\n\n/**\n * Compares two save games and returns the differences.\n * Useful for testing save/load determinism.\n *\n * @param a - First save game.\n * @param b - Second save game.\n * @returns A SaveGameDiff object.\n */\nexport function compareSaveGames(a: MockSaveGame, b: MockSaveGame): SaveGameDiff {\n const diffs: SaveGameDiff = {\n entityCountDiff: a.entities.length - b.entities.length,\n differentEntities: [],\n gameStateDiffs: []\n };\n\n // Compare game state\n const aTime = a.game.level.timeSeconds;\n const bTime = b.game.level.timeSeconds;\n if (aTime !== bTime) diffs.gameStateDiffs.push(`time: ${aTime} vs ${bTime}`);\n\n const aFrame = a.game.level.frameNumber;\n const bFrame = b.game.level.frameNumber;\n if (aFrame !== bFrame) diffs.gameStateDiffs.push(`framenum: ${aFrame} vs ${bFrame}`);\n\n // Compare entities (naive index matching)\n const count = Math.min(a.entities.length, b.entities.length);\n for (let i = 0; i < count; i++) {\n const entA = a.entities[i];\n const entB = b.entities[i];\n\n if (entA.classname !== entB.classname) {\n diffs.differentEntities.push({ index: i, field: 'classname', expected: entA.classname, actual: entB.classname });\n }\n if (entA.health !== entB.health) {\n diffs.differentEntities.push({ index: i, field: 'health', expected: entA.health, actual: entB.health });\n }\n // Vector checks\n if (!vec3Equals(entA.origin, entB.origin)) {\n diffs.differentEntities.push({ index: i, field: 'origin', expected: entA.origin, actual: entB.origin });\n }\n }\n\n return diffs;\n}\n\nfunction vec3Equals(a: Vec3, b: Vec3, epsilon = 0.001): boolean {\n return Math.abs(a.x - b.x) < epsilon &&\n Math.abs(a.y - b.y) < epsilon &&\n Math.abs(a.z - b.z) < epsilon;\n}\n","import { vi, type Mock } from 'vitest';\nimport { Entity, EntitySystem, MonsterMove, MonsterAction, AIAction } from '@quake2ts/game';\n\nexport interface MockAI {\n checkAttack: Mock;\n findTarget: Mock;\n visible: Mock;\n infront: Mock;\n}\n\nexport interface MockMonsterAI {\n stand: Mock;\n walk: Mock;\n run: Mock;\n dodge: Mock;\n attack: Mock;\n melee: Mock;\n sight: Mock;\n idle: Mock;\n}\n\nexport function createMockAI(overrides: Partial<MockAI> = {}): MockAI {\n return {\n checkAttack: vi.fn(() => false),\n findTarget: vi.fn(() => null),\n visible: vi.fn(() => true),\n infront: vi.fn(() => true),\n ...overrides\n };\n}\n\nexport function createMockMonsterAI(overrides: Partial<MockMonsterAI> = {}): MockMonsterAI {\n return {\n stand: vi.fn(),\n walk: vi.fn(),\n run: vi.fn(),\n dodge: vi.fn(),\n attack: vi.fn(),\n melee: vi.fn(),\n sight: vi.fn(),\n idle: vi.fn(),\n ...overrides\n };\n}\n\nexport function createMockMonsterMove(\n first: number,\n last: number,\n think: (self: Entity, context: EntitySystem) => void,\n action: (self: Entity, dist: number, context: EntitySystem) => void\n): MonsterMove {\n const frames = [];\n for (let i = first; i <= last; i++) {\n frames.push({\n ai: action,\n dist: 0,\n think: think\n });\n }\n\n return {\n firstframe: first,\n lastframe: last,\n frames,\n endfunc: null\n };\n}\n","import { vi, type Mock } from 'vitest';\nimport { DamageMod, Entity, ArmorType, type RegularArmorState, type PowerArmorState } from '@quake2ts/game';\n\nexport interface MockDamageInfo {\n damage: number;\n mod: DamageMod;\n knockback: number;\n attacker: Entity | null;\n inflictor: Entity | null;\n dir: { x: number, y: number, z: number } | null;\n point: { x: number, y: number, z: number } | null;\n}\n\nexport function createMockDamageInfo(overrides: Partial<MockDamageInfo> = {}): MockDamageInfo {\n return {\n damage: 10,\n mod: DamageMod.UNKNOWN,\n knockback: 0,\n attacker: null,\n inflictor: null,\n dir: null,\n point: null,\n ...overrides\n };\n}\n\nconst WEAPON_NAMES: Record<string, string> = {\n 'weapon_blaster': 'Blaster',\n 'weapon_shotgun': 'Shotgun',\n 'weapon_supershotgun': 'Super Shotgun',\n 'weapon_machinegun': 'Machinegun',\n 'weapon_chaingun': 'Chaingun',\n 'weapon_grenadelauncher': 'Grenade Launcher',\n 'weapon_rocketlauncher': 'Rocket Launcher',\n 'weapon_hyperblaster': 'HyperBlaster',\n 'weapon_railgun': 'Railgun',\n 'weapon_bfg': 'BFG10K',\n};\n\nexport interface MockWeapon {\n name: string;\n ammoType: string;\n ammoUse: number;\n selection: Mock;\n think: Mock;\n command: Mock;\n}\n\nexport function createMockWeapon(name: string = 'Mock Weapon'): MockWeapon {\n const displayName = WEAPON_NAMES[name] || name;\n return {\n name: displayName,\n ammoType: 'bullets',\n ammoUse: 1,\n selection: vi.fn(),\n think: vi.fn(),\n command: vi.fn(),\n };\n}\n\nexport const mockMonsterAttacks: {\n fireBlaster: Mock;\n fireRocket: Mock;\n fireGrenade: Mock;\n fireHeat: Mock;\n fireBullet: Mock;\n fireShotgun: Mock;\n fireRailgun: Mock;\n fireBFG: Mock;\n} = {\n fireBlaster: vi.fn(),\n fireRocket: vi.fn(),\n fireGrenade: vi.fn(),\n fireHeat: vi.fn(),\n fireBullet: vi.fn(),\n fireShotgun: vi.fn(),\n fireRailgun: vi.fn(),\n fireBFG: vi.fn(),\n};\n\nconst FORWARD_ANGLES = { x: 0, y: 0, z: 0 } as const;\nconst ORIGIN = { x: 0, y: 0, z: 0 } as const;\n\nexport function createRegularArmorState(armorType: ArmorType | null, armorCount: number): RegularArmorState {\n return { armorType, armorCount };\n}\n\nexport function createPowerArmorState(partial: Partial<PowerArmorState> = {}): PowerArmorState {\n return {\n type: null,\n cellCount: 0,\n angles: FORWARD_ANGLES,\n origin: ORIGIN,\n health: 100,\n ...partial,\n };\n}\n","import {\n type PlayerInventory,\n createPlayerInventory,\n WeaponId,\n PowerupId,\n KeyId,\n createAmmoInventory\n} from '@quake2ts/game';\nimport {\n type BaseItem,\n type WeaponItem,\n type HealthItem,\n type ArmorItem,\n type PowerupItem,\n type PowerArmorItem,\n type KeyItem,\n type FlagItem,\n WEAPON_ITEMS,\n HEALTH_ITEMS,\n ARMOR_ITEMS,\n POWERUP_ITEMS,\n POWER_ARMOR_ITEMS,\n KEY_ITEMS,\n FLAG_ITEMS,\n getAmmoItemDefinition,\n AmmoItemId\n} from '@quake2ts/game';\n// import { getAmmoItemDefinition, AmmoItemId } from '@quake2ts/game/src/inventory/ammo.js';\n\n/**\n * Creates a mock player inventory with default values suitable for testing.\n * Can be customized with overrides.\n */\nexport function createMockInventory(overrides: Partial<PlayerInventory> = {}): PlayerInventory {\n const defaultInventory = createPlayerInventory();\n\n // Merge simple properties\n const inventory: PlayerInventory = {\n ...defaultInventory,\n ...overrides\n };\n\n // If overrides.ammo is provided (as a full object), it replaces the default.\n // We don't merge deeper here because the caller usually provides a complete mock\n // or is happy with the default structure.\n\n return inventory;\n}\n\n/**\n * Generic factory for any item type.\n * Attempts to find a predefined item by ID first, then applies overrides.\n */\nexport function createMockItem(id: string, overrides: Partial<BaseItem> = {}): BaseItem {\n let base: BaseItem | undefined;\n\n // Search in all registries\n base = WEAPON_ITEMS[id] ||\n HEALTH_ITEMS[id] ||\n ARMOR_ITEMS[id] ||\n POWERUP_ITEMS[id] ||\n POWER_ARMOR_ITEMS[id] ||\n KEY_ITEMS[id] ||\n FLAG_ITEMS[id];\n\n if (!base) {\n // If not found, create a generic minimal item\n base = {\n id,\n name: `Mock Item ${id}`\n };\n }\n\n return {\n ...base,\n ...overrides\n };\n}\n\n/**\n * Creates a mock WeaponItem\n */\nexport function createMockWeaponItem(weaponId: WeaponId, overrides: Partial<WeaponItem> = {}): WeaponItem {\n // Find the item definition for this weaponId\n const found = Object.values(WEAPON_ITEMS).find(w => w.weaponId === weaponId);\n\n const base: WeaponItem = found ? { ...found } : {\n type: 'weapon',\n id: `weapon_${weaponId}`,\n name: `Mock Weapon ${weaponId}`,\n weaponId,\n ammoType: null,\n initialAmmo: 0,\n pickupAmmo: 0,\n fireRate: 1\n };\n\n return { ...base, ...overrides };\n}\n\n/**\n * Creates a mock HealthItem\n */\nexport function createMockHealthItem(amount: number, overrides: Partial<HealthItem> = {}): HealthItem {\n return {\n type: 'health',\n id: 'item_health_mock',\n name: 'Mock Health',\n amount,\n max: 100,\n ...overrides\n };\n}\n\n/**\n * Creates a mock ArmorItem\n */\nexport function createMockArmorItem(amount: number, overrides: Partial<ArmorItem> = {}): ArmorItem {\n return {\n type: 'armor',\n id: 'item_armor_mock',\n name: 'Mock Armor',\n amount,\n ...overrides\n };\n}\n\n/**\n * Creates a mock AmmoItem\n */\nexport function createMockAmmoItem(ammoItemId: AmmoItemId, overrides: Partial<BaseItem> = {}): BaseItem {\n const def = getAmmoItemDefinition(ammoItemId);\n if (!def) {\n throw new Error(`Unknown ammo item id: ${ammoItemId}`);\n }\n\n const base: BaseItem = {\n id: def.id,\n name: `Mock Ammo ${def.id}`\n };\n\n return {\n ...base,\n ...overrides\n };\n}\n\n\n/**\n * Creates a mock PowerupItem\n */\nexport function createMockPowerupItem(id: string, duration: number, overrides: Partial<PowerupItem> = {}): PowerupItem {\n const found = POWERUP_ITEMS[id];\n const base: PowerupItem = found ? { ...found } : {\n type: 'powerup',\n id,\n name: `Mock Powerup ${id}`,\n timer: duration\n };\n\n if (duration !== undefined && !found) {\n base.timer = duration;\n }\n\n return { ...base, ...overrides };\n}\n","import { NetworkTransport } from '@quake2ts/server';\nimport { NetDriver } from '@quake2ts/shared';\nimport { vi, type Mock } from 'vitest';\nimport { LegacyMock, legacyFn } from '../../vitest-compat.js';\n\n/**\n * Mock implementation of the NetworkTransport interface for server testing.\n * Allows simulating connections and errors.\n */\nexport class MockTransport implements NetworkTransport {\n public onConnectionCallback?: (driver: NetDriver, info?: any) => void;\n public onErrorCallback?: (error: Error) => void;\n public address: string = '127.0.0.1';\n public port: number = 27910;\n public sentMessages: Uint8Array[] = [];\n public receivedMessages: Uint8Array[] = [];\n public listening: boolean = false;\n\n public listenSpy: LegacyMock<[number], Promise<void>> = legacyFn(async (port: number) => {\n this.port = port;\n this.listening = true;\n });\n public closeSpy: LegacyMock<[], void> = legacyFn(() => {\n this.listening = false;\n });\n\n /**\n * Start listening on the specified port.\n */\n async listen(port: number): Promise<void> {\n return this.listenSpy(port);\n }\n\n /**\n * Close the transport.\n */\n close() {\n this.closeSpy();\n }\n\n /**\n * Register a callback for new connections.\n */\n onConnection(callback: (driver: NetDriver, info?: any) => void) {\n this.onConnectionCallback = callback;\n }\n\n /**\n * Register a callback for errors.\n */\n onError(callback: (error: Error) => void) {\n this.onErrorCallback = callback;\n }\n\n /**\n * Check if the transport is currently listening.\n */\n public isListening(): boolean {\n return this.listening;\n }\n\n /**\n * Helper to simulate a new connection.\n * @param driver The network driver for the connection.\n * @param info Optional connection info.\n */\n public simulateConnection(driver: NetDriver, info?: any) {\n if (this.onConnectionCallback) {\n this.onConnectionCallback(driver, info);\n }\n }\n\n /**\n * Helper to simulate an error.\n * @param error The error to simulate.\n */\n public simulateError(error: Error) {\n if (this.onErrorCallback) {\n this.onErrorCallback(error);\n }\n }\n}\n\n/**\n * Interface for mock UDP socket.\n * This is a partial mock of Node.js dgram.Socket or similar.\n */\nexport interface MockUDPSocket {\n send: (msg: Uint8Array, offset: number, length: number, port: number, address: string, callback?: (error: Error | null, bytes: number) => void) => void;\n on: (event: string, callback: (...args: any[]) => void) => void;\n close: () => void;\n bind: (port: number, address?: string) => void;\n address: () => { address: string; family: string; port: number };\n}\n\n/**\n * Creates a mock UDP socket.\n * @param overrides Optional overrides for the socket methods.\n */\nexport function createMockUDPSocket(overrides?: Partial<MockUDPSocket>): MockUDPSocket {\n const socket: MockUDPSocket = {\n send: vi.fn(),\n on: vi.fn(),\n close: vi.fn(),\n bind: vi.fn(),\n address: vi.fn().mockReturnValue({ address: '127.0.0.1', family: 'IPv4', port: 0 }),\n ...overrides,\n };\n return socket;\n}\n\n/**\n * Interface for network address.\n */\nexport interface NetworkAddress {\n ip: string;\n port: number;\n}\n\n/**\n * Creates a mock network address.\n * @param ip IP address (default: '127.0.0.1')\n * @param port Port number (default: 27910)\n */\nexport function createMockNetworkAddress(ip: string = '127.0.0.1', port: number = 27910): NetworkAddress {\n return { ip, port };\n}\n\n/**\n * Creates a configured MockTransport instance.\n * @param address Address to bind to (default: '127.0.0.1')\n * @param port Port to listen on (default: 27910)\n * @param overrides Optional overrides for the transport properties.\n */\nexport function createMockTransport(\n address: string = '127.0.0.1',\n port: number = 27910,\n overrides?: Partial<MockTransport>\n): MockTransport {\n const transport = new MockTransport();\n transport.address = address;\n transport.port = port;\n Object.assign(transport, overrides);\n return transport;\n}\n\n/**\n * Creates a mock NetDriver instance.\n * @param overrides Optional overrides for the NetDriver methods.\n */\nexport function createMockNetDriver(overrides?: Partial<NetDriver>): NetDriver {\n return {\n connect: vi.fn().mockResolvedValue(undefined),\n disconnect: vi.fn(),\n send: vi.fn(),\n onMessage: vi.fn(),\n onClose: vi.fn(),\n onError: vi.fn(),\n isConnected: vi.fn().mockReturnValue(true),\n ...overrides\n };\n}\n","import { NetChan } from '@quake2ts/shared';\n\nexport interface RecordedPacket {\n type: 'sent' | 'received';\n timestamp: number;\n data: Uint8Array;\n}\n\nexport class MockNetworkTransport {\n public netchan: NetChan;\n public recordedPackets: RecordedPacket[] = [];\n public sentPackets: Uint8Array[] = [];\n\n constructor() {\n this.netchan = new NetChan();\n this.netchan.setup(1234, { type: 'loopback', port: 0 });\n }\n\n reset() {\n this.recordedPackets = [];\n this.sentPackets = [];\n this.netchan.reset();\n }\n\n // Simulate receiving data from the \"server\"\n receive(data: Uint8Array) {\n this.recordedPackets.push({\n type: 'received',\n timestamp: Date.now(),\n data: new Uint8Array(data)\n });\n return this.netchan.process(data);\n }\n\n // Simulate sending data (called by the client using this transport)\n transmit(unreliableData?: Uint8Array) {\n const packet = this.netchan.transmit(unreliableData);\n this.recordedPackets.push({\n type: 'sent',\n timestamp: Date.now(),\n data: new Uint8Array(packet)\n });\n this.sentPackets.push(new Uint8Array(packet));\n return packet;\n }\n\n get lastSentPacket() {\n return this.sentPackets.length > 0 ? this.sentPackets[this.sentPackets.length - 1] : undefined;\n }\n}\n","import { NetDriver } from '@quake2ts/shared';\nimport { vi, type Mock } from 'vitest';\nimport { LegacyMock, legacyFn } from '../vitest-compat.js';\n\nexport interface MockNetDriverState {\n connected: boolean;\n messagesSent: Uint8Array[];\n messageHandlers: ((data: Uint8Array) => void)[];\n closeHandlers: (() => void)[];\n errorHandlers: ((err: Error) => void)[];\n}\n\n/**\n * A mock implementation of NetDriver that provides testing hooks.\n * Unlike the simple createMockNetDriver factory, this class maintains state\n * and allows for stimulating events (receiving messages, triggering errors).\n */\nexport class MockNetDriver implements NetDriver {\n public state: MockNetDriverState = {\n connected: false,\n messagesSent: [],\n messageHandlers: [],\n closeHandlers: [],\n errorHandlers: []\n };\n\n public connectSpy: LegacyMock<[string], Promise<void>> = legacyFn(async (url: string) => {\n this.state.connected = true;\n });\n\n public disconnectSpy: LegacyMock<[], void> = legacyFn(() => {\n this.state.connected = false;\n this.state.closeHandlers.forEach(h => h());\n });\n\n public sendSpy: LegacyMock<[Uint8Array], void> = legacyFn((data: Uint8Array) => {\n this.state.messagesSent.push(new Uint8Array(data));\n });\n\n public connect(url: string): Promise<void> {\n return this.connectSpy(url);\n }\n\n public disconnect(): void {\n this.disconnectSpy();\n }\n\n public send(data: Uint8Array): void {\n this.sendSpy(data);\n }\n\n public onMessage(cb: (data: Uint8Array) => void): void {\n this.state.messageHandlers.push(cb);\n }\n\n public onClose(cb: () => void): void {\n this.state.closeHandlers.push(cb);\n }\n\n public onError(cb: (err: Error) => void): void {\n this.state.errorHandlers.push(cb);\n }\n\n public isConnected(): boolean {\n return this.state.connected;\n }\n\n // --- Test Helpers ---\n\n /**\n * Simulate receiving a message from the network.\n */\n public receiveMessage(data: Uint8Array): void {\n this.state.messageHandlers.forEach(h => h(data));\n }\n\n /**\n * Simulate a connection close event from the remote side.\n */\n public simulateClose(): void {\n this.state.connected = false;\n this.state.closeHandlers.forEach(h => h());\n }\n\n /**\n * Simulate a connection error.\n */\n public simulateError(err: Error): void {\n this.state.errorHandlers.forEach(h => h(err));\n }\n\n /**\n * Get the last sent message.\n */\n public getLastSentMessage(): Uint8Array | undefined {\n return this.state.messagesSent.length > 0\n ? this.state.messagesSent[this.state.messagesSent.length - 1]\n : undefined;\n }\n\n /**\n * Clear recorded sent messages.\n */\n public clearSentMessages(): void {\n this.state.messagesSent = [];\n }\n}\n","import { Server, ServerState, ServerStatic, Client, ClientState } from '@quake2ts/server';\nimport { NetDriver, MAX_CONFIGSTRINGS, MAX_EDICTS, EntityState } from '@quake2ts/shared';\nimport { Entity } from '@quake2ts/game';\nimport { vi } from 'vitest';\nimport { createMockNetDriver } from './transport.js';\n\n// Define GameState interface locally as we removed game/mocks.ts\nexport interface GameState {\n levelName: string;\n time: number;\n entities: Entity[];\n clients: any[]; // Mock client objects\n}\n\n/**\n * Creates a mock game state object.\n * @param overrides Optional overrides for the game state.\n */\nexport function createMockGameState(overrides?: Partial<GameState>): GameState {\n return {\n levelName: 'test_level',\n time: 0,\n entities: [],\n clients: [],\n ...overrides\n };\n}\n\n/**\n * Creates a mock server state object.\n * @param overrides Optional overrides for the server state.\n */\nexport function createMockServerState(overrides?: Partial<Server>): Server {\n return {\n state: ServerState.Game,\n attractLoop: false,\n loadGame: false,\n startTime: Date.now(),\n time: 0,\n frame: 0,\n name: 'test_map',\n collisionModel: null,\n configStrings: new Array(MAX_CONFIGSTRINGS).fill(''),\n baselines: new Array(MAX_EDICTS).fill(null),\n multicastBuf: new Uint8Array(0),\n ...overrides\n };\n}\n\n/**\n * Creates a mock server static object.\n * @param maxClients Maximum number of clients.\n * @param overrides Optional overrides for the server static state.\n */\nexport function createMockServerStatic(maxClients: number = 16, overrides?: Partial<ServerStatic>): ServerStatic {\n return {\n initialized: true,\n realTime: Date.now(),\n mapCmd: '',\n spawnCount: 1,\n clients: new Array(maxClients).fill(null),\n lastHeartbeat: 0,\n challenges: [],\n ...overrides\n };\n}\n\n/**\n * Creates a mock server client.\n * @param clientNum The client index.\n * @param overrides Optional overrides for the client.\n */\nexport function createMockServerClient(clientNum: number, overrides?: Partial<Client>): Client {\n // Create a minimal mock net driver\n const mockNet: NetDriver = createMockNetDriver();\n\n return {\n index: clientNum,\n state: ClientState.Connected,\n edict: { index: clientNum + 1 } as Entity,\n net: mockNet,\n netchan: {\n qport: 0,\n remoteAddress: '127.0.0.1',\n incomingSequence: 0,\n outgoingSequence: 0,\n lastReceived: 0,\n process: vi.fn(),\n transmit: vi.fn(),\n writeReliableByte: vi.fn(),\n writeReliableShort: vi.fn(),\n writeReliableLong: vi.fn(),\n writeReliableString: vi.fn(),\n writeReliableData: vi.fn(),\n } as any, // Cast as any because NetChan might be complex to fully mock here\n userInfo: '',\n lastMessage: 0,\n lastCommandTime: 0,\n commandCount: 0,\n messageQueue: [],\n frames: [],\n lastFrame: 0,\n lastPacketEntities: [],\n challenge: 0,\n lastConnect: 0,\n ping: 0,\n rate: 0,\n name: `Client${clientNum}`,\n messageLevel: 0,\n datagram: new Uint8Array(0),\n downloadSize: 0,\n downloadCount: 0,\n commandMsec: 0,\n frameLatency: [],\n messageSize: [],\n suppressCount: 0,\n commandQueue: [],\n lastCmd: {\n msec: 0,\n buttons: 0,\n angles: { x: 0, y: 0, z: 0 },\n forwardmove: 0,\n sidemove: 0,\n upmove: 0,\n sequence: 0,\n lightlevel: 0,\n impulse: 0,\n serverFrame: 0\n },\n ...overrides\n };\n}\n\n/**\n * Mock interface for the Server class (DedicatedServer).\n * This allows mocking the server instance itself.\n */\nexport interface MockServer {\n start(mapName: string): Promise<void>;\n stop(): void;\n // tick(): void; // runFrame is private in DedicatedServer, usually we simulate via game.frame\n multicast(origin: any, type: any, event: any, ...args: any[]): void;\n unicast(ent: Entity, reliable: boolean, event: any, ...args: any[]): void;\n configstring(index: number, value: string): void;\n kickPlayer(clientId: number): void;\n changeMap(mapName: string): Promise<void>;\n getClient(clientNum: number): Client | null;\n broadcast(message: string): void;\n tick(): void;\n}\n\n/**\n * Creates a mock server instance.\n * @param overrides Optional overrides for server methods.\n */\nexport function createMockServer(overrides?: Partial<MockServer>): MockServer {\n return {\n start: vi.fn().mockResolvedValue(undefined),\n stop: vi.fn(),\n multicast: vi.fn(),\n unicast: vi.fn(),\n configstring: vi.fn(),\n kickPlayer: vi.fn(),\n changeMap: vi.fn().mockResolvedValue(undefined),\n getClient: vi.fn().mockReturnValue(null),\n broadcast: vi.fn(),\n tick: vi.fn(),\n ...overrides\n };\n}\n","import { Client, ClientState } from '@quake2ts/server';\nimport { createMockServerClient } from './state.js';\n\n/**\n * Interface representing connection state for testing.\n */\nexport interface Connection {\n state: ClientState;\n address: string;\n challenge: number;\n userInfo: UserInfo;\n}\n\n/**\n * Stages of the client connection handshake.\n */\nexport enum HandshakeStage {\n None = 0,\n Challenge = 1,\n Connect = 2,\n Info = 3,\n Active = 4\n}\n\n/**\n * Interface representing a handshake state.\n */\nexport interface Handshake {\n stage: HandshakeStage;\n clientNum: number;\n challenge: number;\n qport: number;\n}\n\n/**\n * Interface for UserInfo structure.\n */\nexport interface UserInfo {\n name: string;\n skin: string;\n model: string;\n fov: number;\n hand: number;\n rate: number;\n msg: number;\n spectator?: number;\n [key: string]: string | number | undefined;\n}\n\n/**\n * Helper to serialize UserInfo to Quake 2 info string format.\n * Format: \\key\\value\\key2\\value2\n */\nexport function serializeUserInfo(info: UserInfo): string {\n return Object.entries(info).reduce((acc, [key, value]) => {\n if (value !== undefined) {\n return `${acc}\\\\${key}\\\\${value}`;\n }\n return acc;\n }, '');\n}\n\n/**\n * Creates a mock UserInfo object.\n * @param overrides Optional overrides for the user info.\n */\nexport function createMockUserInfo(overrides?: Partial<UserInfo>): UserInfo {\n return {\n name: 'Player',\n skin: 'male/grunt',\n model: 'male/grunt',\n fov: 90,\n hand: 0,\n rate: 25000,\n msg: 1,\n ...overrides\n };\n}\n\n/**\n * Creates a mock connection object (Client) with specific state.\n * @param state The client state (default: Connected).\n * @param overrides Optional overrides for the client.\n */\nexport function createMockConnection(state: ClientState = ClientState.Connected, overrides?: Partial<Client>): Client {\n return createMockServerClient(0, {\n state,\n userInfo: serializeUserInfo(createMockUserInfo()),\n challenge: Math.floor(Math.random() * 100000),\n ...overrides\n });\n}\n\n/**\n * Creates a mock handshake object.\n * @param stage The stage of the handshake (default: None).\n */\nexport function createMockHandshake(stage: HandshakeStage = HandshakeStage.None): Handshake {\n return {\n stage,\n clientNum: -1,\n challenge: 0,\n qport: Math.floor(Math.random() * 65536)\n };\n}\n\n/**\n * Simulates a handshake between a mock client and server.\n * Note: This is a high-level simulation helper.\n * @param client The mock client connection.\n * @param server The mock server instance.\n * @returns Promise that resolves to true if handshake succeeded.\n */\nexport async function simulateHandshake(client: Client, server: any): Promise<boolean> {\n // 1. Get Challenge\n // In a real scenario, client sends getchallenge, server responds with challenge\n const challenge = Math.floor(Math.random() * 100000);\n client.challenge = challenge;\n\n // 2. Connect\n // Client sends connect command with qport, challenge, userinfo\n // Server assigns client slot\n if (server && server.clients) {\n // rudimentary check if server has space\n }\n\n // 3. Update state to Connected\n client.state = ClientState.Connected;\n\n // 4. Send configstrings (usually handled by server)\n\n // 5. Client enters game (prespawn)\n // Server sends stuff\n\n // 6. Client ready\n client.state = ClientState.Active;\n\n return true;\n}\n","import { vi } from 'vitest';\nimport { ServerCommand } from '@quake2ts/shared';\n\n/**\n * Interface for a mocked server console that can execute commands.\n * Reference: quake2/server/sv_main.c (SV_ExecuteUserCommand)\n */\nexport interface MockServerConsole {\n exec(cmd: string): string;\n print(text: string): void;\n broadcast(text: string): void;\n commandBuffer: string[];\n outputBuffer: string[];\n}\n\n/**\n * Creates a mock server console.\n * @param overrides Optional overrides for the mock console.\n */\nexport function createMockServerConsole(overrides?: Partial<MockServerConsole>): MockServerConsole {\n const outputBuffer: string[] = [];\n const commandBuffer: string[] = [];\n\n return {\n exec: vi.fn((cmd: string) => {\n commandBuffer.push(cmd);\n return `Executed: ${cmd}`;\n }),\n print: vi.fn((text: string) => {\n outputBuffer.push(text);\n }),\n broadcast: vi.fn((text: string) => {\n outputBuffer.push(`Broadcast: ${text}`);\n }),\n commandBuffer,\n outputBuffer,\n ...overrides\n };\n}\n\n/**\n * Interface for a mocked RCON client.\n * Reference: quake2/server/sv_user.c (SV_ExecuteUserCommand for RCON handling)\n */\nexport interface MockRConClient {\n connect(address: string, port: number, password?: string): Promise<boolean>;\n sendCommand(cmd: string): Promise<string>;\n disconnect(): void;\n connected: boolean;\n lastCommand: string;\n lastResponse: string;\n}\n\n/**\n * Creates a mock RCON client.\n * @param password Optional password for the client to use.\n */\nexport function createMockRConClient(password: string = ''): MockRConClient {\n return {\n connected: false,\n lastCommand: '',\n lastResponse: '',\n connect: vi.fn(async (address, port, pwd) => {\n return pwd === password; // Simple mock: connect succeeds if password matches constructor password\n }),\n sendCommand: vi.fn(async (cmd) => {\n return `RCON Response for: ${cmd}`;\n }),\n disconnect: vi.fn(),\n };\n}\n\n/**\n * Simulates a command execution on the server.\n * @param server The mock server instance (assumed to have some command handling capability).\n * @param command The command string to execute.\n * @returns The output of the command.\n */\nexport function simulateServerCommand(server: any, command: string): string {\n // This assumes the server has a method to execute commands, or we simulate the effect.\n // In a real integration, this might interact with the server's command buffer.\n if (server.executeBuffer) {\n server.executeBuffer(command);\n return \"Executed\";\n }\n\n // Fallback for mocked servers\n if (server.exec) {\n return server.exec(command);\n }\n\n return \"Unknown command handler\";\n}\n","import { Client } from '@quake2ts/server';\n\nexport interface MasterServer {\n registerServer(info: ServerInfo): Promise<boolean>;\n heartbeat(serverAddress: string): Promise<boolean>;\n getServerList(filter?: ServerListFilter): Promise<ServerInfo[]>;\n}\n\nexport interface ServerInfo {\n address: string;\n name: string;\n map: string;\n players: number;\n maxPlayers: number;\n gametype: string;\n version: string;\n password?: boolean;\n}\n\nexport interface ServerListFilter {\n gametype?: string;\n map?: string;\n notEmpty?: boolean;\n notFull?: boolean;\n}\n\n/**\n * Creates a mock master server for testing server registration and browsing\n * @param overrides - Optional overrides for the master server behavior\n */\nexport function createMockMasterServer(overrides: Partial<MasterServer> = {}): MasterServer {\n const servers = new Map<string, ServerInfo>();\n\n return {\n registerServer: async (info: ServerInfo): Promise<boolean> => {\n servers.set(info.address, info);\n return true;\n },\n heartbeat: async (serverAddress: string): Promise<boolean> => {\n return servers.has(serverAddress);\n },\n getServerList: async (filter?: ServerListFilter): Promise<ServerInfo[]> => {\n let list = Array.from(servers.values());\n\n if (filter) {\n if (filter.gametype) {\n list = list.filter(s => s.gametype === filter.gametype);\n }\n if (filter.map) {\n list = list.filter(s => s.map === filter.map);\n }\n if (filter.notEmpty) {\n list = list.filter(s => s.players > 0);\n }\n if (filter.notFull) {\n list = list.filter(s => s.players < s.maxPlayers);\n }\n }\n\n return list;\n },\n ...overrides\n };\n}\n\n/**\n * Creates a mock server info object\n * @param overrides - Optional overrides\n */\nexport function createMockServerInfo(overrides: Partial<ServerInfo> = {}): ServerInfo {\n return {\n address: '127.0.0.1:27910',\n name: 'Quake 2 Test Server',\n map: 'q2dm1',\n players: 0,\n maxPlayers: 16,\n gametype: 'deathmatch',\n version: '1.0',\n ...overrides\n };\n}\n\n/**\n * Simulates the process of a game server registering with the master server\n * @param server - The mock game server instance (typed as any to accept mock)\n * @param master - The mock master server\n */\nexport async function simulateServerRegistration(server: any, master: MasterServer): Promise<boolean> {\n const info = createMockServerInfo({\n name: server.name || 'Test Server',\n map: server.mapName || 'q2dm1',\n players: server.clients ? server.clients.filter((c: Client | null) => c && c.state >= 2).length : 0,\n maxPlayers: server.maxClients || 16\n });\n\n return master.registerServer(info);\n}\n","import { vi } from 'vitest';\nimport { TraceResult } from '@quake2ts/shared';\n\n/**\n * Mock interface for CollisionEntityIndex.\n */\nexport interface MockCollisionEntityIndex {\n trace: (start: any, mins: any, maxs: any, end: any, passEntity: any, contentMask: number) => TraceResult;\n link: (entity: any) => void;\n unlink: (entity: any) => void;\n gatherTriggerTouches: (entity: any) => any[];\n}\n\n/**\n * Creates a mock CollisionEntityIndex.\n * @param overrides Optional overrides for the mock methods.\n */\nexport function createMockCollisionEntityIndex(overrides?: Partial<MockCollisionEntityIndex>): MockCollisionEntityIndex {\n return {\n trace: vi.fn().mockReturnValue({\n fraction: 1.0,\n allsolid: false,\n startsolid: false,\n endpos: { x: 0, y: 0, z: 0 },\n entityId: null\n }),\n link: vi.fn(),\n unlink: vi.fn(),\n gatherTriggerTouches: vi.fn().mockReturnValue([]),\n ...overrides\n };\n}\n","import { Server, Client, ClientState, ServerState, ServerStatic } from '@quake2ts/server';\nimport { Entity } from '@quake2ts/game';\nimport { UserCommand } from '@quake2ts/shared';\nimport { createMockServerState } from '../mocks/state.js';\nimport { createMockServerClient } from '../mocks/state.js';\nimport { createMockUserInfo, serializeUserInfo, UserInfo } from '../mocks/connection.js';\n\n// Define a type that combines Server and ServerStatic for convenience in tests\n// since the real server implementation splits these but tests often need both.\nexport type MockServerContext = Server & {\n clients: (Client | null)[];\n entities?: Entity[];\n};\n\nexport interface MultiplayerScenario {\n server: MockServerContext;\n clients: Client[];\n entities: Entity[];\n}\n\n/**\n * Creates a multiplayer test scenario with a mock server and a number of clients.\n * @param numPlayers Number of players to simulate.\n */\nexport function createMultiplayerTestScenario(numPlayers: number = 2): MultiplayerScenario {\n const baseServer = createMockServerState();\n const clients: Client[] = [];\n const entities: Entity[] = [];\n\n const server: MockServerContext = {\n ...baseServer,\n clients: new Array(numPlayers).fill(null),\n entities: []\n };\n\n for (let i = 0; i < numPlayers; i++) {\n // Create client\n const client = createMockServerClient(i, {\n state: ClientState.Active,\n userInfo: serializeUserInfo(createMockUserInfo({ name: `Player${i}` }))\n });\n\n // Create player entity\n const entity = {\n classname: 'player',\n s: { origin: { x: 0, y: 0, z: 0 }, number: i + 1 },\n client: client\n } as unknown as Entity;\n\n client.edict = entity;\n server.clients[i] = client;\n clients.push(client);\n entities.push(entity);\n }\n\n // Assign entities to server\n server.entities = entities;\n\n return {\n server,\n clients,\n entities\n };\n}\n\n/**\n * Simulates a player joining the server.\n * @param server The mock server instance.\n * @param userInfo Optional user info overrides.\n */\nexport async function simulatePlayerJoin(server: MockServerContext, userInfo?: Partial<UserInfo>): Promise<Client> {\n // Find free client slot\n const index = server.clients.findIndex((c) => !c || c.state === ClientState.Free);\n if (index === -1) {\n throw new Error('Server full');\n }\n\n const client = createMockServerClient(index, {\n state: ClientState.Connected,\n userInfo: serializeUserInfo(createMockUserInfo(userInfo))\n });\n\n server.clients[index] = client;\n\n // Simulate connection process\n client.state = ClientState.Active;\n\n // Create entity\n const entity = {\n classname: 'player',\n s: { origin: { x: 0, y: 0, z: 0 }, number: index + 1 },\n client: client\n } as unknown as Entity;\n client.edict = entity;\n\n // Add to entities list if possible (mock behavior)\n if (server.entities && Array.isArray(server.entities)) {\n // This is a simplified view, normally entities are in a fixed array\n (server.entities as Entity[])[index + 1] = entity;\n }\n\n return client;\n}\n\n/**\n * Simulates a player leaving the server.\n * @param server The mock server instance.\n * @param clientNum The client number to disconnect.\n */\nexport function simulatePlayerLeave(server: MockServerContext, clientNum: number): void {\n const client = server.clients[clientNum];\n if (client) {\n client.state = ClientState.Free;\n client.edict = null;\n }\n}\n\n/**\n * Simulates a single server frame update.\n * @param server The mock server instance.\n * @param deltaTime Time step in seconds (default: 0.1).\n */\nexport function simulateServerTick(server: MockServerContext, deltaTime: number = 0.1): void {\n server.time += deltaTime;\n server.frame++;\n // In a real server, we would call RunFrame, Physics, etc.\n // For mocks, we might just update client lastCmd times\n\n server.clients.forEach((client: Client | null) => {\n if (client && client.state === ClientState.Active) {\n // Update client logic if needed\n }\n });\n}\n\n/**\n * Simulates player input for a specific client.\n * @param client The server client.\n * @param input The input command.\n */\nexport function simulatePlayerInput(client: Client, input: Partial<UserCommand>): void {\n const cmd: UserCommand = {\n msec: 100,\n buttons: 0,\n angles: { x: 0, y: 0, z: 0 },\n forwardmove: 0,\n sidemove: 0,\n upmove: 0,\n sequence: client.lastCmd.sequence + 1,\n lightlevel: 0,\n impulse: 0,\n ...input\n };\n\n client.lastCmd = cmd;\n client.commandQueue.push(cmd);\n client.commandCount++;\n}\n","import { Server } from '@quake2ts/server';\nimport { EntityState, BinaryStream, ProtocolPlayerState } from '@quake2ts/shared';\n\nexport interface Snapshot {\n serverTime: number;\n playerState: any; // Simplified PlayerState\n entities: EntityState[];\n}\n\nexport interface DeltaSnapshot {\n snapshot: Snapshot;\n deltaEntities: EntityState[];\n removedEntities: number[];\n}\n\nexport interface ConsistencyReport {\n valid: boolean;\n errors: string[];\n}\n\n/**\n * Creates a client-specific snapshot from the server state.\n * @param serverState The current server state.\n * @param clientNum The client number to generate snapshot for.\n */\nexport function createServerSnapshot(serverState: Server, clientNum: number): Snapshot {\n // Collect visible entities\n const visibleEntities: EntityState[] = [];\n\n // In a real implementation, this would use PVS/PHS\n // For mock, we just take all entities that have a model or are solid\n if (serverState.baselines) {\n serverState.baselines.forEach((ent: EntityState | null, index: number) => {\n if (ent && index !== clientNum + 1) { // Skip self in packet entities usually\n visibleEntities.push({ ...ent });\n }\n });\n }\n\n return {\n serverTime: serverState.time,\n playerState: {\n origin: { x: 0, y: 0, z: 0 },\n viewangles: { x: 0, y: 0, z: 0 },\n pm_type: 0\n },\n entities: visibleEntities\n };\n}\n\n/**\n * Calculates the delta between two snapshots.\n * @param oldSnapshot The baseline snapshot.\n * @param newSnapshot The current snapshot.\n */\nexport function createDeltaSnapshot(oldSnapshot: Snapshot, newSnapshot: Snapshot): DeltaSnapshot {\n const deltaEntities: EntityState[] = [];\n const removedEntities: number[] = [];\n\n const oldMap = new Map(oldSnapshot.entities.map(e => [e.number, e]));\n const newMap = new Map(newSnapshot.entities.map(e => [e.number, e]));\n\n // Find changed or new entities\n newSnapshot.entities.forEach(newEnt => {\n const oldEnt = oldMap.get(newEnt.number);\n if (!oldEnt) {\n // New entity\n deltaEntities.push(newEnt);\n } else if (JSON.stringify(newEnt) !== JSON.stringify(oldEnt)) {\n // Changed entity (simplified check)\n deltaEntities.push(newEnt);\n }\n });\n\n // Find removed entities\n oldSnapshot.entities.forEach(oldEnt => {\n if (!newMap.has(oldEnt.number)) {\n removedEntities.push(oldEnt.number);\n }\n });\n\n return {\n snapshot: newSnapshot,\n deltaEntities,\n removedEntities\n };\n}\n\n/**\n * Verifies the consistency of a sequence of snapshots.\n * @param snapshots Array of snapshots ordered by time.\n */\nexport function verifySnapshotConsistency(snapshots: Snapshot[]): ConsistencyReport {\n const report: ConsistencyReport = { valid: true, errors: [] };\n\n if (snapshots.length < 2) return report;\n\n for (let i = 1; i < snapshots.length; i++) {\n const prev = snapshots[i-1];\n const curr = snapshots[i];\n\n if (curr.serverTime <= prev.serverTime) {\n report.valid = false;\n report.errors.push(`Snapshot ${i} has time ${curr.serverTime} <= prev ${prev.serverTime}`);\n }\n }\n\n return report;\n}\n\n/**\n * Simulates network delivery of a snapshot with potential packet loss.\n * @param snapshot The snapshot to deliver.\n * @param reliability Probability of successful delivery (0.0 to 1.0).\n */\nexport async function simulateSnapshotDelivery(snapshot: Snapshot, reliability: number = 1.0): Promise<Snapshot | null> {\n if (Math.random() > reliability) {\n return null;\n }\n return snapshot;\n}\n\n/**\n * Parses a ProtocolPlayerState from a binary buffer.\n * Useful for testing player state serialization.\n * logic adapted from packages/engine/src/demo/parser.ts\n * @param data The binary data to parse.\n */\nexport function parseProtocolPlayerState(data: Uint8Array): ProtocolPlayerState {\n const stream = new BinaryStream(data.buffer as ArrayBuffer);\n const ps: ProtocolPlayerState = {\n pm_type: 0,\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n pm_time: 0,\n pm_flags: 0,\n gravity: 0,\n delta_angles: { x: 0, y: 0, z: 0 },\n viewoffset: { x: 0, y: 0, z: 0 },\n viewangles: { x: 0, y: 0, z: 0 },\n kick_angles: { x: 0, y: 0, z: 0 },\n gun_index: 0,\n gun_frame: 0,\n gun_offset: { x: 0, y: 0, z: 0 },\n gun_angles: { x: 0, y: 0, z: 0 },\n blend: [0, 0, 0, 0],\n fov: 0,\n rdflags: 0,\n stats: new Array(32).fill(0),\n watertype: 0\n };\n\n const flags = stream.readShort();\n\n if (flags & 1) ps.pm_type = stream.readByte();\n\n if (flags & 2) {\n const x = stream.readShort() * 0.125;\n const y = stream.readShort() * 0.125;\n const z = stream.readShort() * 0.125;\n ps.origin = { x, y, z };\n }\n\n if (flags & 4) {\n const x = stream.readShort() * 0.125;\n const y = stream.readShort() * 0.125;\n const z = stream.readShort() * 0.125;\n ps.velocity = { x, y, z };\n }\n\n if (flags & 8) ps.pm_time = stream.readByte();\n if (flags & 16) ps.pm_flags = stream.readByte();\n if (flags & 32) ps.gravity = stream.readShort();\n\n if (flags & 64) {\n const x = stream.readShort() * (180 / 32768);\n const y = stream.readShort() * (180 / 32768);\n const z = stream.readShort() * (180 / 32768);\n ps.delta_angles = { x, y, z };\n }\n\n if (flags & 128) {\n const x = stream.readChar() * 0.25;\n const y = stream.readChar() * 0.25;\n const z = stream.readChar() * 0.25;\n ps.viewoffset = { x, y, z };\n }\n\n if (flags & 256) {\n const x = stream.readAngle16();\n const y = stream.readAngle16();\n const z = stream.readAngle16();\n ps.viewangles = { x, y, z };\n }\n\n if (flags & 512) {\n const x = stream.readChar() * 0.25;\n const y = stream.readChar() * 0.25;\n const z = stream.readChar() * 0.25;\n ps.kick_angles = { x, y, z };\n }\n\n if (flags & 4096) ps.gun_index = stream.readByte();\n\n if (flags & 8192) {\n ps.gun_frame = stream.readByte();\n const ox = stream.readChar() * 0.25;\n const oy = stream.readChar() * 0.25;\n const oz = stream.readChar() * 0.25;\n ps.gun_offset = { x: ox, y: oy, z: oz };\n\n const ax = stream.readChar() * 0.25;\n const ay = stream.readChar() * 0.25;\n const az = stream.readChar() * 0.25;\n ps.gun_angles = { x: ax, y: ay, z: az };\n }\n\n if (flags & 1024) {\n ps.blend = [\n stream.readByte(),\n stream.readByte(),\n stream.readByte(),\n stream.readByte()\n ];\n }\n\n if (flags & 2048) ps.fov = stream.readByte();\n if (flags & 16384) ps.rdflags = stream.readByte();\n\n // New: watertype (bit 15)\n if (flags & 32768) ps.watertype = stream.readByte();\n\n const statbits = stream.readLong();\n for (let i = 0; i < 32; i++) {\n if (statbits & (1 << i)) {\n ps.stats[i] = stream.readShort();\n }\n }\n\n return ps;\n}\n","import { Client, ClientFrame } from '@quake2ts/server';\n\nexport interface RateLimiter {\n bytesPerSecond: number;\n allow(bytes: number): boolean;\n update(deltaSeconds: number): void;\n reset(): void;\n getUsage(): number;\n}\n\nexport interface Message {\n data: Uint8Array;\n size: number;\n timestamp: number;\n}\n\nexport interface BandwidthScenario {\n bandwidth: number;\n clients: Client[];\n duration: number;\n totalBytesSent: number;\n totalBytesReceived: number;\n droppedPackets: number;\n}\n\n/**\n * Creates a mock rate limiter for bandwidth testing\n * @param bytesPerSecond - Maximum bytes per second allowed\n */\nexport function createMockRateLimiter(bytesPerSecond: number): RateLimiter {\n let bucket = bytesPerSecond;\n const maxBucket = bytesPerSecond; // Max burst size equal to 1 second of bandwidth\n let usage = 0;\n\n return {\n bytesPerSecond,\n allow(bytes: number): boolean {\n if (bucket >= bytes) {\n bucket -= bytes;\n usage += bytes;\n return true;\n }\n return false;\n },\n update(deltaSeconds: number): void {\n bucket += bytesPerSecond * deltaSeconds;\n if (bucket > maxBucket) {\n bucket = maxBucket;\n }\n },\n reset(): void {\n bucket = maxBucket;\n usage = 0;\n },\n getUsage(): number {\n return usage;\n }\n };\n}\n\n/**\n * Simulates bandwidth limiting on a stream of messages\n * @param messages - Array of messages to process\n * @param bandwidth - Bandwidth limit in bytes per second\n * @returns Filtered array of messages that passed the bandwidth check\n */\nexport function simulateBandwidthLimit(messages: Message[], bandwidth: number): Message[] {\n const limiter = createMockRateLimiter(bandwidth);\n const result: Message[] = [];\n let lastTime = messages.length > 0 ? messages[0].timestamp : 0;\n\n for (const msg of messages) {\n const delta = (msg.timestamp - lastTime) / 1000;\n if (delta > 0) {\n limiter.update(delta);\n }\n lastTime = msg.timestamp;\n\n if (limiter.allow(msg.size)) {\n result.push(msg);\n }\n }\n\n return result;\n}\n\n/**\n * Calculates the size of a client snapshot in bytes\n * @param snapshot - The client frame snapshot\n */\nexport function measureSnapshotSize(snapshot: ClientFrame): number {\n let size = 0;\n\n // Area bits\n size += snapshot.areaBytes;\n\n // Player state (approximate based on struct size or serialization)\n // This is an estimation, as actual network serialization compresses this\n size += 200; // Baseline size for PlayerState\n\n // Entities\n // Each EntityState is approx 20-30 bytes compressed\n size += snapshot.entities.length * 20;\n\n return size;\n}\n\n/**\n * Creates a scenario for testing bandwidth limits with multiple clients\n * @param bandwidth - Bandwidth limit per client or total\n * @param numClients - Number of clients to simulate\n */\nexport function createBandwidthTestScenario(bandwidth: number, numClients: number): BandwidthScenario {\n const clients: Client[] = [];\n // Populate with mock clients if needed (currently creating dummy objects to satisfy type)\n // In a real scenario we might use createClient factory but that requires net driver\n // For now we assume caller will populate fully or we return empty array if 0\n\n return {\n bandwidth,\n clients,\n duration: 0,\n totalBytesSent: 0,\n totalBytesReceived: 0,\n droppedPackets: 0\n };\n}\n","import { JSDOM } from 'jsdom';\nimport { Canvas, Image, ImageData } from '@napi-rs/canvas';\nimport 'fake-indexeddb/auto';\nimport { MockPointerLock } from '../client/mocks/input.js';\nimport { createMockWebGL2Context } from './webgl.js';\n\nexport interface BrowserSetupOptions {\n url?: string;\n pretendToBeVisual?: boolean;\n resources?: \"usable\";\n enableWebGL2?: boolean;\n enablePointerLock?: boolean;\n}\n\n/**\n * Sets up a browser environment for testing using JSDOM and napi-rs/canvas.\n * This should be called in your vitest.setup.ts file.\n */\nexport function setupBrowserEnvironment(options: BrowserSetupOptions = {}) {\n const {\n url = 'http://localhost',\n pretendToBeVisual = true,\n resources = undefined,\n enableWebGL2 = false,\n enablePointerLock = false\n } = options;\n\n // Create a JSDOM instance\n const dom = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>', {\n url,\n pretendToBeVisual,\n resources: resources as any\n });\n\n // Set up global variables\n global.window = dom.window as any;\n global.document = dom.window.document;\n\n // Polyfill global DOM Constructors\n global.Document = dom.window.Document;\n global.Element = dom.window.Element;\n global.Node = dom.window.Node;\n\n // Handle navigator assignment safely\n try {\n // @ts-ignore\n global.navigator = dom.window.navigator;\n } catch (e) {\n try {\n Object.defineProperty(global, 'navigator', {\n value: dom.window.navigator,\n writable: true,\n configurable: true\n });\n } catch (e2) {\n console.warn('Could not assign global.navigator, skipping.');\n }\n }\n\n global.location = dom.window.location;\n global.HTMLElement = dom.window.HTMLElement;\n global.HTMLCanvasElement = dom.window.HTMLCanvasElement;\n\n // Polyfill global Event constructors\n global.Event = dom.window.Event;\n global.CustomEvent = dom.window.CustomEvent;\n global.DragEvent = dom.window.DragEvent as any;\n global.MouseEvent = dom.window.MouseEvent;\n global.KeyboardEvent = dom.window.KeyboardEvent;\n global.FocusEvent = dom.window.FocusEvent;\n global.WheelEvent = dom.window.WheelEvent;\n global.InputEvent = dom.window.InputEvent;\n global.UIEvent = dom.window.UIEvent;\n\n // Setup Storage mocks\n try {\n global.localStorage = dom.window.localStorage;\n } catch (e) {\n // Ignore if it fails\n }\n\n if (!global.localStorage) {\n const storage = new Map<string, string>();\n global.localStorage = {\n getItem: (key: string) => storage.get(key) || null,\n setItem: (key: string, value: string) => storage.set(key, value),\n removeItem: (key: string) => storage.delete(key),\n clear: () => storage.clear(),\n key: (index: number) => Array.from(storage.keys())[index] || null,\n get length() { return storage.size; }\n } as Storage;\n }\n\n // Override document.createElement for canvas elements\n const originalCreateElement = document.createElement.bind(document);\n document.createElement = function (tagName: string, options?: any) {\n if (tagName.toLowerCase() === 'canvas') {\n const napiCanvas = new Canvas(300, 150);\n const domCanvas = originalCreateElement('canvas', options);\n\n Object.defineProperty(domCanvas, 'width', {\n get: () => napiCanvas.width,\n set: (value) => { napiCanvas.width = value; },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(domCanvas, 'height', {\n get: () => napiCanvas.height,\n set: (value) => { napiCanvas.height = value; },\n enumerable: true,\n configurable: true\n });\n\n const originalGetContext = domCanvas.getContext.bind(domCanvas);\n domCanvas.getContext = function(contextId: string, options?: any) {\n if (contextId === '2d') {\n return napiCanvas.getContext('2d', options);\n }\n\n if (enableWebGL2 && contextId === 'webgl2') {\n return createMockWebGL2Context(domCanvas as HTMLCanvasElement);\n }\n\n if (contextId === 'webgl' || contextId === 'webgl2') {\n return originalGetContext(contextId, options);\n }\n return napiCanvas.getContext(contextId as any, options);\n } as any;\n\n (domCanvas as any).__napiCanvas = napiCanvas;\n\n return domCanvas;\n }\n return originalCreateElement(tagName, options);\n } as any;\n\n if (enableWebGL2) {\n const originalProtoGetContext = global.HTMLCanvasElement.prototype.getContext;\n global.HTMLCanvasElement.prototype.getContext = function (\n contextId: string,\n options?: any\n ): any {\n if (contextId === 'webgl2') {\n return createMockWebGL2Context(this);\n }\n // @ts-ignore\n return originalProtoGetContext.call(this, contextId as any, options);\n };\n }\n\n global.Image = Image as any;\n global.ImageData = ImageData as any;\n\n if (typeof global.createImageBitmap === 'undefined') {\n global.createImageBitmap = async function (\n image: any,\n _options?: ImageBitmapOptions\n ): Promise<any> {\n if (image && typeof image.width === 'number' && typeof image.height === 'number') {\n const canvas = new Canvas(image.width, image.height);\n const ctx = canvas.getContext('2d');\n if (image.data) {\n ctx.putImageData(image as any, 0, 0);\n }\n return canvas;\n }\n const canvas = new Canvas(100, 100);\n return canvas;\n } as unknown as any;\n }\n\n if (typeof global.btoa === 'undefined') {\n global.btoa = function (str: string): string {\n return Buffer.from(str, 'binary').toString('base64');\n };\n }\n\n if (typeof global.atob === 'undefined') {\n global.atob = function (str: string): string {\n return Buffer.from(str, 'base64').toString('binary');\n };\n }\n\n if (enablePointerLock) {\n new MockPointerLock(global.document);\n }\n\n if (typeof global.requestAnimationFrame === 'undefined') {\n let lastTime = 0;\n global.requestAnimationFrame = (callback: FrameRequestCallback) => {\n const currTime = Date.now();\n const timeToCall = Math.max(0, 16 - (currTime - lastTime));\n const id = setTimeout(() => {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id as unknown as number;\n };\n\n global.cancelAnimationFrame = (id: number) => {\n clearTimeout(id);\n };\n }\n}\n\n/**\n * Cleans up the browser environment.\n */\nexport function teardownBrowserEnvironment() {\n // @ts-ignore\n delete global.window;\n // @ts-ignore\n delete global.document;\n // @ts-ignore\n delete global.navigator;\n // @ts-ignore\n delete global.localStorage;\n // @ts-ignore\n delete global.location;\n // @ts-ignore\n delete global.HTMLElement;\n // @ts-ignore\n delete global.HTMLCanvasElement;\n // @ts-ignore\n delete global.Image;\n // @ts-ignore\n delete global.ImageData;\n // @ts-ignore\n delete global.createImageBitmap;\n // @ts-ignore\n delete global.Event;\n // @ts-ignore\n delete global.CustomEvent;\n // @ts-ignore\n delete global.DragEvent;\n // @ts-ignore\n delete global.MouseEvent;\n // @ts-ignore\n delete global.KeyboardEvent;\n // @ts-ignore\n delete global.FocusEvent;\n // @ts-ignore\n delete global.WheelEvent;\n // @ts-ignore\n delete global.InputEvent;\n // @ts-ignore\n delete global.UIEvent;\n}\n","\n/**\n * Client Input System Mocks\n *\n * Provides utilities for simulating user input (keyboard, mouse, pointer lock)\n * in a test environment (JSDOM/Browser).\n */\n\nexport interface KeyModifiers {\n ctrl?: boolean;\n alt?: boolean;\n shift?: boolean;\n meta?: boolean;\n}\n\n/**\n * Factory for creating a mock KeyboardEvent.\n */\nexport function createMockKeyboardEvent(key: string, type: 'keydown' | 'keyup' = 'keydown', modifiers: KeyModifiers = {}): KeyboardEvent {\n return new KeyboardEvent(type, {\n key,\n code: key, // Default code to key if not specified (caller can override property if needed)\n ctrlKey: modifiers.ctrl,\n altKey: modifiers.alt,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n bubbles: true,\n cancelable: true,\n view: window\n });\n}\n\n/**\n * Factory for creating a mock MouseEvent with support for movementX/Y.\n */\nexport function createMockMouseEvent(type: string, options: MouseEventInit = {}): MouseEvent {\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window,\n ...options\n });\n\n // Patch movementX/Y if needed as JSDOM MouseEvent might not initialize them from options\n if (options.movementX !== undefined) {\n Object.defineProperty(event, 'movementX', { value: options.movementX });\n }\n if (options.movementY !== undefined) {\n Object.defineProperty(event, 'movementY', { value: options.movementY });\n }\n\n return event;\n}\n\n/**\n * Factory for creating a mock WheelEvent.\n */\nexport function createMockWheelEvent(deltaX: number = 0, deltaY: number = 0): WheelEvent {\n return new WheelEvent('wheel', {\n deltaX,\n deltaY,\n bubbles: true,\n cancelable: true,\n view: window\n });\n}\n\n/**\n * Class implementing a mock for the Pointer Lock API.\n * Handles patching the document and element prototypes to simulate pointer lock.\n */\nexport class MockPointerLock {\n private _doc: Document;\n\n constructor(doc: Document = document) {\n this._doc = doc;\n this.setup();\n }\n\n private setup() {\n // Check if already patched to avoid conflicts\n if ((this._doc as any).__mockPointerLockInstalled) return;\n\n let _pointerLockElement: Element | null = null;\n const doc = this._doc;\n\n // Patch document.pointerLockElement\n Object.defineProperty(doc, 'pointerLockElement', {\n get: () => _pointerLockElement,\n configurable: true\n });\n\n // Patch document.exitPointerLock\n doc.exitPointerLock = () => {\n if (_pointerLockElement) {\n _pointerLockElement = null;\n doc.dispatchEvent(new Event('pointerlockchange'));\n }\n };\n\n // Patch HTMLElement.prototype.requestPointerLock\n // Save original if needed, but in JSDOM it might not exist or do nothing\n if (!(global.HTMLElement.prototype as any).__originalRequestPointerLock) {\n (global.HTMLElement.prototype as any).__originalRequestPointerLock = (global.HTMLElement.prototype as any).requestPointerLock;\n }\n\n (global.HTMLElement.prototype as any).requestPointerLock = function() {\n _pointerLockElement = this;\n doc.dispatchEvent(new Event('pointerlockchange'));\n };\n\n (doc as any).__mockPointerLockInstalled = true;\n }\n\n get element(): Element | null {\n return this._doc.pointerLockElement;\n }\n\n get locked(): boolean {\n return !!this.element;\n }\n\n request(element: HTMLElement) {\n element.requestPointerLock();\n }\n\n exit() {\n this._doc.exitPointerLock();\n }\n\n isLocked(): boolean {\n return this.locked;\n }\n}\n\n/**\n * Class for simulating input events.\n */\nexport class InputInjector {\n constructor(private doc: Document = document, private win: Window = window) {}\n\n keyDown(key: string, code?: string, modifiers?: KeyModifiers) {\n const event = createMockKeyboardEvent(key, 'keydown', modifiers);\n if (code) {\n Object.defineProperty(event, 'code', { value: code });\n }\n this.doc.dispatchEvent(event);\n }\n\n keyUp(key: string, code?: string, modifiers?: KeyModifiers) {\n const event = createMockKeyboardEvent(key, 'keyup', modifiers);\n if (code) {\n Object.defineProperty(event, 'code', { value: code });\n }\n this.doc.dispatchEvent(event);\n }\n\n mouseMove(movementX: number, movementY: number, clientX = 0, clientY = 0) {\n const event = createMockMouseEvent('mousemove', {\n clientX,\n clientY,\n movementX,\n movementY\n });\n this.dispatchToTarget(event);\n }\n\n mouseButton(button: number, state: 'down' | 'up' = 'down') {\n if (state === 'down') {\n this.mouseDown(button);\n } else {\n this.mouseUp(button);\n }\n }\n\n mouseDown(button: number = 0) {\n const event = createMockMouseEvent('mousedown', { button });\n this.dispatchToTarget(event);\n }\n\n mouseUp(button: number = 0) {\n const event = createMockMouseEvent('mouseup', { button });\n this.dispatchToTarget(event);\n }\n\n mouseWheel(deltaY: number) {\n const event = createMockWheelEvent(0, deltaY);\n this.dispatchToTarget(event);\n }\n\n // Alias for backward compatibility/ease of use\n wheel(deltaY: number) {\n this.mouseWheel(deltaY);\n }\n\n private dispatchToTarget(event: Event) {\n const target = this.doc.pointerLockElement || this.doc;\n target.dispatchEvent(event);\n }\n}\n\n/**\n * An implementation of InputSource that listens to DOM events.\n * Useful for tests that want to verify interaction with real/mocked DOM events.\n */\nexport class BrowserInputSource {\n constructor(private target: EventTarget = document) {}\n\n on(event: string, handler: Function): void {\n if (event === 'keydown' || event === 'keyup') {\n this.target.addEventListener(event, (e: any) => {\n handler(e.code);\n });\n } else if (event === 'mousedown' || event === 'mouseup') {\n this.target.addEventListener(event, (e: any) => {\n handler(e.button);\n });\n } else if (event === 'mousemove') {\n this.target.addEventListener(event, (e: any) => {\n handler(e.movementX, e.movementY);\n });\n }\n }\n}\n\n/**\n * Factory for creating a MockPointerLock instance.\n */\nexport function createMockPointerLock(element?: HTMLElement): MockPointerLock {\n const mock = new MockPointerLock();\n if (element) {\n mock.request(element);\n }\n return mock;\n}\n\n/**\n * Factory for creating an InputInjector.\n */\nexport function createInputInjector(target?: EventTarget): InputInjector {\n // If target is provided and is a Document, use it.\n // Otherwise default to global document.\n const isDocument = typeof Document !== 'undefined' && target instanceof Document;\n const doc = isDocument ? target : (typeof document !== 'undefined' ? document : {} as Document);\n const win = (doc.defaultView) ? doc.defaultView : (typeof window !== 'undefined' ? window : {} as Window);\n return new InputInjector(doc, win);\n}\n","import { vi } from 'vitest';\nimport { legacyFn } from '../../vitest-compat.js';\n\ninterface ShaderRecord {\n readonly id: number;\n readonly type: GLenum;\n}\n\ninterface ProgramRecord {\n readonly id: number;\n}\n\nexport class MockWebGL2RenderingContext {\n readonly ARRAY_BUFFER = 0x8892;\n readonly ELEMENT_ARRAY_BUFFER = 0x8893;\n readonly STATIC_DRAW = 0x88e4;\n readonly DYNAMIC_DRAW = 0x88e8;\n readonly FLOAT = 0x1406;\n readonly UNSIGNED_SHORT = 0x1403;\n readonly TEXTURE_2D = 0x0de1;\n readonly TEXTURE_CUBE_MAP = 0x8513;\n readonly TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;\n readonly TEXTURE0 = 0x84c0;\n readonly TEXTURE_WRAP_S = 0x2802;\n readonly TEXTURE_WRAP_T = 0x2803;\n readonly TEXTURE_MIN_FILTER = 0x2801;\n readonly TEXTURE_MAG_FILTER = 0x2800;\n readonly LINEAR = 0x2601;\n readonly NEAREST = 0x2600;\n readonly CLAMP_TO_EDGE = 0x812f;\n readonly RGBA = 0x1908;\n readonly UNSIGNED_BYTE = 0x1401;\n readonly FRAMEBUFFER = 0x8d40;\n readonly COLOR_ATTACHMENT0 = 0x8ce0;\n readonly DEPTH_ATTACHMENT = 0x8d00;\n readonly RENDERBUFFER = 0x8d41;\n readonly DEPTH_COMPONENT24 = 0x81a6;\n readonly FRAMEBUFFER_COMPLETE = 0x8cd5;\n readonly TRIANGLES = 0x0004;\n readonly DEPTH_TEST = 0x0b71;\n readonly CULL_FACE = 0x0b44;\n readonly BLEND = 0x0be2;\n readonly SRC_ALPHA = 0x0302;\n readonly ONE_MINUS_SRC_ALPHA = 0x0303;\n readonly ONE = 1;\n readonly BACK = 0x0405;\n readonly LEQUAL = 0x0203;\n readonly VERTEX_SHADER = 0x8b31;\n readonly FRAGMENT_SHADER = 0x8b30;\n readonly COMPILE_STATUS = 0x8b81;\n readonly LINK_STATUS = 0x8b82;\n readonly ONE_MINUS_SRC_COLOR = 0x0301;\n readonly TRIANGLE_STRIP = 0x0005;\n readonly QUERY_RESULT_AVAILABLE = 0x8867;\n readonly QUERY_RESULT = 0x8866;\n\n // Constants commonly used in setup/webgl.ts\n readonly TRIANGLE_FAN = 0x0006;\n readonly COLOR_BUFFER_BIT = 0x4000;\n readonly DEPTH_BUFFER_BIT = 0x0100;\n\n readonly canvas: HTMLCanvasElement | { width: number; height: number };\n readonly drawingBufferWidth: number;\n readonly drawingBufferHeight: number;\n\n private shaderCounter = 0;\n private programCounter = 0;\n\n compileSucceeds = true;\n linkSucceeds = true;\n shaderInfoLog = 'shader failed';\n programInfoLog = 'program failed';\n\n readonly extensions = new Map<string, unknown>();\n readonly calls: string[] = [];\n readonly uniformLocations = new Map<string, WebGLUniformLocation | null>();\n readonly attributeLocations = new Map<string, number>();\n\n constructor(canvas?: HTMLCanvasElement) {\n if (canvas) {\n this.canvas = canvas;\n this.drawingBufferWidth = canvas.width;\n this.drawingBufferHeight = canvas.height;\n } else {\n this.canvas = { width: 800, height: 600 };\n this.drawingBufferWidth = 800;\n this.drawingBufferHeight = 600;\n }\n }\n\n enable = vi.fn((cap: GLenum) => this.calls.push(`enable:${cap}`));\n disable = vi.fn((cap: GLenum) => this.calls.push(`disable:${cap}`));\n depthFunc = vi.fn((func: GLenum) => this.calls.push(`depthFunc:${func}`));\n cullFace = vi.fn((mode: GLenum) => this.calls.push(`cullFace:${mode}`));\n depthMask = vi.fn((flag: GLboolean) => this.calls.push(`depthMask:${flag}`));\n blendFuncSeparate = vi.fn((srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum) =>\n this.calls.push(`blendFuncSeparate:${srcRGB}:${dstRGB}:${srcAlpha}:${dstAlpha}`)\n );\n blendFunc = vi.fn((sfactor: GLenum, dfactor: GLenum) => this.calls.push(`blendFunc:${sfactor}:${dfactor}`));\n getExtension = vi.fn((name: string) => this.extensions.get(name) ?? null);\n viewport = vi.fn((x: number, y: number, w: number, h: number) => this.calls.push(`viewport:${x}:${y}:${w}:${h}`));\n clear = vi.fn((mask: number) => this.calls.push(`clear:${mask}`));\n clearColor = vi.fn((r: number, g: number, b: number, a: number) => this.calls.push(`clearColor:${r}:${g}:${b}:${a}`));\n\n createShader = vi.fn((type: GLenum) => ({ id: ++this.shaderCounter, type } as unknown as WebGLShader));\n shaderSource = vi.fn((shader: ShaderRecord, source: string) => this.calls.push(`shaderSource:${shader.id}:${source}`));\n compileShader = vi.fn((shader: ShaderRecord) => this.calls.push(`compileShader:${shader.id}`));\n getShaderParameter = vi.fn((shader: ShaderRecord, pname: GLenum) =>\n pname === this.COMPILE_STATUS ? this.compileSucceeds : null\n );\n getShaderInfoLog = vi.fn(() => (this.compileSucceeds ? '' : this.shaderInfoLog));\n deleteShader = vi.fn((shader: ShaderRecord) => this.calls.push(`deleteShader:${shader.id}`));\n\n createProgram = vi.fn(() => ({ id: ++this.programCounter } as unknown as WebGLProgram));\n attachShader = vi.fn((program: ProgramRecord, shader: ShaderRecord) =>\n this.calls.push(`attach:${program.id}:${shader.id}`)\n );\n bindAttribLocation = vi.fn((program: ProgramRecord, index: number, name: string) =>\n this.calls.push(`bindAttribLocation:${program.id}:${index}:${name}`)\n );\n linkProgram = vi.fn((program: ProgramRecord) => this.calls.push(`link:${program.id}`));\n getProgramParameter = vi.fn((program: ProgramRecord, pname: GLenum) =>\n pname === this.LINK_STATUS ? this.linkSucceeds : null\n );\n getProgramInfoLog = vi.fn(() => (this.linkSucceeds ? '' : this.programInfoLog));\n deleteProgram = vi.fn((program: ProgramRecord) => this.calls.push(`deleteProgram:${program.id}`));\n useProgram = vi.fn((program: ProgramRecord | null) => this.calls.push(`useProgram:${program?.id ?? 'null'}`));\n getUniformLocation = vi.fn((program: ProgramRecord, name: string) => {\n this.calls.push(`getUniformLocation:${program.id}:${name}`);\n return this.uniformLocations.get(name) ?? null;\n });\n getAttribLocation = vi.fn((program: ProgramRecord, name: string) => {\n this.calls.push(`getAttribLocation:${program.id}:${name}`);\n return this.attributeLocations.get(name) ?? -1;\n });\n\n createBuffer = vi.fn(() => ({ buffer: {} } as unknown as WebGLBuffer));\n bindBuffer = vi.fn((target: GLenum, buffer: WebGLBuffer | null) => this.calls.push(`bindBuffer:${target}:${!!buffer}`));\n bufferData = vi.fn((target: GLenum, data: number | BufferSource, usage: GLenum) =>\n this.calls.push(`bufferData:${target}:${usage}:${typeof data === 'number' ? data : 'data'}`)\n );\n bufferSubData = vi.fn((target: GLenum, offset: number, data: BufferSource) =>\n this.calls.push(`bufferSubData:${target}:${offset}:${data.byteLength ?? 'len'}`)\n );\n deleteBuffer = vi.fn((buffer: WebGLBuffer) => this.calls.push(`deleteBuffer:${!!buffer}`));\n\n createVertexArray = vi.fn(() => ({ vao: {} } as unknown as WebGLVertexArrayObject));\n bindVertexArray = vi.fn((vao: WebGLVertexArrayObject | null) => this.calls.push(`bindVertexArray:${!!vao}`));\n enableVertexAttribArray = vi.fn((index: number) => this.calls.push(`enableAttrib:${index}`));\n vertexAttribPointer = vi.fn(\n (index: number, size: number, type: GLenum, normalized: boolean, stride: number, offset: number) =>\n this.calls.push(`vertexAttribPointer:${index}:${size}:${type}:${normalized}:${stride}:${offset}`)\n );\n vertexAttribDivisor = vi.fn((index: number, divisor: number) => this.calls.push(`divisor:${index}:${divisor}`));\n deleteVertexArray = vi.fn((vao: WebGLVertexArrayObject) => this.calls.push(`deleteVertexArray:${!!vao}`));\n\n createTexture = vi.fn(() => ({ texture: {} } as unknown as WebGLTexture));\n activeTexture = vi.fn((unit: GLenum) => this.calls.push(`activeTexture:${unit}`));\n bindTexture = vi.fn((target: GLenum, texture: WebGLTexture | null) => this.calls.push(`bindTexture:${target}:${!!texture}`));\n texParameteri = vi.fn((target: GLenum, pname: GLenum, param: GLint) =>\n this.calls.push(`texParameteri:${target}:${pname}:${param}`)\n );\n texImage2D = vi.fn(\n (\n target: GLenum,\n level: GLint,\n internalFormat: GLenum,\n width: GLsizei,\n height: GLsizei,\n border: GLint,\n format: GLenum,\n type: GLenum,\n pixels: ArrayBufferView | null\n ) =>\n this.calls.push(\n `texImage2D:${target}:${level}:${internalFormat}:${width}:${height}:${border}:${format}:${type}:${pixels ? 'data' : 'null'}`\n )\n );\n\n // Explicitly typing this one with legacyFn or manually typing it to avoid inference errors\n texImage3D = legacyFn<[GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, ArrayBufferView | null], void>();\n\n deleteTexture = vi.fn((texture: WebGLTexture) => this.calls.push(`deleteTexture:${!!texture}`));\n\n createFramebuffer = vi.fn(() => ({ fb: {} } as unknown as WebGLFramebuffer));\n bindFramebuffer = vi.fn((target: GLenum, framebuffer: WebGLFramebuffer | null) =>\n this.calls.push(`bindFramebuffer:${target}:${!!framebuffer}`)\n );\n framebufferTexture2D = vi.fn(\n (target: GLenum, attachment: GLenum, textarget: GLenum, texture: WebGLTexture | null, level: GLint) =>\n this.calls.push(`framebufferTexture2D:${target}:${attachment}:${textarget}:${!!texture}:${level}`)\n );\n deleteFramebuffer = vi.fn((fb: WebGLFramebuffer) => this.calls.push(`deleteFramebuffer:${!!fb}`));\n checkFramebufferStatus = vi.fn((target: GLenum) => this.FRAMEBUFFER_COMPLETE);\n\n createRenderbuffer = vi.fn(() => ({ rb: {} } as unknown as WebGLRenderbuffer));\n bindRenderbuffer = vi.fn((target: GLenum, renderbuffer: WebGLRenderbuffer | null) =>\n this.calls.push(`bindRenderbuffer:${target}:${!!renderbuffer}`)\n );\n renderbufferStorage = vi.fn((target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei) =>\n this.calls.push(`renderbufferStorage:${target}:${internalformat}:${width}:${height}`)\n );\n framebufferRenderbuffer = vi.fn((target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: WebGLRenderbuffer | null) =>\n this.calls.push(`framebufferRenderbuffer:${target}:${attachment}:${renderbuffertarget}:${!!renderbuffer}`)\n );\n deleteRenderbuffer = vi.fn((rb: WebGLRenderbuffer) => this.calls.push(`deleteRenderbuffer:${!!rb}`));\n\n drawArrays = vi.fn((mode: GLenum, first: GLint, count: GLsizei) =>\n this.calls.push(`drawArrays:${mode}:${first}:${count}`)\n );\n\n drawElements = vi.fn((mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr) =>\n this.calls.push(`drawElements:${mode}:${count}:${type}:${offset}`)\n );\n\n // Queries\n createQuery = vi.fn(() => ({}) as WebGLQuery);\n beginQuery = legacyFn<[GLenum], void>();\n endQuery = legacyFn<[GLenum], void>();\n deleteQuery = legacyFn<[WebGLQuery | null], void>();\n getQueryParameter = legacyFn<[WebGLQuery, GLenum], any>();\n getParameter = legacyFn<[GLenum], any>();\n\n uniform1f = vi.fn((location: WebGLUniformLocation | null, x: GLfloat) =>\n this.calls.push(`uniform1f:${location ? 'set' : 'null'}:${x}`)\n );\n uniform1i = vi.fn((location: WebGLUniformLocation | null, x: GLint) =>\n this.calls.push(`uniform1i:${location ? 'set' : 'null'}:${x}`)\n );\n uniform4f = vi.fn((location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat) =>\n this.calls.push(`uniform4f:${location ? 'set' : 'null'}:${x}:${y}:${z}:${w}`)\n );\n uniform3fv = vi.fn((location: WebGLUniformLocation | null, data: Float32List | number[]) =>\n this.calls.push(`uniform3fv:${location ? 'set' : 'null'}:${Array.from(data as Iterable<number>).join(',')}`)\n );\n uniform3f = vi.fn((location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat) =>\n this.calls.push(`uniform3f:${location ? 'set' : 'null'}:${x}:${y}:${z}`)\n );\n uniform2f = vi.fn((location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat) =>\n this.calls.push(`uniform2f:${location ? 'set' : 'null'}:${x}:${y}`)\n );\n uniform4fv = vi.fn((location: WebGLUniformLocation | null, data: Float32List) =>\n this.calls.push(`uniform4fv:${location ? 'set' : 'null'}:${Array.from(data as Iterable<number>).join(',')}`)\n );\n uniformMatrix4fv = vi.fn(\n (location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List | Iterable<number>) =>\n this.calls.push(`uniformMatrix4fv:${location ? 'set' : 'null'}:${transpose}:${Array.from(data as Iterable<number>).join(',')}`)\n );\n\n uniformBlockBinding = legacyFn<[WebGLProgram, number, number], void>();\n\n isContextLost = vi.fn(() => false);\n}\n\nexport function createMockWebGL2Context(\n overridesOrCanvas?: Partial<WebGL2RenderingContext> | HTMLCanvasElement\n): MockWebGL2RenderingContext {\n let context: MockWebGL2RenderingContext;\n\n if (overridesOrCanvas instanceof Object && 'width' in overridesOrCanvas && 'height' in overridesOrCanvas && 'getContext' in overridesOrCanvas) {\n // It's likely a canvas element (or mock of it)\n context = new MockWebGL2RenderingContext(overridesOrCanvas as HTMLCanvasElement);\n } else {\n context = new MockWebGL2RenderingContext();\n if (overridesOrCanvas) {\n Object.assign(context, overridesOrCanvas);\n }\n }\n\n return context;\n}\n","import { Canvas, ImageData } from '@napi-rs/canvas';\nimport { createMockWebGL2Context } from '../engine/mocks/webgl.js';\n\n/**\n * Creates a mock HTMLCanvasElement backed by napi-rs/canvas,\n * with support for both 2D and WebGL2 contexts.\n */\nexport function createMockCanvas(width: number = 300, height: number = 150): HTMLCanvasElement {\n // Use a real JSDOM canvas if available in the environment (setupBrowserEnvironment)\n if (typeof document !== 'undefined' && document.createElement) {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n // Fallback for non-JSDOM environments or specialized testing\n const napiCanvas = new Canvas(width, height);\n const canvas = {\n width,\n height,\n getContext: (contextId: string, options?: any) => {\n if (contextId === '2d') {\n return napiCanvas.getContext('2d', options);\n }\n if (contextId === 'webgl2') {\n return createMockWebGL2Context(canvas as any);\n }\n return null;\n },\n toDataURL: () => napiCanvas.toDataURL(),\n toBuffer: (mime: any) => napiCanvas.toBuffer(mime),\n // Add other properties as needed\n } as unknown as HTMLCanvasElement;\n\n return canvas;\n}\n\n/**\n * Creates a mock CanvasRenderingContext2D.\n */\nexport function createMockCanvasContext2D(canvas?: HTMLCanvasElement): CanvasRenderingContext2D {\n const c = canvas || createMockCanvas();\n const ctx = c.getContext('2d');\n if (!ctx) {\n throw new Error('Failed to create 2D context');\n }\n return ctx as CanvasRenderingContext2D;\n}\n\n/**\n * Information about a captured draw call.\n */\nexport interface DrawCall {\n method: string;\n args: any[];\n}\n\n/**\n * Wraps a CanvasRenderingContext2D to capture all method calls.\n */\nexport function captureCanvasDrawCalls(context: CanvasRenderingContext2D): DrawCall[] {\n const calls: DrawCall[] = [];\n const proto = Object.getPrototypeOf(context);\n\n // Iterate over all properties of the context prototype\n for (const key of Object.getOwnPropertyNames(proto)) {\n const value = (context as any)[key];\n if (typeof value === 'function') {\n // Override function\n (context as any)[key] = function(...args: any[]) {\n calls.push({ method: key, args });\n return value.apply(context, args);\n };\n }\n }\n\n return calls;\n}\n\n/**\n * Creates a mock ImageData object.\n */\nexport function createMockImageData(width: number, height: number, fillColor?: [number, number, number, number]): ImageData {\n // Check if global ImageData is available (polyfilled by setupBrowserEnvironment)\n if (typeof global.ImageData !== 'undefined') {\n const data = new Uint8ClampedArray(width * height * 4);\n if (fillColor) {\n for (let i = 0; i < data.length; i += 4) {\n data[i] = fillColor[0];\n data[i + 1] = fillColor[1];\n data[i + 2] = fillColor[2];\n data[i + 3] = fillColor[3];\n }\n }\n return new global.ImageData(data, width, height) as unknown as ImageData;\n }\n\n // Fallback if not globally available, though it should be with @napi-rs/canvas\n const data = new Uint8ClampedArray(width * height * 4);\n if (fillColor) {\n for (let i = 0; i < data.length; i += 4) {\n data[i] = fillColor[0];\n data[i + 1] = fillColor[1];\n data[i + 2] = fillColor[2];\n data[i + 3] = fillColor[3];\n }\n }\n return new ImageData(data, width, height);\n}\n\n/**\n * Creates a mock HTMLImageElement.\n */\nexport function createMockImage(width: number = 100, height: number = 100, src: string = ''): HTMLImageElement {\n if (typeof document !== 'undefined' && document.createElement) {\n const img = document.createElement('img');\n img.width = width;\n img.height = height;\n if (src) img.src = src;\n return img;\n }\n\n // Fallback\n const img = {\n width,\n height,\n src,\n complete: true,\n onload: null,\n onerror: null,\n } as unknown as HTMLImageElement;\n\n // Simulate async load if src is provided\n if (src) {\n setTimeout(() => {\n if (img.onload) (img.onload as any)();\n }, 0);\n }\n\n return img;\n}\n","\n// Types for our setup\nexport interface HeadlessWebGPUSetup {\n adapter: GPUAdapter;\n device: GPUDevice;\n cleanup: () => Promise<void>;\n}\n\nexport interface WebGPUContextState {\n adapter: GPUAdapter;\n device: GPUDevice;\n queue: GPUQueue;\n format: GPUTextureFormat;\n}\n\n/**\n * Initialize WebGPU in a headless Node.js environment using @webgpu/dawn (via webgpu package)\n */\nexport async function initHeadlessWebGPU(\n options?: {\n powerPreference?: 'low-power' | 'high-performance';\n requiredFeatures?: GPUFeatureName[];\n }\n): Promise<HeadlessWebGPUSetup> {\n // Check if we are in Node.js environment\n if (typeof process === 'undefined' || process.release?.name !== 'node') {\n throw new Error('initHeadlessWebGPU should only be called in a Node.js environment');\n }\n\n // Dynamic import to avoid hard dependency\n let create, globals;\n try {\n const webgpu = await import('webgpu');\n create = webgpu.create;\n globals = webgpu.globals;\n } catch (e) {\n throw new Error(`Failed to load \"webgpu\" package. Please ensure it is installed. Original error: ${e}`);\n }\n\n // Inject WebGPU globals into globalThis if not already present\n // Note: we need to handle navigator specifically as it might be read-only in some envs (like jsdom)\n // or simply missing.\n if (!globalThis.navigator) {\n // @ts-ignore\n globalThis.navigator = {};\n }\n\n if (!globalThis.navigator.gpu) {\n // Create the GPU instance using the 'webgpu' package's create function\n // This is more robust than relying on 'globals' if 'globals' expects a clean environment\n const gpu = create([]);\n\n try {\n Object.defineProperty(globalThis.navigator, 'gpu', {\n value: gpu,\n writable: true,\n configurable: true\n });\n } catch (e) {\n // Fallback if defineProperty fails (e.g. read-only navigator in strict mode)\n // But usually in tests we can modify it.\n // If we are in JSDOM, navigator might be tricky.\n console.warn('Could not define navigator.gpu, trying direct assignment');\n // @ts-ignore\n globalThis.navigator.gpu = gpu;\n }\n\n // Also inject other globals like GPUAdapter, GPUDevice etc.\n Object.assign(globalThis, globals);\n }\n\n // Request Adapter\n const adapter = await navigator.gpu.requestAdapter({\n powerPreference: options?.powerPreference || 'high-performance',\n });\n\n if (!adapter) {\n throw new Error('Failed to create WebGPU adapter');\n }\n\n // Request Device\n const device = await adapter.requestDevice({\n requiredFeatures: options?.requiredFeatures || [],\n });\n\n if (!device) {\n throw new Error('Failed to create WebGPU device');\n }\n\n return {\n adapter,\n device,\n cleanup: async () => {\n device.destroy();\n // 'webgpu' package doesn't expose a way to explicitly destroy the adapter or the global instance\n // cleanly other than letting it be garbage collected or process exit.\n // However, destroying the device is usually sufficient for tests.\n }\n };\n}\n\n/**\n * Creates a complete context state for testing\n */\nexport async function createHeadlessTestContext(): Promise<WebGPUContextState> {\n const { adapter, device } = await initHeadlessWebGPU();\n return {\n adapter,\n device,\n queue: device.queue,\n format: 'rgba8unorm'\n };\n}\n","// Remove top-level import to avoid runtime crash when gl is missing\n// import createGL from 'gl';\nimport type { WebGLContextState } from '@quake2ts/engine';\n\nexport interface HeadlessWebGLOptions {\n width?: number;\n height?: number;\n antialias?: boolean;\n preserveDrawingBuffer?: boolean;\n}\n\nexport interface HeadlessWebGLContext {\n gl: WebGL2RenderingContext;\n width: number;\n height: number;\n cleanup: () => void;\n}\n\n/**\n * Creates a headless WebGL2 context using the 'gl' package.\n * This is used for running WebGL tests in a Node.js environment without a browser.\n */\nexport function createHeadlessWebGL(\n options: HeadlessWebGLOptions = {}\n): HeadlessWebGLContext {\n const width = options.width ?? 256;\n const height = options.height ?? 256;\n\n let createGL;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n createGL = require('gl');\n } catch (e) {\n throw new Error('gl package not found or failed to load. Install it to run WebGL tests.');\n }\n\n // Create WebGL context using 'gl' package\n const glContext = createGL(width, height, {\n antialias: options.antialias ?? false, // Default to false for deterministic testing\n preserveDrawingBuffer: options.preserveDrawingBuffer ?? true, // Needed for readback\n stencil: true,\n depth: true,\n alpha: true,\n webgl2: true // Request WebGL 2.0 context for GLSL 3.00 ES support\n });\n\n if (!glContext) {\n throw new Error('Failed to create headless WebGL context');\n }\n\n // Cast to WebGL2RenderingContext as 'gl' returns a compatible interface\n // but TypeScript types might not align perfectly without casting\n const gl = glContext as unknown as WebGL2RenderingContext;\n\n // Verify context creation\n const version = gl.getParameter(gl.VERSION);\n // console.log(`Created headless WebGL context: ${version}`);\n\n // Create cleanup function\n const cleanup = () => {\n const ext = gl.getExtension('STACKGL_destroy_context');\n if (ext) {\n ext.destroy();\n }\n };\n\n return {\n gl,\n width,\n height,\n cleanup\n };\n}\n\n/**\n * Captures the current framebuffer content as a pixel array.\n * Performs a vertical flip to match standard image coordinates (top-left origin).\n */\nexport function captureWebGLFramebuffer(\n gl: WebGL2RenderingContext,\n width: number,\n height: number\n): Uint8ClampedArray {\n const pixels = new Uint8ClampedArray(width * height * 4);\n\n // Read pixels from framebuffer (bottom-left origin)\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n // Flip vertically to match image coordinates (top-left origin)\n return flipPixelsVertically(pixels, width, height);\n}\n\n/**\n * Flips a pixel array vertically in-place or returns a new array.\n * WebGL reads pixels bottom-up, but images are typically stored top-down.\n */\nexport function flipPixelsVertically(\n pixels: Uint8ClampedArray,\n width: number,\n height: number\n): Uint8ClampedArray {\n const flipped = new Uint8ClampedArray(pixels.length);\n const rowSize = width * 4;\n\n for (let y = 0; y < height; y++) {\n const srcRowStart = y * rowSize;\n const destRowStart = (height - 1 - y) * rowSize;\n\n // Copy row\n for (let i = 0; i < rowSize; i++) {\n flipped[destRowStart + i] = pixels[srcRowStart + i];\n }\n }\n\n return flipped;\n}\n","import { vi } from 'vitest';\nimport { globals } from 'webgpu';\nimport { LegacyMock } from '../../vitest-compat.js';\n\nexport interface MockWebGPUContext {\n adapter: GPUAdapter;\n device: GPUDevice;\n queue: GPUQueue;\n}\n\nexport interface WebGPUMocks {\n mockGpu: {\n requestAdapter: LegacyMock<[GPURequestAdapterOptions?], Promise<GPUAdapter | null>>;\n getPreferredCanvasFormat: LegacyMock<[], GPUTextureFormat>;\n };\n mockAdapter: GPUAdapter;\n mockDevice: GPUDevice;\n}\n\n/**\n * Patches globalThis with WebGPU globals (GPUBufferUsage, etc.)\n * and optionally patches navigator.gpu.\n */\nexport function setupWebGPUMocks(): WebGPUMocks {\n // 1. Inject globals like GPUBufferUsage, GPUTextureUsage\n Object.assign(globalThis, globals);\n\n // Create mocks for Adapter and Device first so we can use them in the GPU mock\n const mockAdapter = createMockGPUAdapter();\n const mockDevice = createMockGPUDevice();\n\n // 2. Setup Navigator mock\n const mockGpu = {\n requestAdapter: vi.fn().mockResolvedValue(mockAdapter) as unknown as LegacyMock<[GPURequestAdapterOptions?], Promise<GPUAdapter | null>>,\n getPreferredCanvasFormat: vi.fn().mockReturnValue('bgra8unorm') as unknown as LegacyMock<[], GPUTextureFormat>,\n };\n\n // Wire them up\n // @ts-ignore - vitest mock manipulation\n mockAdapter.requestDevice.mockResolvedValue(mockDevice);\n\n if (!globalThis.navigator) {\n // @ts-ignore\n globalThis.navigator = {};\n }\n\n // Safely redefine navigator.gpu\n try {\n // If it exists and is configurable, define it.\n // If it doesn't exist, define it.\n // If it exists and is NOT configurable, we can't do much (but that shouldn't happen in our test env if we control it)\n Object.defineProperty(globalThis.navigator, 'gpu', {\n value: mockGpu,\n writable: true,\n configurable: true\n });\n } catch (e) {\n // Fallback: simple assignment if defineProperty fails (e.g. some JSDOM quirks)\n // @ts-ignore\n globalThis.navigator.gpu = mockGpu;\n }\n\n return {\n mockGpu,\n mockAdapter,\n mockDevice\n };\n}\n\nexport function createMockGPUAdapter(options: Partial<GPUAdapter> = {}): GPUAdapter {\n return {\n features: new Set(),\n limits: {},\n isFallbackAdapter: false,\n requestDevice: vi.fn().mockResolvedValue(createMockGPUDevice()),\n requestAdapterInfo: vi.fn().mockResolvedValue({}),\n ...options,\n } as unknown as GPUAdapter;\n}\n\nexport function createMockGPUDevice(features: Set<GPUFeatureName> = new Set()): GPUDevice {\n const queue = createMockQueue();\n\n return {\n features,\n limits: {},\n queue,\n destroy: vi.fn(),\n createBuffer: vi.fn((descriptor: GPUBufferDescriptor) => createMockGPUBuffer(descriptor)),\n createTexture: vi.fn((descriptor: GPUTextureDescriptor) => createMockGPUTexture(descriptor)),\n createSampler: vi.fn(() => createMockSampler()),\n createBindGroupLayout: vi.fn(() => ({ label: 'mock-bind-group-layout' })),\n createPipelineLayout: vi.fn(() => ({ label: 'mock-pipeline-layout' })),\n createBindGroup: vi.fn(() => ({ label: 'mock-bind-group' })),\n createShaderModule: vi.fn((descriptor: GPUShaderModuleDescriptor) => createMockShaderModule(descriptor)),\n createComputePipeline: vi.fn(() => createMockComputePipeline()),\n createRenderPipeline: vi.fn(() => createMockRenderPipeline()),\n createComputePipelineAsync: vi.fn().mockResolvedValue(createMockComputePipeline()),\n createRenderPipelineAsync: vi.fn().mockResolvedValue(createMockRenderPipeline()),\n createCommandEncoder: vi.fn(() => createMockCommandEncoder()),\n createQuerySet: vi.fn(() => ({ label: 'mock-query-set' })),\n pushErrorScope: vi.fn(),\n popErrorScope: vi.fn().mockResolvedValue(null),\n addEventListener: vi.fn(),\n removeEventListener: vi.fn(),\n dispatchEvent: vi.fn(),\n onuncapturederror: null,\n label: '',\n lost: Promise.resolve({ reason: 'destroyed', message: 'Device lost' }),\n } as unknown as GPUDevice;\n}\n\nexport function createMockQueue(): GPUQueue {\n return {\n submit: vi.fn(),\n onSubmittedWorkDone: vi.fn().mockResolvedValue(undefined),\n writeBuffer: vi.fn(),\n writeTexture: vi.fn(),\n copyExternalImageToTexture: vi.fn(),\n label: '',\n } as unknown as GPUQueue;\n}\n\nexport function createMockGPUBuffer(descriptor: GPUBufferDescriptor): GPUBuffer {\n return {\n size: descriptor.size,\n usage: descriptor.usage,\n mapState: 'unmapped',\n mapAsync: vi.fn().mockResolvedValue(undefined),\n getMappedRange: vi.fn(() => new ArrayBuffer(descriptor.size)),\n unmap: vi.fn(),\n destroy: vi.fn(),\n label: descriptor.label || '',\n } as unknown as GPUBuffer;\n}\n\nexport function createMockGPUTexture(descriptor: GPUTextureDescriptor): GPUTexture {\n const size = descriptor.size;\n let width = 0;\n let height = 0;\n let depthOrArrayLayers = 1;\n\n if (Array.isArray(size) || size instanceof Float32Array || size instanceof Uint32Array) {\n // Iterable<number>\n const arr = Array.from(size as Iterable<number>);\n width = arr[0] || 0;\n height = arr[1] || 1;\n depthOrArrayLayers = arr[2] || 1;\n } else if (typeof size === 'object') {\n // GPUExtent3DDict\n const dict = size as GPUExtent3DDict;\n width = dict.width;\n height = dict.height || 1;\n depthOrArrayLayers = dict.depthOrArrayLayers || 1;\n }\n\n return {\n width,\n height,\n depthOrArrayLayers,\n mipLevelCount: descriptor.mipLevelCount || 1,\n sampleCount: descriptor.sampleCount || 1,\n dimension: descriptor.dimension || '2d',\n format: descriptor.format,\n usage: descriptor.usage,\n createView: vi.fn(() => createMockTextureView()),\n destroy: vi.fn(),\n label: descriptor.label || '',\n } as unknown as GPUTexture;\n}\n\nexport function createMockTextureView(): GPUTextureView {\n return {\n label: '',\n } as unknown as GPUTextureView;\n}\n\nexport function createMockSampler(): GPUSampler {\n return {\n label: '',\n } as unknown as GPUSampler;\n}\n\nexport function createMockShaderModule(descriptor: GPUShaderModuleDescriptor): GPUShaderModule {\n return {\n getCompilationInfo: vi.fn().mockResolvedValue({ messages: [] }),\n label: descriptor.label || '',\n } as unknown as GPUShaderModule;\n}\n\nexport function createMockComputePipeline(): GPUComputePipeline {\n return {\n getBindGroupLayout: vi.fn(() => ({ label: 'mock-bind-group-layout' })),\n label: '',\n } as unknown as GPUComputePipeline;\n}\n\nexport function createMockRenderPipeline(): GPURenderPipeline {\n return {\n getBindGroupLayout: vi.fn(() => ({ label: 'mock-bind-group-layout' })),\n label: '',\n } as unknown as GPURenderPipeline;\n}\n\nexport function createMockCommandEncoder(): GPUCommandEncoder {\n return {\n beginRenderPass: vi.fn(() => createMockRenderPassEncoder()),\n beginComputePass: vi.fn(() => createMockComputePassEncoder()),\n copyBufferToBuffer: vi.fn(),\n copyBufferToTexture: vi.fn(),\n copyTextureToBuffer: vi.fn(),\n copyTextureToTexture: vi.fn(),\n clearBuffer: vi.fn(),\n writeTimestamp: vi.fn(),\n resolveQuerySet: vi.fn(),\n finish: vi.fn(() => ({ label: 'mock-command-buffer' })),\n pushDebugGroup: vi.fn(),\n popDebugGroup: vi.fn(),\n insertDebugMarker: vi.fn(),\n label: '',\n } as unknown as GPUCommandEncoder;\n}\n\nexport function createMockRenderPassEncoder(): GPURenderPassEncoder {\n return {\n setPipeline: vi.fn(),\n setIndexBuffer: vi.fn(),\n setVertexBuffer: vi.fn(),\n setBindGroup: vi.fn(),\n setViewport: vi.fn(),\n setScissorRect: vi.fn(),\n setBlendConstant: vi.fn(),\n setStencilReference: vi.fn(),\n beginOcclusionQuery: vi.fn(),\n endOcclusionQuery: vi.fn(),\n executeBundles: vi.fn(),\n draw: vi.fn(),\n drawIndexed: vi.fn(),\n drawIndirect: vi.fn(),\n drawIndexedIndirect: vi.fn(),\n end: vi.fn(),\n pushDebugGroup: vi.fn(),\n popDebugGroup: vi.fn(),\n insertDebugMarker: vi.fn(),\n label: '',\n } as unknown as GPURenderPassEncoder;\n}\n\nexport function createMockComputePassEncoder(): GPUComputePassEncoder {\n return {\n setPipeline: vi.fn(),\n setBindGroup: vi.fn(),\n dispatchWorkgroups: vi.fn(),\n dispatchWorkgroupsIndirect: vi.fn(),\n end: vi.fn(),\n pushDebugGroup: vi.fn(),\n popDebugGroup: vi.fn(),\n insertDebugMarker: vi.fn(),\n label: '',\n } as unknown as GPUComputePassEncoder;\n}\n\nexport function createMockWebGPUContext(): MockWebGPUContext {\n const adapter = createMockGPUAdapter();\n const device = createMockGPUDevice();\n return {\n adapter,\n device,\n queue: device.queue,\n };\n}\n","/**\n * Interface for the mock RequestAnimationFrame implementation.\n */\nexport interface MockRAF {\n /**\n * Advances time by one tick (simulating one frame).\n * @param time Timestamp to pass to callbacks (default: calls Date.now())\n */\n tick(time?: number): void;\n /**\n * Advances time by a specific amount, triggering multiple frames if necessary.\n * Not fully implemented in simple version, acts as alias to tick() with specific time.\n */\n advance(ms: number): void;\n /**\n * Returns current pending callbacks.\n */\n getCallbacks(): Array<{id: number, callback: FrameRequestCallback}>;\n}\n\n/**\n * Creates a mock RequestAnimationFrame implementation.\n * Replaces global.requestAnimationFrame and cancelAnimationFrame.\n */\nexport function createMockRAF(): MockRAF {\n let callbacks: Array<{id: number, callback: FrameRequestCallback}> = [];\n let lastId = 0;\n let currentTime = 0;\n\n const originalRAF = global.requestAnimationFrame;\n const originalCancelRAF = global.cancelAnimationFrame;\n\n global.requestAnimationFrame = (callback: FrameRequestCallback): number => {\n lastId++;\n callbacks.push({ id: lastId, callback });\n return lastId;\n };\n\n global.cancelAnimationFrame = (id: number): void => {\n callbacks = callbacks.filter(cb => cb.id !== id);\n };\n\n return {\n tick(time?: number) {\n if (time) currentTime = time;\n else currentTime += 16.66; // ~60fps\n\n const currentCallbacks = [...callbacks];\n callbacks = []; // Clear before execution to allow re-scheduling\n\n currentCallbacks.forEach(cb => cb.callback(currentTime));\n },\n advance(ms: number) {\n // Simple implementation: just advance time and process one batch\n // For more complex simulation, we might loop\n currentTime += ms;\n this.tick(currentTime);\n },\n getCallbacks() {\n return callbacks;\n }\n };\n}\n\n/**\n * Creates a mock Performance object.\n */\nexport function createMockPerformance(startTime: number = 0): Performance {\n let now = startTime;\n\n const mockPerformance = {\n now: () => now,\n timeOrigin: startTime,\n timing: {\n navigationStart: startTime,\n },\n mark: (_name: string) => {},\n measure: (_name: string, _start: string, _end: string) => {},\n getEntries: () => [],\n getEntriesByName: (_name: string) => [],\n getEntriesByType: (_type: string) => [],\n clearMarks: (_name?: string) => {},\n clearMeasures: (_name?: string) => {},\n clearResourceTimings: () => {},\n setResourceTimingBufferSize: (_maxSize: number) => {},\n onresourcetimingbufferfull: null,\n toJSON: () => ({})\n } as unknown as Performance;\n\n // Polyfill global if needed, or return for injection\n if (typeof global.performance === 'undefined') {\n global.performance = mockPerformance;\n }\n\n return mockPerformance;\n}\n\nexport interface ControlledTimer {\n /**\n * Advances virtual time by ms.\n */\n advanceBy(ms: number): void;\n /**\n * Runs all pending timers.\n */\n runAll(): void;\n /**\n * Restores original timer functions.\n */\n clear(): void;\n}\n\n/**\n * Creates controlled timers (setTimeout/setInterval).\n * Note: Use verify's useFakeTimers() for better integration with test runner.\n * This is a lightweight alternative or specific helper.\n */\nexport function createControlledTimer(): ControlledTimer {\n // This functionality is best provided by vitest/jest directly via vi.useFakeTimers()\n // Wrapping it here for convenience if needed, but for now we'll recommend `vi`.\n console.warn('createControlledTimer: Recommend using vi.useFakeTimers() instead.');\n\n return {\n advanceBy: (ms: number) => { /* delegate to vi.advanceTimersByTime(ms) in consumer */ },\n runAll: () => { /* delegate to vi.runAllTimers() */ },\n clear: () => { /* delegate to vi.useRealTimers() */ }\n };\n}\n\n/**\n * Simulates multiple RAF frames.\n */\nexport function simulateFrames(count: number, frameTime: number = 16, callback?: (frameIndex: number) => void): void {\n for (let i = 0; i < count; i++) {\n // If using the global mock RAF from createMockRAF, we just rely on callbacks being scheduled.\n // However, if we need to manually trigger them, we assume existing RAF loop.\n // This helper assumes a synchronous execution where we can just wait or tick.\n // With `vi.useFakeTimers()`, we would `vi.advanceTimersByTime(frameTime)`.\n\n if (callback) callback(i);\n }\n}\n","/**\n * Setup helpers for Node.js environments.\n */\nexport interface NodeSetupOptions {\n // Add options as needed, e.g. mocking fs, process.env, etc.\n}\n\n/**\n * Sets up a Node.js environment for testing.\n * Currently a placeholder for future Node-specific setup.\n */\nexport function setupNodeEnvironment(options: NodeSetupOptions = {}) {\n // No-op for now, but provides a hook for future setup\n}\n\n/**\n * Teardown for Node.js environment.\n */\nexport function teardownNodeEnvironment() {\n // No-op for now\n}\n","import type {\n AudioContextLike,\n AudioDestinationNodeLike,\n AudioNodeLike,\n AudioParamLike,\n AudioBufferSourceNodeLike,\n AudioBufferLike,\n GainNodeLike,\n DynamicsCompressorNodeLike,\n PannerNodeLike,\n BiquadFilterNodeLike,\n} from '@quake2ts/engine';\n\nexport class FakeAudioParam implements AudioParamLike {\n constructor(public value: number) {}\n}\n\nexport class FakeAudioNode implements AudioNodeLike {\n readonly connections: AudioNodeLike[] = [];\n connect(destination: AudioNodeLike): void {\n this.connections.push(destination);\n }\n}\n\nexport class FakeGainNode extends FakeAudioNode implements GainNodeLike, DynamicsCompressorNodeLike {\n gain = new FakeAudioParam(1);\n}\n\nexport class FakePannerNode extends FakeAudioNode implements PannerNodeLike {\n positionX = new FakeAudioParam(0);\n positionY = new FakeAudioParam(0);\n positionZ = new FakeAudioParam(0);\n refDistance?: number;\n maxDistance?: number;\n rolloffFactor?: number;\n distanceModel?: string;\n}\n\nexport class FakeBiquadFilterNode extends FakeAudioNode implements BiquadFilterNodeLike {\n frequency = new FakeAudioParam(0);\n Q = new FakeAudioParam(0);\n type = 'lowpass';\n}\n\nexport class FakeBufferSource extends FakeAudioNode implements AudioBufferSourceNodeLike {\n buffer: AudioBufferLike | null = null;\n loop = false;\n playbackRate = new FakeAudioParam(1);\n onended: (() => void) | null = null;\n startedAt?: number;\n stoppedAt?: number;\n start(when = 0, offset?: number, duration?: number): void {\n this.startedAt = when;\n this.offset = offset;\n this.duration = duration;\n }\n stop(when = 0): void {\n this.stoppedAt = when;\n this.onended?.();\n }\n offset?: number;\n duration?: number;\n}\n\nexport class FakeDestination extends FakeAudioNode implements AudioDestinationNodeLike {}\n\nexport class FakeAudioContext implements AudioContextLike {\n readonly destination = new FakeDestination();\n state: AudioContextLike['state'] = 'suspended';\n currentTime = 0;\n resumeCalls = 0;\n readonly gains: GainNodeLike[] = [];\n readonly sources: FakeBufferSource[] = [];\n readonly panners: PannerNodeLike[] = [];\n readonly filters: BiquadFilterNodeLike[] = [];\n lastDecoded?: ArrayBuffer;\n createPanner?: () => PannerNodeLike;\n\n constructor(enablePanner = true) {\n if (enablePanner) {\n this.createPanner = () => {\n const node = new FakePannerNode();\n this.panners.push(node);\n return node;\n };\n }\n }\n\n async resume(): Promise<void> {\n this.state = 'running';\n this.resumeCalls += 1;\n }\n\n async suspend(): Promise<void> {\n this.state = 'suspended';\n }\n\n createGain(): GainNodeLike {\n const node = new FakeGainNode();\n this.gains.push(node);\n return node;\n }\n\n createDynamicsCompressor(): DynamicsCompressorNodeLike {\n const node = new FakeGainNode();\n this.gains.push(node);\n return node;\n }\n\n createBufferSource(): AudioBufferSourceNodeLike {\n const node = new FakeBufferSource();\n this.sources.push(node);\n return node;\n }\n\n createBiquadFilter(): BiquadFilterNodeLike {\n const node = new FakeBiquadFilterNode();\n this.filters.push(node);\n return node;\n }\n\n async decodeAudioData(data: ArrayBuffer): Promise<AudioBufferLike> {\n this.lastDecoded = data;\n return { duration: data.byteLength / 1000 };\n }\n\n advanceTime(seconds: number): void {\n this.currentTime += seconds;\n }\n}\n\nexport const createMockAudioBuffer = (duration = 1, channels = 2, sampleRate = 44100): AudioBufferLike => ({ duration });\n\nexport const createMockAudioContext = (overrides?: Partial<AudioContext>): FakeAudioContext => new FakeAudioContext();\n\nexport const createMockPannerNode = (overrides?: Partial<PannerNode>): FakePannerNode => {\n const node = new FakePannerNode();\n if (overrides) {\n Object.assign(node, overrides);\n }\n return node;\n}\n\nexport const createMockBufferSource = (buffer?: AudioBuffer): FakeBufferSource => {\n const node = new FakeBufferSource();\n if (buffer) {\n node.buffer = buffer;\n }\n return node;\n}\n\nexport { FakeBufferSource as MockAudioBufferSourceNode };\n","import { vi } from 'vitest';\nimport {\n Renderer,\n FrameRenderer,\n BspSurfacePipeline,\n Md2Pipeline,\n Md3Pipeline,\n SpriteRenderer,\n SkyboxPipeline,\n RenderableEntity,\n FrameRenderOptions,\n RenderOptions,\n FrameRenderStats,\n SurfaceRenderState,\n Md2MeshBuffers,\n Md3SurfaceMesh,\n Md3SurfaceMaterial,\n SkyboxBindOptions,\n BspSurfaceBindOptions,\n Md2BindOptions,\n RenderModeConfig,\n Texture2D,\n IndexBuffer\n} from '@quake2ts/engine';\nimport { createMockWebGL2Context } from './webgl.js';\n\nexport function createMockRenderer(overrides?: Partial<Renderer>): Renderer {\n return {\n width: 800,\n height: 600,\n collisionVis: {\n render: vi.fn(),\n clear: vi.fn(),\n shaderSize: 0,\n dispose: vi.fn(),\n } as any,\n debug: {\n render: vi.fn(),\n clear: vi.fn(),\n drawLine: vi.fn(),\n drawBoundingBox: vi.fn(),\n drawAxes: vi.fn(),\n getLabels: vi.fn().mockReturnValue([]),\n shaderSize: 0,\n dispose: vi.fn(),\n } as any,\n particleSystem: {\n update: vi.fn(),\n emit: vi.fn(),\n clear: vi.fn(),\n count: 0\n } as any,\n getPerformanceReport: vi.fn().mockReturnValue({}),\n getMemoryUsage: vi.fn().mockReturnValue({}),\n renderFrame: vi.fn(),\n registerPic: vi.fn().mockResolvedValue({} as any),\n registerTexture: vi.fn().mockReturnValue({} as any),\n begin2D: vi.fn(),\n end2D: vi.fn(),\n drawPic: vi.fn(),\n drawString: vi.fn(),\n drawCenterString: vi.fn(),\n drawfillRect: vi.fn(),\n setEntityHighlight: vi.fn(),\n clearEntityHighlight: vi.fn(),\n highlightSurface: vi.fn(),\n removeSurfaceHighlight: vi.fn(),\n setDebugMode: vi.fn(),\n setBrightness: vi.fn(),\n setGamma: vi.fn(),\n setFullbright: vi.fn(),\n setAmbient: vi.fn(),\n setLightStyle: vi.fn(),\n setUnderwaterWarp: vi.fn(),\n setBloom: vi.fn(),\n setBloomIntensity: vi.fn(),\n setLodBias: vi.fn(),\n setAreaPortalState: vi.fn(),\n renderInstanced: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n };\n}\n\nexport function createMockFrameRenderer(overrides?: Partial<FrameRenderer>): FrameRenderer {\n return {\n renderFrame: vi.fn().mockReturnValue({\n batches: 0,\n facesDrawn: 0,\n drawCalls: 0,\n skyDrawn: false,\n viewModelDrawn: false,\n fps: 60,\n vertexCount: 0,\n } as FrameRenderStats),\n ...overrides,\n };\n}\n\nexport function createMockBspPipeline(overrides?: Partial<BspSurfacePipeline>): BspSurfacePipeline {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n shaderSize: 0,\n bind: vi.fn().mockReturnValue({} as SurfaceRenderState),\n draw: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n } as unknown as BspSurfacePipeline;\n}\n\nexport function createMockMd2Pipeline(overrides?: Partial<Md2Pipeline>): Md2Pipeline {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n shaderSize: 0,\n bind: vi.fn(),\n draw: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n } as unknown as Md2Pipeline;\n}\n\nexport function createMockMd3Pipeline(overrides?: Partial<Md3Pipeline>): Md3Pipeline {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n shaderSize: 0,\n bind: vi.fn(),\n drawSurface: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n } as unknown as Md3Pipeline;\n}\n\nexport function createMockSpritePipeline(overrides?: Partial<SpriteRenderer>): SpriteRenderer {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n shaderSize: 0,\n vao: {\n bind: vi.fn(),\n dispose: vi.fn(),\n configureAttributes: vi.fn()\n } as any,\n vbo: {\n bind: vi.fn(),\n dispose: vi.fn(),\n upload: vi.fn()\n } as any,\n whiteTexture: {\n bind: vi.fn(),\n upload: vi.fn()\n } as unknown as Texture2D,\n begin: vi.fn(),\n draw: vi.fn(),\n drawRect: vi.fn(),\n ...overrides,\n } as unknown as SpriteRenderer;\n}\n\nexport function createMockSkyboxPipeline(overrides?: Partial<SkyboxPipeline>): SkyboxPipeline {\n const gl = createMockWebGL2Context();\n return {\n gl,\n program: {\n use: vi.fn(),\n dispose: vi.fn(),\n sourceSize: 0,\n getUniformLocation: vi.fn().mockReturnValue(null),\n } as any,\n vao: {\n bind: vi.fn(),\n dispose: vi.fn(),\n configureAttributes: vi.fn()\n } as any,\n vbo: {\n bind: vi.fn(),\n dispose: vi.fn(),\n upload: vi.fn()\n } as any,\n cubemap: {\n bind: vi.fn(),\n dispose: vi.fn(),\n setParameters: vi.fn(),\n upload: vi.fn()\n } as any,\n shaderSize: 0,\n bind: vi.fn(),\n draw: vi.fn(),\n dispose: vi.fn(),\n ...overrides,\n } as unknown as SkyboxPipeline;\n}\n","import { vi } from 'vitest';\nimport {\n AssetManager,\n Md2Model,\n Md3Model,\n BspMap,\n PreparedTexture\n} from '@quake2ts/engine';\n\nexport function createMockAssetManager(overrides?: Partial<AssetManager>): AssetManager {\n return {\n textures: {\n get: vi.fn(),\n set: vi.fn(),\n has: vi.fn(),\n clear: vi.fn(),\n memoryUsage: 0\n } as any,\n audio: {\n load: vi.fn(),\n get: vi.fn(),\n clearAll: vi.fn()\n } as any,\n loadTexture: vi.fn().mockResolvedValue({} as PreparedTexture),\n registerTexture: vi.fn(),\n loadSound: vi.fn().mockResolvedValue({} as any),\n loadMd2Model: vi.fn().mockResolvedValue({} as Md2Model),\n getMd2Model: vi.fn(),\n loadMd3Model: vi.fn().mockResolvedValue({} as Md3Model),\n getMd3Model: vi.fn(),\n loadSprite: vi.fn().mockResolvedValue({} as any),\n loadMap: vi.fn().mockResolvedValue({} as BspMap),\n getMap: vi.fn(),\n loadPalette: vi.fn().mockResolvedValue(undefined),\n isAssetLoaded: vi.fn().mockReturnValue(true),\n listFiles: vi.fn().mockReturnValue([]),\n resetForLevelChange: vi.fn(),\n getMemoryUsage: vi.fn().mockReturnValue({ textures: 0, audio: 0 }),\n clearCache: vi.fn(),\n preloadAssets: vi.fn().mockResolvedValue(undefined),\n queueLoad: vi.fn().mockImplementation((path) => Promise.resolve({} as any)),\n ...overrides\n } as unknown as AssetManager;\n}\n\nexport function createMockTexture(width: number = 1, height: number = 1, data?: Uint8Array): PreparedTexture {\n return {\n width,\n height,\n data: data || new Uint8Array(width * height * 4).fill(255),\n format: 0, // RGBA\n name: 'mock_texture',\n uploaded: false\n } as unknown as PreparedTexture;\n}\n\nexport function createMockMd2Model(overrides?: Partial<Md2Model>): Md2Model {\n return {\n header: {\n skinWidth: 0,\n skinHeight: 0,\n frameSize: 0,\n numSkins: 0,\n numVertices: 0,\n numSt: 0,\n numTriangles: 0,\n numGlCmds: 0,\n numFrames: 0,\n offsetSkins: 0,\n offsetSt: 0,\n offsetTriangles: 0,\n offsetFrames: 0,\n offsetGlCmds: 0,\n offsetEnd: 0\n },\n skins: [],\n texCoords: [],\n triangles: [],\n frames: [],\n glCommands: new Int32Array(0),\n ...overrides\n } as Md2Model;\n}\n\nexport function createMockMd3Model(overrides?: Partial<Md3Model>): Md3Model {\n return {\n header: {\n ident: 0,\n version: 0,\n name: '',\n flags: 0,\n numFrames: 0,\n numTags: 0,\n numSurfaces: 0,\n numSkins: 0,\n offsetFrames: 0,\n offsetTags: 0,\n offsetSurfaces: 0,\n offsetEnd: 0\n },\n frames: [],\n tags: [],\n surfaces: [],\n ...overrides\n } as Md3Model;\n}\n\nexport function createMockBspMap(overrides?: Partial<BspMap>): BspMap {\n return {\n version: 38,\n entities: [],\n planes: [],\n vertices: [],\n visibility: new Uint8Array(0),\n nodes: [],\n texInfo: [],\n faces: [],\n lightmaps: [],\n leafs: [],\n leafFaces: [],\n leafBrushes: [],\n edges: [],\n faceEdges: [],\n models: [],\n brushes: [],\n brushSides: [],\n ...overrides\n } as BspMap;\n}\n","import { vi } from 'vitest';\nimport { VertexBuffer, IndexBuffer, BufferUsage } from '@quake2ts/engine';\nimport { ShaderProgram, ShaderSources } from '@quake2ts/engine';\nimport { createMockWebGL2Context } from './webgl.js';\n\n// Export these for use in other mocks\nexport { VertexBuffer, IndexBuffer, ShaderProgram };\n\n/**\n * Creates a mock VertexBuffer with an optional data array.\n */\nexport function createMockVertexBuffer(data?: Float32Array, usage?: BufferUsage): VertexBuffer {\n const gl = createMockWebGL2Context() as unknown as WebGL2RenderingContext;\n const vb = new VertexBuffer(gl, usage ?? gl.STATIC_DRAW);\n\n // Spy on methods to track calls\n vi.spyOn(vb, 'bind');\n vi.spyOn(vb, 'upload');\n vi.spyOn(vb, 'update');\n vi.spyOn(vb, 'dispose');\n\n if (data) {\n vb.upload(data as unknown as BufferSource, usage ?? gl.STATIC_DRAW);\n }\n\n return vb;\n}\n\n/**\n * Creates a mock IndexBuffer with an optional data array.\n */\nexport function createMockIndexBuffer(data?: Uint16Array, usage?: BufferUsage): IndexBuffer {\n const gl = createMockWebGL2Context() as unknown as WebGL2RenderingContext;\n const ib = new IndexBuffer(gl, usage ?? gl.STATIC_DRAW);\n\n // Spy on methods\n vi.spyOn(ib, 'bind');\n vi.spyOn(ib, 'upload');\n vi.spyOn(ib, 'update');\n vi.spyOn(ib, 'dispose');\n\n if (data) {\n ib.upload(data as unknown as BufferSource, usage ?? gl.STATIC_DRAW);\n }\n\n return ib;\n}\n\n/**\n * Creates a mock ShaderProgram with optional overrides.\n */\nexport function createMockShaderProgram(overrides?: Partial<ShaderProgram>): ShaderProgram {\n const gl = createMockWebGL2Context() as unknown as WebGL2RenderingContext;\n\n // Create a minimal valid program using the static create method\n const dummySources: ShaderSources = {\n vertex: '#version 300 es\\nvoid main() {}',\n fragment: '#version 300 es\\nvoid main() {}'\n };\n\n const program = ShaderProgram.create(gl, dummySources);\n\n // Spy on methods\n vi.spyOn(program, 'use');\n vi.spyOn(program, 'getUniformLocation');\n vi.spyOn(program, 'getAttributeLocation');\n vi.spyOn(program, 'dispose');\n\n // Apply overrides if provided\n if (overrides) {\n Object.assign(program, overrides);\n }\n\n return program;\n}\n\n/**\n * Helper to create a mock ShaderProgram with custom source code.\n */\nexport function createMockShader(vertSource?: string, fragSource?: string): ShaderProgram {\n const gl = createMockWebGL2Context() as unknown as WebGL2RenderingContext;\n const sources: ShaderSources = {\n vertex: vertSource ?? '#version 300 es\\nvoid main() {}',\n fragment: fragSource ?? '#version 300 es\\nvoid main() {}'\n };\n\n return ShaderProgram.create(gl, sources);\n}\n","import { vi } from 'vitest';\nimport { Vec3 } from '@quake2ts/shared';\nimport { DynamicLightManager } from '@quake2ts/engine';\nimport type { DLight } from '@quake2ts/engine';\n\n// Export types\nexport { DynamicLightManager };\nexport type { DLight };\n\n// Mock Lightmap type since it's typically just a raw buffer or texture in the engine\n// But based on the task \"Add createMockLightmap() factory\", we'll create a simple structure.\nexport interface Lightmap {\n width: number;\n height: number;\n data: Uint8Array;\n}\n\n/**\n * Creates a mock DLight with default values.\n */\nexport function createMockDLight(\n position: Vec3 = { x: 0, y: 0, z: 0 },\n color: Vec3 = { x: 1, y: 1, z: 1 },\n intensity: number = 300\n): DLight {\n return {\n origin: { ...position },\n color: { ...color },\n intensity,\n die: Number.MAX_SAFE_INTEGER,\n };\n}\n\n/**\n * Creates a mock DynamicLightManager with spy methods.\n */\nexport function createMockDLightManager(overrides?: Partial<DynamicLightManager>): DynamicLightManager {\n // We can't easily spy on methods of a real instance if we just return an object literal\n // that mimics the interface, unless we use the real class or a full mock.\n // Since DynamicLightManager is a class with logic, let's create a real instance and spy on it,\n // or return a complete mock object if we want to avoid logic.\n // The task says \"Add createMockDLightManager factory... Methods: addLight, removeLight, clear, getLights\".\n\n // Let's create a mock object that satisfies the public interface (structural typing).\n\n const mockManager = {\n addLight: vi.fn(),\n clear: vi.fn(),\n update: vi.fn(),\n getActiveLights: vi.fn().mockReturnValue([]),\n ...overrides\n };\n\n return mockManager as unknown as DynamicLightManager;\n}\n\n/**\n * Creates a mock lightmap data structure.\n */\nexport function createMockLightmap(width: number = 128, height: number = 128): Lightmap {\n return {\n width,\n height,\n data: new Uint8Array(width * height * 3) // RGB\n };\n}\n","import { vi } from 'vitest';\nimport { Vec3 } from '@quake2ts/shared';\nimport { ParticleSystem } from '@quake2ts/engine';\n\n// Mock types since Particle/ParticleEmitter are not exported\nexport interface MockParticle {\n position: Vec3;\n velocity: Vec3;\n color: [number, number, number, number];\n size: number;\n lifetime: number;\n gravity: number;\n damping: number;\n bounce: number;\n blendMode: 'alpha' | 'additive';\n fade: boolean;\n}\n\nexport interface MockParticleEmitter {\n update: (dt: number) => void;\n emit: () => void;\n}\n\n// Export types\nexport { ParticleSystem };\n\n/**\n * Creates a mock Particle with default values.\n */\nexport function createMockParticle(overrides?: Partial<MockParticle>): MockParticle {\n return {\n position: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n color: [1, 1, 1, 1],\n size: 1,\n lifetime: 1,\n gravity: 0,\n damping: 0,\n bounce: 0,\n blendMode: 'alpha',\n fade: false,\n ...overrides,\n };\n}\n\n/**\n * Creates a mock ParticleEmitter.\n */\nexport function createMockParticleEmitter(overrides?: Partial<MockParticleEmitter>): MockParticleEmitter {\n return {\n update: vi.fn(),\n emit: vi.fn(),\n ...overrides,\n };\n}\n\n/**\n * Creates a mock ParticleSystem.\n */\nexport function createMockParticleSystem(overrides?: Partial<ParticleSystem>): ParticleSystem {\n return {\n maxParticles: 1000,\n rng: {\n frandom: vi.fn().mockReturnValue(0.5), // Deterministic default\n random: vi.fn().mockReturnValue(0.5),\n seed: vi.fn(),\n },\n update: vi.fn(),\n spawn: vi.fn(),\n killAll: vi.fn(),\n aliveCount: vi.fn().mockReturnValue(0),\n getState: vi.fn(),\n buildMesh: vi.fn(),\n ...overrides,\n } as unknown as ParticleSystem;\n}\n","import { vi } from 'vitest';\nimport { createMockWebGL2Context, MockWebGL2RenderingContext } from './mocks/webgl.js';\n\n// Define minimal mock interfaces for internal engine components not publicly exported.\ninterface MockPipeline {\n render: ReturnType<typeof vi.fn>;\n init: ReturnType<typeof vi.fn>;\n resize: ReturnType<typeof vi.fn>;\n}\n\ninterface MockCamera {\n update: ReturnType<typeof vi.fn>;\n getViewMatrix: ReturnType<typeof vi.fn>;\n getProjectionMatrix: ReturnType<typeof vi.fn>;\n getViewProjectionMatrix: ReturnType<typeof vi.fn>;\n getPosition: ReturnType<typeof vi.fn>;\n getForward: ReturnType<typeof vi.fn>;\n getRight: ReturnType<typeof vi.fn>;\n getUp: ReturnType<typeof vi.fn>;\n extractFrustumPlanes: ReturnType<typeof vi.fn>;\n transform: {\n origin: number[];\n angles: number[];\n fov: number;\n };\n}\n\nexport interface MockRenderingContext {\n gl: MockWebGL2RenderingContext;\n camera: MockCamera;\n pipelines: {\n md2: MockPipeline;\n bsp: MockPipeline;\n sprite: MockPipeline;\n poly: MockPipeline;\n particle: MockPipeline;\n };\n}\n\nexport function createMockRenderingContext(): MockRenderingContext {\n const gl = createMockWebGL2Context();\n\n // Mock Camera\n const camera: MockCamera = {\n update: vi.fn(),\n getViewMatrix: vi.fn().mockReturnValue(new Float32Array(16)),\n getProjectionMatrix: vi.fn().mockReturnValue(new Float32Array(16)),\n getViewProjectionMatrix: vi.fn().mockReturnValue(new Float32Array(16)),\n getPosition: vi.fn().mockReturnValue([0, 0, 0]),\n getForward: vi.fn().mockReturnValue([0, 0, -1]),\n getRight: vi.fn().mockReturnValue([1, 0, 0]),\n getUp: vi.fn().mockReturnValue([0, 1, 0]),\n extractFrustumPlanes: vi.fn(),\n transform: {\n origin: [0, 0, 0],\n angles: [0, 0, 0],\n fov: 90\n }\n };\n\n // Mock Pipelines\n const md2: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n const bsp: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n const sprite: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n const poly: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n const particle: MockPipeline = {\n render: vi.fn(),\n init: vi.fn(),\n resize: vi.fn(),\n };\n\n return {\n gl,\n camera,\n pipelines: {\n md2,\n bsp,\n sprite,\n poly,\n particle\n }\n };\n}\n","/**\n * Helper to create a storage-like object (localStorage/sessionStorage).\n */\nfunction createStorageMock(initialData: Record<string, string> = {}): Storage {\n const store = new Map<string, string>(Object.entries(initialData));\n\n return {\n getItem: (key: string) => store.get(key) || null,\n setItem: (key: string, value: string) => store.set(key, value.toString()),\n removeItem: (key: string) => store.delete(key),\n clear: () => store.clear(),\n key: (index: number) => Array.from(store.keys())[index] || null,\n get length() { return store.size; }\n } as Storage;\n}\n\n/**\n * Creates a mock LocalStorage instance.\n */\nexport function createMockLocalStorage(initialData: Record<string, string> = {}): Storage {\n return createStorageMock(initialData);\n}\n\n/**\n * Creates a mock SessionStorage instance.\n */\nexport function createMockSessionStorage(initialData: Record<string, string> = {}): Storage {\n return createStorageMock(initialData);\n}\n\n/**\n * Creates a mock IndexedDB factory.\n * Wraps fake-indexeddb.\n */\nexport function createMockIndexedDB(databases?: IDBDatabase[]): IDBFactory {\n // fake-indexeddb/auto already sets global.indexedDB\n // If we need to return a specific instance or customized one, we can do it here.\n // For now, return the global one or a fresh 'fake-indexeddb' instance if we were to import it directly.\n\n // Since we imported 'fake-indexeddb/auto' in setup/browser.ts, global.indexedDB is already mocked.\n // We can return that.\n return global.indexedDB;\n}\n\nexport interface StorageScenario {\n localStorage: Storage;\n sessionStorage: Storage;\n indexedDB: IDBFactory;\n}\n\n/**\n * Creates a complete storage test scenario.\n */\nexport function createStorageTestScenario(storageType: 'local' | 'session' | 'indexed' = 'local'): StorageScenario {\n return {\n localStorage: createMockLocalStorage(),\n sessionStorage: createMockSessionStorage(),\n indexedDB: createMockIndexedDB()\n };\n}\n","/**\n * Mocks for Web Audio API.\n */\n\n/**\n * Sets up a mock AudioContext globally.\n */\nexport function setupMockAudioContext(): void {\n class MockAudioContext {\n state = 'suspended';\n destination = {};\n currentTime = 0;\n listener = {\n positionX: { value: 0 },\n positionY: { value: 0 },\n positionZ: { value: 0 },\n forwardX: { value: 0 },\n forwardY: { value: 0 },\n forwardZ: { value: 0 },\n upX: { value: 0 },\n upY: { value: 0 },\n upZ: { value: 0 },\n setOrientation: () => {},\n setPosition: () => {}\n };\n\n createGain() {\n return {\n gain: { value: 1, linearRampToValueAtTime: () => {} },\n connect: () => {},\n disconnect: () => {}\n };\n }\n\n createBufferSource() {\n return {\n buffer: null,\n loop: false,\n playbackRate: { value: 1 },\n connect: () => {},\n start: () => {},\n stop: () => {},\n disconnect: () => {},\n onended: null\n };\n }\n\n createPanner() {\n return {\n panningModel: 'equalpower',\n distanceModel: 'inverse',\n positionX: { value: 0 },\n positionY: { value: 0 },\n positionZ: { value: 0 },\n orientationX: { value: 0 },\n orientationY: { value: 0 },\n orientationZ: { value: 0 },\n coneInnerAngle: 360,\n coneOuterAngle: 360,\n coneOuterGain: 0,\n connect: () => {},\n disconnect: () => {},\n setPosition: () => {},\n setOrientation: () => {}\n }\n }\n\n createBuffer(numOfChannels: number, length: number, sampleRate: number) {\n return {\n duration: length / sampleRate,\n length,\n sampleRate,\n numberOfChannels: numOfChannels,\n getChannelData: () => new Float32Array(length)\n }\n }\n\n decodeAudioData(data: ArrayBuffer, success?: (buffer: any) => void) {\n const buffer = this.createBuffer(2, 100, 44100);\n if (success) success(buffer);\n return Promise.resolve(buffer);\n }\n\n resume() { return Promise.resolve(); }\n suspend() { return Promise.resolve(); }\n close() { return Promise.resolve(); }\n }\n\n global.AudioContext = MockAudioContext as any;\n // @ts-ignore\n global.webkitAudioContext = MockAudioContext as any;\n}\n\n/**\n * Restores original AudioContext.\n */\nexport function teardownMockAudioContext(): void {\n // @ts-ignore\n delete global.AudioContext;\n // @ts-ignore\n delete global.webkitAudioContext;\n}\n\nexport interface AudioEvent {\n type: string;\n data?: any;\n}\n\n/**\n * Captures audio events from a context.\n * Requires the context to be instrumented or mocked to emit events.\n * This helper currently works with the `setupMockAudioContext` mock if extended.\n */\nexport function captureAudioEvents(context: AudioContext): AudioEvent[] {\n // Placeholder for capturing events.\n // Real implementation would attach spies to context methods.\n return [];\n}\n","import { initHeadlessWebGPU, WebGPUContextState } from '../../setup/webgpu.js';\n\n/**\n * Interface for render test setup\n */\nexport interface RenderTestSetup {\n context: WebGPUContextState;\n renderTarget: GPUTexture;\n renderTargetView: GPUTextureView;\n depthTarget?: GPUTexture;\n depthTargetView?: GPUTextureView;\n commandEncoder: GPUCommandEncoder;\n cleanup: () => Promise<void>;\n width: number;\n height: number;\n}\n\n/**\n * Creates a setup for testing rendering pipelines.\n * Initializes a headless WebGPU context, a render target texture, and a command encoder.\n */\nexport async function createRenderTestSetup(\n width: number = 256,\n height: number = 256,\n options: { depth?: boolean } = {}\n): Promise<RenderTestSetup> {\n const setup = await initHeadlessWebGPU();\n const { device } = setup;\n\n // Create a render target texture\n // We use RGBA8Unorm for easy readback and standard rendering\n const renderTarget = device.createTexture({\n size: { width, height, depthOrArrayLayers: 1 },\n format: 'rgba8unorm',\n usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,\n });\n\n const renderTargetView = renderTarget.createView();\n\n let depthTarget: GPUTexture | undefined;\n let depthTargetView: GPUTextureView | undefined;\n\n if (options.depth) {\n depthTarget = device.createTexture({\n size: { width, height, depthOrArrayLayers: 1 },\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n });\n depthTargetView = depthTarget.createView();\n }\n\n const commandEncoder = device.createCommandEncoder();\n\n // We need to create a context state object compatible with our engine expectations\n const context: WebGPUContextState = {\n adapter: setup.adapter,\n device: setup.device,\n queue: setup.device.queue,\n format: 'rgba8unorm',\n };\n\n return {\n context,\n renderTarget,\n renderTargetView,\n depthTarget,\n depthTargetView,\n commandEncoder,\n width,\n height,\n cleanup: async () => {\n renderTarget.destroy();\n depthTarget?.destroy();\n await setup.cleanup();\n }\n };\n}\n\n/**\n * Captures texture content to Uint8ClampedArray (RGBA).\n * Creates its own CommandEncoder and submits immediately.\n */\nexport async function captureTexture(\n device: GPUDevice,\n texture: GPUTexture,\n width: number,\n height: number\n): Promise<Uint8ClampedArray> {\n const commandEncoder = device.createCommandEncoder();\n\n // Create a buffer to read back the texture data\n // Bytes per row must be a multiple of 256 for copyTextureToBuffer\n const bytesPerPixel = 4;\n const unpaddedBytesPerRow = width * bytesPerPixel;\n const align = 256;\n const paddedBytesPerRow = Math.max(\n bytesPerPixel * width,\n Math.ceil((bytesPerPixel * width) / align) * align\n );\n\n const bufferSize = paddedBytesPerRow * height;\n\n const readbackBuffer = device.createBuffer({\n size: bufferSize,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n // Copy texture to buffer\n commandEncoder.copyTextureToBuffer(\n {\n texture: texture,\n },\n {\n buffer: readbackBuffer,\n bytesPerRow: paddedBytesPerRow,\n },\n {\n width,\n height,\n depthOrArrayLayers: 1,\n }\n );\n\n device.queue.submit([commandEncoder.finish()]);\n\n await readbackBuffer.mapAsync(GPUMapMode.READ);\n\n const arrayBuffer = readbackBuffer.getMappedRange();\n\n // Create a new buffer to hold the tightly packed data\n const output = new Uint8ClampedArray(width * height * 4);\n\n // Copy row by row to remove padding\n const srcBytes = new Uint8Array(arrayBuffer);\n for (let y = 0; y < height; y++) {\n const srcOffset = y * paddedBytesPerRow;\n const dstOffset = y * unpaddedBytesPerRow;\n output.set(srcBytes.subarray(srcOffset, srcOffset + unpaddedBytesPerRow), dstOffset);\n }\n\n readbackBuffer.unmap();\n readbackBuffer.destroy();\n\n return output;\n}\n\n/**\n * Helper to render and capture the output as pixel data.\n * It manages the render pass, submission, and buffer readback.\n */\nexport async function renderAndCapture(\n setup: RenderTestSetup,\n renderFn: (pass: GPURenderPassEncoder) => void\n): Promise<Uint8ClampedArray> {\n const { device, queue } = setup.context;\n const { renderTargetView, commandEncoder, width, height, depthTargetView } = setup;\n\n const colorAttachment: GPURenderPassColorAttachment = {\n view: renderTargetView,\n clearValue: { r: 0, g: 0, b: 0, a: 0 },\n loadOp: 'clear',\n storeOp: 'store',\n };\n\n const descriptor: GPURenderPassDescriptor = {\n colorAttachments: [colorAttachment],\n };\n\n if (depthTargetView) {\n descriptor.depthStencilAttachment = {\n view: depthTargetView,\n depthClearValue: 1.0,\n depthLoadOp: 'clear',\n depthStoreOp: 'discard',\n };\n }\n\n device.pushErrorScope('validation');\n\n // Begin render pass\n const passEncoder = commandEncoder.beginRenderPass(descriptor);\n\n // Invoke user render function\n renderFn(passEncoder);\n\n // End pass\n passEncoder.end();\n\n // Submit the render commands\n queue.submit([commandEncoder.finish()]);\n\n const error = await device.popErrorScope();\n if (error) {\n throw new Error(`WebGPU validation error: ${error.message}`);\n }\n\n // Capture the texture (using a new encoder)\n return captureTexture(device, setup.renderTarget, width, height);\n}\n\n/**\n * Interface for compute test setup\n */\nexport interface ComputeTestSetup {\n context: WebGPUContextState;\n outputBuffer: GPUBuffer;\n commandEncoder: GPUCommandEncoder;\n cleanup: () => Promise<void>;\n outputSize: number;\n}\n\n/**\n * Creates a setup for testing compute shaders.\n */\nexport async function createComputeTestSetup(\n outputSize: number\n): Promise<ComputeTestSetup> {\n const setup = await initHeadlessWebGPU();\n const { device } = setup;\n\n // Create output buffer (storage and copy source)\n const outputBuffer = device.createBuffer({\n size: outputSize,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n });\n\n const commandEncoder = device.createCommandEncoder();\n\n const context: WebGPUContextState = {\n adapter: setup.adapter,\n device: setup.device,\n queue: setup.device.queue,\n format: 'rgba8unorm',\n };\n\n return {\n context,\n outputBuffer,\n commandEncoder,\n outputSize,\n cleanup: async () => {\n outputBuffer.destroy();\n await setup.cleanup();\n }\n };\n}\n\n/**\n * Helper to run a compute pass and read back the output buffer.\n */\nexport async function runComputeAndReadback(\n setup: ComputeTestSetup,\n computeFn: (pass: GPUComputePassEncoder) => void\n): Promise<ArrayBuffer> {\n const { device, queue } = setup.context;\n const { outputBuffer, commandEncoder, outputSize } = setup;\n\n const passEncoder = commandEncoder.beginComputePass();\n computeFn(passEncoder);\n passEncoder.end();\n\n // Create staging buffer for readback\n const stagingBuffer = device.createBuffer({\n size: outputSize,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n commandEncoder.copyBufferToBuffer(\n outputBuffer,\n 0,\n stagingBuffer,\n 0,\n outputSize\n );\n\n queue.submit([commandEncoder.finish()]);\n\n await stagingBuffer.mapAsync(GPUMapMode.READ);\n\n const mappedRange = stagingBuffer.getMappedRange();\n const result = mappedRange.slice(0); // Copy data\n\n stagingBuffer.unmap();\n stagingBuffer.destroy();\n\n return result;\n}\n","import { createHeadlessWebGL, captureWebGLFramebuffer, HeadlessWebGLContext } from '../../setup/headless-webgl.js';\n// Removed invalid import\n\nexport interface WebGLRenderTestSetup {\n gl: WebGL2RenderingContext;\n width: number;\n height: number;\n cleanup: () => void;\n}\n\n/**\n * Creates a setup for testing WebGL rendering.\n * Initializes a headless WebGL context.\n */\nexport async function createWebGLRenderTestSetup(\n width: number = 256,\n height: number = 256\n): Promise<WebGLRenderTestSetup> {\n const context = createHeadlessWebGL({ width, height });\n\n return {\n gl: context.gl,\n width: context.width,\n height: context.height,\n cleanup: context.cleanup\n };\n}\n\n/**\n * Helper to render and capture the output as pixel data.\n * Executes the render function, ensures completion, and captures the framebuffer.\n */\nexport async function renderAndCaptureWebGL(\n setup: WebGLRenderTestSetup,\n renderFn: (gl: WebGL2RenderingContext) => void\n): Promise<Uint8ClampedArray> {\n const { gl, width, height } = setup;\n\n // Execute the user's render function\n renderFn(gl);\n\n // Ensure all commands are finished before reading pixels\n gl.finish();\n\n // Capture the framebuffer content\n return captureWebGLFramebuffer(gl, width, height);\n}\n","/**\n * Playwright-based WebGL testing utilities for quake2ts renderer\n *\n * Provides helpers for running WebGL visual tests in a real browser using Playwright.\n * Loads the actual built renderer code via a static server, similar to e2e-tests.\n */\n\nimport { chromium, Browser, Page, BrowserContext } from 'playwright';\nimport { expectSnapshot, SnapshotTestOptions } from '../../visual/snapshots.js';\nimport { createServer, IncomingMessage, ServerResponse } from 'http';\nimport handler from 'serve-handler';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport interface WebGLPlaywrightSetup {\n browser: Browser;\n context: BrowserContext;\n page: Page;\n width: number;\n height: number;\n server?: any;\n cleanup: () => Promise<void>;\n}\n\nexport interface WebGLPlaywrightOptions {\n width?: number;\n height?: number;\n headless?: boolean;\n}\n\n/**\n * Creates a Playwright-based WebGL test setup with the actual quake2ts renderer.\n * Starts a static server, loads the built renderer bundle, and provides a clean testing environment.\n */\nexport async function createWebGLPlaywrightSetup(\n options: WebGLPlaywrightOptions = {}\n): Promise<WebGLPlaywrightSetup> {\n const width = options.width ?? 256;\n const height = options.height ?? 256;\n const headless = options.headless ?? true;\n\n // Start static server to serve built files\n // Serve from repo root so we can access packages/engine/dist\n const repoRoot = path.resolve(__dirname, '../../../../..');\n\n const staticServer = createServer((request: IncomingMessage, response: ServerResponse) => {\n return handler(request, response, {\n public: repoRoot,\n cleanUrls: false,\n headers: [\n {\n source: '**/*',\n headers: [\n { key: 'Cache-Control', value: 'no-cache' },\n { key: 'Access-Control-Allow-Origin', value: '*' },\n { key: 'Cross-Origin-Opener-Policy', value: 'same-origin' },\n { key: 'Cross-Origin-Embedder-Policy', value: 'require-corp' }\n ]\n }\n ]\n });\n });\n\n const serverUrl = await new Promise<string>((resolve) => {\n staticServer.listen(0, () => {\n const addr = staticServer.address();\n const port = typeof addr === 'object' ? addr?.port : 0;\n const url = `http://localhost:${port}/packages/engine/tests/webgl/fixtures/renderer-test.html`;\n console.log(`WebGL test server serving from ${repoRoot} at ${url}`);\n resolve(url);\n });\n });\n\n // Launch browser\n const browser = await chromium.launch({\n headless,\n args: [\n '--use-gl=swiftshader',\n '--disable-gpu-sandbox',\n '--ignore-gpu-blocklist'\n ]\n });\n\n const context = await browser.newContext({\n viewport: { width, height },\n deviceScaleFactor: 1,\n });\n\n const page = await context.newPage();\n\n // Log browser console for debugging\n page.on('console', msg => {\n if (msg.type() === 'error') console.error(`[Browser Error] ${msg.text()}`);\n else console.log(`[Browser] ${msg.text()}`);\n });\n\n page.on('pageerror', err => {\n console.error(`[Browser Page Error] ${err.message}`);\n });\n\n // Navigate to the test harness\n await page.goto(serverUrl, { waitUntil: 'domcontentloaded' });\n\n // Initialize renderer\n await page.evaluate(`window.createRendererTest()`);\n\n // Wait for renderer to be ready\n await page.waitForFunction(() => (window as any).testRenderer !== undefined, { timeout: 5000 });\n\n const cleanup = async () => {\n await browser.close();\n staticServer.close();\n };\n\n return {\n browser,\n context,\n page,\n width,\n height,\n server: staticServer,\n cleanup\n };\n}\n\n/**\n * Executes a rendering function using the actual quake2ts renderer and captures the result.\n * This must happen in a single page.evaluate() call to preserve WebGL state.\n *\n * @param page - Playwright page\n * @param renderFn - Function code as string that uses window.testRenderer\n * @param width - Optional width to resize the canvas to\n * @param height - Optional height to resize the canvas to\n * @returns Captured pixel data\n */\nexport async function renderAndCaptureWebGLPlaywright(\n page: Page,\n renderFn: string,\n width?: number,\n height?: number\n): Promise<Uint8ClampedArray> {\n try {\n const pixelData = await page.evaluate(({ code, width, height }) => {\n const renderer = (window as any).testRenderer;\n const gl = (window as any).testGl;\n const canvas = (window as any).testCanvas;\n\n if (!renderer || !gl || !canvas) {\n throw new Error('Renderer not initialized');\n }\n\n // Resize canvas if needed\n if (width !== undefined && height !== undefined) {\n canvas.width = width;\n canvas.height = height;\n gl.viewport(0, 0, width, height);\n }\n\n try {\n // Execute the render function\n const fn = new Function('renderer', 'gl', code);\n fn(renderer, gl);\n } catch (err: any) {\n // Capture context for better debugging\n throw new Error(`Renderer Execution Error: ${err.message}\\nCode:\\n${code}`);\n }\n\n // Ensure rendering is complete\n gl.finish();\n\n // Capture pixels\n return (window as any).captureCanvas();\n }, { code: renderFn, width, height });\n\n return new Uint8ClampedArray(pixelData);\n } catch (err: any) {\n // Re-throw with clear message\n throw new Error(`Browser Test Error: ${err.message}`);\n }\n}\n\n/**\n * Runs a WebGL visual test with the actual quake2ts renderer.\n *\n * Usage:\n * ```ts\n * await testWebGLRenderer(`\n * // Clear background\n * gl.clearColor(0, 0, 0, 1);\n * gl.clear(gl.COLOR_BUFFER_BIT);\n *\n * // Use renderer API\n * renderer.begin2D();\n * renderer.drawfillRect(64, 64, 128, 128, [0, 0, 1, 1]);\n * renderer.end2D();\n * `, {\n * name: 'blue-rect',\n * description: 'Blue rectangle test',\n * width: 256,\n * height: 256,\n * snapshotDir: __dirname\n * });\n * ```\n */\nexport async function testWebGLRenderer(\n renderCode: string,\n options: SnapshotTestOptions & WebGLPlaywrightOptions\n): Promise<void> {\n const setup = await createWebGLPlaywrightSetup(options);\n\n try {\n const pixels = await renderAndCaptureWebGLPlaywright(\n setup.page,\n renderCode,\n options.width,\n options.height\n );\n\n await expectSnapshot(pixels, {\n name: options.name,\n description: options.description,\n width: setup.width,\n height: setup.height,\n updateBaseline: options.updateBaseline,\n snapshotDir: options.snapshotDir\n });\n } finally {\n await setup.cleanup();\n }\n}\n","import { PNG } from 'pngjs';\nimport pixelmatch from 'pixelmatch';\nimport fs from 'fs/promises';\nimport { createReadStream, createWriteStream, existsSync } from 'fs';\nimport path from 'path';\nimport { RenderTestSetup, renderAndCapture } from '../engine/helpers/webgpu-rendering.js';\n\nexport interface CaptureOptions {\n width: number;\n height: number;\n format?: GPUTextureFormat;\n}\n\n// Helper to pad bytes to 256 byte alignment (WebGPU requirement)\nfunction getBytesPerRow(width: number): number {\n const bytesPerPixel = 4;\n const unpaddedBytesPerRow = width * bytesPerPixel;\n const align = 256;\n const paddedBytesPerRow = Math.max(\n unpaddedBytesPerRow,\n Math.ceil(unpaddedBytesPerRow / align) * align\n );\n return paddedBytesPerRow;\n}\n\nexport async function captureFramebufferAsPNG(\n device: GPUDevice,\n texture: GPUTexture,\n options: CaptureOptions\n): Promise<Buffer> {\n const { width, height, format = 'rgba8unorm' } = options;\n\n const bytesPerRow = getBytesPerRow(width);\n const bufferSize = bytesPerRow * height;\n\n const outputBuffer = device.createBuffer({\n size: bufferSize,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n label: 'captureFramebufferAsPNG output buffer'\n });\n\n const commandEncoder = device.createCommandEncoder({ label: 'captureFramebufferAsPNG encoder' });\n commandEncoder.copyTextureToBuffer(\n { texture },\n { buffer: outputBuffer, bytesPerRow, rowsPerImage: height },\n { width, height, depthOrArrayLayers: 1 }\n );\n device.queue.submit([commandEncoder.finish()]);\n\n await outputBuffer.mapAsync(GPUMapMode.READ);\n const mappedRange = outputBuffer.getMappedRange();\n const rawData = new Uint8Array(mappedRange);\n\n // Remove padding to get tight packed RGBA\n const bytesPerPixel = 4;\n const tightData = new Uint8ClampedArray(width * height * bytesPerPixel);\n\n for (let y = 0; y < height; y++) {\n const srcOffset = y * bytesPerRow;\n const dstOffset = y * width * bytesPerPixel;\n const rowSize = width * bytesPerPixel;\n // Copy row\n for (let i = 0; i < rowSize; i++) {\n tightData[dstOffset + i] = rawData[srcOffset + i];\n }\n }\n\n outputBuffer.unmap();\n\n // Handle BGRA to RGBA conversion if needed\n // Note: WebGPU usually prefers bgra8unorm for swapchains, but pngjs expects rgba\n if (format === 'bgra8unorm' || format === 'bgra8unorm-srgb') {\n for (let i = 0; i < tightData.length; i += 4) {\n const b = tightData[i];\n const r = tightData[i + 2];\n tightData[i] = r;\n tightData[i + 2] = b;\n }\n }\n\n // Create PNG\n const png = new PNG({ width, height });\n png.data = Buffer.from(tightData);\n\n return PNG.sync.write(png);\n}\n\nexport async function savePNG(\n pixels: Uint8ClampedArray,\n width: number,\n height: number,\n filepath: string\n): Promise<void> {\n const png = new PNG({ width, height });\n png.data = Buffer.from(pixels);\n\n await fs.mkdir(path.dirname(filepath), { recursive: true });\n\n return new Promise((resolve, reject) => {\n const stream = createWriteStream(filepath);\n stream.on('error', reject);\n stream.on('finish', resolve);\n png.pack().pipe(stream);\n });\n}\n\nexport async function loadPNG(\n filepath: string\n): Promise<{ data: Uint8ClampedArray; width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const stream = createReadStream(filepath);\n stream.on('error', reject);\n\n const png = new PNG();\n png.on('error', reject);\n png.on('parsed', (data) => {\n resolve({\n data: new Uint8ClampedArray(data),\n width: png.width,\n height: png.height\n });\n });\n\n stream.pipe(png);\n });\n}\n\nexport interface ComparisonResult {\n pixelsDifferent: number;\n totalPixels: number;\n percentDifferent: number;\n passed: boolean;\n diffImage?: Uint8ClampedArray;\n}\n\nexport interface ComparisonOptions {\n threshold?: number; // Pixel difference threshold (0-1), default 0.1\n includeAA?: boolean; // Include anti-aliasing detection\n diffColor?: [number, number, number]; // Color for diff pixels\n maxDifferencePercent?: number; // Max % difference to pass, default 0.1%\n}\n\nexport async function compareSnapshots(\n actual: Uint8ClampedArray,\n expected: Uint8ClampedArray,\n width: number,\n height: number,\n options?: ComparisonOptions\n): Promise<ComparisonResult> {\n const {\n threshold = 0.1,\n includeAA = false,\n diffColor = [255, 0, 0],\n maxDifferencePercent = 0.1\n } = options || {};\n\n if (actual.length !== expected.length) {\n throw new Error(`Size mismatch: actual length ${actual.length} vs expected length ${expected.length}`);\n }\n\n const diff = new Uint8ClampedArray(width * height * 4);\n const numDiffPixels = pixelmatch(\n actual,\n expected,\n diff,\n width,\n height,\n {\n threshold,\n includeAA,\n diffColor: diffColor as [number, number, number],\n alpha: 1 // Default alpha\n }\n );\n\n const totalPixels = width * height;\n const percentDifferent = (numDiffPixels / totalPixels) * 100;\n const passed = percentDifferent <= (maxDifferencePercent || 0);\n\n return {\n pixelsDifferent: numDiffPixels,\n totalPixels,\n percentDifferent,\n passed,\n diffImage: diff\n };\n}\n\nexport interface SnapshotTestOptions extends ComparisonOptions {\n name: string;\n description?: string;\n width?: number;\n height?: number;\n updateBaseline?: boolean;\n snapshotDir?: string; // Root snapshot directory\n}\n\nexport function getSnapshotPath(name: string, type: 'baseline' | 'actual' | 'diff', snapshotDir: string = '__snapshots__'): string {\n const dirMap = {\n baseline: 'baselines',\n actual: 'actual',\n diff: 'diff'\n };\n return path.join(snapshotDir, dirMap[type], `${name}.png`);\n}\n\nexport async function expectSnapshot(\n pixels: Uint8ClampedArray,\n options: SnapshotTestOptions\n): Promise<void> {\n const {\n name,\n width,\n height,\n updateBaseline = false,\n snapshotDir = path.join(process.cwd(), 'tests', '__snapshots__') // Default to current working dir/tests/__snapshots__\n } = options;\n\n if (!width || !height) {\n throw new Error('Width and height are required for expectSnapshot');\n }\n\n const baselinePath = getSnapshotPath(name, 'baseline', snapshotDir);\n const actualPath = getSnapshotPath(name, 'actual', snapshotDir);\n const diffPath = getSnapshotPath(name, 'diff', snapshotDir);\n\n const alwaysSave = process.env.ALWAYS_SAVE_SNAPSHOTS === '1';\n\n // If update baseline is requested or baseline doesn't exist, save as baseline and return\n if (updateBaseline || !existsSync(baselinePath)) {\n console.log(`Creating/Updating baseline for ${name} at ${baselinePath}`);\n await savePNG(pixels, width, height, baselinePath);\n return;\n }\n\n // Load baseline\n let baseline: { data: Uint8ClampedArray; width: number; height: number };\n try {\n baseline = await loadPNG(baselinePath);\n } catch (e) {\n console.warn(`Failed to load baseline for ${name} at ${baselinePath}: ${e}. Creating new baseline.`);\n await savePNG(pixels, width, height, baselinePath);\n return;\n }\n\n if (baseline.width !== width || baseline.height !== height) {\n console.warn(`Snapshot dimension mismatch for ${name}: expected ${baseline.width}x${baseline.height}, got ${width}x${height}. Updating baseline.`);\n await savePNG(pixels, width, height, baselinePath);\n return;\n }\n\n // Compare\n const result = await compareSnapshots(pixels, baseline.data, width, height, options);\n\n // Save stats\n const statsPath = path.join(snapshotDir, 'stats', `${name}.json`);\n await fs.mkdir(path.dirname(statsPath), { recursive: true });\n await fs.writeFile(statsPath, JSON.stringify({\n passed: result.passed,\n percentDifferent: result.percentDifferent,\n pixelsDifferent: result.pixelsDifferent,\n totalPixels: result.totalPixels,\n threshold: options.threshold ?? 0.1,\n maxDifferencePercent: options.maxDifferencePercent ?? 0.1\n }, null, 2));\n\n if (!result.passed || alwaysSave) {\n // Save actual and diff\n await savePNG(pixels, width, height, actualPath);\n if (result.diffImage) {\n await savePNG(result.diffImage, width, height, diffPath);\n }\n }\n\n if (!result.passed) {\n const failThreshold = 10.0;\n const errorMessage = `Snapshot comparison failed for ${name}: ${result.percentDifferent.toFixed(2)}% different ` +\n `(${result.pixelsDifferent} pixels). ` +\n `See ${diffPath} for details.`;\n\n if (result.percentDifferent <= failThreshold) {\n console.warn(`[WARNING] ${errorMessage} (Marked as failed in report but passing test execution due to <${failThreshold}% difference)`);\n } else {\n throw new Error(errorMessage);\n }\n }\n}\n\nexport async function renderAndExpectSnapshot(\n setup: RenderTestSetup,\n renderFn: (pass: GPURenderPassEncoder) => void,\n options: Omit<SnapshotTestOptions, 'width' | 'height'>\n): Promise<void> {\n const pixels = await renderAndCapture(setup, renderFn);\n await expectSnapshot(pixels, {\n ...options,\n width: setup.width,\n height: setup.height\n });\n}\n","import { expect } from 'vitest';\nimport {\n createRenderTestSetup,\n renderAndCapture,\n createComputeTestSetup,\n runComputeAndReadback,\n RenderTestSetup,\n ComputeTestSetup\n} from './webgpu-rendering.js';\n\nexport interface GeometryBuffers {\n vertexBuffer: GPUBuffer;\n indexBuffer?: GPUBuffer;\n vertexCount: number;\n indexCount?: number;\n}\n\n/**\n * Template for testing a rendering pipeline\n */\nexport async function testPipelineRendering(\n name: string,\n createPipeline: (device: GPUDevice) => GPURenderPipeline,\n setupGeometry: (device: GPUDevice) => GeometryBuffers,\n expectedOutput?: Uint8ClampedArray\n) {\n const setup = await createRenderTestSetup(256, 256);\n\n try {\n const pipeline = createPipeline(setup.context.device);\n const geometry = setupGeometry(setup.context.device);\n\n const pixels = await renderAndCapture(setup, (pass) => {\n pass.setPipeline(pipeline);\n pass.setVertexBuffer(0, geometry.vertexBuffer);\n if (geometry.indexBuffer) {\n pass.setIndexBuffer(geometry.indexBuffer, 'uint16'); // Assuming uint16 for simplicity\n pass.drawIndexed(geometry.indexCount || 0);\n } else {\n pass.draw(geometry.vertexCount);\n }\n });\n\n if (expectedOutput) {\n expect(pixels).toEqual(expectedOutput);\n } else {\n // At least verify we got pixels\n expect(pixels.length).toBe(256 * 256 * 4);\n }\n } finally {\n await setup.cleanup();\n }\n}\n\n/**\n * Template for testing compute shaders\n */\nexport async function testComputeShader(\n name: string,\n createComputePipeline: (device: GPUDevice) => GPUComputePipeline,\n inputData: Float32Array,\n expectedOutput?: Float32Array\n) {\n const setup = await createComputeTestSetup(inputData.byteLength);\n const { device } = setup.context;\n\n try {\n const pipeline = createComputePipeline(device);\n\n // Initialize input data\n const stagingBuffer = device.createBuffer({\n size: inputData.byteLength,\n usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE,\n mappedAtCreation: true\n });\n new Float32Array(stagingBuffer.getMappedRange()).set(inputData);\n stagingBuffer.unmap();\n\n // Copy input to output buffer for processing\n const encoder = device.createCommandEncoder();\n encoder.copyBufferToBuffer(stagingBuffer, 0, setup.outputBuffer, 0, inputData.byteLength);\n device.queue.submit([encoder.finish()]);\n\n // Create a bind group for the storage buffer\n const bindGroup = device.createBindGroup({\n layout: pipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: setup.outputBuffer\n }\n }\n ]\n });\n\n const resultBuffer = await runComputeAndReadback(setup, (pass) => {\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, bindGroup);\n pass.dispatchWorkgroups(Math.ceil(inputData.length / 64));\n });\n\n if (expectedOutput) {\n const floatResult = new Float32Array(resultBuffer);\n expect(floatResult).toEqual(expectedOutput);\n }\n\n stagingBuffer.destroy();\n\n } finally {\n await setup.cleanup();\n }\n}\n","/**\n * Creates a checkerboard texture for testing sampling and filtering.\n */\nexport function createCheckerboardTexture(\n width: number,\n height: number,\n checkSize: number = 32,\n color1: [number, number, number, number] = [1, 1, 1, 1],\n color2: [number, number, number, number] = [0, 0, 0, 1]\n): Uint8ClampedArray {\n const data = new Uint8ClampedArray(width * height * 4);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const isCheck =\n (Math.floor(x / checkSize) + Math.floor(y / checkSize)) % 2 === 0;\n const color = isCheck ? color1 : color2;\n\n const idx = (y * width + x) * 4;\n data[idx] = Math.round(color[0] * 255);\n data[idx + 1] = Math.round(color[1] * 255);\n data[idx + 2] = Math.round(color[2] * 255);\n data[idx + 3] = Math.round(color[3] * 255);\n }\n }\n\n return data;\n}\n\n/**\n * Creates a solid color texture.\n */\nexport function createSolidTexture(\n width: number,\n height: number,\n color: [number, number, number, number]\n): Uint8ClampedArray {\n const data = new Uint8ClampedArray(width * height * 4);\n const r = Math.round(color[0] * 255);\n const g = Math.round(color[1] * 255);\n const b = Math.round(color[2] * 255);\n const a = Math.round(color[3] * 255);\n\n for (let i = 0; i < data.length; i += 4) {\n data[i] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = a;\n }\n\n return data;\n}\n","\nimport { vec3 } from 'gl-matrix';\nimport { Camera } from '@quake2ts/engine';\nimport { Vec3 } from '@quake2ts/shared';\n\n// Define RefDef interface locally if it's not exported from shared/engine,\n// or import it if we find it.\n// Based on grep, RefDef seems elusive or I missed it.\n// Standard Quake 2 RefDef:\nexport interface RefDef {\n x: number;\n y: number;\n width: number;\n height: number;\n fov_x: number;\n fov_y: number;\n vieworg: vec3;\n viewangles: vec3;\n time: number;\n rdflags: number;\n // ... other fields\n}\n\nexport interface ViewState {\n camera: Camera;\n viewport: { x: number; y: number; width: number; height: number };\n refdef: RefDef;\n}\n\nexport interface ViewScenario {\n viewState: ViewState;\n cleanup: () => void;\n}\n\nexport interface CameraInput {\n forward?: number;\n right?: number;\n up?: number;\n pitchDelta?: number;\n yawDelta?: number;\n rollDelta?: number;\n}\n\nexport interface DemoCameraResult {\n origin: Vec3;\n angles: Vec3;\n fov: number;\n}\n\nfunction toVec3(v: Vec3 | vec3 | { x: number, y: number, z: number } | number[]): vec3 {\n if (v instanceof Float32Array && v.length === 3) {\n return v as vec3;\n }\n if (Array.isArray(v) && v.length === 3) {\n return vec3.fromValues(v[0], v[1], v[2]);\n }\n if (typeof v === 'object' && 'x' in v && 'y' in v && 'z' in v) {\n return vec3.fromValues(v.x, v.y, v.z);\n }\n // Fallback or error? defaulting to 0,0,0\n return vec3.create();\n}\n\n/**\n * Creates a mock Camera instance with optional overrides.\n * Accepts partial Camera properties, where position/angles can be Vec3 objects or arrays.\n */\nexport function createMockCamera(overrides: Partial<Omit<Camera, 'position' | 'angles'> & { position: any, angles: any }> = {}): Camera {\n const camera = new Camera();\n\n if (overrides.position) {\n camera.position = toVec3(overrides.position);\n }\n if (overrides.angles) {\n camera.angles = toVec3(overrides.angles);\n }\n if (overrides.fov !== undefined) {\n camera.fov = overrides.fov;\n }\n // Apply other properties if exposed by Camera class setters\n\n return camera;\n}\n\n/**\n * Creates a mock Demo Camera state result (for getDemoCamera mock).\n * This returns a structure using Vec3 interface compatible with angleVectors, unlike Camera class.\n */\nexport function createMockDemoCameraResult(overrides: Partial<DemoCameraResult> = {}): DemoCameraResult {\n return {\n origin: overrides.origin || { x: 0, y: 0, z: 0 },\n angles: overrides.angles || { x: 0, y: 0, z: 0 },\n fov: overrides.fov ?? 90\n };\n}\n\n/**\n * Creates a mock RefDef object.\n */\nexport function createMockRefDef(overrides: Partial<RefDef> = {}): RefDef {\n return {\n x: 0,\n y: 0,\n width: 320,\n height: 240,\n fov_x: 90,\n fov_y: 90,\n vieworg: vec3.create(),\n viewangles: vec3.create(),\n time: 0,\n rdflags: 0,\n ...overrides\n };\n}\n\n/**\n * Creates a mock ViewState object.\n */\nexport function createMockViewState(overrides: Partial<ViewState> = {}): ViewState {\n return {\n camera: overrides.camera || createMockCamera(),\n viewport: overrides.viewport || { x: 0, y: 0, width: 800, height: 600 },\n refdef: overrides.refdef || createMockRefDef(),\n ...overrides\n };\n}\n\n/**\n * Creates a pre-configured view test scenario.\n */\nexport function createViewTestScenario(scenarioType: 'firstPerson' | 'thirdPerson' | 'spectator'): ViewScenario {\n const camera = createMockCamera();\n const refdef = createMockRefDef();\n\n switch (scenarioType) {\n case 'firstPerson':\n camera.position = vec3.fromValues(100, 100, 50);\n camera.angles = vec3.fromValues(0, 45, 0);\n vec3.copy(refdef.vieworg, camera.position);\n vec3.copy(refdef.viewangles, camera.angles);\n break;\n case 'thirdPerson':\n camera.position = vec3.fromValues(100, 100, 100); // Higher/back\n camera.angles = vec3.fromValues(30, 45, 0); // Looking down\n // Refdef might differ from camera in 3rd person (refdef usually is player eye, camera is offset)\n vec3.set(refdef.vieworg, 100, 100, 50); // Player origin\n break;\n case 'spectator':\n camera.position = vec3.fromValues(0, 0, 100);\n camera.angles = vec3.fromValues(90, 0, 0); // Top down\n break;\n }\n\n return {\n viewState: {\n camera,\n viewport: { x: 0, y: 0, width: 800, height: 600 },\n refdef\n },\n cleanup: () => {\n // Any cleanup if needed\n }\n };\n}\n\n/**\n * Simulates camera movement based on input delta.\n * This is a helper to verify camera logic, not a replacement for full physics.\n */\nexport function simulateCameraMovement(camera: Camera, input: CameraInput, deltaTime: number): Camera {\n // Simple movement simulation\n const speed = 100; // units per second\n\n // Update angles\n if (input.pitchDelta) camera.angles[0] += input.pitchDelta;\n if (input.yawDelta) camera.angles[1] += input.yawDelta;\n if (input.rollDelta) camera.angles[2] += input.rollDelta;\n\n // Force update dirty flag in Camera\n camera.angles = camera.angles;\n\n // Calculate forward/right/up vectors based on new angles\n // For simplicity, we can use simple trig or just assume standard axis aligned for basic tests\n // But proper way is AngleVectors.\n // Since we don't have AngleVectors imported here (it's in shared), we might skip complex relative movement\n // or import it.\n\n // Ideally: import { angleVectors } from '@quake2ts/shared/math/angles';\n // But we want to avoid deep deps if possible.\n\n // For now, let's just apply absolute movement if provided, or simplistic axis logic\n if (input.forward || input.right || input.up) {\n // simplistic impl\n camera.position[0] += (input.forward || 0) * deltaTime;\n camera.position[1] += (input.right || 0) * deltaTime;\n camera.position[2] += (input.up || 0) * deltaTime;\n camera.position = camera.position;\n }\n\n return camera;\n}\n","import { vi } from 'vitest';\nimport { PlayerState } from '@quake2ts/shared';\nimport { PlayerClient, PowerupId, KeyId } from '@quake2ts/game';\nimport { FrameRenderStats } from '@quake2ts/engine';\n\n// Since test-utils cannot import from client, we need to mock MessageSystem here or define an interface\n// The Draw_Hud function expects a MessageSystem which has drawCenterPrint and drawNotifications.\n// However, the signature in `hud.ts` uses the class.\n// For testing purposes, we might need a mock MessageSystem interface in test-utils or import it if possible.\n// But we can't import from client. So we will return a mock object that satisfies the interface.\n\nexport interface HudState {\n ps: PlayerState;\n client: PlayerClient;\n health: number;\n armor: number;\n ammo: number;\n stats: number[]; // Game stats (health, armor, ammo indices)\n pickupIcon?: string;\n damageIndicators?: any[];\n renderStats?: FrameRenderStats; // Optional render stats for verification\n timeMs: number;\n messages: any; // Using any for now to avoid circular dependency\n}\n\nexport function createMockHudState(overrides?: Partial<HudState>): HudState {\n const defaultPs = {\n damageAlpha: 0,\n damageIndicators: [],\n origin: { x: 0, y: 0, z: 0 },\n velocity: { x: 0, y: 0, z: 0 },\n viewAngles: { x: 0, y: 0, z: 0 },\n onGround: true,\n waterLevel: 0,\n mins: { x: 0, y: 0, z: 0 },\n maxs: { x: 0, y: 0, z: 0 },\n centerPrint: null,\n notify: null\n } as unknown as PlayerState;\n\n const defaultClient = {\n inventory: {\n armor: { armorCount: 50, armorType: 'jacket' },\n currentWeapon: 1, // Blaster usually\n ammo: { counts: [] },\n keys: new Set<KeyId>(),\n powerups: new Map<PowerupId, number>()\n }\n } as unknown as PlayerClient;\n\n // Use a numeric array for game stats (EntityState.stats)\n // Indexes: 1=Health, 2=Ammo, 4=Armor (based on client/src/index.ts usage)\n const defaultStats = new Array(32).fill(0);\n defaultStats[1] = 100; // Health\n defaultStats[2] = 25; // Ammo\n defaultStats[4] = 50; // Armor\n\n const defaultMessages = {\n drawCenterPrint: vi.fn(),\n drawNotifications: vi.fn(),\n addCenterPrint: vi.fn(),\n addNotification: vi.fn(),\n clear: vi.fn()\n };\n\n return {\n ps: overrides?.ps ?? defaultPs,\n client: overrides?.client ?? defaultClient,\n health: overrides?.health ?? 100,\n armor: overrides?.armor ?? 50,\n ammo: overrides?.ammo ?? 25,\n stats: overrides?.stats ?? defaultStats,\n pickupIcon: overrides?.pickupIcon,\n damageIndicators: overrides?.damageIndicators,\n renderStats: overrides?.renderStats,\n timeMs: overrides?.timeMs ?? 1000,\n messages: overrides?.messages ?? defaultMessages\n };\n}\n\nexport function createMockScoreboard(players: any[] = []): any {\n return {\n players: players,\n draw: vi.fn()\n };\n}\n\nexport interface MockChatMessage {\n text: string;\n sender?: string;\n timestamp?: number;\n}\n\nexport function createMockChatMessage(text: string, sender?: string, timestamp: number = Date.now()): MockChatMessage {\n return {\n text,\n sender,\n timestamp\n };\n}\n\nexport interface MockNotification {\n type: string;\n message: string;\n duration?: number;\n}\n\nexport function createMockNotification(type: string, message: string, duration: number = 3000): MockNotification {\n return {\n type,\n message,\n duration\n };\n}\n","\nimport {\n ServerCommand,\n ClientCommand,\n Vec3\n} from '@quake2ts/shared';\nimport {\n EntityState,\n FrameData,\n ProtocolPlayerState,\n createEmptyEntityState,\n createEmptyProtocolPlayerState,\n DamageIndicator,\n FogData\n} from '@quake2ts/engine';\n\n/**\n * Mocks a server message by just providing the type and data buffer.\n * In a real scenario, this would be constructing a binary packet.\n */\nexport interface MockServerMessage {\n type: number;\n data: Uint8Array;\n}\n\nexport function createMockServerMessage(type: number, data: Uint8Array = new Uint8Array()): MockServerMessage {\n return { type, data };\n}\n\n/**\n * Creates a mock Snapshot (FrameData) for testing.\n */\nexport function createMockSnapshot(\n serverFrame: number,\n entities: EntityState[] = [],\n playerState?: Partial<ProtocolPlayerState>,\n deltaFrame: number = 0\n): FrameData {\n return {\n serverFrame,\n deltaFrame,\n surpressCount: 0,\n areaBytes: 0,\n areaBits: new Uint8Array(),\n playerState: {\n ...createEmptyProtocolPlayerState(),\n ...playerState\n },\n packetEntities: {\n delta: false,\n entities\n }\n };\n}\n\n/**\n * Creates a mock Delta Frame (FrameData with delta flag).\n */\nexport function createMockDeltaFrame(\n serverFrame: number,\n deltaFrame: number,\n entities: EntityState[] = [],\n playerState?: Partial<ProtocolPlayerState>\n): FrameData {\n return {\n serverFrame,\n deltaFrame,\n surpressCount: 0,\n areaBytes: 0,\n areaBits: new Uint8Array(),\n playerState: {\n ...createEmptyProtocolPlayerState(),\n ...playerState\n },\n packetEntities: {\n delta: true,\n entities\n }\n };\n}\n\n/**\n * Simulates network delay for a sequence of messages.\n */\nexport function simulateNetworkDelay<T>(messages: T[], delayMs: number): Promise<T[]> {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(messages);\n }, delayMs);\n });\n}\n\n/**\n * Simulates packet loss by randomly filtering messages.\n * @param messages The messages to process\n * @param lossPercent Percentage of packet loss (0-100)\n */\nexport function simulatePacketLoss<T>(messages: T[], lossPercent: number): T[] {\n return messages.filter(() => Math.random() * 100 >= lossPercent);\n}\n\n/**\n * Factory for creating a mock EntityState.\n */\nexport function createMockEntityState(\n number: number,\n modelIndex: number = 0,\n origin: Partial<Vec3> = { x: 0, y: 0, z: 0 },\n overrides?: Partial<EntityState>\n): EntityState {\n const state = createEmptyEntityState();\n state.number = number;\n state.modelindex = modelIndex;\n state.origin.x = origin.x ?? 0;\n state.origin.y = origin.y ?? 0;\n state.origin.z = origin.z ?? 0;\n\n if (overrides) {\n Object.assign(state, overrides);\n }\n return state;\n}\n\nexport function createMockDamageIndicator(\n damage: number,\n dir: Vec3 = { x: 0, y: 0, z: 0 },\n health = true,\n armor = false,\n power = false\n): DamageIndicator {\n return {\n damage,\n dir,\n health,\n armor,\n power\n };\n}\n\nexport function createMockFogData(overrides: Partial<FogData> = {}): FogData {\n return {\n density: 0.1,\n red: 100,\n green: 100,\n blue: 100,\n ...overrides\n };\n}\n","import { vi } from 'vitest';\n\nexport interface DownloadManager {\n download(url: string): Promise<ArrayBuffer>;\n cancel(url: string): void;\n getProgress(url: string): number;\n}\n\nexport function createMockDownloadManager(overrides?: Partial<DownloadManager>): DownloadManager {\n return {\n download: vi.fn().mockResolvedValue(new ArrayBuffer(0)),\n cancel: vi.fn(),\n getProgress: vi.fn().mockReturnValue(0),\n ...overrides\n };\n}\n\nexport interface PrecacheList {\n models: string[];\n sounds: string[];\n images: string[];\n}\n\nexport function createMockPrecacheList(\n models: string[] = [],\n sounds: string[] = [],\n images: string[] = []\n): PrecacheList {\n return {\n models,\n sounds,\n images\n };\n}\n\nexport async function simulateDownload(\n url: string,\n progressCallback?: (percent: number) => void\n): Promise<ArrayBuffer> {\n const steps = 10;\n for (let i = 0; i <= steps; i++) {\n if (progressCallback) {\n progressCallback(i / steps);\n }\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n return new ArrayBuffer(1024);\n}\n","import { EntityState, PmoveTraceResult, Vec3 } from '@quake2ts/shared';\n\n// Mock ConfigStringIndex to match shared\nenum ConfigStringIndex {\n Models = 32,\n Sounds = 288,\n Images = 544,\n Players = 544 + 256, // Base for players, usually logic handles offset\n}\n\nconst MAX_MODELS = 256;\nconst MAX_SOUNDS = 256;\nconst MAX_IMAGES = 256;\n\n// Minimal ClientConfigStrings implementation for testing\nexport class MockClientConfigStrings {\n private readonly strings: Map<number, string> = new Map();\n private readonly models: string[] = [];\n private readonly sounds: string[] = [];\n private readonly images: string[] = [];\n\n constructor() {}\n\n public set(index: number, value: string): void {\n this.strings.set(index, value);\n\n if (index >= ConfigStringIndex.Models && index < ConfigStringIndex.Models + MAX_MODELS) {\n this.models[index - ConfigStringIndex.Models] = value;\n } else if (index >= ConfigStringIndex.Sounds && index < ConfigStringIndex.Sounds + MAX_SOUNDS) {\n this.sounds[index - ConfigStringIndex.Sounds] = value;\n } else if (index >= ConfigStringIndex.Images && index < ConfigStringIndex.Images + MAX_IMAGES) {\n this.images[index - ConfigStringIndex.Images] = value;\n }\n }\n\n public get(index: number): string | undefined {\n return this.strings.get(index);\n }\n\n public getModelName(index: number): string | undefined {\n return this.models[index];\n }\n\n public getSoundName(index: number): string | undefined {\n return this.sounds[index];\n }\n\n public getImageName(index: number): string | undefined {\n return this.images[index];\n }\n\n public getPlayerName(playernum: number): string | undefined {\n // Stub logic\n const info = this.strings.get(ConfigStringIndex.Players + playernum);\n if (!info) return undefined;\n const parts = info.split('\\\\');\n for (let i = 1; i < parts.length; i += 2) {\n if (parts[i] === 'name') {\n return parts[i + 1];\n }\n }\n return undefined;\n }\n\n public clear(): void {\n this.strings.clear();\n this.models.length = 0;\n this.sounds.length = 0;\n this.images.length = 0;\n }\n}\n\n// Define ClientState interface locally as it's not exported from client\nexport interface ClientStateProvider {\n tickRate: number;\n frameTimeMs: number;\n serverFrame: number;\n serverProtocol: number;\n configStrings: MockClientConfigStrings;\n getClientName(num: number): string;\n getKeyBinding(key: string): string;\n inAutoDemo: boolean;\n}\n\nexport interface ClientInfo {\n name: string;\n skin: string;\n model: string;\n icon: string;\n}\n\nexport interface ClientState extends ClientStateProvider {\n playerNum: number;\n serverTime: number;\n parseEntities: number;\n}\n\nexport interface Frame {\n serverFrame: number;\n deltaFrame: number;\n valid: boolean;\n entities: EntityState[];\n}\n\nexport interface ConnectionState {\n state: 'disconnected' | 'connecting' | 'connected' | 'active';\n}\n\n// -- Factories --\n\nexport const createMockClientState = (overrides?: Partial<ClientState>): ClientState => {\n const configStrings = new MockClientConfigStrings();\n\n return {\n tickRate: 10,\n frameTimeMs: 100,\n serverFrame: 0,\n serverProtocol: 34,\n configStrings,\n playerNum: 0,\n serverTime: 0,\n parseEntities: 0,\n inAutoDemo: false,\n getClientName: (num: number) => `Player${num}`,\n getKeyBinding: (key: string) => '',\n ...overrides\n };\n};\n\nexport const createMockFrame = (overrides?: Partial<Frame>): Frame => ({\n serverFrame: 0,\n deltaFrame: -1,\n valid: true,\n entities: [],\n ...overrides\n});\n\nexport const createMockClientInfo = (overrides?: Partial<ClientInfo>): ClientInfo => ({\n name: 'Player',\n skin: 'male/grunt',\n model: 'male',\n icon: 'pics/icon.pcx',\n ...overrides\n});\n\nexport const createMockConnectionState = (state: ConnectionState['state'] = 'connected'): ConnectionState => ({\n state\n});\n","import { vi } from 'vitest';\n\nexport interface MockConsole {\n // Add Console interface methods here as needed, based on usage in engine/client\n // Currently the Console interface is not strictly defined in shared types for test-utils\n // but we mimic what is commonly used.\n print: (text: string) => void;\n error: (text: string) => void;\n execute: (text: string) => void;\n addCommand: (name: string, handler: (args: string[]) => void) => void;\n getCvar: (name: string) => string | undefined;\n setCvar: (name: string, value: string) => void;\n\n // Test helpers\n getHistory: () => string[];\n clearHistory: () => void;\n getErrors: () => string[];\n}\n\nexport interface MockCommand {\n name: string;\n handler: (args: string[]) => void;\n}\n\nexport interface CvarRegistry {\n [key: string]: string;\n}\n\nexport function createMockConsole(overrides?: Partial<MockConsole>): MockConsole {\n const history: string[] = [];\n const errors: string[] = [];\n const commands: Record<string, (args: string[]) => void> = {};\n const cvars: Record<string, string> = {};\n\n return {\n print: vi.fn((text: string) => {\n history.push(text);\n }),\n error: vi.fn((text: string) => {\n errors.push(text);\n }),\n execute: vi.fn((text: string) => {\n const parts = text.trim().split(/\\s+/);\n const cmd = parts[0];\n const args = parts.slice(1);\n if (commands[cmd]) {\n commands[cmd](args);\n } else {\n history.push(`Unknown command \"${cmd}\"`);\n }\n }),\n addCommand: vi.fn((name: string, handler: (args: string[]) => void) => {\n commands[name] = handler;\n }),\n getCvar: vi.fn((name: string) => cvars[name]),\n setCvar: vi.fn((name: string, value: string) => {\n cvars[name] = value;\n }),\n getHistory: () => history,\n clearHistory: () => {\n history.length = 0;\n errors.length = 0;\n },\n getErrors: () => errors,\n ...overrides\n };\n}\n\nexport function createMockCommand(name: string, handler: (args: string[]) => void): MockCommand {\n return { name, handler };\n}\n\nexport function createMockCvarRegistry(initialCvars?: Record<string, string>): CvarRegistry {\n return { ...initialCvars };\n}\n","import { EntityState } from '@quake2ts/shared';\nimport { ClientState, createMockClientState } from '../mocks/state.js';\nimport { UserCommand } from '@quake2ts/shared';\n\n// -- Interfaces --\n\nexport interface PredictionScenario {\n clientState: ClientState;\n snapshots: EntityState[][];\n lagMs: number;\n}\n\nexport interface SmoothingAnalysis {\n smooth: boolean;\n maxError: number;\n averageError: number;\n jumps: number[];\n}\n\n// -- Helpers --\n\nexport const createPredictionTestScenario = (lagMs: number = 100): PredictionScenario => {\n // Create a base client state using the factory\n const clientState = createMockClientState({\n playerNum: 0,\n serverTime: 1000,\n getClientName: (num: number) => 'TestPlayer'\n });\n\n // Create some snapshot history\n const snapshots: EntityState[][] = [];\n for (let i = 0; i < 5; i++) {\n const frameEntities: EntityState[] = [\n {\n number: 1,\n origin: { x: i * 10, y: 0, z: 0 },\n angles: { x: 0, y: 0, z: 0 },\n oldOrigin: { x: (i - 1) * 10, y: 0, z: 0 },\n modelIndex: 0,\n modelIndex2: 0,\n modelIndex3: 0,\n modelIndex4: 0,\n frame: 0,\n skinNum: 0,\n effects: 0,\n renderfx: 0,\n solid: 0,\n sound: 0,\n event: 0\n }\n ];\n snapshots.push(frameEntities);\n }\n\n return {\n clientState,\n snapshots,\n lagMs\n };\n};\n\nexport const simulateClientPrediction = (\n state: ClientState,\n input: UserCommand,\n deltaTime: number\n): ClientState => {\n // This is a stub for simulating prediction\n // Real implementation would invoke PMove logic\n // For testing helpers, we might just update time\n return {\n ...state,\n serverTime: state.serverTime + deltaTime * 1000\n };\n};\n\nexport const createInterpolationTestData = (\n startState: EntityState,\n endState: EntityState,\n steps: number = 10\n): EntityState[] => {\n const result: EntityState[] = [];\n\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const lerp = (a: number, b: number) => a + (b - a) * t;\n\n result.push({\n ...startState,\n origin: {\n x: lerp(startState.origin.x, endState.origin.x),\n y: lerp(startState.origin.y, endState.origin.y),\n z: lerp(startState.origin.z, endState.origin.z),\n },\n angles: {\n x: lerp(startState.angles.x, endState.angles.x),\n y: lerp(startState.angles.y, endState.angles.y),\n z: lerp(startState.angles.z, endState.angles.z),\n }\n });\n }\n\n return result;\n};\n\nexport const verifySmoothing = (states: EntityState[]): SmoothingAnalysis => {\n let maxError = 0;\n let totalError = 0;\n const jumps: number[] = [];\n\n for (let i = 1; i < states.length; i++) {\n const prev = states[i-1].origin;\n const curr = states[i].origin;\n\n const dx = curr.x - prev.x;\n const dy = curr.y - prev.y;\n const dz = curr.z - prev.z;\n const dist = Math.sqrt(dx*dx + dy*dy + dz*dz);\n\n // Assume constant velocity, check for large deviations\n // Ideally we'd compare against expected position\n // Here we just track distance changes\n\n if (dist > 50) { // arbitrary jump threshold\n jumps.push(i);\n }\n\n totalError += dist; // This isn't really error without a reference, but serves as a metric\n }\n\n return {\n smooth: jumps.length === 0,\n maxError,\n averageError: totalError / (states.length - 1 || 1),\n jumps\n };\n};\n","import { compareSnapshots, getSnapshotPath, SnapshotTestOptions, ComparisonResult, savePNG } from './snapshots.js';\nimport UPNG from 'upng-js';\nimport fs from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\n\nexport interface AnimationSnapshotOptions extends SnapshotTestOptions {\n frameCount: number;\n fps?: number;\n}\n\nexport interface AnimationSnapshotResult {\n passed: boolean;\n totalPixels: number;\n totalDiffPixels: number;\n percentDifferent: number;\n frameStats: ComparisonResult[];\n}\n\nasync function loadAPNG(filepath: string): Promise<{ width: number, height: number, frames: Uint8ClampedArray[] }> {\n const buffer = await fs.readFile(filepath);\n // Cast buffer (Uint8Array) to ArrayBuffer for UPNG.decode\n // We must use buffer.buffer, but sliced if it's a subarray.\n const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);\n const img = UPNG.decode(arrayBuffer);\n const framesRGBA = UPNG.toRGBA8(img);\n\n // Convert ArrayBuffers to Uint8ClampedArrays\n const frames = framesRGBA.map(buffer => new Uint8ClampedArray(buffer));\n\n return {\n width: img.width,\n height: img.height,\n frames\n };\n}\n\nasync function saveAPNG(\n filepath: string,\n frames: Uint8ClampedArray[],\n width: number,\n height: number,\n delayMs: number\n): Promise<void> {\n // UPNG expects ArrayBuffers. Uint8ClampedArray.buffer might include offset/length.\n const buffers: ArrayBuffer[] = frames.map(f => {\n // Force copy to plain ArrayBuffer to avoid SharedArrayBuffer issues\n const dst = new ArrayBuffer(f.byteLength);\n new Uint8ClampedArray(dst).set(f);\n return dst;\n });\n\n // UPNG.encode(imgs, w, h, cnum, dels)\n const delays = new Array(frames.length).fill(delayMs);\n\n // cnum 0 = lossless\n const pngBuffer = UPNG.encode(buffers, width, height, 0, delays);\n\n await fs.mkdir(path.dirname(filepath), { recursive: true });\n await fs.writeFile(filepath, Buffer.from(pngBuffer));\n}\n\nexport async function expectAnimationSnapshot(\n renderAndCaptureFrame: (frameIndex: number) => Promise<Uint8ClampedArray>,\n options: AnimationSnapshotOptions\n): Promise<void> {\n const {\n name,\n width,\n height,\n frameCount,\n fps = 10,\n updateBaseline = false,\n snapshotDir = path.join(process.cwd(), 'tests', '__snapshots__'),\n threshold = 0.1,\n maxDifferencePercent = 0.1\n } = options;\n\n if (!width || !height) {\n throw new Error('Width and height are required for expectAnimationSnapshot');\n }\n\n const baselinePath = getSnapshotPath(name, 'baseline', snapshotDir);\n const actualPath = getSnapshotPath(name, 'actual', snapshotDir);\n const diffPath = getSnapshotPath(name, 'diff', snapshotDir);\n const alwaysSave = process.env.ALWAYS_SAVE_SNAPSHOTS === '1';\n\n // 1. Capture all frames\n const actualFrames: Uint8ClampedArray[] = [];\n for (let i = 0; i < frameCount; i++) {\n const frameData = await renderAndCaptureFrame(i);\n if (frameData.length !== width * height * 4) {\n throw new Error(`Frame ${i} dimension mismatch: expected length ${width * height * 4}, got ${frameData.length}`);\n }\n actualFrames.push(frameData);\n }\n\n const delayMs = 1000 / fps;\n\n // 2. Load Baseline if needed\n let baselineFrames: Uint8ClampedArray[] | null = null;\n let shouldUpdateBaseline = updateBaseline || !existsSync(baselinePath);\n\n if (!shouldUpdateBaseline) {\n try {\n const baseline = await loadAPNG(baselinePath);\n if (baseline.width !== width || baseline.height !== height) {\n console.warn(`Baseline dimensions mismatch (${baseline.width}x${baseline.height} vs ${width}x${height}). Forcing update.`);\n shouldUpdateBaseline = true;\n } else if (baseline.frames.length !== frameCount) {\n console.warn(`Baseline frame count mismatch (${baseline.frames.length} vs ${frameCount}). Forcing update.`);\n shouldUpdateBaseline = true;\n } else {\n baselineFrames = baseline.frames;\n }\n } catch (e) {\n console.warn(`Failed to load baseline APNG: ${e}. Forcing update.`);\n shouldUpdateBaseline = true;\n }\n }\n\n // 3. Save Baseline if needed\n if (shouldUpdateBaseline) {\n console.log(`Creating/Updating baseline for ${name} at ${baselinePath}`);\n await saveAPNG(baselinePath, actualFrames, width, height, delayMs);\n return;\n }\n\n // 4. Compare\n if (!baselineFrames) {\n throw new Error(\"Baseline frames missing despite checks.\");\n }\n\n const frameStats: ComparisonResult[] = [];\n const diffFrames: Uint8ClampedArray[] = [];\n let totalDiffPixels = 0;\n let totalPixels = 0;\n\n for (let i = 0; i < frameCount; i++) {\n const result = await compareSnapshots(actualFrames[i], baselineFrames[i], width, height, options);\n frameStats.push(result);\n\n if (result.diffImage) {\n diffFrames.push(result.diffImage);\n } else {\n // Provide a blank frame (transparent or black) if no diff\n diffFrames.push(new Uint8ClampedArray(width * height * 4));\n }\n\n totalDiffPixels += result.pixelsDifferent;\n totalPixels += width * height;\n }\n\n const avgPercentDifferent = (totalDiffPixels / totalPixels) * 100;\n const passed = avgPercentDifferent <= (maxDifferencePercent || 0);\n\n const result: AnimationSnapshotResult = {\n passed,\n totalPixels,\n totalDiffPixels,\n percentDifferent: avgPercentDifferent,\n frameStats\n };\n\n // 5. Save Stats\n const statsPath = path.join(snapshotDir, 'stats', `${name}.json`);\n await fs.mkdir(path.dirname(statsPath), { recursive: true });\n await fs.writeFile(statsPath, JSON.stringify({\n passed: result.passed,\n percentDifferent: result.percentDifferent,\n pixelsDifferent: result.totalDiffPixels,\n totalPixels: result.totalPixels,\n threshold: options.threshold ?? 0.1,\n maxDifferencePercent: options.maxDifferencePercent ?? 0.1,\n frameCount: frameCount\n }, null, 2));\n\n // 6. Save Actual and Diff if failed or always save\n if (!passed || alwaysSave) {\n await saveAPNG(actualPath, actualFrames, width, height, delayMs);\n await saveAPNG(diffPath, diffFrames, width, height, delayMs);\n }\n\n if (!passed) {\n const failThreshold = 10.0;\n const errorMessage = `Animation snapshot comparison failed for ${name}: ${result.percentDifferent.toFixed(2)}% different ` +\n `(${result.totalDiffPixels} pixels total). ` +\n `See ${diffPath} for details.`;\n\n if (result.percentDifferent <= failThreshold) {\n console.warn(`[WARNING] ${errorMessage} (Marked as failed in report but passing test execution due to <${failThreshold}% difference)`);\n } else {\n throw new Error(errorMessage);\n }\n }\n}\n","export interface PlaywrightOptions {\n headless?: boolean;\n viewport?: { width: number; height: number };\n}\n\nexport interface PlaywrightTestClient {\n page: any; // Type as 'Page' from playwright in real usage, but keeping it generic here to avoid hard dependency on playwright types in this util file if not needed\n browser: any;\n navigate(url: string): Promise<void>;\n waitForGame(): Promise<void>;\n injectInput(type: string, data: any): Promise<void>;\n screenshot(name: string): Promise<Buffer>;\n close(): Promise<void>;\n}\n\n/**\n * Creates a Playwright test client.\n * Note: Requires playwright to be installed in the project.\n */\nexport async function createPlaywrightTestClient(options: PlaywrightOptions = {}): Promise<PlaywrightTestClient> {\n // Dynamic import to avoid hard dependency if not used\n let playwright;\n try {\n playwright = await import('playwright');\n } catch (e) {\n throw new Error('Playwright is not installed. Please install it to use this utility.');\n }\n\n const browser = await playwright.chromium.launch({\n headless: options.headless ?? true,\n });\n const context = await browser.newContext({\n viewport: options.viewport || { width: 1280, height: 720 },\n });\n const page = await context.newPage();\n\n return {\n page,\n browser,\n async navigate(url: string) {\n await page.goto(url);\n },\n async waitForGame() {\n await waitForGameReady(page);\n },\n async injectInput(type: string, data: any) {\n // Simulate input injection via evaluate\n await page.evaluate(({ type, data }: any) => {\n // Assumes a global function or event listener exists to receive injected input\n console.log('Injecting input', type, data);\n // (window as any).game.injectInput(type, data);\n }, { type, data });\n },\n async screenshot(name: string) {\n return await page.screenshot({ path: `${name}.png` });\n },\n async close() {\n await browser.close();\n }\n };\n}\n\n/**\n * Waits for the game to be ready.\n */\nexport async function waitForGameReady(page: any, timeout: number = 10000): Promise<void> {\n await page.waitForFunction(() => {\n // Check for some global game state or canvas presence\n return (window as any).game && (window as any).game.isRunning;\n }, { timeout });\n}\n\nexport interface GameStateCapture {\n time: number;\n entities: number;\n // Add other state properties\n}\n\n/**\n * Captures current game state from the browser.\n */\nexport async function captureGameState(page: any): Promise<GameStateCapture> {\n return await page.evaluate(() => {\n const game = (window as any).game;\n return {\n time: game ? game.time : 0,\n entities: game && game.entities ? game.entities.length : 0\n };\n });\n}\n","export type NetworkCondition = 'good' | 'slow' | 'unstable' | 'offline' | 'custom';\n\nexport interface NetworkSimulator {\n latency: number; // ms\n jitter: number; // ms\n packetLoss: number; // percentage 0-1\n bandwidth: number; // bytes per second\n}\n\n/**\n * Simulates network conditions.\n */\nexport function simulateNetworkCondition(condition: NetworkCondition): NetworkSimulator {\n switch (condition) {\n case 'good':\n return { latency: 20, jitter: 5, packetLoss: 0, bandwidth: 10 * 1024 * 1024 };\n case 'slow':\n return { latency: 150, jitter: 20, packetLoss: 0.01, bandwidth: 1 * 1024 * 1024 };\n case 'unstable':\n return { latency: 100, jitter: 100, packetLoss: 0.05, bandwidth: 512 * 1024 };\n case 'offline':\n return { latency: 0, jitter: 0, packetLoss: 1, bandwidth: 0 };\n case 'custom':\n default:\n return { latency: 0, jitter: 0, packetLoss: 0, bandwidth: Infinity };\n }\n}\n\n/**\n * Creates a custom network condition.\n */\nexport function createCustomNetworkCondition(latency: number, jitter: number, packetLoss: number): NetworkSimulator {\n return {\n latency,\n jitter,\n packetLoss,\n bandwidth: Infinity // Default to unlimited unless specified\n };\n}\n\n/**\n * Helper to throttle bandwidth (e.g. for Playwright).\n */\nexport function throttleBandwidth(bytesPerSecond: number): void {\n // This function would interface with Playwright's CDPSession in an E2E test.\n // It returns void here as a placeholder for the logic to be used within a test context.\n}\n","import { Page } from 'playwright';\nimport { PNG } from 'pngjs';\nimport pixelmatch from 'pixelmatch';\nimport { Canvas } from '@napi-rs/canvas';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nexport interface VisualDiff {\n diffPixels: number;\n diffPercentage: number;\n isMatch: boolean;\n diffImage?: Buffer;\n}\n\nexport interface VisualScenario {\n sceneName: string;\n setup?: (page: Page) => Promise<void>;\n}\n\n/**\n * Captures a screenshot of the game canvas.\n */\nexport async function captureGameScreenshot(page: Page, name: string): Promise<Buffer> {\n const canvasElement = page.locator('canvas');\n if (await canvasElement.count() > 0) {\n return await canvasElement.screenshot({ path: `${name}.png` });\n }\n return await page.screenshot({ path: `${name}.png` });\n}\n\n/**\n * Saves a canvas to a PNG file.\n */\nexport async function takeScreenshot(canvas: Canvas | HTMLCanvasElement, filepath: string): Promise<void> {\n let buffer: Buffer;\n\n // Handle @napi-rs/canvas Canvas object\n if ('toBuffer' in canvas && typeof canvas.toBuffer === 'function') {\n buffer = canvas.toBuffer('image/png');\n }\n // Handle JSDOM HTMLCanvasElement\n else if ('toDataURL' in canvas) {\n const dataUrl = canvas.toDataURL('image/png');\n const base64 = dataUrl.replace(/^data:image\\/png;base64,/, '');\n buffer = Buffer.from(base64, 'base64');\n } else {\n throw new Error('Unsupported canvas type for screenshot');\n }\n\n await fs.mkdir(path.dirname(filepath), { recursive: true });\n await fs.writeFile(filepath, buffer);\n}\n\n/**\n * Compares two image buffers using pixelmatch.\n */\nexport function compareScreenshots(baseline: Buffer, current: Buffer, threshold: number = 0.01): VisualDiff {\n try {\n const img1 = PNG.sync.read(baseline);\n const img2 = PNG.sync.read(current);\n\n if (img1.width !== img2.width || img1.height !== img2.height) {\n throw new Error(`Image dimensions do not match: ${img1.width}x${img1.height} vs ${img2.width}x${img2.height}`);\n }\n\n const { width, height } = img1;\n const diff = new PNG({ width, height });\n\n const diffPixels = pixelmatch(\n img1.data,\n img2.data,\n diff.data,\n width,\n height,\n { threshold }\n );\n\n const diffPercentage = diffPixels / (width * height);\n const isMatch = diffPixels === 0;\n\n return {\n diffPixels,\n diffPercentage,\n isMatch,\n diffImage: PNG.sync.write(diff)\n };\n } catch (error) {\n // Fallback or error handling\n console.error('Error comparing screenshots:', error);\n return {\n diffPixels: -1,\n diffPercentage: 1.0,\n isMatch: false\n };\n }\n}\n\n/**\n * Creates a visual test scenario.\n */\nexport function createVisualTestScenario(sceneName: string): VisualScenario {\n return {\n sceneName\n };\n}\n"],"mappings":"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","names":["exports","module","path","exports","module","exports","module","exports","module","exports","module","path","minimatch","Minimatch","filter","makeRe","braceExpand","set","exports","module","path","options","i","exports","module","exports","module","exports","charset","path","extension","exports","module","exports","module","exports","module","path","exports","module","exports","module","exports","module","exports","module","path","createReadStream","resolve","headers","import_vitest","import_shared","import_shared","import_engine","import_shared","import_vitest","import_game","import_shared","import_game","import_shared","import_vitest","import_vitest","import_game","import_game","import_vitest","import_shared","import_shared","import_vitest","import_server","HandshakeStage","import_vitest","import_vitest","import_server","import_shared","handler","import_vitest","options","canvas","import_canvas","canvas","data","img","globals","import_vitest","import_vitest","import_vitest","path","import_vitest","import_engine","import_vitest","import_engine","import_vitest","import_engine","import_vitest","fs","path","resolve","pixelmatch","import_path","path","handler","resolve","width","height","import_vitest","import_engine","import_vitest","import_engine","resolve","import_vitest","resolve","import_vitest","handler","import_promises","import_fs","import_path","fs","UPNG","buffer","path","result","type","data","import_pngjs","import_pixelmatch","import_promises","import_path","fs","path","pixelmatch"]}
|