{"version":3,"sources":["jsdelivr-header.js","/npm/@elysiajs/static@1.3.0/dist/cjs/index.js"],"names":[],"mappings":"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","file":"/npm/@elysiajs/static@1.3.0/dist/cjs/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@elysiajs/static@1.3.0/dist/cjs/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar index_exports = {};\n__export(index_exports, {\n  default: () => index_default,\n  staticPlugin: () => staticPlugin\n});\nmodule.exports = __toCommonJS(index_exports);\nvar import_elysia = require(\"elysia\");\nvar import_promises2 = require(\"fs/promises\");\nvar import_path = require(\"path\");\nvar import_node_cache = __toESM(require(\"node-cache\"));\n\n// src/cache.ts\nvar import_promises = require(\"fs/promises\");\nasync function isCached(headers, etag, filePath) {\n  if (headers[\"cache-control\"] && headers[\"cache-control\"].indexOf(\"no-cache\") !== -1)\n    return false;\n  if (\"if-none-match\" in headers) {\n    const ifNoneMatch = headers[\"if-none-match\"];\n    if (ifNoneMatch === \"*\") return true;\n    if (ifNoneMatch === null) return false;\n    if (typeof etag !== \"string\") return false;\n    const isMatching = ifNoneMatch === etag;\n    if (isMatching) return true;\n    return false;\n  }\n  if (headers[\"if-modified-since\"]) {\n    const ifModifiedSince = headers[\"if-modified-since\"];\n    let lastModified;\n    try {\n      lastModified = (await (0, import_promises.stat)(filePath)).mtime;\n    } catch {\n    }\n    if (lastModified !== void 0 && lastModified.getTime() <= Date.parse(ifModifiedSince))\n      return true;\n  }\n  return false;\n}\nasync function generateETag(file) {\n  const hash = new Bun.CryptoHasher(\"md5\");\n  hash.update(await file.arrayBuffer());\n  return hash.digest(\"base64\");\n}\n\n// src/index.ts\nvar URL_PATH_SEP = \"/\";\nvar fileExists = (path) => (0, import_promises2.stat)(path).then(\n  () => true,\n  () => false\n);\nvar statCache = new import_node_cache.default({\n  useClones: false,\n  checkperiod: 5 * 60,\n  stdTTL: 3 * 60 * 60,\n  maxKeys: 250\n});\nvar fileCache = new import_node_cache.default({\n  useClones: false,\n  checkperiod: 5 * 60,\n  stdTTL: 3 * 60 * 60,\n  maxKeys: 250\n});\nvar htmlCache = new import_node_cache.default({\n  useClones: false,\n  checkperiod: 5 * 60,\n  stdTTL: 3 * 60 * 60,\n  maxKeys: 250\n});\nvar listFiles = async (dir) => {\n  const files = await (0, import_promises2.readdir)(dir);\n  const all = await Promise.all(\n    files.map(async (name) => {\n      const file = dir + import_path.sep + name;\n      const stats = await (0, import_promises2.stat)(file);\n      return stats && stats.isDirectory() ? await listFiles(file) : [(0, import_path.resolve)(dir, file)];\n    })\n  );\n  return all.flat();\n};\nvar staticPlugin = async ({\n  assets = \"public\",\n  prefix = \"/public\",\n  staticLimit = 1024,\n  alwaysStatic = process.env.NODE_ENV === \"production\",\n  ignorePatterns = [\".DS_Store\", \".git\", \".env\"],\n  noExtension = false,\n  enableDecodeURI = false,\n  resolve: resolve2 = import_path.resolve,\n  headers = {},\n  noCache = false,\n  maxAge = 86400,\n  directive = \"public\",\n  indexHTML = true\n} = {\n  assets: \"public\",\n  prefix: \"/public\",\n  staticLimit: 1024,\n  alwaysStatic: process.env.NODE_ENV === \"production\",\n  ignorePatterns: [],\n  noExtension: false,\n  enableDecodeURI: false,\n  resolve: import_path.resolve,\n  headers: {},\n  noCache: false,\n  indexHTML: true\n}) => {\n  const files = await listFiles((0, import_path.resolve)(assets));\n  const isFSSepUnsafe = import_path.sep !== URL_PATH_SEP;\n  if (prefix === URL_PATH_SEP) prefix = \"\";\n  const shouldIgnore = (file) => {\n    if (!ignorePatterns.length) return false;\n    return ignorePatterns.find((pattern) => {\n      if (typeof pattern === \"string\") return pattern.includes(file);\n      else return pattern.test(file);\n    });\n  };\n  const app = new import_elysia.Elysia({\n    name: \"static\",\n    seed: {\n      assets,\n      prefix,\n      staticLimit,\n      alwaysStatic,\n      ignorePatterns,\n      noExtension,\n      enableDecodeURI,\n      resolve: resolve2.toString(),\n      headers,\n      noCache,\n      maxAge,\n      directive,\n      indexHTML\n    }\n  });\n  const assetsDir = assets[0] === import_path.sep ? assets : resolve2() + import_path.sep + assets;\n  if (alwaysStatic || process.env.ENV === \"production\" && files.length <= staticLimit)\n    for (const absolutePath of files) {\n      if (!absolutePath || shouldIgnore(absolutePath)) continue;\n      let relativePath = absolutePath.replace(assetsDir, \"\");\n      if (noExtension) {\n        const temp = relativePath.split(\".\");\n        temp.splice(-1);\n        relativePath = temp.join(\".\");\n      }\n      const file = Bun.file(absolutePath);\n      const etag = await generateETag(file);\n      const pathName = isFSSepUnsafe ? prefix + relativePath.split(import_path.sep).join(URL_PATH_SEP) : (0, import_path.join)(prefix, relativePath);\n      app.get(\n        pathName,\n        noCache ? new Response(file, {\n          headers\n        }) : async ({ headers: reqHeaders }) => {\n          if (await isCached(reqHeaders, etag, absolutePath)) {\n            return new Response(null, {\n              status: 304,\n              headers\n            });\n          }\n          headers[\"Etag\"] = etag;\n          headers[\"Cache-Control\"] = directive;\n          if (maxAge !== null)\n            headers[\"Cache-Control\"] += `, max-age=${maxAge}`;\n          return new Response(file, {\n            headers\n          });\n        }\n      );\n      if (indexHTML && pathName.endsWith(\"/index.html\"))\n        app.get(\n          pathName.replace(\"/index.html\", \"\"),\n          noCache ? new Response(file, {\n            headers\n          }) : async ({ headers: reqHeaders }) => {\n            if (await isCached(reqHeaders, etag, pathName)) {\n              return new Response(null, {\n                status: 304,\n                headers\n              });\n            }\n            headers[\"Etag\"] = etag;\n            headers[\"Cache-Control\"] = directive;\n            if (maxAge !== null)\n              headers[\"Cache-Control\"] += `, max-age=${maxAge}`;\n            return new Response(file, {\n              headers\n            });\n          }\n        );\n    }\n  else {\n    if (!app.router.history.find(\n      ({ method, path }) => path === `${prefix}/*` && method === \"GET\"\n    ))\n      app.onError(() => {\n      }).get(\n        `${prefix}/*`,\n        async ({ params, headers: reqHeaders }) => {\n          let path = enableDecodeURI ? (\n            // @ts-ignore\n            decodeURI(`${assets}/${decodeURI(params[\"*\"])}`)\n          ) : (\n            // @ts-ignore\n            `${assets}/${params[\"*\"]}`\n          );\n          if (isFSSepUnsafe) {\n            path = path.replace(URL_PATH_SEP, import_path.sep);\n          }\n          if (shouldIgnore(path)) throw new import_elysia.NotFoundError();\n          try {\n            let status = statCache.get(path);\n            if (!status) {\n              status = await (0, import_promises2.stat)(path);\n              statCache.set(path, status);\n            }\n            if (!indexHTML && status.isDirectory())\n              throw new import_elysia.NotFoundError();\n            let file = fileCache.get(\n              path\n            );\n            if (!file) {\n              if (status.isDirectory()) {\n                let hasCache = false;\n                if (indexHTML && (hasCache = htmlCache.get(\n                  `${path}${import_path.sep}index.html`\n                ) ?? await fileExists(\n                  `${path}${import_path.sep}index.html`\n                ))) {\n                  if (hasCache === void 0)\n                    htmlCache.set(\n                      `${path}${import_path.sep}index.html`,\n                      true\n                    );\n                  file = Bun.file(`${path}${import_path.sep}index.html`);\n                } else {\n                  if (indexHTML && hasCache === void 0)\n                    htmlCache.set(\n                      `${path}${import_path.sep}index.html`,\n                      false\n                    );\n                  throw new import_elysia.NotFoundError();\n                }\n              }\n              file ??= Bun.file(path);\n              fileCache.set(path, file);\n            }\n            if (noCache)\n              return new Response(file, {\n                headers\n              });\n            const etag = await generateETag(file);\n            if (await isCached(reqHeaders, etag, path))\n              return new Response(null, {\n                status: 304,\n                headers\n              });\n            headers[\"Etag\"] = etag;\n            headers[\"Cache-Control\"] = directive;\n            if (maxAge !== null)\n              headers[\"Cache-Control\"] += `, max-age=${maxAge}`;\n            return new Response(file, {\n              headers\n            });\n          } catch (error) {\n            throw new import_elysia.NotFoundError();\n          }\n        }\n      );\n  }\n  return app;\n};\nvar index_default = staticPlugin;\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  staticPlugin\n});\n"]}