147 lines
4.2 KiB
JavaScript
147 lines
4.2 KiB
JavaScript
import sitemap from '@astrojs/sitemap'
|
|
import svelte from '@astrojs/svelte'
|
|
import tailwind from '@astrojs/tailwind'
|
|
import swup from '@swup/astro'
|
|
import Compress from 'astro-compress'
|
|
import icon from 'astro-icon'
|
|
import { defineConfig } from 'astro/config'
|
|
import Color from 'colorjs.io'
|
|
import rehypeAutolinkHeadings from 'rehype-autolink-headings'
|
|
import rehypeComponents from 'rehype-components' /* Render the custom directive content */
|
|
import rehypeKatex from 'rehype-katex'
|
|
import rehypeSlug from 'rehype-slug'
|
|
import remarkDirective from 'remark-directive' /* Handle directives */
|
|
import remarkGithubAdmonitionsToDirectives from 'remark-github-admonitions-to-directives'
|
|
import remarkMath from 'remark-math'
|
|
import { AdmonitionComponent } from './src/plugins/rehype-component-admonition.mjs'
|
|
import { GithubCardComponent } from './src/plugins/rehype-component-github-card.mjs'
|
|
import { parseDirectiveNode } from './src/plugins/remark-directive-rehype.js'
|
|
import { remarkExcerpt } from './src/plugins/remark-excerpt.js'
|
|
import { remarkReadingTime } from './src/plugins/remark-reading-time.mjs'
|
|
|
|
const oklchToHex = str => {
|
|
const DEFAULT_HUE = 250
|
|
const regex = /-?\d+(\.\d+)?/g
|
|
const matches = str.string.match(regex)
|
|
const lch = [matches[0], matches[1], DEFAULT_HUE]
|
|
return new Color('oklch', lch).to('srgb').toString({
|
|
format: 'hex',
|
|
})
|
|
}
|
|
|
|
// https://astro.build/config
|
|
export default defineConfig({
|
|
site: 'https://www.robertops.com/',
|
|
base: '/',
|
|
trailingSlash: 'always',
|
|
integrations: [
|
|
tailwind(),
|
|
swup({
|
|
theme: false,
|
|
animationClass: 'transition-swup-', // see https://swup.js.org/options/#animationselector
|
|
// the default value `transition-` cause transition delay
|
|
// when the Tailwind class `transition-all` is used
|
|
containers: ['main', '#toc'],
|
|
smoothScrolling: true,
|
|
cache: true,
|
|
preload: true,
|
|
accessibility: true,
|
|
updateHead: true,
|
|
updateBodyClass: false,
|
|
globalInstance: true,
|
|
}),
|
|
icon({
|
|
include: {
|
|
'material-symbols': ['*'],
|
|
'fa6-brands': ['*'],
|
|
'fa6-regular': ['*'],
|
|
'fa6-solid': ['*'],
|
|
},
|
|
}),
|
|
svelte(),
|
|
sitemap(),
|
|
Compress({
|
|
CSS: false,
|
|
Image: false,
|
|
Action: {
|
|
Passed: async () => true, // https://github.com/PlayForm/Compress/issues/376
|
|
},
|
|
}),
|
|
],
|
|
markdown: {
|
|
remarkPlugins: [
|
|
remarkMath,
|
|
remarkReadingTime,
|
|
remarkExcerpt,
|
|
remarkGithubAdmonitionsToDirectives,
|
|
remarkDirective,
|
|
parseDirectiveNode,
|
|
],
|
|
rehypePlugins: [
|
|
rehypeKatex,
|
|
rehypeSlug,
|
|
[
|
|
rehypeComponents,
|
|
{
|
|
components: {
|
|
github: GithubCardComponent,
|
|
note: (x, y) => AdmonitionComponent(x, y, 'note'),
|
|
tip: (x, y) => AdmonitionComponent(x, y, 'tip'),
|
|
important: (x, y) => AdmonitionComponent(x, y, 'important'),
|
|
caution: (x, y) => AdmonitionComponent(x, y, 'caution'),
|
|
warning: (x, y) => AdmonitionComponent(x, y, 'warning'),
|
|
},
|
|
},
|
|
],
|
|
[
|
|
rehypeAutolinkHeadings,
|
|
{
|
|
behavior: 'append',
|
|
properties: {
|
|
className: ['anchor'],
|
|
},
|
|
content: {
|
|
type: 'element',
|
|
tagName: 'span',
|
|
properties: {
|
|
className: ['anchor-icon'],
|
|
'data-pagefind-ignore': true,
|
|
},
|
|
children: [
|
|
{
|
|
type: 'text',
|
|
value: '#',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
],
|
|
},
|
|
vite: {
|
|
build: {
|
|
rollupOptions: {
|
|
onwarn(warning, warn) {
|
|
// temporarily suppress this warning
|
|
if (
|
|
warning.message.includes('is dynamically imported by') &&
|
|
warning.message.includes('but also statically imported by')
|
|
) {
|
|
return
|
|
}
|
|
warn(warning)
|
|
},
|
|
},
|
|
},
|
|
css: {
|
|
preprocessorOptions: {
|
|
stylus: {
|
|
define: {
|
|
oklchToHex: oklchToHex,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|