diff --git a/.cspell.json b/.cspell.json index 16cee1b..dffdbf5 100644 --- a/.cspell.json +++ b/.cspell.json @@ -1,89 +1,4 @@ { - "version": "0.2", - "words": [ - "0b5vr", - "apos", - "Astro", - "astrojs", - "ayamflow", - "Bansal", - "beforeunload", - "bindability", - "buttongrid", - "camerakit", - "cameraring", - "camerawheel", - "colspan", - "crossorigin", - "cubicbezier", - "discoverability", - "Dmitriy", - "donmccurdy", - "Draggability", - "Fira", - "Florian", - "fontsource", - "FOUC", - "FOUSC", - "fpsgraph", - "frontmatter", - "Goliński", - "hashchange", - "Hiroki", - "Jakub", - "jankiness", - "jetblack", - "JUCE", - "KitDocs", - "kitschpatrol", - "Kokubun", - "Koźniewski", - "Krzysztof", - "labelledby", - "lerp", - "linkedom", - "linkify", - "markdownit", - "Matheus", - "Matija", - "Menlo", - "metehus", - "Mika", - "Nikiforov", - "noopener", - "noreferrer", - "pagefind", - "Palash", - "Panebuilder", - "Panepaint", - "phenomnomnominal", - "radiogrid", - "repalash", - "resizability", - "rgba", - "Roboto", - "rseidelsohn", - "Schödler", - "shoedler", - "skeuomorphic", - "STUI", - "stylelint", - "stylelintrc", - "svelteness", - "Sveltepress", - "tbody", - "thead", - "Threlte", - "tsconfigs", - "tsquery", - "tweakpane", - "unplugin", - "wght" - ], - "language": "en,en-US", - "ignorePaths": ["package.json", "pnpm-lock.yaml", "*.svg", "*.mp4"], - "ignoreRegExpList": ["tp-.+", "tweakpane-plugin-.+"], - "useGitignore": true, - "enabled": true, - "enableFiletypes": ["astro", "svelte", "mdx", "patch"] + "import": "@kitschpatrol/cspell-config/main.json", + "ignorePaths": ["package.json", "pnpm-lock.yaml", "*.svg", "*.mp4"] } diff --git a/.eslintignore b/.eslintignore index fb14596..0e92242 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,15 +1,3 @@ -.DS_Store -node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example -/dist - -# Ignore files for PNPM, NPM and YARN -pnpm-lock.yaml -package-lock.json -yarn.lock -/scratch +.svelte-kit +.astro +*dist/ diff --git a/.eslintrc.cjs b/.eslintrc.cjs index e5cbbdb..0a852c3 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -3,139 +3,176 @@ // Overrides for svelte-tweakpane-ui // CubicBezier, Quaternion, etc. const perfectionistSortOverrides = { - 'custom-groups': { - value: 'value', - // preM: '[a-l]*', - min: 'min*', - max: 'max*', - r: 'r', - g: 'g', - b: 'b', - h: 'h', - s: 's', - l: 'l', - v: 'v', - a: 'a', - x: '@(optionsX|x)', - y: '@(optionsY|y)', - z: '@(optionsZ|z)', - w: '@(optionsW|w)', - cb1: ['x1', 'y1'], - cb2: ['x2', 'y2'] - // width: 'width', - // height: 'height' - // postM: '[n-z]*' - }, - groups: [ - 'value', - ['x', 'y', 'z'], - 'x', - 'y', - 'z', - 'w', - 'h', - 's', - 'l', - 'v', - 'r', - 'g', - 'b', - 'a', - 'min', - 'max', - 'cb1', - 'cb2', - 'unknown' - ] + 'custom-groups': { + value: 'value', + // preM: '[a-l]*', + min: 'min*', + max: 'max*', + r: 'r', + g: 'g', + b: 'b', + h: 'h', + s: 's', + l: 'l', + v: 'v', + a: 'a', + x: '@(optionsX|x)', + y: '@(optionsY|y)', + z: '@(optionsZ|z)', + w: '@(optionsW|w)', + cb1: ['x1', 'y1'], + cb2: ['x2', 'y2'] + // width: 'width', + // height: 'height' + // postM: '[n-z]*' + }, + groups: [ + 'value', + ['x', 'y', 'z'], + 'x', + 'y', + 'z', + 'w', + 'h', + 's', + 'l', + 'v', + 'r', + 'g', + 'b', + 'a', + 'min', + 'max', + 'cb1', + 'cb2', + 'unknown' + ] }; const perfectionistSvelteSortOverrides = { - 'custom-groups': { - value: '?(bind:)value', - min: '?(bind:)min', - max: '?(bind:)max', - 'bind-this': 'bind:this', - 'bind-directives': 'bind:*', - class: '@(class|class:*)', - style: '@(style|style:*)', - 'style-props': '--style-props', - this: 'this', - 'use-directives': 'use:*', - 'on-directives': 'on:*' - }, - groups: [ - 'bind-this', - 'value', - 'min', - 'max', - ['bind-directives', 'use-directives', 'on-directives'], - 'this', - 'class', - 'style', - 'style-props', - 'unknown' - ] + 'custom-groups': { + value: '?(bind:)value', + min: '?(bind:)min', + max: '?(bind:)max', + 'bind-this': 'bind:this', + 'bind-directives': 'bind:*', + class: '@(class|class:*)', + style: '@(style|style:*)', + 'style-props': '--style-props', + this: 'this', + 'use-directives': 'use:*', + 'on-directives': 'on:*' + }, + groups: [ + 'bind-this', + 'value', + 'min', + 'max', + ['bind-directives', 'use-directives', 'on-directives'], + 'this', + 'class', + 'style', + 'style-props', + 'unknown' + ] }; module.exports = { - env: { - browser: true, - es2017: true, - node: true - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:svelte/recommended', - 'prettier', - 'plugin:perfectionist/recommended-natural' - ], - overrides: [ - { - files: ['*.svelte'], - parser: 'svelte-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser' - }, - rules: { - // https://github.com/nuxt/eslint-config/issues/140 - // https://github.com/typescript-eslint/typescript-eslint/blob/1cf9243/docs/getting-started/linting/FAQ.md#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors - 'no-undef': 'off', - '@typescript-eslint/ban-types': 'off' - } - }, - { - files: ['src/routes/**/*.svelte', 'src/lib-docs/**/*.svelte'], - rules: { - '@typescript-eslint/no-unused-vars': 'off', - 'svelte/no-at-html-tags': 'off' - } - } - ], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 2020, - extraFileExtensions: ['.svelte'], - sourceType: 'module' - }, - // implicit above? - // plugins: ['@typescript-eslint'], - root: true, - rules: { - // possible perfectionist conflicts - '@typescript-eslint/adjacent-overload-signatures': 'off', - '@typescript-eslint/sort-type-constituents': 'off', - 'import/order': 'off', - 'perfectionist/sort-imports': [ - 'error', - { - 'newlines-between': 'never' - } - ], - 'perfectionist/sort-object-types': ['error', perfectionistSortOverrides], - 'perfectionist/sort-objects': ['error', perfectionistSortOverrides], - 'perfectionist/sort-svelte-attributes': ['error', perfectionistSvelteSortOverrides], - 'react/jsx-sort-props': 'off', - 'sort-imports': 'off' - } + extends: ['@kitschpatrol/eslint-config'], + env: { + browser: true, + es2022: true, + node: true + }, + overrides: [ + { + files: ['*.svelte'], + parser: 'svelte-eslint-parser', + parserOptions: { + parser: '@typescript-eslint/parser' + }, + rules: { + // https://github.com/nuxt/eslint-config/issues/140 + // https://github.com/typescript-eslint/typescript-eslint/blob/1cf9243/docs/getting-started/linting/FAQ.md#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + 'no-undef': 'off', + '@typescript-eslint/ban-types': 'off', + 'unicorn/no-useless-undefined': 'off', + 'unicorn/no-null': 'off', + 'unicorn/prefer-export-from': 'off' + } + }, + { + files: ['src/routes/**/*.svelte', 'src/lib-docs/**/*.svelte'], + rules: { + '@typescript-eslint/no-unused-vars': 'off', + 'svelte/no-at-html-tags': 'off' + } + }, + { + files: ['*.astro'], + parser: 'astro-eslint-parser', + parserOptions: { + extraFileExtensions: ['.astro'], + parser: '@typescript-eslint/parser' + }, + rules: { + 'no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + destructuredArrayIgnorePattern: '^_' + } + ] + } + } + ], + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 2020, + extraFileExtensions: ['.svelte'], + sourceType: 'module' + }, + // implicit above? + // plugins: ['@typescript-eslint'], + root: true, + rules: { + // possible perfectionist conflicts + '@typescript-eslint/adjacent-overload-signatures': 'off', + '@typescript-eslint/sort-type-constituents': 'off', + 'import/order': 'off', + 'perfectionist/sort-imports': [ + 'error', + { + 'newlines-between': 'never' + } + ], + 'unicorn/prefer-string-replace-all': 'off', + 'unicorn/filename-case': 'off', + 'unicorn/no-await-expression-member': 'off', + 'unicorn/prevent-abbreviations': [ + 'error', + { + allowList: { + Prop: true, + Props: true, + prop: true, + props: true, + JSDoc: true, + JSDocRecord: true, + paneRef: true, + jsDoc: true, + JsDoc: true, + componentJsDocRecordSchema: true, + Ref: true, + ref: true, + env: true + } + } + ], + 'perfectionist/sort-object-types': ['error', perfectionistSortOverrides], + 'perfectionist/sort-objects': ['error', perfectionistSortOverrides], + 'perfectionist/sort-svelte-attributes': ['error', perfectionistSvelteSortOverrides], + 'react/jsx-sort-props': 'off', + 'sort-imports': 'off' + } }; diff --git a/.gitignore b/.gitignore index 88b0017..cb901d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .DS_Store node_modules /build -/dist +*dist/ /.svelte-kit /package .env @@ -9,7 +9,6 @@ node_modules !.env.example vite.config.js.timestamp-* vite.config.ts.timestamp-* -/scratch # generated kit files /src/examples/components diff --git a/.markdownlint.json b/.markdownlint.json index 1223661..25358db 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,8 +1,5 @@ { - "MD010": false, - "MD013": false, - "MD029": false, - "MD033": false, - "MD034": false, - "MD041": false + "extends": "./node_modules/@kitschpatrol/markdownlint-config/main.json", + "no-inline-html": false, + "first-line-h1": false } diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..bd67935 --- /dev/null +++ b/.npmrc @@ -0,0 +1,11 @@ +publish-branch=main + +# required for pnpm +# public-hoist-pattern[]=@types* TBD +public-hoist-pattern[]=@kitschpatrol/npm-config +public-hoist-pattern[]=@kitschpatrol/vscode-config +public-hoist-pattern[]=*cspell* +public-hoist-pattern[]=*eslint* +public-hoist-pattern[]=*markdownlint* +public-hoist-pattern[]=*prettier* +public-hoist-pattern[]=*stylelint* diff --git a/.prettierignore b/.prettierignore index a751904..a8a297e 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,15 +1,5 @@ -.DS_Store -/node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example -dist -.astro - -# Ignore files for PNPM, NPM and YARN pnpm-lock.yaml -package-lock.json -yarn.lock +*.svg +.astro +.svelte-kit +*dist/ diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index c374530..0000000 --- a/.prettierrc +++ /dev/null @@ -1,29 +0,0 @@ -{ - "useTabs": true, - "semi": true, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, - "plugins": ["prettier-plugin-pkg", "prettier-plugin-svelte", "prettier-plugin-astro"], - "overrides": [ - { - "files": [".*", "*.json", "*.md", "*.mdx", "*.toml", "*.yml"], - "options": { - "useTabs": false - } - }, - { - "files": "*.svelte", - "options": { - "plugins": ["prettier-plugin-svelte"], - "parser": "svelte" - } - }, - { - "files": "*.astro", - "options": { - "parser": "astro" - } - } - ] -} diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..80c6534 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,27 @@ +import sharedConfig from '@kitschpatrol/prettier-config'; + +/** @type {import("prettier").Config} */ +const config = { + ...sharedConfig, + trailingComma: 'none', // legacy + printWidth: 100, // legacy + overrides: [ + ...sharedConfig.overrides, + { + files: ['*.json', '*.md', '*.mdx', '*.toml', '*.yml'], + options: { + useTabs: false + } + }, + { + files: ['*.sh'], + options: { + parser: 'sh', + plugins: ['prettier-plugin-sh'] + } + } + ], + plugins: [...sharedConfig.plugins, 'prettier-plugin-astro'] +}; + +export default config; diff --git a/.stylelintrc.cjs b/.stylelintrc.cjs index 94290c4..ba95a65 100644 --- a/.stylelintrc.cjs +++ b/.stylelintrc.cjs @@ -1,31 +1,3 @@ -const { propertyGroups } = require('stylelint-config-clean-order'); - -const propertiesOrder = propertyGroups.map((properties) => ({ - noEmptyLineBetween: true, - emptyLineBefore: 'never', // Don't add empty lines between order groups. - properties -})); - module.exports = { - extends: ['stylelint-config-standard', 'stylelint-config-clean-order', 'stylelint-config-html'], - rules: { - 'color-hex-length': null, - 'comment-empty-line-before': null, - 'selector-class-pattern': null, - 'selector-pseudo-class-no-unknown': [ - true, - { - ignorePseudoClasses: ['global'] - } - ], - 'declaration-empty-line-before': null, - // 'at-rule-empty-line-before': 'never', - 'order/properties-order': [ - propertiesOrder, - { - severity: 'error', - unspecified: 'bottomAlphabetical' - } - ] - } + extends: ['@kitschpatrol/stylelint-config'] }; diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c9d2742..30e4baf 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,11 +1,14 @@ { "recommendations": [ + "astro-build.astro-vscode", + "davidanson.vscode-markdownlint", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", - "svelte.svelte-vscode", - "stkb.rewrap", + "pucelle.run-on-save", "streetsidesoftware.code-spell-checker", - "astro-build.astro-vscode" + "stylelint.vscode-stylelint", + "svelte.svelte-vscode", + "unifiedjs.vscode-mdx" ], "unwantedRecommendations": [] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 1f7fd15..5614090 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,20 +1,37 @@ { - // Enable ESLint auto-fix on save + "[astro]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[ignore]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[svelte]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "cSpell.enabled": true, "editor.codeActionsOnSave": { "source.fixAll": true }, "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true, // optional - "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact", "svelte"], + "editor.formatOnSave": true, + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "svelte", + "astro" + ], "prettier.documentSelectors": [ "**/*.astro", "**/*.svelte", "**/.prettierignore", "**/.npmrc", - "**/.eslintignore" + "**/.eslintignore", + "**/.sh" ], - "stylelint.validate": ["css", "html", "svelte"], - "stylelint.configBasedir": ".", - "rewrap.wrappingColumn": 100, - "cSpell.noConfigSearch": false + "stylelint.validate": ["css", "html", "svelte", "astro"], + "[shellscript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + } } diff --git a/README.md b/README.md index 4a38217..c5b27b5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # svelte-tweakpane-ui -npm package +[![NPM Package](https://img.shields.io/npm/v/svelte-tweakpane-ui.svg)](https://npmjs.com/package/svelte-tweakpane-ui) ## Overview diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg index be5ec7b..3f6cc4c 100644 --- a/docs/public/favicon.svg +++ b/docs/public/favicon.svg @@ -1,25 +1,52 @@ - - + + svelte-tweakpane-logo - - - - - + + + + + - + \ No newline at end of file + diff --git a/docs/scripts/migrate-index.sh b/docs/scripts/migrate-index.sh index b65b0f0..7e7f4e3 100644 --- a/docs/scripts/migrate-index.sh +++ b/docs/scripts/migrate-index.sh @@ -3,8 +3,8 @@ # https://electricui.com/blog/switching-to-cloudflare-pages#how-to-disable-the-trailing-slash-on-cloudflare-pages find ./dist -name 'index.html' -mindepth 2 -type f \ - -exec sh \ - -c 'parent="$(dirname "$1")"; mv "$1" "$parent/../$(basename "$parent").html";' \ - find-sh {} \; + -exec sh \ + -c 'parent="$(dirname "$1")"; mv "$1" "$parent/../$(basename "$parent").html";' \ + find-sh {} \; find ./dist -empty -type d -delete diff --git a/docs/src/components/docs/Acknowledgments.astro b/docs/src/components/docs/Acknowledgments.astro index 255f290..296bf03 100644 --- a/docs/src/components/docs/Acknowledgments.astro +++ b/docs/src/components/docs/Acknowledgments.astro @@ -1,12 +1,12 @@ --- -import { getCollection, type CollectionEntry } from 'astro:content'; +import { type CollectionEntry, getCollection } from 'astro:content'; interface Props { - scope: 'lib' | 'docs' | 'all'; + scope: 'all' | 'docs' | 'lib'; } -function titleCase(str: string) { - return str +function titleCase(text: string) { + return text .split(' ') .map((word) => { return word.charAt(0).toUpperCase() + word.slice(1); @@ -32,48 +32,48 @@ const data = ( ) ) // each collection entry - .reduce((acc, collection) => { + .reduce((accumulator, collection) => { return [ - ...acc, - ...Object.values(collection.data).reduce((acc, packages) => { - return [...acc, ...packages]; + ...accumulator, + ...Object.values(collection.data).reduce((accumulator, packages) => { + return [...accumulator, ...packages]; }, [] as LicenseEntry[]) ]; }, [] as LicenseEntry[]); // Get unique list of publisher names const names = data - .reduce((acc: string[], { author }) => { + .reduce((accumulator: string[], { author }) => { if (author) { // Split compound comma-delimited publishers as needed - author.split(/\s*(?:\sand\s|,|&)\s*/).forEach((subItem) => { + for (const subItem of author.split(/\s*(?:\sand\s|,|&)\s*/)) { const subPublisher = titleCase(getNameFromEmail(subItem.trim())); - if (subPublisher && !acc.includes(subPublisher)) { - acc.push(subPublisher); + if (subPublisher && !accumulator.includes(subPublisher)) { + accumulator.push(subPublisher); } - }); + } } - return acc; + return accumulator; }, []) // Exclude me and some other vague things .filter((name) => !['Eric Mika', 'contributors', 'inc.'].includes(name.toLowerCase())) // Filter out case-insensitive duplicates, but keep the version with the most capitalization - .filter((name, i, arr) => { + .filter((name, index_, array) => { const lower = name.toLowerCase(); - const index = arr.findIndex((n) => n.toLowerCase() === lower); - return index === i; + const index = array.findIndex((n) => n.toLowerCase() === lower); + return index === index_; }) // remove duplicate names like Microsoft, Microsoft Corp., Microsoft Corporation, keep the one without the Corp or Corporation suffix - .filter((name, i, arr) => { + .filter((name, index_, array) => { const lower = name.toLowerCase(); - const index = arr.findIndex( + const index = array.findIndex( (n) => n.toLowerCase().replace(/(corp\.|corporation)$/, '') === lower ); - return index === i; + return index === index_; }) // Don't break names - .map((n) => n.replace(/ /, '\u00a0')) + .map((n) => n.replace(/ /, '\u00A0')) // Sort by last name .sort((a, b) => { return a.localeCompare(b); diff --git a/docs/src/components/docs/Component.astro b/docs/src/components/docs/Component.astro index 5a9d141..5c395b2 100644 --- a/docs/src/components/docs/Component.astro +++ b/docs/src/components/docs/Component.astro @@ -1,11 +1,11 @@ --- -// bypasses any markdown customization in starlight... -import { marked } from 'marked'; -import Heading from './Heading.astro'; -import PropTable from './PropTable.astro'; +import { type ComponentData, allPropConditions, allProps } from '../../utils/prop-utils'; import DynamicPropAdmonition from './DynamicPropAdmonition.mdx'; import ExampleWrapper from './ExampleWrapper.astro'; -import { allProps, allPropConditions, type ComponentData } from '../../utils/prop-utils'; +import Heading from './Heading.astro'; +import PropTable from './PropTable.astro'; +// bypasses any markdown customization in starlight... +import { marked } from 'marked'; interface Props { componentData: ComponentData; @@ -45,7 +45,7 @@ const hasSlots = !!data?.slots.length; {hasDynamicProps ? ( <> - + ) : ( diff --git a/docs/src/components/docs/ComponentCount.astro b/docs/src/components/docs/ComponentCount.astro index 2e1b1a3..dde6a48 100644 --- a/docs/src/components/docs/ComponentCount.astro +++ b/docs/src/components/docs/ComponentCount.astro @@ -1,5 +1,5 @@ --- -import { getCollection, type CollectionEntry } from 'astro:content'; +import { type CollectionEntry, getCollection } from 'astro:content'; const count = (await getCollection('docs')).filter((component: CollectionEntry<'docs'>) => { return component.data.componentData !== undefined; diff --git a/docs/src/components/docs/ComponentList.astro b/docs/src/components/docs/ComponentList.astro index fd2371b..3b2f040 100644 --- a/docs/src/components/docs/ComponentList.astro +++ b/docs/src/components/docs/ComponentList.astro @@ -1,5 +1,5 @@ --- -import { getCollection, type CollectionEntry } from 'astro:content'; +import { type CollectionEntry, getCollection } from 'astro:content'; import { marked } from 'marked'; interface Props { @@ -15,8 +15,8 @@ const components = (await getCollection('docs')).filter((component: CollectionEn ); }); -async function firstLine(str: string): Promise { - return await marked.parseInline(str.split('\n\n')[0]); +async function firstLine(text: string): Promise { + return await marked.parseInline(text.split('\n\n')[0]); } --- @@ -40,8 +40,8 @@ async function firstLine(str: string): Promise { diff --git a/docs/src/components/overrides/TableOfContents.astro b/docs/src/components/overrides/TableOfContents.astro index 67ec4a6..cd862f1 100644 --- a/docs/src/components/overrides/TableOfContents.astro +++ b/docs/src/components/overrides/TableOfContents.astro @@ -1,29 +1,30 @@ --- +import { allProps } from '../../utils/prop-utils'; +import StarlightTableOfContents from '@astrojs/starlight/components/TableOfContents.astro'; import type { Props } from '@astrojs/starlight/props'; import { slug } from 'github-slugger'; -import StarlightTableOfContents from '@astrojs/starlight/components/TableOfContents.astro'; -import { allProps } from '../../utils/prop-utils'; const { componentData } = Astro.props.entry.data; import type { ComponentProp } from '../../utils/prop-utils'; // mutate props to add ToC items on component pages // bad work-around for https://github.com/withastro/astro/issues/5084 +function propHeadings(propData: ComponentProp[]) { + return propData.map((prop) => tocItemForHeading(prop.name, 3)); +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function tocItemForHeading(heading: string, depth: number, children: any[] = []) { + return { + children: children, + depth, + slug: slug(heading), + text: heading + }; +} + let localProps = Astro.props; if (componentData && localProps.toc) { - function propHeadings(propData: ComponentProp[]) { - return propData.map((prop) => tocItemForHeading(prop.name, 3)); - } - - function tocItemForHeading(heading: string, depth: number, children: any[] = []) { - return { - depth, - slug: slug(heading), - text: heading, - children: children - }; - } - if (componentData.jsDocs && componentData.jsDocs['example']) localProps.toc.items.push( tocItemForHeading('Example', 2, [tocItemForHeading('Demo', 3), tocItemForHeading('Code', 3)]) diff --git a/docs/src/components/overrides/ThemeSelect.astro b/docs/src/components/overrides/ThemeSelect.astro index 5343164..ff32f89 100644 --- a/docs/src/components/overrides/ThemeSelect.astro +++ b/docs/src/components/overrides/ThemeSelect.astro @@ -21,22 +21,22 @@ const { BASE_URL } = import.meta.env; diff --git a/docs/src/content/config.ts b/docs/src/content/config.ts index 3c5b8b9..2a96aa3 100644 --- a/docs/src/content/config.ts +++ b/docs/src/content/config.ts @@ -19,7 +19,7 @@ const acknowledgmentsSchema = z.record( ); // component documentation schema -// must be kept in sync with ./scripts/generate-doc-data.ts +// must be kept in sync with ./scripts/generate-documentation-data.ts const componentJsDocRecordSchema = z.record(z.string()); @@ -34,7 +34,7 @@ const componentPartInfoSchema = z.array( const componentPropConditionSchema = z.record(z.union([z.boolean(), z.number(), z.string()])); -const componentDocSchema = z.object({ +const componentDocumentSchema = z.object({ doc: z.string(), dynamicProps: z .array( @@ -59,7 +59,7 @@ const universalFrontmatter = z.object({ }); const componentFrontmatter = z.object({ - componentData: componentDocSchema.optional(), + componentData: componentDocumentSchema.optional(), note: z.string().optional() }); diff --git a/docs/src/content/docs/docs/getting-started.md b/docs/src/content/docs/docs/getting-started.md index a1508fb..6f02832 100644 --- a/docs/src/content/docs/docs/getting-started.md +++ b/docs/src/content/docs/docs/getting-started.md @@ -79,7 +79,7 @@ If you're starting from an empty SvelteKit starter project, you can add a button ```diff lang="svelte" title="/src/routes/+page.svelte" + +

