mirror of
				https://github.com/home-assistant/frontend.git
				synced 2025-10-31 14:39:38 +00:00 
			
		
		
		
	 bd0bfc1fbe
			
		
	
	bd0bfc1fbe
	
	
	
		
			
			* Add rspack * Remove TransformAsyncModulesPlugin from rspack * Migrate all webpack usage to rspack * Migrate tests to vitest * Fix test suites * Remove chai dependency * Fix compute_state_display tests * Fix resolveTimeZone * Reduces test pipeline * Revert test ci * optimize chunk filtering * Migrate landing-page to rspack * Update rspack dependencies * Add rsdoctor * Fix prod build bundle size * Use rsdoctor for demo stats * Remove unused webpack configs * Update build-scripts/rspack.cjs Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com> * Fix eslint * Update rspack * Remove unused code --------- Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
		
			
				
	
	
		
			233 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Tasks to run rspack.
 | |
| 
 | |
| import fs from "fs";
 | |
| import path from "path";
 | |
| import log from "fancy-log";
 | |
| import gulp from "gulp";
 | |
| import rspack from "@rspack/core";
 | |
| import { RspackDevServer } from "@rspack/dev-server";
 | |
| import env from "../env.cjs";
 | |
| import paths from "../paths.cjs";
 | |
| import {
 | |
|   createAppConfig,
 | |
|   createCastConfig,
 | |
|   createDemoConfig,
 | |
|   createGalleryConfig,
 | |
|   createHassioConfig,
 | |
|   createLandingPageConfig,
 | |
| } from "../rspack.cjs";
 | |
| 
 | |
| const bothBuilds = (createConfigFunc, params) => [
 | |
|   createConfigFunc({ ...params, latestBuild: true }),
 | |
|   createConfigFunc({ ...params, latestBuild: false }),
 | |
| ];
 | |
| 
 | |
| const isWsl =
 | |
|   fs.existsSync("/proc/version") &&
 | |
|   fs
 | |
|     .readFileSync("/proc/version", "utf-8")
 | |
|     .toLocaleLowerCase()
 | |
|     .includes("microsoft");
 | |
| 
 | |
| /**
 | |
|  * @param {{
 | |
|  *   compiler: import("@rspack/core").Compiler,
 | |
|  *   contentBase: string,
 | |
|  *   port: number,
 | |
|  *   listenHost?: string
 | |
|  * }}
 | |
|  */
 | |
| const runDevServer = async ({
 | |
|   compiler,
 | |
|   contentBase,
 | |
|   port,
 | |
|   listenHost = undefined,
 | |
|   proxy = undefined,
 | |
| }) => {
 | |
|   if (listenHost === undefined) {
 | |
|     // For dev container, we need to listen on all hosts
 | |
|     listenHost = env.isDevContainer() ? "0.0.0.0" : "localhost";
 | |
|   }
 | |
|   const server = new RspackDevServer(
 | |
|     {
 | |
|       hot: false,
 | |
|       open: true,
 | |
|       host: listenHost,
 | |
|       port,
 | |
|       static: {
 | |
|         directory: contentBase,
 | |
|         watch: true,
 | |
|       },
 | |
|       proxy,
 | |
|     },
 | |
|     compiler
 | |
|   );
 | |
| 
 | |
|   await server.start();
 | |
|   // Server listening
 | |
|   log("[rspack-dev-server]", `Project is running at http://localhost:${port}`);
 | |
| };
 | |
| 
 | |
