diff --git a/.changeset/cuddly-nails-change.md b/.changeset/cuddly-nails-change.md
new file mode 100644
index 0000000..e82cf5e
--- /dev/null
+++ b/.changeset/cuddly-nails-change.md
@@ -0,0 +1,5 @@
+---
+"starlight-spell-checker-docs": minor
+---
+
+Write initial documentation
diff --git a/docs/astro.config.ts b/docs/astro.config.ts
index 03ea190..617b809 100644
--- a/docs/astro.config.ts
+++ b/docs/astro.config.ts
@@ -1,6 +1,7 @@
import starlight from "@astrojs/starlight";
import { defineConfig } from "astro/config";
import starlightSpellChecker from "starlight-spell-checker";
+import starlightPluginsDocsComponents from "@trueberryless-org/starlight-plugins-docs-components";
export default defineConfig({
integrations: [
@@ -9,33 +10,32 @@ export default defineConfig({
baseUrl:
"https://github.com/trueberryless-org/starlight-spell-checker/edit/main/docs/",
},
- locales: {
- root: {
- lang: "en",
- label: "English",
- },
- de: {
- lang: "de",
- label: "Deutsch",
- },
+ logo: {
+ light: "./src/assets/logo-light.png",
+ dark: "./src/assets/logo-dark.png",
+ replacesTitle: true,
},
+ defaultLocale: "en",
plugins: [
- starlightSpellChecker({
- spell: {
- ignore: ["astro.config.mjs"],
- },
+ starlightSpellChecker(),
+ starlightPluginsDocsComponents({
+ pluginName: "starlight-spell-checker",
}),
],
sidebar: [
{
label: "Start Here",
- items: [{ slug: "getting-started" }],
+ items: [{ slug: "getting-started" }, { slug: "configuration" }],
+ },
+ {
+ label: "Guides",
+ items: [{ slug: "conditional-validation" }],
},
],
social: {
github: "https://github.com/trueberryless-org/starlight-spell-checker",
},
- title: "starlight-spell-checker",
+ title: "Starlight Spell Checker",
}),
],
});
diff --git a/docs/package.json b/docs/package.json
index 47b2b6a..985b6fb 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -14,6 +14,7 @@
},
"dependencies": {
"@astrojs/starlight": "^0.30.3",
+ "@trueberryless-org/starlight-plugins-docs-components": "^0.3.0",
"astro": "^5.1.2",
"sharp": "^0.33.5",
"starlight-spell-checker": "workspace:*"
diff --git a/docs/src/assets/big-logo-dark.png b/docs/src/assets/big-logo-dark.png
new file mode 100644
index 0000000..6a418a6
Binary files /dev/null and b/docs/src/assets/big-logo-dark.png differ
diff --git a/docs/src/assets/big-logo-light.png b/docs/src/assets/big-logo-light.png
new file mode 100644
index 0000000..93f7313
Binary files /dev/null and b/docs/src/assets/big-logo-light.png differ
diff --git a/docs/src/assets/logo-dark.png b/docs/src/assets/logo-dark.png
new file mode 100644
index 0000000..439fec2
Binary files /dev/null and b/docs/src/assets/logo-dark.png differ
diff --git a/docs/src/assets/logo-light.png b/docs/src/assets/logo-light.png
new file mode 100644
index 0000000..8323bdc
Binary files /dev/null and b/docs/src/assets/logo-light.png differ
diff --git a/docs/src/content/docs/conditional-validation.mdx b/docs/src/content/docs/conditional-validation.mdx
new file mode 100644
index 0000000..af4a1b6
--- /dev/null
+++ b/docs/src/content/docs/conditional-validation.mdx
@@ -0,0 +1,43 @@
+---
+title: Conditional Validation
+description: Learn how to run the Starlight Spell Checker plugin conditionally to avoid unnecessary cache invalidation.
+---
+
+When using the Starlight Spell Checker plugin with the [Content Layer API](https://docs.astro.build/en/guides/content-collections), the plugin will automatically invalidate the content layer cache so that all words can be properly validated.
+To avoid unnecessary cache invalidation, it is recommended to conditionally use the plugin only when necessary.
+
+## Run the plugin conditionally
+
+By default, when adding the plugin to your Starlight configuration in the [`plugins`](https://starlight.astro.build/reference/configuration/#plugins) array, the plugin will run for every build.
+
+Instead of running the plugin for every build, you can conditionally use the plugin based on an environment variable.
+In the following example, the plugin will only run when the `CHECK_SPELLING` environment variable is set.
+
+```diff lang="js"
+// astro.config.mjs
+import starlight from '@astrojs/starlight'
+import { defineConfig } from 'astro/config'
+import starlightSpellChecker from 'starlight-spell-checker'
+
+export default defineConfig({
+ integrations: [
+ starlight({
+- plugins: [starlightSpellChecker()],
++ plugins: process.env.CHECK_SPELLING ? [starlightSpellChecker()] : [],
+ title: 'My Docs',
+ }),
+ ],
+})
+```
+
+To run the plugin only when the `CHECK_SPELLING` environment variable is set, you can add the following script to your `package.json` file:
+
+```json title="package.json"
+{
+ "scripts": {
+ "spellcheck": "CHECK_SPELLING=true astro build"
+ }
+}
+```
+
+The spell check script can be used on CI pipelines to validate internal words in a dedicated workflow while deployment builds can skip the link validation step.
\ No newline at end of file
diff --git a/docs/src/content/docs/configuration.mdx b/docs/src/content/docs/configuration.mdx
new file mode 100644
index 0000000..efede20
--- /dev/null
+++ b/docs/src/content/docs/configuration.mdx
@@ -0,0 +1,884 @@
+---
+title: Configuration
+description: An overview of all the configuration options supported by the Starlight Spell Checker plugin.
+---
+
+import { FileTree } from '@astrojs/starlight/components';
+
+The Starlight Spell Checker plugin can be configured inside the `astro.config.mjs` configuration file of your project:
+
+```js {11}
+// astro.config.mjs
+import starlight from "@astrojs/starlight";
+import { defineConfig } from "astro/config";
+import starlightSpellChecker from "starlight-spell-checker";
+
+export default defineConfig({
+ integrations: [
+ starlight({
+ plugins: [
+ starlightSpellChecker({
+ // Configuration options go here.
+ }),
+ ],
+ title: "My Docs",
+ }),
+ ],
+});
+```
+
+## Configuration options
+
+The Starlight Spell Checker plugin accepts the following configuration options:
+
+### `exclude`
+
+**Type**: `string[]`
+**Default**: `[]`
+
+A list of page paths or [glob patterns](https://github.com/micromatch/picomatch#globbing-features) that should be excluded from validation.
+
+In the following example, only the `test.md` page will be validated, and the `exclude-pattern/*` and `exclude-manually/` paths will be ignored.
+
+
+
+- astro.config.mjs
+- package.json
+- src
+ - content/docs/
+ - **test.md**
+ - exclude-manually.md
+ - exclude-pattern/
+ - 1.md
+ - 2.md
+ - 3.md
+
+
+
+```js {6}
+export default defineConfig({
+ integrations: [
+ starlight({
+ plugins: [
+ starlightSpellChecker({
+ exclude: ["exclude-manually/", "exclude-pattern/*"],
+ }),
+ ],
+ }),
+ ],
+})
+```
+
+:::tip
+You can use this [webpage](https://www.digitalocean.com/community/tools/glob) to generate and test glob patterns.
+:::
+
+### `assuming`
+
+Configuration parameters of the [`retext-assuming`](https://github.com/davidhund/retext-assuming) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ phrases?: string[],
+ ignore?: string[],
+ verbose?: boolean
+}
+```
+
+:::caution
+The `assuming` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `phrases`
+
+**Type**: `string[]`
+**Default**: internal list
+
+A list of phrases that the plugin should check against. In other words, a list of phrases to warn about.
+
+#### `ignore`
+
+**Type**: `string[]`
+**Default**: `[]`
+
+A list of words that the plugin should ignore. In other words, a list of phrases _not_ to warn about.
+
+#### `verbose`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to also check for phrases that are _probably fine_, like "You should **not** _simply_ assume".
+
+### `casePolice`
+
+Configuration parameters of the [`retext-case-police`](https://github.com/JulianCataldo/retext-case-police) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ ignore?: string[]
+}
+```
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `ignore`
+
+**Type**: `string[]`
+**Default**: `[]`
+
+A list of words that the plugin should ignore. In other words, a list of phrases _not_ to warn about.
+
+### `contractions`
+
+Configuration parameters of the [`retext-contractions`](https://github.com/retextjs/retext-contractions) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ ignoreLiterals?: boolean,
+ mode?: "smart" | "straight"
+}
+```
+
+:::caution
+The `contractions` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `ignoreLiterals`
+
+**Type**: `boolean`
+**Default**: `true`
+
+Whether to ignore contractions in [literal strings](https://github.com/syntax-tree/nlcst-is-literal).
+
+If `true`, the plugin will ignore [literal words](https://github.com/syntax-tree/nlcst-is-literal).
+If `false`, the plugin will check [literal words](https://github.com/syntax-tree/nlcst-is-literal).
+
+#### `mode`
+
+**Type**: `"smart" | "straight"`
+**Default**: `"smart"`
+
+Whether to suggest smart (`'`) or straight (`’`) apostrophes. See [retext-quotes](#quotes) if you want to properly check apostrophes though.
+
+### `diacritics`
+
+Configuration parameters of the [`retext-diacritics`](https://github.com/retextjs/retext-diacritics) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean
+}
+```
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+### `equality`
+
+Configuration parameters of the [`retext-equality`](https://github.com/retextjs/retext-equality) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ ignore?: string[],
+ binary?: boolean
+}
+```
+
+:::caution
+The `equality` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `ignore`
+
+**Type**: `string[]`
+**Default**: `[]`
+
+A list of words that the plugin should ignore. In other words, a list of phrases _not_ to warn about.
+
+#### `binary`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to allow phrases like "he or she", "garbagemen and garbagewomen", etc.
+
+### `indefiniteArticle`
+
+Configuration parameters of the [`retext-indefinite-article`](https://github.com/retextjs/retext-indefinite-article) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean
+}
+```
+
+:::caution
+The `indefiniteArticle` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+### `intensify`
+
+Configuration parameters of the [`retext-intensify`](https://github.com/retextjs/retext-intensify) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ ignore?: string[]
+}
+```
+
+:::caution
+The `intensify` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `ignore`
+
+**Type**: `string[]`
+**Default**: `[]`
+
+A list of words that the plugin should ignore. In other words, a list of phrases _not_ to warn about.
+
+### `passive`
+
+Configuration parameters of the [`retext-passive`](https://github.com/retextjs/retext-passive) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ ignore?: string[]
+}
+```
+
+:::caution
+The `passive` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `ignore`
+
+**Type**: `string[]`
+**Default**: `[]`
+
+A list of words that the plugin should ignore. In other words, a list of phrases _not_ to warn about.
+
+### `profanities`
+
+Configuration parameters of the [`retext-profanities`](https://github.com/retextjs/retext-profanities) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ ignore?: string[]
+}
+```
+
+:::caution
+The `profanities` functionality is only available for these languages:
+
+- Arabic (`ar`)
+- English (`en`)
+- Spanish (`es`)
+- French (`fr`)
+- Italian (`it`)
+- Brazilian Portuguese (`pt-BR`)
+
+If you enable it, it will only check these languages, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `ignore`
+
+**Type**: `string[]`
+**Default**: `[]`
+
+A list of words that the plugin should ignore. In other words, a list of phrases _not_ to warn about.
+
+#### `sureness`
+
+**Type**: `0 | 1 | 2`
+**Default**: `0`
+
+Minimum sureness level to warn about. See [cuss](https://github.com/words/cuss) for further information.
+
+### `readability`
+
+Configuration parameters of the [`retext-readability`](https://github.com/retextjs/retext-readability) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean
+}
+```
+
+:::caution
+The `readability` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `age`
+
+**Type**: `number`
+**Default**: `22`
+
+Define the target age group. This will ensure that your text is readable for the specified age group.
+
+#### `minWords`
+
+**Type**: `number`
+**Default**: `5`
+
+Evaluate sentences containing at least this number of words. While most algorithms assess the reading level of an entire text, this plugin analyzes each sentence individually. Short sentences, however, can be disproportionately influenced by a single long or complex word.
+
+#### `threshold`
+
+**Type**: `number`
+**Default**: `4 / 7`
+
+Defines how many algorithms (out of 7) need to agree that something is hard to read.
+
+The plugin uses these algorithms:
+
+- [Dale—Chall](https://github.com/words/dale-chall-formula)
+- [Automated Readability](https://github.com/words/automated-readability)
+- [Coleman-Liau](https://github.com/words/coleman-liau)
+- [Flesch](https://github.com/words/flesch)
+- [Gunning-Fog](https://github.com/words/gunning-fog)
+- [SMOG](https://github.com/words/smog-formula)
+- [Spache](https://github.com/words/spache-formula)
+
+### `redundantAcronyms`
+
+Configuration parameters of the [`retext-redundant-acronyms`](https://github.com/retextjs/retext-redundant-acronyms) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean
+}
+```
+
+:::caution
+The `redundantAcronyms` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+### `repeatedWords`
+
+Configuration parameters of the [`retext-repeated-words`](https://github.com/retextjs/retext-repeated-words) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean
+}
+```
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+### `simplify`
+
+Configuration parameters of the [`retext-simplify`](https://github.com/retextjs/retext-simplify) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ ignore?: string[]
+}
+```
+
+:::caution
+The `simplify` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `ignore`
+
+**Type**: `string[]`
+**Default**: `[]`
+
+A list of words that the plugin should ignore. In other words, a list of phrases _not_ to warn about.
+
+### `spell`
+
+Configuration parameters of the [`retext-spell`](https://github.com/retextjs/retext-spell) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ ignore?: string[]
+}
+```
+
+:::caution
+The `spell` functionality is only available for these languages:
+
+- Danish (`da`)
+- German (`de`)
+- English (`en`)
+- Spanish (`es`)
+- French (`fr`)
+- Italian (`it`)
+- Korean (`ko`)
+- Polish (`pl`)
+- Brazilian Portuguese (`pt-BR`)
+- Russian (`ru`)
+
+If you enable it, it will only check these languages, ignoring all other languages with a warning in the output.
+
+These are the currently unsupported languages:
+
+- Arabic (`ar`)
+- Hindian (`hi`)
+- Japanese (`ja`)
+- Simplified Chinese (`zh-cn`)
+- Traditional Chinese (`zh-tw`)
+
+If you want to add a dictionary for an unsupported language, please [take a look at this repo](https://github.com/wooorm/dictionaries?tab=readme-ov-file#adding-a-new-dictionary) and [let us know](https://github.com/trueberryless-org/starlight-spell-checker/issues/new).
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `true`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `ignore`
+
+**Type**: `string[]`
+**Default**: `[]`
+
+A list of words that the plugin should ignore. In other words, a list of phrases _not_ to warn about.
+
+### `usage`
+
+Configuration parameters of the [`retext-usage`](https://github.com/adamhollett/retext-usage) plugin.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean
+}
+```
+
+:::caution
+The `usage` functionality is only available for the English language. If you enable it, it will only check English content, ignoring all other languages.
+:::
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+### `quotes`
+
+Configuration parameters of the [`retext-quotes`](https://github.com/retextjs/retext-quotes) plugin. This plugin knows about apostrophes as well and prefers `'` when
+`preferred: 'straight'`, and `’` otherwise.
+
+**Type**:
+
+```ql
+{
+ enabled?: boolean,
+ throwError?: boolean,
+ mode?: "smart" | "straight",
+ smart?: string[] | Record,
+ straight?: string[] | Record
+}
+```
+
+#### `enabled`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to enable the assuming plugin.
+
+#### `throwError`
+
+**Type**: `boolean`
+**Default**: `false`
+
+Whether to throw an error if the plugin detects mistakes.
+
+If `true`, the plugin will throw an error and stop the build process.
+If `false`, the plugin will log warnings and continue the build process.
+
+#### `mode`
+
+**Type**: `"smart" | "straight"`
+**Default**: `"smart"`
+
+Whether to suggest smart (`'`) or straight (`’`) apostrophes.
+
+#### `smart`
+
+**Type**: `string[] | Record`
+**Default**: `["“”", "‘’"]`
+
+List of quotes to see as smart quotes.
+
+**Explaination**:
+
+The values in `smart` can be one or two characters.
+When two, the first character determines the opening quote and the second
+the closing quote at that level.
+When one, both the opening and closing quote are that character.
+
+The order in which the preferred quotes appear in their respective list
+determines which quotes to use at which level of nesting.
+So, to prefer `‘’` at the first level of nesting, and `“”` at the second,
+pass: `smart: ['‘’', '“”']`.
+
+If quotes are nested deeper than the given amount of quotes, the markers
+wrap around: a third level of nesting when using `smart: ['«»', '‹›']`
+should have double guillemets, a fourth single, a fifth double again, etc.
+
+**Multilingualism**:
+
+If you want to defined different quotes for different languages, you can pass a `Record` type, like this:
+
+```js {6-12}
+export default defineConfig({
+ integrations: [
+ starlight({
+ plugins: [
+ starlightSpellChecker({
+ quotes: {
+ smart: {
+ en: ['“”', '‘’'],
+ de: ['„“', '‚‘'],
+ fr: ["«»", "“”"],
+ },
+ },
+ }),
+ ],
+ }),
+ ],
+})
+```
+
+#### `straight`
+
+**Type**: `string[] | Record`
+**Default**: `['"', "'"]`
+
+List of quotes to see as straight quotes.
+
+**Explaination**:
+
+The values in `straight` can be one or two characters.
+When two, the first character determines the opening quote and the second
+the closing quote at that level.
+When one, both the opening and closing quote are that character.
+
+The order in which the preferred quotes appear in their respective list
+determines which quotes to use at which level of nesting.
+So, to prefer `"` at the first level of nesting, and `'` at the second,
+pass: `straight: ['"', "'"]`.
+
+If quotes are nested deeper than the given amount of quotes, the markers
+wrap around: a third level of nesting when using `straight: ['«»', '‹›']`
+should have double guillemets, a fourth single, a fifth double again, etc.
+
+**Multilingualism**:
+
+If you want to defined different quotes for different languages, you can pass a `Record` type, like this:
+
+```js {6-12}
+export default defineConfig({
+ integrations: [
+ starlight({
+ plugins: [
+ starlightSpellChecker({
+ quotes: {
+ straight: {
+ en: ['“”', '‘’'],
+ de: ['„“', '‚‘'],
+ fr: ["«»", "“”"],
+ },
+ },
+ }),
+ ],
+ }),
+ ],
+})
+```
diff --git a/docs/src/content/docs/getting-started.mdx b/docs/src/content/docs/getting-started.mdx
index 4225139..5f0068e 100644
--- a/docs/src/content/docs/getting-started.mdx
+++ b/docs/src/content/docs/getting-started.mdx
@@ -66,3 +66,5 @@ import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'
3. [Start the development server](https://starlight.astro.build/getting-started/#start-the-development-server) to preview the plugin in action.
+
+The Starlight Spell Checker plugin behavior can be tweaked using various [configuration options](/configuration).
diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx
index 65cdd02..bf9de33 100644
--- a/docs/src/content/docs/index.mdx
+++ b/docs/src/content/docs/index.mdx
@@ -1,15 +1,16 @@
---
-title: starlight-spell-checker
+title: Starlight Spell Checker
description: Check your documentation for spelling mistakes; multilingual support.
head:
- tag: title
- content: starlight-spell-checker
+ content: Starlight Spell Checker
template: splash
editUrl: false
hero:
tagline: Check your documentation for spelling mistakes; multilingual support.
image:
- file: ../../assets/houston.webp
+ dark: ../../assets/big-logo-dark.png
+ light: ../../assets/big-logo-light.png
actions:
- text: Get Started
link: /getting-started/
diff --git a/packages/starlight-spell-checker/tests/exclude.test.ts b/packages/starlight-spell-checker/tests/exclude.test.ts
new file mode 100644
index 0000000..d09ab72
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/exclude.test.ts
@@ -0,0 +1,22 @@
+import { expect, test } from 'vitest'
+
+import { ValidationErrorType } from '../libs/validation'
+
+import { buildFixture, expectValidationWarningCount, expectValidationWarnings } from './utils'
+
+test('builds with exclude, but warnings', async () => {
+ const { output, status } = await buildFixture('exclude')
+
+ expect(status).toBe('success')
+
+ expectValidationWarningCount(output, 6, 1)
+
+ expectValidationWarnings(output, 'test/', [
+ ['diped', ValidationErrorType.Spell, "diped", ["dipped", "doped", "duped", "biped", "diced", "died", "diked", "dined", "dived", "piped", "wiped"]],
+ ['horison', ValidationErrorType.Spell, "horison", ["orison", "horizon", "Morison"]],
+ ['heus', ValidationErrorType.Spell, "heus", ["hers", "hews", "he's", "hems", "hens", "hes", "hues", "Hess", "Hus", "Zeus"]],
+ ['evaning', ValidationErrorType.Spell, "evaning", ["evading", "evening"]],
+ ['breze', ValidationErrorType.Spell, "breze", ["breeze", "braze", "breve"]],
+ ['thrugh', ValidationErrorType.Spell, "thrugh", ["though", "through", "thrush"]],
+ ])
+})
diff --git a/packages/starlight-spell-checker/tests/fixtures/exclude/astro.config.ts b/packages/starlight-spell-checker/tests/fixtures/exclude/astro.config.ts
new file mode 100644
index 0000000..6d1deee
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/exclude/astro.config.ts
@@ -0,0 +1,17 @@
+import starlight from "@astrojs/starlight";
+import { defineConfig } from "astro/config";
+import starlightSpellChecker from "starlight-spell-checker";
+
+export default defineConfig({
+ integrations: [
+ starlight({
+ pagefind: false,
+ plugins: [
+ starlightSpellChecker({
+ exclude: ["exclude-manually/", "exclude-pattern/*"],
+ }),
+ ],
+ title: "Starlight Spell Checker Tests - exclude",
+ }),
+ ],
+});
diff --git a/packages/starlight-spell-checker/tests/fixtures/exclude/package.json b/packages/starlight-spell-checker/tests/fixtures/exclude/package.json
new file mode 100644
index 0000000..9bb3f12
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/exclude/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@starlight-spell-checker-tests/exclude",
+ "version": "0.0.0",
+ "dependencies": {
+ "@astrojs/starlight": "^0.30.2",
+ "astro": "^5.1.1",
+ "starlight-spell-checker": "workspace:*"
+ },
+ "private": true
+}
diff --git a/packages/starlight-spell-checker/tests/fixtures/exclude/src/content.config.ts b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content.config.ts
new file mode 100644
index 0000000..0bead42
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content.config.ts
@@ -0,0 +1,7 @@
+import { docsLoader } from "@astrojs/starlight/loaders";
+import { docsSchema } from "@astrojs/starlight/schema";
+import { defineCollection } from "astro:content";
+
+export const collections = {
+ docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
+};
diff --git a/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-manually.md b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-manually.md
new file mode 100644
index 0000000..3e7d383
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-manually.md
@@ -0,0 +1,5 @@
+---
+title: Exclude
+---
+
+The sun diped below the horison, painting the sky in heus of orange and pink as the evaning breze whispered thrugh the trees.
diff --git a/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-pattern/1.md b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-pattern/1.md
new file mode 100644
index 0000000..3e7d383
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-pattern/1.md
@@ -0,0 +1,5 @@
+---
+title: Exclude
+---
+
+The sun diped below the horison, painting the sky in heus of orange and pink as the evaning breze whispered thrugh the trees.
diff --git a/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-pattern/2.md b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-pattern/2.md
new file mode 100644
index 0000000..3e7d383
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-pattern/2.md
@@ -0,0 +1,5 @@
+---
+title: Exclude
+---
+
+The sun diped below the horison, painting the sky in heus of orange and pink as the evaning breze whispered thrugh the trees.
diff --git a/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-pattern/3.md b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-pattern/3.md
new file mode 100644
index 0000000..3e7d383
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/exclude-pattern/3.md
@@ -0,0 +1,5 @@
+---
+title: Exclude
+---
+
+The sun diped below the horison, painting the sky in heus of orange and pink as the evaning breze whispered thrugh the trees.
diff --git a/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/test.md b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/test.md
new file mode 100644
index 0000000..872377d
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/exclude/src/content/docs/test.md
@@ -0,0 +1,5 @@
+---
+title: Test
+---
+
+The sun diped below the horison, painting the sky in heus of orange and pink as the evaning breze whispered thrugh the trees.
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/astro.config.ts b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/astro.config.ts
new file mode 100644
index 0000000..6ce792b
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/astro.config.ts
@@ -0,0 +1,43 @@
+import starlight from "@astrojs/starlight";
+import { defineConfig } from "astro/config";
+import starlightSpellChecker from "starlight-spell-checker";
+
+export default defineConfig({
+ integrations: [
+ starlight({
+ pagefind: false,
+ plugins: [
+ starlightSpellChecker({
+ quotes: {
+ enabled: true,
+ throwError: true,
+ smart: {
+ en: ["“”", "‘’"],
+ de: ["„“", "‚‘"],
+ fr: ["«»", "“”"],
+ },
+ },
+ spell: {
+ enabled: false,
+ },
+ }),
+ ],
+ title:
+ "Starlight Spell Checker Tests - quotes throw error invalid content multilingual",
+ locales: {
+ root: {
+ lang: "en",
+ label: "English",
+ },
+ de: {
+ lang: "de",
+ label: "Deutsch",
+ },
+ fr: {
+ lang: "fr",
+ label: "Français",
+ },
+ },
+ }),
+ ],
+});
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/package.json b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/package.json
new file mode 100644
index 0000000..30228e5
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@starlight-spell-checker-tests/quotes-throw-error-invalid-content-multilingual",
+ "version": "0.0.0",
+ "dependencies": {
+ "@astrojs/starlight": "^0.30.2",
+ "astro": "^5.1.1",
+ "starlight-spell-checker": "workspace:*"
+ },
+ "private": true
+}
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content.config.ts b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content.config.ts
new file mode 100644
index 0000000..0bead42
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content.config.ts
@@ -0,0 +1,7 @@
+import { docsLoader } from "@astrojs/starlight/loaders";
+import { docsSchema } from "@astrojs/starlight/schema";
+import { defineCollection } from "astro:content";
+
+export const collections = {
+ docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
+};
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content/docs/de/index.md b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content/docs/de/index.md
new file mode 100644
index 0000000..9acb23b
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content/docs/de/index.md
@@ -0,0 +1,5 @@
+---
+title: Verzeichnis
+---
+
+Ein Satz “mit ‚verschachtelten Anführungszeichen‘”.
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content/docs/fr/index.md b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content/docs/fr/index.md
new file mode 100644
index 0000000..4746e61
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content/docs/fr/index.md
@@ -0,0 +1,5 @@
+---
+title: Indice
+---
+
+Une phrase „avec des “guillemets imbriqués”“.
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content/docs/index.md b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content/docs/index.md
new file mode 100644
index 0000000..ebe5c75
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual/src/content/docs/index.md
@@ -0,0 +1,5 @@
+---
+title: Index
+---
+
+A sentence « with ‘nested quotes’ ».
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/astro.config.ts b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/astro.config.ts
new file mode 100644
index 0000000..496b17f
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/astro.config.ts
@@ -0,0 +1,43 @@
+import starlight from "@astrojs/starlight";
+import { defineConfig } from "astro/config";
+import starlightSpellChecker from "starlight-spell-checker";
+
+export default defineConfig({
+ integrations: [
+ starlight({
+ pagefind: false,
+ plugins: [
+ starlightSpellChecker({
+ quotes: {
+ enabled: true,
+ throwError: true,
+ smart: {
+ en: ["“”", "‘’"],
+ de: ["„“", "‚‘"],
+ fr: ["«»", "“”"],
+ },
+ },
+ spell: {
+ enabled: false,
+ },
+ }),
+ ],
+ title:
+ "Starlight Spell Checker Tests - quotes throw error valid content multilingual",
+ locales: {
+ root: {
+ lang: "en",
+ label: "English",
+ },
+ de: {
+ lang: "de",
+ label: "Deutsch",
+ },
+ fr: {
+ lang: "fr",
+ label: "Français",
+ },
+ },
+ }),
+ ],
+});
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/package.json b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/package.json
new file mode 100644
index 0000000..8c96dfe
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@starlight-spell-checker-tests/quotes-throw-error-valid-content-multilingual",
+ "version": "0.0.0",
+ "dependencies": {
+ "@astrojs/starlight": "^0.30.2",
+ "astro": "^5.1.1",
+ "starlight-spell-checker": "workspace:*"
+ },
+ "private": true
+}
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content.config.ts b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content.config.ts
new file mode 100644
index 0000000..0bead42
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content.config.ts
@@ -0,0 +1,7 @@
+import { docsLoader } from "@astrojs/starlight/loaders";
+import { docsSchema } from "@astrojs/starlight/schema";
+import { defineCollection } from "astro:content";
+
+export const collections = {
+ docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
+};
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content/docs/de/index.md b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content/docs/de/index.md
new file mode 100644
index 0000000..f73f5c2
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content/docs/de/index.md
@@ -0,0 +1,5 @@
+---
+title: Verzeichnis
+---
+
+Ein Satz „mit ‚verschachtelten Anführungszeichen‘“.
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content/docs/fr/index.md b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content/docs/fr/index.md
new file mode 100644
index 0000000..6bd7e74
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content/docs/fr/index.md
@@ -0,0 +1,5 @@
+---
+title: Indice
+---
+
+Une phrase « avec des “guillemets imbriqués” ».
diff --git a/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content/docs/index.md b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content/docs/index.md
new file mode 100644
index 0000000..2eee33f
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual/src/content/docs/index.md
@@ -0,0 +1,5 @@
+---
+title: Index
+---
+
+A sentence “with ‘nested quotes’”.
diff --git a/packages/starlight-spell-checker/tests/quotes.throwError.multilingual.test.ts b/packages/starlight-spell-checker/tests/quotes.throwError.multilingual.test.ts
new file mode 100644
index 0000000..a58615d
--- /dev/null
+++ b/packages/starlight-spell-checker/tests/quotes.throwError.multilingual.test.ts
@@ -0,0 +1,36 @@
+import { expect, test } from 'vitest'
+
+import { ValidationErrorType } from '../libs/validation'
+
+import { buildFixture, expectValidationErrorCount, expectValidationErrors, expectValidationSuccess } from './utils'
+
+test('builds with quotes throw error valid Multilingual content', async () => {
+ const { output, status } = await buildFixture('quotes-throw-error-valid-content-multilingual')
+
+ expect(status).toBe('success')
+ expectValidationSuccess(output)
+})
+
+test('does not build with quotes throw error invalid Mulilingual content', async () => {
+ const { output, status } = await buildFixture('quotes-throw-error-invalid-content-multilingual')
+
+ expect(status).toBe('error')
+
+ expectValidationErrorCount(output, 7, 3)
+
+ expectValidationErrors(output, '/', [
+ ['‘', ValidationErrorType.Quotes, 'quote', ['“']],
+ ['’', ValidationErrorType.Quotes, 'quote', ['”']],
+ ]);
+
+ expectValidationErrors(output, 'de/', [
+ ['‚', ValidationErrorType.Quotes, 'quote', ['„']],
+ ['‘', ValidationErrorType.Quotes, 'quote', ['“']],
+ ]);
+
+ expectValidationErrors(output, 'fr/', [
+ ['“', ValidationErrorType.Quotes, 'quote', ['«']],
+ ['”', ValidationErrorType.Quotes, 'quote', ['»']],
+ ['“', ValidationErrorType.Quotes, 'quote', ['«']],
+ ]);
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 913ccf3..04b31f9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -20,6 +20,9 @@ importers:
'@astrojs/starlight':
specifier: ^0.30.3
version: 0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ '@trueberryless-org/starlight-plugins-docs-components':
+ specifier: ^0.3.0
+ version: 0.3.0(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
astro:
specifier: ^5.1.2
version: 5.1.6(rollup@4.29.2)(typescript@5.7.2)
@@ -361,6 +364,18 @@ importers:
specifier: workspace:*
version: link:../../..
+ packages/starlight-spell-checker/tests/fixtures/exclude:
+ dependencies:
+ '@astrojs/starlight':
+ specifier: ^0.30.2
+ version: 0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ astro:
+ specifier: ^5.1.1
+ version: 5.1.6(rollup@4.29.2)(typescript@5.7.2)
+ starlight-spell-checker:
+ specifier: workspace:*
+ version: link:../../..
+
packages/starlight-spell-checker/tests/fixtures/indefinite-article-throw-error-invalid-content:
dependencies:
'@astrojs/starlight':
@@ -553,6 +568,18 @@ importers:
specifier: workspace:*
version: link:../../..
+ packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-invalid-content-multilingual:
+ dependencies:
+ '@astrojs/starlight':
+ specifier: ^0.30.2
+ version: 0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ astro:
+ specifier: ^5.1.1
+ version: 5.1.6(rollup@4.29.2)(typescript@5.7.2)
+ starlight-spell-checker:
+ specifier: workspace:*
+ version: link:../../..
+
packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-mode-straight-invalid-content:
dependencies:
'@astrojs/starlight':
@@ -745,6 +772,18 @@ importers:
specifier: workspace:*
version: link:../../..
+ packages/starlight-spell-checker/tests/fixtures/quotes-throw-error-valid-content-multilingual:
+ dependencies:
+ '@astrojs/starlight':
+ specifier: ^0.30.2
+ version: 0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ astro:
+ specifier: ^5.1.1
+ version: 5.1.6(rollup@4.29.2)(typescript@5.7.2)
+ starlight-spell-checker:
+ specifier: workspace:*
+ version: link:../../..
+
packages/starlight-spell-checker/tests/fixtures/redundant-acronyms-throw-error-invalid-content:
dependencies:
'@astrojs/starlight':
@@ -1015,6 +1054,19 @@ packages:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
+ '@astro-community/astro-embed-twitter@0.5.8':
+ resolution: {integrity: sha512-O2ptQPw+DfipukK8czjJcTcyVgDsrs3OmrHbc3YmWRglaUTOpSTImzPo076POyNBSWjLaRKloul81DFiAMNjTA==}
+ peerDependencies:
+ astro: ^2.0.0 || ^3.0.0-beta || ^4.0.0-beta || ^5.0.0-beta
+
+ '@astro-community/astro-embed-utils@0.1.3':
+ resolution: {integrity: sha512-eiMO+vfCdE9GtW6qE7X5Xl6YCKZDCoXJEWqRofQcoC3GHjqN2/WhJlnaxNVRq3demSO03UNtho57Em5p7o7AOA==}
+
+ '@astro-community/astro-embed-youtube@0.5.6':
+ resolution: {integrity: sha512-/mRfCl/eTBUz0kmjD1psOy0qoDDBorVp0QumUacjFcIkBullYtbeFQ2ZGZ+3N/tA6cR/OIyzr2QA4dQXlY6USg==}
+ peerDependencies:
+ astro: ^2.0.0 || ^3.0.0-beta || ^4.0.0-beta || ^5.0.0-beta
+
'@astrojs/compiler@2.10.3':
resolution: {integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==}
@@ -1438,6 +1490,12 @@ packages:
'@expressive-code/plugin-text-markers@0.38.3':
resolution: {integrity: sha512-dPK3+BVGTbTmGQGU3Fkj3jZ3OltWUAlxetMHI6limUGCWBCucZiwoZeFM/WmqQa71GyKRzhBT+iEov6kkz2xVA==}
+ '@hideoo/starlight-plugins-docs-components@0.2.2':
+ resolution: {integrity: sha512-SJUoeDvdMLgETbYn2GPXI4IDy7l2kWcfA458M4a4a6kAtTAIdguRTDgqNjPAuCyV9s74VDdKLPh3KCUvUTfBGg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@astrojs/starlight': '>=0.24.0'
+
'@img/sharp-darwin-arm64@0.33.5':
resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
@@ -1784,6 +1842,12 @@ packages:
'@trueberryless-org/retext-usage@0.1.3':
resolution: {integrity: sha512-4A00uhd3rCD3afrP3mD5v+Elv0BImTbuI6RFYshkaFkhggiNK/WglZvcVkD1wtAHx5XHkgR2DP/CEjhj3AQK2g==}
+ '@trueberryless-org/starlight-plugins-docs-components@0.3.0':
+ resolution: {integrity: sha512-zVfSz0RMvZiZmE560ymiT865YEx+0kawdnD0Zfsr6hokwHjuzvmdahLNPGT4TmBGcZIR6NW84WK6BJdUO/haoQ==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
+ peerDependencies:
+ '@astrojs/starlight': '>=0.30'
+
'@types/acorn@4.0.6':
resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
@@ -2033,6 +2097,9 @@ packages:
resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ change-case@5.4.4:
+ resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
+
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
@@ -2116,14 +2183,24 @@ packages:
crossws@0.3.1:
resolution: {integrity: sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw==}
+ css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+
css-selector-parser@3.0.5:
resolution: {integrity: sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==}
+ css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
+ cssom@0.5.0:
+ resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
+
cuss@2.2.0:
resolution: {integrity: sha512-3hlHOhMiZ6YdHY5LPUhfxlx1Pj14eGttv2l9ADB1Lkv7e/us5XD798wrVLJ9DHmDO8SzCDuA+ItByFZ3M1dIYg==}
@@ -2225,6 +2302,19 @@ packages:
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
dotenv@8.6.0:
resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==}
engines: {node: '>=10'}
@@ -2506,6 +2596,9 @@ packages:
html-whitespace-sensitive-tag-names@3.0.1:
resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==}
+ htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+
http-cache-semantics@4.1.1:
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
@@ -2646,6 +2739,12 @@ packages:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
+ linkedom@0.14.26:
+ resolution: {integrity: sha512-mK6TrydfFA7phrnp+1j57ycBwFI5bGSW6YXlw9acHoqF+mP/y+FooEYYyniOt5Ot57FSKB3iwmnuQ1UUyNLm5A==}
+
+ lite-youtube-embed@0.3.3:
+ resolution: {integrity: sha512-gFfVVnj6NRjxVfJKo3qoLtpi0v5mn3AcR4eKD45wrxQuxzveFJUb+7Cr6uV6n+DjO8X3p0UzPPquhGt0H/y+NA==}
+
load-yaml-file@0.2.0:
resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
engines: {node: '>=6'}
@@ -3374,6 +3473,25 @@ packages:
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+ starlight-package-managers@0.6.0:
+ resolution: {integrity: sha512-2tE0B4ZVEZXZ1LJjcSvVXLfJP8SB2nE+nhiFgSa3fuHUPtnbzmFxLVp7jEKD8jaMXKWPYtlNTy95gJSK9W1sbQ==}
+ engines: {node: '>=18.14.1'}
+ peerDependencies:
+ '@astrojs/starlight': '>=0.22.0'
+ astro: '>=4.2.7'
+
+ starlight-showcases@0.1.2:
+ resolution: {integrity: sha512-yj3RjcdWLIWdehTjne9Ethd3ff95vMbuVx/87lU4yilTQewQxjnAyOf1KSnGUgTMQT5WTqhDw8LciPBJox+b8Q==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@astrojs/starlight': '>=0.23.0'
+
+ starlight-showcases@0.2.0:
+ resolution: {integrity: sha512-YWJuTqArkUdVJV85VKZJ0BvKCQRu1SKtH/Cr5t6G/oIfI4IptWc92E7BmiuNnpuQ2U7TczTRidCYurPrbgQQVA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@astrojs/starlight': '>=0.23.0'
+
std-env@3.8.0:
resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
@@ -3504,6 +3622,9 @@ packages:
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
+ uhyphen@0.2.0:
+ resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==}
+
ultrahtml@1.5.3:
resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==}
@@ -3846,6 +3967,20 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
+ '@astro-community/astro-embed-twitter@0.5.8(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))':
+ dependencies:
+ '@astro-community/astro-embed-utils': 0.1.3
+ astro: 5.1.6(rollup@4.29.2)(typescript@5.7.2)
+
+ '@astro-community/astro-embed-utils@0.1.3':
+ dependencies:
+ linkedom: 0.14.26
+
+ '@astro-community/astro-embed-youtube@0.5.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))':
+ dependencies:
+ astro: 5.1.6(rollup@4.29.2)(typescript@5.7.2)
+ lite-youtube-embed: 0.3.3
+
'@astrojs/compiler@2.10.3': {}
'@astrojs/internal-helpers@0.4.2': {}
@@ -4297,6 +4432,14 @@ snapshots:
dependencies:
'@expressive-code/core': 0.38.3
+ '@hideoo/starlight-plugins-docs-components@0.2.2(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))':
+ dependencies:
+ '@astrojs/starlight': 0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ starlight-package-managers: 0.6.0(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ starlight-showcases: 0.1.2(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ transitivePeerDependencies:
+ - astro
+
'@img/sharp-darwin-arm64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.0.4
@@ -4645,6 +4788,15 @@ snapshots:
object-keys: 1.1.1
quotation: 1.1.3
+ '@trueberryless-org/starlight-plugins-docs-components@0.3.0(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))':
+ dependencies:
+ '@astrojs/starlight': 0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ '@hideoo/starlight-plugins-docs-components': 0.2.2(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ change-case: 5.4.4
+ starlight-showcases: 0.2.0(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ transitivePeerDependencies:
+ - astro
+
'@types/acorn@4.0.6':
dependencies:
'@types/estree': 1.0.6
@@ -4982,6 +5134,8 @@ snapshots:
chalk@5.4.1: {}
+ change-case@5.4.4: {}
+
character-entities-html4@2.1.0: {}
character-entities-legacy@3.0.0: {}
@@ -5054,10 +5208,22 @@ snapshots:
dependencies:
uncrypto: 0.1.3
+ css-select@5.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
+
css-selector-parser@3.0.5: {}
+ css-what@6.1.0: {}
+
cssesc@3.0.0: {}
+ cssom@0.5.0: {}
+
cuss@2.2.0: {}
dale-chall-formula@2.0.1: {}
@@ -5126,6 +5292,24 @@ snapshots:
dlv@1.1.3: {}
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
dotenv@8.6.0: {}
dset@3.1.4: {}
@@ -5594,6 +5778,13 @@ snapshots:
html-whitespace-sensitive-tag-names@3.0.1: {}
+ htmlparser2@8.0.2:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ entities: 4.5.0
+
http-cache-semantics@4.1.1: {}
human-id@1.0.2: {}
@@ -5711,6 +5902,16 @@ snapshots:
kleur@4.1.5: {}
+ linkedom@0.14.26:
+ dependencies:
+ css-select: 5.1.0
+ cssom: 0.5.0
+ html-escaper: 3.0.3
+ htmlparser2: 8.0.2
+ uhyphen: 0.2.0
+
+ lite-youtube-embed@0.3.3: {}
+
load-yaml-file@0.2.0:
dependencies:
graceful-fs: 4.2.11
@@ -6955,6 +7156,27 @@ snapshots:
stackback@0.0.2: {}
+ starlight-package-managers@0.6.0(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)):
+ dependencies:
+ '@astrojs/starlight': 0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ astro: 5.1.6(rollup@4.29.2)(typescript@5.7.2)
+
+ starlight-showcases@0.1.2(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)):
+ dependencies:
+ '@astro-community/astro-embed-twitter': 0.5.8(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ '@astro-community/astro-embed-youtube': 0.5.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ '@astrojs/starlight': 0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ transitivePeerDependencies:
+ - astro
+
+ starlight-showcases@0.2.0(@astrojs/starlight@0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)))(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2)):
+ dependencies:
+ '@astro-community/astro-embed-twitter': 0.5.8(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ '@astro-community/astro-embed-youtube': 0.5.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ '@astrojs/starlight': 0.30.6(astro@5.1.6(rollup@4.29.2)(typescript@5.7.2))
+ transitivePeerDependencies:
+ - astro
+
std-env@3.8.0: {}
stopwords@0.0.5: {}
@@ -7064,6 +7286,8 @@ snapshots:
ufo@1.5.4: {}
+ uhyphen@0.2.0: {}
+
ultrahtml@1.5.3: {}
uncrypto@0.1.3: {}