| | |
| | | import { FilePath, joinSegments } from "../../util/path" |
| | | import { QuartzEmitterPlugin } from "../types" |
| | | import fs from "fs" |
| | | import { styleText } from "util" |
| | | |
| | | interface Options { |
| | | domain: string |
| | | export function extractDomainFromBaseUrl(baseUrl: string) { |
| | | const url = new URL(`https://${baseUrl}`) |
| | | return url.hostname |
| | | } |
| | | |
| | | export const CNAME: QuartzEmitterPlugin<Options> = (opts?: Options) => ({ |
| | | export const CNAME: QuartzEmitterPlugin = () => ({ |
| | | name: "CNAME", |
| | | getQuartzComponents() { |
| | | return [] |
| | | }, |
| | | async emit(_contentFolder, _cfg, _content, _resources, emit): Promise<string[]> { |
| | | const slug = "CNAME" |
| | | |
| | | if (opts?.domain) { |
| | | await emit({ |
| | | content: opts?.domain, |
| | | slug, |
| | | ext: "", |
| | | }) |
| | | async emit({ argv, cfg }) { |
| | | if (!cfg.configuration.baseUrl) { |
| | | console.warn( |
| | | styleText("yellow", "CNAME emitter requires `baseUrl` to be set in your configuration"), |
| | | ) |
| | | return [] |
| | | } |
| | | |
| | | return ["CNAME"] |
| | | } |
| | | const path = joinSegments(argv.output, "CNAME") |
| | | const content = extractDomainFromBaseUrl(cfg.configuration.baseUrl) |
| | | if (!content) { |
| | | return [] |
| | | } |
| | | await fs.promises.writeFile(path, content) |
| | | return [path] as FilePath[] |
| | | }, |
| | | async *partialEmit() {}, |
| | | }) |