mirror of
https://gitlab.com/MisterBiggs/brain-quartz.git
synced 2025-07-23 06:41:30 +00:00
.github
content
docs
quartz
cli
components
i18n
plugins
emitters
404.tsx
aliases.ts
assets.ts
cname.ts
componentResources.ts
contentIndex.tsx
contentPage.tsx
folderPage.tsx
helpers.ts
index.ts
ogImage.tsx
static.ts
tagPage.tsx
filters
transformers
index.ts
types.ts
vfile.ts
processors
static
styles
util
bootstrap-cli.mjs
bootstrap-worker.mjs
build.ts
cfg.ts
worker.ts
.gitattributes
.gitignore
.node-version
.npmrc
.prettierignore
.prettierrc
CODE_OF_CONDUCT.md
Dockerfile
LICENSE.txt
README.md
globals.d.ts
index.d.ts
package-lock.json
package.json
quartz.config.ts
quartz.layout.ts
tsconfig.json
* checkpoint * incremental all the things * properly splice changes array * smol doc update * update docs * make fancy logger dumb in ci
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { FilePath, joinSegments, slugifyFilePath } from "../../util/path"
|
|
import { QuartzEmitterPlugin } from "../types"
|
|
import path from "path"
|
|
import fs from "fs"
|
|
import { glob } from "../../util/glob"
|
|
import { Argv } from "../../util/ctx"
|
|
import { QuartzConfig } from "../../cfg"
|
|
|
|
const filesToCopy = async (argv: Argv, cfg: QuartzConfig) => {
|
|
// glob all non MD files in content folder and copy it over
|
|
return await glob("**", argv.directory, ["**/*.md", ...cfg.configuration.ignorePatterns])
|
|
}
|
|
|
|
const copyFile = async (argv: Argv, fp: FilePath) => {
|
|
const src = joinSegments(argv.directory, fp) as FilePath
|
|
|
|
const name = slugifyFilePath(fp)
|
|
const dest = joinSegments(argv.output, name) as FilePath
|
|
|
|
// ensure dir exists
|
|
const dir = path.dirname(dest) as FilePath
|
|
await fs.promises.mkdir(dir, { recursive: true })
|
|
|
|
await fs.promises.copyFile(src, dest)
|
|
return dest
|
|
}
|
|
|
|
export const Assets: QuartzEmitterPlugin = () => {
|
|
return {
|
|
name: "Assets",
|
|
async *emit({ argv, cfg }) {
|
|
const fps = await filesToCopy(argv, cfg)
|
|
for (const fp of fps) {
|
|
yield copyFile(argv, fp)
|
|
}
|
|
},
|
|
async *partialEmit(ctx, _content, _resources, changeEvents) {
|
|
for (const changeEvent of changeEvents) {
|
|
const ext = path.extname(changeEvent.path)
|
|
if (ext === ".md") continue
|
|
|
|
if (changeEvent.type === "add" || changeEvent.type === "change") {
|
|
yield copyFile(ctx.argv, changeEvent.path)
|
|
} else if (changeEvent.type === "delete") {
|
|
const name = slugifyFilePath(changeEvent.path)
|
|
const dest = joinSegments(ctx.argv.output, name) as FilePath
|
|
await fs.promises.unlink(dest)
|
|
}
|
|
}
|
|
},
|
|
}
|
|
}
|