ci: cache remote url in css files
This commit is contained in:
parent
4a51b54095
commit
315c80eb40
|
@ -1,6 +1,6 @@
|
||||||
import { join, parse, resolve, toFileUrl } from '$std/path/mod.ts'
|
import { join, parse, resolve, toFileUrl } from '$std/path/mod.ts'
|
||||||
import { bundleAsync } from 'lightningcss'
|
import { bundleAsync } from 'lightningcss'
|
||||||
import { cssImports, Logger, uInt8ArrayConcat } from './helpers.ts'
|
import { Logger, cssImports, uInt8ArrayConcat } from './helpers.ts'
|
||||||
|
|
||||||
export async function builder(
|
export async function builder(
|
||||||
{ filename, dev, assetDir, remote }: {
|
{ filename, dev, assetDir, remote }: {
|
||||||
|
@ -85,7 +85,23 @@ export async function builder(
|
||||||
return url.toString()
|
return url.toString()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
visitor: {
|
||||||
|
Url({ loc, url }) {
|
||||||
|
if (remote && !url.startsWith('data:')) {
|
||||||
|
cache(url, remote, assetDir)
|
||||||
|
}
|
||||||
|
return { loc, url }
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return { code, map }
|
return { code, map }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function cache(url: string, base: string, assetDir: string) {
|
||||||
|
const fullUrl = new URL(url, base)
|
||||||
|
const response = await fetch(fullUrl)
|
||||||
|
const file = await response.arrayBuffer()
|
||||||
|
const filepath = join(assetDir, url.split('?')[0])
|
||||||
|
await Deno.writeFile(filepath, new Uint8Array(file))
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import { MiddlewareHandler } from '$fresh/server.ts'
|
import { MiddlewareHandler } from '$fresh/server.ts'
|
||||||
|
import { contentType } from '$fresh/src/server/deps.ts'
|
||||||
import { ensureDir } from '$std/fs/ensure_dir.ts'
|
import { ensureDir } from '$std/fs/ensure_dir.ts'
|
||||||
import { join } from '$std/path/mod.ts'
|
import { join, parse } from '$std/path/mod.ts'
|
||||||
import { bundleCss } from './bundler.ts'
|
import { bundleCss } from './bundler.ts'
|
||||||
|
|
||||||
export function cssHandler(sourceDir: string): MiddlewareHandler {
|
export function cssHandler(sourceDir: string): MiddlewareHandler {
|
||||||
|
@ -32,7 +33,25 @@ export function cssHandler(sourceDir: string): MiddlewareHandler {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const resp = await ctx.next()
|
const resp = await ctx.next()
|
||||||
|
|
||||||
|
if (resp.status === 404) {
|
||||||
|
try {
|
||||||
|
const file = await Deno.readFile(join(assetDir, ctx.url.pathname))
|
||||||
|
const { ext } = parse(ctx.url.pathname)
|
||||||
|
|
||||||
|
return new Response(file, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': contentType(ext) ?? 'text/plain; charset=utf-8'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch {
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//anyway
|
||||||
return resp
|
return resp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue