diff --git a/packages/website/mdsvex.config.js b/packages/website/mdsvex.config.js
index eb9e95e0..5f52a6e9 100644
--- a/packages/website/mdsvex.config.js
+++ b/packages/website/mdsvex.config.js
@@ -1,12 +1,20 @@
-import { defineMDSveXConfig as defineConfig } from "mdsvex";
+// https://github.com/String10/Hakuba/blob/master/package.json
+// import { defineMDSveXConfig as defineConfig } from "mdsvex";
// import type { Plugin, Settings } from 'unified';
import remarkGfm from "remark-gfm";
import remarkFrontmatter from "remark-frontmatter";
-import remarkMath from "remark-math";
import remarkWikiLink, { } from "remark-wiki-link";
-import slug from 'rehype-slug';
+import remarkMath from "remark-math"
+// @ts-ignore
+import remarkAbbr from "remark-abbr"
+import remarkFootnotes from 'remark-footnotes'
+
+import rehypeKatexSvelte from 'rehype-katex-svelte';
+// import github from "remark-github";
+
+import rehypeSlug from 'rehype-slug';
import { parse, format } from "node:path";
@@ -57,61 +65,68 @@ function pageResolver(pageName) {
}
const hrefTemplate = (/** @type {string} */ permalink) => `#${permalink}`
+/**
+ * @type {import("mdsvex").MdsvexOptions}
+ */
+const config = {
+ extensions: [".svelte.md", ".md", ".svx"],
-const config = defineConfig({
- extensions: [".svelte.md", ".md", ".svx"],
+ // fences: true,
+ // ruleSpaces: false,
+ smartypants: {
+ dashes: "oldschool",
+ },
-// fences: true,
-// ruleSpaces: false,
- smartypants: {
- dashes: "oldschool",
- },
-
- highlight: {
- alias: {
- ts: "typescript",
- mdx: "markdown",
- svelte: "svelte",
- svx: "svx",
- mdsvex: "svx",
- sig: "ts",
- }
- },
+ highlight: {
+ alias: {
+ ts: "typescript",
+ mdx: "markdown",
+ svelte: "svelte",
+ svx: "svx",
+ mdsvex: "svx",
+ sig: "ts",
+ }
+ },
- remarkPlugins: [
- remarkGfm,
- remarkFrontmatter,
- remarkMath,
- [remarkWikiLink, {
- // @ts-ignore
- aliasDivider: "|",
- permalinks: permalinks,
- pageResolver,
- hrefTemplate,
-
- // wikiLinkClassName,
- // newClassName,
- }],
- // [citePlugin, {
- // syntax: {
- // // see micromark-extension-cite
- // enableAltSyntax: false,
- // enablePandocSyntax: true,
- // },
- // toMarkdown: {
- // // see mdast-util-cite
- // standardizeAltSyntax: false,
- // enableAuthorSuppression: true,
- // useNodeValue: false,
- // },
- // }],
- // [remarkBibliography, { bibliography }],
- // [remarkMermaid, {}]
- ],
- rehypePlugins: [
- // @ts-ignore
- slug
- ],
-});
+ remarkPlugins: [
+ // remarkFrontmatter,
+ // [github, {repository}],
+ remarkMath,
+ remarkAbbr,
+ [remarkFootnotes, { inlineNotes: true }],
+ remarkGfm,
+ [remarkWikiLink, {
+ // @ts-ignore
+ aliasDivider: "|",
+ permalinks: permalinks,
+ pageResolver,
+ hrefTemplate,
+
+ // wikiLinkClassName,
+ // newClassName,
+ }],
+ // [citePlugin, {
+ // syntax: {
+ // // see micromark-extension-cite
+ // enableAltSyntax: false,
+ // enablePandocSyntax: true,
+ // },
+ // toMarkdown: {
+ // // see mdast-util-cite
+ // standardizeAltSyntax: false,
+ // enableAuthorSuppression: true,
+ // useNodeValue: false,
+ // },
+ // }],
+ // [remarkBibliography, { bibliography }],
+ // [remarkMermaid, {}]
+ ],
+ rehypePlugins: [
+ // @ts-ignore
+ rehypeKatexSvelte,
+ // @ts-ignore
+ rehypeSlug
+ ],
+};
export default config;
diff --git a/packages/website/package.json b/packages/website/package.json
index 0a097abe..57713ea7 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -22,10 +22,14 @@
"@types/sharedworker": "^0.0.115",
"glob": "^10.4.1",
"mdsvex": "^0.11.2",
+ "rehype-katex-svelte": "1.2",
"rehype-slug": "^6.0.0",
+ "remark-abbr": "^1.4.2",
+ "remark-footnotes": "2",
"remark-frontmatter": "^5.0.0",
"remark-gfm": "^4.0.0",
- "remark-math": "^6.0.0",
+ "remark-github": "^12.0.0",
+ "remark-math": "^3.0.1",
"remark-wiki-link": "^2.0.1",
"rollup": "^4.18.0",
"rollup-plugin-type-as-json-schema": "^0.2.6",
diff --git a/packages/website/src/lib/Nav.svelte b/packages/website/src/lib/Nav.svelte
index d0f93a96..dff6425f 100644
--- a/packages/website/src/lib/Nav.svelte
+++ b/packages/website/src/lib/Nav.svelte
@@ -24,8 +24,8 @@
+
Art -->
+ Blog
diff --git a/packages/website/src/params/number.js b/packages/website/src/params/number.js
new file mode 100644
index 00000000..99478ac1
--- /dev/null
+++ b/packages/website/src/params/number.js
@@ -0,0 +1,3 @@
+export function match(value) {
+ return /^\d+$/.test(value);
+}
\ No newline at end of file
diff --git a/packages/website/src/routes/blog/+page.server.ts b/packages/website/src/routes/blog/+page.server.ts
new file mode 100644
index 00000000..e5b3919d
--- /dev/null
+++ b/packages/website/src/routes/blog/+page.server.ts
@@ -0,0 +1,8 @@
+import { pages } from './posts'
+
+export async function load({ params }) {
+
+ return {
+ pages
+ }
+}
\ No newline at end of file
diff --git a/packages/website/src/routes/blog/+page.svelte b/packages/website/src/routes/blog/+page.svelte
new file mode 100644
index 00000000..108458c5
--- /dev/null
+++ b/packages/website/src/routes/blog/+page.svelte
@@ -0,0 +1,31 @@
+
+
+
+ Blog Posts
+ {#each pages as post, index}
+
+
+
+
{post.date}
+ {#if post.description}
+
{post.description}
+ {/if}
+
+
+ {:else}
+ No posts yet!
+ {/each}
+
+
diff --git a/packages/website/src/routes/blog/[...date]/[slug]/+page.server.ts b/packages/website/src/routes/blog/[...date]/[slug]/+page.server.ts
new file mode 100644
index 00000000..1ccaf85f
--- /dev/null
+++ b/packages/website/src/routes/blog/[...date]/[slug]/+page.server.ts
@@ -0,0 +1,43 @@
+import { pages } from '../../posts'
+import { error } from '@sveltejs/kit'
+import TTLCache, { } from "@isaacs/ttlcache";
+import { parse } from "@tusbar/cache-control";
+const cache = new TTLCache({ max: 10000, ttl: 1000 })
+
+import type { Endpoints } from "@octokit/types";
+
+let repoRegex = new RegExp("https?://github\.com/(?[a-zA-Z0-9]+/[a-zA-Z0-9]+)/?")
+
+/** @type {import('./$types').PageServerLoad} */
+export async function load({ params }) {
+ const { slug } = params
+ let dateParts = params.date.split(/[\/-]/).map((p) => parseInt(p, 10))
+ if (dateParts.length > 3) {
+ throw error(404, 'Post not found (bad date)')
+ }
+
+ // let start = new Date(dateParts[0] || 1, dateParts[1] || 0, dateParts[2] || 0);
+ // // @ts-ignore
+ // let end = new Date(...dateParts);
+ // console.log(dateParts)
+
+ // get post with metadata
+ const page = pages
+ .filter((post) => slug === post.slug)
+ .filter((post) => {
+ let date = new Date(post.date)
+ return (
+ (!dateParts[0] || date.getFullYear() == dateParts[0]) &&
+ (!dateParts[1] || date.getMonth()+1 == dateParts[1]) &&
+ (!dateParts[2] || date.getDate() == dateParts[2])
+ )
+ })[0]
+
+ if (!page) {
+ throw error(404, 'Post not found')
+ }
+
+ return {
+ page
+ }
+}
\ No newline at end of file
diff --git a/packages/website/src/routes/blog/[...date]/[slug]/+page.svelte b/packages/website/src/routes/blog/[...date]/[slug]/+page.svelte
new file mode 100644
index 00000000..73263b87
--- /dev/null
+++ b/packages/website/src/routes/blog/[...date]/[slug]/+page.svelte
@@ -0,0 +1,27 @@
+
+
+
+{data.post.title}
+
+
+
diff --git a/packages/website/src/routes/blog/[...date]/[slug]/+page.ts b/packages/website/src/routes/blog/[...date]/[slug]/+page.ts
new file mode 100644
index 00000000..251453fd
--- /dev/null
+++ b/packages/website/src/routes/blog/[...date]/[slug]/+page.ts
@@ -0,0 +1,22 @@
+// import { pages } from './projects'
+import { error } from '@sveltejs/kit'
+
+
+/** @type {import('./$types').PageServerLoad} */
+export async function load({ data, params }) {
+ // if (!post) {
+ // throw error(404, 'Post not found')
+ // }
+ // load the markdown file based on slug
+ console.log(data)
+ const component =
+ // await import(data.page.filepath)
+ await import("Notes/Blogs/" + data.page.filepath.name + ".md")
+ // console.log(data.page.filepath)
+
+
+ return {
+ post: data.page,
+ component: component.default
+ }
+}
\ No newline at end of file
diff --git a/packages/website/src/routes/blog/posts.ts b/packages/website/src/routes/blog/posts.ts
new file mode 100644
index 00000000..7f6e88ed
--- /dev/null
+++ b/packages/website/src/routes/blog/posts.ts
@@ -0,0 +1,106 @@
+import { browser } from '$app/environment'
+// import { format } from 'date-fns'
+
+import slugify from 'slugify';
+import { parse, format, relative } from "node:path";
+
+// we require some server-side APIs to parse all metadata
+if (browser) {
+ throw new Error(`posts can only be imported server-side`)
+}
+// import { browser } from '$app/environment'
+// import { format } from 'date-fns'
+// import { parse } from 'node-html-parser'
+// import readingTime from 'reading-time/lib/reading-time.js'
+
+// // we require some server-side APIs to parse all metadata
+// if (browser) {
+// throw new Error(`posts can only be imported server-side`)
+// }
+
+// // Get all posts and add metadata
+// export const posts = Object.entries(import.meta.glob('/posts/**/*.md', { eager: true }))
+// .map(([filepath, post]) => {
+// const html = parse(post.default.render().html)
+// const preview = post.metadata.preview ? parse(post.metadata.preview) : html.querySelector('p')
+
+// return {
+// ...post.metadata,
+
+// // generate the slug from the file path
+// slug: filepath
+// .replace(/(\/index)?\.md/, '')
+// .split('/')
+// .pop(),
+
+// // whether or not this file is `my-post.md` or `my-post/index.md`
+// // (needed to do correct dynamic import in posts/[slug].svelte)
+// isIndexFile: filepath.endsWith('/index.md'),
+
+// // format date as yyyy-MM-dd
+// date: post.metadata.date
+// ? format(
+// // offset by timezone so that the date is correct
+// addTimezoneOffset(new Date(post.metadata.date)),
+// 'yyyy-MM-dd'
+// )
+// : undefined,
+
+// preview: {
+// html: preview.toString(),
+// // text-only preview (i.e no html elements), used for SEO
+// text: preview.structuredText ?? preview.toString()
+// },
+
+// // get estimated reading time for the post
+// readingTime: readingTime(html.structuredText).text
+// }
+// })
+// // sort by date
+// .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())
+// // add references to the next/previous post
+// .map((post, index, allPosts) => ({
+// ...post,
+// next: allPosts[index - 1],
+// previous: allPosts[index + 1]
+// }))
+const dateRegex = /^((?\d{4})-(?[0][1-9]|1[0-2])-(?[0][1-9]|[1-2]\d|3[01]))\s*/
+export const pages = Object.entries(import.meta.glob('/node_modules/Notes/Blogs/*.md', { eager: true }))
+ .map(([filepath, post]) => {
+ let path = parse(filepath);
+ let title = path.name.replace(dateRegex, "")
+
+ // @ts-ignore
+ // let {year, month, day}: { year: string, month: string, day: string } = path.name.match(dateRegex)?.groups;
+
+ // console.log(year, month, day)
+ let date = path.name.match(dateRegex)[1];
+ let datePath = date.replaceAll("-", "/")
+ let slug = slugify(title, { lower: true })
+ return {
+ title,
+ date,
+ canonical: datePath + "/" + slug,
+ // @ts-ignore
+ ...post.metadata,
+
+ slug,
+ // filepath: relative(import.meta.dirname, filepath)
+ filepath: path
+ }
+ })
+ // sort by date
+ .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())
+// Get all posts and add metadata
+// // add references to the next/previous post
+// .map((post, index, allPosts) => ({
+// ...post,
+// next: allPosts[index - 1],
+// previous: allPosts[index + 1]
+// }))
+
+
+// function addTimezoneOffset(date) {
+// const offsetInMilliseconds = new Date().getTimezoneOffset() * 60 * 1000
+// return new Date(new Date(date).getTime() + offsetInMilliseconds)
+// }
\ No newline at end of file
diff --git a/packages/website/src/routes/sitemap[[page]].xml/+server.ts b/packages/website/src/routes/sitemap[[page]].xml/+server.ts
index ddfa9843..0affbf10 100644
--- a/packages/website/src/routes/sitemap[[page]].xml/+server.ts
+++ b/packages/website/src/routes/sitemap[[page]].xml/+server.ts
@@ -6,8 +6,8 @@ import type { RequestHandler } from '@sveltejs/kit';
import slugify from 'slugify';
import { parse, format } from "node:path";
-
-const pages = Object.entries(import.meta.glob('/node_modules/Notes/Projects/*.md', { eager: true }))
+import { pages as blogPosts } from "../blog/posts"
+const projects = Object.entries(import.meta.glob('/node_modules/Notes/Projects/*.md', { eager: true }))
.map(([filepath, post]) => {
return parse(filepath)
})
@@ -27,7 +27,8 @@ export const GET: RequestHandler = async ({ params }) => {
origin: SITE_URL,
page: params.page,
paramValues: {
- '/projects/[slug]': pages
+ '/projects/[slug]': projects,
+ '/blog/[...date]/[slug]': blogPosts.map((post) => post.canonical)
}
});
};
\ No newline at end of file
diff --git a/packages/website/svelte.config.js b/packages/website/svelte.config.js
index 9f8cb83c..d0ed89d4 100644
--- a/packages/website/svelte.config.js
+++ b/packages/website/svelte.config.js
@@ -8,7 +8,7 @@ import cspDirectives from "./csp.js";
/** @type {import('@sveltejs/kit').Config} */
const config = {
- extensions: [".svelte", ".md"],
+ extensions: ['.svelte', '.md', '.svelte.md'],
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
// for more information about preprocessors
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 86021369..e67cfa24 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -116,18 +116,30 @@ importers:
mdsvex:
specifier: ^0.11.2
version: 0.11.2(svelte@4.2.18)
+ rehype-katex-svelte:
+ specifier: '1.2'
+ version: 1.2.0
rehype-slug:
specifier: ^6.0.0
version: 6.0.0
+ remark-abbr:
+ specifier: ^1.4.2
+ version: 1.4.2
+ remark-footnotes:
+ specifier: '2'
+ version: 2.0.0
remark-frontmatter:
specifier: ^5.0.0
version: 5.0.0
remark-gfm:
specifier: ^4.0.0
version: 4.0.0
+ remark-github:
+ specifier: ^12.0.0
+ version: 12.0.0
remark-math:
- specifier: ^6.0.0
- version: 6.0.0
+ specifier: ^3.0.1
+ version: 3.0.1
remark-wiki-link:
specifier: ^2.0.1
version: 2.0.1
@@ -866,6 +878,9 @@ packages:
'@types/estree@1.0.5':
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+ '@types/hast@2.3.10':
+ resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
+
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
@@ -875,9 +890,6 @@ packages:
'@types/jsonwebtoken@9.0.6':
resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==}
- '@types/katex@0.16.7':
- resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
-
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
@@ -913,7 +925,7 @@ packages:
'@codemirror/view': '>=6.0.0'
Notes@file:packages/website/Notes-1.0.0.tgz:
- resolution: {integrity: sha512-IfrtxNtg8KP6yOg6iUFDEDPyb5xFMpXF6Z++XsNnzCfnaNLoCZ3m6ZvoIkmLGymlx/K2oLuICpLHU/XH0VTq1Q==, tarball: file:packages/website/Notes-1.0.0.tgz}
+ resolution: {integrity: sha512-a8z5482+K/pZYkHbhVCn9LGMeidtlj7qlmaFKxdeKmlNtcZ0Sd04cqsvxPXMykjflQpTvF1FPHNPwSW8XsB7Ag==, tarball: file:packages/website/Notes-1.0.0.tgz}
version: 1.0.0
acorn@8.12.0:
@@ -980,6 +992,9 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ bcp-47-match@2.0.3:
+ resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==}
+
before-after-hook@2.2.3:
resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
@@ -1084,6 +1099,9 @@ packages:
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines: {node: '>=12.5.0'}
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
command-line-args@5.2.1:
resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==}
engines: {node: '>=4.0.0'}
@@ -1131,6 +1149,9 @@ packages:
css-select@5.1.0:
resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+ css-selector-parser@1.4.1:
+ resolution: {integrity: sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==}
+
css-tree@2.2.1:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
@@ -1188,6 +1209,10 @@ packages:
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ direction@2.0.1:
+ resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==}
+ hasBin: true
+
directory-tree@3.5.1:
resolution: {integrity: sha512-HqjZ49fDzUnKYUhHxVw9eKBqbQ+lL0v4kSBInlDlaktmLtGoV9tC54a6A0ZfYeIrkMHWTE6MwwmUXP477+UEKQ==}
engines: {node: '>=10.0'}
@@ -1340,12 +1365,27 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ hast-util-from-string@2.0.0:
+ resolution: {integrity: sha512-9JlBGWh+RXbT8PDrdwYZloN6poib8xg7Vq+LgN5TTqnaMDO0YqfX4EyZd3Myel6yIXlDsgysiRB1CTjH2K+1Dg==}
+
+ hast-util-has-property@2.0.1:
+ resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==}
+
hast-util-heading-rank@3.0.0:
resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
+ hast-util-select@5.0.5:
+ resolution: {integrity: sha512-QQhWMhgTFRhCaQdgTKzZ5g31GLQ9qRb1hZtDPMqQaOhpLBziWcshUS0uCR5IJ0U1jrK/mxg35fmcq+Dp/Cy2Aw==}
+
+ hast-util-to-string@2.0.0:
+ resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==}
+
hast-util-to-string@3.0.0:
resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==}
+ hast-util-whitespace@2.0.1:
+ resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
+
html-minifier-terser@7.2.0:
resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==}
engines: {node: ^14.13.1 || >=16.0.0}
@@ -1534,9 +1574,6 @@ packages:
mdast-util-gfm@3.0.0:
resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
- mdast-util-math@3.0.0:
- resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==}
-
mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
@@ -1597,9 +1634,6 @@ packages:
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
- micromark-extension-math@3.0.0:
- resolution: {integrity: sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==}
-
micromark-extension-wiki-link@0.0.4:
resolution: {integrity: sha512-dJc8AfnoU8BHkN+7fWZvIS20SMsMS1ZlxQUn6We67MqeKbOiEDZV5eEvCpwqGBijbJbxX3Kxz879L4K9HIiOvw==}
@@ -1719,6 +1753,9 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
+ not@0.1.0:
+ resolution: {integrity: sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==}
+
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
@@ -1781,6 +1818,9 @@ packages:
resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
engines: {node: '>=6'}
+ property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -1795,6 +1835,9 @@ packages:
regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+ rehype-katex-svelte@1.2.0:
+ resolution: {integrity: sha512-3mAa0J7LgMfaoU3oj9XLBIn5H/MyvWcOQcItoWhww/sABkcLpY73WsAs5mwH0c6cwYDYwJKaVVl2vNuL3wokeA==}
+
rehype-slug@6.0.0:
resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
@@ -1802,14 +1845,23 @@ packages:
resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
engines: {node: '>= 0.10'}
+ remark-abbr@1.4.2:
+ resolution: {integrity: sha512-h/fS4aXiJ0B0yyPfNHtQuOI10DZvMkUG1jBhi7e9Bj666iJN6sgoh8KMsJ6P6jdfmq7FqcXZ0fk+t3OVJ5MePw==}
+
+ remark-footnotes@2.0.0:
+ resolution: {integrity: sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==}
+
remark-frontmatter@5.0.0:
resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==}
remark-gfm@4.0.0:
resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
- remark-math@6.0.0:
- resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==}
+ remark-github@12.0.0:
+ resolution: {integrity: sha512-ByefQKFN184LeiGRCabfl7zUJsdlMYWEhiLX1gpmQ11yFg6xSuOTW7LVCv0oc1x+YvUMJW23NU36sJX2RWGgvg==}
+
+ remark-math@3.0.1:
+ resolution: {integrity: sha512-epT77R/HK0x7NqrWHdSV75uNLwn8g9qTyMqCRCDujL0vj/6T6+yhdrR7mjELWtkse+Fw02kijAaBuVcHBor1+Q==}
remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
@@ -1922,6 +1974,9 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
@@ -2052,6 +2107,9 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+ to-vfile@8.0.0:
+ resolution: {integrity: sha512-IcmH1xB5576MJc9qcfEC/m/nQCFt3fzMHz45sSlgJyTWjRbKW1HAkJpuf3DgE57YzIlZcwcBZA5ENQbBo4aLkg==}
+
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
@@ -2090,21 +2148,36 @@ packages:
unified@11.0.4:
resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==}
+ unist-util-is@4.1.0:
+ resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
+
+ unist-util-is@5.2.1:
+ resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+
unist-util-is@6.0.0:
resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
- unist-util-remove-position@5.0.0:
- resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
-
unist-util-stringify-position@2.0.3:
resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+ unist-util-visit-parents@3.1.1:
+ resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
+
+ unist-util-visit-parents@5.1.3:
+ resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+
unist-util-visit-parents@6.0.1:
resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+ unist-util-visit@2.0.3:
+ resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
+
+ unist-util-visit@4.1.2:
+ resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+
unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
@@ -2850,6 +2923,10 @@ snapshots:
'@types/estree@1.0.5': {}
+ '@types/hast@2.3.10':
+ dependencies:
+ '@types/unist': 2.0.10
+
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.2
@@ -2860,8 +2937,6 @@ snapshots:
dependencies:
'@types/node': 20.14.2
- '@types/katex@0.16.7': {}
-
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.2
@@ -2948,6 +3023,8 @@ snapshots:
balanced-match@1.0.2: {}
+ bcp-47-match@2.0.3: {}
+
before-after-hook@2.2.3: {}
binary-extensions@2.3.0: {}
@@ -3062,6 +3139,8 @@ snapshots:
color-convert: 2.0.1
color-string: 1.9.1
+ comma-separated-tokens@2.0.3: {}
+
command-line-args@5.2.1:
dependencies:
array-back: 3.1.0
@@ -3108,6 +3187,8 @@ snapshots:
domutils: 3.1.0
nth-check: 2.1.1
+ css-selector-parser@1.4.1: {}
+
css-tree@2.2.1:
dependencies:
mdn-data: 2.0.28
@@ -3150,6 +3231,8 @@ snapshots:
dependencies:
dequal: 2.0.3
+ direction@2.0.1: {}
+
directory-tree@3.5.1:
dependencies:
command-line-args: 5.2.1
@@ -3321,14 +3404,44 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hast-util-from-string@2.0.0:
+ dependencies:
+ '@types/hast': 2.3.10
+
+ hast-util-has-property@2.0.1: {}
+
hast-util-heading-rank@3.0.0:
dependencies:
'@types/hast': 3.0.4
+ hast-util-select@5.0.5:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.10
+ bcp-47-match: 2.0.3
+ comma-separated-tokens: 2.0.3
+ css-selector-parser: 1.4.1
+ direction: 2.0.1
+ hast-util-has-property: 2.0.1
+ hast-util-to-string: 2.0.0
+ hast-util-whitespace: 2.0.1
+ not: 0.1.0
+ nth-check: 2.1.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ unist-util-visit: 4.1.2
+ zwitch: 2.0.4
+
+ hast-util-to-string@2.0.0:
+ dependencies:
+ '@types/hast': 2.3.10
+
hast-util-to-string@3.0.0:
dependencies:
'@types/hast': 3.0.4
+ hast-util-whitespace@2.0.1: {}
+
html-minifier-terser@7.2.0:
dependencies:
camel-case: 4.1.2
@@ -3575,18 +3688,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- mdast-util-math@3.0.0:
- dependencies:
- '@types/hast': 3.0.4
- '@types/mdast': 4.0.4
- devlop: 1.1.0
- longest-streak: 3.1.0
- mdast-util-from-markdown: 2.0.1
- mdast-util-to-markdown: 2.1.0
- unist-util-remove-position: 5.0.0
- transitivePeerDependencies:
- - supports-color
-
mdast-util-phrasing@4.1.0:
dependencies:
'@types/mdast': 4.0.4
@@ -3721,16 +3822,6 @@ snapshots:
micromark-util-combine-extensions: 2.0.0
micromark-util-types: 2.0.0
- micromark-extension-math@3.0.0:
- dependencies:
- '@types/katex': 0.16.7
- devlop: 1.1.0
- katex: 0.16.10
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.1.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
-
micromark-extension-wiki-link@0.0.4:
dependencies:
'@babel/runtime': 7.24.7
@@ -3893,6 +3984,8 @@ snapshots:
normalize-path@3.0.0: {}
+ not@0.1.0: {}
+
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
@@ -3970,6 +4063,8 @@ snapshots:
prismjs@1.29.0: {}
+ property-information@6.5.0: {}
+
queue-microtask@1.2.3: {}
readdirp@3.6.0:
@@ -3980,6 +4075,13 @@ snapshots:
regenerator-runtime@0.14.1: {}
+ rehype-katex-svelte@1.2.0:
+ dependencies:
+ hast-util-from-string: 2.0.0
+ hast-util-select: 5.0.5
+ hast-util-to-string: 2.0.0
+ katex: 0.16.10
+
rehype-slug@6.0.0:
dependencies:
'@types/hast': 3.0.4
@@ -3990,6 +4092,12 @@ snapshots:
relateurl@0.2.7: {}
+ remark-abbr@1.4.2:
+ dependencies:
+ unist-util-visit: 2.0.3
+
+ remark-footnotes@2.0.0: {}
+
remark-frontmatter@5.0.0:
dependencies:
'@types/mdast': 4.0.4
@@ -4010,14 +4118,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
- remark-math@6.0.0:
+ remark-github@12.0.0:
dependencies:
'@types/mdast': 4.0.4
- mdast-util-math: 3.0.0
- micromark-extension-math: 3.0.0
- unified: 11.0.4
- transitivePeerDependencies:
- - supports-color
+ mdast-util-find-and-replace: 3.0.1
+ mdast-util-to-string: 4.0.0
+ to-vfile: 8.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.1
+
+ remark-math@3.0.1: {}
remark-parse@11.0.0:
dependencies:
@@ -4172,6 +4282,8 @@ snapshots:
source-map@0.6.1: {}
+ space-separated-tokens@2.0.2: {}
+
sprintf-js@1.0.3: {}
string-width@4.2.3:
@@ -4318,6 +4430,10 @@ snapshots:
dependencies:
is-number: 7.0.0
+ to-vfile@8.0.0:
+ dependencies:
+ vfile: 6.0.1
+
totalist@3.0.1: {}
trough@2.2.0: {}
@@ -4354,15 +4470,16 @@ snapshots:
trough: 2.2.0
vfile: 6.0.1
+ unist-util-is@4.1.0: {}
+
+ unist-util-is@5.2.1:
+ dependencies:
+ '@types/unist': 2.0.10
+
unist-util-is@6.0.0:
dependencies:
'@types/unist': 3.0.2
- unist-util-remove-position@5.0.0:
- dependencies:
- '@types/unist': 3.0.2
- unist-util-visit: 5.0.0
-
unist-util-stringify-position@2.0.3:
dependencies:
'@types/unist': 2.0.10
@@ -4371,11 +4488,33 @@ snapshots:
dependencies:
'@types/unist': 3.0.2
+ unist-util-visit-parents@3.1.1:
+ dependencies:
+ '@types/unist': 2.0.10
+ unist-util-is: 4.1.0
+
+ unist-util-visit-parents@5.1.3:
+ dependencies:
+ '@types/unist': 2.0.10
+ unist-util-is: 5.2.1
+
unist-util-visit-parents@6.0.1:
dependencies:
'@types/unist': 3.0.2
unist-util-is: 6.0.0
+ unist-util-visit@2.0.3:
+ dependencies:
+ '@types/unist': 2.0.10
+ unist-util-is: 4.1.0
+ unist-util-visit-parents: 3.1.1
+
+ unist-util-visit@4.1.2:
+ dependencies:
+ '@types/unist': 2.0.10
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
unist-util-visit@5.0.0:
dependencies:
'@types/unist': 3.0.2