diff --git a/.gitignore b/.gitignore index 4a0603c6053..e5b88ccc215 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,7 @@ scripts/check-releases.html # TypeScript output tsconfig.build.tsbuildinfo + +# API docs generated files +api-docs/dist +api-docs/content/elements diff --git a/api-docs/.eleventy.js b/api-docs/.eleventy.js new file mode 100644 index 00000000000..13d7b121805 --- /dev/null +++ b/api-docs/.eleventy.js @@ -0,0 +1,75 @@ +import syntaxHighlightPlugin from '@11ty/eleventy-plugin-syntaxhighlight'; +import markdownIt from 'markdown-it'; +import markdownItAnchor from 'markdown-it-anchor'; +import { parse } from 'node-html-parser'; + +export default function (config) { + // See https://www.11ty.dev/docs/config/ + config.setInputDirectory('content'); + config.setOutputDirectory('dist'); + config.setDataDirectory('../_data'); + config.setIncludesDirectory('../_includes'); + + // See https://www.11ty.dev/docs/languages/markdown/ + config.setLibrary( + 'md', + markdownIt({ + html: true, + linkify: true, + }).use(markdownItAnchor, { + slugify: config.getFilter('slugify'), + level: [1, 2, 3, 4], + permalink: markdownItAnchor.permalink.ariaHidden({ + placement: 'after', + class: 'anchor-link', + symbol: '#', + }), + }), + ); + + config.addPlugin(syntaxHighlightPlugin, { + preAttributes: { + class: ({ language }) => `code-block language-${language}`, + }, + }); + + config.addPassthroughCopy('css'); + config.addPassthroughCopy('js'); + config.addPassthroughCopy({ img: '/' }); + + // Copy markdown files for "view as MD" + config.addPassthroughCopy({ 'content/elements': 'markdown' }); + + config.addCollection('elements', (api) => { + return api.getFilteredByGlob('./content/elements/*.md').sort((a, b) => { + return a.data.title.localeCompare(b.data.title); + }); + }); + + // Table of contents + config.addFilter('toc', (content) => { + const html = parse(content); + const headings = html.querySelectorAll('h1, h2, h3, h4'); + const toc = headings.map((heading) => { + // Remove anchor links + heading.querySelectorAll('[aria-hidden=true]').forEach((el) => el.remove()); + + const id = heading.attributes.id; + const text = heading.innerText; + const level = parseInt(heading.tagName.replace('H', ''), 10); + + return { id, text, level }; + }); + + // The page title already uses an h1, so it's recommended to start with h2 + // in the content. If the first heading is an h2 or higher, we'll adjust the + // levels to start with level 1 to avoid unnecessary indentation in the TOC. + const minLevel = Math.min(...toc.map((item) => item.level)); + if (minLevel > 1) + toc.forEach((item) => { + item.level -= minLevel - 1; + }); + + return toc; + }); +} diff --git a/api-docs/_data/metadata.json b/api-docs/_data/metadata.json new file mode 100644 index 00000000000..bac63c92e33 --- /dev/null +++ b/api-docs/_data/metadata.json @@ -0,0 +1,4 @@ +{ + "title": "Vaadin WC API reference", + "description": "Vaadin web components API documentation" +} diff --git a/api-docs/_includes/layout.njk b/api-docs/_includes/layout.njk new file mode 100644 index 00000000000..0e987be9216 --- /dev/null +++ b/api-docs/_includes/layout.njk @@ -0,0 +1,57 @@ +--- +toc: true +--- + + + + + + + + {{ title or metadata.title }} + + + + + + +
+ {% include "partials/header.njk" %} + +
+ {% include "partials/navigation.njk" %} + +
+
+
+
+ + +
+ {{ content | safe }} +
+
+
+ + {% if toc %} +
+ {% include 'partials/toc.njk' %} +
+ {% endif %} +
+
+
+
+ + + + + diff --git a/api-docs/_includes/partials/actions.njk b/api-docs/_includes/partials/actions.njk new file mode 100644 index 00000000000..67ca38e3101 --- /dev/null +++ b/api-docs/_includes/partials/actions.njk @@ -0,0 +1,20 @@ +
+ + + + + + + + + View as MD + +
diff --git a/api-docs/_includes/partials/header.njk b/api-docs/_includes/partials/header.njk new file mode 100644 index 00000000000..ef941ac39f8 --- /dev/null +++ b/api-docs/_includes/partials/header.njk @@ -0,0 +1,12 @@ +
+ + + + + {{ metadata.title }} + +
diff --git a/api-docs/_includes/partials/navigation.njk b/api-docs/_includes/partials/navigation.njk new file mode 100644 index 00000000000..dd9da68471b --- /dev/null +++ b/api-docs/_includes/partials/navigation.njk @@ -0,0 +1,21 @@ + + +
+
+ + +
+
diff --git a/api-docs/_includes/partials/toc.njk b/api-docs/_includes/partials/toc.njk new file mode 100644 index 00000000000..e39ae1c0501 --- /dev/null +++ b/api-docs/_includes/partials/toc.njk @@ -0,0 +1,19 @@ + diff --git a/api-docs/content/content.json b/api-docs/content/content.json new file mode 100644 index 00000000000..5a0f24f82df --- /dev/null +++ b/api-docs/content/content.json @@ -0,0 +1,3 @@ +{ + "layout": "layout.njk" +} diff --git a/api-docs/content/index.md b/api-docs/content/index.md new file mode 100644 index 00000000000..4cb1220f6c1 --- /dev/null +++ b/api-docs/content/index.md @@ -0,0 +1,13 @@ +--- +title: Vaadin WC API Reference +permalink: / +toc: false +--- + +This is the API reference for the Vaadin Web Components. It contains information about the elements, their properties, methods, and events. + +This reference is intended for developers using either the plain Web Components, or their React wrappers, with either Javascript or TypeScript. + +The API documentation is generated from JSDoc annotations in the components source files. If you want to contribute to the documentation, please check corresponding packages. + +For the full component documentation, including examples and guides, please refer to the [Vaadin Components documentation](https://vaadin.com/docs/latest/components). diff --git a/api-docs/css/index.css b/api-docs/css/index.css new file mode 100644 index 00000000000..69bd88c2c6a --- /dev/null +++ b/api-docs/css/index.css @@ -0,0 +1,813 @@ +:root { + --font-family-default: + ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Roboto', 'Segoe UI', Helvetica, Arial, sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + --font-family-mono: + ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + --font-size-xs: 0.75rem; + --font-size-sm: 0.875rem; + --font-size-fluid-x2: clamp(0.79rem, calc(0.76rem + 0.17vw), 0.89rem); + --font-size-fluid-x1: clamp(0.89rem, calc(0.85rem + 0.19vw), 1rem); + --font-size-fluid-0: clamp(1rem, calc(0.96rem + 0.22vw), 1.13rem); + --font-size-fluid-1: clamp(1.13rem, calc(1.08rem + 0.24vw), 1.27rem); + --font-size-fluid-2: clamp(1.27rem, calc(1.21rem + 0.28vw), 1.42rem); + --font-size-fluid-3: clamp(1.42rem, calc(1.36rem + 0.31vw), 1.6rem); + --font-size-fluid-4: clamp(1.6rem, calc(1.53rem + 0.35vw), 1.8rem); + --font-size-fluid-5: clamp(1.8rem, calc(1.72rem + 0.39vw), 2.03rem); + --radius-sm: 4px; + --radius-lg: 8px; + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 24px; + --space-6: 36px; + --space-7: 48px; + --color-backdrop: var(--light, #00000040) var(--dark, #00000080); + --color-background: var(--light, #fff) var(--dark, #111113); + --color-surface: var(--light, #fff) var(--dark, #111113); + --color-primary-bg: var(--light, #e1f6fd) var(--dark, #112840); + --color-primary-bg-hover: var(--light, #d1f0fa) var(--dark, #113555); + --color-primary-bg-active: var(--light, #bee7f5) var(--dark, #154467); + --color-primary-text: var(--light, #1a81fa) var(--dark, #75c7f0); + --color-neutral-bg-subtle: var(--light, #f9f9fb) var(--dark, #18191b); + --color-neutral-bg: var(--light, #f0f0f3) var(--dark, #212225); + --color-neutral-bg-hover: var(--light, #e8e8ec) var(--dark, #272a2d); + --color-neutral-bg-active: var(--light, #e0e1e6) var(--dark, #2e3135); + --color-neutral-line-weak: var(--light, #e0e1e6) var(--dark, #2e3135); + --color-neutral-line: var(--light, #d9d9e0) var(--dark, #363a3f); + --color-neutral-border: var(--light, #cdced6) var(--dark, #43484e); + --color-neutral-text: var(--light, #60646c) var(--dark, #b0b4ba); + --color-neutral-text-contrast: var(--light, #1c2024) var(--dark, #edeef0); +} + +@media (prefers-color-scheme: dark) { + :root { + color-scheme: dark; + --light: ; + --dark: initial; + } +} + +@media (prefers-color-scheme: light) { + :root { + color-scheme: light; + --light: initial; + --dark: ; + } +} + +*, +::before, +::after { + box-sizing: border-box; +} + +* { + margin: 0; +} + +body { + background-color: var(--color-background); + color: var(--color-neutral-text-contrast); + font-family: var(--font-family-default); + -webkit-font-smoothing: antialiased; + line-height: 1.5; +} + +input, +button { + font: inherit; +} + +p, +h1, +h2, +h3, +h4, +h5, +h6 { + overflow-wrap: break-word; + scroll-margin-block-start: 6rem; +} + +small { + color: var(--color-neutral-text); + font-weight: 400; + font-size: var(--font-size-fluid-x1); +} + +:where(ul[role]) { + margin: 0; + padding: 0; + list-style: none; +} + +hr { + background-color: var(--color-neutral-border); + border: none; + block-size: 1px; + margin: 0; +} + +/* Drawer toggle */ +.icon-btn { + padding: var(--space-2); + border-radius: var(--rounded-full); + color: var(--color-primary-text); + cursor: pointer; + background: none; + border: 0; + flex-shrink: 0; + justify-content: center; + align-items: center; + margin: 0; + transition: all 0.3s; + display: none; +} + +.icon-btn:hover, +.icon-btn:focus-visible { + background-color: var(--color-neutral-bg-hover); +} + +.icon-btn:active { + background-color: var(--color-neutral-bg-active); +} + +/* Header */ +.app-header { + z-index: 3; + gap: var(--space-3); + block-size: 4rem; + padding-block: var(--space-2); + padding-inline: var(--space-4); + border-block-end: 1px solid var(--color-neutral-line); + background-color: var(--color-surface); + align-items: center; + transition: box-shadow 0.2s ease-in-out; + display: flex; + position: sticky; + inset-block-start: 0; +} + +.app-header > :not(.app-header__title) { + flex-shrink: 0; +} + +.app-header__title { + margin-inline: var(--space-3) auto; + outline-offset: var(--space-2); + color: var(--color-neutral-text-contrast); + font-size: var(--font-size-fluid-0); + font-weight: 700; + text-overflow: ellipsis; + white-space: nowrap; + text-decoration: none; + overflow: hidden; +} + +.app-header__title:hover { + color: var(--color-primary-text); +} + +/* Main layout */ +.app-layout__wrapper { + display: grid; + grid-template-columns: 250px minmax(0, 1fr); +} + +.app-layout__sidebar { + background-color: var(--color-backdrop); + z-index: 2; + inset: 4rem 0 0; + block-size: calc(100vh - 4rem); + overflow: hidden; + position: sticky; +} + +.app-layout__sidebar-inner { + min-block-size: 100%; + inline-size: 100%; + padding-block: var(--space-4); + background-color: var(--color-surface); + box-shadow: + 0 4px 12px #64646426, + 0 0 0 1px #0000000d; + max-inline-size: 250px; + overflow: auto; + overscroll-behavior: contain; + height: 100%; +} + +@media (max-width: 1199px) { + .icon-btn { + display: flex; + } + + .app-layout__wrapper { + display: block; + } + + .app-layout__sidebar { + display: none; + } + + #navigation:checked + .app-layout__sidebar { + display: block; + position: fixed; + } +} + +.page__main { + max-inline-size: 100%; + padding-inline: var(--space-4); + padding-block: var(--space-6); + margin-inline: auto; + scroll-margin-block-start: 6rem; +} + +.page__panel { + padding-block: var(--space-6); + padding-inline: var(--space-3); + overflow: auto; + overscroll-behavior: contain; +} + +.page__header { + margin-block-end: var(--space-6); +} + +.page__title { + font-size: var(--font-size-fluid-5); + line-height: 1.3; + margin-block-end: var(--space-3); +} + +.page__description { + font-size: var(--font-size-fluid-1); + margin-block-end: var(--space-6); + line-height: 1.3; +} + +@media (min-width: 1024px) { + .page { + grid-template-columns: minmax(0, 1fr) 350px; + display: grid; + } + + .page__main { + inline-size: 72ch; + } + + .page__header { + display: flex; + justify-content: space-between; + align-items: baseline; + } + + .page__title { + margin-block-end: 0; + } + + .page__panel { + z-index: 1; + block-size: calc(100vh - 4rem); + position: sticky; + inset: 0; + inset-block-start: 4rem; + } +} + +/* Page actions */ +.actions { + display: flex; + gap: var(--space-4); + align-items: center; + font-size: var(--font-size-sm); +} + +.actions__btn { + display: flex; + align-items: center; + padding: var(--space-1); + gap: var(--space-1); + border-radius: var(--radius-sm); + cursor: pointer; + color: var(--color-primary-text); + background: none; + border: none; + text-decoration: none; +} + +.actions__btn:hover { + background: var(--color-neutral-bg-hover); +} + +/* Content */ +.article > * + * { + margin-block: var(--flow-space, 1.5em) 0; +} + +.article h1 + *, +.article h2 + *, +.article h3 + *, +.article h4 + *, +.article h5 + *, +.article h6 + *, +.article p + ul, +.article p + ol { + --flow-space: 0.75em; +} + +.article p { + line-height: 1.6; +} + +.article ul { + list-style-type: disc; +} + +.article ul, +.article ol { + padding-inline-start: var(--space-4); +} + +.article ul ul, +.article ul ol, +.article ol ul, +.article ol ol { + margin-block-start: 0.3em; +} + +.article ul[data-link-list] a:not(:hover), +.article ol[data-link-list] a:not(:hover) { + text-decoration: none; +} + +.article li + li { + margin-block-start: 0.3em; +} + +.article h1 { + font-size: var(--font-size-fluid-4); +} + +.article h2 { + font-size: var(--font-size-fluid-3); +} + +.article h3 { + font-size: var(--font-size-fluid-2); +} + +.article h4 { + font-size: var(--font-size-fluid-1); +} + +.article h5 { + font-size: var(--font-size-fluid-0); +} + +.article h6 { + font-size: var(--font-size-fluid-x2); + text-transform: uppercase; + letter-spacing: 0.01em; +} + +.article h1, +.article h2, +.article h3, +.article h4, +.article h5, +.article h6 { + line-height: 1.25; +} + +.article a { + color: var(--color-primary-text); + text-underline-offset: 5px; + text-decoration-style: dashed; + text-decoration-thickness: 1px; +} + +.article a:hover { + text-decoration-style: solid; +} + +.article table { + border-block-start: 1px solid var(--color-neutral-border); + border-collapse: collapse; + inline-size: 100%; +} + +.article table td, +.article table th { + border-bottom: 1px solid var(--color-neutral-border); + padding-inline: var(--space-1); +} + +.article table td { + padding-block: var(--space-3); +} + +.article table th { + padding-block: var(--space-2); + font-size: var(--font-size-xs); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.01em; +} + +.article blockquote { + border-inline-start: 3px solid var(--color-neutral-line); + padding-inline-start: var(--space-4); +} + +.article blockquote p { + color: var(--color-neutral-text); + font-style: italic; +} + +.article pre, +.article code { + font-family: var(--font-family-mono); + line-height: 1.5; +} + +.article pre { + text-align: start; + white-space: pre; + word-spacing: normal; + word-break: normal; + tab-size: 2; + hyphens: none; + border-radius: var(--radius-lg); + background-color: var(--color-neutral-bg-subtle); + direction: ltr; + padding: 1em; + font-size: 14px; + line-height: 1.375; + overflow: auto; + box-shadow: 1px 1px #0000000d; +} + +.article code { + border-radius: var(--radius-sm); + background-color: var(--color-neutral-bg); + padding: 0.2em 0.3em; + font-size: 0.9em; +} + +.article pre code { + font-size: inherit; + word-break: break-all; + padding: 0; + background-color: #0000 !important; +} + +.article .anchor-link { + outline-offset: 4px; + color: #0000; + margin-inline-start: 0.1em; + text-decoration: none; + transition: color 0.3s; +} + +.article :hover > .anchor-link, +.article .anchor-link:focus { + color: var(--color-neutral-text); +} + +/* Navigation */ +.nav-list__link-with-toggle { + grid-template-columns: minmax(0, 1fr); + display: grid; +} + +.nav-list__link-with-toggle > * { + grid-area: 1 / 1; +} + +.nav-list__toggle { + appearance: none; + cursor: pointer; + background: none; + border: 0; + inline-size: 100%; +} + +.nav-list__toggle:hover { + background-color: var(--color-neutral-bg); +} + +.nav-list__toggle svg { + opacity: 0.75; + margin-inline-start: auto; +} + +.nav-list__toggle[aria-expanded='true'] svg { + transform: rotate(90deg); +} + +.nav-list__link { + gap: var(--space-2); + padding-block: var(--space-2); + padding-inline: calc(var(--space-3) + var(--nav-list-level, 0) * var(--space-4)) var(--space-3); + border-radius: var(--radius-lg); + color: var(--color-neutral-text); + align-items: center; + text-decoration: none; + display: flex; +} + +.nav-list__link + .nav-list__toggle { + justify-self: end; + inline-size: auto; +} + +.nav-list__link:hover { + background-color: var(--color-neutral-bg); +} + +.nav-list__link[aria-current='page'] { + background-color: var(--color-primary-bg); +} + +.nav-list__link[aria-current='page'] + .nav-list__toggle:hover { + background-color: var(--color-primary-bg-hover); +} + +.nav-list__link span { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.nav-list__link svg { + opacity: 0.8; + stroke-width: 1.75px; +} + +.nav-section { + padding-inline: var(--space-4); + margin-block-start: var(--space-7); +} + +.nav-section:first-of-type, +.nav-section.nav-section--continued { + margin-block-start: var(--space-4); +} + +.nav-section:last-of-type { + margin-block-end: var(--space-4); +} + +.nav-section__title { + font-size: var(--font-size-sm); + font-weight: 700; + color: var(--color-neutral-text); + text-transform: uppercase; + letter-spacing: 0.02em; + margin-block-end: var(--space-2); + margin-inline-start: var(--space-3); +} + +/* TOC */ +.toc__label { + color: var(--color-neutral-text); + font-size: var(--font-size-sm); + font-weight: 700; + margin: 0; + margin-block-end: var(--space-2); +} + +.toc__list { + padding-inline-start: var(--space-4); + position: relative; +} + +.toc__list::before { + content: ''; + position: absolute; + inset-inline-start: 0; + background: var(--color-neutral-line-weak); + inline-size: 1px; + inset-block: 0; +} + +.toc__item { + margin-inline-start: calc((var(--level, 1) - 1) * var(--space-4)); +} + +.toc__link { + padding-block: var(--space-1); + color: var(--color-neutral-text); + font-size: var(--font-size-sm); + font-weight: 400; + text-underline-offset: 5px; + text-decoration: none; + display: inline-block; +} + +.toc__link:hover { + text-decoration: underline; +} + +/* Drawer toggle checkbox */ +.visually-hidden { + white-space: nowrap; + position: absolute; + clip: rect(1px, 1px, 1px, 1px) !important; + clip-path: inset(50%) !important; + border: 0 !important; + block-size: 1px !important; + inline-size: 1px !important; + margin: -1px !important; + padding: 0 !important; + overflow: hidden !important; +} + +/* Prism theme */ +code[class*='language-'], +pre[class*='language-'] { + background: var(--color-neutral-bg-subtle); + color: var(--color-neutral-text); + font-family: var(--font-family-mono); + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + line-height: 1.5; + tab-size: 2; + hyphens: none; +} + +/* Selection */ +code[class*='language-']::selection, +code[class*='language-'] *::selection, +pre[class*='language-'] *::selection { + background: hsl(230, 1%, 90%); + color: inherit; +} + +.token.comment, +.token.prolog, +.token.cdata { + color: hsl(230, 4%, 64%); +} + +.token.doctype, +.token.punctuation, +.token.entity { + color: hsl(230, 8%, 24%); +} + +.token.attr-name, +.token.class-name, +.token.boolean, +.token.constant, +.token.number, +.token.atrule { + color: hsl(35, 99%, 36%); +} + +.token.keyword { + color: hsl(301, 63%, 40%); +} + +.token.property, +.token.tag, +.token.symbol, +.token.deleted, +.token.important { + color: hsl(5, 74%, 59%); +} + +.token.selector, +.token.string, +.token.char, +.token.builtin, +.token.inserted, +.token.regex, +.token.attr-value, +.token.attr-value > .token.punctuation { + color: hsl(119, 34%, 47%); +} + +.token.variable, +.token.operator, +.token.function { + color: hsl(221, 87%, 60%); +} + +.token.url { + color: hsl(198, 99%, 37%); +} + +.token.attr-value > .token.punctuation.attr-equals, +.token.special-attr > .token.attr-value > .token.value.css { + color: hsl(230, 8%, 24%); +} + +.language-css .token.selector { + color: hsl(5, 74%, 59%); +} + +.language-css .token.property { + color: hsl(230, 8%, 24%); +} + +.language-css .token.function, +.language-css .token.url > .token.function { + color: hsl(198, 99%, 37%); +} + +.language-css .token.url > .token.string.url { + color: hsl(119, 34%, 47%); +} + +.language-css .token.important, +.language-css .token.atrule .token.rule { + color: hsl(301, 63%, 40%); +} + +.language-javascript .token.operator { + color: hsl(301, 63%, 40%); +} + +.language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation { + color: hsl(344, 84%, 43%); +} + +.language-json .token.operator { + color: hsl(230, 8%, 24%); +} + +.language-json .token.null.keyword { + color: hsl(35, 99%, 36%); +} + +.token.bold { + font-weight: bold; +} + +.token.comment, +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.namespace { + opacity: 0.8; +} + +/* Copy code */ +.code-block { + position: relative; +} + +.code-block__copy { + position: absolute; + inset-block-start: var(--space-2); + inset-inline-end: var(--space-2); + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + border: none; + padding: var(--space-2); + border-radius: var(--radius-lg); + background: var(--color-neutral-bg-subtle); + color: var(--color-neutral-text); + cursor: pointer; + transition: all 300ms ease; +} + +.code-block:not(:hover) .code-block__copy:not(:focus) { + opacity: 0; +} + +.code-block__copy:hover, +.code-block__copy:focus { + background-color: var(--color-neutral-bg); +} + +.code-block__copy svg { + width: 1.125em; + height: 1.125em; +} + +.code-block__copy:not(.copied) svg:first-child, +.code-block__copy.copied svg:last-child { + display: block; +} + +.code-block__copy:not(.copied) svg:last-child, +.code-block__copy.copied svg:first-child { + display: none; +} diff --git a/api-docs/generate.ts b/api-docs/generate.ts new file mode 100644 index 00000000000..f46e59dc47d --- /dev/null +++ b/api-docs/generate.ts @@ -0,0 +1,167 @@ +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs'; +import { join, resolve } from 'path'; +import { TypeContext } from './types.ts'; + +function sortByName(items: any[]) { + return items.sort((a, b) => a.name.localeCompare(b.name)); +} + +function filterPublicApi(items: any[]) { + return sortByName(items.filter((item) => item.privacy === 'public')); +} + +function sanitizeDescription(description: string) { + // Fix links to other elements + description = description.replace(/#\/elements\//gu, '/elements/'); + // Fix links to properties (e.g. #property-dataProvider to #dataprovider) + description = description.replace(/#property-([a-zA-Z]+)/gu, (_, name) => `#${name.toLowerCase()}`); + // Fix links to methods (e.g. #method-updateConfiguration to #updateconfiguration) + description = description.replace(/#method-([a-zA-Z]+)/gu, (_, name) => `#${name.toLowerCase()}`); + + return description; +} + +function renderRelatedTypes(typeContext: TypeContext, typeString: string) { + const relatedTypes = typeContext.findRelatedTypes(typeString); + + if (relatedTypes.length > 0) { + const typeNames = relatedTypes.map((type) => `[${type.name}](#${type.name.toLowerCase()})`).join(', '); + return `See also: ${typeNames}\n\n`; + } + + return ''; +} + +function renderElement(element: any) { + const typeContext = new TypeContext(element); + + let mdContent = ''; + + // Front matter + mdContent += `---\n`; + mdContent += `title: ${element.name}\n`; + mdContent += `description: ${element.name}\n`; + mdContent += `element: ${element.tagname}\n`; + mdContent += `---\n\n`; + + // Description + if (element.description) { + mdContent += `## Description\n\n`; + mdContent += `${sanitizeDescription(element.description)}\n\n`; + } + + // Properties + const publicProperties = filterPublicApi(element.properties); + if (publicProperties.length > 0) { + mdContent += `## Properties\n\n`; + + publicProperties.forEach((prop: any) => { + const propertyType = typeContext.getMemberType(prop.name); + mdContent += `### ${prop.name}\n\n`; + mdContent += `**Type:** \`${propertyType}\`\n\n`; + mdContent += `${sanitizeDescription(prop.description)}\n\n`; + mdContent += renderRelatedTypes(typeContext, propertyType); + }); + } + + // Methods + const publicMethods = filterPublicApi(element.methods); + if (publicMethods.length > 0) { + mdContent += `## Methods\n\n`; + + publicMethods.forEach((method: any) => { + const methodType = typeContext.getMemberType(method.name); + mdContent += `### ${method.name}\n\n`; + mdContent += `**Type:** \`${methodType}\`\n\n`; + mdContent += `${sanitizeDescription(method.description)}\n\n`; + }); + } + + // Static methods + const publicStaticMethods = filterPublicApi(element.staticMethods); + if (publicStaticMethods.length > 0) { + mdContent += `## Static Methods\n\n`; + + publicStaticMethods.forEach((method: any) => { + const methodType = typeContext.getMemberType(method.name); + mdContent += `### ${method.name}\n\n`; + mdContent += `**Type:** \`${methodType}\`\n\n`; + mdContent += `${sanitizeDescription(method.description)}\n\n`; + }); + } + + // Events + if (element.events && element.events.length > 0) { + mdContent += `## Events\n\n`; + + // Custom events + sortByName(element.events).forEach((event: any) => { + const eventType = typeContext.findEventType(event.name); + const eventTypeString = eventType ? `[${eventType.name}](#${eventType.name.toLowerCase()})` : '`CustomEvent`'; + mdContent += `### ${event.name}\n\n`; + mdContent += `**Type:** ${eventTypeString}\n\n`; + mdContent += `${sanitizeDescription(event.description)}\n\n`; + }); + } + + // Related types + const relatedTypes = typeContext.getRelatedTypes(); + if (relatedTypes.length > 0) { + mdContent += `## Types\n\n`; + sortByName(relatedTypes).forEach((type) => { + mdContent += `### ${type.name}\n\n`; + mdContent += '```ts\n'; + mdContent += `${type.declarationText.trim()}\n`; + mdContent += '```\n\n'; + }); + mdContent += '\n'; + } + + return mdContent; +} + +function generate() { + const schemaFilePath = process.argv[2]; + if (!schemaFilePath) { + console.error('Usage: node generate.ts '); + process.exit(1); + } + + const absoluteSchemaPath = resolve(schemaFilePath); + let schema; + try { + const schemaFileContent = readFileSync(absoluteSchemaPath, 'utf-8'); + schema = JSON.parse(schemaFileContent); + } catch (error) { + console.error(`Error reading or parsing schema file ${absoluteSchemaPath}:`, error); + process.exit(1); + } + + const docsPath = resolve(process.cwd(), 'content', 'elements'); + if (!existsSync(docsPath)) { + try { + mkdirSync(docsPath, { recursive: true }); + } catch (error) { + console.error(`Error creating directory ${docsPath}:`, error); + process.exit(1); + } + } + + const publicElements = filterPublicApi(schema.elements); + publicElements.forEach((element: any) => { + const docFile = join(docsPath, `${element.tagname}.md`); + const mdContent = renderElement(element); + + try { + writeFileSync(docFile, mdContent, 'utf-8'); + + console.log(`Generated: ${docFile}`); + } catch (error) { + console.error(`Error writing markdown file ${docFile}:`, error); + } + }); + + console.log('Markdown generation complete.'); +} + +generate(); diff --git a/api-docs/img/favicon.ico b/api-docs/img/favicon.ico new file mode 100644 index 00000000000..35d364d3e21 Binary files /dev/null and b/api-docs/img/favicon.ico differ diff --git a/api-docs/js/copy-code.js b/api-docs/js/copy-code.js new file mode 100644 index 00000000000..abd56b8061d --- /dev/null +++ b/api-docs/js/copy-code.js @@ -0,0 +1,28 @@ +(() => { + const code = document.querySelectorAll('.code-block'); + code.forEach((pre) => { + const button = document.createElement('button'); + button.classList.add('code-block__copy'); + button.title = 'Copy to clipboard'; + button.innerHTML = ` + + + `; + + button.addEventListener('click', () => { + navigator.clipboard.writeText(pre.textContent.trim()); + button.classList.add('copied'); + + setTimeout(() => { + button.classList.remove('copied'); + }, 1000); + }); + + pre.appendChild(button); + }); +})(); diff --git a/api-docs/js/copy-markdown.js b/api-docs/js/copy-markdown.js new file mode 100644 index 00000000000..73dc3eec0e0 --- /dev/null +++ b/api-docs/js/copy-markdown.js @@ -0,0 +1,26 @@ +(() => { + const copyButton = document.getElementById('copy-markdown'); + copyButton?.addEventListener('click', () => { + const currentUrl = window.location.href; + const plainTextUrl = `${currentUrl.replace('elements', 'markdown').replace(/\/$/u, '')}.md`; + + fetch(plainTextUrl) + .then((res) => res.text()) + .then((text) => { + navigator.clipboard + .writeText(text) + .then(() => { + copyButton.querySelector('span').textContent = 'Copied!'; + setTimeout(() => { + copyButton.querySelector('span').textContent = 'Copy as MD'; + }, 2000); + }) + .catch((err) => { + console.error('Failed to copy text: ', err); + }); + }) + .catch((err) => { + console.error('Failed to fetch text: ', err); + }); + }); +})(); diff --git a/api-docs/package.json b/api-docs/package.json new file mode 100644 index 00000000000..1c960c54dd8 --- /dev/null +++ b/api-docs/package.json @@ -0,0 +1,22 @@ +{ + "name": "api-docs", + "version": "25.0.0-alpha14", + "private": true, + "description": "Documentation site for Vaadin web components API", + "license": "Apache-2.0", + "author": "Vaadin Ltd", + "type": "module", + "scripts": { + "start": "eleventy --serve", + "build": "eleventy", + "generate": "tsx generate.ts" + }, + "dependencies": { + "@11ty/eleventy": "^3.1.2", + "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.2", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^9.2.0", + "node-html-parser": "^7.0.1", + "tsx": "^4.20.3" + } +} diff --git a/api-docs/types.ts b/api-docs/types.ts new file mode 100644 index 00000000000..9e1ec55a8b3 --- /dev/null +++ b/api-docs/types.ts @@ -0,0 +1,206 @@ +import * as ts from 'typescript'; + +function findPropertyAccessForMember(node: ts.Node, memberName: string): ts.PropertyAccessExpression | undefined { + if (ts.isPropertyAccessExpression(node) && node.name.text === memberName) { + return node; + } + let found: ts.PropertyAccessExpression | undefined; + ts.forEachChild(node, (child) => { + if (!found) { + found = findPropertyAccessForMember(child, memberName); + } + }); + return found; +} + +type RelatedTypeDeclaration = ts.ClassDeclaration | ts.InterfaceDeclaration | ts.TypeAliasDeclaration; + +interface RelatedTypeInfo { + name: string; + declarationText: string; +} + +export class TypeContext { + private program: ts.Program; + private sourceFile: ts.SourceFile; + private checker: ts.TypeChecker; + private relatedTypes = new Map(); + private elementSchema: any; + + constructor(elementSchema: any) { + this.elementSchema = elementSchema; + + const modulePath = `../${elementSchema.path}`; + const className = elementSchema.name; + const configPath = ts.findConfigFile('../', ts.sys.fileExists, 'tsconfig.json'); + if (!configPath) throw new Error('tsconfig.json not found'); + + const configFile = ts.readConfigFile(configPath, ts.sys.readFile); + const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, './'); + + // Generate and compile a small TS program that just accesses all members of the element class, + // which makes retrieving their types easier. + const accessExpressions: string[] = []; + + elementSchema.properties.forEach((property: any) => { + accessExpressions.push(`({} as ${className}).${property.name}`); + }); + elementSchema.methods.forEach((method: any) => { + accessExpressions.push(`({} as ${className}).${method.name}`); + }); + elementSchema.staticMethods.forEach((method: any) => { + accessExpressions.push(`${className}.${method.name}`); + }); + + const compilerHost = ts.createCompilerHost({}); + const originalGetSourceFile = compilerHost.getSourceFile; + compilerHost.getSourceFile = (fileName: any, languageVersion: any) => { + if (fileName === 'test.ts') { + return ts.createSourceFile( + fileName, + ` + import { ${className} } from '${modulePath}'; + ${accessExpressions.join(';\n')} + `, + languageVersion, + true, + ts.ScriptKind.TS, + ); + } + // For all other files, delegate to the original method to load from disk + return originalGetSourceFile.call(compilerHost, fileName, languageVersion); + }; + this.program = ts.createProgram({ + rootNames: ['test.ts'], + options: parsed.options, + host: compilerHost, + }); + + const sourceFile = this.program.getSourceFile('test.ts'); + if (!sourceFile) { + throw new Error(`Source file 'test.ts' not found in the program.`); + } + this.sourceFile = sourceFile; + this.checker = this.program.getTypeChecker(); + } + + getMemberType(memberName: string): string { + const accessExpression = findPropertyAccessForMember(this.sourceFile, memberName); + if (!accessExpression) { + throw new Error(`Property access for member '${memberName}' not found.`); + } + const type = this.checker.getTypeAtLocation(accessExpression); + return this.checker.typeToString(type); + } + + private findDeclaration(typeName: string): RelatedTypeDeclaration | undefined { + // Only consider declaration files in monorepo packages + const relatedSourceFiles = this.program + .getSourceFiles() + .filter((file) => file.fileName.includes(`/packages/`)) + .filter((file) => file.isDeclarationFile); + + for (const sourceFile of relatedSourceFiles) { + for (const statement of sourceFile.statements) { + // Check for exported class + if ( + ts.isClassDeclaration(statement) && + statement.name && + statement.name.text === typeName && + statement.modifiers && + statement.modifiers.some((mod) => mod.kind === ts.SyntaxKind.ExportKeyword) + ) { + return statement; + } + // Check for exported interface + if ( + ts.isInterfaceDeclaration(statement) && + statement.name.text === typeName && + statement.modifiers && + statement.modifiers.some((mod) => mod.kind === ts.SyntaxKind.ExportKeyword) + ) { + return statement; + } + // Check for exported type alias + if ( + ts.isTypeAliasDeclaration(statement) && + statement.name.text === typeName && + statement.modifiers && + statement.modifiers.some((mod) => mod.kind === ts.SyntaxKind.ExportKeyword) + ) { + return statement; + } + } + } + return undefined; + } + + findRelatedTypes(typeString: string): RelatedTypeInfo[] { + // Naive approach to extract possible type names from the type string + const typeNames = typeString + .replace(/[^a-zA-Z0-9_]/gu, ' ') + .split(' ') + .map((type) => type.trim()) + .filter((type) => !!type); + + // Filter out some basic types, as well as mixins + const basicTypes = new Set([ + 'string', + 'number', + 'boolean', + 'void', + 'any', + 'unknown', + 'null', + 'undefined', + 'object', + 'Array', + 'Promise', + 'Function', + 'Date', + 'RegExp', + ]); + const customTypeNames = typeNames + .filter((type) => !basicTypes.has(type)) + .filter((type) => !type.endsWith('Mixin') && !type.endsWith('MixinClass')); + + // Skip types already found + const unknownTypeNames = customTypeNames.filter((type) => !this.relatedTypes.has(type)); + const foundTypeInfos = unknownTypeNames + .map((name) => this.findDeclaration(name)) + .filter((declaration) => !!declaration); + + // Store found results as related types + foundTypeInfos.forEach((declaration) => { + if (!this.relatedTypes.has(declaration.name!.text)) { + const sourceFile = declaration.getSourceFile(); + const text = sourceFile.text.substring(declaration.pos, declaration.end); + const relatedType: RelatedTypeInfo = { + name: declaration.name!.text, + declarationText: text, + }; + this.relatedTypes.set(declaration.name!.text, relatedType); + + // Scan the declaration for nested type usages + this.findRelatedTypes(text); + } + }); + + return Array.from(this.relatedTypes.values().filter((type) => typeNames.includes(type.name))); + } + + findEventType(eventName: string): RelatedTypeInfo | undefined { + // kebab-case to upper camel case conversion + let typeName = eventName + .split('-') + .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) + .join(''); + typeName = `${this.elementSchema.name}${typeName}Event`; + + return this.findRelatedTypes(typeName)[0]; + } + + getRelatedTypes(): RelatedTypeInfo[] { + return Array.from(this.relatedTypes.values()); + } +} diff --git a/eslint.config.js b/eslint.config.js index 51b4da09d6f..b5240cae9de 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -45,6 +45,7 @@ export default [ ignores: [ 'coverage/**/*.js', 'dist/**/*.js', + 'api-docs/dist/**/*.js', 'packages/**/vendor/*.js', 'packages/**/dist/*.js', 'packages/**/test/dom/__snapshots__/*.snap.js', @@ -115,7 +116,7 @@ export default [ }, }, { - files: ['packages/**/*', 'test/integration/**', 'dev/**/*'], + files: ['packages/**/*', 'test/integration/**', 'dev/**/*', 'api-docs/js/**'], languageOptions: { globals: { ...globals.browser, @@ -172,7 +173,14 @@ export default [ }, }, { - files: ['scripts/**/*.js', '*.config.js', 'wtr-utils.js', 'custom-rules/**/*.js', 'packages/**/gulpfile.js'], + files: [ + 'scripts/**/*.js', + '*.config.js', + 'wtr-utils.js', + 'custom-rules/**/*.js', + 'packages/**/gulpfile.js', + 'api-docs/.eleventy.js', + ], languageOptions: { globals: { ...globals.node, diff --git a/lerna.json b/lerna.json index c88844c4931..e859461f24c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "packages": ["test/*", "packages/*"], + "packages": ["test/*", "packages/*", "api-docs"], "npmClient": "yarn", "version": "25.0.0-alpha14" } diff --git a/package.json b/package.json index ddd4bbed710..a399b03c6a8 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "type": "module", "scripts": { "analyze": "polymer analyze packages/**/vaadin-*.js > analysis.json && node scripts/prepareDocs.js && node scripts/buildWebtypes.js && node scripts/generateLumoAutoCompleteCss.js", + "api-docs:start": "yarn analyze && yarn workspace api-docs generate ../analysis.json && yarn workspace api-docs start", + "api-docs:build": "yarn analyze && yarn workspace api-docs generate ../analysis.json && yarn workspace api-docs build", "debug": "yarn test --watch", "debug:it": "yarn test --watch --config web-test-runner-it.config.js", "dist": "rimraf dist && yarn analyze && rollup -c rollup.config.js && cp analysis.json dist", @@ -94,6 +96,7 @@ }, "workspaces": [ "test/*", - "packages/*" + "packages/*", + "api-docs" ] } diff --git a/yarn.lock b/yarn.lock index 0dc5da97f49..dfdd745d096 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,126 @@ # yarn lockfile v1 +"@11ty/dependency-tree-esm@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@11ty/dependency-tree-esm/-/dependency-tree-esm-2.0.0.tgz#5d13f0ec64ca13d4f948d54a262faf4c1cab8508" + integrity sha512-+4ySOON4aEAiyAGuH6XQJtxpGSpo6nibfG01krgix00sqjhman2+UaDUopq6Ksv8/jBB3hqkhsHe3fDE4z8rbA== + dependencies: + "@11ty/eleventy-utils" "^2.0.1" + acorn "^8.14.0" + dependency-graph "^1.0.0" + normalize-path "^3.0.0" + +"@11ty/dependency-tree@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@11ty/dependency-tree/-/dependency-tree-4.0.0.tgz#4dd02685ed26ff9f4efae150b1a77155f73f640c" + integrity sha512-PTOnwM8Xt+GdJmwRKg4pZ8EKAgGoK7pedZBfNSOChXu8MYk2FdEsxdJYecX4t62owpGw3xK60q9TQv/5JI59jw== + dependencies: + "@11ty/eleventy-utils" "^2.0.1" + +"@11ty/eleventy-dev-server@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@11ty/eleventy-dev-server/-/eleventy-dev-server-2.0.8.tgz#0986a33416fdf95aa21f98ce1608137ce3f15c05" + integrity sha512-15oC5M1DQlCaOMUq4limKRYmWiGecDaGwryr7fTE/oM9Ix8siqMvWi+I8VjsfrGr+iViDvWcH/TVI6D12d93mA== + dependencies: + "@11ty/eleventy-utils" "^2.0.1" + chokidar "^3.6.0" + debug "^4.4.0" + finalhandler "^1.3.1" + mime "^3.0.0" + minimist "^1.2.8" + morphdom "^2.7.4" + please-upgrade-node "^3.2.0" + send "^1.1.0" + ssri "^11.0.0" + urlpattern-polyfill "^10.0.0" + ws "^8.18.1" + +"@11ty/eleventy-plugin-bundle@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@11ty/eleventy-plugin-bundle/-/eleventy-plugin-bundle-3.0.6.tgz#b8a92e9b0357ab0f26e5434abe5c33ebb31bed10" + integrity sha512-wlEIMa1SEe6HE6ZyREEnPQiTw72337a2MPkyn0D1IzrqHrKU9euB17mv27LnnnyKvMJamCCqtU0985F5yyDL8g== + dependencies: + "@11ty/eleventy-utils" "^2.0.2" + debug "^4.4.0" + posthtml-match-helper "^2.0.3" + +"@11ty/eleventy-plugin-syntaxhighlight@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@11ty/eleventy-plugin-syntaxhighlight/-/eleventy-plugin-syntaxhighlight-5.0.2.tgz#22688060cb05cc25ce1a51cce0f87033aa8b2477" + integrity sha512-T6xVVRDJuHlrFMHbUiZkHjj5o1IlLzZW+1IL9eUsyXFU7rY2ztcYhZew/64vmceFFpQwzuSfxQOXxTJYmKkQ+A== + dependencies: + prismjs "^1.30.0" + +"@11ty/eleventy-utils@^2.0.1", "@11ty/eleventy-utils@^2.0.2", "@11ty/eleventy-utils@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@11ty/eleventy-utils/-/eleventy-utils-2.0.7.tgz#40fa604864d64e98412f4f068a34379b471beddd" + integrity sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ== + +"@11ty/eleventy@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@11ty/eleventy/-/eleventy-3.1.2.tgz#a3b400babd31e0244ae9284bb60c811d773dca5d" + integrity sha512-IcsDlbXnBf8cHzbM1YBv3JcTyLB35EK88QexmVyFdVJVgUU6bh9g687rpxryJirHzo06PuwnYaEEdVZQfIgRGg== + dependencies: + "@11ty/dependency-tree" "^4.0.0" + "@11ty/dependency-tree-esm" "^2.0.0" + "@11ty/eleventy-dev-server" "^2.0.8" + "@11ty/eleventy-plugin-bundle" "^3.0.6" + "@11ty/eleventy-utils" "^2.0.7" + "@11ty/lodash-custom" "^4.17.21" + "@11ty/posthtml-urls" "^1.0.1" + "@11ty/recursive-copy" "^4.0.2" + "@sindresorhus/slugify" "^2.2.1" + bcp-47-normalize "^2.3.0" + chokidar "^3.6.0" + debug "^4.4.1" + dependency-graph "^1.0.0" + entities "^6.0.1" + filesize "^10.1.6" + gray-matter "^4.0.3" + iso-639-1 "^3.1.5" + js-yaml "^4.1.0" + kleur "^4.1.5" + liquidjs "^10.21.1" + luxon "^3.6.1" + markdown-it "^14.1.0" + minimist "^1.2.8" + moo "^0.5.2" + node-retrieve-globals "^6.0.1" + nunjucks "^3.2.4" + picomatch "^4.0.2" + please-upgrade-node "^3.2.0" + posthtml "^0.16.6" + posthtml-match-helper "^2.0.3" + semver "^7.7.2" + slugify "^1.6.6" + tinyglobby "^0.2.14" + +"@11ty/lodash-custom@^4.17.21": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz#a8d2e25a47ee3bb58b71cde4edc2ae8dd3d1b269" + integrity sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw== + +"@11ty/posthtml-urls@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@11ty/posthtml-urls/-/posthtml-urls-1.0.1.tgz#3e0680c0ea96d25e24b4afd0f2b156467c2323c8" + integrity sha512-6EFN/yYSxC/OzYXpq4gXDyDMlX/W+2MgCvvoxf11X1z76bqkqFJ8eep5RiBWfGT5j0323a1pwpelcJJdR46MCw== + dependencies: + evaluate-value "^2.0.0" + http-equiv-refresh "^2.0.1" + list-to-array "^1.1.0" + parse-srcset "^1.0.2" + +"@11ty/recursive-copy@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@11ty/recursive-copy/-/recursive-copy-4.0.2.tgz#6349f2e0a38c7229ff32773ba164e8e9eb2e3fc6" + integrity sha512-174nFXxL/6KcYbLYpra+q3nDbfKxLxRTNVY1atq2M1pYYiPfHse++3IFNl8mjPFsd7y2qQjxLORzIjHMjL3NDQ== + dependencies: + errno "^1.0.0" + junk "^3.1.0" + maximatch "^0.1.0" + slash "^3.0.0" + "@75lb/deep-merge@^1.1.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@75lb/deep-merge/-/deep-merge-1.1.2.tgz#6aa53d9730e64a159075da65d3bd057abfe1dde0" @@ -130,11 +250,11 @@ "@babel/types" "^7.27.3" "@babel/parser@^7.16.2", "@babel/parser@^7.27.2", "@babel/parser@^7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.3.tgz#1b7533f0d908ad2ac545c4d05cbe2fb6dc8cfaaf" - integrity sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e" + integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== dependencies: - "@babel/types" "^7.27.3" + "@babel/types" "^7.28.0" "@babel/template@^7.27.2": version "7.27.2" @@ -158,10 +278,10 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.27.1", "@babel/types@^7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.3.tgz#c0257bedf33aad6aad1f406d35c44758321eb3ec" - integrity sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw== +"@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.0": + version "7.28.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" + integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" @@ -208,9 +328,9 @@ tslib "^2.4.0" "@emnapi/runtime@^1.1.0", "@emnapi/runtime@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" - integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== + version "1.4.5" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.5.tgz#c67710d0661070f38418b6474584f159de38aba9" + integrity sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg== dependencies: tslib "^2.4.0" @@ -509,9 +629,9 @@ "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.4" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" + integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.9": version "0.3.25" @@ -1464,6 +1584,21 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== +"@sindresorhus/slugify@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/slugify/-/slugify-2.2.1.tgz#fa2e2e25d6e1e74a2eeb5e2c37f5ccc516ed2c4b" + integrity sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw== + dependencies: + "@sindresorhus/transliterate" "^1.0.0" + escape-string-regexp "^5.0.0" + +"@sindresorhus/transliterate@^1.0.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz#2309fff65a868047e6d2dd70dec747c5b36a8327" + integrity sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ== + dependencies: + escape-string-regexp "^5.0.0" + "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -2427,6 +2562,11 @@ JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" +a-sync-waterfall@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7" + integrity sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA== + abbrev@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" @@ -2452,7 +2592,14 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.15.0, acorn@^8.8.2: +acorn-walk@^8.3.4: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.15.0, acorn@^8.8.2: version "8.15.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== @@ -2644,6 +2791,11 @@ array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: call-bound "^1.0.3" is-array-buffer "^3.0.5" +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ== + array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -2676,11 +2828,23 @@ array-slice@^1.0.0: resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + array.prototype.findlast@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" @@ -2737,7 +2901,7 @@ arraybuffer.prototype.slice@^1.0.4: get-intrinsic "^1.2.6" is-array-buffer "^3.0.4" -arrify@^1.0.1: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== @@ -2747,6 +2911,11 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== +asap@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + assertion-error@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" @@ -2910,6 +3079,28 @@ basic-ftp@^5.0.2: resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== +bcp-47-match@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/bcp-47-match/-/bcp-47-match-2.0.3.tgz#603226f6e5d3914a581408be33b28a53144b09d0" + integrity sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ== + +bcp-47-normalize@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz#00f7de9dfdd0f6901c048083be5ac60903bf4f7a" + integrity sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q== + dependencies: + bcp-47 "^2.0.0" + bcp-47-match "^2.0.0" + +bcp-47@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bcp-47/-/bcp-47-2.1.0.tgz#7e80734c3338fe8320894981dccf4968c3092df6" + integrity sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w== + dependencies: + is-alphabetical "^2.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" @@ -3316,7 +3507,7 @@ cheerio@^1.0.0, cheerio@^1.0.0-rc.12: undici "^6.19.5" whatwg-mimetype "^4.0.0" -chokidar@^3.5.3: +chokidar@^3.5.3, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -3367,9 +3558,9 @@ ci-info@^3.2.0, ci-info@^3.7.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== ci-info@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" - integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== + version "4.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.0.tgz#c39b1013f8fdbd28cd78e62318357d02da160cd7" + integrity sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ== clean-css@~5.3.2: version "5.3.2" @@ -3599,6 +3790,11 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -3990,6 +4186,13 @@ debounce@^1.2.0: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== +debug@2.6.9, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.6, debug@^4.4.0, debug@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" @@ -3997,13 +4200,6 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, d dependencies: ms "^2.1.3" -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -4154,6 +4350,11 @@ dependency-graph@^0.11.0: resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== +dependency-graph@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-1.0.0.tgz#bb5e85aec1310bc13b22dbd76e3196c4ee4c10d2" + integrity sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg== + deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -4226,7 +4427,7 @@ domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@^4.2.0, domhandler@^4.3.1: +domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== @@ -4408,6 +4609,11 @@ encodeurl@^1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@^2.0.0, encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encoding-sniffer@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5" @@ -4442,15 +4648,20 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -entities@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.0.tgz#09c9e29cb79b0a6459a9b9db9efb418ac5bb8e51" - integrity sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw== +entities@^6.0.0, entities@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== env-paths@^2.2.0, env-paths@^2.2.1: version "2.2.1" @@ -4472,6 +4683,13 @@ err-code@^2.0.2: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== +errno@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/errno/-/errno-1.0.0.tgz#0ea47d701864accf996412f09e29b4dc2cf3856d" + integrity sha512-3zV5mFS1E8/1bPxt/B0xxzI1snsg3uSCIh6Zo1qKg6iMw93hzPANk9oBFzSFBFrwuVoQuE3rLoouAUfwOAj1wQ== + dependencies: + prr "~1.0.1" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -4614,7 +4832,7 @@ es-to-primitive@^1.3.0: is-date-object "^1.0.5" is-symbol "^1.0.4" -esbuild@^0.25.0: +esbuild@^0.25.0, esbuild@~0.25.0: version "0.25.1" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.1.tgz#a16b8d070b6ad4871935277bda6ccfe852e3fa2f" integrity sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ== @@ -4650,7 +4868,7 @@ escalade@^3.1.1, escalade@^3.2.0: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-html@^1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== @@ -4665,6 +4883,11 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + escodegen@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" @@ -4939,6 +5162,13 @@ eslint@^9.29.0: natural-compare "^1.4.0" optionator "^0.9.3" +esm-import-transformer@^3.0.3: + version "3.0.5" + resolved "https://registry.yarnpkg.com/esm-import-transformer/-/esm-import-transformer-3.0.5.tgz#ad66aa1bd94e85fc655f1f354978846af173e107" + integrity sha512-1GKLvfuMnnpI75l8c6sHoz0L3Z872xL5akGuBudgqTDPv4Vy6f2Ec7jEMKTxlqWl/3kSvNbHELeimJtnqgYniw== + dependencies: + acorn "^8.15.0" + espree@^10.0.1, espree@^10.4.0: version "10.4.0" resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" @@ -4992,6 +5222,11 @@ etag@^1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +evaluate-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/evaluate-value/-/evaluate-value-2.0.0.tgz#bb7169ab4a49fb76b7ab5631c7d327797fd8e65f" + integrity sha512-VonfiuDJc0z4sOO7W0Pd130VLsXN6vmBWZlrog1mCb/o7o/Nl5Lr25+Kj/nkCCAhG+zqeeGjxhkK9oHpkgTHhQ== + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -5069,6 +5304,13 @@ exponential-backoff@^3.1.1: resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" @@ -5244,6 +5486,11 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" +filesize@^10.1.6: + version "10.1.6" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.6.tgz#31194da825ac58689c0bce3948f33ce83aabd361" + integrity sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w== + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -5256,6 +5503,19 @@ filter-obj@^1.1.0: resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== +finalhandler@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + find-replace@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" @@ -5401,6 +5661,11 @@ formdata-polyfill@^4.0.10: dependencies: fetch-blob "^3.1.2" +fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" + integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== + fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -5464,11 +5729,16 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@2.3.2, fsevents@~2.3.2: +fsevents@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -5632,7 +5902,7 @@ get-symbol-description@^1.1.0: es-errors "^1.3.0" get-intrinsic "^1.2.6" -get-tsconfig@^4.10.1: +get-tsconfig@^4.10.1, get-tsconfig@^4.7.5: version "4.10.1" resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== @@ -5910,6 +6180,16 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + gulp-cli@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-3.1.0.tgz#92590e9b209142b176c95ad5c7066d2592017268" @@ -6121,6 +6401,11 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + header-case@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" @@ -6203,6 +6488,16 @@ htmlparser2@^10.0.0: domutils "^3.2.1" entities "^6.0.0" +htmlparser2@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" + integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.2" + domutils "^2.8.0" + entities "^3.0.1" + htmlparser2@^8.0.0: version "8.0.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" @@ -6236,7 +6531,12 @@ http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-errors@2.0.0: +http-equiv-refresh@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-equiv-refresh/-/http-equiv-refresh-2.0.1.tgz#2816aee5ccce42734a13ecfe79dacc0db29c39b1" + integrity sha512-XJpDL/MLkV3dKwLzHwr2dY05dYNfBNlyPu4STQ8WvKCFdc6vC5tPXuq28of663+gHVg03C+16pHHs/+FmmDjcw== + +http-errors@2.0.0, http-errors@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== @@ -6539,6 +6839,19 @@ is-absolute@^1.0.0: is-relative "^1.0.0" is-windows "^1.0.1" +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" @@ -6636,11 +6949,21 @@ is-date-object@^1.0.5, is-date-object@^1.1.0: call-bound "^1.0.2" has-tostringtag "^1.0.2" +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" @@ -6714,6 +7037,11 @@ is-ip@^3.1.0: dependencies: ip-regex "^4.0.0" +is-json@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-json/-/is-json-2.0.1.tgz#6be166d144828a131d686891b983df62c39491ff" + integrity sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA== + is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" @@ -6947,6 +7275,11 @@ isexe@^3.1.1: resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== +iso-639-1@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/iso-639-1/-/iso-639-1-3.1.5.tgz#e8205aceeeea0f64d6b12f5fac6a943b0d5b452c" + integrity sha512-gXkz5+KN7HrG0Q5UGqSMO2qB9AsbEeyLP54kF1YrMsIxmu+g4BdB7rflReZTSTZGpfj8wywu6pfPBCylPIzGQA== + isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" @@ -7156,6 +7489,11 @@ jszip@^3.10.1: readable-stream "~2.3.6" setimmediate "^1.0.5" +junk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" + integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== + junk@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/junk/-/junk-4.0.1.tgz#7ee31f876388c05177fe36529ee714b07b50fbed" @@ -7197,7 +7535,7 @@ keyv@^5.4.0: dependencies: "@keyv/serialize" "^1.1.0" -kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -7209,6 +7547,11 @@ klaw-sync@^6.0.0: dependencies: graceful-fs "^4.1.11" +kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + known-css-properties@^0.37.0: version "0.37.0" resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.37.0.tgz#10ebe49b9dbb6638860ff8a002fb65a053f4aec5" @@ -7478,6 +7821,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + dependencies: + uc.micro "^2.0.0" + lint-staged@^15.2.9: version "15.2.9" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.9.tgz#bf70d40b6b192df6ad756fb89822211615e0f4da" @@ -7494,6 +7844,18 @@ lint-staged@^15.2.9: string-argv "~0.3.2" yaml "~2.5.0" +liquidjs@^10.21.1: + version "10.21.1" + resolved "https://registry.yarnpkg.com/liquidjs/-/liquidjs-10.21.1.tgz#5867dac16f1a74552e1ca5fdc976c0fa4bcdf527" + integrity sha512-NZXmCwv3RG5nire3fmIn9HsOyJX3vo+ptp0yaXUHAMzSNBhx74Hm+dAGJvscUA6lNqbLuYfXgNavRQ9UbUJhQQ== + dependencies: + commander "^10.0.0" + +list-to-array@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/list-to-array/-/list-to-array-1.1.0.tgz#ca7dff640606433cac75cbe8446acd864b15bf6f" + integrity sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g== + listr2@~8.2.4: version "8.2.4" resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.2.4.tgz#486b51cbdb41889108cb7e2c90eeb44519f5a77f" @@ -7721,6 +8083,11 @@ lru-cache@^8.0.4: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== +luxon@^3.6.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.1.tgz#9bd09aa84a56afb00c57ea78a8ec5bd16eb24ec0" + integrity sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg== + make-dir@4.0.0, make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -7769,6 +8136,23 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== +markdown-it-anchor@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-9.2.0.tgz#89375d9a2a79336403ab7c4fd36b1965cc45e5c8" + integrity sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg== + +markdown-it@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== + dependencies: + argparse "^2.0.1" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" + marked@^15.0.11: version "15.0.11" resolved "https://registry.yarnpkg.com/marked/-/marked-15.0.11.tgz#08a8d12c285e16259e44287b89ce0d871c9d55e8" @@ -7794,6 +8178,16 @@ mathml-tag-names@^2.1.3: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== +maximatch@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/maximatch/-/maximatch-0.1.0.tgz#86cd8d6b04c9f307c05a6b9419906d0360fb13a2" + integrity sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A== + dependencies: + array-differ "^1.0.0" + array-union "^1.0.1" + arrify "^1.0.0" + minimatch "^3.0.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -7804,6 +8198,11 @@ mdn-data@2.12.2: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.12.2.tgz#9ae6c41a9e65adf61318b32bff7b64fbfb13f8cf" integrity sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA== +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -7864,6 +8263,11 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -7871,6 +8275,18 @@ mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.27, mime-types@~2.1.24, dependencies: mime-db "1.52.0" +mime-types@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce" + integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== + dependencies: + mime-db "^1.54.0" + +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -7927,7 +8343,7 @@ minimatch@^10.0.0, "minimatch@^9.0.3 || ^10.0.1": dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.0, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -7964,10 +8380,10 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^2.0.1: version "2.0.1" @@ -8060,6 +8476,16 @@ modify-values@^1.0.1: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== +moo@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" + integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== + +morphdom@^2.7.4: + version "2.7.7" + resolved "https://registry.yarnpkg.com/morphdom/-/morphdom-2.7.7.tgz#72559af781357a4eb2169a0a578acb76ff7e8abf" + integrity sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -8210,6 +8636,14 @@ node-gyp@^10.0.0, node-gyp@^10.2.0: tar "^6.2.1" which "^4.0.0" +node-html-parser@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-7.0.1.tgz#e3056550bae48517ebf161a0b0638f4b0123dfe3" + integrity sha512-KGtmPY2kS0thCWGK0VuPyOS+pBKhhe8gXztzA2ilAOhbUbxa9homF1bOyKvhGzMLXUoRds9IOmr/v5lr/lqNmA== + dependencies: + css-select "^5.1.0" + he "1.2.0" + node-machine-id@1.1.12: version "1.1.12" resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" @@ -8220,6 +8654,15 @@ node-releases@^2.0.19: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== +node-retrieve-globals@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/node-retrieve-globals/-/node-retrieve-globals-6.0.1.tgz#7c2559304c292d627646bc4494cdcece5c55879e" + integrity sha512-j0DeFuZ/Wg3VlklfbxUgZF/mdHMTEiEipBb3q0SpMMbHaV3AVfoUQF8UGxh1s/yjqO0TgRZd4Pi/x2yRqoQ4Eg== + dependencies: + acorn "^8.14.1" + acorn-walk "^8.3.4" + esm-import-transformer "^3.0.3" + nopt@^7.0.0, nopt@^7.2.1: version "7.2.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" @@ -8379,6 +8822,15 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +nunjucks@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.4.tgz#f0878eef528ce7b0aa35d67cc6898635fd74649e" + integrity sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ== + dependencies: + a-sync-waterfall "^1.0.0" + asap "^2.0.3" + commander "^5.1.0" + "nx@>=17.1.2 < 21": version "20.8.1" resolved "https://registry.yarnpkg.com/nx/-/nx-20.8.1.tgz#f63136b3f7c5a33a3ed1d6145e8507d9bcc77bc0" @@ -8515,7 +8967,7 @@ ol@10.6.0: pbf "4.0.1" rbush "^4.0.0" -on-finished@^2.3.0: +on-finished@2.4.1, on-finished@^2.3.0, on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -8885,6 +9337,11 @@ parse-path@^7.0.0: dependencies: protocols "^2.0.0" +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== + parse-url@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" @@ -8926,7 +9383,7 @@ parse5@^7.0.0, parse5@^7.1.2: dependencies: entities "^4.5.0" -parseurl@^1.3.2: +parseurl@^1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -9147,6 +9604,13 @@ playwright@^1.53.0: optionalDependencies: fsevents "2.3.2" +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + plexer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/plexer/-/plexer-2.0.0.tgz#d5ff402f7fb79cce592101c193807d0b085ea41f" @@ -9261,6 +9725,33 @@ postcss@^8.5.0, postcss@^8.5.6: picocolors "^1.1.1" source-map-js "^1.2.1" +posthtml-match-helper@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/posthtml-match-helper/-/posthtml-match-helper-2.0.3.tgz#04afcadd3a3306bf0445b6d6ead79d4e4083c6d6" + integrity sha512-p9oJgTdMF2dyd7WE54QI1LvpBIkNkbSiiECKezNnDVYhGhD1AaOnAkw0Uh0y5TW+OHO8iBdSqnd8Wkpb6iUqmw== + +posthtml-parser@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.11.0.tgz#25d1c7bf811ea83559bc4c21c189a29747a24b7a" + integrity sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw== + dependencies: + htmlparser2 "^7.1.1" + +posthtml-render@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-3.0.0.tgz#97be44931496f495b4f07b99e903cc70ad6a3205" + integrity sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA== + dependencies: + is-json "^2.0.1" + +posthtml@^0.16.6: + version "0.16.6" + resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.16.6.tgz#e2fc407f67a64d2fa3567afe770409ffdadafe59" + integrity sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ== + dependencies: + posthtml-parser "^0.11.0" + posthtml-render "^3.0.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -9292,7 +9783,7 @@ pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" -prismjs@^1.11.0: +prismjs@^1.11.0, prismjs@^1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9" integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== @@ -9390,6 +9881,11 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -9398,6 +9894,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -9469,6 +9970,11 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + raw-body@^2.3.3: version "2.5.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" @@ -9957,6 +10463,19 @@ sax@^1.4.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + semver-greatest-satisfied-range@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz#4b62942a7a1ccbdb252e5329677c003bac546fe7" @@ -9979,6 +10498,23 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semve resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +send@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212" + integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw== + dependencies: + debug "^4.3.5" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + fresh "^2.0.0" + http-errors "^2.0.0" + mime-types "^3.0.1" + ms "^2.1.3" + on-finished "^2.4.1" + range-parser "^1.2.1" + statuses "^2.0.1" + sentence-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" @@ -10208,6 +10744,11 @@ slice-ansi@^7.1.0: ansi-styles "^6.2.1" is-fullwidth-code-point "^5.0.0" +slugify@^1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" + integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== + smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" @@ -10269,9 +10810,9 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== spacetrim@0.11.59: version "0.11.59" @@ -10350,6 +10891,13 @@ ssri@^10.0.0, ssri@^10.0.6: dependencies: minipass "^7.0.3" +ssri@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-11.0.0.tgz#ab39fc4382264839d1803ee7c53d00e5fa467739" + integrity sha512-aZpUoMN/Jj2MqA4vMCeiKGnc/8SuSyHbGSBdgFbZxP8OJGF/lFkIuElzPxsN0q8TQQ+prw3P4EDfB3TBHHgfXw== + dependencies: + minipass "^7.0.3" + stable-hash@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" @@ -10370,6 +10918,11 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + stop-iteration-iterator@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" @@ -10575,6 +11128,11 @@ strip-ansi@^7.0.1, strip-ansi@^7.1.0: dependencies: ansi-regex "^6.0.1" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -11024,6 +11582,16 @@ tsscmp@1.0.6: resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== +tsx@^4.20.3: + version "4.20.3" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.20.3.tgz#f913e4911d59ad177c1bcee19d1035ef8dd6e2fb" + integrity sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ== + dependencies: + esbuild "~0.25.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + ttf2eot@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ttf2eot/-/ttf2eot-3.1.0.tgz#c8971af7c68c5b996d8cfdb8847cdadfbf195e05" @@ -11209,6 +11777,11 @@ ua-parser-js@^1.0.33: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + uglify-js@^3.1.4: version "3.17.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" @@ -11288,7 +11861,7 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==