8 lines
3.7 KiB
Plaintext
8 lines
3.7 KiB
Plaintext
{
|
|
"version": 3,
|
|
"sources": ["https://deno.land/x/fresh@1.4.2/src/runtime/build_id.ts", "https://deno.land/x/fresh@1.4.2/src/runtime/utils.ts"],
|
|
"sourcesContent": ["export const BUILD_ID = \"c255b724e165fd67c294f69a9c9a2095d635994b\";", "import { VNode } from \"preact\";\nimport { BUILD_ID } from \"./build_id.ts\";\n\nexport const INTERNAL_PREFIX = \"/_frsh\";\nexport const ASSET_CACHE_BUST_KEY = \"__frsh_c\";\n\nexport const IS_BROWSER = typeof document !== \"undefined\";\n\n/**\n * Create a \"locked\" asset path. This differs from a plain path in that it is\n * specific to the current version of the application, and as such can be safely\n * served with a very long cache lifetime (1 year).\n */\nexport function asset(path: string): string {\n if (!path.startsWith(\"/\") || path.startsWith(\"//\")) return path;\n try {\n const url = new URL(path, \"https://freshassetcache.local\");\n if (\n url.protocol !== \"https:\" || url.host !== \"freshassetcache.local\" ||\n url.searchParams.has(ASSET_CACHE_BUST_KEY)\n ) {\n return path;\n }\n url.searchParams.set(ASSET_CACHE_BUST_KEY, BUILD_ID);\n return url.pathname + url.search + url.hash;\n } catch (err) {\n console.warn(\n `Failed to create asset() URL, falling back to regular path ('${path}'):`,\n err,\n );\n return path;\n }\n}\n\n/** Apply the `asset` function to urls in a `srcset` attribute. */\nexport function assetSrcSet(srcset: string): string {\n if (srcset.includes(\"(\")) return srcset; // Bail if the srcset contains complicated syntax.\n const parts = srcset.split(\",\");\n const constructed = [];\n for (const part of parts) {\n const trimmed = part.trimStart();\n const leadingWhitespace = part.length - trimmed.length;\n if (trimmed === \"\") return srcset; // Bail if the srcset is malformed.\n let urlEnd = trimmed.indexOf(\" \");\n if (urlEnd === -1) urlEnd = trimmed.length;\n const leading = part.substring(0, leadingWhitespace);\n const url = trimmed.substring(0, urlEnd);\n const trailing = trimmed.substring(urlEnd);\n constructed.push(leading + asset(url) + trailing);\n }\n return constructed.join(\",\");\n}\n\nexport function assetHashingHook(\n vnode: VNode<{\n src?: string;\n srcset?: string;\n [\"data-fresh-disable-lock\"]?: boolean;\n }>,\n) {\n if (vnode.type === \"img\" || vnode.type === \"source\") {\n const { props } = vnode;\n if (props[\"data-fresh-disable-lock\"]) return;\n if (typeof props.src === \"string\") {\n props.src = asset(props.src);\n }\n if (typeof props.srcset === \"string\") {\n props.srcset = assetSrcSet(props.srcset);\n }\n }\n}\n"],
|
|
"mappings": "AAAO,IAAM,SAAW,2CCIjB,IAAM,qBAAuB,WAEvB,WAAa,OAAO,SAAa,IAOvC,SAAS,MAAM,KAAsB,CAC1C,GAAI,CAAC,KAAK,WAAW,GAAG,GAAK,KAAK,WAAW,IAAI,EAAG,OAAO,KAC3D,GAAI,CACF,IAAM,IAAM,IAAI,IAAI,KAAM,+BAA+B,EACzD,OACE,IAAI,WAAa,UAAY,IAAI,OAAS,yBAC1C,IAAI,aAAa,IAAI,oBAAoB,EAElC,MAET,IAAI,aAAa,IAAI,qBAAsB,QAAQ,EAC5C,IAAI,SAAW,IAAI,OAAS,IAAI,KACzC,OAAS,IAAK,CACZ,eAAQ,KACN,gEAAgE,IAAI,MACpE,GACF,EACO,IACT,CACF,CAGO,SAAS,YAAY,OAAwB,CAClD,GAAI,OAAO,SAAS,GAAG,EAAG,OAAO,OACjC,IAAM,MAAQ,OAAO,MAAM,GAAG,EACxB,YAAc,CAAC,EACrB,QAAW,QAAQ,MAAO,CACxB,IAAM,QAAU,KAAK,UAAU,EACzB,kBAAoB,KAAK,OAAS,QAAQ,OAChD,GAAI,UAAY,GAAI,OAAO,OAC3B,IAAI,OAAS,QAAQ,QAAQ,GAAG,EAC5B,SAAW,KAAI,OAAS,QAAQ,QACpC,IAAM,QAAU,KAAK,UAAU,EAAG,iBAAiB,EAC7C,IAAM,QAAQ,UAAU,EAAG,MAAM,EACjC,SAAW,QAAQ,UAAU,MAAM,EACzC,YAAY,KAAK,QAAU,MAAM,GAAG,EAAI,QAAQ,CAClD,CACA,OAAO,YAAY,KAAK,GAAG,CAC7B,CAEO,SAAS,iBACd,MAKA,CACA,GAAI,MAAM,OAAS,OAAS,MAAM,OAAS,SAAU,CACnD,GAAM,CAAE,KAAM,EAAI,MAClB,GAAI,MAAM,yBAAyB,EAAG,OAClC,OAAO,MAAM,KAAQ,WACvB,MAAM,IAAM,MAAM,MAAM,GAAG,GAEzB,OAAO,MAAM,QAAW,WAC1B,MAAM,OAAS,YAAY,MAAM,MAAM,EAE3C,CACF",
|
|
"names": []
|
|
}
|