mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +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
					
				
			
			
				
	
			
			
			
						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