- Documents the following components in Storybook: - `btrix-data-table` - `btrix-table` - `btrix-crawl-log-table` - `btrix-custom-behaviors-table` - `btrix-link-selector-table` - `btrix-queue-exclusion-table` - `btrix-queue-exclusion-form` - Refactors `btrix-table` and subcomponents to simplify CSS properties - Fixes crawl exclusion table delete button not rendering - Fixes Shoelace assets not loading Storybook
140 lines
3.7 KiB
JavaScript
140 lines
3.7 KiB
JavaScript
// @ts-check
|
|
const path = require("path");
|
|
|
|
const ESLintPlugin = require("eslint-webpack-plugin");
|
|
const webpack = require("webpack");
|
|
const { merge } = require("webpack-merge");
|
|
|
|
const {
|
|
shoelaceAssetsSrcPath,
|
|
shoelaceAssetsPublicPath,
|
|
} = require("./config/webpack/shoelace.js");
|
|
const baseConfigs = require("./webpack.config.js");
|
|
const [main, vnc] = baseConfigs;
|
|
|
|
if (!process.env.API_BASE_URL) {
|
|
throw new Error(
|
|
"To run a dev frontend server, please set the API_BASE_URL pointing to your backend api server in '.env.local'",
|
|
);
|
|
}
|
|
|
|
// for testing: for prod, using the version specified in Helm values.yaml
|
|
const RWP_BASE_URL =
|
|
process.env.RWP_BASE_URL || "https://cdn.jsdelivr.net/npm/replaywebpage/";
|
|
|
|
const devBackendUrl = new URL(process.env.API_BASE_URL);
|
|
|
|
/** @type {import('webpack').Configuration['plugins']} */
|
|
const plugins = [
|
|
new ESLintPlugin({
|
|
extensions: ["ts", "js"],
|
|
}),
|
|
];
|
|
|
|
// Dev config may be used in Playwright E2E CI tests
|
|
if (process.env.WEBPACK_SERVE === "true") {
|
|
let litManifest;
|
|
|
|
try {
|
|
litManifest = require.resolve(
|
|
path.join(__dirname, "dist/vendor/lit-manifest.json"),
|
|
);
|
|
} catch {
|
|
console.warn(
|
|
"`lit-manifest.json` not found. If you're seeing this with `yarn start`, ensure the file exists. You can ignore this message otherwise.",
|
|
);
|
|
}
|
|
|
|
if (litManifest) {
|
|
plugins.unshift(
|
|
// Speed up rebuilds by excluding vendor modules
|
|
new webpack.DllReferencePlugin({
|
|
manifest: require.resolve(
|
|
path.join(__dirname, "dist/vendor/lit-manifest.json"),
|
|
),
|
|
}),
|
|
);
|
|
}
|
|
}
|
|
|
|
module.exports = [
|
|
merge(main, {
|
|
devtool: "eval",
|
|
/** @type {import('webpack-dev-server').Configuration} */
|
|
devServer: {
|
|
watchFiles: ["src/**/*", __filename],
|
|
open: true,
|
|
compress: false,
|
|
hot: false,
|
|
static: [
|
|
{
|
|
directory: shoelaceAssetsSrcPath,
|
|
publicPath: "/" + shoelaceAssetsPublicPath,
|
|
},
|
|
{
|
|
directory: path.join(__dirname, "dist/vendor"),
|
|
publicPath: "/vendor",
|
|
},
|
|
],
|
|
historyApiFallback: true,
|
|
proxy: [
|
|
{
|
|
context: "/api",
|
|
|
|
target: devBackendUrl.href,
|
|
headers: {
|
|
Host: devBackendUrl.host,
|
|
},
|
|
ws: true,
|
|
},
|
|
{
|
|
context: "/data",
|
|
target: devBackendUrl.href,
|
|
headers: {
|
|
Host: devBackendUrl.host,
|
|
},
|
|
},
|
|
],
|
|
setupMiddlewares: (middlewares, server) => {
|
|
// Serve replay service worker file
|
|
server.app?.get("/replay/sw.js", (req, res) => {
|
|
res.set("Content-Type", "application/javascript");
|
|
res.send(`importScripts("${RWP_BASE_URL}sw.js")`);
|
|
});
|
|
|
|
server.app?.get("/replay/ui.js", (req, res) => {
|
|
res.set("Content-Type", "application/javascript");
|
|
res.redirect(307, RWP_BASE_URL + "ui.js");
|
|
});
|
|
|
|
// serve a 404 page for /replay/ path, as that should be taken over by RWP
|
|
server.app?.get("/replay/*", (req, res) => {
|
|
res.set("Content-Type", "application/javascript");
|
|
res.status(404).send(`{"error": "placeholder_for_replay"}`);
|
|
});
|
|
|
|
// Serve analytics script, which is set in prod as an env variable by the Helm chart
|
|
server.app?.get("/extra.js", (req, res) => {
|
|
res.set("Content-Type", "application/javascript");
|
|
res.status(200).send(process.env.INJECT_EXTRA || "");
|
|
});
|
|
|
|
return middlewares;
|
|
},
|
|
port: 9870,
|
|
},
|
|
cache: {
|
|
type: "filesystem",
|
|
hashAlgorithm: "xxhash64",
|
|
buildDependencies: {
|
|
config: [__filename],
|
|
},
|
|
},
|
|
plugins,
|
|
}),
|
|
{
|
|
...vnc,
|
|
mode: "production",
|
|
},
|
|
];
|