mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +00:00 
			
		
		
		
	help: Make canonical URL for the root to be /help/.
We also make sure that /help/ is accessible when using the dev server. We add vite as a dependency. v7 of vite is the latest version but using that causes type problems for PluginOptions since astro uses vite v6. Therefore we pin vite to v6 for now. This commit also runs `pnpm dedupe` for `tinyglobby` pinning it to 0.2.15 instead of the previous 0.2.14 in the lockfile.
This commit is contained in:
		
				
					committed by
					
						 Tim Abbott
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							72e3b94855
						
					
				
				
					commit
					9fa09f8f87
				
			| @@ -164,6 +164,7 @@ | |||||||
|     "svgo": "^4.0.0", |     "svgo": "^4.0.0", | ||||||
|     "typescript": "^5.0.2", |     "typescript": "^5.0.2", | ||||||
|     "typescript-eslint": "^8.13.0", |     "typescript-eslint": "^8.13.0", | ||||||
|  |     "vite": "^6.3.5", | ||||||
|     "vnu-jar": "^24.10.17", |     "vnu-jar": "^24.10.17", | ||||||
|     "webpack-dev-server": "^5.0.2", |     "webpack-dev-server": "^5.0.2", | ||||||
|     "xvfb": "^0.4.0", |     "xvfb": "^0.4.0", | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							| @@ -513,6 +513,9 @@ importers: | |||||||
|       typescript-eslint: |       typescript-eslint: | ||||||
|         specifier: ^8.13.0 |         specifier: ^8.13.0 | ||||||
|         version: 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) |         version: 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) | ||||||
|  |       vite: | ||||||
|  |         specifier: ^6.3.5 | ||||||
|  |         version: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) | ||||||
|       vnu-jar: |       vnu-jar: | ||||||
|         specifier: ^24.10.17 |         specifier: ^24.10.17 | ||||||
|         version: 24.10.17 |         version: 24.10.17 | ||||||
| @@ -8865,8 +8868,8 @@ packages: | |||||||
|   tinyexec@1.0.1: |   tinyexec@1.0.1: | ||||||
|     resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} |     resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} | ||||||
|  |  | ||||||
|   tinyglobby@0.2.14: |   tinyglobby@0.2.15: | ||||||
|     resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} |     resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} | ||||||
|     engines: {node: '>=12.0.0'} |     engines: {node: '>=12.0.0'} | ||||||
|  |  | ||||||
|   tinyqueue@2.0.3: |   tinyqueue@2.0.3: | ||||||
| @@ -13008,7 +13011,7 @@ snapshots: | |||||||
|       shiki: 3.12.2 |       shiki: 3.12.2 | ||||||
|       smol-toml: 1.4.2 |       smol-toml: 1.4.2 | ||||||
|       tinyexec: 0.3.2 |       tinyexec: 0.3.2 | ||||||
|       tinyglobby: 0.2.14 |       tinyglobby: 0.2.15 | ||||||
|       tsconfck: 3.1.6(typescript@5.9.2) |       tsconfck: 3.1.6(typescript@5.9.2) | ||||||
|       ultrahtml: 1.6.0 |       ultrahtml: 1.6.0 | ||||||
|       unifont: 0.5.2 |       unifont: 0.5.2 | ||||||
| @@ -20388,7 +20391,7 @@ snapshots: | |||||||
|  |  | ||||||
|   tinyexec@1.0.1: {} |   tinyexec@1.0.1: {} | ||||||
|  |  | ||||||
|   tinyglobby@0.2.14: |   tinyglobby@0.2.15: | ||||||
|     dependencies: |     dependencies: | ||||||
|       fdir: 6.5.0(picomatch@4.0.3) |       fdir: 6.5.0(picomatch@4.0.3) | ||||||
|       picomatch: 4.0.3 |       picomatch: 4.0.3 | ||||||
| @@ -20964,7 +20967,7 @@ snapshots: | |||||||
|       picomatch: 4.0.3 |       picomatch: 4.0.3 | ||||||
|       postcss: 8.5.6 |       postcss: 8.5.6 | ||||||
|       rollup: 4.50.0 |       rollup: 4.50.0 | ||||||
|       tinyglobby: 0.2.14 |       tinyglobby: 0.2.15 | ||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/node': 22.18.1 |       '@types/node': 22.18.1 | ||||||
|       fsevents: 2.3.3 |       fsevents: 2.3.3 | ||||||
|   | |||||||
| @@ -27,8 +27,13 @@ location /static/ { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| # Redirect to links without the trailing slash. | # Canonical URL for the root is /help/. | ||||||
| location ~ ^(/help(?:/[^/]+)*)/+$ { | location = /help { | ||||||
|  |     return 301 /help/; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Redirect to links without the trailing slash except for root /help/. | ||||||
|  | location ~ ^(/help(?:/[^/]+)+)/+$ { | ||||||
|     return 301 $1$is_args$args; |     return 301 $1$is_args$args; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,6 +7,53 @@ import {defineConfig, envField} from "astro/config"; | |||||||
| import compressor from "astro-compressor"; | import compressor from "astro-compressor"; | ||||||
| import Icons from "unplugin-icons/vite"; | import Icons from "unplugin-icons/vite"; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @returns {import("vite").PluginOption} | ||||||
|  |  */ | ||||||
|  | function createRedirectPlugin() { | ||||||
|  |     // Astro and starlight middlewares run after astro's vite middleware, | ||||||
|  |     // which gives error before our logic here could run, so the only option | ||||||
|  |     // left with us was to use a vite plugin. | ||||||
|  |     return { | ||||||
|  |         name: "redirect-plugin", | ||||||
|  |         enforce: "post", | ||||||
|  |         /** | ||||||
|  |          * configureServer only runs in development mode, we handle the redirects | ||||||
|  |          * in production using nginx. | ||||||
|  |          * @param {import("vite").ViteDevServer} server | ||||||
|  |          */ | ||||||
|  |         configureServer(server) { | ||||||
|  |             return () => { | ||||||
|  |                 // The method exposed by the connect app at server.middlewares is `use`. | ||||||
|  |                 // But `use` appends our middleware at the end of the stack, before which | ||||||
|  |                 // the trailingSlashMiddleware of astro runs and gives an error before it | ||||||
|  |                 // can reach our middleware. `stack.unshift` ensures our middleware runs | ||||||
|  |                 // first. | ||||||
|  |                 server.middlewares.stack.unshift({ | ||||||
|  |                     route: "", | ||||||
|  |                     /** | ||||||
|  |                      * @param {import("http").IncomingMessage} req | ||||||
|  |                      * @param {import("http").ServerResponse} _res | ||||||
|  |                      * @param {Function} next | ||||||
|  |                      */ | ||||||
|  |                     handle(req, _res, next) { | ||||||
|  |                         // Canonical URL for the root of the help center is /help/, | ||||||
|  |                         // but for all other help URLs, there should be no trailingSlash. | ||||||
|  |                         // We have set trailingSlash to never in astro. Setting it to ignore | ||||||
|  |                         // will make our /help/ work, but it causes sidebar and other | ||||||
|  |                         // components to generate links with a trailingSlash at the end. So | ||||||
|  |                         // we manually handle this case. | ||||||
|  |                         if (req.url === "/help/") { | ||||||
|  |                             req.url = "/help"; | ||||||
|  |                         } | ||||||
|  |                         next(); | ||||||
|  |                     }, | ||||||
|  |                 }); | ||||||
|  |             }; | ||||||
|  |         }, | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  |  | ||||||
| // https://astro.build/config | // https://astro.build/config | ||||||
| export default defineConfig({ | export default defineConfig({ | ||||||
|     base: "help", |     base: "help", | ||||||
| @@ -47,6 +94,7 @@ export default defineConfig({ | |||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|             }), |             }), | ||||||
|  |             createRedirectPlugin(), | ||||||
|         ], |         ], | ||||||
|         ssr: { |         ssr: { | ||||||
|             noExternal: ["zod"], |             noExternal: ["zod"], | ||||||
|   | |||||||
| @@ -49,4 +49,4 @@ API_FEATURE_LEVEL = 427 | |||||||
| #   historical commits sharing the same major version, in which case a | #   historical commits sharing the same major version, in which case a | ||||||
| #   minor version bump suffices. | #   minor version bump suffices. | ||||||
|  |  | ||||||
| PROVISION_VERSION = (351, 1)  # bumped 2025-10-02 to add PyICU | PROVISION_VERSION = (351, 2)  # bumped 2025-10-01 to add vite to starlight_help | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user