| | |
| | | import { QuartzEmitterPlugin } from "../types" |
| | | import { write } from "./helpers" |
| | | import { styleText } from "util" |
| | | import { FullSlug } from "../../util/path" |
| | | |
| | | 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(ctx) { |
| | | if (!ctx.cfg.configuration.baseUrl) { |
| | | console.warn( |
| | | styleText("yellow", "CNAME emitter requires `baseUrl` to be set in your configuration"), |
| | | ) |
| | | return [] |
| | | } |
| | | const content = extractDomainFromBaseUrl(ctx.cfg.configuration.baseUrl) |
| | | if (!content) { |
| | | return [] |
| | | } |
| | | |
| | | return ["CNAME"] |
| | | } |
| | | const path = await write({ |
| | | ctx, |
| | | content, |
| | | slug: "CNAME" as FullSlug, |
| | | ext: "", |
| | | }) |
| | | return [path] |
| | | }, |
| | | async *partialEmit() {}, |
| | | }) |