diff --git a/.eleventy.js b/.eleventy.ts
similarity index 90%
rename from .eleventy.js
rename to .eleventy.ts
index 8b1ce489..8208b909 100644
--- a/.eleventy.js
+++ b/.eleventy.ts
@@ -1,29 +1,34 @@
-const eleventyRemark = require('@fec/eleventy-plugin-remark');
-const { EleventyRenderPlugin } = require("@11ty/eleventy");
-const eleventyNavigation = require('@11ty/eleventy-navigation');
-const PropTypes = require('prop-types');
-const argParse = require('liquid-args');
-const path = require('path');
-const fs = require('node:fs/promises');
-const slug = require('slug');
-const YAML = require('js-yaml');
-
-const { asAttr, ifSet, IS_PRODUCTION, isolate } = require('./helpers');
-const references = require('./references');
-const { articleImage, person, license, organization } = require('./images');
-const referenceSchema = require('./references-schema');
-
-PropTypes.resetWarningCache();
+import "tsx/esm";
+import { renderToStaticMarkup } from "react-dom/server";
+
+import eleventyRemark from '@fec/eleventy-plugin-remark';
+import { EleventyRenderPlugin } from "@11ty/eleventy";
+import eleventyNavigation from '@11ty/eleventy-navigation';
+import PropTypes from 'prop-types';
+import argParse from 'liquid-args';
+import path from 'path';
+import fs from 'node:fs/promises';
+import slug from 'slug';
+import YAML from 'js-yaml';
+
+import { asAttr, ifSet, IS_PRODUCTION, isolate } from './helpers';
+import * as references from './references';
+import { articleImage, person, license, organization } from './images';
+import * as referenceSchema from './references-schema';
+
+if (IS_PRODUCTION) {
+ PropTypes.resetWarningCache();
+}
function _normalizeShortcodeScope(ctx) {
- let obj = {};
+ let obj: any = {};
if (ctx) {
obj.page = ctx.get(["page"]);
}
return obj;
}
-module.exports = function (eleventyConfig) {
+export default function (eleventyConfig) {
eleventyConfig.addWatchTarget("src/sass");
eleventyConfig.addWatchTarget("src/maps");
eleventyConfig.addWatchTarget("bibliography.yaml");
@@ -65,8 +70,16 @@ module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyNavigation);
eleventyConfig.addExtension(["11ty.jsx", "11ty.ts", "11ty.tsx"], {
- key: "11ty.js"
- });
+ key: "11ty.js",
+ compile: function () {
+ return async function (data) {
+ let content = await this.defaultRenderer(data);
+ return renderToStaticMarkup(content);
+ };
+ },
+ });
+ eleventyConfig.addTemplateFormats(["11ty.ts","11ty.tsx"]);
+ //eleventyConfig.addDataFormats("11ty.ts,11ty.tsx");
eleventyConfig.addShortcode("person", person);
eleventyConfig.addShortcode("organization", organization);
@@ -253,9 +266,9 @@ function gameRef() {
}
// try to find a sub-article
- for (g of games) {
+ for (const g of games) {
if (g.data.subgames) {
- for (sg of g.data.subgames) {
+ for (const sg of g.data.subgames) {
const s = sg.slug || slug(sg.title);
if (s === this.ref) {
if (IS_PRODUCTION && g.data.draft) {
@@ -281,7 +294,7 @@ function gameRef() {
// altered from: https://github.com/rehypejs/rehype-slug/blob/main/index.js
const addSlugs = () => {
- let imports = undefined;
+ let imports: any = undefined;
return async tree => {
if (!imports) {
imports = {
@@ -332,7 +345,7 @@ const citationPlugin = () => {
switch (reference.type) {
case 'book':
return ``
- + references.renderLStr(reference.title, 'cite', {})
+ + renderToStaticMarkup(references.renderLStr(reference.title, 'cite', {}))
+ ``
+ ifSet(suffix, ` (${suffix})`);
case 'chapter':
@@ -359,7 +372,7 @@ const citationPlugin = () => {
unist = await import('unist-util-visit');
}
- const biblioPath = path.join(__dirname, 'bibliography.yaml');
+ const biblioPath = new URL('./bibliography.yaml', import.meta.url);
let stat = await fs.stat(biblioPath);
if (!biblio || stat.mtime > biblioLastModified) {
biblio = YAML.load(await fs.readFile(biblioPath, 'utf8'));
@@ -452,7 +465,7 @@ const citationPlugin = () => {
return {
type: 'element',
tagName: 'li',
- children: [{ type: 'raw', value: references.renderReference(biblio[id]) }],
+ children: [{ type: 'raw', value: renderToStaticMarkup(references.renderReference(biblio[id])) }],
};
}),
},
diff --git a/helpers.ts b/helpers.tsx
similarity index 59%
rename from helpers.ts
rename to helpers.tsx
index 22db892e..442cdd3c 100644
--- a/helpers.ts
+++ b/helpers.tsx
@@ -1,5 +1,6 @@
import { env } from 'process';
-import { Date, Article } from './types';
+import { Date, Article } from './types.js';
+import * as React from 'react';
import ordinal from 'ordinal';
@@ -58,7 +59,7 @@ const days =
"Saturday"
];
-export function renderExplicitDate(date: Date, omitIfJustYear: boolean): string | null {
+export function renderExplicitDate(date: Date, omitIfJustYear: boolean): React.JSX.Element | null {
if (typeof date === 'number') {
date = { year: date };
}
@@ -73,19 +74,19 @@ export function renderExplicitDate(date: Date, omitIfJustYear: boolean): string
: new globalThis.Date(date.year, date.month - 1, date.day);
const day = (((actualDate.getDay() - 10) % 7) + 7) % 7;
- return `${days[day]}, ${ordinal(date.day)} ${month} ${date.year} [OS]`;
+ return <>{days[day]}, {ordinal(date.day)} {month} {date.year} [OS]>;
}
const actualDate = new globalThis.Date(date.year, date.month - 1, date.day);
const day = actualDate.getDay();
- return `${days[day]}, ${ordinal(date.day)} ${month} ${date.year}`;
+ return <>{days[day]}, {ordinal(date.day)} {month} {date.year}>;
}
- return `${month} ${date.year}`;
+ return <>{month} {date.year}>;
}
if ('season' in date) {
- return `${date.season} ${date.year}`;
+ return <>{date.season} {date.year}>;
}
if (omitIfJustYear) {
@@ -95,46 +96,37 @@ export function renderExplicitDate(date: Date, omitIfJustYear: boolean): string
return null;
}
-export function isolate(value: string): string {
- return `${value}`;
+export function isolate(text: string): string {
+ return `\u{2068}${text}\u{2069}`;
}
-export function purify(str: string): string {
- return str.replaceAll('&', '&')
- .replaceAll('<', '<')
- .replaceAll('>', '>')
- .replaceAll('\'', ''')
- .replaceAll('"', '"');
+export function Isolated({children}: {children: React.JSX.Element}): React.JSX.Element {
+ return <>{"\u{2068}"}{children}{"\u{2069}"}>;
}
-export function renderArticle(article: Article) {
+export function renderArticle(article: Article): React.JSX.Element | null {
if (!IS_PRODUCTION || !article.draft) {
- return `
${article.title}`
- + ifSet(article.draft, ' Draft')
- + (article.children ? renderArticleList(article.children) : '')
- + ``;
+ return ({article.title}
+ { article.draft && <> Draft> }
+ { article.children && renderArticleList(article.children) }
+ );
}
// render draft article names if they have children
if (article.children?.length) {
- return `${article.title}`
- + (article.children ? renderArticleList(article.children) : '')
- + ``;
+ return ({article.title}
+ { article.children && renderArticleList(article.children) }
+ );
}
- return '';
+ return null;
}
-export function renderArticleList(articles: readonly Article[]) {
+export function renderArticleList(articles: readonly Article[]): React.JSX.Element | null {
if (articles.length === 0) {
- return '';
- }
-
- let result = '';
- for (const article of articles) {
- result += renderArticle(article);
+ return null;
}
- result += "
";
- return result;
+ const RenderArticle = ({article}: {article: Article}) => renderArticle(article);
+ return {articles.map((a, ix) => )}
;
}
diff --git a/package-lock.json b/package-lock.json
index c40968b5..716ceb44 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,26 +8,23 @@
"name": "ways-to-play",
"version": "1.0.0",
"license": "ISC",
- "dependencies": {
- "esbuild-register": "^3.4.2",
- "sharp": "^0.33.2",
- "typescript": "^5.3.3"
- },
"devDependencies": {
- "@11ty/eleventy": "^2.0.0",
- "@11ty/eleventy-img": "^4.0.2",
- "@11ty/eleventy-navigation": "^0.3.2",
+ "@11ty/eleventy": "^3.0.0",
+ "@11ty/eleventy-img": "^5.0.0",
+ "@11ty/eleventy-navigation": "^0.3.5",
"@fec/eleventy-plugin-remark": "^4.0.0",
"@fullhuman/postcss-purgecss": "^6.0.0",
"@jest/globals": "^29.5.0",
"@microflash/rehype-toc": "^1.0.2",
"@types/11ty__eleventy-img": "^4.0.0",
"@types/js-yaml": "^4.0.9",
+ "@types/jsdom": "^21.1.7",
"@types/node": "^22.9.1",
"@types/prop-types": "^15.7.13",
+ "@types/react": "^18.3.12",
+ "@types/react-dom": "^18.3.1",
"@types/slug": "^5.0.9",
"ajv": "^8.12.0",
- "bootstrap": "^5.3.0",
"cross-env": "^7.0.3",
"cssnano": "^7.0.2",
"hast-util-has-property": "^3.0.0",
@@ -43,73 +40,91 @@
"postcss": "^8.4.33",
"postcss-cli": "^11.0.0",
"prop-types": "^15.8.1",
+ "react-dom": "^18.3.1",
"rehype-autolink-headings": "^7.0.0",
"rehype-format": "^5.0.0",
"rehype-raw": "^7.0.0",
"remark-sectionize": "^2.0.0",
"sass": "^1.69.7",
"serve": "^14.0.1",
+ "sharp": "^0.33.2",
"slug": "^9.0.0",
"ts-jest": "^29.1.0",
+ "tsx": "^4.19.2",
"ucd-full": "^15.0.0"
}
},
"node_modules/@11ty/dependency-tree": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-2.0.1.tgz",
- "integrity": "sha512-5R+DsT9LJ9tXiSQ4y+KLFppCkQyXhzAm1AIuBWE/sbU0hSXY5pkhoqQYEcPJQFg/nglL+wD55iv2j+7O96UAvg==",
- "dev": true
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-3.0.1.tgz",
+ "integrity": "sha512-aZizxcL4Z/clm3KPRx8i9ohW9R2gLssXfUSy7qQmQRXb4CUOyvmqk2gKeJqRmXIfMi2bB9w03SgtN5v1YwqpiA==",
+ "dev": true,
+ "dependencies": {
+ "@11ty/eleventy-utils": "^1.0.2"
+ }
+ },
+ "node_modules/@11ty/dependency-tree-esm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@11ty/dependency-tree-esm/-/dependency-tree-esm-1.0.0.tgz",
+ "integrity": "sha512-Z3KN1Fkv50UM/ZzTR3VBbyOY52HnmhIVCsAV1hn2UzFsGAjyF1Cw8uohhVtheDOSuBR7ZSeo1unwkz1HxFlUtQ==",
+ "dev": true,
+ "dependencies": {
+ "@11ty/eleventy-utils": "^1.0.2",
+ "acorn": "^8.10.0",
+ "dependency-graph": "^0.11.0",
+ "normalize-path": "^3.0.0"
+ }
},
"node_modules/@11ty/eleventy": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-2.0.1.tgz",
- "integrity": "sha512-t8XVUbCJByhVEa1RzO0zS2QzbL3wPY8ot1yUw9noqiSHxJWUwv6jiwm1/MZDPTYtkZH2ZHvdQIRQ5/SjG9XmLw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.0.0.tgz",
+ "integrity": "sha512-0P0ZsJXVW2QiNdhd7z+GYy6n+ivh0enx1DRdua5ta6NlzY2AhbkeWBY6U+FKA8lPS3H4+XsTpfLLfIScpPZLaQ==",
"dev": true,
"dependencies": {
- "@11ty/dependency-tree": "^2.0.1",
- "@11ty/eleventy-dev-server": "^1.0.4",
- "@11ty/eleventy-utils": "^1.0.1",
+ "@11ty/dependency-tree": "^3.0.1",
+ "@11ty/dependency-tree-esm": "^1.0.0",
+ "@11ty/eleventy-dev-server": "^2.0.4",
+ "@11ty/eleventy-plugin-bundle": "^3.0.0",
+ "@11ty/eleventy-utils": "^1.0.3",
"@11ty/lodash-custom": "^4.17.21",
- "@iarna/toml": "^2.2.5",
- "@sindresorhus/slugify": "^1.1.2",
- "bcp-47-normalize": "^1.1.1",
- "chokidar": "^3.5.3",
+ "@11ty/posthtml-urls": "^1.0.0",
+ "@11ty/recursive-copy": "^3.0.0",
+ "@sindresorhus/slugify": "^2.2.1",
+ "bcp-47-normalize": "^2.3.0",
+ "chardet": "^2.0.0",
+ "chokidar": "^3.6.0",
"cross-spawn": "^7.0.3",
- "debug": "^4.3.4",
- "dependency-graph": "^0.11.0",
- "ejs": "^3.1.9",
- "fast-glob": "^3.2.12",
+ "debug": "^4.3.7",
+ "dependency-graph": "^1.0.0",
+ "entities": "^5.0.0",
+ "fast-glob": "^3.3.2",
+ "filesize": "^10.1.6",
"graceful-fs": "^4.2.11",
"gray-matter": "^4.0.3",
- "hamljs": "^0.6.2",
- "handlebars": "^4.7.7",
"is-glob": "^4.0.3",
- "iso-639-1": "^2.1.15",
+ "iso-639-1": "^3.1.3",
+ "js-yaml": "^4.1.0",
"kleur": "^4.1.5",
- "liquidjs": "^10.7.0",
- "luxon": "^3.3.0",
- "markdown-it": "^13.0.1",
- "micromatch": "^4.0.5",
+ "liquidjs": "^10.17.0",
+ "luxon": "^3.5.0",
+ "markdown-it": "^14.1.0",
+ "micromatch": "^4.0.8",
"minimist": "^1.2.8",
"moo": "^0.5.2",
- "multimatch": "^5.0.0",
- "mustache": "^4.2.0",
+ "node-retrieve-globals": "^6.0.0",
"normalize-path": "^3.0.0",
- "nunjucks": "^3.2.3",
- "path-to-regexp": "^6.2.1",
+ "nunjucks": "^3.2.4",
"please-upgrade-node": "^3.2.0",
"posthtml": "^0.16.6",
- "posthtml-urls": "^1.0.0",
- "pug": "^3.0.2",
- "recursive-copy": "^2.0.14",
- "semver": "^7.3.8",
+ "posthtml-match-helper": "^2.0.2",
+ "semver": "^7.6.3",
"slugify": "^1.6.6"
},
"bin": {
- "eleventy": "cmd.js"
+ "eleventy": "cmd.cjs"
},
"engines": {
- "node": ">=14"
+ "node": ">=18"
},
"funding": {
"type": "opencollective",
@@ -117,28 +132,30 @@
}
},
"node_modules/@11ty/eleventy-dev-server": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-1.0.4.tgz",
- "integrity": "sha512-qVBmV2G1KF/0o5B/3fITlrrDHy4bONUI2YuN3/WJ3BNw4NU1d/we8XhKrlgq13nNvHoBx5czYp3LZt8qRG53Fg==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-2.0.4.tgz",
+ "integrity": "sha512-d0CuufX6yPtVz+RW0oJZg1pVoxo1jOrPmpXYacoiKLJm0MMC9MkPQOCXlimguHVaceHejFo5+aZB9/aGB2RR0A==",
"dev": true,
"dependencies": {
- "@11ty/eleventy-utils": "^1.0.1",
- "chokidar": "^3.5.3",
- "debug": "^4.3.4",
+ "@11ty/eleventy-utils": "^1.0.3",
+ "chokidar": "^3.6.0",
+ "debug": "^4.3.7",
"dev-ip": "^1.0.1",
- "finalhandler": "^1.2.0",
+ "finalhandler": "^1.3.0",
"mime": "^3.0.0",
"minimist": "^1.2.8",
- "morphdom": "^2.7.0",
+ "morphdom": "^2.7.4",
"please-upgrade-node": "^3.2.0",
- "ssri": "^8.0.1",
- "ws": "^8.13.0"
+ "send": "^0.19.0",
+ "ssri": "^11.0.0",
+ "urlpattern-polyfill": "^10.0.0",
+ "ws": "^8.18.0"
},
"bin": {
"eleventy-dev-server": "cmd.js"
},
"engines": {
- "node": ">=14"
+ "node": ">=18"
},
"funding": {
"type": "opencollective",
@@ -165,18 +182,19 @@
}
},
"node_modules/@11ty/eleventy-img": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@11ty/eleventy-img/-/eleventy-img-4.0.2.tgz",
- "integrity": "sha512-MSCkZRJk9rWa7nojx9HBMZJePOrm+V3XNpT091qguj61SG5UsgXbxAkoeejO3npmKIQJTyVIV/rrA6d7xZYOvw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@11ty/eleventy-img/-/eleventy-img-5.0.0.tgz",
+ "integrity": "sha512-hJ4X5ZIRSOCooL0uXegj+nZi1abWNj22BR4PzF6e9iJg9DGYGxPrC0rg0Hy+7xzP7mzTYiOpDjZVv/NgrHNx6w==",
"dev": true,
"dependencies": {
- "@11ty/eleventy-fetch": "^4.0.0",
+ "@11ty/eleventy-fetch": "^4.0.1",
+ "@11ty/eleventy-utils": "^1.0.3",
"brotli-size": "^4.0.0",
- "debug": "^4.3.4",
- "entities": "^4.5.0",
+ "debug": "^4.3.7",
+ "entities": "^5.0.0",
"image-size": "^1.1.1",
"p-queue": "^6.6.2",
- "sharp": "^0.33.2"
+ "sharp": "^0.33.5"
},
"engines": {
"node": ">=18"
@@ -186,6 +204,18 @@
"url": "https://opencollective.com/11ty"
}
},
+ "node_modules/@11ty/eleventy-img/node_modules/entities": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
+ "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/@11ty/eleventy-navigation": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@11ty/eleventy-navigation/-/eleventy-navigation-0.3.5.tgz",
@@ -199,6 +229,23 @@
"url": "https://opencollective.com/11ty"
}
},
+ "node_modules/@11ty/eleventy-plugin-bundle": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-bundle/-/eleventy-plugin-bundle-3.0.0.tgz",
+ "integrity": "sha512-JSnqehT+sWSPi6e44jTXUW+KiV9284YF9fzPQvfGB4cXlk/m/SJk17CavHCleIvKXDN+jrUw9TZkwAwr85ONWQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "posthtml-match-helper": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/11ty"
+ }
+ },
"node_modules/@11ty/eleventy-utils": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-1.0.3.tgz",
@@ -215,6 +262,27 @@
"url": "https://opencollective.com/11ty"
}
},
+ "node_modules/@11ty/eleventy/node_modules/dependency-graph": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz",
+ "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@11ty/eleventy/node_modules/entities": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
+ "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/@11ty/lodash-custom": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz",
@@ -228,6 +296,107 @@
"url": "https://opencollective.com/11ty"
}
},
+ "node_modules/@11ty/posthtml-urls": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@11ty/posthtml-urls/-/posthtml-urls-1.0.0.tgz",
+ "integrity": "sha512-CcsRdI933x613u7CjM+QGs7iD/m8SaDup3Apohg1+7dybigrEUHc2jGS3mcMgQKvF2+IphqmepD/FrKLlPkPEg==",
+ "dev": true,
+ "dependencies": {
+ "evaluate-value": "^2.0.0",
+ "http-equiv-refresh": "^2.0.1",
+ "list-to-array": "^1.1.0",
+ "object.entries": "^1.1.7",
+ "parse-srcset": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@11ty/recursive-copy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@11ty/recursive-copy/-/recursive-copy-3.0.0.tgz",
+ "integrity": "sha512-v1Mr7dWx5nk69/HRRtDHUYDV9N8+cE12IGiKSFOwML7HjOzUXwTP88e3cGuhqoVstkBil1ZEIaOB0KPP1zwqXA==",
+ "dev": true,
+ "dependencies": {
+ "errno": "^0.1.2",
+ "graceful-fs": "^4.2.11",
+ "junk": "^1.0.1",
+ "maximatch": "^0.1.0",
+ "mkdirp": "^3.0.1",
+ "pify": "^2.3.0",
+ "promise": "^7.0.1",
+ "rimraf": "^5.0.7",
+ "slash": "^1.0.0"
+ }
+ },
+ "node_modules/@11ty/recursive-copy/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@11ty/recursive-copy/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@11ty/recursive-copy/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@11ty/recursive-copy/node_modules/rimraf": {
+ "version": "5.0.10",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
+ "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^10.3.7"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@11ty/recursive-copy/node_modules/slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
@@ -816,380 +985,397 @@
"dev": true
},
"node_modules/@emnapi/runtime": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
- "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz",
+ "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==",
+ "dev": true,
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
- "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz",
+ "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==",
"cpu": [
"ppc64"
],
+ "dev": true,
"optional": true,
"os": [
"aix"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
- "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz",
+ "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==",
"cpu": [
"arm"
],
+ "dev": true,
"optional": true,
"os": [
"android"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
- "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz",
+ "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"android"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
- "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz",
+ "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"android"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
- "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
+ "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
- "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz",
+ "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
- "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz",
+ "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"freebsd"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
- "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz",
+ "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"freebsd"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
- "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz",
+ "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==",
"cpu": [
"arm"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
- "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
+ "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
- "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz",
+ "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==",
"cpu": [
"ia32"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
- "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz",
+ "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==",
"cpu": [
"loong64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
- "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz",
+ "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==",
"cpu": [
"mips64el"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
- "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz",
+ "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==",
"cpu": [
"ppc64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
- "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz",
+ "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==",
"cpu": [
"riscv64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
- "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz",
+ "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==",
"cpu": [
"s390x"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
- "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
+ "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
- "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz",
+ "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"netbsd"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz",
+ "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
- "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz",
+ "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"openbsd"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
- "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz",
+ "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"sunos"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
- "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz",
+ "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
- "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz",
+ "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==",
"cpu": [
"ia32"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
- "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
+ "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
],
- "peer": true,
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@fec/eleventy-plugin-remark": {
@@ -1218,438 +1404,362 @@
"postcss": "^8.0.0"
}
},
- "node_modules/@iarna/toml": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
- "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==",
- "dev": true
- },
"node_modules/@img/sharp-darwin-arm64": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz",
- "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
+ "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
- "glibc": ">=2.26",
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.0.2"
+ "@img/sharp-libvips-darwin-arm64": "1.0.4"
}
},
"node_modules/@img/sharp-darwin-x64": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz",
- "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
+ "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
- "glibc": ">=2.26",
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.0.2"
+ "@img/sharp-libvips-darwin-x64": "1.0.4"
}
},
"node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz",
- "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
+ "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
],
- "engines": {
- "macos": ">=11",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
- },
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz",
- "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
+ "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"darwin"
],
- "engines": {
- "macos": ">=10.13",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
- },
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz",
- "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
+ "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
"cpu": [
"arm"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "engines": {
- "glibc": ">=2.28",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
- },
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz",
- "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
+ "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "engines": {
- "glibc": ">=2.26",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
- },
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz",
- "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
"cpu": [
"s390x"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "engines": {
- "glibc": ">=2.28",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
- },
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz",
- "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "engines": {
- "glibc": ">=2.26",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
- },
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz",
- "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
+ "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "engines": {
- "musl": ">=1.2.2",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
- },
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz",
- "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
+ "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
- "engines": {
- "musl": ">=1.2.2",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
- },
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-linux-arm": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz",
- "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
+ "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
"cpu": [
"arm"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
- "glibc": ">=2.28",
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.0.2"
+ "@img/sharp-libvips-linux-arm": "1.0.5"
}
},
"node_modules/@img/sharp-linux-arm64": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz",
- "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
+ "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
- "glibc": ">=2.26",
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.0.2"
+ "@img/sharp-libvips-linux-arm64": "1.0.4"
}
},
"node_modules/@img/sharp-linux-s390x": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz",
- "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
+ "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
"cpu": [
"s390x"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
- "glibc": ">=2.31",
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.0.2"
+ "@img/sharp-libvips-linux-s390x": "1.0.4"
}
},
"node_modules/@img/sharp-linux-x64": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz",
- "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
+ "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
- "glibc": ">=2.26",
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.0.2"
+ "@img/sharp-libvips-linux-x64": "1.0.4"
}
},
"node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz",
- "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
+ "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
- "musl": ">=1.2.2",
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.0.2"
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
}
},
"node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz",
- "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
+ "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
- "musl": ">=1.2.2",
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.0.2"
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
}
},
"node_modules/@img/sharp-wasm32": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz",
- "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
+ "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
"cpu": [
"wasm32"
],
+ "dev": true,
"optional": true,
"dependencies": {
- "@emnapi/runtime": "^1.1.1"
+ "@emnapi/runtime": "^1.2.0"
},
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-ia32": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz",
- "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
+ "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
"cpu": [
"ia32"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-x64": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz",
- "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
+ "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0",
- "yarn": ">=3.2.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
@@ -2254,17 +2364,6 @@
"node": ">=14"
}
},
- "node_modules/@popperjs/core": {
- "version": "2.11.8",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
- "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
- "dev": true,
- "peer": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/popperjs"
- }
- },
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -2284,46 +2383,36 @@
}
},
"node_modules/@sindresorhus/slugify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz",
- "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz",
+ "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==",
"dev": true,
"dependencies": {
- "@sindresorhus/transliterate": "^0.1.1",
- "escape-string-regexp": "^4.0.0"
+ "@sindresorhus/transliterate": "^1.0.0",
+ "escape-string-regexp": "^5.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@sindresorhus/transliterate": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz",
- "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz",
+ "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==",
"dev": true,
"dependencies": {
- "escape-string-regexp": "^2.0.0",
- "lodash.deburr": "^4.1.0"
+ "escape-string-regexp": "^5.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@sinonjs/commons": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
@@ -2459,6 +2548,17 @@
"integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==",
"dev": true
},
+ "node_modules/@types/jsdom": {
+ "version": "21.1.7",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz",
+ "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/tough-cookie": "*",
+ "parse5": "^7.0.0"
+ }
+ },
"node_modules/@types/mdast": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
@@ -2468,12 +2568,6 @@
"@types/unist": "*"
}
},
- "node_modules/@types/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
- "dev": true
- },
"node_modules/@types/ms": {
"version": "0.7.34",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
@@ -2495,6 +2589,25 @@
"integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==",
"dev": true
},
+ "node_modules/@types/react": {
+ "version": "18.3.12",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz",
+ "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==",
+ "dev": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
"node_modules/@types/sharp": {
"version": "0.31.1",
"resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.31.1.tgz",
@@ -2516,6 +2629,12 @@
"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true
},
+ "node_modules/@types/tough-cookie": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
+ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
+ "dev": true
+ },
"node_modules/@types/unist": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
@@ -2569,9 +2688,9 @@
}
},
"node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -2580,6 +2699,18 @@
"node": ">=0.4.0"
}
},
+ "node_modules/acorn-walk": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
+ "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/agent-base": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
@@ -2676,12 +2807,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/any-promise": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz",
- "integrity": "sha512-lqzY9o+BbeGHRCOyxQkt/Tgvz0IZhTmQiA+LxQW8wSNpcTbj8K+0cZiSEvbpNZZP9/11Gy7dnLO3GNWUXO4d1g==",
- "dev": true
- },
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -2744,21 +2869,24 @@
}
},
"node_modules/array-differ": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
- "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
"dev": true,
+ "dependencies": {
+ "array-uniq": "^1.0.1"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/array-uniq": {
@@ -2793,12 +2921,12 @@
}
},
"node_modules/arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/asap": {
@@ -2807,18 +2935,6 @@
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
"dev": true
},
- "node_modules/assert-never": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
- "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==",
- "dev": true
- },
- "node_modules/async": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
- "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
- "dev": true
- },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -2956,18 +3072,6 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/babel-walk": {
- "version": "3.0.0-canary-5",
- "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
- "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.9.6"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/bail": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
@@ -2985,14 +3089,14 @@
"dev": true
},
"node_modules/bcp-47": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-1.0.8.tgz",
- "integrity": "sha512-Y9y1QNBBtYtv7hcmoX0tR+tUNSFZGZ6OL6vKPObq8BbOhkCoyayF6ogfLTgAli/KuAEbsYHYUNq2AQuY6IuLag==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz",
+ "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==",
"dev": true,
"dependencies": {
- "is-alphabetical": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-decimal": "^1.0.0"
+ "is-alphabetical": "^2.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0"
},
"funding": {
"type": "github",
@@ -3000,9 +3104,9 @@
}
},
"node_modules/bcp-47-match": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-1.0.3.tgz",
- "integrity": "sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz",
+ "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==",
"dev": true,
"funding": {
"type": "github",
@@ -3010,13 +3114,13 @@
}
},
"node_modules/bcp-47-normalize": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-1.1.1.tgz",
- "integrity": "sha512-jWZ1Jdu3cs0EZdfCkS0UE9Gg01PtxnChjEBySeB+Zo6nkqtFfnvtoQQgP1qU1Oo4qgJgxhTI6Sf9y/pZIhPs0A==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz",
+ "integrity": "sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q==",
"dev": true,
"dependencies": {
- "bcp-47": "^1.0.0",
- "bcp-47-match": "^1.0.0"
+ "bcp-47": "^2.0.0",
+ "bcp-47-match": "^2.0.0"
},
"funding": {
"type": "github",
@@ -3041,25 +3145,6 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true
},
- "node_modules/bootstrap": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz",
- "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/twbs"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/bootstrap"
- }
- ],
- "peerDependencies": {
- "@popperjs/core": "^2.11.8"
- }
- },
"node_modules/boxen": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz",
@@ -3270,9 +3355,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001632",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001632.tgz",
- "integrity": "sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==",
+ "version": "1.0.30001683",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz",
+ "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==",
"dev": true,
"funding": [
{
@@ -3369,14 +3454,11 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/character-parser": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
- "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==",
- "dev": true,
- "dependencies": {
- "is-regex": "^1.0.3"
- }
+ "node_modules/chardet": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.0.0.tgz",
+ "integrity": "sha512-xVgPpulCooDjY6zH4m9YW3jbkaBe3FKIAvF5sj5t7aBNsVl2ljIE+xwJ4iNgiDZHFQvNIpjdKdVOQvvk5ZfxbQ==",
+ "dev": true
},
"node_modules/chokidar": {
"version": "3.6.0",
@@ -3523,6 +3605,7 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "dev": true,
"dependencies": {
"color-convert": "^2.0.1",
"color-string": "^1.9.0"
@@ -3535,6 +3618,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -3545,12 +3629,14 @@
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
"node_modules/color-string": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dev": true,
"dependencies": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
@@ -3644,16 +3730,6 @@
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
- "node_modules/constantinople": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
- "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
- "dev": true,
- "dependencies": {
- "@babel/parser": "^7.6.0",
- "@babel/types": "^7.6.1"
- }
- },
"node_modules/content-disposition": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
@@ -3957,6 +4033,12 @@
"integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
"dev": true
},
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true
+ },
"node_modules/data-urls": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
@@ -4022,11 +4104,12 @@
}
},
"node_modules/debug": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
- "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "dev": true,
"dependencies": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@@ -4131,6 +4214,15 @@
"node": ">=0.4.0"
}
},
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/dependency-graph": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
@@ -4149,10 +4241,21 @@
"node": ">=6"
}
},
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
"node_modules/detect-libc": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -4200,12 +4303,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/doctypes": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
- "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==",
- "dev": true
- },
"node_modules/dom-serializer": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
@@ -4288,21 +4385,6 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
"dev": true
},
- "node_modules/ejs": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
- "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
- "dev": true,
- "dependencies": {
- "jake": "^10.8.5"
- },
- "bin": {
- "ejs": "bin/cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/electron-to-chromium": {
"version": "1.4.797",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.797.tgz",
@@ -4328,9 +4410,9 @@
"dev": true
},
"node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"dev": true,
"engines": {
"node": ">= 0.8"
@@ -4494,52 +4576,42 @@
}
},
"node_modules/esbuild": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
- "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
+ "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
+ "dev": true,
"hasInstallScript": true,
- "peer": true,
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.21.5",
- "@esbuild/android-arm": "0.21.5",
- "@esbuild/android-arm64": "0.21.5",
- "@esbuild/android-x64": "0.21.5",
- "@esbuild/darwin-arm64": "0.21.5",
- "@esbuild/darwin-x64": "0.21.5",
- "@esbuild/freebsd-arm64": "0.21.5",
- "@esbuild/freebsd-x64": "0.21.5",
- "@esbuild/linux-arm": "0.21.5",
- "@esbuild/linux-arm64": "0.21.5",
- "@esbuild/linux-ia32": "0.21.5",
- "@esbuild/linux-loong64": "0.21.5",
- "@esbuild/linux-mips64el": "0.21.5",
- "@esbuild/linux-ppc64": "0.21.5",
- "@esbuild/linux-riscv64": "0.21.5",
- "@esbuild/linux-s390x": "0.21.5",
- "@esbuild/linux-x64": "0.21.5",
- "@esbuild/netbsd-x64": "0.21.5",
- "@esbuild/openbsd-x64": "0.21.5",
- "@esbuild/sunos-x64": "0.21.5",
- "@esbuild/win32-arm64": "0.21.5",
- "@esbuild/win32-ia32": "0.21.5",
- "@esbuild/win32-x64": "0.21.5"
- }
- },
- "node_modules/esbuild-register": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz",
- "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==",
- "dependencies": {
- "debug": "^4.3.4"
- },
- "peerDependencies": {
- "esbuild": ">=0.12 <1"
+ "@esbuild/aix-ppc64": "0.23.1",
+ "@esbuild/android-arm": "0.23.1",
+ "@esbuild/android-arm64": "0.23.1",
+ "@esbuild/android-x64": "0.23.1",
+ "@esbuild/darwin-arm64": "0.23.1",
+ "@esbuild/darwin-x64": "0.23.1",
+ "@esbuild/freebsd-arm64": "0.23.1",
+ "@esbuild/freebsd-x64": "0.23.1",
+ "@esbuild/linux-arm": "0.23.1",
+ "@esbuild/linux-arm64": "0.23.1",
+ "@esbuild/linux-ia32": "0.23.1",
+ "@esbuild/linux-loong64": "0.23.1",
+ "@esbuild/linux-mips64el": "0.23.1",
+ "@esbuild/linux-ppc64": "0.23.1",
+ "@esbuild/linux-riscv64": "0.23.1",
+ "@esbuild/linux-s390x": "0.23.1",
+ "@esbuild/linux-x64": "0.23.1",
+ "@esbuild/netbsd-x64": "0.23.1",
+ "@esbuild/openbsd-arm64": "0.23.1",
+ "@esbuild/openbsd-x64": "0.23.1",
+ "@esbuild/sunos-x64": "0.23.1",
+ "@esbuild/win32-arm64": "0.23.1",
+ "@esbuild/win32-ia32": "0.23.1",
+ "@esbuild/win32-x64": "0.23.1"
}
},
"node_modules/escalade": {
@@ -4558,17 +4630,26 @@
"dev": true
},
"node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/esm-import-transformer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/esm-import-transformer/-/esm-import-transformer-3.0.2.tgz",
+ "integrity": "sha512-PgvO0wro44lTDM9pYeeOIfpS0lGF80jA+rjT7sBd3b07rxv1AxeNMEI5kSCqRKke2W6SPEz17W3kHOLjaiD7Cw==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.11.2"
+ }
+ },
"node_modules/esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -4582,6 +4663,24 @@
"node": ">=4"
}
},
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/evaluate-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/evaluate-value/-/evaluate-value-2.0.0.tgz",
+ "integrity": "sha512-VonfiuDJc0z4sOO7W0Pd130VLsXN6vmBWZlrog1mCb/o7o/Nl5Lr25+Kj/nkCCAhG+zqeeGjxhkK9oHpkgTHhQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -4700,34 +4799,13 @@
"bser": "2.1.1"
}
},
- "node_modules/filelist": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
- "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
- "dev": true,
- "dependencies": {
- "minimatch": "^5.0.1"
- }
- },
- "node_modules/filelist/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/filelist/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "node_modules/filesize": {
+ "version": "10.1.6",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz",
+ "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==",
"dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
"engines": {
- "node": ">=10"
+ "node": ">= 10.4.0"
}
},
"node_modules/fill-range": {
@@ -4743,13 +4821,13 @@
}
},
"node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
@@ -4859,6 +4937,15 @@
"node": ">= 6"
}
},
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
@@ -5016,6 +5103,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-tsconfig": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz",
+ "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -5161,33 +5260,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/hamljs": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/hamljs/-/hamljs-0.6.2.tgz",
- "integrity": "sha512-/chXRp4WpL47I+HX1vCCdSbEXAljEG2FBMmgO7Am0bYsqgnEjreeWzUdX1onXqwZtcfgxbCg5WtEYYvuZ5muBg==",
- "dev": true
- },
- "node_modules/handlebars": {
- "version": "4.7.8",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
- "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5",
- "neo-async": "^2.6.2",
- "source-map": "^0.6.1",
- "wordwrap": "^1.0.0"
- },
- "bin": {
- "handlebars": "bin/handlebars"
- },
- "engines": {
- "node": ">=0.4.7"
- },
- "optionalDependencies": {
- "uglify-js": "^3.1.4"
- }
- },
"node_modules/has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -5313,18 +5385,6 @@
"integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==",
"dev": true
},
- "node_modules/hast-util-find-and-replace/node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/hast-util-find-and-replace/node_modules/hast-util-is-element": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz",
@@ -5655,12 +5715,28 @@
}
},
"node_modules/http-equiv-refresh": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz",
- "integrity": "sha512-TScO04soylRN9i/QdOdgZyhydXg9z6XdaGzEyOgDKycePeDeTT4KvigjBcI+tgfTlieLWauGORMq5F1eIDa+1w==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-2.0.1.tgz",
+ "integrity": "sha512-XJpDL/MLkV3dKwLzHwr2dY05dYNfBNlyPu4STQ8WvKCFdc6vC5tPXuq28of663+gHVg03C+16pHHs/+FmmDjcw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dev": true,
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
"engines": {
- "node": ">= 0.10"
+ "node": ">= 0.8"
}
},
"node_modules/http-proxy-agent": {
@@ -5806,9 +5882,9 @@
}
},
"node_modules/is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
"dev": true,
"funding": {
"type": "github",
@@ -5816,13 +5892,13 @@
}
},
"node_modules/is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
"dev": true,
"dependencies": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
},
"funding": {
"type": "github",
@@ -5946,9 +6022,9 @@
}
},
"node_modules/is-decimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
"dev": true,
"funding": {
"type": "github",
@@ -5970,16 +6046,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-expression": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
- "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.1.1",
- "object-assign": "^4.1.1"
- }
- },
"node_modules/is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
@@ -6100,12 +6166,6 @@
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
"dev": true
},
- "node_modules/is-promise": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
- "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",
- "dev": true
- },
"node_modules/is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -6245,9 +6305,9 @@
"dev": true
},
"node_modules/iso-639-1": {
- "version": "2.1.15",
- "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.15.tgz",
- "integrity": "sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.3.tgz",
+ "integrity": "sha512-1jz0Wh9hyLMRwqEPchb/KZCiTqfFWtc9R3nm7GHPygBAKS8wdKJ3FH4lvLsri6UtAE5Kz5SnowtXZa//6bqMyw==",
"dev": true,
"engines": {
"node": ">=6.0"
@@ -6337,24 +6397,6 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/jake": {
- "version": "10.9.1",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz",
- "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==",
- "dev": true,
- "dependencies": {
- "async": "^3.2.3",
- "chalk": "^4.0.2",
- "filelist": "^1.0.4",
- "minimatch": "^3.1.2"
- },
- "bin": {
- "jake": "bin/cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/jest": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
@@ -6910,12 +6952,6 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/js-stringify": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
- "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==",
- "dev": true
- },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -7034,16 +7070,6 @@
"graceful-fs": "^4.1.6"
}
},
- "node_modules/jstransformer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
- "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==",
- "dev": true,
- "dependencies": {
- "is-promise": "^2.0.0",
- "promise": "^7.0.1"
- }
- },
"node_modules/junk": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz",
@@ -7108,12 +7134,12 @@
"dev": true
},
"node_modules/linkify-it": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz",
- "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
"dev": true,
"dependencies": {
- "uc.micro": "^1.0.1"
+ "uc.micro": "^2.0.0"
}
},
"node_modules/liquid-args": {
@@ -7123,9 +7149,9 @@
"dev": true
},
"node_modules/liquidjs": {
- "version": "10.13.1",
- "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.13.1.tgz",
- "integrity": "sha512-QCQ69sbyMdA1970NEsG7KdQoKi6N+lGg55izisvKvrrRO1nrpS/YBAnzDndR13exYB4xE9A87qdOMuaXPn9v9A==",
+ "version": "10.19.0",
+ "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.19.0.tgz",
+ "integrity": "sha512-dNINmbNJ/bp3B8n25BtZQV/GbrmFf0o2InGdMdfQXa+LxfzTFXOkUnBsOLZUb82sLzxaiWv5Jc381Kn4zHjTsQ==",
"dev": true,
"dependencies": {
"commander": "^10.0.0"
@@ -7206,12 +7232,6 @@
"node": ">=8"
}
},
- "node_modules/lodash.deburr": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz",
- "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==",
- "dev": true
- },
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -7256,9 +7276,9 @@
}
},
"node_modules/luxon": {
- "version": "3.4.4",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
- "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==",
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
+ "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
"dev": true,
"engines": {
"node": ">=12"
@@ -7295,31 +7315,20 @@
}
},
"node_modules/markdown-it": {
- "version": "13.0.2",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz",
- "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==",
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
+ "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
"dev": true,
"dependencies": {
"argparse": "^2.0.1",
- "entities": "~3.0.1",
- "linkify-it": "^4.0.1",
- "mdurl": "^1.0.1",
- "uc.micro": "^1.0.5"
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.1.0"
},
"bin": {
- "markdown-it": "bin/markdown-it.js"
- }
- },
- "node_modules/markdown-it/node_modules/entities": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
- "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
+ "markdown-it": "bin/markdown-it.mjs"
}
},
"node_modules/maximatch": {
@@ -7337,36 +7346,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/maximatch/node_modules/array-differ": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
- "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/maximatch/node_modules/array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
- "dev": true,
- "dependencies": {
- "array-uniq": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/maximatch/node_modules/arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/mdast-util-from-markdown": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz",
@@ -7466,9 +7445,9 @@
"dev": true
},
"node_modules/mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
"dev": true
},
"node_modules/memorystream": {
@@ -8014,33 +7993,27 @@
}
},
"node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
"engines": {
- "node": ">=8"
+ "node": ">=16 || 14 >=14.17"
}
},
- "node_modules/minipass/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+ "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
"dev": true,
- "dependencies": {
- "minimist": "^1.2.6"
- },
"bin": {
- "mkdirp": "bin/cmd.js"
+ "mkdirp": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/moo": {
@@ -8050,43 +8023,16 @@
"dev": true
},
"node_modules/morphdom": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.2.tgz",
- "integrity": "sha512-Dqb/lHFyTi7SZpY0a5R4I/0Edo+iPMbaUexsHHsLAByyixCDiLHPHyVoKVmrpL0THcT7V9Cgev9y21TQYq6wQg==",
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.4.tgz",
+ "integrity": "sha512-ATTbWMgGa+FaMU3FhnFYB6WgulCqwf6opOll4CBzmVDTLvPMmUPrEv8CudmLPK0MESa64+6B89fWOxP3+YIlxQ==",
"dev": true
},
"node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/multimatch": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
- "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
- "dev": true,
- "dependencies": {
- "@types/minimatch": "^3.0.3",
- "array-differ": "^3.0.0",
- "array-union": "^2.1.0",
- "arrify": "^2.0.1",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mustache": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
- "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
- "dev": true,
- "bin": {
- "mustache": "bin/mustache"
- }
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
},
"node_modules/nanoid": {
"version": "3.3.7",
@@ -8121,12 +8067,6 @@
"node": ">= 0.6"
}
},
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
"node_modules/nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -8187,6 +8127,17 @@
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
"dev": true
},
+ "node_modules/node-retrieve-globals": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/node-retrieve-globals/-/node-retrieve-globals-6.0.0.tgz",
+ "integrity": "sha512-VoEp6WMN/JcbBrJr6LnFE11kdzpKiBKNPFrHCEK2GgFWtiYpeL85WgcZpZFFnWxAU0O65+b+ipQAy4Oxy/+Pdg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.1.3",
+ "acorn-walk": "^8.3.2",
+ "esm-import-transformer": "^3.0.2"
+ }
+ },
"node_modules/normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -8477,16 +8428,30 @@
"integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.5",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
"define-properties": "^1.2.1",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/on-finished": {
@@ -8628,6 +8593,12 @@
"node": ">=6"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true
+ },
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -8737,21 +8708,6 @@
"node": "14 || >=16.14"
}
},
- "node_modules/path-scurry/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
- "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
- "dev": true
- },
"node_modules/path-type": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
@@ -9415,6 +9371,18 @@
"node": ">=12.0.0"
}
},
+ "node_modules/posthtml-match-helper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/posthtml-match-helper/-/posthtml-match-helper-2.0.2.tgz",
+ "integrity": "sha512-ehnazjlSwcGa3P2LlFYmTmcnaembTSt9dLWIRRDVHDPidf6InWAr9leKeeLvUXgnU32g6BrFS64Je+c2Ld+l9g==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "posthtml": "^0.16.6"
+ }
+ },
"node_modules/posthtml-parser": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz",
@@ -9439,21 +9407,6 @@
"node": ">=12"
}
},
- "node_modules/posthtml-urls": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/posthtml-urls/-/posthtml-urls-1.0.0.tgz",
- "integrity": "sha512-CMJ0L009sGQVUuYM/g6WJdscsq6ooAwhUuF6CDlYPMLxKp2rmCYVebEU+wZGxnQstGJhZPMvXsRhtqekILd5/w==",
- "dev": true,
- "dependencies": {
- "http-equiv-refresh": "^1.0.0",
- "list-to-array": "^1.1.0",
- "parse-srcset": "^1.0.2",
- "promise-each": "^2.2.0"
- },
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/pretty-format": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
@@ -9498,15 +9451,6 @@
"asap": "~2.0.3"
}
},
- "node_modules/promise-each": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/promise-each/-/promise-each-2.2.0.tgz",
- "integrity": "sha512-67roqt1k3QDA41DZ8xi0V+rF3GoaMiX7QilbXu0vXimut+9RcKBNZ/t60xCRgcsihmNUsEjh48xLfNqOrKblUg==",
- "dev": true,
- "dependencies": {
- "any-promise": "^0.1.0"
- }
- },
"node_modules/prompts": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -9568,130 +9512,15 @@
"integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
"dev": true
},
- "node_modules/pug": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz",
- "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==",
- "dev": true,
- "dependencies": {
- "pug-code-gen": "^3.0.3",
- "pug-filters": "^4.0.0",
- "pug-lexer": "^5.0.1",
- "pug-linker": "^4.0.0",
- "pug-load": "^3.0.0",
- "pug-parser": "^6.0.0",
- "pug-runtime": "^3.0.1",
- "pug-strip-comments": "^2.0.0"
- }
- },
- "node_modules/pug-attrs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
- "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
- "dev": true,
- "dependencies": {
- "constantinople": "^4.0.1",
- "js-stringify": "^1.0.2",
- "pug-runtime": "^3.0.0"
- }
- },
- "node_modules/pug-code-gen": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz",
- "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==",
- "dev": true,
- "dependencies": {
- "constantinople": "^4.0.1",
- "doctypes": "^1.1.0",
- "js-stringify": "^1.0.2",
- "pug-attrs": "^3.0.0",
- "pug-error": "^2.1.0",
- "pug-runtime": "^3.0.1",
- "void-elements": "^3.1.0",
- "with": "^7.0.0"
- }
- },
- "node_modules/pug-error": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz",
- "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==",
- "dev": true
- },
- "node_modules/pug-filters": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
- "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
- "dev": true,
- "dependencies": {
- "constantinople": "^4.0.1",
- "jstransformer": "1.0.0",
- "pug-error": "^2.0.0",
- "pug-walk": "^2.0.0",
- "resolve": "^1.15.1"
- }
- },
- "node_modules/pug-lexer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
- "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
- "dev": true,
- "dependencies": {
- "character-parser": "^2.2.0",
- "is-expression": "^4.0.0",
- "pug-error": "^2.0.0"
- }
- },
- "node_modules/pug-linker": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
- "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
- "dev": true,
- "dependencies": {
- "pug-error": "^2.0.0",
- "pug-walk": "^2.0.0"
- }
- },
- "node_modules/pug-load": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
- "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
- "dev": true,
- "dependencies": {
- "object-assign": "^4.1.1",
- "pug-walk": "^2.0.0"
- }
- },
- "node_modules/pug-parser": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
- "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
- "dev": true,
- "dependencies": {
- "pug-error": "^2.0.0",
- "token-stream": "1.0.0"
- }
- },
- "node_modules/pug-runtime": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
- "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==",
- "dev": true
- },
- "node_modules/pug-strip-comments": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
- "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
"dev": true,
- "dependencies": {
- "pug-error": "^2.0.0"
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/pug-walk": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
- "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==",
- "dev": true
- },
"node_modules/pure-rand": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
@@ -9778,15 +9607,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/purgecss/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
@@ -9855,6 +9675,32 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
"node_modules/react-is": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
@@ -9917,45 +9763,6 @@
"node": ">=8.10.0"
}
},
- "node_modules/recursive-copy": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.14.tgz",
- "integrity": "sha512-K8WNY8f8naTpfbA+RaXmkaQuD1IeW9EgNEfyGxSqqTQukpVtoOKros9jUqbpEsSw59YOmpd8nCBgtqJZy5nvog==",
- "dev": true,
- "dependencies": {
- "errno": "^0.1.2",
- "graceful-fs": "^4.1.4",
- "junk": "^1.0.1",
- "maximatch": "^0.1.0",
- "mkdirp": "^0.5.1",
- "pify": "^2.3.0",
- "promise": "^7.0.1",
- "rimraf": "^2.7.1",
- "slash": "^1.0.0"
- }
- },
- "node_modules/recursive-copy/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/recursive-copy/node_modules/slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/regexp.prototype.flags": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
@@ -10265,6 +10072,15 @@
"node": ">=8"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/resolve.exports": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
@@ -10405,6 +10221,15 @@
"node": ">=v12.22.7"
}
},
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"node_modules/section-matter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
@@ -10419,9 +10244,10 @@
}
},
"node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
"bin": {
"semver": "bin/semver.js"
},
@@ -10435,6 +10261,66 @@
"integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
"dev": true
},
+ "node_modules/send": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz",
+ "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/send/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/send/node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/send/node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/serve": {
"version": "14.2.4",
"resolved": "https://registry.npmjs.org/serve/-/serve-14.2.4.tgz",
@@ -10562,43 +10448,49 @@
"node": ">= 0.4"
}
},
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "dev": true
+ },
"node_modules/sharp": {
- "version": "0.33.4",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz",
- "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==",
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
+ "dev": true,
"hasInstallScript": true,
"dependencies": {
"color": "^4.2.3",
"detect-libc": "^2.0.3",
- "semver": "^7.6.0"
+ "semver": "^7.6.3"
},
"engines": {
- "libvips": ">=8.15.2",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.33.4",
- "@img/sharp-darwin-x64": "0.33.4",
- "@img/sharp-libvips-darwin-arm64": "1.0.2",
- "@img/sharp-libvips-darwin-x64": "1.0.2",
- "@img/sharp-libvips-linux-arm": "1.0.2",
- "@img/sharp-libvips-linux-arm64": "1.0.2",
- "@img/sharp-libvips-linux-s390x": "1.0.2",
- "@img/sharp-libvips-linux-x64": "1.0.2",
- "@img/sharp-libvips-linuxmusl-arm64": "1.0.2",
- "@img/sharp-libvips-linuxmusl-x64": "1.0.2",
- "@img/sharp-linux-arm": "0.33.4",
- "@img/sharp-linux-arm64": "0.33.4",
- "@img/sharp-linux-s390x": "0.33.4",
- "@img/sharp-linux-x64": "0.33.4",
- "@img/sharp-linuxmusl-arm64": "0.33.4",
- "@img/sharp-linuxmusl-x64": "0.33.4",
- "@img/sharp-wasm32": "0.33.4",
- "@img/sharp-win32-ia32": "0.33.4",
- "@img/sharp-win32-x64": "0.33.4"
+ "@img/sharp-darwin-arm64": "0.33.5",
+ "@img/sharp-darwin-x64": "0.33.5",
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
+ "@img/sharp-libvips-linux-arm": "1.0.5",
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
+ "@img/sharp-libvips-linux-x64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+ "@img/sharp-linux-arm": "0.33.5",
+ "@img/sharp-linux-arm64": "0.33.5",
+ "@img/sharp-linux-s390x": "0.33.5",
+ "@img/sharp-linux-x64": "0.33.5",
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
+ "@img/sharp-linuxmusl-x64": "0.33.5",
+ "@img/sharp-wasm32": "0.33.5",
+ "@img/sharp-win32-ia32": "0.33.5",
+ "@img/sharp-win32-x64": "0.33.5"
}
},
"node_modules/shebang-command": {
@@ -10659,6 +10551,7 @@
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "dev": true,
"dependencies": {
"is-arrayish": "^0.3.1"
}
@@ -10666,7 +10559,8 @@
"node_modules/simple-swizzle/node_modules/is-arrayish": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "dev": true
},
"node_modules/sisteransi": {
"version": "1.0.5",
@@ -10778,15 +10672,15 @@
"dev": true
},
"node_modules/ssri": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
- "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-11.0.0.tgz",
+ "integrity": "sha512-aZpUoMN/Jj2MqA4vMCeiKGnc/8SuSyHbGSBdgFbZxP8OJGF/lFkIuElzPxsN0q8TQQ+prw3P4EDfB3TBHHgfXw==",
"dev": true,
"dependencies": {
- "minipass": "^3.1.1"
+ "minipass": "^7.0.3"
},
"engines": {
- "node": ">= 8"
+ "node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/stack-utils": {
@@ -11169,11 +11063,14 @@
"node": ">=8.0"
}
},
- "node_modules/token-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
- "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==",
- "dev": true
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
},
"node_modules/tough-cookie": {
"version": "4.1.4",
@@ -11297,11 +11194,31 @@
}
},
"node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
"optional": true
},
+ "node_modules/tsx": {
+ "version": "4.19.2",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz",
+ "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "~0.23.0",
+ "get-tsconfig": "^4.7.5"
+ },
+ "bin": {
+ "tsx": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ }
+ },
"node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -11400,6 +11317,8 @@
"version": "5.4.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+ "dev": true,
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -11409,9 +11328,9 @@
}
},
"node_modules/uc.micro": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
- "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
"dev": true
},
"node_modules/ucd-full": {
@@ -11420,19 +11339,6 @@
"integrity": "sha512-/iqcsrx50EivxUfNxaHmYVZuxUBowUIq4HZylCHeOPE/BH+Xq+tdxNB4DicnWPccHBbWkZxHL8zvra4wfN4loQ==",
"dev": true
},
- "node_modules/uglify-js": {
- "version": "3.18.0",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz",
- "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==",
- "dev": true,
- "optional": true,
- "bin": {
- "uglifyjs": "bin/uglifyjs"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -11672,6 +11578,12 @@
"requires-port": "^1.0.0"
}
},
+ "node_modules/urlpattern-polyfill": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz",
+ "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==",
+ "dev": true
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -11754,15 +11666,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/void-elements": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
- "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/w3c-xmlserializer": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
@@ -11902,27 +11805,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/with": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
- "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
- "dev": true,
- "dependencies": {
- "@babel/parser": "^7.9.6",
- "@babel/types": "^7.9.6",
- "assert-never": "^1.2.1",
- "babel-walk": "3.0.0-canary-5"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
- "dev": true
- },
"node_modules/wrap-ansi": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
@@ -12037,9 +11919,9 @@
}
},
"node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true,
"engines": {
"node": ">=10.0.0"
diff --git a/package.json b/package.json
index 910f0a0d..979b0668 100644
--- a/package.json
+++ b/package.json
@@ -4,9 +4,10 @@
"description": "",
"private": true,
"main": "index.js",
+ "type": "module",
"scripts": {
- "watch:eleventy": "node --require esbuild-register node_modules/.bin/eleventy --serve --incremental",
- "build:eleventy": "node --require esbuild-register node_modules/.bin/eleventy",
+ "watch:eleventy": "npx tsx ./node_modules/.bin/eleventy --config=.eleventy.ts --serve --incremental",
+ "build:eleventy": "npx tsx ./node_modules/.bin/eleventy --config=.eleventy.ts",
"build:eleventy-print": "cross-env IS_PRINT=print eleventy --output=print",
"test": "jest",
"start": "cross-env NODE_ENV=development npm-run-all watch:eleventy",
@@ -20,20 +21,22 @@
"author": "",
"license": "ISC",
"devDependencies": {
- "@11ty/eleventy": "^2.0.0",
- "@11ty/eleventy-img": "^4.0.2",
- "@11ty/eleventy-navigation": "^0.3.2",
+ "@11ty/eleventy": "^3.0.0",
+ "@11ty/eleventy-img": "^5.0.0",
+ "@11ty/eleventy-navigation": "^0.3.5",
"@fec/eleventy-plugin-remark": "^4.0.0",
"@fullhuman/postcss-purgecss": "^6.0.0",
"@jest/globals": "^29.5.0",
"@microflash/rehype-toc": "^1.0.2",
"@types/11ty__eleventy-img": "^4.0.0",
"@types/js-yaml": "^4.0.9",
+ "@types/jsdom": "^21.1.7",
"@types/node": "^22.9.1",
"@types/prop-types": "^15.7.13",
+ "@types/react": "^18.3.12",
+ "@types/react-dom": "^18.3.1",
"@types/slug": "^5.0.9",
"ajv": "^8.12.0",
- "bootstrap": "^5.3.0",
"cross-env": "^7.0.3",
"cssnano": "^7.0.2",
"hast-util-has-property": "^3.0.0",
@@ -49,19 +52,17 @@
"postcss": "^8.4.33",
"postcss-cli": "^11.0.0",
"prop-types": "^15.8.1",
+ "react-dom": "^18.3.1",
"rehype-autolink-headings": "^7.0.0",
"rehype-format": "^5.0.0",
"rehype-raw": "^7.0.0",
"remark-sectionize": "^2.0.0",
"sass": "^1.69.7",
"serve": "^14.0.1",
+ "sharp": "^0.33.2",
"slug": "^9.0.0",
"ts-jest": "^29.1.0",
+ "tsx": "^4.19.2",
"ucd-full": "^15.0.0"
- },
- "dependencies": {
- "esbuild-register": "^3.4.2",
- "sharp": "^0.33.2",
- "typescript": "^5.3.3"
}
}
diff --git a/references-schema.ts b/references-schema.ts
index eff01575..9fd0c616 100644
--- a/references-schema.ts
+++ b/references-schema.ts
@@ -1,4 +1,5 @@
import Ajv, { JSONSchemaType } from 'ajv';
+import React from 'react';
export type Author = {
readonly family?: string,
@@ -68,7 +69,7 @@ const dateSchema: JSONSchemaType = {
};
export type LStr = string | {
- value: string,
+ value: string | React.JSX.Element,
lang?: string,
alt?: string
}
diff --git a/references.ts b/references.ts
deleted file mode 100644
index 73baa95b..00000000
--- a/references.ts
+++ /dev/null
@@ -1,475 +0,0 @@
-import { renderExplicitDate, formatNumberString, asAttr, isolate, ifSet } from './helpers';
-import { BiblioRef, Reference, Date, Author, LStr, Periodical, referenceValidator, Book } from './references-schema';
-
-import ordinal from 'ordinal';
-import ISBN from 'isbn3';
-
-export function renderReference(ref: BiblioRef): string {
- const { id, type } = ref;
-
- let extraItemTypes = "";
- if ('volume' in ref) {
- extraItemTypes += ' https://schema.org/PublicationVolume';
- }
-
- return renderWarningsAndNotes(ref)
- + ``
- + renderAuthors(ref)
- + renderDate(ref)
- + renderTitle(ref)
- + renderEditor(ref)
- + renderTranslator(ref)
- + renderSeries(ref, '; ', '')
- + '. '
- + renderPatentBits(ref)
- + renderContainer(ref)
- + (ref.type === 'thesis' ? ` ${ref.genre}, ` : '')
- + (('publisher' in ref || 'publisher-place' in ref)
- ? `${renderPublisher(ref)}`
- : '')
- + renderISBN(ref)
- + '
';
-}
-
-const itemtypes = {
- 'article-journal': 'https://schema.org/ScholarlyArticle',
- 'paper-conference': 'https://schema.org/ScholarlyArticle',
- 'book': 'https://schema.org/Book',
- 'thesis': 'https://schema.org/Thesis',
- 'webpage': 'https://schema.org/WebPage',
- 'manuscript': 'https://schema.org/Manuscript',
- 'document': 'https://schema.org/CreativeWork',
- 'article-newspaper': 'https://schema.org/Article',
- 'article-magazine': 'https://schema.org/Article',
- 'chapter': 'https://schema.org/Chapter',
- 'patent': 'https://schema.org/CreativeWork',
-} as const;
-
-
-function renderWarningsAndNotes(reference: Reference) {
- let result = '';
-
- if (reference.warnings) {
- result += ``;
- }
-
- if (reference.notes) {
- result += ``;
- }
-
- return result;
-};
-
-function renderPatentBits(reference: Reference) {
- if (reference.type !== 'patent') return '';
-
- const filed = reference.filed ? renderExplicitDate(reference.filed, false) : '';
- const issued = reference.issued ? renderExplicitDate(reference.issued, false) : '';
-
- return (
- (reference.patentNumber
- ? `Patent ${formatNumberString(reference.patentNumber)}${ifSet(reference.applicationNumber, ` (application ${formatNumberString(reference.applicationNumber || "")}`)}.`
- : ifSet(reference.applicationNumber, `Patent application ${formatNumberString(reference.applicationNumber || "")}.`))
- + ifSet(filed, ` Filed ${filed}.`)
- + ifSet(issued, ` Issued ${issued}.`)
- );
-}
-
-function renderSeries(ref: Reference, lead: string, trail: string) {
- if (!('series' in ref) || !ref.series) {
- return '';
- }
-
- const s = ref.series;
-
- let title = renderLStr(s.title, 'span', {itemprop: 'name'}, {itemprop: 'alternateName'});
-
- if (s.URL) {
- title = `${title}`;
- }
-
- return lead
- + ``
- + title
- + ifSet(s.ISSN, i => ` (ISSN ${i})`)
- + [
- ifSet(s.volume, v => ` volume ${v}`),
- ifSet(s.number, n => ` number ${n}`)
- ].filter(x => x).join(', ')
- + ifSet(s.editor, e => `, series editor${e.length > 1 ? 's' : ''} ${renderPeople(e, false, false, 'editor')}`)
- + ''
- + trail;
-}
-
-function renderTitle(reference: Reference) {
- const archiveURL =
- 'archive-URL' in reference
- ? ` [archived]`
- : '';
-
- let linkedTitle: LStr = '';
- if (reference.URL) {
- if (typeof reference.title === 'string') {
- linkedTitle = `${reference.title}`;
- } else {
- linkedTitle = {
- value: `${reference.title.value}`,
- lang: reference.title.lang,
- alt: reference.title.alt,
- };
- }
- } else {
- linkedTitle = reference.title;
- }
-
- if (reference.type === 'book' || reference.type === 'thesis') {
- return renderLStr(linkedTitle, 'cite', {itemprop: 'name'}, {itemprop: 'alternateName'})
- + archiveURL
- + ifSet(reference.volume, v =>
- ` volume ${formatNumberString(v)}`
- + (('volume-title' in reference && reference['volume-title']) ? `: ‘${renderLStr(reference['volume-title'], 'span', {})}’` : '')
- )
- + ('edition' in reference && reference['edition'] ? ` (${ordinal(reference['edition'])} edition)` : '');
- } else {
- return '‘'
- + renderLStr(linkedTitle, 'span', { itemprop: 'name headline' }, { itemprop: 'alternateName'})
- + '’'
- + archiveURL;
- }
-}
-
-function renderBook(book: Book, itemprop: string) {
- const extraItemTypes = 'volume' in book ? ' https://schema.org/PublicationVolume' : ''
- return ``
- + renderTitle(book)
- + ('author' in book && book.author ? ', ' + renderPeople(book.author, false, false, 'author') : '')
- + ('editor' in book && book.editor ? ', edited by ' + renderPeople(book.editor, false, false, 'editor') : '')
- + renderSeries(book, '; ', '')
- + '. '
- + `${renderPublisher(book)}`
- + renderISBN(book)
- + '';
-}
-
-export function renderLStr(lStr: LStr, tag: string, attributes: Record, altAttributes?: Record) {
- const value = typeof lStr == 'string' ? lStr : lStr.value;
- const lang = typeof lStr == 'string' ? undefined : lStr.lang;
-
- const atts = Object.entries(attributes).map(([k, v]) => asAttr(k, v)).join('');
-
- const result = isolate(`<${tag}${atts}${asAttr('lang', lang)}>${value}${tag}>`);
- if (typeof lStr == 'object' && lStr.alt) {
- const attributes =
- altAttributes
- ? Object.entries(altAttributes).map(([k, v]) => asAttr(k, v)).join('')
- : '';
-
- return result + ` [${lStr.alt}]`;
- }
-
- return result;
-}
-
-const renderAuthors = (reference: Reference) => {
- if (reference.author) {
- return `${renderPeople(reference.author, true, false, 'author')} `;
- } else if ('editor' in reference && reference.editor) {
- const plural = reference.editor.length > 1 ? 's' : '';
- return `${renderPeople(reference.editor, true, false, 'editor')} (editor${plural}) `;
- } else if ('publisher' in reference && reference.publisher) {
- return ``
- + renderLStr(reference.publisher, 'span', {itemprop: 'name', class: 'noun'}, {itemprop: 'alternateName'})
- + ' (publisher) ';
- /*
- } else if ('in' in reference && 'publisher' in reference.in && reference.in.publisher) {
- return ``
- + renderLStr(reference.in.publisher, 'span', {itemprop: 'name', class: 'noun'})
- + ' ';
- */
- } else {
- return `Anonymous `;
- }
-}
-
-function renderTranslator(reference: Reference) {
- if ('translator' in reference && reference.translator) {
- return `, translated by ${renderPeople(reference.translator, false, false, 'translator')}`;
- }
-
- return '';
-}
-
-function renderEditor(reference: Reference) {
- if (reference.author !== undefined) {
- // if author was not present we would have shown editor as author
- if ('editor' in reference && reference.editor) {
- return `, edited by ${renderPeople(reference.editor, false, false, 'editor')}`;
- }
- }
-
- return '';
-}
-
-const renderPeople = (as: readonly Author[], reverseFirst: boolean, period: boolean, itemprop: string) => {
- const renderFamily = (a: Author, ix: number) =>
- `${a.family}${ifSet(period && ix === (as.length - 1) && !a.family?.endsWith('.'), '.')}`;
-
- const renderGiven = (a: Author, ix: number) =>
- `${a.given}${ifSet(period && reverseFirst && ix === 0 && ix === (as.length - 1) && !a.given.endsWith('.'), '.')}`;
-
- // Japanese and Chinese names should be last-name first
- const reverseName = (a: Author) => a.lang === undefined ? false : (a.lang.startsWith('zh') || a.lang.startsWith('ja'));
-
- // if using Latin script we still need a space between, otherwise we don’t
- const isLatn = (a: Author) => a.lang === undefined || a.lang.endsWith("-Latn");
-
- const hiddenName = (a: Author) => ``;
-
- const altName = (a: Author) => {
- if (!a.alt) {
- return '';
- }
-
- return ' [' + renderLStr(a.alt, 'span', {class: 'noun', itemprop: 'alternateName'}) + ']';
- }
-
- return as.map((a, ix) => (
- ifSet(ix > 0, (ix === as.length - 1) ? `${ifSet(as.length > 2, ',')} and ` : ", ")
- + ``
- + hiddenName(a)
- + ifSet(a.url, u => ``)
- + ((reverseFirst && ix === 0)
- ? ifSet(a.family, () => `${isolate(renderFamily(a, ix))}, `) + isolate(renderGiven(a, ix))
- : isolate(
- reverseName(a)
- ? `${ifSet(a.family, () => `${renderFamily(a, ix)}`)}${isLatn(a) ? ' ' : ''}${renderGiven(a, ix)}`
- : `${renderGiven(a, ix)}${ifSet(a.family, () => ` ${renderFamily(a, ix)}`)}`))
- + ifSet(a.url, '')
- + altName(a)
- + ``
- )).join('');
-};
-
-const renderISBN = (reference: Reference) => {
- const isbn = 'ISBN' in reference ? reference.ISBN : undefined;
- if (!isbn) {
- return '';
- }
-
- const parsed = ISBN.audit(isbn);
- if (!parsed.validIsbn) {
- console.error(parsed);
- throw new Error("Invalid ISBN: " + isbn);
- }
-
- const formattedISBN = ISBN.hyphenate(isbn.toString());
-
- return `ISBN: ${formattedISBN}. `;
-};
-
-const renderDate = (reference: Reference) => {
- const issued =
- 'issued' in reference
- ? reference.issued
- : 'in' in reference
- ? reference.in.issued
- : undefined;
-
- if (issued) {
- const originalDate =
- 'original-date' in reference && reference['original-date']
- ? reference['original-date']
- : 'in' in reference && 'original-date' in reference.in && reference.in['original-date']
- ? reference.in['original-date']
- : undefined;
-
- const original =
- originalDate
- ? `, originally published ${typeof originalDate === 'number' ? originalDate : originalDate.year}`
- : '';
-
- const year = typeof issued === 'number' ? issued : issued.year;
- const circa = (typeof issued !== 'number' && issued.circa) ? 'c. ' : '';
- const oldStyle = (typeof issued !== 'number' && issued.OS) ? ' [OS]' : '';
-
- return `(${oldStyle}${original}). `;
- }
-
- // patents might only have been filed
- if ('filed' in reference) {
- const { filed } = reference;
- const year = typeof filed === 'number' ? filed : filed.year;
- return `(). `;
- }
-
- return '(n.d.). ';
-}
-
-function toIsoDate(ymd: Date) {
- // TODO: this should use ymd.OS to convert to Gregorian dates
-
- if (typeof ymd == "number") {
- return ymd;
- }
-
- let result = `${ymd.year}`;
- if ('month' in ymd) {
- result += `-${ymd.month.toString().padStart(2, '0')}`;
-
- if ('day' in ymd) {
- result += `-${ymd.day.toString().padStart(2, '0')}`;
- }
- }
-
- return result;
-}
-
-function lstrValue(l: LStr) {
- if (typeof l === 'string') {
- return l;
- }
-
- return l.value;
-}
-
-const renderPublisher = (reference: { publisher?: LStr, ['publisher-place']?: string}) => {
- let result = '';
-
- const publisher = 'publisher' in reference ? reference.publisher : undefined;
- if (publisher) {
- result = renderLStr(publisher, 'span', {itemprop: 'name', class: 'noun'}, {itemprop: 'alternateName'});
- }
-
- // (p) => `${p}${reference['publisher-place'] ? ': ' : (p.endsWith('.') ? ' ' : '. ')}`)
-
- const publisherPlace = 'publisher-place' in reference ? reference['publisher-place'] : undefined;
- if (publisherPlace) {
- const prefix = result != '' ? ': ' : '';
- result += `${prefix}${publisherPlace}. `;
- } else {
- if (publisher && !lstrValue(publisher).endsWith('.')) {
- result += '. ';
- }
- }
-
- return result;
-};
-
-function renderPeriodical(id: string, p: Periodical): string {
- // if date is more specific than a year, show it
- let datePart = '';
- if (typeof p.issued === 'object' && 'month' in p.issued) {
- const dateString = renderExplicitDate(p.issued, true);
- datePart = ifSet(dateString, `, `);
- }
-
- if (p.issue && p.volume) {
- const { issue, volume } = p;
- return (
- ``
- + ``
- + renderLStr(p.title, 'cite', {itemprop: 'name'}, {itemprop: 'alternateName'})
- + ``
- + ' '
- + ``
- + ``
- + `vol. `
- + `${formatNumberString(volume)}`
- + ``
- + ' '
- + ``
- + ``
- + `(${formatNumberString(issue)})`
- + datePart
- + ``
- );
- }
-
- if (p.issue) {
- const { issue } = p;
- return (
- ``
- + ``
- + renderLStr(p.title, 'cite', {itemprop: 'name'}, {itemprop: 'alternateName'})
- + ``
- + ' '
- + ``
- + ``
- + `(${formatNumberString(issue)})`
- + datePart
- + ``
- );
- }
-
- if (p.volume) {
- const { volume } = p;
- return (
- ``
- + ``
- + renderLStr(p.title, 'cite', {itemprop: 'name'}, {itemprop: 'alternateName'})
- + ``
- + ' '
- + ``
- + ``
- + `vol. `
- + `${formatNumberString(volume)}`
- + datePart
- + ``
- );
- }
-
- // neither volume nor issue
- return (
- ``
- + ``
- + renderLStr(p.title, 'cite', {itemprop: 'name'}, {itemprop: 'alternateName'})
- + datePart
- + ``
- );
-}
-
-function renderContainer(reference: BiblioRef) {
- const { id } = reference;
-
- switch (reference.type) {
- case 'webpage':
- if ('container-title' in reference && reference['container-title']) {
- return ` `
- + ''
- + renderLStr(reference['container-title'], 'span', {itemprop: 'name'}, {itemprop: 'alternateName'})
- + ''
- + `. `;
- }
-
- return '';
-
- case 'chapter':
- case 'paper-conference':
- const prefix = 'page' in reference && reference.page
- ? `${isNaN(+reference.page) ? "Pages" : "Page"} ${reference.page} in `.replace('-', '–')
- : " In ";
-
- return prefix + renderBook(reference.in, 'isPartOf');
-
- case 'article-magazine':
- case 'article-newspaper':
- case 'article-journal':
- const pageSuffix =
- ('page' in reference && reference.page)
- ? `: ${isNaN(+reference.page) ? "pages" : "page"} ${reference.page}. `.replace('-', '–') // promote hyphen to en-dash
- : '. ';
-
- const publisher = renderPublisher(reference.in);
- const editor = ('editor' in reference.in && reference.in.editor)
- ? 'Edited by ' + renderPeople(reference.in.editor, false, false, 'editor') + '. '
- : '';
-
- return renderPeriodical(id, reference.in)
- + pageSuffix
- + editor
- + `${publisher}`;
-
- default:
- return '';
- }
-}
diff --git a/references.tsx b/references.tsx
new file mode 100644
index 00000000..312ea7f1
--- /dev/null
+++ b/references.tsx
@@ -0,0 +1,557 @@
+import { renderExplicitDate, formatNumberString, ifSet } from './helpers.jsx';
+import { BiblioRef, Reference, Date, Author, LStr, Periodical, Book } from './references-schema.js';
+import * as React from 'react';
+
+import ordinal from 'ordinal';
+import ISBN from 'isbn3';
+import { Isolated } from './helpers.jsx';
+
+export function renderReference(ref: BiblioRef): React.JSX.Element {
+ const { id, type } = ref;
+
+ let extraItemTypes = "";
+ if ('volume' in ref) {
+ extraItemTypes += ' https://schema.org/PublicationVolume';
+ }
+
+ return (<>
+ {renderWarningsAndNotes(ref)}
+
+ {renderAuthors(ref)}
+ {renderDate(ref)}
+ {renderTitle(ref)}
+ {renderEditor(ref)}
+ {renderTranslator(ref)}
+ {renderSeries(ref, '; ', '')}
+ {'. '}
+ {renderPatentBits(ref)}
+ {renderContainer(ref)}
+ {(ref.type === 'thesis') && <> {ref.genre}, >}
+ {(('publisher' in ref || 'publisher-place' in ref)
+ &&
+ {renderPublisher(ref)}
+ )}
+ {renderISBN(ref)}
+
+ >);
+}
+
+const itemtypes = {
+ 'article-journal': 'https://schema.org/ScholarlyArticle',
+ 'paper-conference': 'https://schema.org/ScholarlyArticle',
+ 'book': 'https://schema.org/Book',
+ 'thesis': 'https://schema.org/Thesis',
+ 'webpage': 'https://schema.org/WebPage',
+ 'manuscript': 'https://schema.org/Manuscript',
+ 'document': 'https://schema.org/CreativeWork',
+ 'article-newspaper': 'https://schema.org/Article',
+ 'article-magazine': 'https://schema.org/Article',
+ 'chapter': 'https://schema.org/Chapter',
+ 'patent': 'https://schema.org/CreativeWork',
+} as const;
+
+
+function renderWarningsAndNotes(reference: Reference): React.JSX.Element {
+ let warns = null;
+ if (reference.warnings) {
+ warns = ;
+ }
+
+ let notes = null;
+ if (reference.notes) {
+ notes = ;
+ }
+
+ return <>{warns}{notes}>;
+};
+
+function renderPatentBits(reference: Reference): React.JSX.Element | null {
+ if (reference.type !== 'patent') return null;
+
+ const filed = reference.filed ? renderExplicitDate(reference.filed, false) : null;
+ const issued = reference.issued ? renderExplicitDate(reference.issued, false) : null;
+
+ return (<>
+ {reference.patentNumber
+ ? <>Patent {formatNumberString(reference.patentNumber)}
+ {reference.applicationNumber && <> (application {formatNumberString(reference.applicationNumber || "")}).>}
+ >
+ : <>{reference.applicationNumber && <>Patent application {formatNumberString(reference.applicationNumber || "")}.>}>}
+ {filed && <> Filed {filed}.>}
+ {issued && <> Issued {issued}.>}
+ >);
+}
+
+function renderSeries(ref: Reference, lead: string, trail: string): React.JSX.Element | null {
+ if (!('series' in ref) || !ref.series) {
+ return null;
+ }
+
+ const s = ref.series;
+
+ let title = renderLStr(s.title, 'span', { itemProp: 'name' }, { itemProp: 'alternateName' });
+
+ if (s.URL) {
+ title = {title};
+ }
+
+ return (<>
+ {lead}
+
+ {title}
+ {s.ISSN && <> (ISSN {s.ISSN})>}
+ {[ifSet(s.volume, v => ` volume ${v}`), ifSet(s.number, n => ` number ${n}`)].filter(x => x).join(', ')}
+ {s.editor && <>, series editor${s.editor.length > 1 ? 's' : ''} {renderPeople(s.editor, false, false, 'editor')}>}
+
+ {trail}
+ >);
+}
+
+// TODO: used trustedTypes when available
+// the source for this is always trusted (it's me) but
+// we still only want to permit a subset here so things don't get weird
+export function safeHTML(s: string): { __html: string } {
+ return { __html: s.replace(/<(?!\/?(b|i|em|sup( class="ordinal")?|cite( lang=("[-a-zA-Z]+"|'[-a-zA-Z]+'))?|span( lang=("[-a-zA-Z]+"|'[-a-zA-Z]+'))?( class="noun")?|a( href=("https?:\/\/[^"]+"|'https?:\/\/[^']+'))?)>)/g, '<') };
+}
+
+function renderTitle(reference: Reference): React.JSX.Element {
+ const archiveURL =
+ 'archive-URL' in reference
+ ? <> [archived]>
+ : null;
+
+ // normalize title
+ let title: LStr =
+ (typeof reference.title === 'string')
+ ?
+ { value: reference.title }
+ : reference.title;
+
+ // if there is a URL, link the title
+ // also we allow some HTML to exist in the title
+ if (reference.URL) {
+ title = {
+ value: (typeof title.value === 'string')
+ ?
+ : {title.value},
+ lang: title.lang,
+ alt: title.alt,
+ };
+ }
+
+ if (reference.type === 'book' || reference.type === 'thesis') {
+ return (<>
+ {renderLStr(title, 'cite', { itemProp: 'name' }, { itemProp: 'alternateName' })}
+ {archiveURL}
+ {reference.volume && <>
+ {' volume '}
+ {formatNumberString(reference.volume)}
+ {('volume-title' in reference && reference['volume-title']) &&
+ <>: ‘{renderLStr(reference['volume-title'], 'span', {})}’>}
+ >}
+ {('edition' in reference && reference['edition']) &&
+ <> ({ordinal(reference['edition'])} edition)>}
+ >);
+ } else {
+ return (<>
+ {'‘'}
+ {renderLStr(title, 'span', { itemProp: 'name headline' }, { itemProp: 'alternateName' })}
+ {'’'}
+ {archiveURL}
+ >);
+ }
+}
+
+function renderBook(book: Book, itemprop: string): React.JSX.Element {
+ const extraItemTypes = 'volume' in book ? ' https://schema.org/PublicationVolume' : ''
+ return (
+ {renderTitle(book)}
+ {('author' in book && book.author) && <>, {renderPeople(book.author, false, false, 'author')}>}
+ {('editor' in book && book.editor) && <>, edited by {renderPeople(book.editor, false, false, 'editor')}>}
+ {renderSeries(book, '; ', '')}
+ {'. '}
+ {renderPublisher(book)}
+ {renderISBN(book)}
+ );
+}
+
+export function renderLStr(
+ lStr: LStr,
+ tag: T,
+ attributes: T extends 'span' ? React.HTMLAttributes : React.HTMLAttributes,
+ altAttributes?: React.HTMLAttributes): React.JSX.Element {
+
+ // normalize
+ lStr = typeof lStr == 'string' ? { value: lStr } : lStr;
+
+ const Tag = tag;
+ const result =
+ (typeof lStr.value == 'string')
+ ?
+ : {lStr.value};
+
+ if (lStr.alt) {
+ return <>{result} []>;
+ }
+
+ return result;
+}
+
+function renderAuthors(reference: Reference): React.JSX.Element {
+ if (reference.author) {
+ return <>{renderPeople(reference.author, true, false, 'author')} >;
+ } else if ('editor' in reference && reference.editor) {
+ const plural = reference.editor.length > 1 ? 's' : '';
+ return <>{renderPeople(reference.editor, true, false, 'editor')} (editor{plural}) >;
+ } else if ('publisher' in reference && reference.publisher) {
+ return (<>
+
+ {renderLStr(reference.publisher, 'span', { itemProp: 'name', className: 'noun' }, { itemProp: 'alternateName' })}
+ (publisher) >);
+ /*
+ } else if ('in' in reference && 'publisher' in reference.in && reference.in.publisher) {
+ return ``
+ + renderLStr(reference.in.publisher, 'span', {itemprop: 'name', class: 'noun'})
+ + ' ';
+ */
+ } else {
+ return <>Anonymous >;
+ }
+}
+
+function renderTranslator(reference: Reference): React.JSX.Element | null {
+ if ('translator' in reference && reference.translator) {
+ return <>, translated by {renderPeople(reference.translator, false, false, 'translator')}>;
+ }
+
+ return null;
+}
+
+function renderEditor(reference: Reference): React.JSX.Element | null {
+ if (reference.author !== undefined) {
+ // if author was not present we would have shown editor as author
+ if ('editor' in reference && reference.editor) {
+ return <>, edited by {renderPeople(reference.editor, false, false, 'editor')}>;
+ }
+ }
+
+ return null;
+}
+
+function renderPeople(as: readonly Author[], reverseFirst: boolean, period: boolean, itemprop: string): React.JSX.Element {
+ const renderFamily = (a: Author, ix: number) =>
+ <>{a.family}{ifSet(period && ix === (as.length - 1) && !a.family?.endsWith('.'), '.')}>;
+
+ const renderGiven = (a: Author, ix: number) =>
+ <>{a.given}{ifSet(period && reverseFirst && ix === 0 && ix === (as.length - 1) && !a.given.endsWith('.'), '.')}>;
+
+ // Japanese and Chinese names should be last-name first
+ const reverseName = (a: Author) => a.lang === undefined ? false : (a.lang.startsWith('zh') || a.lang.startsWith('ja'));
+
+ // if using Latin script we still need a space between, otherwise we don’t
+ const isLatn = (a: Author) => a.lang === undefined || a.lang.endsWith("-Latn");
+
+ const hiddenName = (a: Author) =>
+ ;
+
+ const altName = (a: Author) => {
+ if (!a.alt) {
+ return null;
+ }
+
+ return <> [{renderLStr(a.alt, 'span', { className: 'noun', itemProp: 'alternateName' })}]>;
+ }
+
+ function surroundUrl(content: React.JSX.Element | undefined, url: string | undefined) {
+ if (url) {
+ return {content};
+ }
+
+ return content;
+ }
+
+ return (<>
+ {as.map((a, ix) => (
+
+ {(ix > 0) && ((ix === as.length - 1) ? (`${ifSet(as.length > 2, ',')} and `) : ", ")}
+
+ {hiddenName(a)}
+ {surroundUrl(
+ (reverseFirst && ix === 0)
+ ? (
+ <>
+ {a.family && <>{renderFamily(a, ix)}, >}
+ {renderGiven(a, ix)}
+ >
+ )
+ : (
+
+ {reverseName(a)
+ ? <>{a.family && <>{renderFamily(a, ix)}{isLatn(a) ? ' ' : ''}>}{renderGiven(a, ix)}>
+ : <>{renderGiven(a, ix)} {a.family && renderFamily(a, ix)}>
+ }
+
+ )
+ , a.url)}
+ {altName(a)}
+
+
+ ))}
+ >);
+};
+
+function renderISBN(reference: Reference): React.JSX.Element | null {
+ const isbn = 'ISBN' in reference ? reference.ISBN : undefined;
+ if (!isbn) {
+ return null;
+ }
+
+ const parsed = ISBN.audit(isbn);
+ if (!parsed.validIsbn) {
+ console.error(parsed);
+ throw new Error("Invalid ISBN: " + isbn);
+ }
+
+ const formattedISBN = ISBN.hyphenate(isbn.toString());
+ return <>ISBN: {formattedISBN}. >;
+};
+
+function renderDate(reference: Reference): React.JSX.Element {
+ const issued =
+ 'issued' in reference
+ ? reference.issued
+ : 'in' in reference
+ ? reference.in.issued
+ : undefined;
+
+ if (issued) {
+ const originalDate =
+ 'original-date' in reference && reference['original-date']
+ ? reference['original-date']
+ : 'in' in reference && 'original-date' in reference.in && reference.in['original-date']
+ ? reference.in['original-date']
+ : undefined;
+
+ const original =
+ originalDate
+ ? `, originally published ${typeof originalDate === 'number' ? originalDate : originalDate.year}`
+ : '';
+
+ const year = typeof issued === 'number' ? issued : issued.year;
+ const circa = (typeof issued !== 'number' && issued.circa) && <>c. >;
+ const oldStyle = (typeof issued !== 'number' && issued.OS) && <> [OS]>;
+
+ return (
+ <>
+ {'('}
+
+ {oldStyle}
+ {original}
+ {'). '}
+ >
+ );
+ }
+
+ // patents might only have been filed
+ if ('filed' in reference) {
+ const { filed } = reference;
+ const year = typeof filed === 'number' ? filed : filed.year;
+ return <>(). >;
+ }
+
+ return <>(n.d.). >;
+}
+
+function toIsoDate(ymd: Date): string {
+ // TODO: this should use ymd.OS to convert to Gregorian dates
+
+ if (typeof ymd == "number") {
+ return ymd.toString();
+ }
+
+ let result = `${ymd.year}`;
+ if ('month' in ymd) {
+ result += `-${ymd.month.toString().padStart(2, '0')}`;
+
+ if ('day' in ymd) {
+ result += `-${ymd.day.toString().padStart(2, '0')}`;
+ }
+ }
+
+ return result;
+}
+
+function lstrValue(l: LStr): string {
+ if (typeof l === 'string') {
+ return l;
+ }
+
+ return l.value;
+}
+
+function renderPublisher(reference: { publisher?: LStr, ['publisher-place']?: string }): React.JSX.Element | null {
+ let result = null;
+
+ const publisher = 'publisher' in reference ? reference.publisher : undefined;
+ if (publisher) {
+ result = renderLStr(publisher, 'span', { itemProp: 'name', className: 'noun' }, { itemProp: 'alternateName' });
+ }
+
+ // (p) => `${p}${reference['publisher-place'] ? ': ' : (p.endsWith('.') ? ' ' : '. ')}`)
+
+ const publisherPlace = 'publisher-place' in reference ? reference['publisher-place'] : undefined;
+ if (publisherPlace) {
+ const prefix = result !== null ? ': ' : '';
+ result = <>{result}{prefix}{publisherPlace}. >;
+ } else {
+ if (publisher && !lstrValue(publisher).endsWith('.')) {
+ result = <>{result}. >;
+ }
+ }
+
+ return result;
+};
+
+function renderPeriodical(id: string, p: Periodical): React.JSX.Element {
+ // if date is more specific than a year, show it
+ let datePart = null;
+ if (typeof p.issued === 'object' && 'month' in p.issued) {
+ const date = renderExplicitDate(p.issued, true);
+ if (date) {
+ datePart = <>, >;
+ }
+ }
+
+
+ if (p.issue && p.volume) {
+ const { issue, volume } = p;
+ return (<>
+
+
+ {renderLStr(p.title, 'cite', { itemProp: 'name' }, { itemProp: 'alternateName' })}
+
+ {' '}
+
+
+ vol.
+ {formatNumberString(volume)}
+
+ {' '}
+
+
+ ({formatNumberString(issue)})
+ {datePart}
+
+ >);
+ }
+
+ if (p.issue) {
+ const { issue } = p;
+ return (<>
+
+
+ {renderLStr(p.title, 'cite', { itemProp: 'name' }, { itemProp: 'alternateName' })}
+
+ {' '}
+
+
+ ({formatNumberString(issue)})
+ {datePart}
+
+ >);
+ }
+
+ if (p.volume) {
+ const { volume } = p;
+ return (<>
+
+
+ {renderLStr(p.title, 'cite', { itemProp: 'name' }, { itemProp: 'alternateName' })}
+
+ {' '}
+
+
+ vol.
+ {formatNumberString(volume)}
+ {datePart}
+
+ >);
+ }
+
+ // neither volume nor issue
+ return (<>
+
+
+ {renderLStr(p.title, 'cite', { itemProp: 'name' }, { itemProp: 'alternateName' })}
+ {datePart}
+
+ >);
+}
+
+function renderContainer(reference: BiblioRef): React.JSX.Element | null {
+ const { id } = reference;
+
+ switch (reference.type) {
+ case 'webpage':
+ if ('container-title' in reference && reference['container-title']) {
+ return (<>
+ {' '}
+
+
+ {renderLStr(reference['container-title'], 'span', { itemProp: 'name' }, { itemProp: 'alternateName' })}
+
+
+ {'. '}
+ >);
+ }
+
+ return null;
+
+ case 'chapter':
+ case 'paper-conference':
+ const prefix =
+ ('page' in reference && reference.page)
+ ? <>
+ {isNaN(+reference.page) ? "Pages " : "Page "}
+ {reference.page.replace('-', '–')}
+ {' in '}
+ >
+ : <>In >;
+
+ return <>{prefix}{renderBook(reference.in, 'isPartOf')}>;
+
+ case 'article-magazine':
+ case 'article-newspaper':
+ case 'article-journal':
+ const pageSuffix =
+ ('page' in reference && reference.page)
+ ? <>
+ {': '}
+ {isNaN(+reference.page) ? "pages " : "page "}
+ {reference.page.replace('-', '–')}
+ {'. '}
+ >
+ : <>. >;
+
+ const editor =
+ ('editor' in reference.in && reference.in.editor) &&
+ <>Edited by {renderPeople(reference.in.editor, false, false, 'editor')}. >;
+
+ return (<>
+ {renderPeriodical(id, reference.in)}
+ {pageSuffix}
+ {editor}
+
+ {renderPublisher(reference.in)}
+
+ >);
+
+ default:
+ return null;
+ }
+}
diff --git a/src/_includes/article.11ty.js b/src/_includes/article.11ty.js
index b61246d8..1139ed65 100644
--- a/src/_includes/article.11ty.js
+++ b/src/_includes/article.11ty.js
@@ -1,16 +1,16 @@
-const path = require('path');
-const Image = require('@11ty/eleventy-img');
-const { JSDOM } = require('jsdom');
+import path from 'path';
+import Image from '@11ty/eleventy-img';
+import { JSDOM } from 'jsdom';
-const { renderSource } = require('../../images');
-const { ifSet, asAttr, renderArticleList, IS_PRODUCTION } = require('../../helpers');
+import { renderSource } from '../../images';
+import { ifSet, asAttr, renderArticleList, IS_PRODUCTION } from '../../helpers';
-exports.data = {
+export const data = {
layout: "layout.11ty.js",
ogType: "article",
};
-exports.render = async function (data) {
+export async function render(data) {
/*
let heroImage = '';
let heroSource = '';
diff --git a/src/_includes/columned.11ty.js b/src/_includes/columned.11ty.js
deleted file mode 100644
index 50be0734..00000000
--- a/src/_includes/columned.11ty.js
+++ /dev/null
@@ -1,7 +0,0 @@
-exports.data = {
- layout: "layout.11ty.js",
-};
-
-exports.render = function (data) {
- return data.content;
-}
diff --git a/src/_includes/layout.11ty.js b/src/_includes/layout.11ty.js
index ebe5a1a4..512f38c3 100644
--- a/src/_includes/layout.11ty.js
+++ b/src/_includes/layout.11ty.js
@@ -1,17 +1,13 @@
-const { ifSet, asAttr, purify } = require('../../helpers');
-const path = require('path');
-const Image = require('@11ty/eleventy-img');
-const { JSDOM } = require('jsdom');
+import path from 'path';
+import Image from '@11ty/eleventy-img';
+import { JSDOM } from 'jsdom';
+import { IS_PRODUCTION, ifSet, asAttr } from '../../helpers.js';
-import { IS_PRODUCTION } from '../../helpers';
-
-exports.data = {
- title: "Ways to Play"
-};
+export const data = { title: "Ways to Play" };
const leadMatcher = /(.*?)<\/p>/s;
-exports.render = async function (data) {
+export async function render(data) {
let excerpt = data.content.match(leadMatcher)?.[1];
if (excerpt) {
@@ -81,6 +77,7 @@ exports.render = async function (data) {
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
})(window, document, "clarity", "script", "gzk1ekbi1n");
+ ${ ifSet(data.script, s => ``) }
diff --git a/src/about.md b/src/about.md
index 35ddcaa2..87f5d07d 100644
--- a/src/about.md
+++ b/src/about.md
@@ -1,6 +1,6 @@
---
title: About
-layout: columned
+layout: layout.11ty.js
bodyType: http://schema.org/AboutPage
---
diff --git a/src/articles.11ty.ts b/src/articles.11ty.ts
index 9f7252e7..dfe0d3e0 100644
--- a/src/articles.11ty.ts
+++ b/src/articles.11ty.ts
@@ -3,7 +3,7 @@ import { Context, Data } from '../types';
export const data = {
title: "Articles",
- layout: "columned",
+ layout: "layout.11ty.js",
eleventyNavigation: {
title: "Articles",
key: 'articles'
diff --git a/src/articles/articles.11tydata.js b/src/articles/articles.11tydata.js
index 29e95b6b..a7b4b5c2 100644
--- a/src/articles/articles.11tydata.js
+++ b/src/articles/articles.11tydata.js
@@ -1,8 +1,9 @@
-const { IS_PRODUCTION, IS_PRINT } = require("../../helpers");
+import { IS_PRODUCTION, IS_PRINT } from "../../helpers";
-let data = {
- "layout": IS_PRINT ? "article-print" : "article",
- "tags": "article",
+export default {
+ layout: IS_PRINT ? "article-print" : "article",
+ tags: "article",
+ date: "git Last Modified",
eleventyComputed: {
// idea from: https://github.com/adamduncan/eleventy-auto-navigation/blob/main/src/_data/eleventyComputed.js
eleventyNavigation: {
@@ -30,10 +31,4 @@ let data = {
},
},
},
-}
-
-//if (IS_PRODUCTION) {
- data.date = "git Last Modified";
-//}
-
-module.exports = data;
+};
diff --git a/src/atom.11ty.ts b/src/atom.11ty.ts
index 7a8c71c1..75c24f35 100644
--- a/src/atom.11ty.ts
+++ b/src/atom.11ty.ts
@@ -1,10 +1,13 @@
-import { ifSet } from "../helpers";
-import { Context, Data } from "../types";
-const { JSDOM } = require('jsdom');
+import { ifSet } from "../helpers.jsx";
+import { Context, Data } from "../types.js";
+import { JSDOM } from 'jsdom';
export const data = {
permalink: "/atom.xml",
eleventyExcludeFromCollections: true,
+ eleventyImport: {
+ collections: ["article", "game"]
+ }
};
function escape(str: string): string {
diff --git a/src/bibliography.11ty.ts b/src/bibliography.11ty.tsx
similarity index 56%
rename from src/bibliography.11ty.ts
rename to src/bibliography.11ty.tsx
index 16ba5d08..1afd29de 100644
--- a/src/bibliography.11ty.ts
+++ b/src/bibliography.11ty.tsx
@@ -1,30 +1,50 @@
import * as fs from 'node:fs/promises';
-import * as path from 'path';
import * as jsyaml from 'js-yaml';
+import * as React from 'react';
+import { renderToStaticMarkup } from 'react-dom/server';
-import { IS_PRODUCTION } from '../helpers';
+import { IS_PRODUCTION } from '../helpers.js';
-import { Reference, Bibliography, LStr, referenceValidator, BiblioRef, sortableDate } from '../references-schema';
-import { renderReference } from '../references';
-import { Data } from '../types';
+import { Reference, Bibliography, LStr, referenceValidator, BiblioRef, sortableDate } from '../references-schema.js';
+import { renderReference, safeHTML } from '../references.js';
+import { Data } from '../types.js';
export const data = {
title: "Bibliography of Traditional Games",
- layout: "layout",
+ layout: "layout.11ty.js",
eleventyImport: {
collections: ["article", "game"]
- }
+ },
+ script: `${handleSelect}
+ ${runSort}
+ ${compareKeys}
+ document.addEventListener("DOMContentLoaded", () => {
+ const selector = document.getElementById('sort-selector');
+ selector.addEventListener('change', () => handleSelect(selector.value));
+ const params = new URLSearchParams(window.location.search);
+ const sort = params.get('sort') || 'name,year';
+ selector.value = sort;
+ handleSelect(selector.value);
+ });`
};
-function lStrValue(l: LStr) {
+function lStrValue(l: LStr): string {
if (typeof l === 'string') {
return l;
}
- return l.value;
+ if (typeof l.value === 'string') {
+ return l.value;
+ }
+
+ if (typeof l.value === 'object') {
+ return renderToStaticMarkup(l.value);
+ }
+
+ throw "malformed LStr";
}
-function sortName(r: Reference) {
+function sortName(r: Reference): string {
if (r.author) {
return `${r.author[0].family || ''} ${r.author[0].given}`;
}
@@ -67,16 +87,20 @@ async function buildLookup(coll: any[], refs: Map
) {
}
}
-function renderBackreferences(ref: BiblioRef, refs: Map) {
+function renderBackreferences(ref: BiblioRef, refs: Map): React.JSX.Element | null {
let backrefs = refs.get(ref.id);
if (backrefs === undefined) {
- return "";
+ return null;
}
// sort by title
backrefs.sort((x, y) => x.data.title.localeCompare(y.data.title, 'en'));
- return '';
+ return (
+
+ {backrefs.map((b, ix) => )}
+
+ );
}
export async function render(data: Data) {
@@ -84,51 +108,41 @@ export async function render(data: Data) {
await buildLookup(data.collections.article, refs);
await buildLookup(data.collections.game, refs);
const locale = new Intl.Collator('en', { numeric: true, ignorePunctuation: true });
- const file = await fs.readFile(path.join(__dirname, "../bibliography.yaml"), 'utf8');
+ const file = await fs.readFile(new URL("../bibliography.yaml", import.meta.url), 'utf8');
const parsedFile = jsyaml.load(file);
if (!referenceValidator(parsedFile)) {
throw new Error(`Invalid bibliography: ${referenceValidator.errors}`);
}
const biblio = Object.entries(parsedFile as Bibliography).map(([k, v]) => ({ ...v, id: k, sortName: sortName(v), sortDate: sortableDate(v) }));
- biblio.sort((x, y) => locale.compare(x.sortName, y.sortName) || locale.compare(x.sortDate, y.sortDate) );
- return ''
- + `${biblio.length} works
`
- + ''
- + `
\n${biblio.map(b => {
- return `- `
- + renderReference(b)
- + renderBackreferences(b, refs)
- + `
`;
- }).join("\n")}\n
`
- + '
'
- + ``;
+ biblio.sort((x, y) => locale.compare(x.sortName, y.sortName) || locale.compare(x.sortDate, y.sortDate));
+ return (<>
+
+ {biblio.length} works
+
+
+ {biblio.map((b, ix) =>
+ -
+ {renderReference(b)}
+ {renderBackreferences(b, refs)}
+
+ )}
+
+
+ >);
}
function handleSelect(on: string) {
@@ -149,7 +163,7 @@ function runSort(on: string) {
.map(el => ({ el, keys: keys.map(k => el.getAttribute(k)) }))
.sort((x, y) => multiplier * compareKeys(x.keys, y.keys, comparer));
const frag = document.createDocumentFragment();
- children.forEach(({el}) => frag.appendChild(el));
+ children.forEach(({ el }) => frag.appendChild(el));
el.appendChild(frag);
}
diff --git a/src/game-names-index.11ty.ts b/src/game-names-index.11ty.tsx
similarity index 57%
rename from src/game-names-index.11ty.ts
rename to src/game-names-index.11ty.tsx
index c8611953..fece5463 100644
--- a/src/game-names-index.11ty.ts
+++ b/src/game-names-index.11ty.tsx
@@ -1,9 +1,10 @@
-import { IS_PRODUCTION } from "../helpers";
-import { Data } from "../types";
+import React from "react";
+import { IS_PRODUCTION } from "../helpers.jsx";
+import { Data } from "../types.js";
export const data = {
title: "Game Names Index",
- layout: "columned",
+ layout: "layout.11ty.js",
eleventyImport: {
collections: ["game"]
}
@@ -16,7 +17,7 @@ type Name = {
name: string,
}
-async function findNames(coll: any[], refs: Map) {
+function findNames(coll: any[], refs: Map) {
for (const c of coll) {
const content = c.content as string;
const matches = content.matchAll(nameMatcher);
@@ -47,9 +48,9 @@ const nameOverrides = new Map([
["wni", "Comorian"], // Ndzwani
]);
-export async function render(data: Data) {
+export function render(data: Data): React.JSX.Element {
const refs = new Map();
- await findNames(data.collections.game, refs);
+ findNames(data.collections.game, refs);
const byLang = new Map>();
for (const [k, v] of refs) {
@@ -68,7 +69,6 @@ export async function render(data: Data) {
it.set(k, v);
}
- let result = 'This page lists all game names by language, for ease of reference.
';
const displayer = new Intl.DisplayNames(["en"], { type: "language" });
const display = (code: string) => {
@@ -81,28 +81,44 @@ export async function render(data: Data) {
.map(([code, values]) => ({ code, title: display(code) || code, values }))
.sort((a, b) => sorter.compare(a.title, b.title));
- result += 'Languages
';
- for (const { code, title } of langs) {
- result += `- ${title}
`;
- }
- result += '
'
- + '
';
-
- for (const { code, title, values } of langs) {
- result += ``;
- result += '';
- const names = [...values.entries()].sort((a, b) => sorter.compare(a[0].name, b[0].name));
- for (const [{ lang, name }, page] of names) {
- if (IS_PRODUCTION && page.data.draft) {
- continue;
- }
+ return (<>
+ This page lists all game names by language, for ease of reference.
+ Languages
+
+ {langs.map(({ code, title }, ix) => - {title}
)}
+
+
- result += `- ${titlize(name)}
`;
- }
- result += '
';
- }
+ {langs.map(({ code, title, values }, ix) => {
+
+ const names = [...values.entries()]
+ .sort((a, b) => sorter.compare(a[0].name, b[0].name))
+ .filter(([{ lang, name }, page]) => !IS_PRODUCTION || !page.data.draft);
+
+ if (names.length === 0) {
+ return null;
+ }
- return result;
+ return (
+
+
+
+
+ );
+ })}
+ >);
}
const titlizer = /(? {
+ const expandedGames = getGames(data);
+ return `const GAMES=${JSON.stringify(expandedGames)};
+ ${renderGames}
+
+ function handleSelect(el, name) {
+ el.onchange = () => {
+ const params = new URLSearchParams(window.location.search);
+ const v = el.value;
+ if (v === 'any') {
+ params.delete(name);
+ } else {
+ params.set(name, v);
+ }
+
+ const queryString = params.toString();
+ if (queryString) {
+ window.history.pushState(null, null, '?' + queryString);
+ } else {
+ window.history.pushState(null, null, window.location.pathname);
+ }
+ renderGames(GAMES);
+ }
+ }
+
+ window.addEventListener('DOMContentLoaded', () => {
+ handleSelect(document.getElementById('player-select'), 'players');
+ handleSelect(document.getElementById('equipment-select'), 'equipment');
+ handleSelect(document.getElementById('country-select'), 'country');
+ renderGames(GAMES);
+ });`
+ }
}
};
@@ -97,7 +133,7 @@ function renderGames(allGames: RenderableGame[]) {
}));
}
-export function render(this: Context, data: Data) {
+function getGames(data: Data) {
const expandPlayers = (title: string, players: Players | undefined): Players => {
if (players === undefined) {
console.warn('No players specified for ' + title);
@@ -107,7 +143,7 @@ export function render(this: Context, data: Data) {
return players;
}
- const expandedGames: RenderableGame[] = data.collections.game.filter(g => !IS_PRODUCTION || !g.data.draft).flatMap(g =>
+ return data.collections.game.filter(g => !IS_PRODUCTION || !g.data.draft).flatMap(g =>
[
{
title: g.data.title,
@@ -131,6 +167,10 @@ export function render(this: Context, data: Data) {
variant: true,
}))
]);
+}
+
+export function render(this: Context, data: Data): React.JSX.Element {
+ const expandedGames: RenderableGame[] = getGames(data);
const equipment = new Set();
for (const g of expandedGames) {
@@ -153,98 +193,67 @@ export function render(this: Context, data: Data) {
}
const collator = new Intl.Collator('en', { sensitivity: 'base', numeric: true });
- const countryNames = new Intl.DisplayNames(["en"], { type: "region", style: "short"});
+ const countryNames = new Intl.DisplayNames(["en"], { type: "region", style: "short" });
const sortedEquipment = [...equipment.values()].sort(collator.compare);
const sortedCountries = [...countries.values()].sort((x, y) => collator.compare(countryNames.of(x)!, countryNames.of(y)!));
expandedGames.sort((x, y) => x.title.localeCompare(y.title, 'en'));
- const script = ``;
-
-
- return 'Filters
'
- + ''
-
- + ''
- + ''
-
- + 'List
'
- + ''
- + script;
+ return (<>
+ Filters
+
+
+ List
+
+ >);
}
diff --git a/src/games/games.11tydata.js b/src/games/games.11tydata.js
index 859241a3..37ff27ac 100644
--- a/src/games/games.11tydata.js
+++ b/src/games/games.11tydata.js
@@ -1,8 +1,9 @@
-const { IS_PRODUCTION } = require("../../helpers");
+import { IS_PRODUCTION } from "../../helpers";
-let data = {
- "layout": "article",
- "tags": "game",
+export default {
+ layout: "article",
+ tags: "game",
+ date: "git Last Modified",
eleventyComputed: {
permalink: data => {
if (IS_PRODUCTION && data.draft === true) {
@@ -13,9 +14,3 @@ let data = {
},
},
};
-
-//if (IS_PRODUCTION) {
- data.date = "git Last Modified";
-//}
-
-module.exports = data;
diff --git a/src/index.11ty.ts b/src/index.11ty.tsx
similarity index 74%
rename from src/index.11ty.ts
rename to src/index.11ty.tsx
index b061d212..51fe26d2 100644
--- a/src/index.11ty.ts
+++ b/src/index.11ty.tsx
@@ -1,7 +1,8 @@
-import { Context, Data } from "../types";
+import { Context, Data } from "../types.js";
+import * as React from 'react';
export const data = {
- layout: "columned",
+ layout: "layout.11ty.js",
title: "Welcome",
eleventyImport: {
collections: ["game", "article"]
@@ -19,19 +20,17 @@ export function render(this: Context, data: Data) {
.slice(0, 30)
.map((p: any) => {
const iso = p.date.toISOString();
- return `${p.data.title} ()`;})
- .join("\n");
+ return {p.data.title} ();
+ });
pages.sort((x, y) => y.content.length - x.content.length);
const longPages = pages
.slice(0, 20)
- .map(p => {
- return `${p.data.title}`;})
- .join("\n");
+ .map(p => {p.data.title});
- return `
-
+ return (<>
+
This is a site about games, traditional and modern, that are played around the world.
@@ -46,13 +45,9 @@ export function render(this: Context, data: Data) {
For other sites about games, please visit the See Also page.
Recently updated pages
-
+
Longest pages
-
- `;
+
+ >);
}
diff --git a/src/see-also.md b/src/see-also.md
index c4062202..f9668e5b 100644
--- a/src/see-also.md
+++ b/src/see-also.md
@@ -1,6 +1,6 @@
---
title: See Also
-layout: columned
+layout: layout.11ty.js
bodyType: http://schema.org/WebPage
---
diff --git a/tsconfig.json b/tsconfig.json
index 5acfb372..7c73023d 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,7 +9,9 @@
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true,
"strict": true,
- "moduleResolution": "node",
- "resolveJsonModule": true
+ "moduleResolution": "node16",
+ "module": "Node16",
+ "resolveJsonModule": true,
+ "jsx": "preserve"
}
}