| | |
| | | import path from "path" |
| | | import fs from "fs" |
| | | |
| | | export const Assets: QuartzEmitterPlugin = () => ({ |
| | | interface Options { |
| | | attachmentsFolder: string | null |
| | | } |
| | | |
| | | const defaultOptions: Options = { |
| | | attachmentsFolder: null, |
| | | } |
| | | |
| | | export const Assets: QuartzEmitterPlugin<Options> = (userOpts?: Options) => { |
| | | const { attachmentsFolder } = { ...defaultOptions, ...userOpts } |
| | | |
| | | return { |
| | | name: "Assets", |
| | | getQuartzComponents() { |
| | | return [] |
| | |
| | | const fp = rawFp as FilePath |
| | | const ext = path.extname(fp) |
| | | const src = path.join(argv.directory, fp) as FilePath |
| | | const name = (slugifyFilePath(fp as FilePath) + ext) as FilePath |
| | | let name = (slugifyFilePath(fp as FilePath) + ext) as FilePath |
| | | |
| | | if (attachmentsFolder) { |
| | | const segments = name.split("/") |
| | | if (segments.at(-2) === attachmentsFolder) { |
| | | segments.splice(-2, 1) |
| | | name = segments.join("/") as FilePath |
| | | } |
| | | } |
| | | |
| | | const dest = path.join(assetsPath, name) as FilePath |
| | | const dir = path.dirname(dest) as FilePath |
| | | await fs.promises.mkdir(dir, { recursive: true }) // ensure dir exists |
| | |
| | | |
| | | return fps |
| | | }, |
| | | }) |
| | | } |
| | | } |