web-dev-server: serve some missing static assets
webcomponents-lite.js is exposed by index.html under /bower_components/
which is under the root dir when developping. When building Gerrit, the
file is copied by polygerrit_bundle().
Redirect to the in-tree files installed by yarn.
The fonts are also outside of the root dir, stream them from the
filesystem.
Release-Notes: skip
Change-Id: I10ad8a27bab2e5392b4c276346451caa6ec008c5
diff --git a/web-dev-server.config.mjs b/web-dev-server.config.mjs
index 2896649..53a240e 100644
--- a/web-dev-server.config.mjs
+++ b/web-dev-server.config.mjs
@@ -1,5 +1,7 @@
import { esbuildPlugin } from "@web/dev-server-esbuild";
import cors from "@koa/cors";
+import path from 'node:path';
+import fs from 'node:fs';
/** @type {import('@web/dev-server').DevServerConfig} */
export default {
@@ -18,6 +20,20 @@
// (ex: gerrit-review.googlesource.com), which happens during local
// development with Gerrit FE Helper extension.
cors({ origin: "*" }),
+ // Map some static assets.
+ // When creating the bundle, the files are moved by polygerrit_bundle() in
+ // polygerrit-ui/app/rules.bzl
+ async (context, next) => {
+
+ if ( context.url.includes("/bower_components/webcomponentsjs/webcomponents-lite.js") ) {
+ context.response.redirect("/node_modules/@webcomponents/webcomponentsjs/webcomponents-lite.js");
+
+ } else if ( context.url.startsWith( "/fonts/" ) ) {
+ const fontFile = path.join( "lib/fonts", path.basename(context.url) );
+ context.body = fs.createReadStream( fontFile );
+ }
+ await next();
+ },
// The issue solved here is that our production index.html does not load
// 'gr-app.js' as an ESM module due to our build process, but in development
// all our source code is written as ESM modules. When using the Gerrit FE