| const doneHandler = (done) => (err, stats) => {
 | |
|   if (err) {
 | |
|     log.error(err.stack || err);
 | |
|     if (err.details) {
 | |
|       log.error(err.details);
 | |
|     }
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   if (stats.hasErrors() || stats.hasWarnings()) {
 | |
|     console.log(stats.toString("minimal"));
 | |
|   }
 | |
| 
 | |
|   log(`Build done @ ${new Date().toLocaleTimeString()}`);
 | |
| 
 | |
|   if (done) {
 | |
|     done();
 | |
|   }
 | |
| };
 | |
| 
 | |
| const prodBuild = (conf) =>
 | |
|   new Promise((resolve) => {
 | |
|     rspack(
 | |
|       conf,
 | |
|       // Resolve promise when done. Because we pass a callback, rspack closes itself
 | |
|       doneHandler(resolve)
 | |
|     );
 | |
|   });
 | |
| 
 | |
| gulp.task("rspack-watch-app", () => {
 | |
|   // This command will run forever because we don't close compiler
 | |
|   rspack(
 | |
|     process.env.ES5
 | |
|       ? bothBuilds(createAppConfig, { isProdBuild: false })
 | |
|       : createAppConfig({ isProdBuild: false, latestBuild: true })
 | |
|   ).watch({ poll: isWsl }, doneHandler());
 | |
|   gulp.watch(
 | |
|     path.join(paths.translations_src, "en.json"),
 | |
|     gulp.series("build-translations", "copy-translations-app")
 | |
|   );
 | |
| });
 | |
| 
 | |
| gulp.task("rspack-prod-app", () =>
 | |
|   prodBuild(
 | |
|     bothBuilds(createAppConfig, {
 | |
|       isProdBuild: true,
 | |
|       isStatsBuild: env.isStatsBuild(),
 | |
|       isTestBuild: env.isTestBuild(),
 | |
|     })
 | |
|   )
 | |
| );
 | |
| 
 | |
| gulp.task("rspack-dev-server-demo", () =>
 | |
|   runDevServer({
 | |
|     compiler: rspack(
 | |
|       createDemoConfig({ isProdBuild: false, latestBuild: true })
 | |
|     ),
 | |
|     contentBase: paths.demo_output_root,
 | |
|     port: 8090,
 | |
|   })
 | |
| );
 | |
| 
 | |
| gulp.task("rspack-prod-demo", () =>
 | |
|   prodBuild(
 | |
|     bothBuilds(createDemoConfig, {
 | |
|       isProdBuild: true,
 | |
|       isStatsBuild: env.isStatsBuild(),
 | |
|     })
 | |
|   )
 | |
| );
 | |
| 
 | |
| gulp.task("rspack-dev-server-cast", () =>
 | |
|   runDevServer({
 | |
|     compiler: rspack(
 | |
|       createCastConfig({ isProdBuild: false, latestBuild: true })
 | |
|     ),
 | |
|     contentBase: paths.cast_output_root,
 | |
|     port: 8080,
 | |
|     // Accessible from the network, because that's how Cast hits it.
 | |
|     listenHost: "0.0.0.0",
 | |
|   })
 | |
| );
 | |
| 
 | |
| gulp.task("rspack-prod-cast", () =>
 | |
|   prodBuild(
 | |
|     bothBuilds(createCastConfig, {
 | |
|       isProdBuild: true,
 | |
|     })
 | |
|   )
 | |
| );
 | |
| 
 | |
| gulp.task("rspack-watch-hassio", () => {
 | |
|   // This command will run forever because we don't close compiler
 | |
|   rspack(
 | |
|     createHassioConfig({
 | |
|       isProdBuild: false,
 | |
|       latestBuild: true,
 | |
|     })
 | |
|   ).watch({ ignored: /build/, poll: isWsl }, doneHandler());
 | |
| 
 | |
|   gulp.watch(
 | |
|     path.join(paths.translations_src, "en.json"),
 | |
|     gulp.series("build-supervisor-translations", "copy-translations-supervisor")
 | |
|   );
 | |
| });
 | |
| 
 | |
| gulp.task("rspack-prod-hassio", () =>
 | |
|   prodBuild(
 | |
|     bothBuilds(createHassioConfig, {
 | |
|       isProdBuild: true,
 | |
|       isStatsBuild: env.isStatsBuild(),
 | |
|       isTestBuild: env.isTestBuild(),
 | |
|     })
 | |
|   )
 | |
| );
 | |
| 
 | |
| gulp.task("rspack-dev-server-gallery", () =>
 | |
|   runDevServer({
 | |
|     compiler: rspack(
 | |
|       createGalleryConfig({ isProdBuild: false, latestBuild: true })
 | |
|     ),
 | |
|     contentBase: paths.gallery_output_root,
 | |
|     port: 8100,
 | |
|     listenHost: "0.0.0.0",
 | |
|   })
 | |
| );
 | |
| 
 | |
| gulp.task("rspack-prod-gallery", () =>
 | |
|   prodBuild(
 | |
|     createGalleryConfig({
 | |
|       isProdBuild: true,
 | |
|       latestBuild: true,
 | |
|     })
 | |
|   )
 | |
| );
 | |
| 
 | |
| gulp.task("rspack-watch-landing-page", () => {
 | |
|   // This command will run forever because we don't close compiler
 | |
|   rspack(
 | |
|     process.env.ES5
 | |
|       ? bothBuilds(createLandingPageConfig, { isProdBuild: false })
 | |
|       : createLandingPageConfig({ isProdBuild: false, latestBuild: true })
 | |
|   ).watch({ poll: isWsl }, doneHandler());
 | |
| 
 | |
|   gulp.watch(
 | |
|     path.join(paths.translations_src, "en.json"),
 | |
|     gulp.series(
 | |
|       "build-landing-page-translations",
 | |
|       "copy-translations-landing-page"
 | |
|     )
 | |
|   );
 | |
| });
 | |
| 
 | |
| gulp.task("rspack-prod-landing-page", () =>
 | |
|   prodBuild(
 | |
|     bothBuilds(createLandingPageConfig, {
 | |
|       isProdBuild: true,
 | |
|       isStatsBuild: env.isStatsBuild(),
 | |
|       isTestBuild: env.isTestBuild(),
 | |
|     })
 | |
|   )
 | |
| );
 |