Welcome to SvelteKit

diff --git a/docs/src/content/docs/docs/index.mdx b/docs/src/content/docs/docs/index.mdx index b48a609..75f9d29 100644 --- a/docs/src/content/docs/docs/index.mdx +++ b/docs/src/content/docs/docs/index.mdx @@ -16,7 +16,7 @@ import ExampleWrapper from '../../../components/docs/ExampleWrapper.astro'; idiomatic, reactive, type-safe, carefully-crafted [Svelte](https://svelte.dev) components. -The library makes it easy to quickly and declaratively add knobs and dials to your projects using components that feel like they belong in the DOM. It also augments Tweakpane with a few [extra features](./docs/features) for your convenience and enjoyment. +The library makes it easy to quickly and declaratively add knobs and dials to your projects using components that feel like they belong in the DOM. It also augments Tweakpane with a few [extra features](/svelte-tweakpane-ui/docs/features) for your convenience and enjoyment. The components should be useful for integrating controls and value monitoring in parametrically driven artworks or simulations. For some use cases, it could also present a viable alternative to traditional component libraries altogether. diff --git a/docs/src/content/docs/docs/plugins.mdx b/docs/src/content/docs/docs/plugins.mdx index 1b14202..0a2cee3 100644 --- a/docs/src/content/docs/docs/plugins.mdx +++ b/docs/src/content/docs/docs/plugins.mdx @@ -99,17 +99,17 @@ The following plugins are included with _Svelte Tweakpane UI_, and are ready to If you'd like to see additional Tweakpane plugins either integrated with _Svelte Tweakpane UI_ or added to the list of candidates below, please open an [issue](https://github.com/kitschpatrol/svelte-tweakpane-ui/issues) or a pull request: -- [tweakpane-plugin-thumbnail-list](https://github.com/kitschpatrol/tweakpane-plugin-thumbnail-list) (forked from [donmccurdy](https://github.com/donmccurdy/tweakpane-plugin-thumbnail-list) and ported to v4) v4 -- [tweakpane-plugin-infodump](https://github.com/doersino/tweakpane-plugin-infodump) v3 -- [tweakpane-plugin-chromatic](https://github.com/brunoimbrizi/tweakpane-plugin-chromatic) v3 -- [tweakpane-table](https://github.com/amir-arad/tweakpane-table) v3 -- [tweakpane-plugin-search-list](https://github.com/hirohe/tweakpane-plugin-search-list) v3 -- [midi-control](https://github.com/mollerse/midi-control) v3 -- [tweakpane-plugin-media](https://github.com/leochocolat/tweakpane-plugin-media) v3 -- [tweakpane-plugin-file-import](https://github.com/LuchoTurtle/tweakpane-plugin-file-import) v3 -- [tweakpane-plugin-audio-player](https://github.com/brunoimbrizi/tweakpane-plugin-audio-player) v3 -- [tweakpane-plugin-grouplist](https://github.com/pierogis/tweakpane-plugin-grouplist) v3 -- [tweakpane-media](https://github.com/vnvyvu/tweakpane-media) v3 -- [tweakpane-multiple-select-plugin](https://github.com/IvanLi-CN/tweakpane-multiple-select-plugin) v3 +- [tweakpane-plugin-thumbnail-list](https://github.com/kitschpatrol/tweakpane-plugin-thumbnail-list) (forked from [donmccurdy](https://github.com/donmccurdy/tweakpane-plugin-thumbnail-list) and ported to v4) v4 +- [tweakpane-plugin-infodump](https://github.com/doersino/tweakpane-plugin-infodump) v3 +- [tweakpane-plugin-chromatic](https://github.com/brunoimbrizi/tweakpane-plugin-chromatic) v3 +- [tweakpane-table](https://github.com/amir-arad/tweakpane-table) v3 +- [tweakpane-plugin-search-list](https://github.com/hirohe/tweakpane-plugin-search-list) v3 +- [midi-control](https://github.com/mollerse/midi-control) v3 +- [tweakpane-plugin-media](https://github.com/leochocolat/tweakpane-plugin-media) v3 +- [tweakpane-plugin-file-import](https://github.com/LuchoTurtle/tweakpane-plugin-file-import) v3 +- [tweakpane-plugin-audio-player](https://github.com/brunoimbrizi/tweakpane-plugin-audio-player) v3 +- [tweakpane-plugin-grouplist](https://github.com/pierogis/tweakpane-plugin-grouplist) v3 +- [tweakpane-media](https://github.com/vnvyvu/tweakpane-media) v3 +- [tweakpane-multiple-select-plugin](https://github.com/IvanLi-CN/tweakpane-multiple-select-plugin) v3 Note that all of the above plugins target Tweakpane v3, and will need to be updated to work with Tweakpane v4 before they can be integrated with _Svelte Tweakpane UI_. diff --git a/docs/src/middleware.ts b/docs/src/middleware.ts index cea8a52..c73fdb0 100644 --- a/docs/src/middleware.ts +++ b/docs/src/middleware.ts @@ -10,11 +10,11 @@ const { BASE_URL } = import.meta.env; type APIContext = Parameters[0]; const componentLinks = (await getCollection('docs')).reduce( - (acc, component) => { + (accumulator, component) => { if (component.data.componentData !== undefined) { - acc[component.data.componentData.name] = `${component.slug}`; + accumulator[component.data.componentData.name] = `${component.slug}`; } - return acc; + return accumulator; }, {} as Record ); @@ -56,7 +56,7 @@ function defineDomTransformMiddleware( // document is mutated function linkifyTerms(node: Node, termDictionary: { [key: string]: string }, base: string = '') { if (node.nodeType === node.ELEMENT_NODE && node.parentNode && node.ownerDocument) { - const text = (node as HTMLElement).innerText || ''; + const text = (node as HTMLElement).textContent || ''; if (Object.keys(termDictionary).includes(text)) { const link = node.ownerDocument.createElement('a'); @@ -66,7 +66,7 @@ function linkifyTerms(node: Node, termDictionary: { [key: string]: string }, bas // wrap the node in the link node.parentNode.insertBefore(link, node); - link.appendChild(node); + link.append(node); } } } @@ -75,11 +75,9 @@ const externalLinkAnnotator = defineDomTransformMiddleware((document, context) = const localHostname = 'localhost'; const { hostname: ourHostname } = context.site ?? { hostname: '' }; // not on hero pages - ( - document.querySelectorAll( - 'html:not([data-has-hero]) div.sl-markdown-content a' - ) as NodeListOf - ).forEach((element) => { + for (const element of document.querySelectorAll( + 'html:not([data-has-hero]) div.sl-markdown-content a' + ) as NodeListOf) { try { const { hostname } = new URL(element.href); if (hostname !== ourHostname && hostname !== localHostname && hostname !== '') { @@ -89,24 +87,24 @@ const externalLinkAnnotator = defineDomTransformMiddleware((document, context) = } catch { // assume invalid URLs are internal } - }); + } }); const automaticComponentLinks = defineDomTransformMiddleware((document, context) => { // filter out own page const componentLinksNotSelf = Object.entries(componentLinks).reduce( - (acc, [componentName, componentSlug]) => { + (accumulator, [componentName, componentSlug]) => { if (context.props.slug !== componentSlug) { - acc[`<${componentName}>`] = componentSlug; + accumulator[`<${componentName}>`] = componentSlug; } - return acc; + return accumulator; }, {} as Record ); - [...document.getElementsByTagName('code')].forEach((element) => { + for (const element of document.querySelectorAll('code')) { linkifyTerms(element, componentLinksNotSelf, BASE_URL); - }); + } }); const automaticPropLinks = defineDomTransformMiddleware((document, context) => { @@ -115,29 +113,29 @@ const automaticPropLinks = defineDomTransformMiddleware((document, context) => { const props = allProps(context.props.entry.data.componentData); const propLinks = props.reduce( - (acc, prop) => { - acc[prop.name] = `#${slug(prop.name)}`; - return acc; + (accumulator, prop) => { + accumulator[prop.name] = `#${slug(prop.name)}`; + return accumulator; }, {} as Record ); - [...document.getElementsByTagName('code')].forEach((element) => { + for (const element of document.querySelectorAll('code')) { linkifyTerms(element, propLinks); - }); + } } }); const addLinkPrefix = defineDomTransformMiddleware((document) => { - ['href', 'src'].forEach((attribute) => { - document.querySelectorAll(`[${attribute}]`).forEach((element) => { - const attr = element.getAttribute(attribute); - if (attr?.startsWith('/_astro/')) { + for (const attribute of ['href', 'src']) { + for (const element of document.querySelectorAll(`[${attribute}]`)) { + const attribute_ = element.getAttribute(attribute); + if (attribute_?.startsWith('/_astro/')) { // add the base prefix - element.setAttribute(attribute, `${stripTrailingSlash(BASE_URL ?? '')}${attr}`); + element.setAttribute(attribute, `${stripTrailingSlash(BASE_URL ?? '')}${attribute_}`); } - }); - }); + } + } }); const stripLinkSuffix = defineDomTransformMiddleware((document, context) => { @@ -149,7 +147,7 @@ const stripLinkSuffix = defineDomTransformMiddleware((document, context) => { // Find and modify anchor elements const anchorElements = document.querySelectorAll('a'); - anchorElements.forEach((anchor) => { + for (const anchor of anchorElements) { let href = anchor.getAttribute('href'); if (href) { for (const baseValue of baseValues) { @@ -161,7 +159,7 @@ const stripLinkSuffix = defineDomTransformMiddleware((document, context) => { } } } - }); + } } }); @@ -170,10 +168,11 @@ const addHeadingAnchorLinks = defineDomTransformMiddleware((document) => { const tocLinks = [...document.querySelectorAll('starlight-toc nav a')] as HTMLAnchorElement[]; const headings = tocLinks.map((link) => { const id = link.getAttribute('href')?.slice(1); - return document.getElementById(id || ''); + + return document.querySelector(id ? `#${id}` : ''); }) as HTMLHeadingElement[]; - headings.forEach((heading) => { + for (const heading of headings) { // skip h1 if (heading.nodeName !== 'H1') { // create anchor link @@ -182,21 +181,21 @@ const addHeadingAnchorLinks = defineDomTransformMiddleware((document) => { const span = heading.ownerDocument.createElement('span'); span.ariaHidden = 'true'; - span.setAttribute('data-pagefind-ignore', 'true'); + span.dataset.pagefindIgnore = 'true'; span.className = 'anchor-icon'; span.innerHTML = '🔗'; - link.appendChild(span); + link.append(span); const wrapper = heading.ownerDocument.createElement('div'); wrapper.className = 'heading-anchor-wrapper'; // wrap the heading and link in a div heading.parentNode?.insertBefore(wrapper, heading); - wrapper.appendChild(heading); - wrapper.appendChild(link); + wrapper.append(heading); + wrapper.append(link); } - }); + } }); export const onRequest = sequence( diff --git a/docs/src/utils/config-helpers.ts b/docs/src/utils/config-helpers.ts index 304ca04..eea868c 100644 --- a/docs/src/utils/config-helpers.ts +++ b/docs/src/utils/config-helpers.ts @@ -24,7 +24,9 @@ export function componentMenu( const { data } = matter.read(file); let currentMenu = menu; - data.componentData?.pathParts?.slice(0, maxDepth).forEach((pathPart: string) => { + + const pathParts = data.componentData?.pathParts?.slice(0, maxDepth); + for (const pathPart of pathParts) { let existingMenu = currentMenu.items?.find((item: any) => { return item.label === capitalize(slug(pathPart)); }); @@ -39,7 +41,7 @@ export function componentMenu( } currentMenu = existingMenu; - }); + } currentMenu.items?.unshift({ label: data.title, @@ -68,16 +70,14 @@ export function componentMenu( } }); - if (mergeTopLevel) { - // put all the second level items at the top level, - // suffixed with the original top level label - return menu.items!.map((item: any) => { - return { - items: item.items, - label: `${item.label} ${menu.label}` - }; - }); - } else { - return [menu]; - } + // put all the second level items at the top level, + // suffixed with the original top level label + return mergeTopLevel + ? menu.items!.map((item: any) => { + return { + items: item.items, + label: `${item.label} ${menu.label}` + }; + }) + : [menu]; } diff --git a/docs/src/utils/prop-utils.ts b/docs/src/utils/prop-utils.ts index 76d7761..cd426d7 100644 --- a/docs/src/utils/prop-utils.ts +++ b/docs/src/utils/prop-utils.ts @@ -11,7 +11,7 @@ export function uniqueProps( dynamicProps: ComponentProp[] ): ComponentProp[] { const uniqueProps = dynamicProps.filter((dynamicProp) => { - return !commonProps.find((commonProp) => { + return !commonProps.some((commonProp) => { return dynamicProp.name === commonProp.name; }); }); @@ -22,18 +22,19 @@ export function allPropConditions(data: ComponentData): ConditionsRecord { if (data && data.dynamicProps) { const conditionsRecord: ConditionsRecord = {}; - data.dynamicProps?.forEach((dynamicProp) => { - const unique = uniqueProps(data.props, dynamicProp.props); + if (data.dynamicProps) + for (const dynamicProp of data.dynamicProps) { + const unique = uniqueProps(data.props, dynamicProp.props); - unique.forEach((prop) => { - // ensure unique - if (conditionsRecord[prop.name] === undefined) { - conditionsRecord[prop.name] = []; - } + for (const prop of unique) { + // ensure unique + if (conditionsRecord[prop.name] === undefined) { + conditionsRecord[prop.name] = []; + } - conditionsRecord[prop.name].push(dynamicProp.condition); - }); - }); + conditionsRecord[prop.name].push(dynamicProp.condition); + } + } return conditionsRecord; } @@ -43,15 +44,16 @@ export function allPropConditions(data: ComponentData): ConditionsRecord { export function allProps(data: ComponentData): ComponentProp[] { if (data) { const allProps = [...data.props]; - data.dynamicProps?.forEach((dynamicProp) => { - dynamicProp.props.forEach((prop) => { - // ensure unique - const existingProp = allProps.find((p) => p.name === prop.name); - if (!existingProp) { - allProps.push(prop); + if (data.dynamicProps) + for (const dynamicProp of data.dynamicProps) { + for (const prop of dynamicProp.props) { + // ensure unique + const existingProp = allProps.find((p) => p.name === prop.name); + if (!existingProp) { + allProps.push(prop); + } } - }); - }); + } return allProps; } diff --git a/docs/src/utils/string-utils.ts b/docs/src/utils/string-utils.ts index a773dd9..93333e9 100644 --- a/docs/src/utils/string-utils.ts +++ b/docs/src/utils/string-utils.ts @@ -1,3 +1,3 @@ -export function capitalize(str: string): string { - return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); +export function capitalize(text: string): string { + return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase(); } diff --git a/package.json b/package.json index 6efaaf1..e23f4ca 100644 --- a/package.json +++ b/package.json @@ -187,9 +187,9 @@ "build:04-format": "pnpm run format", "build:05-package": "svelte-package && publint", "build:06-heal-dts-comments": "tsx ./scripts/heal-dts-comments.ts", - "build:07-strip-component-docs": "tsx ./scripts/strip-component-docs.ts", + "build:07-strip-component-documentation": "tsx ./scripts/strip-component-documentation.ts", "build:08-format-library": "prettier --ignore-path --plugin prettier-plugin-svelte --write ./dist", - "build:09-doc-data": "tsx ./scripts/generate-doc-data.ts", + "build:09-doc-data": "tsx ./scripts/generate-documentation-data.ts", "build:10-examples-to-kit": "tsx ./scripts/generate-kit-examples.ts", "build:11-examples-to-docs": "tsx ./scripts/generate-example-components.ts", "build:12-acknowledgments-data": "mkdir -p ./docs/src/content/acknowledgments && pnpm licenses list --json > ./docs/src/content/acknowledgments/acknowledgments-lib.json", @@ -201,23 +201,16 @@ "docs-dev": "pnpm -C ./docs run dev", "docs-preview": "pnpm -C ./docs run preview", "format": "run-s --print-label format:*", - "format:1-eslint": "eslint --fix ./src ./scripts ./docs/src", - "format:2-stylelint": "stylelint --fix './src/**/*.{css,svelte,html}'", - "format:3-rewrap": "rewrap -i --column 100 `find src \\( -name '*.svelte' -o -name '*.ts' -o -name '*.html' \\) -type f | grep -v src/examples`", - "format:4-prettier": "prettier --plugin=prettier-plugin-svelte --plugin=prettier-plugin-astro --write .", - "format:5-embedded": "tsx ./scripts/format-embedded-code.ts", + "format:1-shared": "shared-config-fix", + "format:2-embedded": "tsx ./scripts/format-embedded-code.ts", "kit-build": "pnpm run kit-examples && vite build", "kit-dev": " pnpm run kit-examples && vite dev", "kit-examples": "tsx ./scripts/generate-kit-examples.ts", "kit-preview": "vite preview", - "lint": "run-p --print-label lint:*", - "lint:eslint": "eslint ./src ./scripts ./docs/src", - "lint:markdown": "markdownlint **/*.{md,mdx} --ignore node_modules", - "lint:prettier": "prettier --plugin=prettier-plugin-svelte --plugin=prettier-plugin-astro --check .", - "lint:spelling": "cspell --quiet .", - "lint:stylelint": "stylelint './src/**/*.{css,svelte,html}'", - "lint:typescript": "tsc --noEmit", - "prepublishOnly": "pnpm run build" + "lint": "shared-config-lint", + "prepublishOnly": "pnpm run build", + "rewrap": "rewrap -i --column 100 `find src \\( -name '*.svelte' -o -name '*.ts' -o -name '*.html' \\) -type f | grep -v src/examples`", + "type-check": "tsc --noEmit" }, "peerDependencies": { "svelte": "^4.0.0" @@ -231,51 +224,35 @@ "@tweakpane/plugin-camerakit": "^0.3.0", "@tweakpane/plugin-essentials": "^0.2.0", "esm-env": "^1.0.0", - "nanoid": "^5.0.3", + "nanoid": "^5.0.4", "svelte-local-storage-store": "^0.6.4", "tweakpane": "^4.0.1", "tweakpane-plugin-waveform": "^1.0.0" }, "devDependencies": { + "@kitschpatrol/shared-config": "^1.0.1", "@phenomnomnominal/tsquery": "^6.1.3", "@stkb/rewrap": "^0.1.0", "@sveltejs/adapter-static": "^2.0.3", - "@sveltejs/kit": "^1.27.6", + "@sveltejs/kit": "^1.27.7", "@sveltejs/package": "^2.2.3", "@types/eslint": "^8.44.8", "@types/fs-extra": "^11.0.4", - "@types/node": "^20.10.2", - "@typescript-eslint/eslint-plugin": "^6.13.1", - "@typescript-eslint/parser": "^6.13.1", - "cspell": "^8.1.0", - "eslint": "^8.55.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-perfectionist": "^2.5.0", - "eslint-plugin-svelte": "^2.35.1", + "@types/node": "^20.10.4", "fs-extra": "^11.2.0", "glob": "^10.3.10", - "markdownlint": "^0.32.1", - "markdownlint-cli": "^0.37.0", "npm-run-all": "^4.1.5", "postcss-html": "^1.5.0", - "prettier": "^3.1.0", - "prettier-plugin-astro": "^0.12.2", - "prettier-plugin-pkg": "^0.18.0", - "prettier-plugin-svelte": "^3.1.2", "publint": "^0.2.6", - "stylelint": "^15.11.0", - "stylelint-config-clean-order": "^5.2.0", - "stylelint-config-html": "^1.1.0", - "stylelint-config-standard": "^34.0.0", "svelte": "^4.2.8", "svelte-check": "^3.6.2", "svelte-language-server": "^0.16.1", "svelte2tsx": "^0.6.27", - "ts-morph": "^20.0.0", + "ts-morph": "^21.0.1", "tslib": "^2.6.2", - "tsx": "^4.6.1", - "typescript": "^5.3.2", - "vite": "^4.5.0", + "tsx": "^4.6.2", + "typescript": "^5.3.3", + "vite": "^4.5.1", "yaml": "^2.3.4" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a105ae5..f029fd2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,8 +38,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 nanoid: - specifier: ^5.0.3 - version: 5.0.3 + specifier: ^5.0.4 + version: 5.0.4 svelte-local-storage-store: specifier: ^0.6.4 version: 0.6.4(svelte@4.2.8) @@ -50,21 +50,24 @@ importers: specifier: ^1.0.0 version: 1.0.0(tweakpane@4.0.1) devDependencies: + '@kitschpatrol/shared-config': + specifier: ^1.0.1 + version: 1.0.1(cspell@8.1.3)(eslint@8.55.0)(markdownlint-cli@0.37.0)(markdownlint@0.32.1)(postcss-html@1.5.0)(prettier@3.1.0)(stylelint@15.11.0)(svelte@4.2.8)(typescript@5.3.3) '@phenomnomnominal/tsquery': specifier: ^6.1.3 - version: 6.1.3(typescript@5.3.2) + version: 6.1.3(typescript@5.3.3) '@stkb/rewrap': specifier: ^0.1.0 version: 0.1.0 '@sveltejs/adapter-static': specifier: ^2.0.3 - version: 2.0.3(@sveltejs/kit@1.27.6) + version: 2.0.3(@sveltejs/kit@1.27.7) '@sveltejs/kit': - specifier: ^1.27.6 - version: 1.27.6(svelte@4.2.8)(vite@4.5.0) + specifier: ^1.27.7 + version: 1.27.7(svelte@4.2.8)(vite@4.5.1) '@sveltejs/package': specifier: ^2.2.3 - version: 2.2.3(svelte@4.2.8)(typescript@5.3.2) + version: 2.2.3(svelte@4.2.8)(typescript@5.3.3) '@types/eslint': specifier: ^8.44.8 version: 8.44.8 @@ -72,101 +75,50 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^20.10.2 - version: 20.10.2 - '@typescript-eslint/eslint-plugin': - specifier: ^6.13.1 - version: 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/parser': - specifier: ^6.13.1 - version: 6.13.1(eslint@8.55.0)(typescript@5.3.2) - cspell: - specifier: ^8.1.0 - version: 8.1.0 - eslint: - specifier: ^8.55.0 - version: 8.55.0 - eslint-config-prettier: - specifier: ^9.0.0 - version: 9.0.0(eslint@8.55.0) - eslint-plugin-perfectionist: - specifier: ^2.5.0 - version: 2.5.0(eslint@8.55.0)(svelte@4.2.8)(typescript@5.3.2) - eslint-plugin-svelte: - specifier: ^2.35.1 - version: 2.35.1(eslint@8.55.0)(svelte@4.2.8) + specifier: ^20.10.4 + version: 20.10.4 fs-extra: specifier: ^11.2.0 version: 11.2.0 glob: specifier: ^10.3.10 version: 10.3.10 - markdownlint: - specifier: ^0.32.1 - version: 0.32.1 - markdownlint-cli: - specifier: ^0.37.0 - version: 0.37.0 npm-run-all: specifier: ^4.1.5 version: 4.1.5 postcss-html: specifier: ^1.5.0 version: 1.5.0 - prettier: - specifier: ^3.1.0 - version: 3.1.0 - prettier-plugin-astro: - specifier: ^0.12.2 - version: 0.12.2 - prettier-plugin-pkg: - specifier: ^0.18.0 - version: 0.18.0(prettier@3.1.0) - prettier-plugin-svelte: - specifier: ^3.1.2 - version: 3.1.2(prettier@3.1.0)(svelte@4.2.8) publint: specifier: ^0.2.6 version: 0.2.6 - stylelint: - specifier: ^15.11.0 - version: 15.11.0(typescript@5.3.2) - stylelint-config-clean-order: - specifier: ^5.2.0 - version: 5.2.0(stylelint@15.11.0) - stylelint-config-html: - specifier: ^1.1.0 - version: 1.1.0(postcss-html@1.5.0)(stylelint@15.11.0) - stylelint-config-standard: - specifier: ^34.0.0 - version: 34.0.0(stylelint@15.11.0) svelte: specifier: ^4.2.8 version: 4.2.8 svelte-check: specifier: ^3.6.2 - version: 3.6.2(postcss@8.4.31)(svelte@4.2.8) + version: 3.6.2(postcss@8.4.32)(svelte@4.2.8) svelte-language-server: specifier: ^0.16.1 - version: 0.16.1(postcss@8.4.31) + version: 0.16.1(postcss@8.4.32) svelte2tsx: specifier: ^0.6.27 - version: 0.6.27(svelte@4.2.8)(typescript@5.3.2) + version: 0.6.27(svelte@4.2.8)(typescript@5.3.3) ts-morph: - specifier: ^20.0.0 - version: 20.0.0 + specifier: ^21.0.1 + version: 21.0.1 tslib: specifier: ^2.6.2 version: 2.6.2 tsx: - specifier: ^4.6.1 - version: 4.6.1 + specifier: ^4.6.2 + version: 4.6.2 typescript: - specifier: ^5.3.2 - version: 5.3.2 + specifier: ^5.3.3 + version: 5.3.3 vite: - specifier: ^4.5.0 - version: 4.5.0(@types/node@20.10.2) + specifier: ^4.5.1 + version: 4.5.1(@types/node@20.10.4) yaml: specifier: ^2.3.4 version: 2.3.4 @@ -175,16 +127,16 @@ importers: dependencies: '@astrojs/check': specifier: ^0.3.1 - version: 0.3.1(prettier-plugin-astro@0.12.2)(prettier@3.1.0)(typescript@5.3.2) + version: 0.3.1(prettier@3.1.0)(typescript@5.3.3) '@astrojs/starlight': specifier: ^0.14.0 version: 0.14.0(patch_hash=fnkrna7p2gttul7ix3dqtbctbm)(astro@3.6.4) '@astrojs/svelte': specifier: ^4.0.4 - version: 4.0.4(astro@3.6.4)(svelte@4.2.8)(typescript@5.3.2)(vite@4.5.0) + version: 4.0.4(astro@3.6.4)(svelte@4.2.8)(typescript@5.3.3)(vite@4.5.1) astro: specifier: ^3.6.4 - version: 3.6.4(@types/node@20.10.2)(typescript@5.3.2) + version: 3.6.4(@types/node@20.10.4)(typescript@5.3.3) astro-compress: specifier: ^2.2.3 version: 2.2.3 @@ -238,17 +190,17 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 - /@astrojs/check@0.3.1(prettier-plugin-astro@0.12.2)(prettier@3.1.0)(typescript@5.3.2): + /@astrojs/check@0.3.1(prettier@3.1.0)(typescript@5.3.3): resolution: {integrity: sha512-3LjEUvh7Z4v9NPokaqKMXQ0DwnSXfmtcyAuWVTjNt9yzjv54SxykobV5CTOB3TIko+Rqg59ejamJBxaJN6fvkw==} hasBin: true peerDependencies: typescript: ^5.0.0 dependencies: - '@astrojs/language-server': 2.5.2(prettier-plugin-astro@0.12.2)(prettier@3.1.0)(typescript@5.3.2) + '@astrojs/language-server': 2.5.2(prettier@3.1.0)(typescript@5.3.3) chokidar: 3.5.3 fast-glob: 3.3.2 kleur: 4.1.5 - typescript: 5.3.2 + typescript: 5.3.3 yargs: 17.7.2 transitivePeerDependencies: - prettier @@ -257,16 +209,16 @@ packages: /@astrojs/compiler@1.8.2: resolution: {integrity: sha512-o/ObKgtMzl8SlpIdzaxFnt7SATKPxu4oIP/1NL+HDJRzxfJcAkOTAb/ZKMRyULbz4q+1t2/DAebs2Z1QairkZw==} + dev: true /@astrojs/compiler@2.3.2: resolution: {integrity: sha512-jkY7bCVxl27KeZsSxIZ+pqACe+g8VQUdTiSJRj/sXYdIaZlW3ZMq4qF2M17P/oDt3LBq0zLNwQr4Cb7fSpRGxQ==} - dev: false /@astrojs/internal-helpers@0.2.1: resolution: {integrity: sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==} dev: false - /@astrojs/language-server@2.5.2(prettier-plugin-astro@0.12.2)(prettier@3.1.0)(typescript@5.3.2): + /@astrojs/language-server@2.5.2(prettier@3.1.0)(typescript@5.3.3): resolution: {integrity: sha512-O5SMzoQ65wSxA1KygreI9UJYmHpgt15bSYBxceHwqX7OCDM4Ek8mr6mZn45LGDtwM3dp1uup7kp8exfRPwIFbA==} hasBin: true peerDependencies: @@ -280,7 +232,7 @@ packages: dependencies: '@astrojs/compiler': 2.3.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@volar/kit': 1.10.10(typescript@5.3.2) + '@volar/kit': 1.10.10(typescript@5.3.3) '@volar/language-core': 1.10.10 '@volar/language-server': 1.10.10 '@volar/language-service': 1.10.10 @@ -289,7 +241,6 @@ packages: fast-glob: 3.3.2 muggle-string: 0.3.1 prettier: 3.1.0 - prettier-plugin-astro: 0.12.2 volar-service-css: 0.0.16(@volar/language-service@1.10.10) volar-service-emmet: 0.0.16(@volar/language-service@1.10.10) volar-service-html: 0.0.16(@volar/language-service@1.10.10) @@ -308,7 +259,7 @@ packages: astro: ^3.0.0 dependencies: '@astrojs/prism': 3.0.0 - astro: 3.6.4(@types/node@20.10.2)(typescript@5.3.2) + astro: 3.6.4(@types/node@20.10.4)(typescript@5.3.3) github-slugger: 2.0.0 import-meta-resolve: 3.1.1 mdast-util-definitions: 6.0.0 @@ -335,7 +286,7 @@ packages: '@astrojs/markdown-remark': 3.5.0(astro@3.6.4) '@mdx-js/mdx': 2.3.0 acorn: 8.11.2 - astro: 3.6.4(@types/node@20.10.2)(typescript@5.3.2) + astro: 3.6.4(@types/node@20.10.4)(typescript@5.3.3) es-module-lexer: 1.4.1 estree-util-visit: 1.2.1 github-slugger: 2.0.0 @@ -375,8 +326,8 @@ packages: '@astrojs/sitemap': 3.0.3 '@pagefind/default-ui': 1.0.4 '@types/mdast': 3.0.15 - astro: 3.6.4(@types/node@20.10.2)(typescript@5.3.2) - astro-expressive-code: 0.29.2(astro@3.6.4) + astro: 3.6.4(@types/node@20.10.4)(typescript@5.3.3) + astro-expressive-code: 0.29.3(astro@3.6.4) bcp-47: 2.1.0 execa: 8.0.1 hast-util-select: 5.0.5 @@ -393,17 +344,17 @@ packages: dev: false patched: true - /@astrojs/svelte@4.0.4(astro@3.6.4)(svelte@4.2.8)(typescript@5.3.2)(vite@4.5.0): + /@astrojs/svelte@4.0.4(astro@3.6.4)(svelte@4.2.8)(typescript@5.3.3)(vite@4.5.1): resolution: {integrity: sha512-7OIq3YWSq270TrJZhVNzGXB5+eCp1vyNS0+WcGixxtUSz8ciwO+PqZ6GIhvmEjbBPR0x0QS8t0p0B2qlKJu/EA==} engines: {node: '>=18.14.1'} peerDependencies: astro: ^3.0.0 svelte: ^3.55.0 || ^4.0.0 || ^5.0.0-next.1 dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.0) - astro: 3.6.4(@types/node@20.10.2)(typescript@5.3.2) + '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.1) + astro: 3.6.4(@types/node@20.10.4)(typescript@5.3.3) svelte: 4.2.8 - svelte2tsx: 0.6.27(svelte@4.2.8)(typescript@5.3.2) + svelte2tsx: 0.6.27(svelte@4.2.8)(typescript@5.3.3) transitivePeerDependencies: - supports-color - typescript @@ -483,7 +434,7 @@ packages: dependencies: '@babel/compat-data': 7.23.5 '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.1 + browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 dev: false @@ -613,6 +564,13 @@ packages: '@babel/types': 7.23.5 dev: false + /@babel/runtime@7.23.5: + resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: true + /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} @@ -649,13 +607,13 @@ packages: to-fast-properties: 2.0.0 dev: false - /@cspell/cspell-bundled-dicts@8.1.0: - resolution: {integrity: sha512-o/R/kR1QO9SQV2hUroaguTlHD6MDDtrVY6Xj5eG0loM7T0Pm3TEdlGYQ0LP6O9/CfUiHTntIFUM+PJ999+LuHQ==} + /@cspell/cspell-bundled-dicts@8.1.3: + resolution: {integrity: sha512-TwLyL2bCtetXGhMudjOIgFPAsWF2UkT0E7T+DAZG8aUBfHoC/eco/sTmR6UJVpi6Crjs0YOQkFUBGrQ2pxJPcA==} engines: {node: '>=18'} dependencies: '@cspell/dict-ada': 4.0.2 '@cspell/dict-aws': 4.0.0 - '@cspell/dict-bash': 4.1.2 + '@cspell/dict-bash': 4.1.3 '@cspell/dict-companies': 3.0.28 '@cspell/dict-cpp': 5.0.10 '@cspell/dict-cryptocurrencies': 4.0.0 @@ -683,7 +641,7 @@ packages: '@cspell/dict-k8s': 1.0.2 '@cspell/dict-latex': 4.0.0 '@cspell/dict-lorem-ipsum': 4.0.0 - '@cspell/dict-lua': 4.0.2 + '@cspell/dict-lua': 4.0.3 '@cspell/dict-makefile': 1.0.0 '@cspell/dict-node': 4.0.3 '@cspell/dict-npm': 5.0.13 @@ -695,7 +653,7 @@ packages: '@cspell/dict-ruby': 5.0.1 '@cspell/dict-rust': 4.0.1 '@cspell/dict-scala': 5.0.0 - '@cspell/dict-software-terms': 3.3.11 + '@cspell/dict-software-terms': 3.3.12 '@cspell/dict-sql': 2.1.2 '@cspell/dict-svelte': 1.0.2 '@cspell/dict-swift': 2.0.1 @@ -703,32 +661,32 @@ packages: '@cspell/dict-vue': 3.0.0 dev: true - /@cspell/cspell-json-reporter@8.1.0: - resolution: {integrity: sha512-Iss9dq5XBc5wYADv/Z59W4DgRQYs8BSHNVD6+LbQctuqmeJAte426/oi4x0Y76AJtEe0N6BZouj8HXykovwP5w==} + /@cspell/cspell-json-reporter@8.1.3: + resolution: {integrity: sha512-9iOU0Y733XuF0cqC7xwzJkOKFdJ65rYGnHFdUHzr5lxEqeG9X/jhlkzyHuGGOhPxkUeFP1x9XoLhXo1isMDbKA==} engines: {node: '>=18'} dependencies: - '@cspell/cspell-types': 8.1.0 + '@cspell/cspell-types': 8.1.3 dev: true - /@cspell/cspell-pipe@8.1.0: - resolution: {integrity: sha512-HDNX7MFAPAJ9acyYBa1bG+P4WiHHMFNYeywYBf3h6ScVhHobAqnhqS6b8R7MVhVRivwnKIQPG3zK7UpcwfyRcw==} + /@cspell/cspell-pipe@8.1.3: + resolution: {integrity: sha512-/dcnyLDeyFuoX4seZv7VsDQyRpt3ZY0vjZiDpqFul8hPydM8czLyRPPMD6Za+Gqg6dZmh9+VsQWK52hVsqc0QA==} engines: {node: '>=18'} dev: true - /@cspell/cspell-resolver@8.1.0: - resolution: {integrity: sha512-nlppKh2o6g0zz+oIQ/dZB+oFQFf8lvn3mJKBpDwoeQY7/o9ZORPibXjtqXM83OhhdpoUVuk+3RFMsnFBBffa2Q==} + /@cspell/cspell-resolver@8.1.3: + resolution: {integrity: sha512-bGyJYqkHRilqhyKGL/NvODN5U+UvCuQo7kxgt0i3Vd7m7k6XYLsSLYZ4w6r1S5IQ/ybU8I5lh6/6fNqKwvo9eg==} engines: {node: '>=18'} dependencies: global-directory: 4.0.1 dev: true - /@cspell/cspell-service-bus@8.1.0: - resolution: {integrity: sha512-9Enayhkef732f15kHgiUe4QKyJgKk1dcZ4EFq4eyzUUDFF/eBv6qTQo5k2juUhPIjaKosqqMBHg4ffXcpkhr+Q==} + /@cspell/cspell-service-bus@8.1.3: + resolution: {integrity: sha512-8E5ZveQKneNfK+cuFMy0y6tDsho71UPppEHNoLZsEFDbIxDdtQcAfs0pk4nwEzxPBt+dBB+Yl8KExQ6x2FAYQw==} engines: {node: '>=18'} dev: true - /@cspell/cspell-types@8.1.0: - resolution: {integrity: sha512-1SxBjQdZtVjrTs3Ftw5I3nNpuDjdpsFMvfbbt6EnxqMpmZiUwkqxLCKla0pEy5R9CZcFFlntlOTMTmNsIkgmWg==} + /@cspell/cspell-types@8.1.3: + resolution: {integrity: sha512-j14FENj+DzWu6JjzTl+0X5/OJv9AEckpEp6Jaw9YglxirrBBzTkZGfoLePe/AWo/MlIYp0asl92C1UHEjgz+FQ==} engines: {node: '>=18'} dev: true @@ -740,8 +698,8 @@ packages: resolution: {integrity: sha512-1YkCMWuna/EGIDN/zKkW+j98/55mxigftrSFgsehXhPld+ZMJM5J9UuBA88YfL7+/ETvBdd7mwW6IwWsC+/ltQ==} dev: true - /@cspell/dict-bash@4.1.2: - resolution: {integrity: sha512-AEBWjbaMaJEyAjOHW0F15P2izBjli2cNerG3NjuVH7xX/HUUeNoTj8FF1nwpMufKwGQCvuyO2hCmkVxhJ0y55Q==} + /@cspell/dict-bash@4.1.3: + resolution: {integrity: sha512-tOdI3QVJDbQSwPjUkOiQFhYcu2eedmX/PtEpVWg0aFps/r6AyjUQINtTgpqMYnYuq8O1QUIQqnpx21aovcgZCw==} dev: true /@cspell/dict-companies@3.0.28: @@ -856,8 +814,8 @@ packages: resolution: {integrity: sha512-1l3yjfNvMzZPibW8A7mQU4kTozwVZVw0AvFEdy+NcqtbxH+TvbSkNMqROOFWrkD2PjnKG0+Ea0tHI2Pi6Gchnw==} dev: true - /@cspell/dict-lua@4.0.2: - resolution: {integrity: sha512-eeC20Q+UnHcTVBK6pgwhSjGIVugO2XqU7hv4ZfXp2F9DxGx1RME0+1sKX4qAGhdFGwOBsEzb2fwUsAEP6Mibpg==} + /@cspell/dict-lua@4.0.3: + resolution: {integrity: sha512-lDHKjsrrbqPaea13+G9s0rtXjMO06gPXPYRjRYawbNmo4E/e3XFfVzeci3OQDQNDmf2cPOwt9Ef5lu2lDmwfJg==} dev: true /@cspell/dict-makefile@1.0.0: @@ -906,8 +864,8 @@ packages: resolution: {integrity: sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==} dev: true - /@cspell/dict-software-terms@3.3.11: - resolution: {integrity: sha512-a2Zml4G47dbQ6GDdN7+YlIWs3nFnIcJkZOLT88m/LzxjApiF7AOZLqQiKwow03hyvGSuZy8itgQZmQHoPlw2vQ==} + /@cspell/dict-software-terms@3.3.12: + resolution: {integrity: sha512-6aa4T9VqOMc0SFNBt6gxp0CWjvRqMg/uxvgpRbil+ToHWcU+Q+As0WKhPLaOniuTdCM85WWzRouD0O1XUGqg5Q==} dev: true /@cspell/dict-sql@2.1.2: @@ -930,15 +888,15 @@ packages: resolution: {integrity: sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==} dev: true - /@cspell/dynamic-import@8.1.0: - resolution: {integrity: sha512-TJ1OnP0ubdVr5YTMU15rVs8R6ROuPvP/Z5lY2gtHscEsf9tZxvIt3924uMc9fTJXgNsITNWSoCzgwJYcDvGM6A==} + /@cspell/dynamic-import@8.1.3: + resolution: {integrity: sha512-/lXFLa92v4oOcZ2PbdRpOqBvnqWlYmGaV7iCy8+QhIWlMdzi+7tBX3LVTm9Jzvt/rJseVHQQ6RvfTsSmhbUMFQ==} engines: {node: '>=18.0'} dependencies: import-meta-resolve: 4.0.0 dev: true - /@cspell/strong-weak-map@8.1.0: - resolution: {integrity: sha512-yBc3ejGpx3QLbfS+Sec8ycS+lKuou5rnnpfz3aVBCnNHUPozosFuNYPFB6Iah2CBY6v6rkDCkIp5vnp1IwQzdA==} + /@cspell/strong-weak-map@8.1.3: + resolution: {integrity: sha512-GhWyximzk8tumo0zhrDV3+nFYiETYefiTBWAEVbXJMibuvitFocVZwddqN85J0UdZ2M7q6tvBleEaI9ME/16gA==} engines: {node: '>=18'} dev: true @@ -1611,34 +1569,34 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@expressive-code/core@0.29.2: - resolution: {integrity: sha512-QJv5rDqSpx8WcAE4cZE+9GE31NtkN3i1zdr0KmdgwcIAEixhgxCFfngMoHWYYcLQnBMCIsFCyHnS39SAL4ub0Q==} + /@expressive-code/core@0.29.3: + resolution: {integrity: sha512-URQYXx/sDlT2EPoATPrEidInntQE9YJYLTUqdqi1KH4Q/ERXU9MYpaUMw8GdIWecIMzHp9FBn5sNuwWJ+RfFZg==} dependencies: '@ctrl/tinycolor': 3.6.1 hast-util-to-html: 8.0.4 hastscript: 7.2.0 - postcss: 8.4.31 - postcss-nested: 6.0.1(postcss@8.4.31) + postcss: 8.4.32 + postcss-nested: 6.0.1(postcss@8.4.32) dev: false - /@expressive-code/plugin-frames@0.29.2: - resolution: {integrity: sha512-qQoDHB3iW7+Jb38omXGcaMNCbcBnGOijREDU5VW8TkFKzwx63gxcia8EYzzuCK15A2Pa8/5YqgE+0RrwKTGXHA==} + /@expressive-code/plugin-frames@0.29.3: + resolution: {integrity: sha512-vKB+mO22D2b2fdVK1vlbuWhOy0XwbzvWDIcbdex1gyjOW6FJ3ZV65QiWtCW+1IbUtsCDkptNmuCnDpWQF8NU1A==} dependencies: - '@expressive-code/core': 0.29.2 + '@expressive-code/core': 0.29.3 hastscript: 7.2.0 dev: false - /@expressive-code/plugin-shiki@0.29.2: - resolution: {integrity: sha512-ZRcG0Rh7S98XzHqTVlZd4pMcXehv6bjSzdM0r0LT2LpCl5oAbzx5DBYCy6BFKu2Qc4UkhTm04obXZSWoAtSaGw==} + /@expressive-code/plugin-shiki@0.29.3: + resolution: {integrity: sha512-1RQOAEwaXyfOYAd0jnjz3jKQVkc2qFrLWEU9Vmy1rglHpNtBDGqP1YRJxevNcXy08014KoHMvkgO8dBdTIirdA==} dependencies: - '@expressive-code/core': 0.29.2 + '@expressive-code/core': 0.29.3 shiki: 0.14.5 dev: false - /@expressive-code/plugin-text-markers@0.29.2: - resolution: {integrity: sha512-2jhmKIUIizTTnkasFQMmonNNMKmKQxfIIIZcsCLZ0ZaJdBkU0OueAVfQbk0amsrsiPL2ihJ3iDh0JZE0Ztz0AA==} + /@expressive-code/plugin-text-markers@0.29.3: + resolution: {integrity: sha512-qnRcuGjR1T6+jZuFDQo7iyhY0P+d2Ds2V+OfOU4FASuUDPIkkEbVm0yenn5CybeCrn3O8r/kEK4VRfi8XQuNjA==} dependencies: - '@expressive-code/core': 0.29.2 + '@expressive-code/core': 0.29.3 hastscript: 7.2.0 unist-util-visit-parents: 5.1.3 dev: false @@ -1900,6 +1858,149 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + /@kitschpatrol/cspell-config@1.0.1(cspell@8.1.3): + resolution: {integrity: sha512-9TQZ6TzoB3OPbhPbyrp+B9AY9u1J1KhcjtgbnkSMwnvSPuqSHnA7l7MJyhbLTIuzFs9m9xEQOLVbAN3UKpMIww==} + engines: {node: '>=18.0.0', pnpm: '>=8.0.0'} + hasBin: true + peerDependencies: + cspell: ^8.1.3 + dependencies: + cspell: 8.1.3 + dev: true + + /@kitschpatrol/eslint-config@1.0.1(eslint@8.55.0)(svelte@4.2.8)(typescript@5.3.3): + resolution: {integrity: sha512-Nyv0NpFVA0gEH3+yzO7KmCwakV+xv7B/W8Pv529H4ZULth5gG35UUa0JkzozYDzkEFH8W0eMgHjA4IRBcHa8mA==} + engines: {node: '>=18.0.0', pnpm: '>=8.0.0'} + hasBin: true + peerDependencies: + eslint: '>=8.52.0' + dependencies: + '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + astro-eslint-parser: 0.16.0 + eslint: 8.55.0 + eslint-config-prettier: 9.1.0(eslint@8.55.0) + eslint-plugin-astro: 0.30.0(eslint@8.55.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.55.0) + eslint-plugin-perfectionist: 2.5.0(astro-eslint-parser@0.16.0)(eslint@8.55.0)(svelte@4.2.8)(typescript@5.3.3) + eslint-plugin-svelte: 2.35.1(eslint@8.55.0)(svelte@4.2.8) + eslint-plugin-unicorn: 49.0.0(eslint@8.55.0) + transitivePeerDependencies: + - supports-color + - svelte + - svelte-eslint-parser + - ts-node + - typescript + - vue-eslint-parser + dev: true + + /@kitschpatrol/markdownlint-config@1.0.1(markdownlint-cli@0.37.0)(markdownlint@0.32.1): + resolution: {integrity: sha512-CbP6nDucyOo7mEqZVhHD4/6Y0J8CNtldHkECn3IZ7gqzkizOtpSqIRXaer7U+9gvd7LU1jxdglxkoq1k2drVAw==} + engines: {node: '>=18.0.0', pnpm: '>=8.0.0'} + hasBin: true + peerDependencies: + markdownlint: ^0.32.1 + markdownlint-cli: ^0.37.0 + dependencies: + markdownlint: 0.32.1 + markdownlint-cli: 0.37.0 + dev: true + + /@kitschpatrol/npm-config@1.0.1: + resolution: {integrity: sha512-LcbipKvFhUePx7WkEUHXBg/4fEC4fIKNP4BTw0nUT6PRBzrjw/fr8JESEHxFj1gcTnhGHjwE6AP/9JKjZODupQ==} + engines: {node: '>=18.0.0', pnpm: '>=8.0.0'} + hasBin: true + dev: true + + /@kitschpatrol/prettier-config@1.0.1(prettier@3.1.0)(svelte@4.2.8): + resolution: {integrity: sha512-0cpNBpaz7JL99kLFHPZJ0vXkK8mbjeKylCEOSl0IQ3W2NghDfqhkU6ZRXr+VkeU9E2yRjo7Eqvuxa7TlgMFheQ==} + engines: {node: '>=18.0.0', pnpm: '>=8.0.0'} + hasBin: true + peerDependencies: + prettier: ^3.0.0 + dependencies: + '@prettier/plugin-php': 0.21.0(prettier@3.1.0) + '@prettier/plugin-ruby': 4.0.3(prettier@3.1.0) + '@prettier/plugin-xml': 3.2.2(prettier@3.1.0) + prettier: 3.1.0 + prettier-plugin-astro: 0.12.2 + prettier-plugin-pkg: 0.18.0(prettier@3.1.0) + prettier-plugin-sh: 0.13.1(prettier@3.1.0) + prettier-plugin-sql: 0.17.1(prettier@3.1.0) + prettier-plugin-svelte: 3.1.2(prettier@3.1.0)(svelte@4.2.8) + prettier-plugin-tailwindcss: 0.5.9(prettier-plugin-astro@0.12.2)(prettier-plugin-svelte@3.1.2)(prettier@3.1.0) + prettier-plugin-toml: 2.0.1(prettier@3.1.0) + transitivePeerDependencies: + - '@ianvs/prettier-plugin-sort-imports' + - '@prettier/plugin-pug' + - '@shopify/prettier-plugin-liquid' + - '@trivago/prettier-plugin-sort-imports' + - prettier-plugin-css-order + - prettier-plugin-import-sort + - prettier-plugin-jsdoc + - prettier-plugin-marko + - prettier-plugin-organize-attributes + - prettier-plugin-organize-imports + - prettier-plugin-style-order + - prettier-plugin-twig-melody + - svelte + dev: true + + /@kitschpatrol/shared-config@1.0.1(cspell@8.1.3)(eslint@8.55.0)(markdownlint-cli@0.37.0)(markdownlint@0.32.1)(postcss-html@1.5.0)(prettier@3.1.0)(stylelint@15.11.0)(svelte@4.2.8)(typescript@5.3.3): + resolution: {integrity: sha512-hK8dFu8x0nHBpyIRrk8G+3xhfmJ+nSkIDL495iUydY+ppGEXEhMhPSZ+/tv9mQ6GG9AptjU3BfyOAoyAOqJAzg==} + engines: {node: '>=18.0.0', pnpm: '>=8.0.0'} + hasBin: true + dependencies: + '@kitschpatrol/cspell-config': 1.0.1(cspell@8.1.3) + '@kitschpatrol/eslint-config': 1.0.1(eslint@8.55.0)(svelte@4.2.8)(typescript@5.3.3) + '@kitschpatrol/markdownlint-config': 1.0.1(markdownlint-cli@0.37.0)(markdownlint@0.32.1) + '@kitschpatrol/npm-config': 1.0.1 + '@kitschpatrol/prettier-config': 1.0.1(prettier@3.1.0)(svelte@4.2.8) + '@kitschpatrol/stylelint-config': 1.0.1(postcss-html@1.5.0)(stylelint@15.11.0) + '@kitschpatrol/vscode-config': 1.0.1 + transitivePeerDependencies: + - '@ianvs/prettier-plugin-sort-imports' + - '@prettier/plugin-pug' + - '@shopify/prettier-plugin-liquid' + - '@trivago/prettier-plugin-sort-imports' + - cspell + - eslint + - markdownlint + - markdownlint-cli + - postcss-html + - prettier + - prettier-plugin-css-order + - prettier-plugin-import-sort + - prettier-plugin-jsdoc + - prettier-plugin-marko + - prettier-plugin-organize-attributes + - prettier-plugin-organize-imports + - prettier-plugin-style-order + - prettier-plugin-twig-melody + - stylelint + - supports-color + - svelte + - svelte-eslint-parser + - ts-node + - typescript + - vue-eslint-parser + dev: true + + /@kitschpatrol/stylelint-config@1.0.1(postcss-html@1.5.0)(stylelint@15.11.0): + resolution: {integrity: sha512-9QaFwP/M8uV/V90gc81ajf82Ay19LMlvj8NLJaeM0YF2/BMn/K/6ONHyZFEI+Mp42Yz+Dt0Zj41H148bNMLL1Q==} + engines: {node: '>=18.0.0', pnpm: '>=8.0.0'} + hasBin: true + peerDependencies: + stylelint: ^15.11.0 + dependencies: + stylelint: 15.11.0(typescript@5.3.3) + stylelint-config-clean-order: 5.2.0(stylelint@15.11.0) + stylelint-config-html: 1.1.0(postcss-html@1.5.0)(stylelint@15.11.0) + stylelint-config-standard: 34.0.0(stylelint@15.11.0) + transitivePeerDependencies: + - postcss-html + dev: true + /@kitschpatrol/tweakpane-image-plugin@2.0.0(tweakpane@4.0.1): resolution: {integrity: sha512-BzEZqIhD/dM7AW0Ebv+309L4k8ZZJ5fC9Zks4sozVK3FwJooviE6JzaFAuB7k0M5oX45Wyn59tQXdHafgsP3YA==} peerDependencies: @@ -1916,6 +2017,12 @@ packages: tweakpane: 4.0.1 dev: false + /@kitschpatrol/vscode-config@1.0.1: + resolution: {integrity: sha512-Fgmgt5e7MQs/Us4K+Ica1GHujAMuMBnqfC/Zf1zWcBprUHFdL/Hu81wn4ixYR9f6EH1vxnznX47joNalfJnCyg==} + engines: {node: '>=18.0.0', pnpm: '>=8.0.0'} + hasBin: true + dev: true + /@mdx-js/mdx@2.3.0: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: @@ -2002,14 +2109,14 @@ packages: dev: false optional: true - /@phenomnomnominal/tsquery@6.1.3(typescript@5.3.2): + /@phenomnomnominal/tsquery@6.1.3(typescript@5.3.3): resolution: {integrity: sha512-CEqpJ872StsxRmwv9ePCZ4BCisrJSlREUC5XxIRYxhvODt4aQoJFFmjTgaP6meyKiiXxxN/VWPZ58j4yHXRkmw==} peerDependencies: typescript: ^3 || ^4 || ^5 dependencies: '@types/esquery': 1.5.3 esquery: 1.5.0 - typescript: 5.3.2 + typescript: 5.3.3 dev: true /@pkgjs/parseargs@0.11.0: @@ -2019,8 +2126,48 @@ packages: dev: true optional: true - /@polka/url@1.0.0-next.23: - resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.2 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: true + + /@polka/url@1.0.0-next.24: + resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} + dev: true + + /@prettier/plugin-php@0.21.0(prettier@3.1.0): + resolution: {integrity: sha512-vWC6HIUUfhvl/7F5IxVQ0ItGB/7ZY+jDlX7KsTqvfKMODW/zvzj8r1Ab4harS22+O3xxHykVVd5jvylmxMMctg==} + peerDependencies: + prettier: ^3.0.0 + dependencies: + linguist-languages: 7.27.0 + mem: 9.0.2 + php-parser: 3.1.5 + prettier: 3.1.0 + dev: true + + /@prettier/plugin-ruby@4.0.3(prettier@3.1.0): + resolution: {integrity: sha512-SrPEjTqqsCoDBJ3UlReLnKZFqE76o4TBOlsIwRCnqPiO7O3kvy8k5ETG0IiGcNf9wqXLSCRzZXsK4+0cb26SQQ==} + peerDependencies: + prettier: ^3.0.0 + dependencies: + prettier: 3.1.0 + dev: true + + /@prettier/plugin-xml@3.2.2(prettier@3.1.0): + resolution: {integrity: sha512-SoE70SQF1AKIvK7LVK80JcdAe6wrDcbodFFjcoqb1FkOqV0G0oSlgAFDwoRXPqkUE5p/YF2nGsnUbnfm6471sw==} + peerDependencies: + prettier: ^3.0.0 + dependencies: + '@xml-tools/parser': 1.0.11 + prettier: 3.1.0 dev: true /@stkb/rewrap@0.1.0: @@ -2031,16 +2178,16 @@ packages: yargs: 17.7.2 dev: true - /@sveltejs/adapter-static@2.0.3(@sveltejs/kit@1.27.6): + /@sveltejs/adapter-static@2.0.3(@sveltejs/kit@1.27.7): resolution: {integrity: sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==} peerDependencies: '@sveltejs/kit': ^1.5.0 dependencies: - '@sveltejs/kit': 1.27.6(svelte@4.2.8)(vite@4.5.0) + '@sveltejs/kit': 1.27.7(svelte@4.2.8)(vite@4.5.1) dev: true - /@sveltejs/kit@1.27.6(svelte@4.2.8)(vite@4.5.0): - resolution: {integrity: sha512-GsjTkMbKzXdbeRg0tk8S7HNShQ4879ftRr0ZHaZfjbig1xQwG57Bvcm9U9/mpLJtCapLbLWUnygKrgcLISLC8A==} + /@sveltejs/kit@1.27.7(svelte@4.2.8)(vite@4.5.1): + resolution: {integrity: sha512-AzXYDoYt42clCBwLF9GTHsXyg2DFR31Ncyt8yxu8Aw4tgB433V+w+hcr1RTfAN9zKW2J2PY9FMQ8FoX/4Vw8CA==} engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true @@ -2048,7 +2195,7 @@ packages: svelte: ^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.0) + '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.1) '@types/cookie': 0.5.4 cookie: 0.5.0 devalue: 4.3.2 @@ -2062,12 +2209,12 @@ packages: svelte: 4.2.8 tiny-glob: 0.2.9 undici: 5.26.5 - vite: 4.5.0(@types/node@20.10.2) + vite: 4.5.1(@types/node@20.10.4) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/package@2.2.3(svelte@4.2.8)(typescript@5.3.2): + /@sveltejs/package@2.2.3(svelte@4.2.8)(typescript@5.3.3): resolution: {integrity: sha512-iZEC5qw+2RIjfIAHR3O+IeokJIjVM/ieoxPxj6YmZCwu5JKFADtC4jzjSUJ7GkCMUQ4HqE7u4/3cCxXBocxi8A==} engines: {node: ^16.14 || >=18} hasBin: true @@ -2079,12 +2226,12 @@ packages: sade: 1.8.1 semver: 7.5.4 svelte: 4.2.8 - svelte2tsx: 0.6.27(svelte@4.2.8)(typescript@5.3.2) + svelte2tsx: 0.6.27(svelte@4.2.8)(typescript@5.3.3) transitivePeerDependencies: - typescript dev: true - /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.0): + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.1): resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -2092,43 +2239,53 @@ packages: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.0) + '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.1) debug: 4.3.4 svelte: 4.2.8 - vite: 4.5.0(@types/node@20.10.2) + vite: 4.5.1(@types/node@20.10.4) transitivePeerDependencies: - supports-color - /@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.8)(vite@4.5.0): + /@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.8)(vite@4.5.1): resolution: {integrity: sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==} engines: {node: ^14.18.0 || >= 16} peerDependencies: svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.0) + '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.1) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.5 svelte: 4.2.8 svelte-hmr: 0.15.3(svelte@4.2.8) - vite: 4.5.0(@types/node@20.10.2) - vitefu: 0.2.5(vite@4.5.0) + vite: 4.5.1(@types/node@20.10.4) + vitefu: 0.2.5(vite@4.5.1) transitivePeerDependencies: - supports-color + /@taplo/core@0.1.1: + resolution: {integrity: sha512-BG/zLGf5wiNXGEVPvUAAX/4ilB3PwDUY2o0MV0y47mZbDZ9ad9UK/cIQsILat3bqbPJsALVbU6k3cskNZ3vAQg==} + dev: true + + /@taplo/lib@0.4.0-alpha.2: + resolution: {integrity: sha512-DV/Re3DPVY+BhBtLZ3dmP4mP6YMLSsgq9qGLXwOV38lvNF/fBlgvQswzlXmzCEefL/3q2eMoefZpOI/+GLuCNA==} + dependencies: + '@taplo/core': 0.1.1 + dev: true + /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} dev: false - /@ts-morph/common@0.21.0: - resolution: {integrity: sha512-ES110Mmne5Vi4ypUKrtVQfXFDtCsDXiUiGxF6ILVlE90dDD4fdpC1LSjydl/ml7xJWKSDZwUYD2zkOePMSrPBA==} + /@ts-morph/common@0.22.0: + resolution: {integrity: sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==} dependencies: fast-glob: 3.3.2 - minimatch: 7.4.6 - mkdirp: 2.1.6 + minimatch: 9.0.3 + mkdirp: 3.0.1 path-browserify: 1.0.1 dev: true @@ -2233,7 +2390,7 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.10.2 + '@types/node': 20.10.4 dev: true /@types/hast@2.3.8: @@ -2259,7 +2416,7 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 20.10.2 + '@types/node': 20.10.4 dev: true /@types/mdast@3.0.15: @@ -2296,8 +2453,8 @@ packages: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: false - /@types/node@20.10.2: - resolution: {integrity: sha512-37MXfxkb0vuIlRKHNxwCkb60PNBpR94u4efQuN4JgIAm66zfCDXGSAFCef9XUWFovX2R1ok6Z7MHhtdVXXkkIw==} + /@types/node@20.10.4: + resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} dependencies: undici-types: 5.26.5 @@ -2322,7 +2479,7 @@ packages: /@types/sax@1.2.7: resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} dependencies: - '@types/node': 20.10.2 + '@types/node': 17.0.45 dev: false /@types/semver@7.5.6: @@ -2337,8 +2494,8 @@ packages: resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} dev: false - /@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2): - resolution: {integrity: sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==} + /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2349,25 +2506,25 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/scope-manager': 6.13.1 - '@typescript-eslint/type-utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 6.13.1 + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.13.2 + '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.13.2 debug: 4.3.4 eslint: 8.55.0 graphemer: 1.4.0 ignore: 5.3.0 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.13.1(eslint@8.55.0)(typescript@5.3.2): - resolution: {integrity: sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==} + /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2376,27 +2533,35 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.13.1 - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 6.13.1 + '@typescript-eslint/scope-manager': 6.13.2 + '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.13.2 debug: 4.3.4 eslint: 8.55.0 - typescript: 5.3.2 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.13.1: - resolution: {integrity: sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==} + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/scope-manager@6.13.2: + resolution: {integrity: sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/visitor-keys': 6.13.1 + '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/visitor-keys': 6.13.2 dev: true - /@typescript-eslint/type-utils@6.13.1(eslint@8.55.0)(typescript@5.3.2): - resolution: {integrity: sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==} + /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2405,23 +2570,28 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) + '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.55.0 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.13.1: - resolution: {integrity: sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==} + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/types@6.13.2: + resolution: {integrity: sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.13.1(typescript@5.3.2): - resolution: {integrity: sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==} + /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.3): + resolution: {integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2429,20 +2599,20 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/visitor-keys': 6.13.1 + '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/visitor-keys': 6.13.2 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.13.1(eslint@8.55.0)(typescript@5.3.2): - resolution: {integrity: sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==} + /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2450,9 +2620,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.13.1 - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + '@typescript-eslint/scope-manager': 6.13.2 + '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) eslint: 8.55.0 semver: 7.5.4 transitivePeerDependencies: @@ -2460,25 +2630,33 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.13.1: - resolution: {integrity: sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==} + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@6.13.2: + resolution: {integrity: sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/types': 6.13.2 eslint-visitor-keys: 3.4.3 dev: true /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /@volar/kit@1.10.10(typescript@5.3.2): + /@volar/kit@1.10.10(typescript@5.3.3): resolution: {integrity: sha512-V2SyUPCPUhueqH8j5t48LJ0QsjExGSXzTv/XOdkUHV7hJ/ekyRGFqKxcfBtMq/nK6Tgu2G1ba+6u0d7e6wKcQw==} peerDependencies: typescript: '*' dependencies: '@volar/language-service': 1.10.10 typesafe-path: 0.2.2 - typescript: 5.3.2 + typescript: 5.3.3 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: false @@ -2539,6 +2717,12 @@ packages: /@vscode/l10n@0.0.16: resolution: {integrity: sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg==} + /@xml-tools/parser@1.0.11: + resolution: {integrity: sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==} + dependencies: + chevrotain: 7.1.1 + dev: true + /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2635,6 +2819,17 @@ packages: is-array-buffer: 3.0.2 dev: true + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true + /array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} dev: false @@ -2647,6 +2842,26 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + /arraybuffer.prototype.slice@1.0.2: resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} @@ -2665,6 +2880,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -2690,16 +2909,32 @@ packages: typescript-esbuild: 0.3.1 dev: false - /astro-expressive-code@0.29.2(astro@3.6.4): - resolution: {integrity: sha512-fVslVRplAQGaZyVkAFOM1csHqWDkhPzBhXEMEKfjHCzk8CMnl5VPD9yljx48GizwbB0EId68uIc6xO2hoVK9rQ==} + /astro-eslint-parser@0.16.0: + resolution: {integrity: sha512-k9ASvY8pa6qttM+fvNJCILxxjftfNg/ou5cjd25SVHsc7moplezGGM9fgMUyf24SRYt8ShO603oHRDn2KqwxMg==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@astrojs/compiler': 2.3.2 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + astrojs-compiler-sync: 0.3.3(@astrojs/compiler@2.3.2) + debug: 4.3.4 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /astro-expressive-code@0.29.3(astro@3.6.4): + resolution: {integrity: sha512-PToslVaeHd7ibMc4OXa2tyH2gsakS61vVk2M7lsR31tnOxy2mXjmR2BrUhtKG5dSETq7tj0lK2jmJsID7W+Z7A==} peerDependencies: - astro: ^3.0.0-beta + astro: ^3.0.0-beta || ^4.0.0-beta dependencies: - astro: 3.6.4(@types/node@20.10.2)(typescript@5.3.2) - remark-expressive-code: 0.29.2 + astro: 3.6.4(@types/node@20.10.4)(typescript@5.3.3) + remark-expressive-code: 0.29.3 dev: false - /astro@3.6.4(@types/node@20.10.2)(typescript@5.3.2): + /astro@3.6.4(@types/node@20.10.4)(typescript@5.3.3): resolution: {integrity: sha512-YatUyWEQ9GUC79Wc2zbovy6D6bXPW9++Z6PYs4GDamEDspUSnnzL/INB7WJqgFI0xAFk9jcUr+MZYjkdWqXYTw==} engines: {node: '>=18.14.1', npm: '>=6.14.0'} hasBin: true @@ -2754,11 +2989,11 @@ packages: shikiji: 0.6.13 string-width: 6.1.0 strip-ansi: 7.1.0 - tsconfck: 3.0.0(typescript@5.3.2) + tsconfck: 3.0.0(typescript@5.3.3) unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.5.0(@types/node@20.10.2) - vitefu: 0.2.5(vite@4.5.0) + vite: 4.5.1(@types/node@20.10.4) + vitefu: 0.2.5(vite@4.5.1) which-pm: 2.1.1 yargs-parser: 21.1.1 zod: 3.22.4 @@ -2776,11 +3011,32 @@ packages: - typescript dev: false + /astrojs-compiler-sync@0.3.3(@astrojs/compiler@2.3.2): + resolution: {integrity: sha512-LbhchWgsvjvRBb5n5ez8/Q/f9ZKViuox27VxMDOdTUm8MRv9U7phzOiLue5KluqTmC0z1LId4gY2SekvoDrkuw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@astrojs/compiler': '>=0.27.0' + dependencies: + '@astrojs/compiler': 2.3.2 + synckit: 0.8.6 + dev: true + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: true + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true + /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: @@ -2818,6 +3074,11 @@ packages: is-decimal: 2.0.1 dev: false + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: true + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -2856,6 +3117,13 @@ packages: wrap-ansi: 8.1.0 dev: false + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.52 + dev: true + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2874,15 +3142,15 @@ packages: dependencies: fill-range: 7.0.1 - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001565 - electron-to-chromium: 1.4.599 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) + caniuse-lite: 1.0.30001566 + electron-to-chromium: 1.4.607 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: false /buffer-crc32@0.2.13: @@ -2908,6 +3176,18 @@ packages: ieee754: 1.2.1 dev: false + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + /call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: @@ -2948,8 +3228,8 @@ packages: engines: {node: '>=14.16'} dev: false - /caniuse-lite@1.0.30001565: - resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} + /caniuse-lite@1.0.30001566: + resolution: {integrity: sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==} dev: false /ccount@2.0.1: @@ -2998,6 +3278,12 @@ packages: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} dev: false + /chevrotain@7.1.1: + resolution: {integrity: sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==} + dependencies: + regexp-to-ast: 0.5.0 + dev: true + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -3020,7 +3306,6 @@ packages: /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - dev: false /clean-css@5.3.3: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} @@ -3029,6 +3314,13 @@ packages: source-map: 0.6.1 dev: false + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /clear-module@4.1.2: resolution: {integrity: sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==} engines: {node: '>=8'} @@ -3099,7 +3391,6 @@ packages: /color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - requiresBuild: true dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 @@ -3137,7 +3428,6 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} @@ -3186,7 +3476,7 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig@8.3.6(typescript@5.3.2): + /cosmiconfig@8.3.6(typescript@5.3.3): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -3199,7 +3489,7 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.3.2 + typescript: 5.3.3 dev: true /cross-spawn@6.0.5: @@ -3228,77 +3518,77 @@ packages: type-fest: 1.4.0 dev: true - /cspell-config-lib@8.1.0: - resolution: {integrity: sha512-mIv8etMAp05OapdxJQt0nkfzclMti8AfACPryWnVePrwB89A2KjErHYBa7hX6gn20B4K+KgD7ckPcOi6L8vLYA==} + /cspell-config-lib@8.1.3: + resolution: {integrity: sha512-whzJYxcxos3vnywn0alCFZ+Myc0K/C62pUurfOGhgvIba7ArmlXhNRaL2r5noBxWARtpBOtzz3vrzSBK7Lq6jg==} engines: {node: '>=18'} dependencies: - '@cspell/cspell-types': 8.1.0 + '@cspell/cspell-types': 8.1.3 comment-json: 4.2.3 yaml: 2.3.4 dev: true - /cspell-dictionary@8.1.0: - resolution: {integrity: sha512-nwvlPiM7jsZThZ2bUS2CYzqwAbxWC4OL5GozQfbGEwW/8unNhifBpJzlOZuzLyX4Vu94ETExeIc625wBqPWjVA==} + /cspell-dictionary@8.1.3: + resolution: {integrity: sha512-nkRQDPNnA6tw+hJFBqq26M0nK306q5rtyv/AUIWa8ZHhQkwzACnpMSpuJA7/DV5GVvPKltMK5M4A6vgfpoaFHw==} engines: {node: '>=18'} dependencies: - '@cspell/cspell-pipe': 8.1.0 - '@cspell/cspell-types': 8.1.0 - cspell-trie-lib: 8.1.0 + '@cspell/cspell-pipe': 8.1.3 + '@cspell/cspell-types': 8.1.3 + cspell-trie-lib: 8.1.3 fast-equals: 5.0.1 gensequence: 6.0.0 dev: true - /cspell-gitignore@8.1.0: - resolution: {integrity: sha512-upMIEjbBz1g92Vt80h2hMMRZ9057iAmCWxi05l0WrwGrtc3CGsA8gQQIFIbVZ0x86Sbmv1cBZms1Y/hKWPWuvg==} + /cspell-gitignore@8.1.3: + resolution: {integrity: sha512-NHx5lg44eCKb6yJmUPOCz4prcuYowzoo5GJ5hOcCfbk7ZEBWV1E2/kDRuQMOK2W0y1hNGr45CSxO3UxWJlYg7w==} engines: {node: '>=18'} hasBin: true dependencies: - cspell-glob: 8.1.0 + cspell-glob: 8.1.3 find-up-simple: 1.0.0 dev: true - /cspell-glob@8.1.0: - resolution: {integrity: sha512-onPRqJqPZaaUQ1CKeuh2fJJ9UjIBicRq6Ffd6bqWCu7IdwfEBPtjWa/nlEjCVp1CMRwhS3Y0zG3jHkKLydsR4Q==} + /cspell-glob@8.1.3: + resolution: {integrity: sha512-Likr7UVUXBpthQnM5r6yao3X0YBNRbJ9AHWXTC2RJfzwZOFKF+pKPfeo3FU+Px8My96M4RC2bVMbrbZUwN5NJw==} engines: {node: '>=18'} dependencies: micromatch: 4.0.5 dev: true - /cspell-grammar@8.1.0: - resolution: {integrity: sha512-E28SDJYOOuHk8eBtMSIGyCu8qiKb/H4LX1J/kw8+eV0RLvnllmq2FAYFBk8jtu4uW49TW5n/eLg7J2TvPONYAA==} + /cspell-grammar@8.1.3: + resolution: {integrity: sha512-dTOwNq6a5wcVzOsi4xY5/tq2r2w/+wLVU+WfyySTsPe66Rjqx/QceFl4OinImks/ZMKF7Zyjd3WGyQ5TcSsJFQ==} engines: {node: '>=18'} hasBin: true dependencies: - '@cspell/cspell-pipe': 8.1.0 - '@cspell/cspell-types': 8.1.0 + '@cspell/cspell-pipe': 8.1.3 + '@cspell/cspell-types': 8.1.3 dev: true - /cspell-io@8.1.0: - resolution: {integrity: sha512-oPRMS/XUWcdZXMj6Zhs65mgOVyRZajAhHLm18o6cPLOGUD0770oMqi8ZNKj7LuvubkyP/NL0m4AEcWwvmz/Cbw==} + /cspell-io@8.1.3: + resolution: {integrity: sha512-QkcFeYd79oIl7PgSqFSZyvwXnZQhXmdCI733n54IN2+iXDcf7W0mwptxoC/cE19RkEwAwEFLG81UAy6L/BXI6A==} engines: {node: '>=18'} dependencies: - '@cspell/cspell-service-bus': 8.1.0 + '@cspell/cspell-service-bus': 8.1.3 dev: true - /cspell-lib@8.1.0: - resolution: {integrity: sha512-tatdY9teElqqPtKHAY1osOhV68h/f3x+4Niw7rV12OXmJ9El1lPka59bVTV401fODWRoF3WWJXUpTg012zhdrQ==} + /cspell-lib@8.1.3: + resolution: {integrity: sha512-Kk8bpHVkDZO4MEiPkDvRf/LgJ0h5mufbKLTWModq6k0Ca8EkZ/qgQlZ0ve0rIivbleSqebuWjpJHKDM+IHmzHA==} engines: {node: '>=18'} dependencies: - '@cspell/cspell-bundled-dicts': 8.1.0 - '@cspell/cspell-pipe': 8.1.0 - '@cspell/cspell-resolver': 8.1.0 - '@cspell/cspell-types': 8.1.0 - '@cspell/dynamic-import': 8.1.0 - '@cspell/strong-weak-map': 8.1.0 + '@cspell/cspell-bundled-dicts': 8.1.3 + '@cspell/cspell-pipe': 8.1.3 + '@cspell/cspell-resolver': 8.1.3 + '@cspell/cspell-types': 8.1.3 + '@cspell/dynamic-import': 8.1.3 + '@cspell/strong-weak-map': 8.1.3 clear-module: 4.1.2 comment-json: 4.2.3 configstore: 6.0.0 - cspell-config-lib: 8.1.0 - cspell-dictionary: 8.1.0 - cspell-glob: 8.1.0 - cspell-grammar: 8.1.0 - cspell-io: 8.1.0 - cspell-trie-lib: 8.1.0 + cspell-config-lib: 8.1.3 + cspell-dictionary: 8.1.3 + cspell-glob: 8.1.3 + cspell-grammar: 8.1.3 + cspell-io: 8.1.3 + cspell-trie-lib: 8.1.3 fast-equals: 5.0.1 gensequence: 6.0.0 import-fresh: 3.3.0 @@ -3307,31 +3597,31 @@ packages: vscode-uri: 3.0.8 dev: true - /cspell-trie-lib@8.1.0: - resolution: {integrity: sha512-OF5ZNuGPIGg2CCMdMeAgd1I2iVDjoelpMjVDyqpuNu+RVpAkmNRqMFDBlsnJPWCCeOLn7blWPMBZW2KXctsm3Q==} + /cspell-trie-lib@8.1.3: + resolution: {integrity: sha512-EDSYU9MCtzPSJDrfvDrTKmc0rzl50Ehjg1c5rUCqn33p2LCRe/G8hW0FxXe0mxrZxrMO2b8l0PVSGlrCXCQ8RQ==} engines: {node: '>=18'} dependencies: - '@cspell/cspell-pipe': 8.1.0 - '@cspell/cspell-types': 8.1.0 + '@cspell/cspell-pipe': 8.1.3 + '@cspell/cspell-types': 8.1.3 gensequence: 6.0.0 dev: true - /cspell@8.1.0: - resolution: {integrity: sha512-oxQLyhW3yIAfvDdtoobvriWqfWVqOBo1o+WWRxlDyJdKDBH6my++p6KU3ZjxcJb7VG+CRLGfU7zASWwTPxMXRA==} + /cspell@8.1.3: + resolution: {integrity: sha512-SU4Su6002bPoJYaiMeNV4wwLoS8TwaOgIwaTxhys3GDbJIxZV6CrDgwksezHcG7TZrC4yrveDVsdpnrzmQ7T5Q==} engines: {node: '>=18'} hasBin: true dependencies: - '@cspell/cspell-json-reporter': 8.1.0 - '@cspell/cspell-pipe': 8.1.0 - '@cspell/cspell-types': 8.1.0 - '@cspell/dynamic-import': 8.1.0 + '@cspell/cspell-json-reporter': 8.1.3 + '@cspell/cspell-pipe': 8.1.3 + '@cspell/cspell-types': 8.1.3 + '@cspell/dynamic-import': 8.1.3 chalk: 5.3.0 chalk-template: 1.1.0 commander: 11.1.0 - cspell-gitignore: 8.1.0 - cspell-glob: 8.1.0 - cspell-io: 8.1.0 - cspell-lib: 8.1.0 + cspell-gitignore: 8.1.3 + cspell-glob: 8.1.3 + cspell-io: 8.1.3 + cspell-lib: 8.1.3 fast-glob: 3.3.2 fast-json-stable-stringify: 2.1.0 file-entry-cache: 7.0.2 @@ -3394,6 +3684,10 @@ packages: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} dev: true + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3465,6 +3759,7 @@ packages: /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + requiresBuild: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -3479,6 +3774,24 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} @@ -3488,6 +3801,11 @@ packages: has-property-descriptors: 1.0.1 dev: true + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -3546,6 +3864,10 @@ packages: hasBin: true dev: false + /discontinuous-range@1.0.0: + resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==} + dev: true + /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: false @@ -3602,8 +3924,8 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /electron-to-chromium@1.4.599: - resolution: {integrity: sha512-FdLI0/h+PvShEqmBMnZCdbgabAuQiiM9Ph8hVGmPOR5GU1XXZgwLRCMogE63OrUxcDEOBlEMVYAgtkJjWFnhRA==} + /electron-to-chromium@1.4.607: + resolution: {integrity: sha512-YUlnPwE6eYxzwBnFmawA8LiLRfm70R2aJRIUv0n03uHt/cUzzYACOogmvk8M2+hVzt/kB80KJXx7d5f5JofPvQ==} dev: false /emmet@2.4.6: @@ -3689,6 +4011,25 @@ packages: which-typed-array: 1.1.13 dev: true + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: true + /es-module-lexer@1.4.1: resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} dev: false @@ -3702,6 +4043,12 @@ packages: hasown: 2.0.0 dev: true + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} @@ -3843,8 +4190,8 @@ packages: eslint: 8.55.0 dev: true - /eslint-config-prettier@9.0.0(eslint@8.55.0): - resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + /eslint-config-prettier@9.1.0(eslint@8.55.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -3852,7 +4199,50 @@ packages: eslint: 8.55.0 dev: true - /eslint-plugin-perfectionist@2.5.0(eslint@8.55.0)(svelte@4.2.8)(typescript@5.3.2): + /eslint-plugin-astro@0.30.0(eslint@8.55.0): + resolution: {integrity: sha512-LDbbs836SiHqhuiuAF4CPqSSWsfa7R8vfX5lckphCUD/kBFIsobViI8fuTyMktQ9isCg+Q86LIQAHTFl3PWKTA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@jridgewell/sourcemap-codec': 1.4.15 + '@typescript-eslint/types': 5.62.0 + astro-eslint-parser: 0.16.0 + eslint: 8.55.0 + eslint-compat-utils: 0.1.2(eslint@8.55.0) + postcss: 8.4.32 + postcss-selector-parser: 6.0.13 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.55.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.5 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.15 + eslint: 8.55.0 + hasown: 2.0.0 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + dev: true + + /eslint-plugin-perfectionist@2.5.0(astro-eslint-parser@0.16.0)(eslint@8.55.0)(svelte@4.2.8)(typescript@5.3.3): resolution: {integrity: sha512-F6XXcq4mKKUe/SREoMGQqzgw6cgCgf3pFzkFfQVIGtqD1yXVpQjnhTepzhBeZfxZwgMzR9HO4yH4CUhIQ2WBcQ==} peerDependencies: astro-eslint-parser: ^0.16.0 @@ -3870,7 +4260,8 @@ packages: vue-eslint-parser: optional: true dependencies: - '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + astro-eslint-parser: 0.16.0 eslint: 8.55.0 minimatch: 9.0.3 natural-compare-lite: 1.4.0 @@ -3897,9 +4288,9 @@ packages: eslint-compat-utils: 0.1.2(eslint@8.55.0) esutils: 2.0.3 known-css-properties: 0.29.0 - postcss: 8.4.31 - postcss-load-config: 3.1.4(postcss@8.4.31) - postcss-safe-parser: 6.0.0(postcss@8.4.31) + postcss: 8.4.32 + postcss-load-config: 3.1.4(postcss@8.4.32) + postcss-safe-parser: 6.0.0(postcss@8.4.32) postcss-selector-parser: 6.0.13 semver: 7.5.4 svelte: 4.2.8 @@ -3909,6 +4300,29 @@ packages: - ts-node dev: true + /eslint-plugin-unicorn@49.0.0(eslint@8.55.0): + resolution: {integrity: sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.52.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.55.0 + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.5.4 + strip-indent: 3.0.0 + dev: true + /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4056,6 +4470,36 @@ packages: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: false + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + /execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -4077,13 +4521,13 @@ packages: requiresBuild: true dev: false - /expressive-code@0.29.2: - resolution: {integrity: sha512-UwC+GjYSUbonH8gYlHS4fmh0TSdyrdDry88GdVYVUiN2EI1nh7Duu8s2cpYvFsObPIeUXsbHLWTygBO1XhXtEQ==} + /expressive-code@0.29.3: + resolution: {integrity: sha512-fHSqoKfQ68SWErY0WV/COW7Q8dOiWqcht8eJ72YbHvVYATJ1WgIM3YqrcJbD5kUzd0afHUS/BOQlSddlhUffgA==} dependencies: - '@expressive-code/core': 0.29.2 - '@expressive-code/plugin-frames': 0.29.2 - '@expressive-code/plugin-shiki': 0.29.2 - '@expressive-code/plugin-text-markers': 0.29.2 + '@expressive-code/core': 0.29.3 + '@expressive-code/plugin-frames': 0.29.3 + '@expressive-code/plugin-shiki': 0.29.3 + '@expressive-code/plugin-text-markers': 0.29.3 dev: false /extend-shallow@2.0.1: @@ -4189,7 +4633,6 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: false /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -4306,11 +4749,21 @@ packages: hasown: 2.0.0 dev: true + /get-stdin@8.0.0: + resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} + engines: {node: '>=10'} + dev: true + /get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} engines: {node: '>=12'} dev: true + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -4797,6 +5250,16 @@ packages: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: false + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -4855,6 +5318,11 @@ packages: engines: {node: '>=0.8.19'} dev: true + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + /indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} @@ -4872,6 +5340,7 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + requiresBuild: true /ini@4.1.1: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} @@ -4916,9 +5385,15 @@ packages: /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - requiresBuild: true dev: false + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: @@ -4944,6 +5419,13 @@ packages: engines: {node: '>=4'} dev: false + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -4965,11 +5447,16 @@ packages: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} dev: false + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - dev: false /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} @@ -4980,10 +5467,23 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.5 + dev: true + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -5000,13 +5500,16 @@ packages: hasBin: true dependencies: is-docker: 3.0.0 - dev: false /is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} dev: false + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -5061,16 +5564,24 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.5 dev: true + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -5102,12 +5613,30 @@ packages: engines: {node: '>=12'} dev: false + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.5 dev: true + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + /is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} @@ -5122,6 +5651,16 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: true + /jackspeak@2.3.6: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} @@ -5152,12 +5691,23 @@ packages: dependencies: argparse: 2.0.1 + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: false + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true @@ -5201,6 +5751,21 @@ packages: optionalDependencies: graceful-fs: 4.2.11 + /jsox@1.2.118: + resolution: {integrity: sha512-ubYWn4WOc7HA7icvcQuIni1I7Xx4bI4KbRXbXzlr5e48hvdizeAbflBx97B629ZNH5RZnQ657Z5Z8dFgxFVrSQ==} + hasBin: true + dev: true + + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.1.7 + dev: true + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -5224,6 +5789,17 @@ packages: resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} dev: true + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -5339,6 +5915,10 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true + /linguist-languages@7.27.0: + resolution: {integrity: sha512-Wzx/22c5Jsv2ag+uKy+ITanGA5hzvBZngrNGDXLTC7ZjGM6FLCYGgomauTkxNJeP9of353OM0pWqngYA180xgw==} + dev: true + /linkedom@0.16.4: resolution: {integrity: sha512-SykvDVh/jAnaO+WiPqH5vX3QpZrIRImuppzYhIHons3RXPhDwqN2dOyfopOVaHleqWtoS+3vWCqen+m8M3HToQ==} dependencies: @@ -5383,7 +5963,6 @@ packages: engines: {node: '>=8'} dependencies: p-locate: 4.1.0 - dev: false /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -5453,6 +6032,13 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + /map-age-cleaner@0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} + dependencies: + p-defer: 1.0.0 + dev: true + /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -5779,6 +6365,14 @@ packages: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} dev: true + /mem@9.0.2: + resolution: {integrity: sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==} + engines: {node: '>=12.20'} + dependencies: + map-age-cleaner: 0.1.3 + mimic-fn: 4.0.0 + dev: true + /memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} @@ -5804,7 +6398,6 @@ packages: /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: false /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -6199,12 +6792,10 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: false /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: false /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} @@ -6230,13 +6821,6 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -6272,12 +6856,16 @@ packages: minimist: 1.2.8 dev: true - /mkdirp@2.1.6: - resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} + /mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true dev: true + /moo@0.5.2: + resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -6302,13 +6890,17 @@ packages: resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} dev: false + /mvdan-sh@0.10.1: + resolution: {integrity: sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==} + dev: true + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - /nanoid@5.0.3: - resolution: {integrity: sha512-I7X2b22cxA4LIHXPSqbBCEQSL+1wv8TuoefejsX4HFWyC6jc5JG7CEaxOltiKjc1M+YCS2YkrZZcj4+dytw9GA==} + /nanoid@5.0.4: + resolution: {integrity: sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==} engines: {node: ^18 || >=20} hasBin: true dev: false @@ -6326,6 +6918,16 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /nearley@2.20.1: + resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} + hasBin: true + dependencies: + commander: 2.20.3 + moo: 0.5.2 + railroad-diagrams: 1.0.0 + randexp: 0.4.6 + dev: true + /needle@2.9.1: resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==} engines: {node: '>= 4.4.x'} @@ -6354,8 +6956,8 @@ packages: lower-case: 2.0.2 tslib: 2.6.2 - /node-abi@3.51.0: - resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==} + /node-abi@3.52.0: + resolution: {integrity: sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ==} engines: {node: '>=10'} requiresBuild: true dependencies: @@ -6367,10 +6969,17 @@ packages: requiresBuild: true dev: false - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: false + /node-sql-parser@4.12.0: + resolution: {integrity: sha512-WvHzITmtN5fx201c/cHX7RJvDaS9tTMpjE0TeYPrjH2bDAkoqMcDAUBuPQb7DU2Lhi5EZLbuWoRZnZDYYpx07w==} + engines: {node: '>=8'} + dependencies: + big-integer: 1.6.52 + dev: true + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -6437,12 +7046,18 @@ packages: string.prototype.padend: 3.1.5 dev: true + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: false /nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -6468,6 +7083,33 @@ packages: object-keys: 1.1.1 dev: true + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -6478,14 +7120,22 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: false /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: false + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -6514,12 +7164,16 @@ packages: strip-ansi: 7.1.0 dev: false + /p-defer@1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 - dev: false /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} @@ -6539,7 +7193,6 @@ packages: engines: {node: '>=8'} dependencies: p-limit: 2.3.0 - dev: false /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} @@ -6563,7 +7216,6 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - dev: false /pagefind@1.0.4: resolution: {integrity: sha512-oRIizYe+zSI2Jw4zcMU0ebDZm27751hRFiSOBLwc1OIYMrsZKk+3m8p9EVaOmc6zZdtqwwdilNUNxXvBeHcP9w==} @@ -6676,7 +7328,6 @@ packages: /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: false /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -6711,6 +7362,10 @@ packages: estree-walker: 3.0.3 is-reference: 3.0.2 + /php-parser@3.1.5: + resolution: {integrity: sha512-jEY2DcbgCm5aclzBdfW86GM6VEIWcSlhTBSHN1qhJguVePlYe28GhwS0yoeLYXpM2K8y6wzLwrbq814n2PHSoQ==} + dev: true + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -6741,17 +7396,22 @@ packages: find-up: 4.1.0 dev: false + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + /postcss-html@1.5.0: resolution: {integrity: sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==} engines: {node: ^12 || >=14} dependencies: htmlparser2: 8.0.2 js-tokens: 8.0.2 - postcss: 8.4.31 - postcss-safe-parser: 6.0.0(postcss@8.4.31) + postcss: 8.4.32 + postcss-safe-parser: 6.0.0(postcss@8.4.32) dev: true - /postcss-load-config@3.1.4(postcss@8.4.31): + /postcss-load-config@3.1.4(postcss@8.4.32): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -6764,17 +7424,17 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.31 + postcss: 8.4.32 yaml: 1.10.2 dev: true - /postcss-nested@6.0.1(postcss@8.4.31): + /postcss-nested@6.0.1(postcss@8.4.32): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.31 + postcss: 8.4.32 postcss-selector-parser: 6.0.13 dev: false @@ -6782,22 +7442,22 @@ packages: resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} dev: true - /postcss-safe-parser@6.0.0(postcss@8.4.31): + /postcss-safe-parser@6.0.0(postcss@8.4.32): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.3.3 dependencies: - postcss: 8.4.31 + postcss: 8.4.32 dev: true - /postcss-scss@4.0.9(postcss@8.4.31): + /postcss-scss@4.0.9(postcss@8.4.32): resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.4.29 dependencies: - postcss: 8.4.31 + postcss: 8.4.32 dev: true /postcss-selector-parser@6.0.13: @@ -6807,20 +7467,20 @@ packages: cssesc: 3.0.0 util-deprecate: 1.0.2 - /postcss-sorting@8.0.2(postcss@8.4.31): + /postcss-sorting@8.0.2(postcss@8.4.32): resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} peerDependencies: postcss: ^8.4.20 dependencies: - postcss: 8.4.31 + postcss: 8.4.32 dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -6839,7 +7499,7 @@ packages: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.51.0 + node-abi: 3.52.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -6869,6 +7529,7 @@ packages: '@astrojs/compiler': 1.8.2 prettier: 3.1.0 sass-formatter: 0.7.8 + dev: true /prettier-plugin-pkg@0.18.0(prettier@3.1.0): resolution: {integrity: sha512-cme+OUHj25cVj3HwGK6ek/GkCHhlhM1u/IYspOHYsFImaXMJCmjs8xeCcvLreD0HMX5QxObot+3TtQR3Bd2wHw==} @@ -6879,6 +7540,30 @@ packages: prettier: 3.1.0 dev: true + /prettier-plugin-sh@0.13.1(prettier@3.1.0): + resolution: {integrity: sha512-ytMcl1qK4s4BOFGvsc9b0+k9dYECal7U29bL/ke08FEUsF/JLN0j6Peo0wUkFDG4y2UHLMhvpyd6Sd3zDXe/eg==} + engines: {node: '>=16.0.0'} + peerDependencies: + prettier: ^3.0.0 + dependencies: + mvdan-sh: 0.10.1 + prettier: 3.1.0 + sh-syntax: 0.4.1 + dev: true + + /prettier-plugin-sql@0.17.1(prettier@3.1.0): + resolution: {integrity: sha512-CR9UpTkUSC/f69AV597hnYcBo77iUhsBPkUER7BUa4YHRRtRUJGfL5LDoHAlUHWGTZNiJdHHELlzK6I3R9XuAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + prettier: ^3.0.3 + dependencies: + jsox: 1.2.118 + node-sql-parser: 4.12.0 + prettier: 3.1.0 + sql-formatter: 14.0.0 + tslib: 2.6.2 + dev: true + /prettier-plugin-svelte@3.1.2(prettier@3.1.0)(svelte@3.59.2): resolution: {integrity: sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==} peerDependencies: @@ -6899,6 +7584,70 @@ packages: svelte: 4.2.8 dev: true + /prettier-plugin-tailwindcss@0.5.9(prettier-plugin-astro@0.12.2)(prettier-plugin-svelte@3.1.2)(prettier@3.1.0): + resolution: {integrity: sha512-9x3t1s2Cjbut2QiP+O0mDqV3gLXTe2CgRlQDgucopVkUdw26sQi53p/q4qvGxMLBDfk/dcTV57Aa/zYwz9l8Ew==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + prettier-plugin-twig-melody: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier-plugin-twig-melody: + optional: true + dependencies: + prettier: 3.1.0 + prettier-plugin-astro: 0.12.2 + prettier-plugin-svelte: 3.1.2(prettier@3.1.0)(svelte@4.2.8) + dev: true + + /prettier-plugin-toml@2.0.1(prettier@3.1.0): + resolution: {integrity: sha512-99z1YOkViECHtXQjGIigd3talI/ybUI1zB3yniAwUrlWBXupNXThB1hM6bwSMUEj2/+tomTlMtT98F5t4s8IWA==} + engines: {node: '>=16.0.0'} + peerDependencies: + prettier: ^3.0.3 + dependencies: + '@taplo/lib': 0.4.0-alpha.2 + prettier: 3.1.0 + dev: true + /prettier@3.1.0: resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} engines: {node: '>=14'} @@ -6967,6 +7716,18 @@ packages: engines: {node: '>=10'} dev: true + /railroad-diagrams@1.0.0: + resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==} + dev: true + + /randexp@0.4.6: + resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} + engines: {node: '>=0.12'} + dependencies: + discontinuous-range: 1.0.0 + ret: 0.1.15 + dev: true + /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -6978,6 +7739,15 @@ packages: strip-json-comments: 2.0.1 dev: false + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + /read-pkg-up@8.0.0: resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} engines: {node: '>=12'} @@ -6996,6 +7766,16 @@ packages: path-type: 3.0.0 dev: true + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + /read-pkg@6.0.0: resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} engines: {node: '>=12'} @@ -7029,6 +7809,31 @@ packages: strip-indent: 4.0.0 dev: true + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: true + + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + dev: true + + /regexp-to-ast@0.5.0: + resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} + dev: true + + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + /regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} @@ -7038,6 +7843,13 @@ packages: set-function-name: 2.0.1 dev: true + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + /rehype-parse@8.0.5: resolution: {integrity: sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A==} dependencies: @@ -7088,10 +7900,10 @@ packages: - supports-color dev: false - /remark-expressive-code@0.29.2: - resolution: {integrity: sha512-XIsrURhMOJNOUkCSp0OQ3suAZxNIS6ZkubjOxlTLyViOuVPmvRIXp36t6om9PYSwbxesorM+DNJpsla297GzQQ==} + /remark-expressive-code@0.29.3: + resolution: {integrity: sha512-pR62id9YT/xHyG8FL3QD6ze1ld0Vuc4XCUfScRzceN24XNHwQfzcdjk0aJUJ5BRXO/m7fgehZ1dOh5Wb4ZN1Mw==} dependencies: - expressive-code: 0.29.2 + expressive-code: 0.29.3 hast-util-to-html: 8.0.4 unist-util-visit: 4.1.2 dev: false @@ -7192,6 +8004,11 @@ packages: signal-exit: 3.0.7 dev: false + /ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true + /retext-latin@3.1.0: resolution: {integrity: sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==} dependencies: @@ -7252,6 +8069,13 @@ packages: optionalDependencies: fsevents: 2.3.3 + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + /run-con@1.3.2: resolution: {integrity: sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==} hasBin: true @@ -7269,6 +8093,7 @@ packages: /s.color@0.0.15: resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} + dev: true /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -7315,6 +8140,7 @@ packages: resolution: {integrity: sha512-7fI2a8THglflhhYis7k06eUf92VQuJoXzEs2KRP0r1bluFxKFvLx0Ns7c478oYGM0fPfrr846ZRWVi2MAgHt9Q==} dependencies: suf-log: 2.5.3 + dev: true /sax@1.3.0: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} @@ -7372,6 +8198,13 @@ packages: has-property-descriptors: 1.0.1 dev: true + /sh-syntax@0.4.1: + resolution: {integrity: sha512-MW/ZsCYTu11EIYYTSZcfAgMFszAodCmQVB27XssHoIN6L4EG0KSA3h32x8whaSOKuYBX5wz9EybfnPBUFQMCKA==} + engines: {node: '>=16.0.0'} + dependencies: + tslib: 2.6.2 + dev: true + /sharp@0.32.6: resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} engines: {node: '>=14.15.0'} @@ -7489,7 +8322,6 @@ packages: /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - requiresBuild: true dependencies: is-arrayish: 0.3.2 dev: false @@ -7498,7 +8330,7 @@ packages: resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} engines: {node: '>= 10'} dependencies: - '@polka/url': 1.0.0-next.23 + '@polka/url': 1.0.0-next.24 mrmime: 1.0.1 totalist: 3.0.1 dev: true @@ -7592,6 +8424,15 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false + /sql-formatter@14.0.0: + resolution: {integrity: sha512-VcHYMRvZqg3RNjjxNB/puT9O1hR5QLXTvgTaBtxXcvmRQwSnH9M+oW2Ti+uFuVVU8HoNlOjU2uKHv8c0FQNsdQ==} + hasBin: true + dependencies: + argparse: 2.0.1 + get-stdin: 8.0.0 + nearley: 2.20.1 + dev: true + /stdin-discarder@0.1.0: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7708,10 +8549,14 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: false /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -7753,7 +8598,7 @@ packages: peerDependencies: stylelint: '>=14' dependencies: - stylelint: 15.11.0(typescript@5.3.2) + stylelint: 15.11.0(typescript@5.3.3) stylelint-order: 6.0.3(stylelint@15.11.0) dev: true @@ -7765,7 +8610,7 @@ packages: stylelint: '>=14.0.0' dependencies: postcss-html: 1.5.0 - stylelint: 15.11.0(typescript@5.3.2) + stylelint: 15.11.0(typescript@5.3.3) dev: true /stylelint-config-recommended@13.0.0(stylelint@15.11.0): @@ -7774,7 +8619,7 @@ packages: peerDependencies: stylelint: ^15.10.0 dependencies: - stylelint: 15.11.0(typescript@5.3.2) + stylelint: 15.11.0(typescript@5.3.3) dev: true /stylelint-config-standard@34.0.0(stylelint@15.11.0): @@ -7783,7 +8628,7 @@ packages: peerDependencies: stylelint: ^15.10.0 dependencies: - stylelint: 15.11.0(typescript@5.3.2) + stylelint: 15.11.0(typescript@5.3.3) stylelint-config-recommended: 13.0.0(stylelint@15.11.0) dev: true @@ -7792,12 +8637,12 @@ packages: peerDependencies: stylelint: ^14.0.0 || ^15.0.0 dependencies: - postcss: 8.4.31 - postcss-sorting: 8.0.2(postcss@8.4.31) - stylelint: 15.11.0(typescript@5.3.2) + postcss: 8.4.32 + postcss-sorting: 8.0.2(postcss@8.4.32) + stylelint: 15.11.0(typescript@5.3.3) dev: true - /stylelint@15.11.0(typescript@5.3.2): + /stylelint@15.11.0(typescript@5.3.3): resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true @@ -7808,7 +8653,7 @@ packages: '@csstools/selector-specificity': 3.0.0(postcss-selector-parser@6.0.13) balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 8.3.6(typescript@5.3.2) + cosmiconfig: 8.3.6(typescript@5.3.3) css-functions-list: 3.2.1 css-tree: 2.3.1 debug: 4.3.4 @@ -7829,9 +8674,9 @@ packages: micromatch: 4.0.5 normalize-path: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.31 + postcss: 8.4.32 postcss-resolve-nested-selector: 0.1.1 - postcss-safe-parser: 6.0.0(postcss@8.4.31) + postcss-safe-parser: 6.0.0(postcss@8.4.32) postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 @@ -7851,6 +8696,7 @@ packages: resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} dependencies: s.color: 0.0.15 + dev: true /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -7876,7 +8722,7 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte-check@3.6.2(postcss@8.4.31)(svelte@4.2.8): + /svelte-check@3.6.2(postcss@8.4.32)(svelte@4.2.8): resolution: {integrity: sha512-E6iFh4aUCGJLRz6QZXH3gcN/VFfkzwtruWSRmlKrLWQTiO6VzLsivR6q02WYLGNAGecV3EocqZuCDrC2uttZ0g==} hasBin: true peerDependencies: @@ -7889,8 +8735,8 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 4.2.8 - svelte-preprocess: 5.1.1(postcss@8.4.31)(svelte@4.2.8)(typescript@5.3.2) - typescript: 5.3.2 + svelte-preprocess: 5.1.1(postcss@8.4.32)(svelte@4.2.8)(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -7915,8 +8761,8 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - postcss: 8.4.31 - postcss-scss: 4.0.9(postcss@8.4.31) + postcss: 8.4.32 + postcss-scss: 4.0.9(postcss@8.4.32) svelte: 4.2.8 dev: true @@ -7928,7 +8774,7 @@ packages: dependencies: svelte: 4.2.8 - /svelte-language-server@0.16.1(postcss@8.4.31): + /svelte-language-server@0.16.1(postcss@8.4.32): resolution: {integrity: sha512-nbP0fbqvm1HQ0oOyJDdb3OUeEpvgG5aOpa1eNaWJaVQ7+94ie6H8dv5+Zx9lkfV66ADjvEDS9tcTAM4jWTS+1Q==} engines: {node: '>= 12.0.0'} hasBin: true @@ -7942,9 +8788,9 @@ packages: prettier: 3.1.0 prettier-plugin-svelte: 3.1.2(prettier@3.1.0)(svelte@3.59.2) svelte: 3.59.2 - svelte-preprocess: 5.1.1(postcss@8.4.31)(svelte@3.59.2)(typescript@5.3.2) - svelte2tsx: 0.6.27(svelte@3.59.2)(typescript@5.3.2) - typescript: 5.3.2 + svelte-preprocess: 5.1.1(postcss@8.4.32)(svelte@3.59.2)(typescript@5.3.3) + svelte2tsx: 0.6.27(svelte@3.59.2)(typescript@5.3.3) + typescript: 5.3.3 vscode-css-languageservice: 6.2.11 vscode-html-languageservice: 5.1.1 vscode-languageserver: 8.0.2 @@ -7972,7 +8818,7 @@ packages: svelte: 4.2.8 dev: false - /svelte-preprocess@5.1.1(postcss@8.4.31)(svelte@3.59.2)(typescript@5.3.2): + /svelte-preprocess@5.1.1(postcss@8.4.32)(svelte@3.59.2)(typescript@5.3.3): resolution: {integrity: sha512-p/Dp4hmrBW5mrCCq29lEMFpIJT2FZsRlouxEc5qpbOmXRbaFs7clLs8oKPwD3xCFyZfv1bIhvOzpQkhMEVQdMw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -8013,14 +8859,14 @@ packages: '@types/pug': 2.0.10 detect-indent: 6.1.0 magic-string: 0.27.0 - postcss: 8.4.31 + postcss: 8.4.32 sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 3.59.2 - typescript: 5.3.2 + typescript: 5.3.3 dev: true - /svelte-preprocess@5.1.1(postcss@8.4.31)(svelte@4.2.8)(typescript@5.3.2): + /svelte-preprocess@5.1.1(postcss@8.4.32)(svelte@4.2.8)(typescript@5.3.3): resolution: {integrity: sha512-p/Dp4hmrBW5mrCCq29lEMFpIJT2FZsRlouxEc5qpbOmXRbaFs7clLs8oKPwD3xCFyZfv1bIhvOzpQkhMEVQdMw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -8061,14 +8907,14 @@ packages: '@types/pug': 2.0.10 detect-indent: 6.1.0 magic-string: 0.27.0 - postcss: 8.4.31 + postcss: 8.4.32 sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 4.2.8 - typescript: 5.3.2 + typescript: 5.3.3 dev: true - /svelte2tsx@0.6.27(svelte@3.59.2)(typescript@5.3.2): + /svelte2tsx@0.6.27(svelte@3.59.2)(typescript@5.3.3): resolution: {integrity: sha512-E1uPW1o6VsbRz+nUk3fznZ2lSmCITAJoNu8AYefWSvIwE2pSB01i5sId4RMbWNzfcwCQl1DcgGShCPcldl4rvg==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 @@ -8077,10 +8923,10 @@ packages: dedent-js: 1.0.1 pascal-case: 3.1.2 svelte: 3.59.2 - typescript: 5.3.2 + typescript: 5.3.3 dev: true - /svelte2tsx@0.6.27(svelte@4.2.8)(typescript@5.3.2): + /svelte2tsx@0.6.27(svelte@4.2.8)(typescript@5.3.3): resolution: {integrity: sha512-E1uPW1o6VsbRz+nUk3fznZ2lSmCITAJoNu8AYefWSvIwE2pSB01i5sId4RMbWNzfcwCQl1DcgGShCPcldl4rvg==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 @@ -8089,7 +8935,7 @@ packages: dedent-js: 1.0.1 pascal-case: 3.1.2 svelte: 4.2.8 - typescript: 5.3.2 + typescript: 5.3.3 /svelte@3.59.2: resolution: {integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==} @@ -8131,6 +8977,14 @@ packages: picocolors: 1.0.0 dev: false + /synckit@0.8.6: + resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + dev: true + /table@6.8.1: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} @@ -8204,6 +9058,11 @@ packages: globrex: 0.1.2 dev: true + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -8233,23 +9092,23 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: false - /ts-api-utils@1.0.3(typescript@5.3.2): + /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.2 + typescript: 5.3.3 dev: true - /ts-morph@20.0.0: - resolution: {integrity: sha512-JVmEJy2Wow5n/84I3igthL9sudQ8qzjh/6i4tmYCm6IqYyKFlNbJZi7oBdjyqcWSWYRu3CtL0xbT6fS03ESZIg==} + /ts-morph@21.0.1: + resolution: {integrity: sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==} dependencies: - '@ts-morph/common': 0.21.0 + '@ts-morph/common': 0.22.0 code-block-writer: 12.0.0 dev: true - /tsconfck@3.0.0(typescript@5.3.2): + /tsconfck@3.0.0(typescript@5.3.3): resolution: {integrity: sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==} engines: {node: ^18 || >=20} hasBin: true @@ -8259,14 +9118,14 @@ packages: typescript: optional: true dependencies: - typescript: 5.3.2 + typescript: 5.3.3 dev: false /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsx@4.6.1: - resolution: {integrity: sha512-OQ4TAPHXAPUo/NZAmmIybl0o8LFOTlycQxFepLBAp6EV87U88fOKYGCQI2viGAEOVU9UW/cgQcxcOMnfEKVY3Q==} + /tsx@4.6.2: + resolution: {integrity: sha512-QPpBdJo+ZDtqZgAnq86iY/PD2KYCUPSUGIunHdGwyII99GKH+f3z3FZ8XNFLSGQIA4I365ui8wnQpl8OKLqcsg==} engines: {node: '>=18.0.0'} hasBin: true dependencies: @@ -8307,6 +9166,16 @@ packages: engines: {node: '>=10'} dev: true + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + /type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -8366,7 +9235,7 @@ packages: peerDependencies: typedoc: ^0.25.0 dependencies: - typedoc: 0.25.2(typescript@5.3.2) + typedoc: 0.25.2(typescript@5.3.3) typescript: 5.2.2 dev: false @@ -8375,7 +9244,7 @@ packages: peerDependencies: typedoc: '>= 0.23.14 || 0.24.x || 0.25.x' dependencies: - typedoc: 0.25.2(typescript@5.3.2) + typedoc: 0.25.2(typescript@5.3.3) dev: false /typedoc-plugin-merge-modules@5.1.0(typedoc@0.25.2): @@ -8383,7 +9252,7 @@ packages: peerDependencies: typedoc: 0.24.x || 0.25.x dependencies: - typedoc: 0.25.2(typescript@5.3.2) + typedoc: 0.25.2(typescript@5.3.3) dev: false /typedoc-plugin-remove-references@0.0.6: @@ -8395,7 +9264,7 @@ packages: peerDependencies: typedoc: 0.22.x || 0.23.x || 0.24.x || 0.25.x dependencies: - typedoc: 0.25.2(typescript@5.3.2) + typedoc: 0.25.2(typescript@5.3.3) dev: false /typedoc-plugin-zod@1.1.0(typedoc@0.25.2): @@ -8403,10 +9272,10 @@ packages: peerDependencies: typedoc: 0.23.x || 0.24.x || 0.25.x dependencies: - typedoc: 0.25.2(typescript@5.3.2) + typedoc: 0.25.2(typescript@5.3.3) dev: false - /typedoc@0.25.2(typescript@5.3.2): + /typedoc@0.25.2(typescript@5.3.3): resolution: {integrity: sha512-286F7BeATBiWe/qC4PCOCKlSTwfnsLbC/4cZ68oGBbvAqb9vV33quEOXx7q176OXotD+JdEerdQ1OZGJ818lnA==} engines: {node: '>= 16'} hasBin: true @@ -8417,7 +9286,7 @@ packages: marked: 4.3.0 minimatch: 9.0.3 shiki: 0.14.5 - typescript: 5.3.2 + typescript: 5.3.3 dev: false /typesafe-path@0.2.2: @@ -8440,7 +9309,7 @@ packages: esbuild: 0.19.5 esbuild-plugin-copy: 2.1.1(esbuild@0.19.5) fast-glob: 3.3.1 - typedoc: 0.25.2(typescript@5.3.2) + typedoc: 0.25.2(typescript@5.3.3) typedoc-plugin-keywords: 1.5.0(typedoc@0.25.2) typedoc-plugin-mdn-links: 3.1.0(typedoc@0.25.2) typedoc-plugin-merge-modules: 5.1.0(typedoc@0.25.2) @@ -8456,8 +9325,8 @@ packages: hasBin: true dev: false - /typescript@5.3.2: - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true @@ -8619,13 +9488,18 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - /update-browserslist-db@1.0.13(browserslist@4.22.1): + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.1 + browserslist: 4.22.2 escalade: 3.1.1 picocolors: 1.0.0 dev: false @@ -8702,8 +9576,8 @@ packages: vfile-message: 4.0.2 dev: false - /vite@4.5.0(@types/node@20.10.2): - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + /vite@4.5.1(@types/node@20.10.4): + resolution: {integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -8730,14 +9604,14 @@ packages: terser: optional: true dependencies: - '@types/node': 20.10.2 + '@types/node': 20.10.4 esbuild: 0.18.20 - postcss: 8.4.31 + postcss: 8.4.32 rollup: 3.29.4 optionalDependencies: fsevents: 2.3.3 - /vitefu@0.2.5(vite@4.5.0): + /vitefu@0.2.5(vite@4.5.1): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -8745,7 +9619,7 @@ packages: vite: optional: true dependencies: - vite: 4.5.0(@types/node@20.10.2) + vite: 4.5.1(@types/node@20.10.4) /volar-service-css@0.0.16(@volar/language-service@1.10.10): resolution: {integrity: sha512-gK/XD35t/P3SQrUuS8LMlCnE2ItIk+kXI6gPvBYl1NZ7O+tLH8rUWXA32YgpwNoITxYrm/G1seaq08zs4aiPvg==} @@ -8926,6 +9800,33 @@ packages: is-symbol: 1.0.4 dev: true + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: true + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + /which-pm-runs@1.1.0: resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} engines: {node: '>=4'} diff --git a/scripts/add-source-links.ts b/scripts/add-source-links.ts index 727bb0c..facfff2 100644 --- a/scripts/add-source-links.ts +++ b/scripts/add-source-links.ts @@ -1,16 +1,16 @@ // Replaces @sourceLink in JSDocs with GitHub URLs in source files References the git url provided // in package.json. -import { getAllLibFiles, getGithubUrlForSourceFile } from './ast-tools'; -import fs from 'fs'; -import path from 'path'; +import { getAllLibraryFiles, getGithubUrlForSourceFile } from './ast-tools'; +import fs from 'node:fs'; +import path from 'node:path'; const verbose = false; -const files = getAllLibFiles(); +const files = getAllLibraryFiles(); function addLinksToComponentBlock(filePath: string): void { - const fileContent = fs.readFileSync(filePath, 'utf-8'); + const fileContent = fs.readFileSync(filePath, 'utf8'); const fileName = path.basename(filePath); const url = getGithubUrlForSourceFile(filePath); @@ -21,21 +21,21 @@ function addLinksToComponentBlock(filePath: string): void { `@sourceLink\n[${fileName}](${url})\n` ); - if (fileContent !== updatedContent) { - verbose && console.log(`Added source links to ${filePath}`); - fs.writeFileSync(filePath, updatedContent, 'utf-8'); - } else { + if (fileContent === updatedContent) { // warn if we have undocumented svelte components if (filePath.endsWith('.svelte') && !fileContent.includes('@sourceLink')) { console.warn(`No @sourceLink found in ${filePath}`); } + } else { + verbose && console.log(`Added source links to ${filePath}`); + fs.writeFileSync(filePath, updatedContent, 'utf8'); } } console.log(`Replacing @sourceLink with GitHub URLs in ${files.length} files...`); -files.forEach((filePath) => { +for (const filePath of files) { addLinksToComponentBlock(filePath); -}); +} console.log(`Done.`); diff --git a/scripts/ast-tools.ts b/scripts/ast-tools.ts index 18ca29b..2edf873 100644 --- a/scripts/ast-tools.ts +++ b/scripts/ast-tools.ts @@ -1,10 +1,10 @@ // TypeScript AST traversal and extraction tools used by various scripts. import { query as tsquery } from '@phenomnomnominal/tsquery'; -import { exec } from 'child_process'; import { ESLint } from 'eslint'; -import fs from 'fs'; import { globSync } from 'glob'; -import path from 'path'; +import { exec } from 'node:child_process'; +import fs from 'node:fs'; +import path from 'node:path'; import { format as prettierFormat, resolveConfig } from 'prettier'; // import stylelint from 'stylelint'; import { svelte2tsx } from 'svelte2tsx'; @@ -38,14 +38,14 @@ function findFile( export function getGithubUrlForSourceFile(filePath: string): string { // gonna be slow - const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf-8')); + const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8')); const sourceBaseUrl = packageJson.repository.url.replace('.git', '') + '/blob/main/'; return sourceBaseUrl + filePath; } export function getEditUrlForSourceFile(filePath: string): string { // gonna be slow - const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf-8')); + const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8')); const sourceBaseUrl = packageJson.repository.url.replace('.git', '') + '/edit/main/'; return sourceBaseUrl + filePath; } @@ -61,13 +61,13 @@ export function getSourceFilePath(componentName: string, warn: boolean = true): return findFile('src/lib', componentName, '.svelte', warn); } -export function getAllLibFiles(): string[] { +export function getAllLibraryFiles(): string[] { return globSync('./src/lib/**/*').filter((file) => { return fs.statSync(file).isFile(); }); } -export function getAllLibComponentNames(): string[] { +export function getAllLibraryComponentNames(): string[] { // what happens with js components? return globSync('./src/lib/**/*.svelte').map((file) => { return path.basename(file).replace('.svelte', ''); @@ -79,7 +79,7 @@ export function getExportedComponents(indexPath: string): { name: string; path: new Project().addSourceFileAtPath(indexPath), 'ExportDeclaration StringLiteral[value=/.+.svelte/]' ).map((node) => { - const cleanPath = node.getText().replace(/['"]/g, ''); + const cleanPath = node.getText().replace(/["']/g, ''); return { name: path.basename(cleanPath).replace('.svelte', ''), @@ -98,7 +98,7 @@ export function getExportedJs(indexPath: string): { name: string; path: string } const path = queryTree(node, 'StringLiteral') .at(0)! .getText() - .replace(/['"]/g, ''); + .replace(/["']/g, ''); return { name, @@ -129,10 +129,10 @@ export type PropNode = MethodSignature | PropertySignature; */ export function getProp( source: Node | string, - propName: string, + propertyName: string, include: 'all' | 'commented' | 'uncommented' = 'all' ): PropNode | undefined { - return getPropsInternal(source, include, propName)[0]; + return getPropsInternal(source, include, propertyName)[0]; } /** @@ -150,7 +150,7 @@ export function getProps( function getPropsInternal( source: Node | string, include: 'all' | 'commented' | 'uncommented' = 'all', - propName?: string + propertyName?: string ): PropNode[] { return queryTree( typeof source === 'string' @@ -159,14 +159,14 @@ function getPropsInternal( ':declaration [name.name="props"] :matches(PropertySignature, MethodSignature):not(:declaration [name.name="props"] :matches(PropertySignature, MethodSignature) :matches(PropertySignature, MethodSignature))' + (include === 'commented' ? ':has([jsDoc])' : '') + (include === 'uncommented' ? ':not(:has([jsDoc]))' : '') + - (propName !== undefined ? `[name.name="${propName}"]` : '') + (propertyName === undefined ? '' : `[name.name="${propertyName}"]`) ); } // doc-specific function extractCodeBlock(inputString: string): string | undefined { - const regex = /```(?:\w*\n)([\s\S]+?)```/gm; + const regex = /```\w*\n([\S\s]+?)```/gm; const match = regex.exec(inputString); if (match && match[1]) { return match[1].trim(); @@ -181,7 +181,7 @@ export async function getComponentExampleCodeFromSource( const componentPath = getSourceFilePath(componentName); if (!componentPath) return undefined; - const componentCode = svelte2tsx(fs.readFileSync(componentPath, 'utf-8')).code; + const componentCode = svelte2tsx(fs.readFileSync(componentPath, 'utf8')).code; const classDeclaration = queryTree( new Project().createSourceFile('TempComponent.ts', componentCode), @@ -225,7 +225,7 @@ export async function getComponentExampleCodeFromSource( // Pull out just the @example code fence // TODO multiple example support (via .exec, /g doesn't work with .match) - exampleCommentWithFence = fullCommentText.match(/@example[\s\S]+(```[\s\S]+```)/m)?.at(1); + exampleCommentWithFence = fullCommentText.match(/@example[\S\s]+(```[\S\s]+```)/m)?.at(1); } if (exampleCommentWithFence === undefined) { @@ -320,7 +320,7 @@ export async function format(code: string, formatParser: string): Promise { +export async function getLastUpdatedDate(filePath: string): Promise { return new Promise((resolve, reject) => { exec(`git log -1 --format=%cd "${filePath}"`, (error, stdout) => { if (error) { @@ -328,8 +328,8 @@ export async function getLastUpdatedDate(filePath: string): Promise a.name.localeCompare(b.name)); // } -function jsDocTagInfoToJsDocRecord(jsDocTags: ts.JSDocTagInfo[]): JSDocRecord { +function jsDocumentTagInfoToJsDocumentRecord(jsDocumentTags: ts.JSDocTagInfo[]): JSDocRecord { const result: JSDocRecord = {}; - for (const tag of jsDocTags) { + for (const tag of jsDocumentTags) { result[tag.name] = ts.displayPartsToString(tag.text); } return result; @@ -64,15 +64,15 @@ async function getStaticComponentInfo(componentPath: string): Promise p.name === prop.name); + for (const property of info.props) { + const lsProp = lsPropInfo.find((p) => p.name === property.name); if (!lsProp) { - console.warn(`No LS prop found for ${prop.name}`); + console.warn(`No LS prop found for ${property.name}`); continue; } - prop.type = lsProp.type; + property.type = lsProp.type; } return info; @@ -83,27 +83,27 @@ async function getStaticComponentInfoInternal( componentPath: string ): Promise { // set up language server - const testDir = '.'; - const path = join(testDir, componentPath); + const testDirectory = '.'; + const path = join(testDirectory, componentPath); - const docManager = new DocumentManager( + const documentManager = new DocumentManager( (textDocument) => new Document(textDocument.uri, textDocument.text) ); - const lsAndTsDocResolver = new LSAndTSDocResolver( - docManager, - [pathToUrl(testDir)], + const lsAndTsDocumentResolver = new LSAndTSDocResolver( + documentManager, + [pathToUrl(testDirectory)], new LSConfigManager(), - { tsconfigPath: join(testDir, 'tsconfig.json') } + { tsconfigPath: join(testDirectory, 'tsconfig.json') } ); // eslint-disable-next-line @typescript-eslint/no-explicit-any - const document = docManager.openClientDocument({ + const document = documentManager.openClientDocument({ text: ts.sys.readFile(path), uri: `file:///${path}` }); - const { lang, tsDoc } = await lsAndTsDocResolver.getLSAndTSDoc(document); + const { lang, tsDoc } = await lsAndTsDocumentResolver.getLSAndTSDoc(document); const program = lang.getProgram(); if (!program) return undefined; @@ -111,14 +111,14 @@ async function getStaticComponentInfoInternal( const componentSourceFile = program.getSourceFile(tsDoc.filePath); if (!componentSourceFile) return undefined; - const classDef = getClassDef(componentSourceFile); - if (!classDef) { + const classDefinition = getClassDefinition(componentSourceFile); + if (!classDefinition) { console.error('No class def found.'); return undefined; } const typeChecker = program.getTypeChecker(); - const classType = typeChecker.getTypeAtLocation(classDef); + const classType = typeChecker.getTypeAtLocation(classDefinition); const classSymbol = classType.getSymbol(); if (!classSymbol) { @@ -130,7 +130,7 @@ async function getStaticComponentInfoInternal( const results: ComponentInfo = { doc: ts.displayPartsToString(classSymbol.getDocumentationComment(typeChecker)), events: getInfoFor('$$events_def', classType, typeChecker), // natural sorting... - jsDocs: jsDocTagInfoToJsDocRecord(classSymbol.getJsDocTags()), + jsDocs: jsDocumentTagInfoToJsDocumentRecord(classSymbol.getJsDocTags()), name: componentPath.split('/').pop()!.replace('.svelte', ''), path: componentPath, pathParts: componentPath.split('/').slice(3, -1), @@ -138,29 +138,29 @@ async function getStaticComponentInfoInternal( slots: getInfoFor('$$slot_def', classType, typeChecker) // natural sorting... }; - lsAndTsDocResolver.deleteSnapshot(tsDoc.filePath); + lsAndTsDocumentResolver.deleteSnapshot(tsDoc.filePath); return results; } // ---------------------- -function getClassDef(sourceFile: ts.SourceFile): ts.Node | undefined { - let classDef: ts.Node | undefined = undefined; +function getClassDefinition(sourceFile: ts.SourceFile): ts.Node | undefined { + let classDefinition: ts.Node | undefined = undefined; sourceFile.forEachChild((node) => { if (ts.isClassDeclaration(node)) { - classDef = node; + classDefinition = node; } }); - return classDef; + return classDefinition; } // Adapted from ComponentInfoProvider function mapPropertiesOfType(typeChecker: ts.TypeChecker, type: ts.Type) { return type .getProperties() - .map((prop: ts.Symbol) => { + .map((property: ts.Symbol) => { // type would still be correct when there're multiple declarations - const declaration = prop.valueDeclaration ?? prop.declarations?.[0]; + const declaration = property.valueDeclaration ?? property.declarations?.[0]; if (!declaration) { return; } @@ -169,29 +169,29 @@ function mapPropertiesOfType(typeChecker: ts.TypeChecker, type: ts.Type) { // this doesn't seem to give the same type strings // for now, the type field is later discarded and replaced with the language-server's output return { - doc: ts.displayPartsToString(prop.getDocumentationComment(typeChecker)), - jsDocs: jsDocTagInfoToJsDocRecord(prop.getJsDocTags()), - name: prop.name, - type: typeChecker.typeToString(typeChecker.getTypeOfSymbolAtLocation(prop, declaration)) + doc: ts.displayPartsToString(property.getDocumentationComment(typeChecker)), + jsDocs: jsDocumentTagInfoToJsDocumentRecord(property.getJsDocTags()), + name: property.name, + type: typeChecker.typeToString(typeChecker.getTypeOfSymbolAtLocation(property, declaration)) }; }) - .filter(isNotNullOrUndefined); + .filter((element) => isNotNullOrUndefined(element)) as ComponentPartInfo; } function getInfoFor( - propName: string, + propertyName: string, classType: ts.Type, typeChecker: ts.TypeChecker ): ComponentPartInfo { - const propSymbol = classType.getProperty(propName); + const propertySymbol = classType.getProperty(propertyName); - if (propSymbol && propSymbol.valueDeclaration) { - const propsType = typeChecker.getTypeOfSymbolAtLocation( - propSymbol, - propSymbol.valueDeclaration + if (propertySymbol && propertySymbol.valueDeclaration) { + const propertiesType = typeChecker.getTypeOfSymbolAtLocation( + propertySymbol, + propertySymbol.valueDeclaration ); - return mapPropertiesOfType(typeChecker, propsType); + return mapPropertiesOfType(typeChecker, propertiesType); } return []; } @@ -202,17 +202,17 @@ async function getDynamicComponentProps( testProps: ComponentPropCondition ): Promise { // set up language server - const testDir = '.'; + const testDirectory = '.'; - const docManager = new DocumentManager( + const documentManager = new DocumentManager( (textDocument) => new Document(textDocument.uri, textDocument.text) ); - const lsAndTsDocResolver = new LSAndTSDocResolver( - docManager, - [pathToUrl(testDir)], + const lsAndTsDocumentResolver = new LSAndTSDocResolver( + documentManager, + [pathToUrl(testDirectory)], new LSConfigManager(), - { tsconfigPath: join(testDir, 'tsconfig.json') } + { tsconfigPath: join(testDirectory, 'tsconfig.json') } ); const componentName = componentPath.split('/').pop()!.replace('.svelte', ''); @@ -226,12 +226,12 @@ async function getDynamicComponentProps( // generated file name must be unique, cleanup doesn't seem to be enough // to avoid stale autocompletion values across repeat invocations // eslint-disable-next-line @typescript-eslint/no-explicit-any - const document = docManager.openClientDocument({ + const document = documentManager.openClientDocument({ text: testComponentSourceRows.join('\n'), uri: `file:///in-memory-${componentName}-${nanoid()}.svelte` }); - const { lang, tsDoc } = await lsAndTsDocResolver.getLSAndTSDoc(document); + const { lang, tsDoc } = await lsAndTsDocumentResolver.getLSAndTSDoc(document); const program = lang.getProgram(); if (!program) return []; @@ -261,23 +261,24 @@ async function getDynamicComponentProps( tsDoc.filePath, tsDoc.offsetAt(tsDoc.getGeneratedPosition(testPosition)), entry.name, + // eslint-disable-next-line unicorn/no-useless-undefined undefined ); return { doc: ts.displayPartsToString(completionSymbols!.getDocumentationComment(typeChecker)), - jsDocs: jsDocTagInfoToJsDocRecord(completionSymbols!.getJsDocTags()), + jsDocs: jsDocumentTagInfoToJsDocumentRecord(completionSymbols!.getJsDocTags()), name: entry.name, type: typeChecker.typeToString(typeChecker.getTypeOfSymbol(completionSymbols!)) }; }) ?? []; - lsAndTsDocResolver.deleteSnapshot(tsDoc.filePath); + lsAndTsDocumentResolver.deleteSnapshot(tsDoc.filePath); return results; } -function generateStringFromPropObject(propsObject: ComponentPropCondition): string { - return Object.entries(propsObject) +function generateStringFromPropObject(propertiesObject: ComponentPropCondition): string { + return Object.entries(propertiesObject) .map(([key, value]) => { const formattedValue = typeof value === 'string' ? `"${value}"` : `{${value}}`; return `${key}=${formattedValue}`; diff --git a/scripts/format-embedded-code.ts b/scripts/format-embedded-code.ts index 727b59c..b926d23 100644 --- a/scripts/format-embedded-code.ts +++ b/scripts/format-embedded-code.ts @@ -1,5 +1,5 @@ -import { getAllLibFiles, lintAndFormat } from './ast-tools'; -import fs from 'fs'; +import { getAllLibraryFiles, lintAndFormat } from './ast-tools'; +import fs from 'node:fs'; // assumes all code blocks are svelte-like async function formatEmbeddedCode(file: string): Promise { @@ -8,7 +8,7 @@ async function formatEmbeddedCode(file: string): Promise { const data = fs.readFileSync(file, 'utf8'); let formattedData = ''; let lastIndex = 0; - const regex = /(```.*\n)([\s\S]*?)(\n```)/g; + const regex = /(```.*\n)([\S\s]*?)(\n```)/g; let match: RegExpExecArray | null; while ((match = regex.exec(data)) !== null) { @@ -23,8 +23,8 @@ async function formatEmbeddedCode(file: string): Promise { embedsFormatted++; // Using the original opening and closing backticks formattedData += `${opening}${formattedCode.trimEnd()}${closing}`; - } catch (e) { - console.error(`Error formatting code: ${e}`); + } catch (error) { + console.error(`Error formatting code: ${error}`); formattedData += fullMatch; } @@ -40,13 +40,13 @@ async function formatEmbeddedCode(file: string): Promise { } else { fs.writeFileSync(file, formattedData, 'utf8'); } - } catch (err) { - console.error(`Error: ${err}`); + } catch (error) { + console.error(`Error: ${error}`); } return embedsFormatted; } -const files = getAllLibFiles(); +const files = getAllLibraryFiles(); console.log(`Checking ${files.length} files for embedded code blocks with incorrect formatting...`); diff --git a/scripts/generate-doc-data.ts b/scripts/generate-documentation-data.ts similarity index 92% rename from scripts/generate-doc-data.ts rename to scripts/generate-documentation-data.ts index ba8048a..512d8dd 100644 --- a/scripts/generate-doc-data.ts +++ b/scripts/generate-documentation-data.ts @@ -5,8 +5,8 @@ import { getLastUpdatedDate } from './ast-tools'; import { ComponentDynamicPropTest, getComponentInfo } from './component-info'; -import fs from 'fs'; -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; import YAML from 'yaml'; // figures out prop data from src components @@ -30,7 +30,7 @@ async function generateComponentData( let content: string; switch (outputFormat) { - case 'mdx': + case 'mdx': { { // Add some extra metadata for Astro // The shape of this object needs to be coordinated with the Astro @@ -39,7 +39,7 @@ async function generateComponentData( componentData: componentInfo, editUrl: false, lastUpdated: (await getLastUpdatedDate(expandedPath)) ?? false, - note: `Generated by generate-doc-data.ts from JSDoc information in "${expandedPath}" at ${new Date().toISOString()}. Do not edit directly.`, + note: `Generated by generate-documentation-data.ts from JSDoc information in "${expandedPath}" at ${new Date().toISOString()}. Do not edit directly.`, sourceUrl: getGithubUrlForSourceFile(expandedPath), title: componentName }; @@ -79,9 +79,11 @@ async function generateComponentData( // } } break; - case 'json': - content = await format(JSON.stringify(componentInfo, null, 2), 'json'); + } + case 'json': { + content = await format(JSON.stringify(componentInfo, undefined, 2), 'json'); break; + } } fs.writeFileSync(resolvedPath, content); @@ -108,7 +110,7 @@ if (fs.existsSync(destination)) { for (const { name, path } of components) { // TODO break out and pass in this config... // Pass custom dynamic prop test cases to certain components - let testProps: ComponentDynamicPropTest[] | undefined = undefined; + let testProps: ComponentDynamicPropTest[] | undefined; if (name === 'Pane') { testProps = [ diff --git a/scripts/generate-example-components.ts b/scripts/generate-example-components.ts index cd36a1f..e082d66 100644 --- a/scripts/generate-example-components.ts +++ b/scripts/generate-example-components.ts @@ -4,27 +4,28 @@ import { lintAndFormat } from './ast-tools'; import fs from 'fs-extra'; import { globSync } from 'glob'; -import path from 'path'; +import path from 'node:path'; fs.rmSync('./docs/src/examples', { force: true, recursive: true }); fs.copySync('./src/examples', './docs/src/examples'); -globSync('./docs/src/examples/**/*.svelte').forEach(async (filePath) => { +const files = globSync('./docs/src/examples/**/*.svelte'); +for (const filePath of files) { try { - const dir = path.dirname(filePath); + const directory = path.dirname(filePath); const baseName = path.basename(filePath, '.svelte'); // re-format and save .svelte file - let svelteContent = fs.readFileSync(filePath, 'utf-8'); + let svelteContent = fs.readFileSync(filePath, 'utf8'); svelteContent = svelteContent.replace(/'\$lib/, "'svelte-tweakpane-ui"); const formattedSvelteContent = await lintAndFormat(svelteContent, 'svelte'); fs.writeFileSync(filePath, formattedSvelteContent); // generate markdown with title const markdownContent = '```svelte title="' + baseName + '.svelte"\n' + svelteContent + '```\n'; - const markdownPath = path.join(dir, `${baseName}.md`); + const markdownPath = path.join(directory, `${baseName}.md`); fs.writeFileSync(markdownPath, markdownContent); } catch (error) { console.error(`Error processing file ${filePath}:`, error); } -}); +} diff --git a/scripts/generate-exports.ts b/scripts/generate-exports.ts index f890663..6bb42cc 100644 --- a/scripts/generate-exports.ts +++ b/scripts/generate-exports.ts @@ -1,5 +1,5 @@ import { getExportedComponents, getExportedJs } from './ast-tools'; -import fs from 'fs'; +import fs from 'node:fs'; // Inspired by https://github.com/shinokada/svelte-lib-helpers @@ -22,7 +22,7 @@ function addExports(sourceIndexFile: string, destinationPackageFile: string) { }; // extract components from index file - getExportedComponents(sourceIndexFile).forEach((component) => { + for (const component of getExportedComponents(sourceIndexFile)) { const { name, path } = component; const key = `./${name}.svelte`; @@ -32,10 +32,10 @@ function addExports(sourceIndexFile: string, destinationPackageFile: string) { exports[key] = { types, svelte }; verbose && console.log(exports[key]); - }); + } // extract JS exports from index file (like Utils, etc.) - getExportedJs(sourceIndexFile).forEach((file) => { + for (const file of getExportedJs(sourceIndexFile)) { const { name, path } = file; const key = `./${name}.js`; @@ -45,10 +45,10 @@ function addExports(sourceIndexFile: string, destinationPackageFile: string) { exports[key] = { types, default: defaultValue }; verbose && console.log(exports[key]); - }); + } // save to package.json - const packageJson = JSON.parse(fs.readFileSync(destinationPackageFile, 'utf-8')); + const packageJson = JSON.parse(fs.readFileSync(destinationPackageFile, 'utf8')); packageJson.exports = exports; packageJson.types = './dist/index.d.ts'; @@ -56,7 +56,7 @@ function addExports(sourceIndexFile: string, destinationPackageFile: string) { // https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/faq.md#conflicts-in-svelte-resolve // packageJson.svelte = './dist/index.d.ts'; - fs.writeFileSync(destinationPackageFile, JSON.stringify(packageJson, null, 2)); + fs.writeFileSync(destinationPackageFile, JSON.stringify(packageJson, undefined, 2)); console.log( `Done. Wrote 'types' and ${ diff --git a/scripts/generate-kit-examples.ts b/scripts/generate-kit-examples.ts index e8c191f..509506e 100644 --- a/scripts/generate-kit-examples.ts +++ b/scripts/generate-kit-examples.ts @@ -1,7 +1,11 @@ // extracts and saves example blocks from component jsdoc, -import { getComponentExampleCodeFromSource, getExportedComponents } from './ast-tools'; -import fs from 'fs'; +import { + getComponentExampleCodeFromSource, + getExportedComponents, + lintAndFormat +} from './ast-tools'; +import fs from 'node:fs'; const components = getExportedComponents('./src/lib/index.ts'); @@ -10,9 +14,10 @@ fs.mkdirSync('./src/examples/components', { recursive: true }); for (const { name } of components) { const code = await getComponentExampleCodeFromSource(name, false); if (code) { + // format _again_ because the import name change can mess up perfectionist's sort order fs.writeFileSync( `./src/examples/components/${name}Example.svelte`, - code.replace(/'svelte-tweakpane-ui/, "'$lib") + await lintAndFormat(code.replace(/'svelte-tweakpane-ui/, "'$lib")) ); } } diff --git a/scripts/heal-dts-comments.ts b/scripts/heal-dts-comments.ts index 6498257..a088b23 100644 --- a/scripts/heal-dts-comments.ts +++ b/scripts/heal-dts-comments.ts @@ -1,6 +1,6 @@ import { type PropNode, - getAllLibComponentNames, + getAllLibraryComponentNames, getDefinitionFilePath, getProp, getProps, @@ -54,7 +54,8 @@ function inheritPropCommentsAndSave(componentName: string): number { const definitionFile = new Project().addSourceFileAtPath(getDefinitionFilePath(componentName)!); - getProps(definitionFile, 'uncommented')?.forEach((propNode) => { + const props = getProps(definitionFile, 'uncommented'); + for (const propNode of props) { // check self first, then go up the component inheritance chain const comments = getCommentForProp(componentName, propNode.getName()) ?? @@ -71,7 +72,7 @@ function inheritPropCommentsAndSave(componentName: string): number { `Component <${componentName}> is missing comment for prop "${propNode.getName()}"` ); } - }); + } definitionFile.saveSync(); return quantityFixed; @@ -80,15 +81,15 @@ function inheritPropCommentsAndSave(componentName: string): number { // Main let totalPropsFixed = 0; -const componentNames = getAllLibComponentNames(); +const componentNames = getAllLibraryComponentNames(); console.log(`Healing missing prop comments for ${componentNames.length} components...`); // Order doesn't matter since going up the chain is consistent -componentNames.forEach((componentName) => { +for (const componentName of componentNames) { verbose && console.log(`Adding missing prop comments for "${componentName}"`); totalPropsFixed += inheritPropCommentsAndSave(componentName); -}); +} console.log( `Done. Found and fixed ${totalPropsFixed} missing .d.ts component prop JSDoc annotations.` diff --git a/scripts/strip-component-docs.ts b/scripts/strip-component-documentation.ts similarity index 75% rename from scripts/strip-component-docs.ts rename to scripts/strip-component-documentation.ts index a3d9e65..604c305 100644 --- a/scripts/strip-component-docs.ts +++ b/scripts/strip-component-documentation.ts @@ -1,22 +1,22 @@ // there's redundant @component documentation between the svelte file and the svelte.d.ts file -import { readFileSync, writeFileSync } from 'fs'; import { globSync } from 'glob'; +import { readFileSync, writeFileSync } from 'node:fs'; const verbose = false; function removeComponentBlock(filePath: string): void { // Read the file - const fileContent = readFileSync(filePath, 'utf-8'); + const fileContent = readFileSync(filePath, 'utf8'); // Use regular expression to remove everything between - const updatedContent = fileContent.replace(//g, ''); + const updatedContent = fileContent.replace(//g, ''); - if (fileContent !== updatedContent) { - verbose && console.log(`Stripped @component comment from ${filePath}`); - writeFileSync(filePath, updatedContent, 'utf-8'); - } else { + if (fileContent === updatedContent) { verbose && console.log(`No @component comment found in ${filePath}`); + } else { + verbose && console.log(`Stripped @component comment from ${filePath}`); + writeFileSync(filePath, updatedContent, 'utf8'); } } @@ -25,8 +25,8 @@ const svelteFiles = globSync(`./dist/**/*.svelte`); console.log(`Removing @component blocks from ${svelteFiles.length} Svelte files...`); console.log(`Documentation is preserved in .svelte.d.ts files.`); -svelteFiles.forEach((filePath) => { +for (const filePath of svelteFiles) { removeComponentBlock(filePath); -}); +} console.log(`Done.`); diff --git a/src/examples/docs/GridWrangler.svelte b/src/examples/docs/GridWrangler.svelte index 359f789..bd470a5 100644 --- a/src/examples/docs/GridWrangler.svelte +++ b/src/examples/docs/GridWrangler.svelte @@ -15,7 +15,7 @@ /* * Scale to apply to each grid item */ - export let scale: number = 1.0; + export let scale: number = 1; /* * Rotate individual grid items @@ -84,10 +84,10 @@ const points = []; - for (let i = 0; i < xPoints; i++) { - for (let j = 0; j < yPoints; j++) { - points.push([gridLeft + i * sx, gridTop + j * sy]); - if (centers && j < yPoints - 1 && i < xPoints - 1) { + for (let index = 0; index < xPoints; index++) { + for (let index_ = 0; index_ < yPoints; index_++) { + points.push([gridLeft + index * sx, gridTop + index_ * sy]); + if (centers && index_ < yPoints - 1 && index < xPoints - 1) { points.push([points.at(-1)![0] + sx / 2, points.at(-1)![1] + sy / 2]); } } diff --git a/src/examples/docs/HomeDemo.svelte b/src/examples/docs/HomeDemo.svelte index c4daeeb..ffba35b 100644 --- a/src/examples/docs/HomeDemo.svelte +++ b/src/examples/docs/HomeDemo.svelte @@ -30,6 +30,17 @@ let paneRef: HTMLDivElement; // let mounted = false; + // set up pane div pause when interacting, but not when dragging the title bar + function onPointerDown(event: PointerEvent) { + if (event.target && !hasParentWithClassName(event.target as HTMLElement, 'tp-rotv_b')) { + interacting = true; + } + } + + function onPointerUp() { + interacting = false; + } + onMount(() => { // set up frame loop let lastTime: number | undefined; @@ -44,17 +55,6 @@ } requestAnimationFrame(tick); - // set up pane div pause when interacting, but not when dragging the title bar - function onPointerDown(e: PointerEvent) { - if (e.target && !hasParentWithClassName(e.target as HTMLElement, 'tp-rotv_b')) { - interacting = true; - } - } - - function onPointerUp() { - interacting = false; - } - paneRef.addEventListener('pointerdown', onPointerDown, { capture: true }); document.addEventListener('pointerup', onPointerUp); document.addEventListener('pointercancel', onPointerUp); @@ -108,12 +108,12 @@ ); } - function hasParentWithClassName(el: HTMLElement, className: string): boolean { - if (el.classList.contains(className)) { + function hasParentWithClassName(element: HTMLElement, className: string): boolean { + if (element.classList.contains(className)) { return true; } - if (el.parentElement) { - return hasParentWithClassName(el.parentElement, className); + if (element.parentElement) { + return hasParentWithClassName(element.parentElement, className); } return false; } @@ -202,8 +202,8 @@ } } function setHeadingUp(oldPoint: PointValue4dTuple, newPoint: PointValue4dTuple) { - headingUp = headingUp.map((v, i) => { - return newPoint[i] !== oldPoint[i] ? newPoint[i] > oldPoint[i] : v; + headingUp = headingUp.map((v, index) => { + return newPoint[index] === oldPoint[index] ? v : newPoint[index] > oldPoint[index]; }) as typeof headingUp; } @@ -239,9 +239,9 @@ /> - {#each keys as k, i} + {#each keys as k, index} `${v.toFixed(2)}`} @@ -264,10 +264,10 @@ Max" - {#each keys as k, i} + {#each keys as k, index} ${k}`}> import { Slider } from '$lib'; - let speed = 50.0; + let speed = 50; diff --git a/src/examples/tests/TestCls.svelte b/src/examples/tests/TestCls.svelte index 8f77690..1fcdfc1 100644 --- a/src/examples/tests/TestCls.svelte +++ b/src/examples/tests/TestCls.svelte @@ -61,7 +61,7 @@ setInterval(() => { booleanToMonitor = !booleanToMonitor; - stringToMonitor = stringToMonitor.split('').reverse().join(''); + stringToMonitor = [...stringToMonitor].reverse().join(''); }, 1000); let rev: RotationEulerValueObject = { x: 0, y: 0, z: 0 }; @@ -106,16 +106,15 @@ const theme: Theme = { ...ThemeUtils.presets.standard, - ...{ - bladeHorizontalPadding: '20px', - containerUnitSize: '130px' - } + + bladeHorizontalPadding: '20px', + containerUnitSize: '130px' }; - let cb: CubicBezierValueTuple = [0, 0, 0, 0]; + let callback: CubicBezierValueTuple = [0, 0, 0, 0]; const keyboard = [ - ...Array.from({ length: 26 }, (_, i) => String.fromCharCode(65 + i)), + ...Array.from({ length: 26 }, (_, index) => String.fromCodePoint(65 + index)), ',', '.', '!', @@ -138,10 +137,10 @@ let loopExponent = 1; // helper to test Math functions - function hardWork(fn: (n: number) => number, exponent: number): void { - measure(fn.name, () => { + function hardWork(functionToMeasure: (n: number) => number, exponent: number): void { + measure(functionToMeasure.name, () => { for (let sum = 0; sum < Number('1e' + exponent); sum++) { - fn(sum); + functionToMeasure(sum); } }); } @@ -222,15 +221,15 @@

CB

- +

CB

- +

CB

- +

CB

- +

Button Grid

diff --git a/src/examples/tests/TestScale.svelte b/src/examples/tests/TestScale.svelte index 9b39151..09061f7 100644 --- a/src/examples/tests/TestScale.svelte +++ b/src/examples/tests/TestScale.svelte @@ -14,8 +14,8 @@ $: wave = Math.sin(time * 5); let width = 360; - let scale1 = 1.0; - let scale2 = 2.0; + let scale1 = 1; + let scale2 = 2; $: width1 = width * scale1; $: width2 = width * scale2; diff --git a/src/examples/tests/TweakpaneDemo.svelte b/src/examples/tests/TweakpaneDemo.svelte index bda0540..ea90eb1 100644 --- a/src/examples/tests/TweakpaneDemo.svelte +++ b/src/examples/tests/TweakpaneDemo.svelte @@ -25,6 +25,16 @@ import { onMount } from 'svelte'; import { type Writable, derived, writable } from 'svelte/store'; + function onPointerDown(event: PointerEvent) { + if (event.target && !hasParentWithClassName(event.target as HTMLElement, 'tp-rotv_b')) { + interacting = true; + } + } + + function onPointerUp() { + interacting = false; + } + onMount(() => { // set up frame loop let lastTime: number | undefined; @@ -41,15 +51,6 @@ // set up pane div pause when interacting, but not when dragging the title bar const paneRef = document.querySelector('div.svelte-tweakpane-ui') as HTMLDivElement; - function onPointerDown(e: PointerEvent) { - if (e.target && !hasParentWithClassName(e.target as HTMLElement, 'tp-rotv_b')) { - interacting = true; - } - } - - function onPointerUp() { - interacting = false; - } paneRef.addEventListener('pointerdown', onPointerDown, { capture: true }); document.addEventListener('pointerup', onPointerUp); @@ -84,12 +85,12 @@ ); } - function hasParentWithClassName(el: HTMLElement, className: string): boolean { - if (el.classList.contains(className)) { + function hasParentWithClassName(element: HTMLElement, className: string): boolean { + if (element.classList.contains(className)) { return true; } - if (el.parentElement) { - return hasParentWithClassName(el.parentElement, className); + if (element.parentElement) { + return hasParentWithClassName(element.parentElement, className); } return false; } @@ -165,8 +166,8 @@ } } function setHeadingUp(oldPoint: PointValue4dTuple, newPoint: PointValue4dTuple) { - headingUp = headingUp.map((v, i) => { - return newPoint[i] !== oldPoint[i] ? newPoint[i] > oldPoint[i] : v; + headingUp = headingUp.map((v, index) => { + return newPoint[index] === oldPoint[index] ? v : newPoint[index] > oldPoint[index]; }) as typeof headingUp; } @@ -204,8 +205,14 @@ /> - {#each keys as k, i} - ${k}`} pointerScale={0.002} /> + {#each keys as k, index} + ${k}`} + pointerScale={0.002} + /> {/each} @@ -213,10 +220,10 @@ /> --> - {#each keys as k, i} + {#each keys as k, index} ${k}`}> { + gridBlade.on('click', (event) => { dispatch('click', { - cell: { x: ev.index[0], y: ev.index[1] }, - index: ev.index[1] * gridDimensions.columns + ev.index[0], - label: ev.cell.title + cell: { x: event.index[0], y: event.index[1] }, + index: event.index[1] * gridDimensions.columns + event.index[0], + label: event.cell.title }); }); @@ -138,29 +138,29 @@ position='inline'>`. @example ```svelte @@ -173,27 +173,27 @@ position='inline'>`. ``` diff --git a/src/lib/control/Checkbox.svelte b/src/lib/control/Checkbox.svelte index 292a38a..f75b44a 100644 --- a/src/lib/control/Checkbox.svelte +++ b/src/lib/control/Checkbox.svelte @@ -20,9 +20,9 @@ position='inline'>`. @example ```svelte diff --git a/src/lib/control/Color.svelte b/src/lib/control/Color.svelte index 98c3565..a4a2a35 100644 --- a/src/lib/control/Color.svelte +++ b/src/lib/control/Color.svelte @@ -131,10 +131,10 @@ position='inline'>`. @example ```svelte @@ -143,11 +143,11 @@ position='inline'>`.
``` diff --git a/src/lib/control/CubicBezier.svelte b/src/lib/control/CubicBezier.svelte index 5e76d2c..184e501 100644 --- a/src/lib/control/CubicBezier.svelte +++ b/src/lib/control/CubicBezier.svelte @@ -54,36 +54,28 @@ const buttonClass = 'tp-cbzv_b'; function getValue(): CubicBezierOptions['value'] { - if (Array.isArray(value)) { - return value; - } else { - return [value.x1, value.y1, value.x2, value.y2]; - } + return Array.isArray(value) ? value : [value.x1, value.y1, value.x2, value.y2]; } function setValue() { // CubicBezier is a blade, not a binding, so state must be synced manually pretty sure // setting value is leaking memory from inside the plugin tracking in // https://github.com/tweakpane/plugin-essentials/issues/18 - if (Array.isArray(value)) { - cubicBezierBlade.value = new CubicBezier(value[0], value[1], value[2], value[3]); - } else { - cubicBezierBlade.value = new CubicBezier(value.x1, value.y1, value.x2, value.y2); - } + cubicBezierBlade.value = Array.isArray(value) + ? new CubicBezier(value[0], value[1], value[2], value[3]) + : new CubicBezier(value.x1, value.y1, value.x2, value.y2); } function addEvent() { - cubicBezierBlade.on('change', (ev) => { - if (Array.isArray(value)) { - value = [ev.value.x1, ev.value.y1, ev.value.x2, ev.value.y2]; - } else { - value = { - x1: ev.value.x1, - y1: ev.value.y1, - x2: ev.value.x2, - y2: ev.value.y2 - }; - } + cubicBezierBlade.on('change', (event) => { + value = Array.isArray(value) + ? [event.value.x1, event.value.y1, event.value.x2, event.value.y2] + : { + x1: event.value.x1, + y1: event.value.y1, + x2: event.value.x2, + y2: event.value.y2 + }; }); } @@ -125,41 +117,41 @@ updates. Consider managing the lifecycle of this component with care until this @example ```svelte - + `${(v / 1000).toFixed(1)}`} label="Duration (Seconds)" /> @@ -170,25 +162,25 @@ updates. Consider managing the lifecycle of this component with care until this
``` diff --git a/src/lib/control/Image.svelte b/src/lib/control/Image.svelte index cb15cd8..2462254 100644 --- a/src/lib/control/Image.svelte +++ b/src/lib/control/Image.svelte @@ -70,16 +70,16 @@ position='inline'>`. @example ```svelte - +