@pipelab/plugin-discord 1.0.0-beta.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["path","path","basename","path","join","cp","basename"],"sources":["../../../node_modules/change-case/dist/index.js","../../../node_modules/serve-handler/src/glob-slash.js","../../../node_modules/concat-map/index.js","../../../node_modules/balanced-match/index.js","../../../node_modules/serve-handler/node_modules/brace-expansion/index.js","../../../node_modules/serve-handler/node_modules/minimatch/minimatch.js","../../../node_modules/serve-handler/node_modules/path-to-regexp/index.js","../../../node_modules/mime-db/db.json","../../../node_modules/mime-db/index.js","../../../node_modules/serve-handler/node_modules/mime-types/index.js","../../../node_modules/bytes/index.js","../../../node_modules/content-disposition/index.js","../../../node_modules/path-is-inside/lib/path-is-inside.js","../../../node_modules/range-parser/index.js","../../../node_modules/serve-handler/src/directory.js","../../../node_modules/serve-handler/src/error.js","../../../node_modules/serve-handler/src/index.js","../src/discord.ts","../src/preview.ts","../src/package.ts","../src/index.ts"],"sourcesContent":["// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\n// Used to iterate over the initial split result and separate numbers.\nconst SPLIT_SEPARATE_NUMBER_RE = /(\\d)\\p{Ll}|(\\p{L})\\d/u;\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_SUFFIX_CHARACTERS = \"\";\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(value) {\n let result = value.trim();\n result = result\n .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n let start = 0;\n let end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n if (start === end)\n return [];\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n return result.slice(start, end).split(/\\0/g);\n}\n/**\n * Split the input string into an array of words, separating numbers.\n */\nexport function splitSeparateNumbers(value) {\n const words = split(value);\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);\n if (match) {\n const offset = match.index + (match[1] ?? match[2]).length;\n words.splice(i, 1, word.slice(0, offset), word.slice(offset));\n }\n }\n return words;\n}\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (prefix +\n words.map(lowerFactory(options?.locale)).join(options?.delimiter ?? \" \") +\n suffix);\n}\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (prefix +\n words\n .map((word, index) => {\n if (index === 0)\n return lower(word);\n return transform(word, index);\n })\n .join(options?.delimiter ?? \"\") +\n suffix);\n}\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return prefix + words.map(transform).join(options?.delimiter ?? \"\") + suffix;\n}\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input, options) {\n return capitalCase(input, { delimiter: \"_\", ...options });\n}\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n return (prefix +\n words\n .map(capitalCaseTransformFactory(lower, upper))\n .join(options?.delimiter ?? \" \") +\n suffix);\n}\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (prefix +\n words.map(upperFactory(options?.locale)).join(options?.delimiter ?? \"_\") +\n suffix);\n}\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input, options) {\n return noCase(input, { delimiter: \".\", ...options });\n}\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input, options) {\n return noCase(input, { delimiter: \"-\", ...options });\n}\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input, options) {\n return noCase(input, { delimiter: \"/\", ...options });\n}\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = capitalCaseTransformFactory(lower, upper);\n return (prefix +\n words\n .map((word, index) => {\n if (index === 0)\n return transform(word);\n return lower(word);\n })\n .join(options?.delimiter ?? \" \") +\n suffix);\n}\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input, options) {\n return noCase(input, { delimiter: \"_\", ...options });\n}\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input, options) {\n return capitalCase(input, { delimiter: \"-\", ...options });\n}\nfunction lowerFactory(locale) {\n return locale === false\n ? (input) => input.toLowerCase()\n : (input) => input.toLocaleLowerCase(locale);\n}\nfunction upperFactory(locale) {\n return locale === false\n ? (input) => input.toUpperCase()\n : (input) => input.toLocaleUpperCase(locale);\n}\nfunction capitalCaseTransformFactory(lower, upper) {\n return (word) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\nfunction pascalCaseTransformFactory(lower, upper) {\n return (word, index) => {\n const char0 = word[0];\n const initial = index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n return initial + lower(word.slice(1));\n };\n}\nfunction splitPrefixSuffix(input, options = {}) {\n const splitFn = options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);\n const prefixCharacters = options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n const suffixCharacters = options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n let prefixIndex = 0;\n let suffixIndex = input.length;\n while (prefixIndex < input.length) {\n const char = input.charAt(prefixIndex);\n if (!prefixCharacters.includes(char))\n break;\n prefixIndex++;\n }\n while (suffixIndex > prefixIndex) {\n const index = suffixIndex - 1;\n const char = input.charAt(index);\n if (!suffixCharacters.includes(char))\n break;\n suffixIndex = index;\n }\n return [\n input.slice(0, prefixIndex),\n splitFn(input.slice(prefixIndex, suffixIndex)),\n input.slice(suffixIndex),\n ];\n}\n//# sourceMappingURL=index.js.map","/* ! 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, options) {\n if (!str)\n return [];\n\n options = options || {};\n var max = options.max == null ? Infinity : options.max;\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), max, 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, max, 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, max, true);\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], max, false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, max, 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, max, 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.max(Math.abs(numeric(n[2])), 1)\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, max, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length && expansions.length < max; 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","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.maxGlobstarRecursion = options.maxGlobstarRecursion !== undefined\n ? options.maxGlobstarRecursion : 200\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 // coalesce consecutive non-globstar * characters\n if (c === '*' && stateChar === '*') continue\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 if (pattern.indexOf(GLOBSTAR) !== -1) {\n return this._matchGlobstar(file, pattern, partial, 0, 0)\n }\n return this._matchOne(file, pattern, partial, 0, 0)\n}\n\nMinimatch.prototype._matchGlobstar = function (file, pattern, partial, fileIndex, patternIndex) {\n var i\n\n // find first globstar from patternIndex\n var firstgs = -1\n for (i = patternIndex; i < pattern.length; i++) {\n if (pattern[i] === GLOBSTAR) { firstgs = i; break }\n }\n\n // find last globstar\n var lastgs = -1\n for (i = pattern.length - 1; i >= 0; i--) {\n if (pattern[i] === GLOBSTAR) { lastgs = i; break }\n }\n\n var head = pattern.slice(patternIndex, firstgs)\n var body = partial ? pattern.slice(firstgs + 1) : pattern.slice(firstgs + 1, lastgs)\n var tail = partial ? [] : pattern.slice(lastgs + 1)\n\n // check the head\n if (head.length) {\n var fileHead = file.slice(fileIndex, fileIndex + head.length)\n if (!this._matchOne(fileHead, head, partial, 0, 0)) {\n return false\n }\n fileIndex += head.length\n }\n\n // check the tail\n var fileTailMatch = 0\n if (tail.length) {\n if (tail.length + fileIndex > file.length) return false\n\n var tailStart = file.length - tail.length\n if (this._matchOne(file, tail, partial, tailStart, 0)) {\n fileTailMatch = tail.length\n } else {\n // affordance for stuff like a/**/* matching a/b/\n if (file[file.length - 1] !== '' ||\n fileIndex + tail.length === file.length) {\n return false\n }\n tailStart--\n if (!this._matchOne(file, tail, partial, tailStart, 0)) {\n return false\n }\n fileTailMatch = tail.length + 1\n }\n }\n\n // if body is empty (single ** between head and tail)\n if (!body.length) {\n var sawSome = !!fileTailMatch\n for (i = fileIndex; i < file.length - fileTailMatch; i++) {\n var f = String(file[i])\n sawSome = true\n if (f === '.' || f === '..' ||\n (!this.options.dot && f.charAt(0) === '.')) {\n return false\n }\n }\n return partial || sawSome\n }\n\n // split body into segments at each GLOBSTAR\n var bodySegments = [[[], 0]]\n var currentBody = bodySegments[0]\n var nonGsParts = 0\n var nonGsPartsSums = [0]\n for (var bi = 0; bi < body.length; bi++) {\n var b = body[bi]\n if (b === GLOBSTAR) {\n nonGsPartsSums.push(nonGsParts)\n currentBody = [[], 0]\n bodySegments.push(currentBody)\n } else {\n currentBody[0].push(b)\n nonGsParts++\n }\n }\n\n var idx = bodySegments.length - 1\n var fileLength = file.length - fileTailMatch\n for (var si = 0; si < bodySegments.length; si++) {\n bodySegments[si][1] = fileLength -\n (nonGsPartsSums[idx--] + bodySegments[si][0].length)\n }\n\n return !!this._matchGlobStarBodySections(\n file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch\n )\n}\n\n// return false for \"nope, not matching\"\n// return null for \"not matching, cannot keep trying\"\nMinimatch.prototype._matchGlobStarBodySections = function (\n file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail\n) {\n var bs = bodySegments[bodyIndex]\n if (!bs) {\n // just make sure there are no bad dots\n for (var i = fileIndex; i < file.length; i++) {\n sawTail = true\n var f = file[i]\n if (f === '.' || f === '..' ||\n (!this.options.dot && f.charAt(0) === '.')) {\n return false\n }\n }\n return sawTail\n }\n\n var body = bs[0]\n var after = bs[1]\n while (fileIndex <= after) {\n var m = this._matchOne(\n file.slice(0, fileIndex + body.length),\n body,\n partial,\n fileIndex,\n 0\n )\n // if limit exceeded, no match. intentional false negative,\n // acceptable break in correctness for security.\n if (m && globStarDepth < this.maxGlobstarRecursion) {\n var sub = this._matchGlobStarBodySections(\n file, bodySegments,\n fileIndex + body.length, bodyIndex + 1,\n partial, globStarDepth + 1, sawTail\n )\n if (sub !== false) {\n return sub\n }\n }\n var f = file[fileIndex]\n if (f === '.' || f === '..' ||\n (!this.options.dot && f.charAt(0) === '.')) {\n return false\n }\n fileIndex++\n }\n return partial || null\n}\n\nMinimatch.prototype._matchOne = function (file, pattern, partial, fileIndex, patternIndex) {\n var fi, pi, fl, pl\n for (\n fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++\n ) {\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 || p === GLOBSTAR) return false\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 // 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 * 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 = { \"&\": \"&#38;\", \"<\": \"&#60;\", \">\": \"&#62;\", '\"': \"&#34;\", \"'\": \"&#39;\", \"/\": \"&#47;\" },\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&nbsp;</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 = { \"&\": \"&#38;\", \"<\": \"&#60;\", \">\": \"&#62;\", '\"': \"&#34;\", \"'\": \"&#39;\", \"/\": \"&#47;\" },\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 = { \"&\": \"&#38;\", \"<\": \"&#60;\", \">\": \"&#62;\", '\"': \"&#34;\", \"'\": \"&#39;\", \"/\": \"&#47;\" },\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","import {\n ActionRunnerData,\n createAction,\n createPathParam,\n createStringParam,\n detectRuntime,\n InputsDefinition,\n OutputsDefinition,\n runWithLiveLogs,\n fetchPipelabAsset,\n runPnpm,\n} from \"@pipelab/plugin-core\";\nimport { dirname, join, basename, delimiter } from \"node:path\";\nimport { cp, readFile, writeFile } from \"node:fs/promises\";\nimport { platform as osPlatform, arch as osArch } from \"node:os\";\nimport { kebabCase } from \"change-case\";\nimport { createServer } from \"node:http\";\nimport serve from \"serve-handler\";\nimport { startTunnel } from \"untun\";\n\nexport const IDPackage = \"discord:package\";\nexport const IDPreview = \"discord:preview\";\n\nconst paramsInputFolder = {\n \"input-folder\": createPathParam(\"\", {\n label: \"Folder to package\",\n required: true,\n control: {\n type: \"path\",\n options: {\n properties: [\"openDirectory\"],\n },\n },\n }),\n} satisfies InputsDefinition;\n\n// const paramsInputURL = {\n// 'input-url': createStringParam('', {\n// label: 'URL to preview',\n// required: true\n// })\n// } satisfies InputsDefinition\n\nexport const configureParams = {\n name: createStringParam(\"Pipelab\", {\n label: \"Application name\",\n description: \"The name of the application\",\n required: true,\n }),\n} satisfies InputsDefinition;\n\nconst outputs = {\n outputDir: {\n label: \"Output folder\",\n value: \"\",\n description: \"The folder where the packaged application is located\",\n },\n} satisfies OutputsDefinition;\n\nexport const createPackageProps = (\n id: string,\n name: string,\n description: string,\n icon: string,\n displayString: string,\n advanced?: boolean,\n deprecated?: boolean,\n deprecatedMessage?: string,\n disabled?: false,\n updateAvailable?: boolean,\n) => {\n return createAction({\n id,\n name,\n description,\n icon,\n displayString,\n meta: {},\n advanced,\n deprecated,\n deprecatedMessage,\n disabled,\n updateAvailable,\n params: {\n ...paramsInputFolder,\n ...configureParams,\n },\n outputs: {\n outputDir: outputs.outputDir,\n },\n });\n};\n\nexport const createPreviewProps = (\n id: string,\n name: string,\n description: string,\n icon: string,\n displayString: string,\n) =>\n createAction({\n id,\n name,\n description,\n icon,\n displayString,\n meta: {},\n params: {\n ...paramsInputFolder,\n ...configureParams,\n customHostname: createStringParam(\"\", {\n required: false,\n label: \"Custom hostname\",\n description: \"The hostname to use for the preview\",\n }),\n },\n outputs: {\n // ...outputs.outputDir\n },\n });\n\nconst createAppServer = async (folder: string) => {\n try {\n const server = createServer();\n\n server.on(\"request\", (req, res) => {\n return serve(req, res, {\n maxAge: 0,\n public: folder,\n headers: {\n \"bypass-tunnel-reminder\": \"false\",\n },\n });\n });\n\n const listen = async () => {\n return new Promise((resolve, reject) => {\n server.listen(40400, \"127.0.0.1\", () => {\n return resolve(server);\n });\n });\n };\n\n await listen();\n console.log(\"listening2\");\n console.log(\"address\", server.address);\n const addressRes = server.address();\n console.log(\"addressRes\", addressRes);\n if (addressRes && typeof addressRes !== \"string\") {\n return { port: addressRes.port };\n }\n throw new Error(\"Unable to bind server: adress is not an object\");\n } catch (e) {\n console.error(e);\n throw e;\n }\n};\n\nexport const waitForAbort = (signal: AbortSignal): Promise<void> => {\n return new Promise<void>((resolve, reject) => {\n if (signal.aborted) {\n return resolve(); // Already aborted\n }\n\n const onAbort = () => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n };\n\n signal.addEventListener(\"abort\", onAbort);\n });\n};\n\nexport const discord = async (\n action: \"package\" | \"preview\",\n appFolder: string | undefined,\n {\n cwd,\n log,\n inputs,\n setOutput,\n paths,\n abortSignal,\n context,\n }:\n | ActionRunnerData<ReturnType<typeof createPackageProps>>\n | ActionRunnerData<ReturnType<typeof createPreviewProps>>,\n completeConfiguration: DesktopApp.Config,\n): Promise<{ folder: string; binary: string | undefined } | undefined> => {\n console.log(\"appFolder\", appFolder);\n\n log(\"Building discord\");\n\n const runtime = await detectRuntime(appFolder);\n\n const { modules, cache, node } = paths;\n\n const destinationFolder = join(cwd, \"build\");\n\n const rawAssetFolder = await fetchPipelabAsset(\"@pipelab/asset-discord\", \"^1.0.0\", { context });\n const templateFolder = join(rawAssetFolder, \"template\");\n\n // copy template to destination\n await cp(templateFolder, destinationFolder, {\n recursive: true,\n filter: (src) => {\n log(\"src\", src);\n // log('dest', dest)\n // TODO: support other oses\n return (\n basename(src) !== \"node_modules\" &&\n !src.includes(\".nitro\") &&\n !src.includes(\".output\") &&\n !src.includes(\".env\")\n );\n },\n });\n\n const placeAppFolder = join(destinationFolder, \"src\", \"app\");\n\n // if input is folder, copy folder to destination\n if (appFolder) {\n // copy app to template\n await cp(appFolder, placeAppFolder, { recursive: true });\n }\n\n writeFile(\n join(destinationFolder, \".env\"),\n `DISCORD_CLIENT_ID=1357217738241736724\nDISCORD_CLIENT_SECRET=yJ4vRnzDtKAqg2Le3_Sap2CqHybkTp2U`,\n \"utf8\",\n );\n\n const sanitizedName = kebabCase(completeConfiguration.name);\n\n // package.json update\n // const pkgJSONPath = join(destinationFolder, 'package.json')\n // const pkgJSONContent = await readFile(pkgJSONPath, 'utf8')\n // const pkgJSON = JSON.parse(pkgJSONContent)\n // log('Setting name to', sanitizedName)\n // pkgJSON.name = sanitizedName\n // log('Setting productName to', completeConfiguration.name)\n // pkgJSON.productName = completeConfiguration.name\n // await writeFile(pkgJSONPath, JSON.stringify(pkgJSON, null, 2))\n\n // discord.conf.json update\n // const tauriConfJSONPath = join(destinationFolder, 'src-discord', 'discord.conf.json')\n // const tauriConfJSONContent = await readFile(tauriConfJSONPath, 'utf8')\n // const tauriConfJSON = JSON.parse(tauriConfJSONContent)\n // log('Setting productName to', completeConfiguration.name)\n // tauriConfJSON.productName = completeConfiguration.name\n // log('Setting version to', completeConfiguration.appVersion)\n // tauriConfJSON.version = completeConfiguration.appVersion\n // log('Setting identifier to', completeConfiguration.appBundleId)\n // tauriConfJSON.identifier = completeConfiguration.appBundleId\n // log('Setting build.devUrl to', appFolder)\n // tauriConfJSON.build.devUrl = appFolder\n // await writeFile(tauriConfJSONPath, JSON.stringify(tauriConfJSON, null, 2))\n\n log(\"Installing packages\");\n const { all: installOut } = await runPnpm(destinationFolder, {\n args: [\"install\", \"--prefer-offline\"],\n signal: abortSignal,\n context,\n });\n if (installOut) log(installOut);\n\n // override discord version\n // if (completeConfiguration.electronVersion && completeConfiguration.electronVersion !== '') {\n // log(`Installing discord@${completeConfiguration.electronVersion}`)\n // await runWithLiveLogs(\n // process.execPath,\n // [pnpm, 'install', `discord@${completeConfiguration.electronVersion}`, '--prefer-offline'],\n // {\n // cwd: destinationFolder,\n // env: {\n // // DEBUG: '*',\n // PNPM_HOME: pnpmHome\n // },\n // cancelSignal: abortSignal\n // },\n // log,\n // {\n // onStderr(data) {\n // log(data)\n // },\n // onStdout(data) {\n // log(data)\n // }\n // }\n // )\n // }\n\n try {\n if (action === \"preview\") {\n const port = 14141;\n\n const modulesPath = modules;\n const nitro = join(modulesPath, \"nitropack\", \"dist\", \"cli\", \"index.mjs\");\n\n console.log(\"nitro\", nitro);\n\n await Promise.allSettled([\n runPnpm(destinationFolder, {\n args: [\"dlx\", \"nitropack\", \"dev\"],\n extraEnv: {\n PORT: port.toString(),\n },\n signal: abortSignal,\n context,\n }).then(({ all }) => {\n if (all) log(all);\n }),\n (async () => {\n const tunnel = await startTunnel({ port, acceptCloudflareNotice: true });\n console.log(\"tunnel\", tunnel);\n const url = await tunnel.getURL();\n console.log(\"Public URL:\", url);\n })(),\n ]);\n } else {\n throw new Error(\"TODO\");\n }\n\n return undefined;\n } catch (e) {\n if (e instanceof Error) {\n if (e.name === \"RequestError\") {\n log(\"Request error\");\n }\n if (e.name === \"RequestError\") {\n log(\"Request error\");\n }\n }\n log(e);\n return undefined;\n }\n};\n","import { createActionRunner } from \"@pipelab/plugin-core\";\nimport { createPreviewProps, discord } from \"./discord\";\nimport { merge } from \"ts-deepmerge\";\n\nexport const previewRunner = createActionRunner<ReturnType<typeof createPreviewProps>>(\n async (options) => {\n const inputFolder = options.inputs[\"input-folder\"];\n if (inputFolder === \"\") {\n throw new Error(\"URL can't be empty\");\n }\n\n // if (!options.inputs.configuration) {\n // throw new Error('Missing tauri configuration')\n // }\n\n const completeConfiguration = merge({}, {\n ...options.inputs,\n } satisfies any) as any;\n\n console.log(\"completeConfiguration\", completeConfiguration);\n\n await discord(\"preview\", inputFolder, options, completeConfiguration);\n return;\n },\n);\n","import { createActionRunner, fetchPipelabAsset } from \"@pipelab/plugin-core\";\nimport { createPackageProps, discord } from \"./discord\";\nimport { merge } from \"ts-deepmerge\";\nimport { defaultTauriConfig } from \"./utils\";\nimport { basename, join } from \"path\";\nimport { cp } from \"fs/promises\";\n\nexport const packageV2Runner = createActionRunner<ReturnType<typeof createPackageProps>>(\n async ({ inputs, cwd, paths, log, setOutput, context }) => {\n const appFolder = inputs[\"input-folder\"];\n\n const { cache, node, pnpm } = paths;\n const destinationFolder = join(cwd);\n const rawAssetFolder = await fetchPipelabAsset(\"@pipelab/asset-discord\", \"^1.0.0\", { context });\n const templateFolder = join(rawAssetFolder, \"template\");\n\n // copy template to destination\n await cp(templateFolder, destinationFolder, {\n recursive: true,\n filter: (src) => {\n log(\"src\", src);\n // log('dest', dest)\n // TODO: support other oses\n return basename(src) !== \"node_modules\" && !src.includes(\".nitro\") && !src.includes(\"dist\");\n },\n });\n const placeAppFolder = join(destinationFolder, \"server\", \"public\", \".proxy\");\n if (appFolder) {\n // copy app to template\n await cp(appFolder, placeAppFolder, { recursive: true });\n }\n\n log(\"destinationFolder\", destinationFolder);\n\n setOutput(\"outputDir\", destinationFolder);\n },\n);\n","import { previewRunner } from \"./preview\";\n\nimport { createNodeDefinition } from \"@pipelab/plugin-core\";\nconst icon = new URL(\"./public/discord.webp\", import.meta.url).href;\nimport { createPackageProps, createPreviewProps, IDPreview, IDPackage } from \"./discord\";\nimport { packageV2Runner } from \"./package\";\n\nexport default createNodeDefinition({\n description: \"Discord\",\n name: \"Discord\",\n id: \"dicord\",\n icon: {\n type: \"image\",\n image: icon,\n },\n nodes: [\n {\n node: createPackageProps(\n IDPackage,\n \"Package as Discord Activity\",\n \"Package your app as a Discord Activity\",\n \"\",\n \"`Package app from ${fmt.param(params['input-folder'], 'primary', 'Input folder not set')}`\",\n false,\n false,\n undefined,\n false,\n false,\n ),\n runner: packageV2Runner,\n },\n {\n node: createPreviewProps(\n IDPreview,\n \"Preview Discord Acitivity app\",\n \"Package and preview your app as a Discord Activity\",\n \"\",\n \"`Preview app from ${fmt.param(params['input-folder'], 'primary', 'Input folder not set')}`\",\n ),\n runner: previewRunner,\n },\n ],\n});\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@pipelab/plugin-discord",
3
+ "version": "1.0.0-beta.0",
4
+ "license": "FSL-1.1-MIT",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/CynToolkit/pipelab.git",
8
+ "directory": "plugins/plugin-discord"
9
+ },
10
+ "type": "module",
11
+ "main": "./dist/index.cjs",
12
+ "module": "./dist/index.mjs",
13
+ "types": "./dist/index.d.mts",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "dependencies": {
18
+ "@types/node": "^24.12.2",
19
+ "electron": "32.1.2",
20
+ "ts-deepmerge": "7.0.1",
21
+ "untun": "0.1.3",
22
+ "@pipelab/plugin-core": "1.0.0-beta.0",
23
+ "@pipelab/shared": "1.0.0-beta.0"
24
+ },
25
+ "devDependencies": {
26
+ "tsdown": "0.21.2",
27
+ "typescript": "5.9.3",
28
+ "@pipelab/tsconfig": "1.0.0-beta.0"
29
+ },
30
+ "scripts": {
31
+ "format": "oxfmt .",
32
+ "lint": "oxlint .",
33
+ "build": "tsdown"
34
+ },
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.mts",
38
+ "import": "./dist/index.mjs",
39
+ "require": "./dist/index.cjs",
40
+ "default": "./dist/index.mjs"
41
+ }
42
+ }
43
+ }
@@ -0,0 +1 @@
1
+ declare module "*.webp";