diff --git a/astro.config.mjs b/astro.config.mjs index f6a16bf..ac00065 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,5 +1,6 @@ import { defineConfig } from 'astro/config'; import starlight from '@astrojs/starlight'; +import starlightLinksValidator from 'starlight-links-validator'; import remarkGlossary from './src/plugins/remark-glossary'; import remarkCenter from './src/plugins/remark-center'; import remarkFigure from './src/plugins/remark-figure'; @@ -69,6 +70,7 @@ export default defineConfig({ tableOfContents: { minHeadingLevel: 2, maxHeadingLevel: 3 }, // Sidebar configuration is now managed in src/config/sidebarConfig.ts // This allows different sidebars per top-level navigation section + plugins: [starlightLinksValidator()], }), ], }); diff --git a/package.json b/package.json index bc6ee85..340bedd 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "remark-lint-no-dead-urls": "^2.0.1", "remark-mdx": "^3.1.1", "remark-preset-lint-recommended": "^7.0.1", + "starlight-links-validator": "^0.20.0", "tsx": "^4.22.4", "typescript": "^6.0.3", "typescript-eslint": "^8.61.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 87ba03c..fd4b631 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -78,6 +78,9 @@ importers: remark-preset-lint-recommended: specifier: ^7.0.1 version: 7.0.1 + starlight-links-validator: + specifier: ^0.20.0 + version: 0.20.1(@astrojs/starlight@0.39.2(astro@6.3.7(@types/node@24.12.4)(rollup@4.59.0)(tsx@4.22.4)(yaml@2.9.0))(typescript@6.0.3))(astro@6.3.7(@types/node@24.12.4)(rollup@4.59.0)(tsx@4.22.4)(yaml@2.9.0)) tsx: specifier: ^4.22.4 version: 4.22.4 @@ -1068,6 +1071,9 @@ packages: '@types/node@24.12.4': resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} + '@types/picomatch@4.0.3': + resolution: {integrity: sha512-iG0T6+nYJ9FAPmx9SsUlnwcq1ZVRuCXcVEvWnntoPlrOpwtSTKNDC9uVAxTsC3PUvJ+99n4RpAcNgBbHX3JSnQ==} + '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -1853,6 +1859,10 @@ packages: h3@1.15.11: resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + hast-util-embedded@3.0.0: resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} @@ -2007,6 +2017,10 @@ packages: iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + is-absolute-url@5.0.0: + resolution: {integrity: sha512-sdJyNpBnQHuVnBunfzjAecOhZr2+A30ywfFvu3EnxtKLUWfwGgyWUmqHbGZiU6vTfHpCPm5GvLe4BAvlU9n8VQ==} + engines: {node: '>=20'} + is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -3142,6 +3156,13 @@ packages: spdx-license-ids@3.0.23: resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + starlight-links-validator@0.20.1: + resolution: {integrity: sha512-bPfX9tlvkLcygIwo4nszOf7TOj1iqfZEpUss5oxRlaa3/mt7zGBHANSkanVMd0FK6VQa2oUD9MjH1DszykkwPA==} + engines: {node: '>=22.12.0'} + peerDependencies: + '@astrojs/starlight': '>=0.38.0' + astro: '>=6.0.0' + stream-replace-string@2.0.0: resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} @@ -3199,10 +3220,18 @@ packages: resolution: {integrity: sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==} engines: {node: '>=14.16'} + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + supports-color@9.4.0: resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} engines: {node: '>=12'} + supports-hyperlinks@4.5.0: + resolution: {integrity: sha512-ZW2OvfeCXrNTbLakPUzjQG922EeGCOteFSVoek5DKStTh898wf7zgtuFlzQN8HfZCxC3Eh02yJVrRW51hADf+w==} + engines: {node: '>=20'} + svgo@4.0.1: resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} engines: {node: '>=16'} @@ -3212,6 +3241,10 @@ packages: resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} + terminal-link@5.0.0: + resolution: {integrity: sha512-qFAy10MTMwjzjU8U16YS4YoZD+NQLHzLssFMNqgravjbvIPNiqkGFR4yjhJfmY9R5OFU7+yHxc6y+uGHkKwLRA==} + engines: {node: '>=20'} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -4630,6 +4663,8 @@ snapshots: dependencies: undici-types: 7.16.0 + '@types/picomatch@4.0.3': {} + '@types/sax@1.2.7': dependencies: '@types/node': 24.12.4 @@ -5629,6 +5664,8 @@ snapshots: ufo: 1.6.3 uncrypto: 0.1.3 + has-flag@5.0.1: {} + hast-util-embedded@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -5904,6 +5941,8 @@ snapshots: iron-webcrypto@1.2.1: {} + is-absolute-url@5.0.0: {} + is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -7782,6 +7821,24 @@ snapshots: spdx-license-ids@3.0.23: {} + starlight-links-validator@0.20.1(@astrojs/starlight@0.39.2(astro@6.3.7(@types/node@24.12.4)(rollup@4.59.0)(tsx@4.22.4)(yaml@2.9.0))(typescript@6.0.3))(astro@6.3.7(@types/node@24.12.4)(rollup@4.59.0)(tsx@4.22.4)(yaml@2.9.0)): + dependencies: + '@astrojs/starlight': 0.39.2(astro@6.3.7(@types/node@24.12.4)(rollup@4.59.0)(tsx@4.22.4)(yaml@2.9.0))(typescript@6.0.3) + '@types/picomatch': 4.0.3 + astro: 6.3.7(@types/node@24.12.4)(rollup@4.59.0)(tsx@4.22.4)(yaml@2.9.0) + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-has-property: 3.0.0 + is-absolute-url: 5.0.0 + kleur: 4.1.5 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-to-string: 4.0.0 + picomatch: 4.0.4 + terminal-link: 5.0.0 + unist-util-visit: 5.1.0 + transitivePeerDependencies: + - supports-color + stream-replace-string@2.0.0: {} string-argv@0.3.2: {} @@ -7854,8 +7911,15 @@ snapshots: function-timeout: 0.1.1 time-span: 5.1.0 + supports-color@10.2.2: {} + supports-color@9.4.0: {} + supports-hyperlinks@4.5.0: + dependencies: + has-flag: 5.0.1 + supports-color: 10.2.2 + svgo@4.0.1: dependencies: commander: 11.1.0 @@ -7870,6 +7934,11 @@ snapshots: dependencies: '@pkgr/core': 0.3.6 + terminal-link@5.0.0: + dependencies: + ansi-escapes: 7.3.0 + supports-hyperlinks: 4.5.0 + text-table@0.2.0: {} time-span@5.1.0: diff --git a/src/content/docs/contribution/index.mdx b/src/content/docs/contribution/index.mdx index ebe2acb..187ff30 100644 --- a/src/content/docs/contribution/index.mdx +++ b/src/content/docs/contribution/index.mdx @@ -14,6 +14,6 @@ The current focus is on getting stages 0, 1, and 2 complete and setting up the w This is a great time to get involved with this project and have an impact. - + Join our development Discord diff --git a/src/content/docs/learning-course/index.mdx b/src/content/docs/learning-course/index.mdx index b3dac77..deb9577 100644 --- a/src/content/docs/learning-course/index.mdx +++ b/src/content/docs/learning-course/index.mdx @@ -12,7 +12,7 @@ The progression of the course moves from learning how to write Java to programmi We start individual mechanisms of robots, using the FRC Kitbot, then move to more complex robots. Software in FRC is always changing! If you want to give feedback or have comments, feel free to do so through our [Github](https://github.com/frcsoftware/frcsoftware.org) -or [Discord.](discord.gg/uUugPrPZFs) +or [Discord.](https://discord.com/invite/uUugPrPZFs) -Like we mentioned earlier in [Java Fundamentals](/intro-to-java/java-fundamentals/), all programming languages have syntax that needs to be followed. +Like we mentioned earlier in [Java Fundamentals](/learning-course/stage0/java-fundamentals/), all programming languages have syntax that needs to be followed. One part of syntax is keywords. As a reminder, a keyword is a reserved word that the compiler uses to run the code. In Java, we use the following keywords for conditionals: `if`, `else if`, `else` diff --git a/src/content/docs/learning-course/stage0/stage-overview.mdx b/src/content/docs/learning-course/stage0/stage-overview.mdx index 27521b4..5ecab2a 100644 --- a/src/content/docs/learning-course/stage0/stage-overview.mdx +++ b/src/content/docs/learning-course/stage0/stage-overview.mdx @@ -15,6 +15,6 @@ This will help ensure that you don’t miss any important information. This stage will cover the following topics -- [Java Fundamentals](\learning-course\intro-to-java\java-fundamentals) -- [Operators](\learning-course\stage0\operators/) -- [Conditionals](\learning-course\stage0\conditionals/) +- [Java Fundamentals](/learning-course/stage0/java-fundamentals/) +- [Operators](/learning-course/stage0/operators/) +- [Conditionals](/learning-course/stage0/conditionals/) diff --git a/src/content/docs/learning-course/stage1/stage-overview.mdx b/src/content/docs/learning-course/stage1/stage-overview.mdx index e4e504a..30edaf4 100644 --- a/src/content/docs/learning-course/stage1/stage-overview.mdx +++ b/src/content/docs/learning-course/stage1/stage-overview.mdx @@ -20,5 +20,5 @@ Feel free to play around with the robot and control it in sim once you've finish This stage is composed of the following sub-stages: -- [Stage 1A](../stage-1a/stage-overview) -- [WIP](#) +- [Stage 1A](/learning-course/stage1/stage1a/stage-overview/) +- [Stage 1B](/learning-course/stage1/stage1b/stage-overview/) diff --git a/src/content/docs/learning-course/stage1/stage1a/stage-overview.mdx b/src/content/docs/learning-course/stage1/stage1a/stage-overview.mdx index d9c8609..516030c 100644 --- a/src/content/docs/learning-course/stage1/stage1a/stage-overview.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/stage-overview.mdx @@ -115,4 +115,4 @@ And that's all you need to know to get started! The rest of Stage 1A will cover This stage will cover the following topics: -- [WIP](#) +- [Stage 1A Commands](/learning-course/stage1/stage1b/command-based-overview/) diff --git a/src/content/docs/test-content-figure.mdx b/src/content/docs/test-content-figure.mdx index 2412103..6b8e5ce 100644 --- a/src/content/docs/test-content-figure.mdx +++ b/src/content/docs/test-content-figure.mdx @@ -165,6 +165,6 @@ YouTube video with default border -Learn more about document setup in the [best practices](/best-practices/) section +Learn more about document setup in the [best practices](/best-practices/overview/) section